diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index ed255a80ce6..511a885dd0b 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -5,44 +5,20 @@
# to the same file or dir, add them to the end under Multiple Owners
# GoldenAlpharex
-/modular_skyrat/ @GoldenAlpharex
+/.github/workflows/ @GoldenAlpharex
+/SQL/ @GoldenAlpharex
/tools/ @GoldenAlpharex
-
-# Jake Park
-/modular_skyrat/modules/apocolypse_of_scythes/ @jjpark-kb
-/modular_skyrat/modules/ash_chemical_centrifuge/ @jjpark-kb
-/modular_skyrat/modules/ash_farming/ @jjpark-kb
-/modular_skyrat/modules/ashwalker_change/ @jjpark-kb
-/modular_skyrat/modules/ashwalker_shaman/ @jjpark-kb
-/modular_skyrat/modules/borg_buffs/ @jjpark-kb
-/modular_skyrat/modules/cargo_teleporter/ @jjpark-kb
-/modular_skyrat/modules/conveyor_sorter/ @jjpark-kb
-/modular_skyrat/modules/cortical_borer/ @jjpark-kb
-/modular_skyrat/modules/connecting_computer/ @jjpark-kb
-/modular_skyrat/modules/fishing/ @jjpark-kb
-/modular_skyrat/modules/positronic_alert_console/ @jjpark-kb
-/modular_skyrat/modules/primitive_production/ @jjpark-kb
-/modular_skyrat/modules/reagent_forging/ @jjpark-kb
-/modular_skyrat/modules/xenoarch/ @jjpark-kb
+/modular_nova/ @GoldenAlpharex
+/icons/ @GoldenAlpharex
# Jolly-66
-/modular_skyrat/modules/mapping @Jolly-66
+/modular_nova/modules/mapping @Jolly-66
/tools/UpdatePaths @Jolly-66
-# LT3
-/code/modules/transport/ @lessthnthree
-/modular_skyrat/master_files/code/controllers/subsystem/ @lessthnthree
-/modular_skyrat/modules/advanced_engineering/ @lessthnthree
-/modular_skyrat/modules/airlock_override/ @lessthnthree
-/modular_skyrat/modules/alerts/ @lessthnthree
-/modular_skyrat/modules/cme/ @lessthnthree
-/modular_skyrat/modules/events/ @lessthnthree
-/modular_skyrat/modules/ices_events/ @lessthnthree
-
# Multiple Owners
# Maptainers
-/_maps/ @Jolly-66 @KathrinBailey
+/_maps/ @Jolly-66
# Expensive files that touching basically always cause performance problems
## Init times
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index c7af887cac4..14db6cf1297 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -164,7 +164,7 @@ If you are porting features/tools from other codebases, you must give them credi
Regarding sprites & sounds, you must credit the artist and possibly the codebase. All /tg/station assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
-Regarding sprites in particular, you still need to take your own screenshots of the sprites in-game on your Skyrat code in your PR body, not just re-use the screenshots provided in the original PR.
+Regarding sprites in particular, you still need to take your own screenshots of the sprites in-game on your Nova Sector code in your PR body, not just re-use the screenshots provided in the original PR.
## Banned content
Do not add any of the following in a Pull Request or risk getting the PR closed:
diff --git a/.github/workflows/auto_changelog.yml b/.github/workflows/auto_changelog.yml
index 7fde51b119b..cbdeccbc5a0 100644
--- a/.github/workflows/auto_changelog.yml
+++ b/.github/workflows/auto_changelog.yml
@@ -21,4 +21,4 @@ jobs:
script: |
const { processAutoChangelog } = await import('${{ github.workspace }}/tools/pull_request_hooks/autoChangelog.js')
await processAutoChangelog({ github, context })
- github-token: ${{ secrets.SKYRATBOT_TOKEN || secrets.GITHUB_TOKEN }}
+ github-token: ${{ secrets.NOVABOT_TOKEN || secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index e5a0995c812..42e6d827c47 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -73,14 +73,14 @@ jobs:
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
bash tools/ci/check_grep.sh
- bash skyrat/tools/skyrat_check_grep.sh # SKYRAT EDIT ADDITION - checking modular_skyrat code
+ bash skyrat/tools/skyrat_check_grep.sh # NOVA EDIT ADDITION - checking modular_nova code
bash fluffy/tools/fluffy_check_grep.sh # FLUFFY EDIT ADDITION - checking tff_modular code
- name: Ticked File Enforcement
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: |
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/tgstation_dme.json
tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/unit_tests.json
- tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/modular_skyrat.json # SKYRAT EDIT ADDITION - modular tick enforcement
+ tools/bootstrap/python tools/ticked_file_enforcement/ticked_file_enforcement.py < tools/ticked_file_enforcement/schemas/modular_nova.json # NOVA EDIT ADDITION - modular tick enforcement
- name: Check Define Sanity
if: steps.linter-setup.conclusion == 'success' && !cancelled()
run: tools/bootstrap/python -m define_sanity.check
diff --git a/.github/workflows/codeowner_reviews.yml b/.github/workflows/codeowner_reviews.yml
index a461a96d931..67f41af03cb 100644
--- a/.github/workflows/codeowner_reviews.yml
+++ b/.github/workflows/codeowner_reviews.yml
@@ -1,19 +1,21 @@
name: Codeowner Reviews
# Controls when the workflow will run
-on: pull_request_target
+on:
+ pull_request_target:
+ types: [opened, synchronize, reopened, ready_for_review]
jobs:
assign-users:
runs-on: ubuntu-latest
-
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v3
- #Parse the Codeowner file
+ #Parse the Codeowner file on non draft PRs
- name: CodeOwnersParser
+ if: github.event.pull_request.draft == false
id: CodeOwnersParser
uses: tgstation/CodeOwnersParser@v1
diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml
index 7983138649e..291f2994da9 100644
--- a/.github/workflows/compile_changelogs.yml
+++ b/.github/workflows/compile_changelogs.yml
@@ -51,4 +51,4 @@ jobs:
if: steps.value_holder.outputs.ACTIONS_ENABLED
uses: ad-m/github-push-action@master
with:
- github_token: ${{ secrets.SKYRATBOT_TOKEN }}
+ github_token: ${{ secrets.NOVABOT_TOKEN ||secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 17f60f5255a..8e3f5638624 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -1,19 +1,17 @@
name: PR Labeler
on:
- push:
- branches:
- - master
- pull_request_target:
+ - pull_request_target
jobs:
Label:
+ permissions:
+ contents: read
+ pull-requests: write
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v4
- name: Apply labels based on changed files
- if: github.event_name != 'push'
+ if: ${{ github.event_name != 'push'}}
uses: actions/labeler@v5
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/tgs_test.yml b/.github/workflows/tgs_test.yml
index 4925019bc6a..6a9316f493a 100644
--- a/.github/workflows/tgs_test.yml
+++ b/.github/workflows/tgs_test.yml
@@ -50,7 +50,7 @@ jobs:
env:
Database__DatabaseType: Sqlite
Database__ConnectionString: Data Source=TGS_TGTest.sqlite3;Mode=ReadWriteCreate
- General__ConfigVersion: 4.1.0
+ General__ConfigVersion: 5.0.0
General__ApiPort: ${{ env.TGS_API_PORT }}
General__SetupWizardMode: Never
ports:
@@ -59,7 +59,7 @@ jobs:
- name: Setup dotnet
uses: actions/setup-dotnet@v2
with:
- dotnet-version: 7.0.x
+ dotnet-version: 8.0.x
- name: Checkout Repository
uses: actions/checkout@v3
diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml
index aae81f7e0d8..bbd237c102d 100644
--- a/.github/workflows/update_tgs_dmapi.yml
+++ b/.github/workflows/update_tgs_dmapi.yml
@@ -44,4 +44,4 @@ jobs:
pr_body: "This pull request updates the TGS DMAPI to the latest version. Please note any changes that may be breaking or unimplemented in your codebase by checking what changes are in the definitions file: code/__DEFINES/tgs.dm before merging."
pr_label: "Tools"
pr_allow_empty: false
- github_token: ${{ secrets.COMFY_ORANGE_PAT }}
+ github_token: ${{ secrets.NOVABOT_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 1c74dfcdf37..97393735c82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -210,7 +210,7 @@ Temporary Items
# Autowiki
/tools/autowiki/node_modules
-# TGUI bundles - SKYRAT EDIT
+# TGUI bundles - NOVA EDIT
/tgui/public/tgui-common.bundle.js
# Built auxtools libraries and intermediate files
diff --git a/SQL/database_changelog.md b/SQL/database_changelog.md
index 5e8317a8f85..52a0a5535ba 100644
--- a/SQL/database_changelog.md
+++ b/SQL/database_changelog.md
@@ -131,7 +131,7 @@ Version 5.18, 23 August 2021, by GoldenAlpharex
Added `discord_report` column to the `ban table`
```sql
-`discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* SKYRAT EDIT - Labelling bans for ease of reporting them over Discord. */
+`discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* NOVA EDIT - Labelling bans for ease of reporting them over Discord. */
```
-----------------------------------------------------
diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql
index e7167f766df..3c7131035b7 100644
--- a/SQL/tgstation_schema.sql
+++ b/SQL/tgstation_schema.sql
@@ -93,7 +93,7 @@ CREATE TABLE `ban` (
`unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL,
`unbanned_computerid` VARCHAR(32) NULL DEFAULT NULL,
`unbanned_round_id` INT(11) UNSIGNED NULL DEFAULT NULL,
- `discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* SKYRAT EDIT - Labelling bans for ease of reporting them over Discord. */
+ `discord_reported` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', /* NOVA EDIT - Labelling bans for ease of reporting them over Discord. */
PRIMARY KEY (`id`),
KEY `idx_ban_isbanned` (`ckey`,`role`,`unbanned_datetime`,`expiration_time`),
KEY `idx_ban_isbanned_details` (`ckey`,`ip`,`computerid`,`role`,`unbanned_datetime`,`expiration_time`),
diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
index 9a4abac267d..8f823063856 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm
@@ -1,197 +1,295 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
-/turf/closed/indestructible/rock/snow/ice/ore,
-/area/icemoon/underground/explored)
-"b" = (
-/turf/open/misc/asteroid/snow/ice/icemoon,
-/area/icemoon/underground/unexplored)
-"d" = (
/turf/template_noop,
/area/template_noop)
+"c" = (
+/obj/structure/flora/rock/pile/icy/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/unexplored)
+"d" = (
+/obj/structure/flora/tree/pine/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"e" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"g" = (
+/obj/structure/flora/rock/pile/icy/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"h" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
"j" = (
-/obj/effect/mob_spawn/corpse/human/miner/explorer,
-/turf/open/misc/asteroid/snow/ice/icemoon,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"k" = (
+/obj,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/unexplored)
+"l" = (
+/turf/closed/indestructible/rock/snow/ice/ore,
+/area/icemoon/underground/explored)
+"m" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"n" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"o" = (
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored)
+"p" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
"q" = (
-/mob/living/simple_animal/hostile/megafauna/wendigo,
+/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored)
-"z" = (
-/obj/effect/landmark/portal_exit{
+"t" = (
+/obj/effect/portal/permanent/one_way{
id = "wendigo arena"
},
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
+/area/icemoon/underground/unexplored)
+"u" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"w" = (
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 11;
+ pixel_y = 18
+ },
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"y" = (
+/obj/structure/flora/grass/both/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/unexplored)
+"z" = (
+/obj/structure/flora/grass/brown/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"A" = (
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"B" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"C" = (
+/obj/effect/mob_spawn/corpse/human/miner/explorer,
+/obj/effect/decal/cleanable/blood/gibs/old,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/unexplored)
+"D" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"F" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 8;
+ pixel_y = 11
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/unexplored)
+"G" = (
+/obj/structure/flora/rock/pile/icy/style_random,
+/obj/structure/flora/grass/brown/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored)
+"H" = (
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"I" = (
+/turf/closed/indestructible/rock/snow/ice/ore,
+/area/icemoon/underground/unexplored)
+"J" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/unexplored)
"K" = (
-/obj/effect/landmark/portal_exit{
- id = "wendigo arena exit"
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
},
-/turf/open/misc/asteroid/snow/ice/icemoon,
+/area/icemoon/underground/explored)
+"L" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"M" = (
+/obj/structure/flora/tree/pine/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored)
"N" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/unexplored)
+"O" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored)
-"U" = (
-/obj/item/paper/crumpled/bloody{
- default_raw_text = "for your own sake, do not enter"
+"P" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"Q" = (
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = -5
+ },
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 7;
+ pixel_y = 17
+ },
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 10;
+ pixel_y = 7
},
-/turf/open/misc/asteroid/snow/ice/icemoon,
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored)
-"V" = (
-/obj/effect/portal/permanent/one_way{
+"R" = (
+/obj/effect/landmark/portal_exit{
id = "wendigo arena"
},
-/turf/open/misc/asteroid/snow/ice/icemoon,
+/obj/effect/decal/cleanable/blood/drip,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"S" = (
+/obj/structure/flora/grass/brown/style_random,
+/turf/closed/indestructible/rock/snow/ice/ore,
+/area/icemoon/underground/explored)
+"T" = (
+/obj/structure/flora/rock/pile/icy/style_3,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored)
+"U" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"V" = (
+/obj/effect/landmark/portal_exit{
+ id = "wendigo arena exit"
+ },
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/unexplored)
+"W" = (
+/mob/living/simple_animal/hostile/megafauna/wendigo,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"X" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"Y" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
+"Z" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored)
(1,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-"}
-(2,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-"}
-(3,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-d
-d
-d
-d
-d
-d
-d
-d
-"}
-(4,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-d
-d
-d
-d
-d
-d
-d
-"}
-(5,1,1) = {"
-d
-d
-d
-d
-d
-d
-b
-b
-b
a
a
a
@@ -205,25 +303,6 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-d
-d
-d
-"}
-(6,1,1) = {"
-d
-d
-d
-d
-d
-b
-b
-b
a
a
a
@@ -239,23 +318,37 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-d
-d
-"}
-(7,1,1) = {"
-d
-d
-d
-d
-b
-b
-b
+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
+a
+a
+a
+a
+a
a
a
a
@@ -263,6 +356,8 @@ a
a
a
a
+"}
+(3,1,1) = {"
a
a
a
@@ -270,30 +365,58 @@ a
a
a
a
+o
+o
+o
+o
+y
+y
+o
+o
+o
+o
+o
+y
+o
+o
+o
+o
+o
+a
+a
+a
+a
+a
a
a
a
-b
-b
-b
-d
-d
-d
-d
"}
-(8,1,1) = {"
-d
-d
-d
-b
-b
-b
+(4,1,1) = {"
a
a
a
a
a
a
+o
+o
+y
+l
+I
+M
+o
+c
+o
+o
+o
+o
+o
+o
+y
+y
+o
+o
+o
a
a
a
@@ -301,657 +424,926 @@ a
a
a
a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+o
+o
+y
+o
+l
+l
+l
+l
+l
+y
+o
+o
+M
+l
+l
+l
+l
+l
+o
+c
+o
a
a
a
a
a
a
-b
-b
-b
-d
-d
-d
"}
-(9,1,1) = {"
-d
-d
-b
-b
-b
+(6,1,1) = {"
a
a
a
a
+o
+o
+o
+y
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+M
+c
+o
+o
+o
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
a
a
+"}
+(7,1,1) = {"
+a
+a
+a
+o
+o
+o
+c
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+o
+o
+y
+o
+o
+o
+a
a
a
a
-b
-b
-b
-d
-d
"}
-(10,1,1) = {"
-d
-d
-b
-b
+(8,1,1) = {"
a
a
a
+o
+o
+M
+l
+l
+l
+l
+l
+l
+l
+d
+H
+z
+g
+g
+l
+l
+l
+l
+l
+l
+M
+o
+o
+o
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
+"}
+(9,1,1) = {"
a
a
a
+o
+o
+y
+l
+l
+l
+l
+l
+z
+H
+H
+h
+Z
+H
+z
+z
+H
+l
+l
+l
+l
+l
+y
+y
+o
+a
+a
a
a
-b
-b
-d
-d
"}
-(11,1,1) = {"
-d
-d
-b
-b
+(10,1,1) = {"
a
a
a
+k
+M
+y
+l
+l
+l
+l
+g
+H
+j
+H
+H
+O
+L
+L
+P
+g
+H
+l
+l
+l
+l
+l
+c
+o
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
a
+"}
+(11,1,1) = {"
+a
+a
+a
+o
+o
+l
+l
+l
+z
+n
+H
+H
+U
+Z
+H
+O
+K
+B
+H
+H
+H
+n
+H
+l
+l
+l
+o
+M
+a
a
a
a
-b
-b
-d
-d
"}
(12,1,1) = {"
-d
-d
-b
-b
a
a
a
-a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+o
+l
+l
+l
+h
+L
+K
+Z
+H
+T
+O
+L
+K
+K
+B
+g
+e
+L
+B
+H
+g
+l
+l
+l
+o
a
a
a
a
-b
-b
-d
-d
"}
(13,1,1) = {"
-d
-d
-b
-b
a
a
+o
+o
+l
+l
+l
+H
+H
+O
+K
+Z
+H
+O
+K
+K
+K
+K
+L
+K
+K
+K
+Z
+H
+l
+l
+l
+o
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
a
a
-b
-b
-d
-d
"}
(14,1,1) = {"
+a
+a
+o
+o
+M
+l
+l
+l
d
-d
-b
-b
+O
+K
+B
+H
+O
+K
+K
+K
+K
+K
+K
+K
+K
+K
+L
+l
+l
+l
+o
+o
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+"}
+(15,1,1) = {"
+a
+a
+y
+y
+c
+l
+l
+l
+l
+K
+K
+K
+L
+K
+K
+K
+K
+K
+K
+K
+K
+K
+K
+Y
+l
+l
+o
+o
+M
+a
+a
+a
+"}
+(16,1,1) = {"
+a
+a
+o
+M
+o
+l
+l
+l
+l
+K
+K
+K
+K
+K
+K
+K
+m
+q
+K
+K
+K
+K
+X
+H
+l
+l
+J
+C
+o
+y
+a
+a
+"}
+(17,1,1) = {"
a
a
+o
+o
+V
+o
+l
+l
+l
+K
+K
+K
+K
+K
+K
+W
+A
+K
+K
+K
+K
+B
+w
+R
+l
+t
+F
+Q
+o
+y
+a
a
-b
-b
-d
-d
"}
-(15,1,1) = {"
-d
-d
-b
-b
-a
+(18,1,1) = {"
a
a
+o
+o
+o
+y
+l
+l
+l
+K
+K
+K
+K
+K
+K
+K
+D
+K
+K
+K
+K
+B
+u
+H
+l
N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+c
+o
+o
+o
a
a
-a
-b
-b
-d
-d
"}
-(16,1,1) = {"
-d
-d
-b
-b
+(19,1,1) = {"
a
a
+o
+o
+y
+M
+l
+l
+Y
+Y
+Y
+K
+K
+K
+K
+K
+K
+K
+K
+K
+K
+K
+L
+L
+l
+l
+y
+o
+o
+M
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
+"}
+(20,1,1) = {"
a
a
-b
-b
-d
+M
+o
+o
+l
+l
d
+H
+H
+H
+O
+K
+Y
+K
+K
+K
+K
+K
+K
+K
+K
+K
+K
+l
+l
+l
+y
+o
+a
+a
+a
"}
-(17,1,1) = {"
-d
-d
-b
-b
+(21,1,1) = {"
a
a
+o
+o
+c
+l
+l
+g
+H
+e
+L
+K
+B
+H
+O
+K
+Y
+K
+K
+K
+Y
+Y
+K
+K
+l
+l
+l
+y
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
a
a
-j
-b
-d
-d
"}
-(18,1,1) = {"
-d
-d
-b
-K
+(22,1,1) = {"
a
a
+o
+c
+l
+l
+l
+L
+p
+Y
+K
+K
+B
+H
+O
+B
+T
+U
+K
+B
+H
+g
+U
+l
+l
+l
+l
+c
a
-N
-N
-N
-N
-N
-N
-N
-N
-q
-N
-N
-N
-N
-N
-N
-N
-z
a
a
a
-V
-U
-d
-d
"}
-(19,1,1) = {"
-d
-d
-b
-b
+(23,1,1) = {"
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+o
+l
+l
+l
+l
+z
+H
+O
+K
+X
+g
+O
+B
+H
+H
+O
+B
+H
+H
+H
+l
+l
+l
+o
+o
+a
a
a
a
-b
-b
-d
-d
"}
-(20,1,1) = {"
-d
-d
-b
-b
+(24,1,1) = {"
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+o
+o
+l
+l
+l
+S
+d
+O
+X
+g
+H
+U
+X
+H
+H
+U
+B
+H
+H
+l
+l
+l
+l
+o
+M
+a
a
a
a
-b
-b
-d
-d
"}
-(21,1,1) = {"
-d
-d
-b
-b
+(25,1,1) = {"
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+o
+o
+o
+l
+l
+l
+l
+B
+H
+H
+z
+H
+H
+g
+z
+z
+O
+l
+l
+l
+l
+l
+c
+o
+o
+a
a
a
a
-b
-b
-d
-d
"}
-(22,1,1) = {"
-d
-d
-b
-b
+(26,1,1) = {"
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+M
+o
+o
+o
+M
+l
+l
+l
+H
+z
+z
+l
+l
+l
+d
+G
+l
+l
+l
+l
+o
+o
+o
+o
+o
+a
a
a
a
-b
-b
-d
-d
"}
-(23,1,1) = {"
-d
-d
-b
-b
+(27,1,1) = {"
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+a
+c
+o
+y
+y
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+o
+o
+o
+M
+o
+a
a
a
a
-b
-b
-d
-d
"}
-(24,1,1) = {"
-d
-d
-b
-b
+(28,1,1) = {"
a
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+a
+c
+o
+y
+o
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+l
+c
+o
+o
+o
+o
+a
a
a
a
a
-b
-b
-d
-d
"}
-(25,1,1) = {"
-d
-d
-b
-b
+(29,1,1) = {"
a
a
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+a
+o
+o
+o
+o
+M
+y
+o
+l
+l
+l
+l
+l
+l
+l
+l
+o
+o
+o
+M
+o
+a
a
a
a
a
a
-b
-b
-d
-d
"}
-(26,1,1) = {"
-d
-d
-b
-b
+(30,1,1) = {"
a
a
a
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
-N
+a
+o
+o
+o
+c
+o
+o
+o
+M
+o
+l
+l
+l
+l
+o
+o
+o
+o
+o
+a
a
a
a
a
a
a
-b
-b
-d
-d
"}
-(27,1,1) = {"
-d
-d
-b
-b
-b
+(31,1,1) = {"
a
a
a
a
a
a
-N
-N
-N
-N
-N
-N
-N
-N
-N
a
a
+o
+o
+M
+o
+o
+o
+c
+y
+y
+o
+o
+o
+c
+o
+o
+M
a
a
a
a
-b
-b
-b
-d
-d
-"}
-(28,1,1) = {"
-d
-d
-d
-b
-b
-b
a
a
a
a
+"}
+(32,1,1) = {"
a
a
a
@@ -967,21 +1359,6 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-"}
-(29,1,1) = {"
-d
-d
-d
-d
-b
-b
-b
a
a
a
@@ -999,23 +1376,12 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-d
"}
-(30,1,1) = {"
-d
-d
-d
-d
-d
-b
-b
-b
+(33,1,1) = {"
+a
+a
+a
+a
a
a
a
@@ -1031,25 +1397,6 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-d
-d
-"}
-(31,1,1) = {"
-d
-d
-d
-d
-d
-d
-b
-b
-b
a
a
a
@@ -1063,145 +1410,4 @@ a
a
a
a
-b
-b
-b
-d
-d
-d
-d
-d
-d
-"}
-(32,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-d
-d
-d
-d
-d
-d
-d
-"}
-(33,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-d
-d
-d
-d
-d
-d
-d
-d
-"}
-(34,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-"}
-(35,1,1) = {"
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
-d
"}
diff --git a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm
index 4e5a3e21f19..6c1b5fc71eb 100644
--- a/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm
+++ b/_maps/RandomRuins/IceRuins/skyrat/icemoon_underground_icewalker_lower.dmm
@@ -243,7 +243,7 @@
/turf/open/misc/dirt/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
"fY" = (
-/obj/structure/flora/ash/cap_shroom,
+/obj/structure/flora/ash,
/turf/open/misc/dirt/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
"gt" = (
@@ -342,6 +342,7 @@
/obj/item/seeds/plum,
/obj/item/seeds/berry,
/obj/item/seeds/grape,
+/obj/item/seeds/watermelon,
/turf/open/misc/asteroid/snow/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
"iJ" = (
@@ -391,6 +392,10 @@
/obj/structure/stairs/wood,
/turf/open/misc/dirt/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
+"jO" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/misc/dirt/icemoon,
+/area/ruin/unpowered/primitive_catgirl_den)
"jV" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/fluff/minepost,
@@ -845,6 +850,10 @@
},
/turf/open/misc/dirt/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
+"sf" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/misc/dirt/icemoon,
+/area/ruin/unpowered/primitive_catgirl_den)
"su" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -990,6 +999,7 @@
/obj/item/seeds/tea/catnip,
/obj/item/seeds/bamboo,
/obj/item/seeds/ambrosia,
+/obj/item/seeds/grass,
/turf/open/misc/dirt/icemoon,
/area/ruin/unpowered/primitive_catgirl_den)
"wF" = (
@@ -2955,7 +2965,7 @@ oJ
pa
GN
GN
-fY
+jO
jV
Oy
MP
@@ -3215,7 +3225,7 @@ GN
GN
GN
mu
-fY
+sf
GN
pa
hA
diff --git a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm
index f870375de62..7463a6012d7 100644
--- a/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm
+++ b/_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm
@@ -28,7 +28,7 @@
/area/ruin/unpowered/ash_walkers)
"bH" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/gun/ballistic/bow/longbow,
@@ -125,7 +125,7 @@
/area/ruin/unpowered/ash_walkers)
"hA" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/structure/stone_tile/slab,
@@ -172,7 +172,7 @@
/area/ruin/unpowered/ash_walkers)
"ij" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/glass/bottle/lizardwine,
@@ -397,7 +397,7 @@
dir = 1
},
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/screwdriver/ashwalker,
@@ -446,7 +446,7 @@
/area/ruin/unpowered/ash_walkers)
"qr" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
@@ -513,7 +513,7 @@
/area/ruin/unpowered/ash_walkers)
"sl" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/knife/combat/bone{
@@ -544,7 +544,7 @@
/area/ruin/unpowered/ash_walkers)
"tg" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/bottle/nutrient/rh{
@@ -572,7 +572,7 @@
/area/ruin/unpowered/ash_walkers)
"tl" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/spear/bonespear,
@@ -1065,7 +1065,7 @@
/area/ruin/unpowered/ash_walkers)
"Nf" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/claymore/bone,
@@ -1089,7 +1089,7 @@
/area/ruin/unpowered/ash_walkers)
"NB" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/forging/billow/primitive,
@@ -1179,7 +1179,7 @@
/area/ruin/unpowered/ash_walkers)
"Pr" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/bedsheet/black{
@@ -1198,7 +1198,7 @@
/area/ruin/unpowered/ash_walkers)
"PB" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/stack/sheet/iron/twenty,
@@ -1219,7 +1219,7 @@
/area/ruin/unpowered/ash_walkers)
"PG" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/forging/billow/primitive,
@@ -1287,7 +1287,7 @@
/area/ruin/unpowered/ash_walkers)
"SE" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/secateurs,
@@ -1436,7 +1436,7 @@
/area/ruin/unpowered/ash_walkers)
"Xe" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/glass/bottle/small{
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm
index 1ada129b23f..99ba6f32bc0 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm
@@ -8195,11 +8195,11 @@
/turf/open/floor/iron/cafeteria,
/area/ruin/space/has_grav/skyrat/interdynefob/service/diner)
"MB" = (
-/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown{
+/obj/item/clothing/suit/toggle/labcoat/hospitalgown{
pixel_x = -3;
pixel_y = 4
},
-/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown{
+/obj/item/clothing/suit/toggle/labcoat/hospitalgown{
pixel_x = -7
},
/obj/structure/table/glass,
diff --git a/_maps/_basemap.dm b/_maps/_basemap.dm
index a2fbfed494b..8bd71f0db34 100644
--- a/_maps/_basemap.dm
+++ b/_maps/_basemap.dm
@@ -13,10 +13,10 @@
#include "map_files\Mining\Lavaland.dmm"
#include "map_files\NorthStar\north_star.dmm"
#include "map_files\tramstation\tramstation.dmm"
- // SKYRAT EDIT ADDITON START - Compiling our modular maps too!
+ // NOVA EDIT ADDITON START - Compiling our modular maps too!
#include "map_files\VoidRaptor\VoidRaptor.dmm"
#include "map_files\NSVBlueshift\Blueshift.dmm"
- // SKYRAT EDIT END
+ // NOVA EDIT END
#ifdef CIBUILDING
#include "templates.dm"
diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm
index d20bf56ba1a..b00c3ef8c0c 100644
--- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm
+++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm
@@ -1553,9 +1553,6 @@
dir = 4
},
/obj/machinery/duct,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/turf/open/floor/iron/white/smooth_edge{
dir = 8
},
@@ -2197,17 +2194,9 @@
/area/station/science/research)
"aFT" = (
/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/mercury{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/nitrogen{
- pixel_x = 7;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/oxygen{
- pixel_x = 1
+/obj/structure/table/glass,
+/obj/item/storage/box/beakers{
+ pixel_y = 4
},
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
@@ -3231,12 +3220,6 @@
dir = 4
},
/area/station/engineering/storage)
-"aVZ" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 5
- },
-/turf/open/floor/iron/freezer,
-/area/station/medical/chemistry)
"aWh" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
@@ -3381,9 +3364,6 @@
/area/station/maintenance/port/aft)
"aWZ" = (
/obj/effect/turf_decal/trimline/blue/filled/line,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/chair{
dir = 1
},
@@ -3391,6 +3371,9 @@
/obj/structure/disposalpipe/segment{
dir = 5
},
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/smooth_edge{
dir = 1
},
@@ -5990,6 +5973,22 @@
},
/turf/open/floor/wood/large,
/area/station/hallway/primary/central/fore)
+"bNE" = (
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/acidic_buffer{
+ pixel_x = 7;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/basic_buffer{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/formaldehyde{
+ pixel_x = 1
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/medical/medbay/central)
"bNF" = (
/obj/effect/turf_decal/trimline/purple/filled/warning{
dir = 10
@@ -7994,7 +7993,7 @@
"cut" = (
/obj/effect/turf_decal/tile/blue/full,
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi';
icon_state = "floor1"
},
/area/space/nearstation)
@@ -8094,6 +8093,13 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/department/engine/atmos)
+"cwd" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 6
+ },
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron/freezer,
+/area/station/medical/pharmacy)
"cwf" = (
/obj/effect/turf_decal/vg_decals/numbers/one,
/turf/open/floor/iron/dark/smooth_large,
@@ -8372,6 +8378,7 @@
/area/station/medical/surgery)
"cAR" = (
/obj/item/mod/module/plasma_stabilizer,
+/obj/item/mod/module/thermal_regulator,
/obj/structure/table,
/obj/structure/window/reinforced/spawner/directional/north,
/obj/machinery/door/window/right/directional/west{
@@ -8389,8 +8396,6 @@
/obj/effect/turf_decal/trimline/dark_red/filled/mid_joiner{
dir = 1
},
-/obj/item/mod/module/signlang_radio,
-/obj/item/mod/module/thermal_regulator,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/storage)
"cBb" = (
@@ -9273,7 +9278,7 @@
/area/station/hallway/secondary/command)
"cOf" = (
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi';
icon_state = "floor1"
},
/area/space/nearstation)
@@ -9839,10 +9844,6 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/station/maintenance/aft/upper)
-"cXE" = (
-/obj/machinery/duct,
-/turf/open/floor/iron/freezer,
-/area/station/medical/pharmacy)
"cXX" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/dark/smooth_large,
@@ -10047,8 +10048,19 @@
/area/station/engineering/atmos/storage)
"daB" = (
/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/machinery/airalarm/directional/south{
- pixel_x = 10
+/obj/structure/table/reinforced/rglass,
+/obj/item/assembly/timer{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/assembly/igniter,
+/obj/item/stack/package_wrap{
+ pixel_y = -1;
+ pixel_x = 1
+ },
+/obj/item/hand_labeler{
+ pixel_y = -3;
+ pixel_x = 4
},
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
@@ -10376,10 +10388,12 @@
/obj/effect/turf_decal/trimline/blue/line{
dir = 1
},
-/obj/machinery/duct,
-/obj/structure/disposalpipe/junction/flip{
- dir = 8
+/obj/structure/disposalpipe/sorting/mail/flip{
+ dir = 8;
+ name = "Pharmacy Junction"
},
+/obj/machinery/duct,
+/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/lobby)
"dfk" = (
@@ -10817,14 +10831,20 @@
/turf/open/floor/iron/grimy,
/area/station/service/library)
"dle" = (
-/obj/item/reagent_containers/cup/beaker/large{
- pixel_y = 5
+/obj/structure/sign/warning/chem_diamond/directional/east,
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/fluorine{
+ pixel_x = 7;
+ pixel_y = 3
},
-/obj/item/reagent_containers/dropper{
- pixel_y = -4
+/obj/item/reagent_containers/cup/bottle/epinephrine{
+ pixel_x = -5;
+ pixel_y = 3
},
-/obj/structure/sign/warning/chem_diamond/directional/east,
-/obj/structure/table/glass,
+/obj/item/reagent_containers/cup/bottle/iodine{
+ pixel_x = 1
+ },
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"dlg" = (
@@ -11031,8 +11051,8 @@
},
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/north,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/structure/disposalpipe/junction/flip{
+ dir = 8
},
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
@@ -13035,10 +13055,14 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 8
},
-/turf/open/floor/iron/white/smooth_edge{
- dir = 4
+/obj/machinery/smartfridge/chemistry/preloaded,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters_south";
+ name = "Pharmacy Shutters"
},
-/area/station/hallway/primary/central/aft)
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/medical/pharmacy)
"dPw" = (
/obj/effect/turf_decal/trimline/dark_red/filled/line,
/obj/machinery/light/small/directional/south,
@@ -13921,10 +13945,6 @@
"ebp" = (
/obj/structure/table/reinforced,
/obj/machinery/door/firedoor,
-/obj/machinery/door/window/right/directional/east{
- name = "Pharmacy Desk";
- req_access = list("pharmacy")
- },
/obj/item/reagent_containers/cup/bottle/morphine,
/obj/item/reagent_containers/cup/bottle/toxin{
pixel_x = 5;
@@ -13942,6 +13962,12 @@
id = "chemistry_shutters";
name = "Pharmacy Shutters"
},
+/obj/machinery/door/window/right/directional/east{
+ name = "Pharmacy Desk";
+ req_access = list("pharmacy");
+ safe = 4;
+ dir = 8
+ },
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/pharmacy)
"ebz" = (
@@ -14487,11 +14513,7 @@
/area/station/service/chapel)
"eil" = (
/obj/effect/turf_decal/trimline/yellow/filled/corner,
-/obj/machinery/disposal/bin,
-/obj/effect/turf_decal/box,
-/obj/structure/disposalpipe/trunk{
- dir = 1
- },
+/obj/machinery/chem_mass_spec,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"ein" = (
@@ -15042,18 +15064,14 @@
/turf/open/floor/iron/grimy,
/area/station/security/detectives_office)
"epZ" = (
+/obj/structure/table/glass,
/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/epinephrine{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/fluorine{
- pixel_x = 7;
- pixel_y = 3
+/obj/item/storage/toolbox/mechanical{
+ pixel_y = 1
},
-/obj/item/reagent_containers/cup/bottle/iodine{
- pixel_x = 1
+/obj/item/reagent_containers/spray/cleaner{
+ pixel_y = 4;
+ pixel_x = 9
},
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
@@ -15712,7 +15730,6 @@
/obj/item/restraints/handcuffs,
/obj/effect/turf_decal/tile/dark_red/diagonal_centre,
/obj/effect/turf_decal/tile/neutral/diagonal_centre,
-/obj/item/paper/fluff/genpop_instructions,
/turf/open/floor/iron/dark/diagonal,
/area/station/security/execution/transfer)
"eBa" = (
@@ -15980,19 +15997,11 @@
/turf/open/floor/glass/reinforced,
/area/station/security/office)
"eEq" = (
-/obj/structure/chair/sofa/bench/left{
- dir = 4;
- pixel_x = -5
- },
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 8
},
-/obj/effect/landmark/start/assistant,
-/obj/machinery/light/cold/directional/west,
-/turf/open/floor/iron/white/smooth_edge{
- dir = 4
- },
-/area/station/hallway/primary/central/aft)
+/turf/closed/wall/r_wall,
+/area/station/medical/pharmacy)
"eEr" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -16717,7 +16726,7 @@
/area/station/ai_monitored/security/armory)
"eNH" = (
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi'
},
/area/space/nearstation)
"eNR" = (
@@ -17795,10 +17804,14 @@
},
/area/station/hallway/secondary/command)
"fft" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+/obj/effect/turf_decal/bot,
+/obj/structure/fake_stairs/directional/north,
+/obj/structure/railing{
dir = 8
},
-/obj/effect/turf_decal/bot,
+/obj/structure/railing{
+ dir = 4
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"ffz" = (
@@ -18837,6 +18850,17 @@
"fvs" = (
/turf/open/floor/iron/white/smooth_large,
/area/station/science/lab)
+"fvW" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 5
+ },
+/obj/effect/turf_decal/bot,
+/obj/item/toy/figure/chemist{
+ pixel_y = 18
+ },
+/obj/machinery/vending/wardrobe/chem_wardrobe,
+/turf/open/floor/iron/freezer,
+/area/station/medical/chemistry)
"fwc" = (
/obj/structure/table,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -18939,12 +18963,20 @@
/turf/open/floor/iron/cafeteria,
/area/station/service/cafeteria)
"fxD" = (
-/obj/effect/turf_decal/bot,
/obj/structure/sign/warning/chem_diamond/directional/north,
-/obj/item/storage/box/beakers{
- pixel_y = 4
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/carbon{
+ pixel_x = 7;
+ pixel_y = 3
},
-/obj/structure/table/glass,
+/obj/item/reagent_containers/cup/bottle/ethanol{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/chlorine{
+ pixel_x = 1
+ },
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"fxO" = (
@@ -18997,22 +19029,6 @@
},
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/aft/upper)
-"fyz" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/iron{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/lithium{
- pixel_x = 7;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/multiver{
- pixel_x = 1
- },
-/turf/open/floor/iron/white/smooth_large,
-/area/station/medical/medbay/central)
"fyB" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -19766,10 +19782,9 @@
/area/station/maintenance/aft/upper)
"fLC" = (
/obj/effect/turf_decal/trimline/yellow/filled/warning,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"fLX" = (
@@ -21976,7 +21991,6 @@
/turf/closed/wall,
/area/station/maintenance/disposal)
"gta" = (
-/obj/effect/turf_decal/bot,
/obj/structure/sign/poster/official/periodic_table/directional/north,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
@@ -22115,24 +22129,31 @@
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/solars/port/fore)
"gut" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
- },
/obj/item/book/manual/wiki/chemistry{
- pixel_x = -4;
+ pixel_x = -13;
pixel_y = 7
},
+/obj/structure/table/reinforced/rglass,
/obj/item/book/manual/wiki/grenades{
- pixel_y = 3
+ pixel_y = 3;
+ pixel_x = -7
},
-/obj/item/assembly/igniter,
-/obj/item/assembly/timer{
+/obj/item/grenade/chem_grenade,
+/obj/item/grenade/chem_grenade{
+ pixel_x = -2
+ },
+/obj/item/stack/cable_coil,
+/obj/item/ph_meter{
+ pixel_x = 12;
+ pixel_y = 6
+ },
+/obj/item/stack/cable_coil{
pixel_x = 3;
pixel_y = 3
},
-/obj/structure/table/reinforced/rglass,
-/obj/item/ph_booklet{
- pixel_x = -15
+/obj/item/screwdriver,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 5
},
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
@@ -23656,6 +23677,10 @@
/area/station/maintenance/port/greater)
"gQm" = (
/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing/corner,
+/obj/structure/railing/corner{
+ dir = 8
+ },
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"gQq" = (
@@ -24086,9 +24111,6 @@
dir = 8
},
/obj/machinery/duct,
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"gWN" = (
@@ -26489,7 +26511,7 @@
dir = 1
},
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi';
icon_state = "floor1"
},
/area/space/nearstation)
@@ -26622,10 +26644,10 @@
/obj/structure/chair/office/light{
dir = 1
},
-/obj/effect/landmark/start/chemist,
/obj/effect/turf_decal/trimline/yellow/filled/warning{
dir = 1
},
+/obj/effect/landmark/start/chemist,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"hGP" = (
@@ -31646,11 +31668,14 @@
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/radio/intercom/directional/west,
/obj/machinery/firealarm/directional/west{
pixel_y = -16
},
/obj/structure/sink/directional/east,
+/obj/structure/extinguisher_cabinet/directional/west{
+ pixel_y = 2;
+ pixel_x = -28
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"jcf" = (
@@ -33198,19 +33223,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/smooth,
/area/station/maintenance/aft/greater)
-"jyi" = (
-/obj/effect/turf_decal/trimline/green/filled/line{
- dir = 4
- },
-/obj/machinery/door/firedoor,
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/edge{
- dir = 8
- },
-/area/station/hallway/primary/central/aft)
"jyD" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -35355,10 +35367,10 @@
/area/station/medical/break_room)
"kcP" = (
/obj/machinery/holopad,
-/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/chemistry)
"kcW" = (
@@ -35551,13 +35563,15 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 6
},
-/obj/machinery/requests_console/directional/south{
- department = "Pharmacy";
- name = "Pharmacy Requests Console"
+/obj/structure/table/reinforced/rglass,
+/obj/machinery/light/cold/directional/east,
+/obj/item/clothing/gloves/latex,
+/obj/item/clothing/gloves/latex,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science{
+ pixel_y = 3
},
-/obj/effect/mapping_helpers/requests_console/ore_update,
-/obj/structure/closet/secure_closet/medical1,
-/obj/effect/turf_decal/bot,
+/obj/item/radio/intercom/directional/east,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"kgl" = (
@@ -36076,6 +36090,10 @@
dir = 8
},
/area/station/medical/medbay/central)
+"kny" = (
+/obj/effect/turf_decal/trimline/yellow/filled/corner,
+/turf/open/floor/iron/freezer,
+/area/station/medical/pharmacy)
"knA" = (
/obj/structure/chair/wood,
/obj/machinery/firealarm/directional/north,
@@ -36894,39 +36912,14 @@
/turf/open/floor/engine,
/area/station/maintenance/disposal/incinerator)
"kyV" = (
-/obj/structure/table/reinforced,
-/obj/item/folder/white{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/pen{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/effect/turf_decal/tile/yellow{
- dir = 1
- },
-/obj/effect/turf_decal/tile/yellow,
-/obj/effect/turf_decal/tile/yellow{
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
dir = 4
},
-/obj/effect/turf_decal/tile/yellow{
- dir = 8
- },
-/obj/machinery/door/firedoor,
-/obj/structure/desk_bell{
- pixel_x = 7;
- pixel_y = 6
- },
-/obj/machinery/door/window/right/directional/west{
- name = "Pharmacy Desk";
- req_access = list("pharmacy")
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "Pharmacy Shutters"
+/obj/effect/landmark/start/chemist,
+/obj/structure/chair/office/light{
+ dir = 4
},
-/turf/open/floor/iron/white/smooth_large,
+/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"kyY" = (
/obj/structure/disposalpipe/segment{
@@ -37225,9 +37218,6 @@
/turf/open/floor/iron/smooth,
/area/station/maintenance/starboard/aft)
"kCE" = (
-/obj/effect/turf_decal/trimline/blue/filled/corner{
- dir = 1
- },
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/corner{
dir = 1
@@ -39057,25 +39047,14 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
},
-/obj/machinery/status_display/evac/directional/east,
/obj/structure/table/reinforced/rglass,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/ducts/fifty,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/obj/item/clothing/glasses/science,
-/obj/item/clothing/glasses/science,
-/obj/item/screwdriver{
+/obj/item/stack/sheet/iron/fifty,
+/obj/machinery/status_display/evac/directional/east,
+/obj/item/stack/sheet/iron/fifty,
+/obj/item/construction/plumbing{
pixel_y = 6
},
-/obj/item/storage/toolbox/mechanical,
-/obj/item/clothing/head/utility/welding,
+/obj/item/construction/plumbing,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
"lbh" = (
@@ -39513,8 +39492,7 @@
/area/station/maintenance/department/medical/central)
"lgZ" = (
/obj/machinery/door/airlock/security{
- name = "Isolation Cell";
- id_tag = "IsolationCell"
+ name = "Isolation Cell"
},
/obj/effect/mapping_helpers/airlock/access/all/security/brig,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -40099,7 +40077,10 @@
/turf/open/floor/iron/white/diagonal,
/area/station/science/research)
"loL" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line,
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 10
+ },
/turf/open/floor/iron/white/smooth_edge{
dir = 1
},
@@ -41387,13 +41368,13 @@
/obj/effect/turf_decal/trimline/blue/corner{
dir = 1
},
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
/obj/structure/disposalpipe/junction/yjunction{
dir = 8
},
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/lobby)
"lHx" = (
@@ -42169,14 +42150,22 @@
dir = 4
},
/obj/machinery/status_display/ai/directional/east,
-/obj/structure/table/reinforced/rglass,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/stack/sheet/iron/fifty,
-/obj/item/construction/plumbing{
- pixel_y = 6
- },
-/obj/item/construction/plumbing,
/obj/machinery/light/cold/directional/east,
+/obj/structure/rack,
+/obj/item/book/manual/wiki/chemistry{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/book/manual/wiki/grenades,
+/obj/item/book/manual/wiki/plumbing{
+ pixel_x = 4;
+ pixel_y = -4
+ },
+/obj/item/plunger,
+/obj/item/plunger{
+ pixel_x = -9
+ },
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
"lSs" = (
@@ -42464,15 +42453,11 @@
/obj/effect/turf_decal/trimline/blue/corner{
dir = 8
},
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/duct,
-/obj/structure/disposalpipe/sorting/mail/flip{
- dir = 2;
- name = "Pharmacy Junction"
- },
-/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/lobby)
"lVG" = (
@@ -43191,11 +43176,11 @@
/turf/open/floor/carpet/purple,
/area/station/command/heads_quarters/rd)
"mgm" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 1
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
},
/obj/machinery/airalarm/directional/north,
-/turf/open/floor/iron/white/smooth_edge,
+/turf/open/floor/iron/white/smooth_large,
/area/station/hallway/primary/central/aft)
"mgt" = (
/obj/effect/turf_decal/trimline/green/filled/line{
@@ -44427,12 +44412,8 @@
/turf/open/floor/engine,
/area/station/engineering/main)
"mAC" = (
-/obj/structure/chair/office/light{
- dir = 4
- },
-/obj/effect/landmark/start/chemist,
-/obj/effect/turf_decal/trimline/yellow/filled/warning{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
@@ -44522,19 +44503,15 @@
/obj/structure/sign/warning/no_smoking/circle/directional/north{
pixel_y = 28
},
-/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/ethanol{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/carbon{
- pixel_x = 7;
- pixel_y = 3
+/obj/structure/table/glass,
+/obj/item/reagent_containers/cup/beaker/large{
+ pixel_y = 5
},
-/obj/item/reagent_containers/cup/bottle/chlorine{
- pixel_x = 1
+/obj/item/assembly/igniter,
+/obj/item/reagent_containers/dropper{
+ pixel_y = -4
},
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"mBF" = (
@@ -45095,7 +45072,9 @@
/turf/open/floor/catwalk_floor/iron_smooth,
/area/station/maintenance/department/medical/central)
"mJB" = (
-/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 1
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"mJC" = (
@@ -46262,6 +46241,28 @@
},
/turf/open/floor/iron/dark/smooth_edge,
/area/station/security/office)
+"mYW" = (
+/obj/machinery/button/door/directional/east{
+ id = "chemistry_shutters_south";
+ name = "Shutters Control";
+ req_access = list("pharmacy")
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot_red,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/machinery/chem_heater/withbuffer,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/medical/pharmacy)
"mZe" = (
/obj/effect/turf_decal/trimline/dark_red/arrow_cw{
dir = 8
@@ -46751,10 +46752,10 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 8
},
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
},
-/turf/open/floor/iron/dark/smooth_large,
+/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"nhS" = (
/obj/machinery/atmospherics/pipe/smart/simple/green/visible,
@@ -46909,11 +46910,41 @@
/turf/open/floor/iron/dark/smooth_edge,
/area/station/security/interrogation)
"njQ" = (
-/obj/effect/turf_decal/trimline/yellow/filled/warning{
- dir = 9
+/obj/machinery/door/firedoor,
+/obj/structure/table/reinforced,
+/obj/structure/desk_bell{
+ pixel_x = 7;
+ pixel_y = 6
},
-/turf/open/floor/iron/white,
-/area/station/hallway/primary/central/aft)
+/obj/item/folder/white{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/pen{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/yellow,
+/obj/effect/turf_decal/tile/yellow{
+ dir = 8
+ },
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "chemistry_shutters_south";
+ name = "Pharmacy Shutters"
+ },
+/obj/machinery/door/window/right/directional/west{
+ name = "Pharmacy Desk";
+ req_access = list("pharmacy");
+ dir = 4
+ },
+/turf/open/floor/iron/white/smooth_large,
+/area/station/medical/pharmacy)
"njV" = (
/obj/effect/turf_decal/trimline/dark_green/filled/line{
dir = 5
@@ -47899,7 +47930,7 @@
pixel_y = 32
},
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi';
icon_state = "floor1"
},
/area/space/nearstation)
@@ -48553,18 +48584,20 @@
/turf/open/floor/iron/smooth,
/area/station/science/ordnance)
"nIJ" = (
-/obj/item/reagent_containers/cup/beaker/large,
-/obj/item/reagent_containers/cup/beaker/large,
-/obj/item/reagent_containers/dropper,
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 6
- },
-/obj/structure/extinguisher_cabinet/directional/south,
+/obj/effect/turf_decal/trimline/yellow/filled/line,
/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner,
-/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/obj/structure/table/reinforced/rglass,
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/south{
+ pixel_x = 3;
+ pixel_y = -32
+ },
+/obj/machinery/chem_master,
+/obj/effect/turf_decal/bot_red,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"nIK" = (
@@ -49846,6 +49879,12 @@
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/heads_quarters/qm)
+"nXW" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 4
+ },
+/turf/open/floor/iron/freezer,
+/area/station/medical/pharmacy)
"nYc" = (
/obj/effect/turf_decal/tile/purple{
dir = 1
@@ -50855,19 +50894,14 @@
/area/station/service/chapel/office)
"onJ" = (
/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/phosphorus{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/potassium{
- pixel_x = 7;
- pixel_y = 3
+/obj/machinery/light/cold/directional/south,
+/obj/structure/table/glass,
+/obj/item/storage/test_tube_rack{
+ pixel_y = 10
},
-/obj/item/reagent_containers/cup/bottle/sodium{
- pixel_x = 1
+/obj/item/storage/test_tube_rack{
+ pixel_y = 2
},
-/obj/machinery/light/cold/directional/south,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"onK" = (
@@ -51142,12 +51176,12 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 6
},
-/obj/machinery/disposal/bin,
/obj/effect/turf_decal/box,
/obj/structure/disposalpipe/trunk{
dir = 8
},
/obj/structure/extinguisher_cabinet/directional/east,
+/obj/machinery/disposal/bin,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
"oru" = (
@@ -54791,6 +54825,7 @@
c_tag = "Aft Central Primary Hallway - Fore";
name = "hallway camera"
},
+/obj/machinery/door/firedoor,
/turf/open/floor/iron/edge{
dir = 8
},
@@ -55586,23 +55621,17 @@
},
/area/station/engineering/atmos)
"pAK" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
- },
-/obj/machinery/chem_master,
-/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
- dir = 4
- },
-/obj/machinery/button/door/directional/east{
- id = "chemistry_shutters";
- name = "Shutters Control";
- req_access = list("pharmacy")
- },
-/obj/effect/turf_decal/bot_red,
/obj/effect/turf_decal/stripes/line{
- dir = 1
+ dir = 9
},
-/obj/machinery/light/cold/directional/east,
+/obj/structure/railing{
+ dir = 9;
+ layer = 3.1
+ },
+/obj/structure/table/reinforced/rglass,
+/obj/item/reagent_containers/cup/beaker/large,
+/obj/item/reagent_containers/cup/beaker/large,
+/obj/item/reagent_containers/dropper,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"pAZ" = (
@@ -55841,6 +55870,14 @@
/turf/open/floor/plating,
/area/station/maintenance/department/crew_quarters/bar)
"pDV" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4;
+ pixel_x = -5
+ },
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
/turf/open/floor/iron/white/smooth_large,
/area/station/hallway/primary/central/aft)
"pEi" = (
@@ -56212,11 +56249,11 @@
/turf/open/floor/iron/dark/smooth_large,
/area/station/service/hydroponics)
"pKg" = (
+/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
+ dir = 5
},
-/obj/machinery/chem_mass_spec,
-/obj/effect/turf_decal/bot,
+/obj/structure/closet/secure_closet/medical1,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"pKl" = (
@@ -56264,18 +56301,6 @@
"pKD" = (
/obj/structure/extinguisher_cabinet/directional/north,
/obj/effect/turf_decal/bot,
-/obj/structure/rack,
-/obj/item/reagent_containers/cup/bottle/basic_buffer{
- pixel_x = -5;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/acidic_buffer{
- pixel_x = 7;
- pixel_y = 3
- },
-/obj/item/reagent_containers/cup/bottle/formaldehyde{
- pixel_x = 1
- },
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"pKM" = (
@@ -56451,11 +56476,11 @@
/turf/open/floor/iron/smooth_large,
/area/station/cargo/warehouse)
"pNq" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/trimline/blue/filled/warning,
/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white/smooth_edge{
dir = 1
},
@@ -57733,16 +57758,6 @@
/obj/structure/table/reinforced,
/turf/open/floor/iron/dark/smooth_large,
/area/station/ai_monitored/command/storage/eva)
-"qcl" = (
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 8
- },
-/obj/structure/sign/departments/chemistry/pharmacy/directional/west,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/iron/edge{
- dir = 4
- },
-/area/station/hallway/primary/central/aft)
"qcq" = (
/obj/effect/turf_decal/trimline/yellow/filled/warning{
dir = 4
@@ -58059,16 +58074,6 @@
dir = 1
},
/area/station/cargo/bitrunning/den)
-"qha" = (
-/obj/machinery/chem_heater/withbuffer,
-/obj/effect/turf_decal/trimline/yellow/filled/line,
-/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner,
-/obj/effect/turf_decal/bot_red,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/medical/pharmacy)
"qhe" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -58472,7 +58477,7 @@
/area/station/ai_monitored/turret_protected/ai)
"qmI" = (
/obj/machinery/flasher/directional/south{
- id = "IsolationCell"
+ id = "Cell 6"
},
/obj/machinery/light/small/broken/directional/south,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
@@ -59973,6 +59978,19 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/station/tcommsat/server)
+"qIw" = (
+/obj/effect/landmark/start/assistant,
+/obj/structure/chair/sofa/bench/left{
+ dir = 4;
+ pixel_x = -5
+ },
+/obj/machinery/light/cold/directional/west,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/structure/sign/poster/official/moth_epi/directional/west,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/hallway/primary/central/aft)
"qIx" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -61794,7 +61812,6 @@
/turf/open/floor/iron/dark/small,
/area/station/security/prison/work)
"rjs" = (
-/obj/effect/turf_decal/bot,
/obj/machinery/button/door/directional/south{
id = "ChemStorage";
name = "Shutter Control";
@@ -63459,14 +63476,20 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 9
},
-/obj/item/stack/sheet/mineral/plasma{
- pixel_y = 3
- },
/obj/structure/sign/poster/official/periodic_table/directional/north,
+/obj/machinery/light/cold/directional/north,
/obj/structure/table/reinforced/rglass,
/obj/machinery/reagentgrinder{
pixel_y = 7
},
+/obj/item/ph_booklet{
+ pixel_x = -7;
+ pixel_y = -2
+ },
+/obj/item/stack/sheet/mineral/plasma{
+ pixel_y = -5;
+ pixel_x = 2
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"rIF" = (
@@ -65622,19 +65645,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/station/medical/break_room)
-"spF" = (
-/obj/structure/chair/sofa/bench/right{
- dir = 4;
- pixel_x = -5
- },
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 8
- },
-/obj/effect/landmark/start/hangover,
-/turf/open/floor/iron/white/smooth_edge{
- dir = 4
- },
-/area/station/hallway/primary/central/aft)
"spI" = (
/obj/structure/flora/grass/jungle,
/obj/structure/flora/bush/grassy,
@@ -66442,14 +66452,15 @@
pixel_x = 7;
pixel_y = 6
},
-/obj/machinery/door/window/left/directional/south{
- name = "Pharmacy Desk";
- req_access = list("pharmacy")
- },
/obj/machinery/door/poddoor/shutters/preopen{
id = "chemistry_shutters";
name = "Pharmacy Shutters"
},
+/obj/machinery/door/window/left/directional/south{
+ name = "Pharmacy Desk";
+ req_access = list("pharmacy");
+ dir = 1
+ },
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/pharmacy)
"sCQ" = (
@@ -67251,7 +67262,9 @@
/area/station/service/janitor)
"sLk" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/duct,
+/obj/effect/turf_decal/trimline/yellow/filled/corner{
+ dir = 4
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"sLq" = (
@@ -67392,16 +67405,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
-"sMm" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
- },
-/obj/structure/closet/secure_closet/chemical,
-/obj/item/storage/box/syringes,
-/obj/item/storage/box/beakers,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/iron/freezer,
-/area/station/medical/pharmacy)
"sMs" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 6
@@ -67983,9 +67986,8 @@
/turf/open/floor/iron/smooth_large,
/area/station/cargo/sorting)
"sUt" = (
-/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
-/obj/machinery/duct,
+/obj/machinery/holopad,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"sUu" = (
@@ -68177,16 +68179,6 @@
/obj/item/reagent_containers/cup/glass/shaker,
/turf/open/floor/iron,
/area/station/service/bar)
-"sWj" = (
-/obj/machinery/chem_dispenser{
- layer = 2.7
- },
-/obj/effect/turf_decal/bot_red,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/medical/pharmacy)
"sWB" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/tank_holder/extinguisher,
@@ -68539,9 +68531,9 @@
"tbw" = (
/obj/structure/table,
/obj/effect/turf_decal/bot,
-/obj/item/mod/module/plasma_stabilizer,
-/obj/item/mod/module/signlang_radio,
-/obj/item/mod/module/thermal_regulator,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/flashlight,
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/iron/dark/smooth_large,
/area/station/engineering/main)
"tbD" = (
@@ -68819,10 +68811,20 @@
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen/abandoned)
"tfc" = (
-/obj/item/storage/toolbox/mechanical,
-/obj/item/reagent_containers/spray/cleaner,
/obj/item/radio/intercom/directional/east,
-/obj/structure/table/glass,
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/potassium{
+ pixel_x = 7;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/phosphorus{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/sodium{
+ pixel_x = 1
+ },
+/obj/effect/turf_decal/bot,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"tfi" = (
@@ -69391,6 +69393,9 @@
/obj/effect/decal/cleanable/greenglow,
/turf/open/floor/iron/smooth,
/area/station/maintenance/aft/lesser)
+"tnx" = (
+/turf/closed/wall,
+/area/station/hallway/primary/central/aft)
"tnD" = (
/obj/machinery/power/solar_control{
dir = 4;
@@ -70003,25 +70008,28 @@
/turf/open/floor/iron/dark/smooth_large,
/area/station/maintenance/disposal/incinerator)
"tvg" = (
+/obj/item/radio/intercom/directional/east,
/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
- },
-/obj/structure/rack,
-/obj/item/book/manual/wiki/chemistry{
- pixel_x = -4;
- pixel_y = 4
- },
-/obj/item/book/manual/wiki/grenades,
-/obj/item/book/manual/wiki/plumbing{
- pixel_x = 4;
- pixel_y = -4
+ dir = 5
},
-/obj/item/radio/intercom/directional/east,
-/obj/effect/turf_decal/bot,
-/obj/item/plunger{
- pixel_x = -9
+/obj/structure/table/reinforced/rglass,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/ducts/fifty,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/obj/item/screwdriver{
+ pixel_y = 6
},
-/obj/item/plunger,
+/obj/item/storage/toolbox/mechanical,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/glasses/science,
+/obj/item/clothing/head/utility/welding,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
"tvm" = (
@@ -70168,14 +70176,16 @@
/turf/open/floor/iron/white/smooth_large,
/area/station/commons/fitness/recreation/entertainment)
"twU" = (
-/obj/machinery/chem_heater/withbuffer,
-/obj/effect/turf_decal/bot_red,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
-/obj/structure/disposalpipe/segment{
+/obj/structure/railing{
dir = 10
},
+/obj/item/reagent_containers/cup/beaker/large,
+/obj/item/reagent_containers/cup/beaker/large,
+/obj/item/reagent_containers/dropper,
+/obj/structure/table/reinforced/rglass,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"twX" = (
@@ -70492,15 +70502,16 @@
/turf/open/floor/iron,
/area/station/service/bar)
"tAr" = (
-/obj/structure/chair/office/light{
- dir = 8
- },
/obj/effect/turf_decal/trimline/yellow/filled/warning{
dir = 8
},
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/duct,
+/obj/structure/chair/office/light{
+ dir = 8
+ },
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"tAw" = (
@@ -70854,15 +70865,6 @@
},
/turf/open/floor/iron/white,
/area/station/science/research)
-"tFq" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/machinery/status_display/door_timer{
- id = "IsolationCell";
- name = "Isolation Cell";
- pixel_y = 32
- },
-/turf/open/floor/iron/dark/smooth_large,
-/area/station/security/execution/transfer)
"tFt" = (
/turf/closed/wall/r_wall,
/area/station/maintenance/department/engine/atmos)
@@ -71081,12 +71083,11 @@
},
/area/station/hallway/primary/fore)
"tIS" = (
-/obj/effect/turf_decal/trimline/blue/filled/line{
- dir = 8
- },
-/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment,
/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 1
+ },
/turf/open/floor/iron/edge{
dir = 4
},
@@ -71626,12 +71627,12 @@
/obj/effect/turf_decal/trimline/yellow/filled/corner{
dir = 1
},
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/structure/disposalpipe/segment{
dir = 10
},
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"tRQ" = (
@@ -72044,15 +72045,7 @@
/turf/open/floor/iron/smooth,
/area/station/command/cc_dock)
"tZj" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 4
- },
-/obj/machinery/requests_console/directional/east{
- department = "Chemistry";
- name = "Chemistry Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/assistance,
-/obj/machinery/light/cold/directional/east,
+/obj/effect/turf_decal/trimline/yellow/filled/corner,
/turf/open/floor/iron/freezer,
/area/station/medical/chemistry)
"tZu" = (
@@ -72323,9 +72316,19 @@
/turf/open/floor/iron/dark/diagonal,
/area/station/hallway/primary/fore)
"ucx" = (
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/nitrogen{
+ pixel_x = 7;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/mercury{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/oxygen{
+ pixel_x = 1
+ },
/obj/effect/turf_decal/bot,
-/obj/item/assembly/igniter,
-/obj/structure/table/glass,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/central)
"ucB" = (
@@ -74586,11 +74589,11 @@
/obj/effect/turf_decal/trimline/blue/line{
dir = 8
},
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
/obj/machinery/duct,
-/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/white/smooth_large,
/area/station/medical/medbay/lobby)
"uGy" = (
@@ -74861,6 +74864,9 @@
/area/station/ai_monitored/turret_protected/ai)
"uKE" = (
/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
/turf/open/floor/iron/white/smooth_large,
/area/station/hallway/primary/central/aft)
"uKL" = (
@@ -75000,29 +75006,6 @@
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_ordmix,
/turf/open/floor/engine,
/area/station/science/ordnance/burnchamber)
-"uMt" = (
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/grenade/chem_grenade,
-/obj/item/grenade/chem_grenade{
- pixel_x = -2
- },
-/obj/item/screwdriver,
-/obj/item/stack/package_wrap{
- pixel_y = 16
- },
-/obj/item/hand_labeler{
- pixel_y = 16
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/table/reinforced/rglass,
-/turf/open/floor/iron/freezer,
-/area/station/medical/pharmacy)
"uMy" = (
/obj/effect/landmark/start/hangover,
/turf/open/floor/iron/large,
@@ -75333,7 +75316,7 @@
dir = 1
},
/turf/open/floor/iron/airless{
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi';
icon_state = "floor1"
},
/area/space/nearstation)
@@ -79212,9 +79195,6 @@
/turf/open/floor/iron/large,
/area/station/hallway/primary/fore)
"vVO" = (
-/obj/item/reagent_containers/cup/beaker/large,
-/obj/item/reagent_containers/cup/beaker/large,
-/obj/item/reagent_containers/dropper,
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 1
},
@@ -79229,12 +79209,11 @@
/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
dir = 1
},
-/obj/item/ph_meter{
- pixel_x = -15;
- pixel_y = 6
+/obj/structure/railing{
+ dir = 8
},
-/obj/structure/table/reinforced/rglass,
-/obj/machinery/light/cold/directional/north,
+/obj/effect/turf_decal/bot_red,
+/obj/machinery/chem_heater/withbuffer,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"vVT" = (
@@ -79997,6 +79976,16 @@
},
/turf/open/floor/iron/smooth,
/area/station/engineering/atmos)
+"wga" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/edge{
+ dir = 4
+ },
+/area/station/hallway/primary/central/aft)
"wgl" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 8
@@ -81103,14 +81092,12 @@
/area/station/cargo/sorting)
"wwr" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/item/clothing/gloves/latex,
-/obj/item/clothing/gloves/latex,
-/obj/item/clothing/glasses/science{
- pixel_y = 3
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 1
},
-/obj/item/clothing/glasses/science,
-/obj/structure/disposalpipe/segment,
-/obj/structure/table/reinforced/rglass,
+/obj/structure/closet/secure_closet/chemical,
+/obj/item/storage/box/syringes,
+/obj/item/storage/box/beakers,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"wwA" = (
@@ -81815,9 +81802,6 @@
/turf/open/floor/iron/smooth_large,
/area/station/engineering/atmos)
"wEK" = (
-/obj/machinery/chem_dispenser{
- layer = 2.7
- },
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 4
},
@@ -81826,6 +81810,8 @@
},
/obj/effect/turf_decal/bot_red,
/obj/effect/turf_decal/stripes/line,
+/obj/structure/railing,
+/obj/machinery/chem_master,
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
"wEO" = (
@@ -82239,9 +82225,9 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
},
-/obj/structure/sign/poster/official/moth_epi/directional/west,
/obj/structure/disposalpipe/segment,
/obj/machinery/light/directional/west,
+/obj/structure/sign/departments/chemistry/pharmacy/directional/west,
/turf/open/floor/iron/edge{
dir = 4
},
@@ -82353,13 +82339,13 @@
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/heads_quarters/qm)
"wMl" = (
-/obj/structure/cable,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 1
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/lobby)
"wMm" = (
@@ -83689,11 +83675,8 @@
/turf/open/floor/iron/smooth_large,
/area/station/maintenance/department/medical)
"xkq" = (
-/obj/effect/turf_decal/trimline/yellow/filled/line{
- dir = 10
- },
-/obj/item/kirbyplants/random,
-/turf/open/floor/iron/white,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating/airless,
/area/station/hallway/primary/central/aft)
"xkA" = (
/obj/structure/disposalpipe/junction{
@@ -83946,11 +83929,21 @@
/turf/closed/wall/r_wall,
/area/station/security/checkpoint/engineering)
"xnP" = (
-/obj/machinery/smartfridge/chemistry/preloaded,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "chemistry_shutters";
- name = "Pharmacy Shutters"
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 6
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner,
+/obj/effect/turf_decal/trimline/yellow/filled/mid_joiner{
+ dir = 4
+ },
+/obj/machinery/requests_console/directional/south{
+ department = "Pharmacy";
+ name = "Pharmacy Requests Console"
+ },
+/obj/effect/mapping_helpers/requests_console/ore_update,
+/obj/effect/turf_decal/bot_red,
+/obj/machinery/chem_dispenser{
+ layer = 2.7
},
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
@@ -85383,12 +85376,13 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 10
},
-/obj/machinery/vending/wardrobe/chem_wardrobe,
/obj/structure/sign/warning/chem_diamond/directional/west,
-/obj/item/toy/figure/chemist{
- pixel_y = 18
+/obj/machinery/disposal/bin,
+/obj/effect/turf_decal/box,
+/obj/structure/disposalpipe/trunk{
+ dir = 1
},
-/obj/effect/turf_decal/bot,
+/obj/machinery/light/warm/directional/west,
/turf/open/floor/iron/freezer,
/area/station/medical/pharmacy)
"xHW" = (
@@ -86066,6 +86060,22 @@
},
/turf/open/floor/iron/smooth_large,
/area/station/engineering/atmos/hfr_room)
+"xSD" = (
+/obj/structure/rack/shelf,
+/obj/item/reagent_containers/cup/bottle/lithium{
+ pixel_x = 7;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/iron{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/bottle/multiver{
+ pixel_x = 1
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron/white/smooth_large,
+/area/station/medical/medbay/central)
"xSK" = (
/turf/open/floor/iron/large,
/area/station/commons/storage/primary)
@@ -86238,9 +86248,6 @@
pixel_y = 16
},
/obj/item/inspector,
-/obj/item/mod/module/signlang_radio{
- pixel_y = 12
- },
/obj/item/mod/module/thermal_regulator{
pixel_y = 16
},
@@ -87160,6 +87167,18 @@
/obj/machinery/light/floor,
/turf/open/floor/iron/dark/smooth_large,
/area/station/commons/fitness/recreation/entertainment)
+"yjP" = (
+/obj/machinery/requests_console/directional/east{
+ department = "Chemistry";
+ name = "Chemistry Requests Console"
+ },
+/obj/machinery/light/cold/directional/east,
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 6
+ },
+/obj/effect/mapping_helpers/requests_console/ore_update,
+/turf/open/floor/iron/freezer,
+/area/station/medical/chemistry)
"yjU" = (
/obj/machinery/computer/slot_machine,
/obj/effect/turf_decal/siding/wood{
@@ -87298,7 +87317,6 @@
/turf/open/floor/wood/large,
/area/station/command/heads_quarters/rd)
"ylT" = (
-/obj/machinery/chem_master,
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 5
},
@@ -87317,6 +87335,9 @@
req_access = list("pharmacy")
},
/obj/effect/turf_decal/bot_red,
+/obj/machinery/chem_dispenser{
+ layer = 2.7
+ },
/turf/open/floor/iron/dark/smooth_large,
/area/station/medical/pharmacy)
@@ -115993,7 +116014,7 @@ dNH
abQ
pKD
stN
-fyz
+xOU
fzP
aUc
qoG
@@ -116762,9 +116783,9 @@ iJn
rrm
kFJ
abQ
-xOU
+bNE
lol
-xOU
+xSD
fzP
ofd
mtY
@@ -119327,13 +119348,13 @@ uQf
jLi
aAN
gut
-uMt
+nXW
sLk
sUt
-cXE
-sWj
+kny
+nXW
nhR
-qha
+cwd
iyx
vXr
goS
@@ -119592,15 +119613,15 @@ pAK
mAC
nIJ
ifq
-aVZ
-yiT
+vXr
+goS
tZj
+yiT
+yiT
+yiT
uUT
goS
goS
-goS
-goS
-goS
aAz
yiT
bFv
@@ -119845,13 +119866,13 @@ gQm
fft
ayp
daB
-fDn
+mYW
kyV
xnP
ifq
-jjf
-jjf
-fiN
+fvW
+yiT
+yjP
lCA
kcP
xqA
@@ -120100,15 +120121,15 @@ rUf
ylT
wEK
pKg
-sMm
+nXW
kgk
fDn
njQ
dPv
eEq
-spF
xkq
-jjf
+xkq
+fiN
sNW
lLk
xgA
@@ -120359,10 +120380,10 @@ jfX
eaM
eaM
fDn
-fDn
+tnx
mgm
uKE
-pDV
+qIw
pDV
loL
fiN
@@ -120615,7 +120636,7 @@ jvu
jvu
jvu
jvu
-qcl
+wga
tIS
kCE
jtf
@@ -120872,8 +120893,8 @@ shZ
gei
gei
gei
-gei
ocf
+gei
qtQ
gei
shZ
@@ -121130,7 +121151,7 @@ xru
rfG
iYf
poe
-jyi
+rfG
rfG
uVe
rfG
@@ -131339,7 +131360,7 @@ pbe
okn
okn
cDj
-tFq
+lFM
rPq
gPQ
bsr
diff --git a/_maps/map_files/generic/CentCom_skyrat_z2.dmm b/_maps/map_files/generic/CentCom_skyrat_z2.dmm
index 22be3f59713..540adbbfb4b 100644
--- a/_maps/map_files/generic/CentCom_skyrat_z2.dmm
+++ b/_maps/map_files/generic/CentCom_skyrat_z2.dmm
@@ -36,14 +36,22 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"abK" = (
-/obj/structure/table/wood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"abZ" = (
/obj/machinery/vending/clothing,
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"acF" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e"
+ },
+/turf/closed/indestructible/weeb,
+/area/centcom/holding/cafe)
"adt" = (
/obj/structure/table/wood,
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
@@ -52,21 +60,47 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"adu" = (
+/obj/structure/table/wood,
+/obj/item/folder/blue{
+ pixel_x = -7
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"adw" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/turf/open/floor/plating,
/area/centcom/interlink)
+"adR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/closed/indestructible/wood,
+/area/centcom/holding/cafe)
"adU" = (
/obj/effect/turf_decal/delivery,
/obj/structure/closet/crate/bin,
/turf/open/floor/iron,
/area/centcom/interlink)
"aer" = (
-/obj/structure/chair/sofa/corner/brown,
+/obj/structure/table/wood,
+/obj/structure/window/spawner/directional/south,
+/obj/item/food/poppypretzel{
+ pixel_x = -5;
+ pixel_y = -2
+ },
+/obj/item/food/hotcrossbun{
+ pixel_x = 5;
+ pixel_y = 7
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aeG" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/indestructible{
@@ -133,26 +167,16 @@
/obj/item/hatchet,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
-"afs" = (
-/obj/structure/fireplace{
- dir = 4
- },
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafedorms)
"afx" = (
/obj/machinery/light/directional/east,
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"afy" = (
-/obj/item/bedsheet/dorms_double,
-/obj/structure/bed/double,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"afz" = (
/obj/structure/table,
/obj/machinery/coffeemaker,
@@ -186,8 +210,11 @@
/turf/open/floor/mineral/titanium/blue,
/area/centcom/interlink)
"afN" = (
-/obj/structure/flora/bush/sparsegrass,
-/turf/open/floor/plating/cobblestone,
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aga" = (
/obj/structure/table,
@@ -206,15 +233,20 @@
/turf/open/floor/grass/fairy,
/area/centcom/holding/cafepark)
"agk" = (
-/obj/structure/chair/sofa/corp/right{
+/obj/effect/turf_decal/siding/wood/corner{
dir = 4
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/structure/beebox{
+ name = "Shrine"
},
+/turf/open/floor/wood,
/area/centcom/holding/cafe)
"agr" = (
/obj/machinery/vending/access/command,
@@ -225,9 +257,12 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"agA" = (
-/obj/structure/fireplace,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/chair/stool/directional/south{
+ dir = 8
+ },
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"agF" = (
/obj/structure/flora/bush/grassy/style_4,
/turf/open/misc/grass/planet,
@@ -275,16 +310,8 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"ahk" = (
-/obj/machinery/button/door{
- id = "cozyfloofspot1";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = 24;
- specialfunctions = 4
- },
-/obj/structure/closet/abductor,
-/turf/open/floor/plating/abductor,
-/area/centcom/holding/cafe)
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
"ahs" = (
/obj/structure/flora/bush/leavy/style_2,
/turf/open/misc/grass/planet,
@@ -295,30 +322,6 @@
/obj/structure/flora/bush/pointy,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
-"ahC" = (
-/obj/structure/rack,
-/obj/item/storage/box/lights/mixed,
-/obj/item/clothing/gloves/botanic_leather,
-/obj/item/clothing/gloves/color/blue,
-/obj/item/clothing/suit/caution,
-/obj/item/clothing/suit/caution,
-/obj/item/clothing/suit/caution,
-/obj/item/clothing/suit/caution,
-/obj/item/reagent_containers/cup/bucket,
-/obj/item/reagent_containers/cup/bucket,
-/obj/item/mop,
-/obj/item/mop,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/item/storage/bag/trash,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
-/area/centcom/holding/cafe)
"ahG" = (
/obj/structure/rack,
/obj/item/clothing/mask/breath,
@@ -334,9 +337,11 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"ahI" = (
-/obj/effect/spawner/random/entertainment/arcade,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/table{
+ name = "Jim Norton's Quebecois Coffee table"
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ahK" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -348,6 +353,13 @@
icon_state = "floor"
},
/area/centcom/holding/cafe)
+"ahP" = (
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock{
+ id_tag = "CCD2"
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"ahQ" = (
/obj/structure/flora/bush/sparsegrass,
/turf/open/misc/grass/planet,
@@ -373,6 +385,9 @@
/obj/structure/chair/comfy/brown{
dir = 8
},
+/obj/structure/sign/painting/library{
+ pixel_y = 32
+ },
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aiw" = (
@@ -386,12 +401,11 @@
/turf/open/lava/fake,
/area/centcom/holding/cafepark)
"aiD" = (
-/obj/structure/table/wood,
-/obj/machinery/chem_dispenser/drinks/fullupgrade{
- density = 0
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aiK" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -456,12 +470,7 @@
color = "#B22222";
name = "Curtain"
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"ajK" = (
/obj/structure/flora/rock/pile{
@@ -470,11 +479,11 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"ajR" = (
-/obj/structure/chair/sofa/middle/brown{
- dir = 8
+/obj/structure/flora/rock/pile{
+ icon_state = "basalt3"
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafe)
"aka" = (
/obj/effect/turf_decal/box,
/obj/effect/turf_decal/caution/stand_clear,
@@ -496,14 +505,17 @@
/area/centcom/holding/cafe)
"aki" = (
/obj/effect/turf_decal/tile/blue{
- dir = 1
+ dir = 8
},
/obj/effect/turf_decal/tile/blue{
- dir = 8
+ dir = 4
},
-/obj/effect/turf_decal/tile/blue,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/obj/structure/table,
+/obj/structure/bedsheetbin,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"akp" = (
/obj/structure/flora/bush/flowers_pp,
/obj/structure/flora/bush/flowers_br,
@@ -541,17 +553,10 @@
},
/area/centcom/holding/cafe)
"akS" = (
-/obj/effect/turf_decal/box,
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/machinery/door/firedoor,
-/obj/structure/fans/tiny/invisible,
-/obj/machinery/door/airlock/abductor{
- desc = "What could possibly be in here?";
- name = "Laboraty"
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/machinery/door/airlock/medical/glass{
+ name = "Medbay"
},
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"akW" = (
/turf/open/indestructible/cobble/side{
@@ -559,18 +564,11 @@
},
/area/centcom/holding/cafepark)
"alb" = (
-/obj/structure/mirror{
- pixel_y = 32
- },
-/obj/structure/toilet{
- pixel_y = 14
- },
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/grass/jungle/a/style_3,
+/obj/structure/flora/bush/flowers_br,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ald" = (
/turf/open/indestructible/cobble/corner{
dir = 4
@@ -582,9 +580,10 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"alk" = (
-/obj/machinery/light/directional/east,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/item/bedsheet/dorms_double,
+/obj/structure/bed/double,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"alm" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -605,10 +604,12 @@
},
/area/centcom/holding/cafe)
"alo" = (
-/obj/structure/flora/tree/jungle/small{
- icon_state = "tree5"
+/obj/structure/flora/grass/jungle,
+/mob/living/basic/rabbit,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"alx" = (
/obj/machinery/door/airlock/centcom{
@@ -643,16 +644,8 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"alH" = (
-/obj/structure/table,
-/obj/effect/turf_decal/bot,
-/obj/machinery/light/directional/south,
-/obj/item/surgical_drapes,
-/obj/item/surgicaldrill/alien,
-/obj/item/cautery/alien,
-/obj/item/bonesetter,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/grass/planet,
/area/centcom/holding/cafe)
"alM" = (
/obj/item/reagent_containers/cup/glass/shaker{
@@ -722,54 +715,54 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"alW" = (
-/obj/structure/bed/double,
-/obj/item/bedsheet/dorms_double,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafedorms)
-"amk" = (
-/obj/structure/chair/sofa/middle/brown{
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/structure/railing,
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"amk" = (
+/obj/structure/flora/tree/jungle/small/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"amu" = (
-/obj/structure/dresser{
- icon = 'icons/obj/antags/abductor.dmi';
- icon_state = "dispenser";
- name = "organ storage"
+/obj/structure/stone_tile/block{
+ dir = 8
},
-/turf/open/floor/plating/abductor,
-/area/centcom/holding/cafe)
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"amv" = (
/obj/item/kirbyplants/random,
/turf/open/floor/iron,
/area/centcom/interlink)
"amx" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/machinery/washing_machine,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/turf/closed/wall/mineral/stone,
+/area/centcom/holding/cafepark)
+"amD" = (
+/obj/structure/sink/directional/east,
+/obj/machinery/button/door{
+ id = "CCShowers";
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = 0;
+ pixel_x = -25
},
+/turf/open/floor/iron/freezer,
/area/centcom/holding/cafe)
-"amD" = (
-/obj/structure/chair/sofa/right/brown,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
"amF" = (
-/obj/structure/bed,
-/obj/item/bedsheet/dorms,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"amG" = (
/obj/structure/chair/sofa/corp/left,
/turf/open/floor/carpet/purple,
@@ -787,12 +780,10 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"amU" = (
-/obj/machinery/door/airlock{
- id_tag = "CCD2"
- },
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/wall_torch/spawns_lit/directional/north,
+/obj/structure/flora/bush/sparsegrass/style_random,
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
"ana" = (
/obj/effect/turf_decal/tile/green,
/obj/effect/turf_decal/tile/blue{
@@ -837,10 +828,33 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"anw" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"anz" = (
-/obj/structure/chair/sofa/corp/corner,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"anC" = (
/obj/structure/flora/rock/pile/jungle/large{
pixel_x = 0;
@@ -849,11 +863,13 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"anD" = (
-/obj/structure/chair/sofa/corner/brown{
- dir = 4
+/obj/structure/flora/grass/jungle/a/style_3,
+/obj/structure/flora/bush/flowers_pp,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafepark)
"anL" = (
/obj/item/storage/box/donkpockets{
pixel_x = 7
@@ -871,10 +887,10 @@
},
/area/centcom/holding/cafe)
"anQ" = (
-/obj/structure/flora/bush/reed,
-/turf/open/misc/beach/sand{
- dir = 6
- },
+/obj/effect/light_emitter/interlink,
+/obj/structure/railing,
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"anZ" = (
/obj/machinery/light/cold/directional/east,
@@ -905,19 +921,12 @@
},
/area/centcom/holding/cafe)
"aoE" = (
-/obj/effect/turf_decal/box,
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/machinery/door/firedoor,
-/obj/structure/fans/tiny/invisible,
-/obj/machinery/door/airlock/abductor{
- desc = "What could possibly be in here? Probably naked people.";
- id_tag = "cozyfloofspot1";
- name = "Bedroom"
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
},
-/area/centcom/holding/cafe)
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aoO" = (
/obj/effect/turf_decal/box,
/obj/effect/turf_decal/caution/stand_clear,
@@ -1050,20 +1059,21 @@
},
/area/centcom/holding/cafe)
"apT" = (
-/obj/machinery/button/door{
- id = "CCD1";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 25;
- specialfunctions = 4
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
},
-/obj/item/kirbyplants/random,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
-"apW" = (
-/obj/machinery/light/dim/directional/east,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"apX" = (
/turf/open/misc/beach/sand{
dir = 6
@@ -1078,15 +1088,20 @@
/area/centcom/holding/cafe)
"aqo" = (
/obj/machinery/light/directional/east,
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aqw" = (
-/obj/structure/table/wood,
-/obj/item/toy/cards/deck,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/machinery/button/door{
+ id = "CCD2";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
+ },
+/obj/structure/bed/double/pod,
+/obj/item/bedsheet/dorms_double,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"aqy" = (
/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe,
/turf/open/indestructible/hotelwood,
@@ -1095,8 +1110,8 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"aqO" = (
-/obj/machinery/photocopier,
/obj/machinery/light/directional/south,
+/obj/machinery/photocopier/gratis,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aqP" = (
@@ -1112,51 +1127,31 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aqV" = (
-/obj/structure/flora/bush/ferny{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/structure/flora/bush/fullgrass{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/structure/flora/bush/flowers_br{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/structure/window/reinforced/spawner/directional/east{
- layer = 2.9
- },
-/obj/structure/window/reinforced/spawner/directional/south,
-/turf/open/floor/grass/fairy,
-/area/centcom/holding/cafe)
+/obj/structure/flora/grass/jungle/a/style_5,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aqX" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/structure/mop_bucket/janitorialcart{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
-/area/centcom/holding/cafe)
-"arh" = (
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/structure/chair/office/light{
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/turf/open/indestructible/hoteltile{
- icon_state = "white"
+ icon_state = "floor"
},
+/area/centcom/holding/cafepark)
+"arh" = (
+/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
"arp" = (
/obj/effect/turf_decal/tile/green,
@@ -1209,10 +1204,9 @@
/turf/closed/indestructible/wood,
/area/centcom/holding/cafevox)
"asz" = (
-/obj/structure/flora/bush/flowers_br,
-/obj/structure/flora/bush/fullgrass,
-/obj/structure/flora/bush/pointy,
-/turf/open/misc/beach/sand,
+/obj/structure/table/wood/fancy/blue,
+/obj/machinery/light/directional/north,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafepark)
"asC" = (
/obj/effect/turf_decal/tile/blue{
@@ -1305,15 +1299,23 @@
},
/area/centcom/holding/cafe)
"atF" = (
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 1
+ },
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"atJ" = (
+/obj/machinery/door/window/right/directional/east,
/obj/effect/turf_decal/stripes/line{
- dir = 5
+ dir = 4
},
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/effect/turf_decal/tile/purple/half/contrasted{
+ dir = 1
},
+/turf/open/floor/iron,
/area/centcom/holding/cafe)
"atQ" = (
/obj/structure/flora/bush/fullgrass{
@@ -1371,25 +1373,29 @@
/area/centcom/holding/cafepark)
"auH" = (
/obj/machinery/light/directional/south,
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"auM" = (
/obj/structure/fans/tiny/invisible,
/turf/open/indestructible/cobble,
/area/centcom/holding/cafepark)
"auP" = (
-/obj/structure/bed/double,
-/obj/item/bedsheet/dorms_double,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 1
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"auQ" = (
-/obj/structure/chair/sofa/corp{
+/obj/structure/stone_tile/block{
dir = 8
},
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/item/flashlight/flare/candle/infinite,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"auR" = (
/obj/structure/flora/biolumi/flower{
light_color = "#D9FF00";
@@ -1409,10 +1415,17 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"avl" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/rack/wooden,
+/obj/item/reagent_containers/cup/glass/trophy{
+ pixel_y = 16;
+ pixel_x = 7
+ },
+/obj/item/reagent_containers/cup/glass/trophy{
+ pixel_y = 16;
+ pixel_x = -2
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"avn" = (
/obj/structure/closet/secure_closet/freezer/meat/all_access,
/obj/item/food/meat/slab/chicken,
@@ -1430,11 +1443,9 @@
/turf/open/floor/iron/showroomfloor,
/area/centcom/holding/cafe)
"avt" = (
-/obj/structure/chair/sofa/left/brown{
- dir = 4
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/grass/jungle/a/style_2,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"avu" = (
/obj/vehicle/ridden/janicart/upgraded,
/obj/item/key/janitor,
@@ -1469,14 +1480,15 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"awt" = (
-/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/wall_torch/spawns_lit/directional/south,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"awv" = (
-/obj/structure/chair/sofa/corp/left,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"awA" = (
/obj/structure/chair/comfy/shuttle{
dir = 1
@@ -1504,21 +1516,23 @@
},
/area/centcom/holding/cafe)
"awN" = (
-/mob/living/basic/chick,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/structure/chair/sofa/bench{
+ dir = 4
+ },
+/obj/machinery/light/warm/directional/west,
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"awQ" = (
/obj/machinery/light/directional/south,
/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"awU" = (
-/obj/structure/flora/biolumi/flower{
- light_color = "#D9FF00";
- random_light = null
+/obj/structure/railing/wooden_fencing{
+ dir = 4
},
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"awV" = (
/obj/structure/spacevine{
name = "thick vines";
@@ -1527,29 +1541,34 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"awW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/structure/chair/sofa/bench/left{
+ dir = 1
},
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/machinery/status_display/evac/directional/south,
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"awY" = (
-/obj/machinery/button/door{
- id = "ghostcafecabin2";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -24;
- specialfunctions = 4
+/obj/structure/table,
+/obj/machinery/recharger{
+ pixel_x = -2;
+ pixel_y = 1
},
-/obj/structure/bed/double,
-/obj/item/bedsheet/dorms_double,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/item/book/manual/wiki/security_space_law{
+ pixel_x = 9;
+ pixel_y = 5
+ },
+/obj/item/restraints/handcuffs{
+ pixel_x = 1;
+ pixel_y = -4
},
+/obj/item/restraints/handcuffs{
+ pixel_x = 1;
+ pixel_y = -4
+ },
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/machinery/light/directional/north,
+/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
"axa" = (
/turf/open/misc/beach/sand{
@@ -1557,12 +1576,10 @@
},
/area/centcom/holding/cafepark)
"axo" = (
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/chair/sofa/corner/brown{
dir = 4
},
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"axw" = (
/obj/structure/flora/bush/leavy/style_3,
@@ -1584,8 +1601,9 @@
},
/area/centcom/holding/cafe)
"axA" = (
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafedorms)
+/obj/structure/chair/sofa/bench/left,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"axB" = (
/obj/structure/chair/sofa/bench{
dir = 8
@@ -1593,25 +1611,30 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"axC" = (
-/obj/structure/table/wood,
-/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
- density = 0
+/obj/structure/flora/grass/jungle/b/style_5,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafepark)
"axD" = (
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
+/obj/structure/curtain,
+/obj/machinery/light/floor{
+ alpha = 0;
+ invisibility = 100;
+ light_range = 10;
+ nightshift_light_power = 10
},
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
"axF" = (
-/obj/structure/chair/sofa/left/brown{
- dir = 8
+/obj/structure/bed/dogbed,
+/obj/item/pillow/random{
+ pixel_y = 4;
+ pixel_x = -3
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"axJ" = (
/turf/open/misc/beach/sand{
dir = 4
@@ -1666,10 +1689,12 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aye" = (
-/obj/machinery/light/directional/east,
-/obj/structure/table/wood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"ayj" = (
/obj/structure/fluff/tram_rail/anchor{
desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts.";
@@ -1710,15 +1735,24 @@
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"ayt" = (
-/obj/structure/table/wood/fancy/blue,
-/obj/machinery/light/directional/north,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/structure/chair/sofa/bench/left,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
},
-/area/centcom/holding/cafe)
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"ayx" = (
/obj/effect/turf_decal/tile/green{
dir = 1
@@ -1764,11 +1798,10 @@
},
/area/centcom/holding/cafe)
"azj" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/light/directional/north,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 4
},
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"azk" = (
/obj/structure/flora/tree/jungle/small,
@@ -1804,12 +1837,12 @@
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"azB" = (
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"azC" = (
-/obj/structure/barricade/wooden,
-/turf/open/misc/dirt/planet,
-/area/centcom/holding/cafepark)
+/obj/structure/sign/chalkboard_menu,
+/turf/closed/indestructible/steel,
+/area/centcom/holding/cafe)
"azR" = (
/obj/structure/fluff/tram_rail{
desc = "This probably won't stop a titanium tram from hitting the wall, but it's the thought that counts.";
@@ -1829,17 +1862,16 @@
},
/area/centcom/holding/cafe)
"azY" = (
-/turf/open/floor/plating/cobblestone,
+/obj/structure/closet/crate/wooden/storage_barrel,
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"aAc" = (
/obj/structure/flora/bush/flowers_pp,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aAd" = (
-/obj/effect/spawner/random/entertainment/arcade,
-/obj/machinery/light/directional/north,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
"aAe" = (
/obj/machinery/door/airlock/multi_tile/public/glass{
dir = 4
@@ -1848,31 +1880,68 @@
/area/centcom/interlink)
"aAh" = (
/obj/machinery/light/directional/west,
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aAq" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/structure/rack/wooden,
+/obj/item/perfume/amber{
+ pixel_x = -8;
+ pixel_y = 10
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/item/perfume/cologne{
+ pixel_x = -4;
+ pixel_y = 10
},
-/obj/structure/closet/crate/trashcart,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/item/perfume/wood{
+ pixel_y = 10
+ },
+/obj/item/perfume/mint{
+ pixel_x = 4;
+ pixel_y = 10
+ },
+/obj/item/perfume/cherry{
+ pixel_x = -8;
+ pixel_y = -5
+ },
+/obj/item/perfume/jasmine{
+ pixel_x = -4;
+ pixel_y = -5
+ },
+/obj/item/perfume/pear{
+ pixel_y = -5
},
+/obj/item/perfume/rose{
+ pixel_x = 4;
+ pixel_y = -5
+ },
+/obj/item/perfume/vanilla{
+ pixel_x = 8;
+ pixel_y = 10
+ },
+/obj/item/perfume/strawberry{
+ pixel_x = 8;
+ pixel_y = -5
+ },
+/obj/structure/window/spawner/directional/east,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aAr" = (
-/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
/obj/effect/turf_decal/tile/blue{
dir = 8
},
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
/turf/open/indestructible/hoteltile{
icon_state = "white"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aAu" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -1886,13 +1955,9 @@
},
/area/centcom/holding/cafe)
"aAv" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/cup/rag,
-/obj/machinery/reagentgrinder{
- pixel_y = 8
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/indestructible/steel,
+/area/centcom/holding/cafe)
"aAz" = (
/obj/structure/flora/bush/jungle/a/style_3,
/turf/open/misc/grass/planet,
@@ -1908,11 +1973,6 @@
/area/centcom/interlink)
"aAE" = (
/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green{
- pixel_x = -3;
- pixel_y = 8;
- start_on = 0
- },
/obj/item/camera_film,
/obj/item/canvas/twentythree_twentythree,
/obj/item/canvas/twentythree_twentythree,
@@ -1929,21 +1989,10 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aAJ" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e"
- },
-/obj/effect/turf_decal/siding/wood{
- dir = 8
- },
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = -19;
- pixel_y = -10
- },
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = -16
- },
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/machinery/primitive_stove,
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/floor/stone,
+/area/centcom/holding/cafepark)
"aAL" = (
/obj/item/reagent_containers/cup/soda_cans/thirteenloko{
pixel_x = -10;
@@ -1991,26 +2040,23 @@
/obj/structure/mirror{
pixel_y = 32
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aAY" = (
-/obj/structure/flora/bush/sunny,
-/obj/structure/flora/bush/grassy,
-/obj/structure/flora/bush/lavendergrass,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/turf/closed/indestructible/steel,
+/area/centcom/holding/cafe)
"aBa" = (
/obj/structure/fence{
dir = 4
},
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
},
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aBd" = (
/turf/open/indestructible/hoteltile{
@@ -2072,10 +2118,10 @@
},
/area/centcom/holding/cafe)
"aBv" = (
-/obj/structure/fence{
+/obj/structure/chair/sofa/corp/right{
dir = 4
},
-/turf/open/floor/iron,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aBH" = (
/obj/effect/turf_decal/tile/neutral{
@@ -2097,22 +2143,21 @@
},
/area/centcom/holding/cafe)
"aBT" = (
-/obj/structure/chair/sofa/corp/left{
- dir = 4
- },
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/table/wood,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"aBW" = (
/obj/machinery/hydroponics/constructable,
/obj/machinery/light/directional/north,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafe)
"aCa" = (
-/obj/structure/flora/tree/jungle/small{
- icon_state = "tree3"
+/obj/effect/spawner/liquids_spawner,
+/obj/machinery/light/floor,
+/turf/open/floor/iron/pool/cobble/corner{
+ dir = 8
},
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/area/centcom/holding/cafe)
"aCc" = (
/obj/item/storage/box/drinkingglasses{
pixel_x = -2;
@@ -2138,6 +2183,7 @@
/obj/machinery/power/shuttle_engine/heater{
dir = 4
},
+/obj/effect/light_emitter/interlink,
/turf/open/floor/plating{
baseturfs = /turf/open/floor/plating
},
@@ -2148,23 +2194,18 @@
},
/area/centcom/holding/cafepark)
"aCw" = (
-/obj/structure/chair/sofa/corp,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
-"aCD" = (
-/obj/structure/table/wood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafe)
-"aCF" = (
-/obj/structure/chair/sofa/corp/right{
- dir = 8
+/obj/structure/chair/stool/directional/south{
+ dir = 1;
+ name = "Jim Norton's Quebecois Coffee stool"
},
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"aCF" = (
+/obj/machinery/button/curtain{
+ id = "ghostcafecabin3curtain";
+ pixel_y = -25
},
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aCK" = (
/obj/effect/turf_decal/tile/green/opposingcorners,
@@ -2178,48 +2219,35 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aCQ" = (
-/obj/structure/chair/sofa/left/brown,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/bush/fullgrass,
+/obj/structure/railing/wooden_fencing,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aCR" = (
/obj/item/hilbertshotel/ghostdojo,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aCS" = (
/obj/machinery/light/directional/west,
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"aCU" = (
-/obj/structure/table/wood/fancy/blue,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafe)
-"aCY" = (
-/obj/item/reagent_containers/dropper,
-/obj/item/reagent_containers/cup/beaker{
- pixel_x = 8;
- pixel_y = 2
- },
-/obj/structure/table/glass,
-/obj/item/storage/box/rxglasses{
- pixel_x = 5;
- pixel_y = 10
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/obj/item/storage/box/bodybags{
- pixel_x = -5;
- pixel_y = 10
- },
-/obj/item/storage/box/disks{
- pixel_x = 2;
- pixel_y = 2
+/area/centcom/holding/cafepark)
+"aCX" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
},
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"aCY" = (
+/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
},
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"aDa" = (
/obj/structure/flora/bush/sparsegrass,
@@ -2237,9 +2265,10 @@
/turf/open/floor/carpet/purple,
/area/centcom/holding/cafe)
"aDl" = (
-/obj/structure/chair/sofa/corp/right,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/rock/pile/jungle/style_3,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aDr" = (
/obj/machinery/chem_master/condimaster,
/obj/machinery/light/directional/north,
@@ -2257,29 +2286,27 @@
},
/area/centcom/holding/cafe)
"aDB" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
},
-/area/centcom/holding/cafe)
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aDC" = (
/turf/closed/indestructible/opshuttle,
/area/centcom/holding/cafe)
"aDQ" = (
-/obj/effect/turf_decal/box,
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/machinery/door/firedoor,
-/obj/structure/fans/tiny/invisible,
-/obj/machinery/door/airlock/abductor{
- desc = "What could possibly be in here? Probably naked people.";
- id_tag = "ghostcafecabin2";
- name = "Bedroom"
+/obj/machinery/door/window/left/directional/west{
+ base_state = "right";
+ dir = 1;
+ icon_state = "right";
+ name = "Monkey Pen";
+ pixel_y = 2;
+ req_access = list("genetics")
},
/turf/open/indestructible/hoteltile{
icon_state = "darkfull"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aDY" = (
/obj/machinery/processor,
/obj/machinery/light/directional/west,
@@ -2301,13 +2328,12 @@
/turf/open/floor/grass/fairy,
/area/centcom/holding/cafepark)
"aEm" = (
-/obj/structure/table/wood,
-/obj/item/book/manual/wiki/barman_recipes{
- pixel_x = -4;
- pixel_y = 7
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 8
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"aEp" = (
/obj/machinery/chem_dispenser/mutagensaltpeter,
/turf/open/indestructible/hoteltile{
@@ -2341,10 +2367,10 @@
/turf/open/floor/grass/fairy,
/area/centcom/holding/cafepark)
"aEX" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/wall_torch/spawns_lit/directional/south,
+/obj/structure/flora/bush/sparsegrass/style_random,
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
"aFe" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -2366,22 +2392,9 @@
},
/area/centcom/holding/cafepark)
"aFy" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 4
- },
-/obj/structure/bed/double{
- pixel_y = -9
- },
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = 9;
- pixel_y = 29
- },
-/obj/item/bedsheet/dorms_double{
- pixel_y = -9
- },
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/structure/mineral_door/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"aFB" = (
/obj/structure/flora/bush/ferny,
/turf/open/misc/grass/planet,
@@ -2393,30 +2406,16 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aFK" = (
+/obj/structure/table/optable,
+/obj/effect/turf_decal/tile/purple/half/contrasted,
/obj/machinery/light/directional/south,
-/obj/structure/table/wood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"aFN" = (
-/obj/structure/flora/bush/sunny{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/structure/flora/bush/grassy{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/structure/window/reinforced/spawner/directional/west,
-/obj/structure/window/reinforced/spawner/directional/south,
-/obj/structure/flora/bush/flowers_br{
- pixel_x = -3;
- pixel_y = 3
- },
-/obj/structure/flora/bush/ferny,
-/obj/structure/window/reinforced/spawner/directional/east{
- layer = 2.9
+/obj/effect/spawner/liquids_spawner,
+/turf/open/indestructible/cobble/side{
+ dir = 8
},
-/turf/open/floor/grass/fairy,
/area/centcom/holding/cafe)
"aFP" = (
/turf/open/misc/grass/planet,
@@ -2428,11 +2427,8 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aGb" = (
-/obj/structure/curtain/cloth/fancy/mechanical{
- id = "ghostcafecabin3curtain"
- },
-/turf/closed/indestructible/fakeglass,
-/area/centcom/holding/cafedorms)
+/turf/closed/indestructible/riveted/boss,
+/area/centcom/holding/cafepark)
"aGg" = (
/obj/structure/flora/bush/large/style_2,
/turf/open/misc/grass/planet,
@@ -2491,9 +2487,7 @@
light_range = 10;
nightshift_light_power = 10
},
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aGT" = (
/obj/effect/turf_decal/tile/neutral{
@@ -2550,40 +2544,31 @@
},
/area/centcom/holding/cafe)
"aHi" = (
-/obj/machinery/button/door{
- id = "ghostcafecabin1";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = 24;
- specialfunctions = 4
- },
+/obj/structure/fake_stairs/wood/directional/east,
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aHj" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/grandfatherclock{
- desc = "An alien console, it's completely holographic and is complete gibberish with phrases like 'Bogos Binted' flying across the screen.";
- icon = 'icons/obj/antags/abductor.dmi';
- icon_state = "console";
- name = "alien console"
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/flora/bush/ferny{
+ pixel_x = -3;
+ pixel_y = 3
},
-/area/centcom/holding/cafe)
-"aHl" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/structure/flora/bush/fullgrass{
+ pixel_x = -3;
+ pixel_y = 3
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/structure/flora/bush/flowers_br{
+ pixel_x = -3;
+ pixel_y = 3
},
-/obj/machinery/washing_machine,
-/obj/machinery/light/small/directional/north,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/structure/window/reinforced/spawner/directional/east{
+ layer = 2.9
},
-/area/centcom/holding/cafe)
+/obj/structure/window/reinforced/spawner/directional/south,
+/turf/open/floor/grass/fairy,
+/area/centcom/holding/cafepark)
+"aHl" = (
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
"aHC" = (
/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe,
/turf/open/floor/iron/showroomfloor,
@@ -2595,15 +2580,11 @@
},
/area/centcom/holding/cafepark)
"aHJ" = (
-/obj/item/bedsheet/dorms_double,
-/obj/structure/bed/double,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
},
-/area/centcom/holding/cafedorms)
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"aHK" = (
/obj/structure/chair/comfy/brown{
dir = 1
@@ -2630,11 +2611,8 @@
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"aHY" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/showcase/machinery/signal_decrypter,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
+/obj/machinery/firealarm/directional/north,
+/turf/open/floor/iron/recharge_floor,
/area/centcom/holding/cafe)
"aHZ" = (
/turf/open/misc/beach/coast,
@@ -2646,9 +2624,11 @@
},
/area/centcom/holding/cafe)
"aIm" = (
-/obj/structure/spacevine,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e"
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"aIp" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -2658,9 +2638,7 @@
},
/area/centcom/holding/cafe)
"aIr" = (
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aIt" = (
/obj/structure/table/wood,
@@ -2713,16 +2691,11 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aII" = (
-/obj/structure/chair/comfy/brown{
- color = "#c45c57";
- desc = "Remarkably soft, with plush cozy cushions, premium memory-foam and covered in stain-resistant fabric. Made by Kat-Kea???!";
- name = "Premium Cozy Chair"
+/obj/structure/chair/comfy/barber_chair{
+ dir = 8
},
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aIN" = (
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aIU" = (
/obj/structure/bodycontainer/crematorium{
dir = 4;
@@ -2773,26 +2746,36 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"aJP" = (
-/obj/machinery/button/door{
- id = "CCD2";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 25;
- specialfunctions = 4
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
},
-/obj/structure/bed/double/pod,
-/obj/item/bedsheet/dorms_double,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"aJT" = (
/turf/open/indestructible/cobble/side{
dir = 4
},
/area/centcom/holding/cafepark)
"aJX" = (
-/obj/structure/sink/directional/west,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/flora/bush/jungle/b,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafe)
"aKa" = (
/obj/effect/turf_decal/weather/dirt{
dir = 10
@@ -2828,18 +2811,9 @@
},
/area/centcom/holding/cafepark)
"aKQ" = (
-/obj/structure/toilet,
-/obj/structure/curtain{
- alpha = 250;
- color = "#292929";
- name = "Curtain";
- pixel_x = 2
- },
-/obj/effect/turf_decal/tile/red/anticorner{
- dir = 1
- },
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/obj/structure/chair/wood,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aKU" = (
/obj/effect/turf_decal/stripes/asteroid/line{
dir = 8
@@ -2847,42 +2821,31 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"aKX" = (
-/obj/machinery/light/directional/south,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aLe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/structure/chair/office/light{
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/iron/dark/side{
dir = 4
},
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
/area/centcom/holding/cafe)
-"aLu" = (
-/obj/structure/table/wood,
-/obj/machinery/light/floor{
- alpha = 0;
- invisibility = 100;
- light_range = 10;
- nightshift_light_power = 10
- },
-/obj/item/reagent_containers/cup/glass/mug/tea,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aLz" = (
-/obj/structure/chair/sofa/corp/corner{
+"aLe" = (
+/obj/structure/chair/sofa/right/brown{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"aLu" = (
+/obj/structure/fake_stairs/wood/directional/north,
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
"aLD" = (
/turf/open/misc/beach/coast{
dir = 5
},
/area/centcom/holding/cafepark)
+"aLF" = (
+/obj/effect/spawner/liquids_spawner,
+/obj/structure/chair/sofa/bench/corner,
+/turf/open/floor/iron/pool/cobble/corner,
+/area/centcom/holding/cafe)
"aLH" = (
/obj/structure/flora/bush/fullgrass,
/turf/open/misc/grass/planet,
@@ -2940,11 +2903,11 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aMG" = (
-/obj/structure/chair/sofa/corp/left{
- dir = 1
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/fans/tiny/invisible,
+/obj/structure/flora/grass/jungle/b,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aMJ" = (
/obj/structure/flora/tree/jungle,
/turf/open/misc/grass/planet,
@@ -2956,31 +2919,20 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"aMQ" = (
-/obj/structure/chair/sofa/corp/left{
- dir = 8
- },
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafe)
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"aMR" = (
/obj/machinery/power/shuttle_engine/large{
dir = 4
},
+/obj/effect/light_emitter/interlink,
/turf/open/floor/plating{
baseturfs = /turf/open/floor/plating
},
/area/centcom/holding/cafe)
"aMV" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/obj/structure/chair/sofa/right/brown,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aMW" = (
/obj/structure/flora/grass/green{
@@ -2988,35 +2940,32 @@
},
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
-"aNa" = (
-/obj/structure/mineral_door/wood,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
"aNd" = (
-/obj/structure/sink/directional/east,
-/obj/structure/mirror{
- pixel_y = 32
- },
-/obj/structure/toilet{
- pixel_y = 14
- },
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
+/obj/structure/table/wood,
+/obj/item/stack/sheet/bone{
+ pixel_y = 7;
+ pixel_x = 3
},
-/area/centcom/holding/cafedorms)
+/obj/structure/wall_torch/spawns_lit/directional/south,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aNe" = (
/obj/machinery/chem_master/condimaster,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
"aNg" = (
-/obj/machinery/door/airlock{
- id_tag = "CCD1"
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
},
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"aNi" = (
/obj/item/reagent_containers/cup/glass/bottle/gin{
pixel_x = -7;
@@ -3064,17 +3013,23 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aNp" = (
-/obj/machinery/light/directional/west,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aNq" = (
-/obj/structure/flora/biolumi/flower{
- light_power = 0.3;
- light_range = 10;
- random_light = null
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
},
-/turf/open/misc/beach/sand,
+/obj/item/flashlight/flare/candle/infinite,
+/turf/open/floor/fakebasalt,
/area/centcom/holding/cafepark)
+"aNq" = (
+/obj/machinery/button/door{
+ id = "ghostcafecabinb";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -25;
+ specialfunctions = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"aNy" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
@@ -3084,21 +3039,24 @@
},
/area/centcom/holding/cafe)
"aNz" = (
-/obj/structure/chair/sofa/corp/right{
- dir = 1
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/dark/side{
+ dir = 8
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aNB" = (
-/obj/machinery/light/directional/east,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/bush/leavy/style_3,
+/obj/structure/flora/tree/jungle,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aNF" = (
-/obj/structure/chair/sofa/corp/left{
- dir = 8
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
},
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/turf/open/misc/beach/sand,
+/area/centcom/holding/cafepark)
"aNK" = (
/obj/structure/flora/bush/flowers_yw{
pixel_x = 3;
@@ -3107,17 +3065,13 @@
/turf/open/floor/grass/fairy,
/area/centcom/holding/cafepark)
"aNT" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/cup/glass/bottle/vodka{
- pixel_x = 3;
- pixel_y = 2
- },
-/obj/item/reagent_containers/cup/glass/bottle/whiskey{
- pixel_x = -5;
- pixel_y = 4
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/wood{
+ id_tag = "CCSauna";
+ name = "Sauna"
},
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aNU" = (
/obj/structure/closet/crate/wooden/toy,
/turf/open/misc/dirt/planet,
@@ -3129,11 +3083,13 @@
/obj/structure/table,
/obj/item/lightreplacer,
/obj/item/lightreplacer,
+/obj/item/lightreplacer,
+/obj/item/lightreplacer,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aOc" = (
/obj/machinery/light/directional/south,
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"aOi" = (
/obj/machinery/seed_extractor,
@@ -3201,9 +3157,8 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aOz" = (
-/obj/structure/flora/rock/pile,
-/obj/structure/fans/tiny/invisible,
-/turf/open/misc/grass/planet,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"aOG" = (
/obj/structure/closet,
@@ -3232,7 +3187,7 @@
},
/obj/item/clothing/glasses/welding,
/obj/item/clothing/glasses/welding,
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"aOI" = (
/obj/effect/turf_decal/tile/neutral{
@@ -3264,13 +3219,10 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aOW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
/turf/open/indestructible/hoteltile{
- icon_state = "white"
+ icon_state = "darkfull"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aOY" = (
/obj/structure/curtain,
/obj/machinery/light/floor{
@@ -3279,11 +3231,7 @@
light_range = 10;
nightshift_light_power = 10
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"aOZ" = (
/obj/machinery/light/directional/north,
@@ -3304,14 +3252,16 @@
/obj/structure/sink/directional/west,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
-"aPx" = (
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+"aPC" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 8
},
-/area/centcom/holding/cafe)
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aPG" = (
/obj/structure/sink/kitchen/directional/east,
/turf/open/indestructible/hoteltile{
@@ -3323,19 +3273,18 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aPU" = (
+/obj/effect/light_emitter/interlink,
/turf/open/floor/plating{
baseturfs = /turf/open/floor/plating
},
/area/centcom/holding/cafe)
"aPV" = (
-/obj/structure/table/wood,
-/obj/item/flashlight{
- desc = "A hand-held not-so-emergency light that's very very bright!";
- light_power = 10;
- name = "Super Light"
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
},
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"aPY" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -3343,16 +3292,8 @@
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
"aPZ" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/obj/structure/sign/painting/library_secure,
+/turf/closed/indestructible/wood,
/area/centcom/holding/cafe)
"aQa" = (
/obj/machinery/vending/wardrobe/det_wardrobe,
@@ -3375,7 +3316,8 @@
/turf/open/water/beach,
/area/centcom/holding/cafepark)
"aQw" = (
-/obj/structure/flora/bush/grassy,
+/obj/structure/flora/grass/jungle/b/style_random,
+/obj/structure/flora/grass/jungle/b/style_random,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aQx" = (
@@ -3408,17 +3350,12 @@
},
/area/centcom/holding/cafe)
"aQE" = (
-/obj/structure/table/wood,
-/obj/item/reagent_containers/cup/glass/shaker{
- pixel_x = 1;
- pixel_y = 13
- },
-/obj/item/reagent_containers/cup/glass/bottle/rum{
- pixel_x = -7;
- pixel_y = 2
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"aQK" = (
/obj/structure/closet,
/obj/item/stack/sheet/mineral/wood/fifty,
@@ -3450,12 +3387,13 @@
/area/centcom/holding/cafe)
"aQM" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/plating,
+/turf/open/floor/plating/vox,
/area/centcom/holding/cafevox)
"aQQ" = (
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/structure/fireplace{
+ dir = 4
},
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"aQR" = (
/obj/effect/turf_decal/stripes/line{
@@ -3484,22 +3422,17 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"aRd" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
-/area/centcom/holding/cafe)
+/obj/item/kirbyplants/random,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aRe" = (
/obj/structure/flora/bush/fullgrass,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"aRi" = (
+/obj/structure/railing{
+ dir = 8
+ },
/turf/open/indestructible/cobble/corner{
dir = 1
},
@@ -3509,9 +3442,16 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"aRo" = (
-/obj/structure/musician/piano,
+/obj/structure/table/wood,
+/obj/machinery/light/floor{
+ alpha = 0;
+ invisibility = 100;
+ light_range = 10;
+ nightshift_light_power = 10
+ },
+/obj/item/reagent_containers/cup/glass/mug/tea,
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aRt" = (
/obj/structure/table/wood/fancy/blue,
/obj/item/reagent_containers/condiment/peppermill{
@@ -3547,36 +3487,18 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aRx" = (
-/obj/item/folder/white{
- pixel_x = 4;
- pixel_y = -3
- },
-/obj/item/folder/white{
- pixel_x = 4;
- pixel_y = -3
- },
-/obj/item/storage/pill_bottle/mutadone,
-/obj/item/storage/pill_bottle/mannitol,
-/obj/structure/table/glass,
-/obj/item/clothing/gloves/latex,
-/obj/item/flashlight/pen{
- pixel_x = 4;
- pixel_y = 3
+/obj/structure/sink/directional/east,
+/obj/structure/mirror{
+ pixel_y = 32
},
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/toilet{
+ pixel_y = 14
},
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafe)
"aRC" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/obj/machinery/light/directional/north,
+/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
"aRH" = (
/obj/structure/flora/bush/flowers_br{
@@ -3598,8 +3520,14 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aRP" = (
-/obj/structure/flora/tree/jungle/small,
-/turf/open/misc/dirt/planet,
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/biolumi/flower{
+ light_color = "#D9FF00";
+ light_power = 0.3;
+ light_range = 10;
+ random_light = null
+ },
+/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aRS" = (
/turf/open/misc/beach/coast/corner{
@@ -3668,54 +3596,29 @@
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aSt" = (
-/obj/item/kirbyplants/random,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/sand,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"aSy" = (
/obj/structure/bookcase/random,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aSC" = (
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafedorms)
-"aSH" = (
-/obj/structure/dresser{
- pixel_y = 7
- },
-/obj/item/flashlight/lamp/green{
- pixel_x = -3;
- pixel_y = 22
- },
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
- },
-/area/centcom/holding/cafedorms)
+/obj/structure/chair/stool/directional/south,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aSP" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/turf/closed/indestructible/rock,
/area/centcom/holding/cafe)
"aSV" = (
-/obj/structure/chair/sofa/right/brown{
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/block{
dir = 4
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"aSY" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -3723,10 +3626,10 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"aSZ" = (
-/obj/structure/flora/bush/fullgrass,
-/obj/structure/flora/bush/flowers_yw,
-/obj/structure/flora/bush/sunny,
-/turf/open/misc/beach/sand,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"aTb" = (
/turf/closed/indestructible/fakeglass,
@@ -3745,9 +3648,9 @@
},
/area/centcom/holding/cafe)
"aTl" = (
-/mob/living/basic/cow,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"aTp" = (
/obj/machinery/light/floor{
alpha = 0;
@@ -3756,65 +3659,53 @@
light_range = 20;
nightshift_light_power = 10
},
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 4
},
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aTu" = (
/obj/structure/flora/bush/grassy/style_2,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"aTv" = (
-/obj/structure/dresser,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/closet/crate/bin,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"aTB" = (
-/obj/structure/flora/bush/fullgrass{
- icon_state = "brflowers_3"
+/obj/machinery/light/floor{
+ alpha = 0;
+ invisibility = 100;
+ light_power = 10;
+ light_range = 20;
+ nightshift_light_power = 10
},
-/turf/open/misc/grass/planet,
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aTD" = (
-/obj/structure/chair/sofa/corp/right{
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/obj/machinery/light/directional/west,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"aTE" = (
/obj/effect/turf_decal/caution,
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron,
/area/centcom/interlink)
"aTG" = (
-/obj/machinery/door/airlock/wood{
- id_tag = "ghostcafecabin3";
- name = "Wooden Cabin"
- },
-/obj/structure/fans/tiny/invisible,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aTI" = (
-/obj/structure/table/glass,
-/obj/item/storage/box/disks{
- pixel_x = -8;
- pixel_y = 10
- },
-/obj/item/storage/box/syringes{
- pixel_x = 7;
- pixel_y = 10
- },
-/obj/item/storage/box/beakers{
- pixel_x = 2;
- pixel_y = 2
- },
-/obj/item/reagent_containers/spray/cleaner{
- pixel_x = -11
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
-/area/centcom/holding/cafe)
+/obj/structure/flora/grass/jungle/b/style_5,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aTR" = (
/obj/structure/spacevine{
name = "thick vines";
@@ -3828,18 +3719,30 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"aTV" = (
-/obj/structure/showcase/fakeid{
- name = "console"
+/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/abductor{
+ desc = "What could possibly be in here?";
+ name = "Laboraty"
},
/turf/open/indestructible/hoteltile{
icon_state = "darkfull"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aUd" = (
-/obj/machinery/light/directional/south,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/machinery/button/door/directional/west{
+ id = "ghostcafecell1";
+ name = "Prison Cell 1 Lock";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
+ },
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
+ dir = 1
},
+/obj/structure/closet/secure_closet/brig,
+/turf/open/floor/iron,
/area/centcom/holding/cafe)
"aUf" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
@@ -3868,40 +3771,33 @@
},
/area/centcom/holding/cafepark)
"aUu" = (
-/obj/structure/chair/sofa/corp/right{
+/obj/structure/chair/sofa/corp/left{
dir = 4
},
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"aUw" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/structure/sink/directional/east,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
},
-/area/centcom/holding/cafe)
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"aUz" = (
/obj/machinery/light/directional/south,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aUA" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/machinery/door/window/left/directional/west{
+ dir = 1;
+ name = "Monkey Pen";
+ pixel_y = 2;
+ req_access = list("genetics")
},
-/obj/structure/table,
-/obj/structure/bedsheetbin,
+/obj/machinery/light/directional/west,
/turf/open/indestructible/hoteltile{
- icon_state = "white"
+ icon_state = "darkfull"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aUK" = (
/obj/effect/turf_decal/box,
/obj/effect/turf_decal/caution/stand_clear,
@@ -3938,18 +3834,20 @@
},
/area/centcom/holding/cafe)
"aVg" = (
-/obj/machinery/door/airlock/wood{
- id_tag = "ghostcafecabin1";
- name = "Wooden Cabin"
+/obj/structure/table/wood,
+/obj/item/folder/white{
+ pixel_x = -4;
+ pixel_y = -3
+ },
+/obj/item/toy/figure/psychologist{
+ pixel_x = 4;
+ pixel_y = 10
},
-/obj/structure/fans/tiny/invisible,
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aVk" = (
/obj/machinery/light/directional/north,
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/turf/open/indestructible/plating,
/area/centcom/holding/cafepark)
"aVp" = (
/obj/effect/turf_decal/box,
@@ -3978,28 +3876,13 @@
/area/centcom/holding/cafepark)
"aVC" = (
/obj/machinery/shower/directional/west,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"aVI" = (
-/turf/open/indestructible/cobble/corner{
- dir = 8
- },
+/obj/structure/fake_stairs/directional/east,
+/obj/structure/railing,
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
-"aVS" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
-/area/centcom/holding/cafe)
"aWb" = (
/turf/open/floor/iron/white,
/area/centcom/interlink)
@@ -4046,9 +3929,14 @@
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
"aWp" = (
-/obj/machinery/light/directional/east,
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 9
+ },
+/obj/machinery/washing_machine,
+/obj/machinery/light/warm/directional/west,
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"aWq" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
@@ -4062,9 +3950,11 @@
},
/area/centcom/holding/cafe)
"aWy" = (
-/obj/machinery/light/directional/north,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/bush/flowers_pp,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"aWL" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -4086,9 +3976,17 @@
/area/centcom/holding/cafe)
"aWP" = (
/obj/structure/fence/door/opened,
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
+/turf/open/floor/catwalk_floor/iron_smooth,
/area/centcom/holding/cafepark)
"aWT" = (
/obj/structure/easel,
@@ -4113,6 +4011,17 @@
"aXm" = (
/turf/closed/wall/mineral/titanium,
/area/centcom/interlink)
+"aXn" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"aXA" = (
/obj/structure/flora/grass/green{
icon_state = "snowgrass3gb"
@@ -4120,18 +4029,10 @@
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"aXF" = (
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/chair/sofa/bench/right{
dir = 1
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
- },
+/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
"aXG" = (
/turf/open/floor/iron/dark,
@@ -4147,15 +4048,8 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aXR" = (
-/obj/machinery/button/door{
- id = "ghostcafecabin3";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = -25;
- specialfunctions = 4
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"aXV" = (
/obj/structure/table,
/turf/open/indestructible/hotelwood,
@@ -4165,26 +4059,33 @@
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"aYc" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+ icon_state = "floor"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"aYj" = (
/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aYk" = (
-/obj/structure/chair/sofa/corp/left{
- dir = 4
- },
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
+ dir = 8
},
+/obj/structure/sink/directional/east,
+/turf/open/floor/iron,
/area/centcom/holding/cafe)
"aYn" = (
/obj/structure/fluff/tram_rail/end{
@@ -4216,11 +4117,12 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"aYO" = (
-/obj/structure/spacevine,
-/obj/structure/mineral_door/wood,
-/obj/structure/fans/tiny/invisible,
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{
+ density = 0
+ },
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"aYP" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -4246,27 +4148,25 @@
/turf/open/floor/iron/white,
/area/centcom/interlink)
"aZq" = (
-/obj/structure/chair/sofa/corp{
- dir = 4
- },
-/turf/open/floor/carpet/royalblack,
-/area/centcom/holding/cafedorms)
-"aZs" = (
-/obj/machinery/hypnochair,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/indestructible/plating,
/area/centcom/holding/cafe)
+"aZs" = (
+/obj/structure/flora/rock/pile/jungle/style_2,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"aZz" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/showcase/machinery/implanter{
- icon = 'icons/obj/antags/abductor.dmi';
- icon_state = "experiment";
- name = "pod"
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/table/wood,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/obj/item/reagent_containers/cup/bucket/wooden,
+/obj/machinery/button/door{
+ id = "CCSauna";
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = -25
},
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"aZC" = (
/obj/machinery/deepfryer,
@@ -4302,16 +4202,32 @@
},
/area/centcom/holding/cafe)
"aZU" = (
-/obj/structure/chair/sofa/right/brown{
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/obj/structure/chair/sofa/bench/left{
dir = 8
},
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
-"aZW" = (
-/obj/machinery/light/directional/north,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+ icon_state = "floor"
},
+/area/centcom/holding/cafepark)
+"aZW" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/fullupgrade{
+ density = 0
+ },
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"bae" = (
/obj/structure/table,
@@ -4321,6 +4237,19 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"baM" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/holding/cafepark)
+"bbW" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"bcb" = (
/turf/open/floor/carpet/cyan,
/area/centcom/holding/cafe)
@@ -4328,6 +4257,12 @@
/obj/structure/sign/poster/random/directional/south,
/turf/open/floor/iron,
/area/centcom/interlink)
+"bcE" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"bdI" = (
/obj/structure/railing,
/turf/open/floor/iron/dark,
@@ -4355,6 +4290,12 @@
},
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"bhQ" = (
+/obj/structure/mineral_door/paperframe{
+ name = "Shinto Cabin Bedroom"
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding/cafe)
"bit" = (
/obj/machinery/door/airlock{
id_tag = "room7";
@@ -4362,6 +4303,18 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"biB" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/glass/trophy{
+ pixel_y = 7;
+ pixel_x = -11
+ },
+/obj/item/reagent_containers/cup/glass/trophy{
+ pixel_y = 11;
+ pixel_x = -1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"biF" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -4370,6 +4323,13 @@
/obj/item/pen,
/turf/open/floor/wood,
/area/centcom/interlink)
+"bja" = (
+/obj/structure/railing/wooden_fencing,
+/obj/structure/railing/wooden_fencing{
+ dir = 4
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"bjh" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -4385,25 +4345,25 @@
/area/centcom/interlink)
"bkA" = (
/obj/effect/turf_decal/tile/blue{
- dir = 1
+ dir = 8
},
/obj/effect/turf_decal/tile/blue{
- dir = 8
+ dir = 4
},
-/obj/machinery/light/directional/west,
-/obj/structure/bed/medical/emergency,
-/obj/machinery/iv_drip,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/obj/machinery/washing_machine,
+/obj/machinery/light/small/directional/north,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"bll" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
},
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"blq" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 1
@@ -4411,6 +4371,11 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/iron,
/area/centcom/interlink)
+"blD" = (
+/obj/structure/railing,
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"blI" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/south,
@@ -4420,6 +4385,23 @@
/obj/item/reagent_containers/cup/glass/coffee_cup,
/turf/open/floor/iron,
/area/centcom/interlink)
+"bnI" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/glass/bottle/moonshine{
+ pixel_x = -5;
+ pixel_y = 7
+ },
+/obj/item/reagent_containers/cup/beaker/large/ceramic{
+ pixel_x = 9;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/cup/beaker/large/ceramic{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"bnU" = (
/obj/structure/flora/tree/stump,
/obj/effect/light_emitter/interlink,
@@ -4454,6 +4436,10 @@
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"bqT" = (
+/obj/structure/wall_torch/spawns_lit/directional/north,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"brL" = (
/obj/effect/turf_decal/trimline/dark_red/filled/corner{
dir = 8
@@ -4466,6 +4452,14 @@
"bsj" = (
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
+"bsO" = (
+/obj/structure/dresser,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"bsT" = (
/obj/machinery/status_display/evac/directional/north,
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
@@ -4512,6 +4506,23 @@
icon_state = "darkfull"
},
/area/centcom/holding/cafe)
+"bvn" = (
+/obj/machinery/door/airlock/security{
+ id_tag = "ghostcafecell1";
+ name = "Cell 1"
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"bvA" = (
+/obj/machinery/door/window/right/directional/south,
+/turf/open/floor/iron/dark/corner{
+ dir = 1
+ },
+/area/centcom/holding/cafe)
+"bwG" = (
+/obj/structure/table/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"bwP" = (
/obj/machinery/door/airlock/multi_tile/public/glass{
name = "Interlink Longue"
@@ -4534,13 +4545,26 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"bAr" = (
-/obj/structure/flora/biolumi/flower{
- light_power = 0.3;
- light_range = 10;
- random_light = null
+/obj/effect/turf_decal/siding/wood,
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = -12;
+ pixel_y = -42
},
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/item/fancy_pillow{
+ pixel_x = -22;
+ pixel_y = -7
+ },
+/obj/item/fancy_pillow{
+ pixel_y = -1
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
+"bBV" = (
+/obj/structure/showcase/fakeid{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"bBX" = (
/obj/structure/closet/secure_closet/personal,
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -4580,6 +4604,11 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"bEV" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fake_stairs/wood/directional/north,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"bFi" = (
/turf/open/misc/beach/coast{
dir = 10
@@ -4591,6 +4620,11 @@
},
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"bFD" = (
+/obj/effect/spawner/liquids_spawner,
+/obj/machinery/light/floor,
+/turf/open/floor/iron/pool,
+/area/centcom/holding/cafepark)
"bFN" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
@@ -4604,18 +4638,6 @@
/obj/structure/alien/weeds,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
-"bGE" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/machinery/door/airlock/wood{
- id_tag = "ghostcafecabinjap";
- name = "Shinto Cabin"
- },
-/obj/structure/fans/tiny/invisible,
-/turf/open/floor/carpet,
-/area/centcom/holding/cafedorms)
"bGH" = (
/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{
dir = 8
@@ -4626,10 +4648,29 @@
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"bHC" = (
+/obj/structure/flora/bush/large{
+ icon_state = "bush3"
+ },
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"bIf" = (
/obj/machinery/biogenerator,
/turf/closed/indestructible/wood,
/area/centcom/holding/cafe)
+"bIL" = (
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 4
+ },
+/obj/structure/extinguisher_cabinet/directional/east,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"bIO" = (
+/turf/closed/indestructible/weeb,
+/area/centcom/holding/cafe)
"bJb" = (
/obj/machinery/door/airlock/security/glass{
name = "Interlink Security Post"
@@ -4654,6 +4695,12 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"bLZ" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"bNh" = (
/obj/structure/chair/sofa/bench{
dir = 4
@@ -4674,6 +4721,16 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"bNV" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"bOl" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 4
@@ -4683,6 +4740,34 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"bON" = (
+/obj/structure/chair/sofa/bench/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 10
+ },
+/obj/machinery/light/small/directional/south,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"bQR" = (
+/obj/structure/chair/sofa/corp{
+ dir = 4
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"bQZ" = (
/obj/structure/reagent_dispensers/plumbed,
/turf/open/floor/iron/white,
@@ -4691,6 +4776,23 @@
/obj/machinery/vending/dorms,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"bSf" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"bTg" = (
+/obj/machinery/light/directional/south,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"bTH" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -4699,12 +4801,11 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"bTK" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 1
+/obj/structure/fireplace{
+ dir = 8
},
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"bTR" = (
/obj/structure/table/reinforced,
/obj/item/book/manual/wiki/security_space_law{
@@ -4730,10 +4831,43 @@
/obj/item/bedsheet/random/double,
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
+"bUS" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 5
+ },
+/obj/structure/railing{
+ dir = 5
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"bVn" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/left,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"bVx" = (
-/obj/machinery/vending/boozeomat/cafe,
+/obj/structure/table/wood,
+/obj/machinery/coffeemaker/impressa,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/light/directional/north,
/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
"bVH" = (
/obj/machinery/door/poddoor/shutters/window/indestructible{
id = "interlink_hall";
@@ -4759,27 +4893,62 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"bWA" = (
+/obj/structure/closet/cabinet,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"bXF" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"bYx" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"bYH" = (
/obj/effect/turf_decal/siding/wood/corner,
/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green{
- pixel_y = 6
- },
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"bZt" = (
+/obj/structure/chair/sofa/corp/corner,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"cal" = (
/obj/structure/railing{
dir = 1
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"caJ" = (
+/obj/structure/curtain/cloth/fancy/mechanical{
+ icon_state = "bounty-open";
+ icon_type = "bounty";
+ id = "CCSalon";
+ name = "curtain"
+ },
+/turf/open/floor/iron/stairs/old,
+/area/centcom/holding/cafe)
+"caY" = (
+/obj/structure/railing/wooden_fencing,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"cby" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 8
+ },
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/pool,
+/area/centcom/holding/cafepark)
"cbF" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
@@ -4802,9 +4971,6 @@
/obj/item/folder/blue{
pixel_y = 19
},
-/obj/item/flashlight/lamp/green{
- pixel_y = 5
- },
/turf/open/floor/wood,
/area/centcom/interlink)
"cfs" = (
@@ -4815,6 +4981,10 @@
"cfu" = (
/turf/open/floor/grass,
/area/centcom/interlink)
+"cgU" = (
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"che" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -4861,6 +5031,19 @@
/obj/structure/alien/weeds/node,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"clF" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
+"cmh" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 8
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"cmV" = (
/obj/effect/turf_decal/weather/dirt{
dir = 5
@@ -4868,6 +5051,52 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"cna" = (
+/obj/structure/chair/wood{
+ dir = 1;
+ layer = 2.8
+ },
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
+"cnz" = (
+/obj/structure/railing{
+ invisibility = 100
+ },
+/obj/structure/chair/wood,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"cqv" = (
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/window/reinforced/spawner/directional/west,
+/turf/open/floor/iron/dark/corner{
+ dir = 4
+ },
+/area/centcom/holding/cafe)
+"cqw" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"cqC" = (
/obj/structure/chair/sofa/bench/right{
dir = 4
@@ -4940,6 +5169,11 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"cxU" = (
+/obj/machinery/firealarm/directional/north,
+/obj/structure/showcase/fake_cafe_console,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"cxX" = (
/obj/structure/closet/syndicate{
desc = "It's a personal storage unit for operative gear."
@@ -5017,6 +5251,29 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"cDr" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/rack/wooden,
+/obj/item/flashlight/lantern{
+ pixel_x = -5;
+ pixel_y = 2
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"cEt" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/machinery/smartfridge/drying_rack,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"cEy" = (
+/obj/structure/spacevine,
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"cFK" = (
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/tile/green/opposingcorners,
@@ -5029,6 +5286,14 @@
"cGG" = (
/turf/open/floor/mineral/titanium/blue,
/area/centcom/interlink)
+"cGX" = (
+/obj/structure/bed,
+/obj/item/bedsheet/dorms,
+/obj/structure/sign/painting/library_secure{
+ pixel_x = 32
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"cHY" = (
/obj/effect/turf_decal/weather/dirt{
dir = 6
@@ -5051,6 +5316,9 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"cLv" = (
+/turf/open/floor/carpet,
+/area/centcom/holding/cafepark)
"cLD" = (
/obj/structure/table,
/obj/item/storage/medkit/regular{
@@ -5085,13 +5353,9 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"cMM" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/structure/table/optable,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"cNa" = (
/obj/effect/turf_decal/siding/thinplating_new/dark,
/turf/open/misc/asteroid,
@@ -5101,6 +5365,14 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"cOu" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ghostcafecabin1";
+ name = "Wooden Cabin"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"cOV" = (
/obj/machinery/door/airlock/centcom{
name = "Administrative Offices"
@@ -5111,6 +5383,10 @@
/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain,
/turf/open/floor/iron,
/area/centcom/interlink)
+"cPo" = (
+/obj/structure/table/abductor,
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
"cQq" = (
/obj/effect/turf_decal/weather/dirt,
/obj/structure/hedge,
@@ -5118,6 +5394,14 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"cQH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"cRs" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
@@ -5173,11 +5457,15 @@
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
"cXb" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e"
+/obj/structure/bed/maint{
+ pixel_y = 13
},
-/turf/closed/indestructible/weeb,
-/area/centcom/holding/cafedorms)
+/obj/structure/bed/maint,
+/obj/item/bedsheet/black/double{
+ dir = 1
+ },
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
"cYb" = (
/obj/effect/turf_decal/tile/red/opposingcorners,
/obj/effect/turf_decal/siding/dark{
@@ -5211,8 +5499,7 @@
"dai" = (
/obj/item/flashlight/flare/torch{
pixel_x = -4;
- pixel_y = -10;
- start_on = 1
+ pixel_y = -10
},
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
@@ -5225,6 +5512,21 @@
/obj/effect/turf_decal/caution/stand_clear,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"dav" = (
+/obj/structure/railing/corner/end{
+ dir = 4
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"dbn" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/toilet{
+ pixel_y = 14
+ },
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
"dbZ" = (
/obj/effect/turf_decal/weather/dirt{
dir = 4
@@ -5243,6 +5545,15 @@
/obj/structure/closet/secure_closet/freezer/kitchen/all_access,
/turf/open/floor/iron/showroomfloor,
/area/centcom/holding/cafe)
+"ddp" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/holding/cafepark)
"deD" = (
/obj/machinery/status_display/shuttle{
pixel_y = -32;
@@ -5257,6 +5568,10 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"dgl" = (
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/stairs,
+/area/centcom/holding/cafepark)
"dgo" = (
/obj/item/trench_tool,
/obj/item/tank/internals/emergency_oxygen/double,
@@ -5274,12 +5589,23 @@
"dgV" = (
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
+"dhi" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafepark)
"djn" = (
-/obj/effect/turf_decal/tile/red/half{
- dir = 1
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
},
-/obj/machinery/light/directional/north,
-/turf/open/floor/iron,
+/obj/structure/fans/tiny,
+/obj/structure/mineral_door/wood,
+/turf/open/floor/wood/large,
/area/centcom/holding/cafe)
"dky" = (
/obj/structure/flora/tree/jungle/style_4,
@@ -5322,6 +5648,9 @@
/obj/effect/spawner/random/vending/snackvend,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"doA" = (
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"drE" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -5338,6 +5667,14 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/carpet/red,
/area/centcom/interlink)
+"dtr" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 1
+ },
+/obj/machinery/computer/operating,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"dtL" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 4
@@ -5378,6 +5715,20 @@
/obj/machinery/duct,
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
+"dyU" = (
+/obj/structure/chair/sofa/corp/corner{
+ dir = 4
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
+"dzn" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"dAC" = (
/obj/effect/turf_decal/siding/white{
dir = 6
@@ -5411,6 +5762,10 @@
/obj/structure/sign/poster/random/directional/south,
/turf/open/floor/wood,
/area/centcom/interlink)
+"dDF" = (
+/obj/structure/chair/sofa/corp,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"dFj" = (
/obj/machinery/door/airlock/medical/glass{
name = "Interlink Medbay"
@@ -5458,10 +5813,38 @@
dir = 1
},
/area/cruiser_dock)
+"dIM" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/medical2,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"dIR" = (
+/obj/structure/mineral_door/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"dLq" = (
/obj/structure/sign/poster/random/directional/north,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"dMl" = (
+/obj/structure/fermenting_barrel,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"dNn" = (
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"dNB" = (
+/obj/structure/fake_stairs/directional,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"dOC" = (
/obj/structure/window/reinforced/spawner/directional/west,
/obj/structure/window/reinforced/spawner/directional/south,
@@ -5470,6 +5853,9 @@
/obj/item/binoculars,
/turf/open/floor/wood,
/area/centcom/holding/cafepark)
+"dOM" = (
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"dOP" = (
/obj/structure/table/glass/plasmaglass,
/obj/item/storage/box/beakers{
@@ -5503,6 +5889,14 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"dPJ" = (
+/obj/machinery/door/airlock{
+ id_tag = "CCShowers";
+ name = "Showers"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"dRs" = (
/obj/structure/closet/crate/freezer,
/obj/item/food/canned/tomatoes,
@@ -5531,6 +5925,43 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"dRI" = (
+/obj/structure/table/reinforced/rglass,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/lipstick{
+ pixel_x = -11;
+ pixel_y = 11
+ },
+/obj/item/lipstick/black{
+ pixel_x = -11;
+ pixel_y = 6
+ },
+/obj/item/lipstick/jade{
+ pixel_x = -11;
+ pixel_y = 1
+ },
+/obj/item/lipstick/purple{
+ pixel_x = -11;
+ pixel_y = -4
+ },
+/obj/item/lipstick/quantum{
+ pixel_x = -11;
+ pixel_y = -9
+ },
+/obj/item/hairbrush{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"dSf" = (
+/obj/structure/chair/sofa/bench{
+ dir = 8
+ },
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"dSt" = (
/turf/open/floor/iron/stairs/right{
dir = 1
@@ -5542,9 +5973,12 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"dUh" = (
-/obj/machinery/light/directional/south,
-/turf/open/floor/plating/abductor,
-/area/centcom/holding/cafe)
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"dVb" = (
/obj/effect/turf_decal/weather/dirt,
/obj/effect/light_emitter/interlink,
@@ -5565,6 +5999,17 @@
/obj/structure/window/reinforced/spawner/directional/north,
/turf/open/floor/carpet/purple,
/area/centcom/holding/cafe)
+"dWE" = (
+/obj/machinery/door/airlock{
+ id_tag = "CCD1"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
+"dXe" = (
+/obj/structure/flora/grass/jungle/b/style_2,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"dXJ" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 8
@@ -5577,6 +6022,16 @@
},
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"dYa" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"eaJ" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"eaT" = (
/obj/structure/bookcase/random/fiction,
/turf/open/floor/wood,
@@ -5592,14 +6047,21 @@
/obj/effect/turf_decal/siding/white/corner,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"eeZ" = (
+/obj/structure/chair/sofa/corp/right,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"egn" = (
-/obj/structure/bed/maint,
-/obj/item/toy/figure/prisoner,
-/obj/effect/turf_decal/tile/red/half{
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile{
dir = 1
},
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/obj/structure/stone_tile/surrounding_tile,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"egr" = (
/obj/effect/turf_decal/siding/thinplating_new/dark/corner{
dir = 8
@@ -5623,17 +6085,19 @@
/obj/structure/dresser{
pixel_y = 7
},
-/obj/item/flashlight/lamp/green{
- pixel_x = -3;
- pixel_y = 22
- },
/turf/open/floor/carpet/red,
/area/centcom/holding/cafedorms)
+"ejQ" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ghostcafecabin3";
+ name = "Wooden Cabin"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"ekp" = (
-/obj/structure/table/wood,
-/obj/item/soap/deluxe,
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/turf/closed/indestructible/steel,
+/area/centcom/holding/cafepark)
"eks" = (
/obj/item/toy/beach_ball,
/turf/open/misc/beach/coast/corner{
@@ -5687,10 +6151,30 @@
/obj/machinery/light/cold/directional/west,
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"eon" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
"epr" = (
/obj/structure/chair/sofa/left/brown,
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
+"eqe" = (
+/obj/machinery/door/airlock{
+ name = "Locker Room"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"eqS" = (
/obj/machinery/duct,
/turf/open/floor/wood/tile,
@@ -5699,6 +6183,14 @@
/obj/machinery/vending/dorms,
/turf/open/floor/iron/showroomfloor,
/area/centcom/holding/cafe)
+"erR" = (
+/obj/structure/flora/grass/jungle/b/style_5,
+/mob/living/basic/rabbit,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"esx" = (
/obj/effect/decal/cleanable/xenoblood,
/obj/structure/alien/weeds,
@@ -5736,6 +6228,12 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"ewl" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"exf" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -5774,6 +6272,21 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"eAq" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/obj/item/kirbyplants/fern{
+ pixel_y = 14;
+ pixel_x = -5
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"eAA" = (
/turf/closed/indestructible/fakedoor{
desc = "Why would you want to go back, you just got here!";
@@ -5785,9 +6298,20 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"eDy" = (
+/obj/structure/sauna_oven,
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"eEg" = (
/turf/open/floor/carpet/blue,
/area/centcom/holding/cafepark)
+"eFC" = (
+/obj/structure/railing/wooden_fencing,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"eFV" = (
/obj/effect/turf_decal/trimline/green/filled/arrow_cw,
/turf/open/floor/iron/dark,
@@ -5811,6 +6335,10 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"eIq" = (
+/obj/structure/chair/sofa/corner/brown,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"eJP" = (
/obj/structure/table/reinforced,
/obj/item/folder{
@@ -5875,6 +6403,31 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"eNw" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"eNI" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"eOx" = (
/obj/structure/chair/sofa/bench{
dir = 8
@@ -5918,6 +6471,12 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
+"eTt" = (
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"eVe" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -5984,6 +6543,43 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"fbz" = (
+/obj/structure/rack/wooden,
+/obj/item/cautery/ashwalker{
+ pixel_y = 10
+ },
+/obj/item/scalpel/ashwalker{
+ pixel_y = 6
+ },
+/obj/item/circular_saw/ashwalker{
+ pixel_y = -9
+ },
+/obj/item/surgicaldrill/ashwalker{
+ pixel_y = -7;
+ pixel_x = 7
+ },
+/obj/item/retractor/ashwalker{
+ pixel_y = -9
+ },
+/obj/item/hemostat/ashwalker{
+ pixel_y = 6
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"fbM" = (
+/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/abductor{
+ desc = "What could possibly be in here? Probably naked people.";
+ id_tag = "cozyfloofspot1";
+ name = "Bedroom"
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"fcW" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
/obj/effect/turf_decal/siding/wood{
@@ -6004,6 +6600,33 @@
},
/turf/open/floor/carpet/red,
/area/cruiser_dock)
+"fdX" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/grandfatherclock{
+ desc = "An alien console, it's completely holographic and is complete gibberish with phrases like 'Bogos Binted' flying across the screen.";
+ icon = 'icons/obj/antags/abductor.dmi';
+ icon_state = "console";
+ name = "alien console"
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
+"feR" = (
+/obj/machinery/light/small/directional/west,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"feU" = (
+/obj/structure/table/wood,
+/obj/machinery/microwave{
+ pixel_x = 1;
+ pixel_y = 6
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"fiC" = (
/obj/structure/closet/crate/bin,
/obj/item/paper/crumpled{
@@ -6019,6 +6642,10 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/iron,
/area/centcom/interlink)
+"fjN" = (
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"fmq" = (
/obj/structure/frame/computer,
/turf/open/floor/plating,
@@ -6028,6 +6655,29 @@
dir = 8
},
/area/cruiser_dock)
+"foq" = (
+/obj/structure/sign/poster/official/cleanliness/directional/east,
+/obj/machinery/camera/directional/north{
+ c_tag = "Jim Norton's Quebecois Coffee"
+ },
+/obj/structure/noticeboard/directional/north,
+/obj/item/reagent_containers/condiment/sugar{
+ pixel_y = 4
+ },
+/obj/item/storage/pill_bottle/happinesspsych{
+ pixel_x = -4;
+ pixel_y = -1
+ },
+/obj/item/storage/box/coffeepack,
+/obj/item/storage/box/coffeepack/robusta,
+/obj/item/reagent_containers/condiment/soymilk,
+/obj/item/reagent_containers/condiment/milk,
+/obj/structure/closet/secure_closet/freezer/empty/open,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"fov" = (
/turf/closed/indestructible/fakedoor{
desc = "Why would you want to go back, you just got here!";
@@ -6039,6 +6689,21 @@
/obj/effect/turf_decal/trimline/dark_green/line,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"foJ" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/structure/closet/crate/wooden/storage_barrel,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"fpe" = (
+/obj/machinery/light/directional/north,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/table/optable,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"fqg" = (
/turf/open/floor/iron/smooth,
/area/centcom/interlink)
@@ -6061,11 +6726,11 @@
/area/centcom/interlink)
"fvx" = (
/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe,
+/obj/structure/showcase/machinery/signal_decrypter,
/turf/open/indestructible/hoteltile{
icon_state = "darkfull"
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"fwc" = (
/obj/effect/turf_decal/sand,
/obj/structure/chair/stool/bar/directional/west{
@@ -6084,28 +6749,35 @@
},
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"fwu" = (
+/obj/structure/water_source/puddle,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"fxE" = (
/obj/structure/chair/sofa/bench/right{
greyscale_colors = "#AA8A61"
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"fza" = (
+/obj/structure/dresser{
+ icon = 'icons/obj/antags/abductor.dmi';
+ icon_state = "dispenser";
+ name = "organ storage"
+ },
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
"fzV" = (
/obj/structure/rack,
/obj/item/pushbroom,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"fAL" = (
-/obj/effect/turf_decal/tile/blue/full,
-/obj/structure/table/reinforced,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "GhostCafeMedical"
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "ghostcafemedical"
- },
-/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"fCt" = (
/obj/machinery/light/directional/west,
@@ -6114,6 +6786,16 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"fCz" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 4
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"fEg" = (
/obj/structure/toilet{
dir = 8
@@ -6128,18 +6810,8 @@
/turf/open/floor/carpet/purple,
/area/centcom/holding/cafe)
"fFr" = (
-/obj/effect/turf_decal/tile/red/half{
- dir = 1
- },
-/obj/structure/showcase/fakesec{
- name = "\improper Cafe security records"
- },
-/obj/structure/fence{
- dir = 1;
- pixel_x = -18
- },
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
"fFy" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -6147,6 +6819,23 @@
},
/turf/open/floor/grass,
/area/centcom/interlink)
+"fFL" = (
+/obj/machinery/light/directional/south,
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"fGv" = (
+/obj/machinery/light/directional/north,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"fGC" = (
/obj/structure/chair/sofa/bench,
/obj/effect/landmark/latejoin,
@@ -6192,20 +6881,54 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"fLD" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"fMM" = (
/obj/machinery/duct,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"fOb" = (
-/obj/structure/fans/tiny/invisible,
-/obj/machinery/door/airlock/wood{
- name = "Medical"
+/obj/structure/rack,
+/obj/item/storage/box/lights/mixed,
+/obj/item/clothing/gloves/botanic_leather,
+/obj/item/clothing/gloves/color/blue,
+/obj/item/clothing/suit/caution,
+/obj/item/clothing/suit/caution,
+/obj/item/clothing/suit/caution,
+/obj/item/clothing/suit/caution,
+/obj/item/reagent_containers/cup/bucket,
+/obj/item/reagent_containers/cup/bucket,
+/obj/item/mop,
+/obj/item/mop,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/effect/turf_decal/caution/stand_clear,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/item/storage/bag/trash,
/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"fOr" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
},
+/turf/open/floor/wood/large,
/area/centcom/holding/cafe)
+"fOu" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/bush/flowers_pp,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"fOv" = (
/obj/machinery/door/airlock/multi_tile/public/glass{
name = "Interlink Public Garden"
@@ -6221,6 +6944,10 @@
/obj/structure/fence,
/turf/open/floor/grass,
/area/centcom/interlink)
+"fPs" = (
+/obj/item/kirbyplants/random,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"fQt" = (
/mob/living/basic/crab{
name = "Bait"
@@ -6238,6 +6965,12 @@
/obj/effect/light_emitter/interlink,
/turf/open/misc/dirt/planet,
/area/centcom/interlink)
+"fTb" = (
+/obj/effect/spawner/liquids_spawner,
+/turf/open/indestructible/cobble/side{
+ dir = 4
+ },
+/area/centcom/holding/cafe)
"fTu" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/cup/glass/shaker{
@@ -6247,6 +6980,29 @@
/obj/item/reagent_containers/cup/rag,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"fTv" = (
+/obj/item/reagent_containers/dropper,
+/obj/item/reagent_containers/cup/beaker{
+ pixel_x = 8;
+ pixel_y = 2
+ },
+/obj/structure/table/glass,
+/obj/item/storage/box/rxglasses{
+ pixel_x = 5;
+ pixel_y = 10
+ },
+/obj/item/storage/box/bodybags{
+ pixel_x = -5;
+ pixel_y = 10
+ },
+/obj/item/storage/box/disks{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"fTz" = (
/obj/effect/turf_decal/trimline/green/line{
dir = 6
@@ -6260,6 +7016,20 @@
},
/turf/open/water/beach,
/area/centcom/holding/cafepark)
+"fTY" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"fUQ" = (
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock{
+ name = "Salon";
+ id_tag = "CCSalon"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"fVh" = (
/obj/structure/closet/crate/trashcart,
/obj/effect/turf_decal/bot_white,
@@ -6279,6 +7049,12 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"fXi" = (
+/obj/machinery/light/small/directional/south,
+/obj/structure/sink/directional/east,
+/obj/structure/mirror/directional/west,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"fYY" = (
/obj/machinery/light/small/directional/east,
/turf/open/floor/wood/tile,
@@ -6294,6 +7070,25 @@
/obj/structure/punching_bag,
/turf/open/floor/plating,
/area/cruiser_dock)
+"gdL" = (
+/obj/structure/towel_bin,
+/obj/structure/table/wood,
+/turf/open/indestructible/cobble/side{
+ dir = 4
+ },
+/area/centcom/holding/cafepark)
+"gdN" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"gea" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"geG" = (
/turf/open/floor/iron/stairs,
/area/centcom/holding/cafepark)
@@ -6315,6 +7110,13 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafepark)
+"ggx" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"git" = (
/obj/structure/table/glass/plasmaglass,
/obj/machinery/reagentgrinder{
@@ -6345,83 +7147,107 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"gko" = (
+/obj/structure/flora/grass/jungle/a/style_4,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"gmD" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"gmE" = (
-/obj/structure/table/reinforced,
-/obj/item/clothing/under/rank/prisoner/supermax,
-/obj/item/clothing/under/rank/prisoner/supermax,
-/obj/item/clothing/under/rank/prisoner/supermax,
-/obj/item/clothing/under/rank/prisoner/skirt/supermax,
-/obj/item/clothing/under/rank/prisoner/skirt/supermax,
-/obj/item/clothing/under/rank/prisoner/skirt/supermax,
-/obj/item/clothing/under/rank/prisoner/skirt/protcust,
-/obj/item/clothing/under/rank/prisoner/skirt/protcust,
-/obj/item/clothing/under/rank/prisoner/skirt/protcust,
-/obj/item/clothing/under/rank/prisoner/skirt/lowsec,
-/obj/item/clothing/under/rank/prisoner/skirt/lowsec,
-/obj/item/clothing/under/rank/prisoner/skirt/lowsec,
-/obj/item/clothing/under/rank/prisoner/skirt/highsec,
-/obj/item/clothing/under/rank/prisoner/skirt/highsec,
-/obj/item/clothing/under/rank/prisoner/skirt/highsec,
-/obj/item/clothing/under/rank/prisoner/skirt,
-/obj/item/clothing/under/rank/prisoner/skirt,
-/obj/item/clothing/under/rank/prisoner/skirt,
-/obj/item/clothing/under/rank/prisoner/protcust,
-/obj/item/clothing/under/rank/prisoner/protcust,
-/obj/item/clothing/under/rank/prisoner/protcust,
-/obj/item/clothing/under/rank/prisoner/lowsec,
-/obj/item/clothing/under/rank/prisoner/lowsec,
-/obj/item/clothing/under/rank/prisoner/lowsec,
-/obj/item/clothing/under/rank/prisoner/highsec,
-/obj/item/clothing/under/rank/prisoner/highsec,
-/obj/item/clothing/under/rank/prisoner/highsec,
-/obj/item/clothing/under/rank/prisoner/classic,
-/obj/item/clothing/under/rank/prisoner,
-/obj/item/clothing/under/rank/prisoner,
-/obj/item/clothing/under/rank/prisoner,
-/obj/effect/turf_decal/tile/red/anticorner,
-/obj/machinery/light/directional/east,
-/obj/machinery/button/door{
- id = "ghostcafesec";
- name = "Detainment Lockdown";
- normaldoorcontrol = 1;
- pixel_x = 26;
- pixel_y = 5;
- specialfunctions = 4
+/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
},
-/obj/machinery/button/door{
- id = "ghostcafesec";
- name = "Cell Lockdown";
- pixel_x = 26;
- pixel_y = -7
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"gmT" = (
+/obj/structure/fake_stairs/directional/east,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"gmU" = (
+/obj/structure/chair/sofa/bench/corner{
+ dir = 1
},
-/obj/item/clothing/under/rank/prisoner/syndicate,
-/obj/item/clothing/under/rank/prisoner/syndicate,
-/turf/open/floor/iron,
+/turf/open/floor/iron/dark,
/area/centcom/holding/cafe)
-"goK" = (
-/obj/item/surgery_tray/full,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+"gnq" = (
+/obj/effect/spawner/liquids_spawner,
+/obj/structure/chair/sofa/bench/right,
+/turf/open/floor/iron/pool/cobble/corner{
+ dir = 1
},
+/area/centcom/holding/cafe)
+"gnv" = (
/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/structure/table/glass,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
+"goK" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/chair/wood{
+ dir = 1
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"gpk" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
},
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"gqq" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/chair/wood{
+ dir = 1
+ },
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
"grr" = (
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = 19;
- pixel_y = -22
+/obj/structure/table,
+/obj/structure/towel_bin,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
+"grW" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 1
+ },
+/obj/structure/table/reinforced/plastitaniumglass,
+/obj/item/clothing/head/costume/shrine_wig{
+ pixel_y = 7
+ },
+/obj/item/clothing/suit/costume/shrine_maiden,
+/obj/item/storage/basket{
+ pixel_y = 11
},
+/obj/item/gohei,
/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
+"grX" = (
+/obj/effect/turf_decal/weather/sand{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"gsc" = (
/obj/structure/chair/sofa/corp/corner{
dir = 8
@@ -6429,11 +7255,36 @@
/obj/machinery/light/warm/directional/south,
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
+"gsj" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"gsO" = (
/obj/structure/table,
/obj/structure/bedsheetbin,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"gsX" = (
+/obj/structure/flora/rock/pile/jungle/large/style_2,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"gtO" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 1
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"gtZ" = (
/obj/structure/chair/sofa/bench/left{
dir = 8
@@ -6458,6 +7309,21 @@
/obj/machinery/armament_station/assault_operatives,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"gxF" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/machinery/door/airlock/wood{
+ id_tag = "ghostcafecabinjap";
+ name = "Shinto Cabin"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet,
+/area/centcom/holding/cafe)
+"gxX" = (
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"gyK" = (
/obj/machinery/status_display/shuttle{
pixel_y = 32;
@@ -6468,6 +7334,19 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"gyS" = (
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
+"gzT" = (
+/obj/structure/fake_stairs/wood/directional/north,
+/obj/structure/railing/wooden_fencing{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"gAj" = (
/obj/structure/sign/poster/random/directional/south,
/turf/open/floor/iron/dark,
@@ -6497,6 +7376,11 @@
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"gCQ" = (
+/obj/structure/chair/sofa/corp,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"gCR" = (
/turf/closed/wall/mineral/sandstone,
/area/centcom/holding/cafe)
@@ -6544,45 +7428,43 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
-"gLq" = (
-/turf/open/floor/carpet,
-/area/centcom/holding/cafedorms)
"gMw" = (
/turf/closed/wall/mineral/sandstone,
/area/centcom/holding/cafedorms)
"gMy" = (
-/obj/effect/turf_decal/tile/blue/half{
- dir = 4
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/structure/chair/office/light{
+/obj/effect/turf_decal/tile/blue{
dir = 4
},
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
-"gPj" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e"
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
},
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 10
+/area/centcom/holding/cafepark)
+"gOS" = (
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = 19;
+ pixel_y = -22
},
-/obj/effect/turf_decal/siding/wood{
- dir = 4
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
+"gPj" = (
+/obj/structure/railing{
+ dir = 8
},
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = 15
+/turf/open/indestructible/cobble/side{
+ dir = 8
},
-/obj/machinery/button/door{
- id = "ghostcafecabinjap";
- name = "Dorm Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -24;
- specialfunctions = 4
+/area/centcom/holding/cafepark)
+"gPD" = (
+/obj/structure/rack/shelf{
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
+ icon_state = "empty_shelf_1"
},
-/obj/machinery/light/warm/directional/west,
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/item/reagent_containers/cup/bucket/wooden,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"gPN" = (
/obj/effect/spawner/random/entertainment/arcade,
/obj/effect/turf_decal/siding/wood,
@@ -6591,13 +7473,42 @@
},
/turf/open/floor/eighties,
/area/centcom/holding/cafe)
-"gSD" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/effect/turf_decal/siding/wood{
+"gRb" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/turf/closed/indestructible/weeb,
-/area/centcom/holding/cafedorms)
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"gSx" = (
+/obj/machinery/light/directional/south,
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
+"gSB" = (
+/obj/structure/rack/wooden,
+/obj/item/cultivator/rake,
+/obj/item/seeds/ambrosia,
+/obj/item/seeds/korta_nut/sweet,
+/obj/item/shovel,
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/obj/item/reagent_containers/cup/bucket/wooden,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"gSD" = (
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"gUi" = (
/obj/machinery/light/directional/north,
/obj/effect/turf_decal/siding/white,
@@ -6609,6 +7520,15 @@
dir = 4
},
/area/centcom/holding/cafepark)
+"gUZ" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
+"gVD" = (
+/obj/machinery/light/directional/east,
+/obj/structure/flora/bush/jungle/b,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"gWT" = (
/obj/structure/table/wood,
/obj/item/toy/cards/deck/cas/black,
@@ -6624,6 +7544,26 @@
},
/turf/open/floor/grass,
/area/centcom/interlink)
+"gZK" = (
+/obj/structure/table/wood,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"gZM" = (
+/obj/structure/rack/wooden,
+/obj/item/reagent_containers/cup/mortar{
+ pixel_y = -5;
+ pixel_x = 2
+ },
+/obj/item/pestle{
+ pixel_y = -7;
+ pixel_x = -5
+ },
+/obj/item/reagent_containers/cup/glass/bottle/moonshine{
+ pixel_y = 10;
+ pixel_x = -4
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"hap" = (
/obj/structure/table/wood,
/obj/machinery/chem_dispenser/drinks/fullupgrade{
@@ -6632,9 +7572,20 @@
/obj/structure/sign/poster/contraband/starkist/directional/north,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"hat" = (
+/obj/structure/bed/maint,
+/obj/item/bedsheet/black,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"haE" = (
/turf/open/floor/carpet/red,
/area/centcom/holding/cafedorms)
+"haM" = (
+/obj/structure/dresser{
+ pixel_y = 7
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"hbE" = (
/obj/structure/fence/interlink{
dir = 4
@@ -6642,20 +7593,52 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"hbY" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"hcR" = (
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
+"hds" = (
+/obj/structure/table,
+/obj/machinery/light/directional/east,
+/obj/item/reagent_containers/cup/soda_cans/monkey_energy{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/reagent_containers/cup/rag{
+ pixel_y = 7;
+ pixel_x = 6
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"hdV" = (
-/obj/structure/fence{
- pixel_x = 17
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/turf/closed/indestructible/syndicate,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"hea" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"heB" = (
/obj/effect/turf_decal/weather/dirt{
dir = 1
@@ -6664,13 +7647,35 @@
/obj/structure/flora/tree/jungle/small/style_5,
/turf/open/floor/grass,
/area/centcom/interlink)
-"hge" = (
+"hfJ" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/bonfire/prelit,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"hgd" = (
+/obj/machinery/light/directional/west,
/obj/effect/turf_decal/siding/wood{
- dir = 1
+ dir = 8
},
-/obj/effect/turf_decal/siding/wood,
-/turf/closed/indestructible/weeb,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"hge" = (
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/security{
+ name = "Cafe Security"
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"hje" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/item/flashlight/flare/candle/infinite,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"hjy" = (
/obj/item/kirbyplants/organic/plant22,
/obj/effect/turf_decal/trimline/dark_green/line,
@@ -6758,21 +7763,55 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
-"hpP" = (
-/obj/structure/fence{
- dir = 4
+"hpl" = (
+/obj/machinery/light/floor{
+ alpha = 0;
+ invisibility = 100;
+ light_range = 10;
+ nightshift_light_power = 10
},
-/obj/effect/turf_decal/tile/red/half{
- dir = 8
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
},
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 1
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
+"hpP" = (
+/mob/living/basic/butterfly,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"hpR" = (
/obj/effect/turf_decal/weather/dirt,
/obj/effect/light_emitter/interlink,
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"hpX" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"hqp" = (
+/obj/machinery/door/airlock/bathroom{
+ id_tag = "CCToilet";
+ name = "Toilet Stall"
+ },
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
+"hrt" = (
+/obj/machinery/shower/directional/south,
+/obj/structure/window/spawner/directional/west,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"hrF" = (
/obj/effect/turf_decal/trimline/dark_green/line{
dir = 5
@@ -6804,6 +7843,19 @@
"hvQ" = (
/turf/open/floor/iron,
/area/centcom/interlink)
+"hxm" = (
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
+"hyt" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"hyO" = (
/obj/effect/turf_decal/box/corners,
/turf/open/floor/iron/dark/textured_large,
@@ -6850,6 +7902,10 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"hBy" = (
+/obj/structure/flora/tree/jungle/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"hEK" = (
/obj/structure/railing/corner{
dir = 8
@@ -6894,6 +7950,19 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"hJz" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/machinery/primitive_stove,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"hKI" = (
+/obj/structure/table,
+/obj/item/folder/red,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"hLA" = (
/obj/structure/table/wood,
/obj/item/folder/yellow{
@@ -6913,34 +7982,98 @@
"hLW" = (
/turf/open/floor/iron/smooth_edge,
/area/cruiser_dock)
+"hMt" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/mineral_door/wood/large_gate{
+ dir = 1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"hNU" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 4
},
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
-"hPK" = (
-/obj/effect/turf_decal/siding/wood{
+"hOy" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/wood/tile,
-/area/centcom/interlink)
-"hQy" = (
-/obj/effect/turf_decal/delivery/white,
-/obj/machinery/door/puzzle/keycard/assault_ops_chemistry,
-/turf/open/floor/iron/dark/textured_large,
-/area/cruiser_dock)
-"hSC" = (
-/obj/structure/table/wood,
-/obj/item/folder{
- pixel_x = -7;
- pixel_y = 5
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/obj/item/pen/fountain{
- pixel_x = 3
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
},
-/turf/open/floor/carpet/executive,
-/area/centcom/interlink)
+/area/centcom/holding/cafepark)
+"hPq" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"hPH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"hPK" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/floor/wood/tile,
+/area/centcom/interlink)
+"hQy" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/machinery/door/puzzle/keycard/assault_ops_chemistry,
+/turf/open/floor/iron/dark/textured_large,
+/area/cruiser_dock)
+"hQV" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lantern{
+ pixel_x = -5;
+ pixel_y = 2
+ },
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
+"hRJ" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 4
+ },
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"hSC" = (
+/obj/structure/table/wood,
+/obj/item/folder{
+ pixel_x = -7;
+ pixel_y = 5
+ },
+/obj/item/pen/fountain{
+ pixel_x = 3
+ },
+/turf/open/floor/carpet/executive,
+/area/centcom/interlink)
"hSU" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 1
@@ -6950,29 +8083,35 @@
},
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"hTf" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/machinery/iv_drip,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"hTh" = (
/obj/machinery/door/poddoor/shutters/window/preopen,
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/iron,
/area/centcom/interlink)
"hTD" = (
-/obj/structure/closet/crate/wooden,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/obj/item/lighter,
-/turf/open/indestructible/hotelwood{
- desc = "It's really cozy! Great for soft paws!";
- icon = 'modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi';
- icon_state = "carpet";
- name = "soft carpet"
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/area/centcom/holding/cafedorms)
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"hVf" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 1
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"hVq" = (
+/obj/structure/dresser,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"hVC" = (
/obj/structure/dresser,
/obj/machinery/light/warm/no_nightlight/directional/north,
@@ -6995,16 +8134,57 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
-"hYP" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
+"hWY" = (
+/obj/structure/railing{
+ invisibility = 100
+ },
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/chair/wood,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"hXd" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/obj/structure/chair/sofa/bench/right{
dir = 8
},
-/obj/effect/turf_decal/tile/blue{
+/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/structure/closet/crate/freezer/blood,
-/turf/open/floor/iron/white,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"hYn" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"hYA" = (
+/turf/open/floor/iron/dark/corner{
+ dir = 8
+ },
+/area/centcom/holding/cafe)
+"hYP" = (
+/obj/structure/chair/sofa/bench,
+/turf/open/floor/wood/large,
/area/centcom/holding/cafe)
"hZk" = (
/obj/structure/sink/directional/south,
@@ -7062,6 +8242,25 @@
dir = 4
},
/area/cruiser_dock)
+"ifZ" = (
+/obj/structure/chair/sofa/bench,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"igp" = (
/obj/effect/turf_decal/tile/green/opposingcorners,
/obj/effect/turf_decal/siding/wood{
@@ -7069,6 +8268,13 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"ihd" = (
+/turf/open/floor/sepia,
+/area/centcom/holding/cafe)
+"iho" = (
+/obj/structure/flora/grass/jungle/b/style_4,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"iiV" = (
/obj/item/trench_tool,
/obj/item/tank/internals/emergency_oxygen/double,
@@ -7089,6 +8295,57 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/iron,
/area/centcom/interlink)
+"ikb" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"iki" = (
+/turf/open/floor/carpet,
+/area/centcom/holding/cafe)
+"ikl" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 6
+ },
+/obj/structure/chair/sofa/bench/corner{
+ dir = 8
+ },
+/obj/machinery/light/small/directional/south,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"ikn" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 8
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
+"ikE" = (
+/obj/structure/weightmachine,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"ikG" = (
/obj/structure/table,
/obj/machinery/computer/libraryconsole,
@@ -7129,6 +8386,10 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"ioZ" = (
+/obj/machinery/light/directional/east,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"ipc" = (
/obj/structure/sign/poster/random/directional/east,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -7151,10 +8412,25 @@
/obj/structure/fans/tiny/invisible,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"iqj" = (
+/obj/machinery/button/door{
+ id = "CCPsych";
+ name = "Psych Office Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = -29
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"iqO" = (
/obj/structure/chair/stool/directional/north,
/turf/open/floor/iron,
/area/centcom/interlink)
+"iqT" = (
+/obj/structure/flora/grass/jungle/a/style_2,
+/obj/structure/flora/bush/flowers_yw,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"iqY" = (
/obj/structure/flora/bush/sparsegrass,
/turf/open/floor/grass/fairy,
@@ -7166,6 +8442,15 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/iron,
/area/centcom/interlink)
+"iro" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"ism" = (
/obj/structure/filingcabinet/employment,
/obj/machinery/button/door/directional/south{
@@ -7175,6 +8460,14 @@
/obj/machinery/light/cold/no_nightlight/directional/west,
/turf/open/floor/iron/dark/textured_large,
/area/centcom/interlink)
+"itm" = (
+/obj/structure/flora/tree/jungle/style_2,
+/obj/structure/flora/grass/jungle,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"iuK" = (
/obj/effect/light_emitter/interlink,
/turf/open/floor/carpet/red,
@@ -7215,11 +8508,30 @@
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"izJ" = (
+/obj/structure/flora/bush/sparsegrass/style_random,
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
+"izT" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/railing/corner,
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
"iBc" = (
/turf/open/floor/iron/smooth_edge{
dir = 1
},
/area/cruiser_dock)
+"iBq" = (
+/obj/structure/curtain,
+/obj/machinery/shower/directional/south,
+/obj/structure/drain,
+/obj/effect/turf_decal/siding/thinplating_new/end{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/end,
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
"iCz" = (
/obj/structure/fans/tiny/invisible,
/obj/machinery/door/airlock/sandstone{
@@ -7228,10 +8540,32 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
+"iDL" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 6
+ },
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"iEd" = (
/obj/structure/fireplace,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"iFq" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/table,
+/obj/item/hemostat/alien,
+/obj/item/scalpel/alien,
+/obj/item/circular_saw/alien,
+/obj/item/retractor/alien,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"iFY" = (
/obj/effect/turf_decal/weather/dirt{
dir = 5
@@ -7244,17 +8578,13 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"iGS" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 1
- },
-/obj/machinery/button/curtain{
- id = "ghostcafecabinjapcurtain";
- pixel_x = 20;
- pixel_y = -4
- },
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/turf/closed/indestructible/alien,
+/area/centcom/holding/cafepark)
+"iHv" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/flora/grass/jungle/a/style_4,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"iIb" = (
/obj/effect/turf_decal/trimline/dark_green/filled/line{
dir = 5
@@ -7262,12 +8592,9 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"iJK" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 1
- },
-/turf/closed/indestructible/weeb,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/bush/jungle/a,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"iJX" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -7295,6 +8622,22 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"iNW" = (
+/obj/machinery/door/window/left/directional/west{
+ dir = 4
+ },
+/obj/structure/sink/directional/east,
+/turf/open/floor/plating/abductor2,
+/area/centcom/holding/cafepark)
+"iOt" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"iOR" = (
/obj/effect/turf_decal/siding/thinplating_new/dark,
/obj/structure/deployable_barricade/guardrail,
@@ -7308,12 +8651,10 @@
/turf/open/floor/carpet/red,
/area/centcom/interlink)
"iQp" = (
-/obj/effect/turf_decal/tile/red/anticorner{
- dir = 4
+/obj/structure/curtain/cloth/fancy/mechanical{
+ id = "ghostcafecabin3curtain"
},
-/obj/machinery/light/directional/east,
-/obj/machinery/vending/wardrobe/sec_wardrobe,
-/turf/open/floor/iron,
+/turf/closed/indestructible/fakeglass,
/area/centcom/holding/cafe)
"iQP" = (
/obj/item/kirbyplants/organic/plant22,
@@ -7337,6 +8678,12 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"iTA" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"iUc" = (
/obj/structure/table/glass/plasmaglass,
/obj/item/paper_bin{
@@ -7375,6 +8722,13 @@
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron,
/area/centcom/interlink)
+"iWH" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"iWY" = (
/obj/structure/chair/sofa/bench/left{
dir = 4;
@@ -7412,12 +8766,16 @@
/turf/open/floor/plating,
/area/centcom/interlink)
"iYC" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 8
+/obj/machinery/button/door{
+ id = "cozyfloofspot1";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = 24;
+ specialfunctions = 4
},
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/structure/closet/abductor,
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
"iZc" = (
/obj/structure/table/reinforced/plastitaniumglass,
/obj/item/storage/fancy/cigarettes/cigars/havana{
@@ -7462,13 +8820,21 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/mineral/titanium,
/area/centcom/interlink)
+"jbu" = (
+/obj/structure/railing/wooden_fencing,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"jdx" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/bush/flowers_yw,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"jeI" = (
/obj/machinery/cryopod/quiet{
dir = 1
@@ -7484,12 +8850,35 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"jfl" = (
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 4
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"jgg" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e"
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"jgt" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lantern{
+ pixel_x = -5;
+ pixel_y = 2
},
/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
+"jgG" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafepark)
"jgT" = (
/obj/effect/light_emitter/interlink,
/obj/structure/fence/corner,
@@ -7503,8 +8892,17 @@
/turf/open/floor/iron/white,
/area/centcom/interlink)
"jhR" = (
-/turf/closed/indestructible/syndicate,
+/obj/machinery/light/directional/east,
+/obj/structure/table/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"jiN" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"jiQ" = (
/obj/structure/reagent_dispensers/watertank/high,
/turf/open/misc/dirt/planet,
@@ -7516,6 +8914,11 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"jmI" = (
+/obj/item/toy/beach_ball,
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/pool,
+/area/centcom/holding/cafepark)
"jnu" = (
/obj/machinery/button/door/directional/east{
id = "interlink_hall2";
@@ -7597,6 +9000,23 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"jtc" = (
+/obj/structure/railing,
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"jtf" = (
/obj/effect/turf_decal/weather/dirt{
dir = 10
@@ -7614,6 +9034,17 @@
/obj/structure/table/wood,
/turf/open/floor/carpet/red,
/area/centcom/interlink)
+"jvm" = (
+/obj/machinery/door/airlock/wood{
+ id_tag = "ghostcafecabinb";
+ name = "Wooden Cabin"
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"jvR" = (
/obj/structure/noticeboard/directional/south,
/obj/structure/table/wood,
@@ -7626,6 +9057,10 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"jxl" = (
+/obj/structure/wall_torch/spawns_lit/directional/north,
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
"jxw" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/window/indestructible{
@@ -7665,6 +9100,22 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
+"jDf" = (
+/obj/structure/table/bronze,
+/obj/structure/stone_tile/block/burnt,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"jEk" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"jFn" = (
/obj/structure/alien/weeds,
/obj/structure/alien/egg/burst,
@@ -7735,16 +9186,25 @@
},
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"jOc" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"jQJ" = (
-/obj/effect/turf_decal/bot,
-/obj/structure/table,
-/obj/item/hemostat/alien,
-/obj/item/scalpel/alien,
-/obj/item/circular_saw/alien,
-/obj/item/retractor/alien,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/machinery/button/door{
+ id = "ghostcafecabin3";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -25;
+ specialfunctions = 4
},
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"jRW" = (
/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{
@@ -7811,6 +9271,18 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"jYf" = (
+/obj/structure/table/wood,
+/obj/item/paper_bin,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
+"jYy" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 6
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"jZb" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -7833,6 +9305,23 @@
icon_state = "floor"
},
/area/centcom/holding/cafe)
+"jZH" = (
+/obj/effect/turf_decal/weather/sand{
+ dir = 10
+ },
+/obj/machinery/light/small/directional/east,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"kdo" = (
+/obj/structure/hedge/opaque,
+/obj/structure/curtain/cloth/fancy/mechanical{
+ icon_state = "bounty-open";
+ icon_type = "bounty";
+ id = "CCSalon";
+ name = "curtain"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"kdw" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -7863,6 +9352,24 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"kfK" = (
+/obj/structure/flora/grass/jungle/a/style_5,
+/obj/structure/flora/grass/jungle/a/style_2,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafe)
+"kgI" = (
+/obj/structure/flora/biolumi/flower{
+ light_color = "#D9FF00";
+ light_power = 0.3;
+ light_range = 10;
+ random_light = null
+ },
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"khz" = (
/obj/structure/chair/sofa/bench/right,
/turf/open/floor/iron/cafeteria,
@@ -7888,6 +9395,16 @@
"kjb" = (
/turf/closed/indestructible/rock,
/area/cruiser_dock)
+"kkV" = (
+/obj/machinery/button/door{
+ id = "ghostcafecabin1";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = 24;
+ specialfunctions = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"klI" = (
/obj/docking_port/stationary{
dir = 2;
@@ -7948,6 +9465,22 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"kpY" = (
+/obj/structure/closet/cabinet,
+/obj/item/stamp/head/rd{
+ pixel_x = 3;
+ pixel_y = -2
+ },
+/obj/item/stamp/head/captain,
+/obj/item/stamp/head/ce,
+/obj/item/stamp/head/cmo,
+/obj/item/stamp/head/hop,
+/obj/item/stamp/head/hos,
+/obj/item/stamp/head/qm,
+/obj/item/stamp/cat,
+/obj/item/toy/crayon/spraycan,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"kqs" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin{
@@ -7977,6 +9510,16 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"kso" = (
+/obj/machinery/light/directional/south,
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/pool/cobble,
+/area/centcom/holding/cafepark)
+"kuV" = (
+/obj/structure/flora/bush/leavy/style_2,
+/obj/structure/flora/tree/jungle/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"kvj" = (
/turf/open/floor/plating,
/area/cruiser_dock)
@@ -7989,6 +9532,16 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"kvU" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/barricade/wooden,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"kwp" = (
/obj/machinery/status_display/evac/directional/south,
/obj/effect/turf_decal/trimline/dark_green/line{
@@ -8004,6 +9557,16 @@
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron/smooth,
/area/centcom/interlink)
+"kxO" = (
+/obj/structure/chair/sofa/corp/corner{
+ dir = 4
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"kzb" = (
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"kzD" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 1
@@ -8041,6 +9604,14 @@
},
/turf/open/floor/iron/showroomfloor,
/area/centcom/holding/cafe)
+"kHi" = (
+/obj/machinery/mech_bay_recharge_port,
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/box,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"kHP" = (
/obj/structure/chair/sofa/corp/left,
/obj/effect/turf_decal/siding/wood,
@@ -8054,6 +9625,65 @@
/obj/machinery/vending/wardrobe/sec_wardrobe/red,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"kIR" = (
+/obj/structure/bed/abductor,
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
+"kJq" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"kJu" = (
+/obj/structure/chair/sofa/corp/corner{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"kJw" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"kJz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"kJL" = (
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = 9;
+ pixel_y = 29
+ },
+/turf/open/floor/carpet,
+/area/centcom/holding/cafe)
"kJO" = (
/obj/effect/turf_decal/siding/wood,
/obj/structure/chair/sofa/middle/brown,
@@ -8062,12 +9692,43 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"kJU" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/closed/indestructible/weeb,
+/area/centcom/holding/cafe)
"kKo" = (
/obj/machinery/computer/records/security{
dir = 8
},
/turf/open/floor/iron/dark/textured_large,
/area/centcom/interlink)
+"kKs" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 4
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
+"kLD" = (
+/obj/machinery/light/directional/south,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"kLW" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 8
+ },
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"kLZ" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt,
@@ -8079,6 +9740,12 @@
desc = "There's been a recent disturbance right here, it's evident something must've been buried; but it's pretty deep. A faint, yet deep humming sound emanates from the spot as you get closer."
},
/area/centcom/holding/cafepark)
+"kMw" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 4
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"kMV" = (
/obj/structure/flora/biolumi/flower{
random_light = null
@@ -8117,21 +9784,21 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"kPf" = (
+/obj/structure/chair/sofa/bench/corner{
+ dir = 4
+ },
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"kPg" = (
/obj/effect/turf_decal/sand,
/obj/machinery/light/directional/south,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"kPK" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/obj/structure/railing/wooden_fencing,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"kQs" = (
/obj/machinery/door/airlock/public/glass{
name = "Interlink Locker Room"
@@ -8153,6 +9820,19 @@
/obj/machinery/light/warm/directional/north,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"kWb" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/structure/railing/wooden_fencing{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"kWr" = (
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"kWA" = (
/obj/effect/turf_decal/trimline/green/line{
dir = 8
@@ -8162,13 +9842,23 @@
"kWH" = (
/turf/open/floor/iron/grimy,
/area/centcom/interlink)
-"kYn" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/skill_station,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+"kWI" = (
+/obj/structure/chair/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
},
+/obj/machinery/light/small/directional/east,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"kYn" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/chair/stool/bamboo{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"kZB" = (
/obj/machinery/light/directional/west,
/obj/structure/table,
@@ -8184,6 +9874,27 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"kZK" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/structure/chair/sofa/bench/left{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"kZQ" = (
/obj/machinery/modular_computer/preset/command{
dir = 1
@@ -8194,6 +9905,26 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"lat" = (
+/obj/structure/hedge/opaque,
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/curtain/cloth/fancy/mechanical{
+ icon_state = "bounty-open";
+ icon_type = "bounty";
+ id = "CCSalon";
+ name = "curtain"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"laX" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
"lba" = (
/obj/machinery/computer/records/medical{
dir = 8
@@ -8213,10 +9944,64 @@
"lcR" = (
/turf/closed/indestructible/riveted,
/area/centcom/interlink/dorm_rooms)
+"ldK" = (
+/obj/structure/toilet{
+ pixel_y = 12
+ },
+/obj/machinery/light/small/directional/west,
+/obj/machinery/button/door{
+ id = "CCToilet";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = 0;
+ pixel_x = 28
+ },
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"lgh" = (
/obj/item/stack/sheet/mineral/wood/fifty,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"lgm" = (
+/obj/structure/rack/shelf{
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
+ icon_state = "empty_shelf_1"
+ },
+/obj/structure/stone_tile/slab,
+/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
+ pixel_y = 7;
+ pixel_x = -5
+ },
+/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
+ pixel_y = 7;
+ pixel_x = 7
+ },
+/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
+ pixel_y = 11;
+ pixel_x = 1
+ },
+/obj/item/smelling_salts{
+ pixel_y = -9;
+ pixel_x = -5
+ },
+/obj/item/smelling_salts{
+ pixel_y = -9;
+ pixel_x = 6
+ },
+/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
+ pixel_y = 11;
+ pixel_x = 1
+ },
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"lgt" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"lgF" = (
/obj/machinery/door/airlock/centcom{
name = "Blueshield's Office"
@@ -8226,6 +10011,10 @@
/obj/effect/turf_decal/tile/green/opposingcorners,
/turf/open/floor/iron,
/area/centcom/interlink)
+"lhh" = (
+/obj/machinery/shower/directional/south,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"lht" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 4
@@ -8237,15 +10026,16 @@
/turf/open/floor/wood/tile,
/area/centcom/interlink)
"lhF" = (
-/obj/machinery/computer/operating{
+/obj/structure/stone_tile/block,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
+"lhK" = (
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 8
},
-/obj/effect/turf_decal/tile/blue/half{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
+/obj/effect/turf_decal/tile/blue,
+/obj/structure/closet/crate/bin,
/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"lic" = (
@@ -8255,6 +10045,17 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"lij" = (
+/obj/item/kirbyplants/random,
+/obj/machinery/button/door{
+ id = "CCSalon";
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = -25
+ },
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"liK" = (
/obj/structure/reagent_dispensers/cooking_oil,
/turf/open/floor/iron/showroomfloor,
@@ -8278,6 +10079,14 @@
/obj/structure/spacevine,
/turf/open/water/beach,
/area/centcom/holding/cafepark)
+"lkC" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 1;
+ greyscale_colors = "#AA8A61"
+ },
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"lla" = (
/obj/machinery/iv_drip,
/obj/effect/turf_decal/bot_blue,
@@ -8305,6 +10114,10 @@
/obj/item/kirbyplants/random,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"lro" = (
+/obj/structure/marker_beacon/burgundy,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"lrp" = (
/obj/effect/turf_decal/trimline/dark_green/filled/corner,
/turf/open/floor/iron,
@@ -8318,6 +10131,31 @@
/obj/structure/railing,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"ltu" = (
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/obj/item/storage/pill_bottle/mutadone,
+/obj/item/storage/pill_bottle/mannitol,
+/obj/structure/table/glass,
+/obj/item/clothing/gloves/latex,
+/obj/item/flashlight/pen{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
+"lvk" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"lvR" = (
/obj/effect/turf_decal/trimline/dark_green/filled/warning{
dir = 9
@@ -8331,24 +10169,14 @@
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"lwt" = (
-/obj/structure/fence/door,
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
-"lwv" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/chair/wood{
dir = 4
},
-/obj/machinery/vending/medical{
- pixel_x = -2
- },
-/turf/open/floor/iron/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"lwv" = (
+/turf/closed/indestructible/wood,
+/area/centcom/holding/cafepark)
"lxl" = (
/obj/structure/chair/sofa/bench/right,
/obj/effect/landmark/latejoin,
@@ -8362,9 +10190,6 @@
dir = 8
},
/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green{
- pixel_y = 6
- },
/turf/open/floor/wood/tile,
/area/centcom/interlink)
"lzr" = (
@@ -8379,6 +10204,12 @@
/obj/machinery/light/cold/directional/east,
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"lAv" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 4
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"lAx" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -8388,6 +10219,16 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"lBn" = (
+/obj/structure/bed/maint{
+ pixel_y = 13
+ },
+/obj/structure/bed/maint,
+/obj/item/bedsheet/black/double{
+ dir = 1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"lCi" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/window/reinforced/spawner/directional/north{
@@ -8401,6 +10242,28 @@
/obj/item/clothing/under/shorts/red,
/turf/open/floor/wood,
/area/centcom/holding/cafepark)
+"lDo" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"lDy" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 5
+ },
+/obj/structure/table/wood/fancy/orange{
+ pixel_y = -3
+ },
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = -7;
+ pixel_y = -2
+ },
+/obj/item/flashlight/flare/candle/infinite,
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"lFU" = (
/obj/structure/table/wood,
/obj/item/folder/white{
@@ -8423,6 +10286,13 @@
/obj/effect/mapping_helpers/airlock/access/all/command/general,
/turf/open/floor/iron,
/area/centcom/interlink)
+"lHD" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"lHT" = (
/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw,
/turf/open/floor/iron,
@@ -8454,14 +10324,30 @@
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
"lLN" = (
-/obj/machinery/light/small/directional/north,
+/obj/structure/mirror/directional/east,
+/obj/structure/sink/directional/west,
/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafe)
+"lMj" = (
+/obj/structure/chair/stool/bamboo{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"lMY" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/structure/statue/bone/rib{
+ dir = 1
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"lNi" = (
-/obj/machinery/light/directional/north,
-/obj/machinery/vending/boozeomat/cafe,
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"lOD" = (
/obj/structure/sign/directions/evac{
pixel_y = -8
@@ -8557,25 +10443,56 @@
/obj/structure/flora/tree/jungle/style_6,
/turf/open/floor/grass,
/area/centcom/interlink)
+"lVs" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 1
+ },
+/turf/closed/indestructible/weeb,
+/area/centcom/holding/cafe)
"lVL" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"lWZ" = (
+/obj/structure/table{
+ name = "Jim Norton's Quebecois Coffee table"
+ },
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = 4;
+ pixel_y = 10
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"lXk" = (
/obj/item/flashlight/lantern,
/turf/open/misc/dirt/planet,
/area/centcom/interlink)
"lXl" = (
-/obj/structure/easel,
-/obj/item/canvas/nineteen_nineteen,
-/turf/open/misc/grass/planet,
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/misc/asteroid/snow/indestructible/planet,
/area/centcom/holding/cafepark)
"lXo" = (
/obj/machinery/oven/range,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"lYJ" = (
+/obj/effect/spawner/liquids_spawner,
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/turf/open/floor/iron/pool/cobble/corner{
+ dir = 4
+ },
+/area/centcom/holding/cafe)
+"lZn" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"mac" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -8613,6 +10530,20 @@
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"mfo" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/structure/mineral_door/wood/large_gate{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"mfu" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"mfN" = (
/obj/structure/table{
name = "Jim Norton's Quebecois Coffee table"
@@ -8629,6 +10560,15 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"mgr" = (
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"mgY" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp/green,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"mjo" = (
/obj/machinery/door/airlock/centcom{
name = "Interlink Security Checkpoint"
@@ -8697,6 +10637,11 @@
/obj/item/toner/extreme,
/turf/open/floor/iron,
/area/centcom/interlink)
+"mon" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/flora/bush/jungle/b,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"moG" = (
/obj/item/kirbyplants/organic/plant22,
/turf/open/floor/iron/dark,
@@ -8724,20 +10669,6 @@
},
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
-"mtr" = (
-/obj/structure/toilet/snappop{
- dir = 4
- },
-/obj/effect/turf_decal/siding/thinplating/end{
- dir = 4;
- pixel_y = -6
- },
-/obj/effect/turf_decal/siding/thinplating{
- dir = 8;
- pixel_y = -7
- },
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
"mtv" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -8761,6 +10692,61 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"mwo" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/glass/mug{
+ pixel_x = 13;
+ pixel_y = -1
+ },
+/obj/item/reagent_containers/cup/glass/mug{
+ pixel_x = 6;
+ pixel_y = 3
+ },
+/obj/item/reagent_containers/cup/glass/mug{
+ pixel_x = 13;
+ pixel_y = 7
+ },
+/obj/item/reagent_containers/cup/glass/shaker{
+ pixel_x = -2;
+ pixel_y = 12
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/obj/structure/railing/wooden_fencing{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"mwV" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/flora/ash/cacti,
+/obj/structure/wall_torch/spawns_lit/directional/north,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"mxd" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"mxj" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/cup/glass/shaker{
@@ -8777,10 +10763,23 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"mxI" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fake_stairs/wood/directional/north,
+/obj/machinery/light/directional/east,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"mxQ" = (
/obj/structure/table,
/turf/open/floor/carpet/red,
/area/cruiser_dock)
+"mza" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"mzf" = (
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/obj/effect/turf_decal/siding/white,
@@ -8820,12 +10819,81 @@
/obj/structure/bookcase/random/reference,
/turf/open/floor/iron,
/area/centcom/interlink)
+"mBs" = (
+/obj/structure/flora/grass/jungle/a/style_5,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
+"mBM" = (
+/obj/structure/table/rolling,
+/obj/item/hhmirror{
+ pixel_x = 5;
+ pixel_y = 9
+ },
+/obj/item/hairbrush/comb,
+/obj/item/razor{
+ pixel_x = -7;
+ pixel_y = 3
+ },
+/obj/item/scissors{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/item/straight_razor{
+ pixel_x = 9;
+ pixel_y = 2
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/window/spawner/directional/east,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"mBS" = (
+/obj/structure/closet/crate/wooden,
+/obj/item/hemostat/ashwalker,
+/obj/item/retractor/ashwalker{
+ pixel_y = -9
+ },
+/obj/item/scalpel/ashwalker{
+ pixel_y = -4
+ },
+/obj/item/surgicaldrill/ashwalker,
+/obj/item/circular_saw/ashwalker,
+/obj/item/cautery/ashwalker,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"mCg" = (
+/obj/structure/railing/wooden_fencing,
+/obj/structure/railing/wooden_fencing{
+ dir = 8
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"mCr" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 6
},
/turf/open/floor/plating,
/area/cruiser_dock)
+"mCv" = (
+/obj/structure/table/reinforced/rglass,
+/obj/structure/mirror/directional/west,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/obj/item/reagent_containers/dropper{
+ pixel_x = 3;
+ pixel_y = 1
+ },
+/obj/machinery/dryer{
+ pixel_y = 14
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"mDs" = (
/obj/structure/chair/sofa/bench{
dir = 4
@@ -8841,6 +10909,12 @@
/obj/structure/flora/bush/flowers_br/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"mDS" = (
+/obj/machinery/hypnochair,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"mEW" = (
/obj/effect/turf_decal/sand,
/obj/structure/chair/stool/bar/directional/west{
@@ -8849,6 +10923,20 @@
/obj/effect/turf_decal/stripes/asteroid/line,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"mGn" = (
+/obj/structure/table{
+ name = "Jim Norton's Quebecois Coffee table"
+ },
+/obj/item/food/poppypretzel{
+ pixel_x = -5;
+ pixel_y = -2
+ },
+/obj/item/reagent_containers/cup/glass/mug{
+ pixel_x = 10;
+ pixel_y = 7
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"mHF" = (
/obj/structure/sink/directional/east,
/turf/open/floor/iron,
@@ -8864,6 +10952,22 @@
/obj/machinery/vending/boozeomat/cafe,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"mIp" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/cup/glass/trophy{
+ pixel_y = 11;
+ pixel_x = 9
+ },
+/obj/item/reagent_containers/cup/glass/bottle/wine/unlabeled{
+ pixel_x = -3;
+ pixel_y = 7
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"mJB" = (
+/obj/structure/fireplace,
+/turf/open/floor/stone,
+/area/centcom/holding/cafe)
"mJG" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -8885,12 +10989,12 @@
/turf/open/floor/grass,
/area/centcom/interlink)
"mLK" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/table/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
},
-/area/centcom/holding/cafe)
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"mMu" = (
/obj/structure/chair/sofa/bench{
dir = 4
@@ -8906,19 +11010,72 @@
dir = 9
},
/area/centcom/holding/cafepark)
+"mOW" = (
+/obj/machinery/newscaster/directional/north,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"mPR" = (
-/obj/effect/turf_decal/tile/blue/half{
- dir = 4
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 9
},
-/obj/machinery/iv_drip,
-/obj/machinery/defibrillator_mount/loaded{
- pixel_x = 28
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 1
},
-/turf/open/floor/iron/white,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
+"mQa" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/skill_station,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
+"mRb" = (
+/obj/structure/chair/sofa/bench/left{
+ dir = 8
+ },
+/obj/machinery/light/warm/directional/east,
+/turf/open/floor/wood/large,
/area/centcom/holding/cafe)
+"mRV" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/right,
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"mSs" = (
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
+"mSw" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"mSQ" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"mTS" = (
/obj/machinery/stasis{
dir = 4
@@ -8959,17 +11116,25 @@
icon_state = "darkfull"
},
/area/centcom/holding/cafe)
-"mZp" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
+"mYy" = (
+/obj/structure/railing/corner{
dir = 8
},
-/obj/vehicle/ridden/wheelchair{
- dir = 4
+/obj/structure/fake_stairs/directional/south,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"mZp" = (
+/obj/structure/flora/tree/jungle/small/style_random,
+/obj/structure/flora/grass/jungle,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/turf/open/floor/iron/white,
+/area/centcom/holding/cafepark)
+"mZu" = (
+/obj/structure/closet/emcloset,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
/area/centcom/holding/cafe)
"nap" = (
/mob/living/basic/crab{
@@ -8992,6 +11157,10 @@
/obj/machinery/deepfryer,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"ncP" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"ndc" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
/obj/effect/turf_decal/siding/wood{
@@ -9012,25 +11181,25 @@
/turf/open/misc/asteroid,
/area/cruiser_dock)
"neb" = (
-/obj/structure/bed/abductor,
-/turf/open/floor/plating/abductor,
+/obj/structure/reagent_dispensers/watertank/high,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/floor/iron,
/area/centcom/holding/cafe)
"ngg" = (
/obj/structure/chair/stool/bar/directional/west,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
-"nii" = (
-/obj/machinery/door/window/left/directional/west{
- base_state = "right";
- dir = 1;
- icon_state = "right";
- name = "Monkey Pen";
- pixel_y = 2;
- req_access = list("genetics")
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+"nhZ" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
},
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
+"nii" = (
+/obj/structure/fireplace,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"nim" = (
/obj/effect/turf_decal/trimline/green/filled/arrow_cw{
@@ -9041,6 +11210,29 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"nis" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/structure/rack/wooden,
+/obj/item/plate/blowing_glass{
+ pixel_y = -9;
+ pixel_x = -2
+ },
+/obj/item/plate/blowing_glass{
+ pixel_y = -6;
+ pixel_x = -1
+ },
+/obj/item/reagent_containers/cup/beaker/large/blowing_glass{
+ pixel_y = 9;
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/cup/beaker/large/blowing_glass{
+ pixel_y = 9;
+ pixel_x = -5
+ },
+/turf/open/floor/stone,
+/area/centcom/holding/cafepark)
"niJ" = (
/obj/structure/closet/crate/bin,
/turf/open/floor/iron/dark,
@@ -9052,15 +11244,96 @@
},
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
-"nlM" = (
-/obj/structure/chair/office{
- dir = 1
+"njQ" = (
+/obj/effect/turf_decal/bot,
+/obj/structure/showcase/machinery/implanter{
+ icon = 'icons/obj/antags/abductor.dmi';
+ icon_state = "experiment";
+ name = "pod"
},
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
+"nkZ" = (
+/obj/machinery/light/directional/west,
+/obj/structure/closet,
/turf/open/floor/iron,
/area/centcom/holding/cafe)
+"nlv" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/structure/chair/sofa/bench/right,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"nlB" = (
+/obj/structure/chair/stool{
+ name = "Jim Norton's Quebecois Coffee stool"
+ },
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"nlM" = (
+/obj/structure/curtain,
+/obj/machinery/shower/directional/north,
+/obj/structure/window/reinforced/tinted/spawner/directional/east,
+/turf/open/floor/plating/abductor2,
+/area/centcom/holding/cafepark)
+"nng" = (
+/obj/structure/table/wood,
+/obj/item/food/muffin/berry{
+ pixel_x = 18;
+ pixel_y = 9
+ },
+/obj/structure/desk_bell{
+ pixel_x = 7
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/window/spawner/directional/south,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"nnJ" = (
+/obj/structure/rack/wooden,
+/obj/item/storage/box/matches{
+ pixel_y = -8;
+ pixel_x = -3
+ },
+/obj/item/pen/charcoal{
+ pixel_y = 5
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"noq" = (
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"noy" = (
+/obj/structure/table/reinforced/rglass,
+/obj/structure/mirror/directional/west,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/obj/item/hhmirror,
+/obj/item/clothing/head/wig/random{
+ pixel_x = 4;
+ pixel_y = 3
+ },
+/obj/item/clothing/head/wig/natural,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"noA" = (
/obj/structure/table{
name = "Jim Norton's Quebecois Coffee table"
@@ -9075,6 +11348,12 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"npc" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 8
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
"npe" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
/obj/effect/turf_decal/siding/wood/corner{
@@ -9083,9 +11362,16 @@
/obj/structure/bookcase/random/religion,
/turf/open/floor/iron,
/area/centcom/interlink)
+"npr" = (
+/obj/structure/fake_stairs/wood/directional/east,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"nps" = (
/obj/structure/easel,
/obj/item/canvas/twentythree_twentythree,
+/obj/structure/sign/painting/library{
+ pixel_x = -32
+ },
/turf/open/floor/carpet/cyan,
/area/centcom/holding/cafe)
"nqQ" = (
@@ -9131,21 +11417,24 @@
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"nxR" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
},
-/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/south,
-/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe,
-/turf/open/indestructible/hoteltile{
- icon_state = "white"
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"nyj" = (
+/obj/structure/chair/office{
+ dir = 8
},
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"nyr" = (
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"nzn" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"nzO" = (
/obj/machinery/door/poddoor/shutters/window/preopen,
/turf/open/floor/iron,
@@ -9172,6 +11461,12 @@
dir = 4
},
/area/cruiser_dock)
+"nFi" = (
+/obj/structure/curtain,
+/obj/machinery/shower/directional/north,
+/obj/structure/window/spawner/directional/west,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"nFH" = (
/obj/machinery/door/airlock/public/glass{
name = "Interlink Garden"
@@ -9181,6 +11476,11 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"nGL" = (
+/obj/structure/table/wood,
+/obj/item/soap/deluxe,
+/turf/open/floor/sepia,
+/area/centcom/holding/cafe)
"nHC" = (
/obj/machinery/photocopier,
/obj/machinery/button/door/directional/south{
@@ -9193,9 +11493,13 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"nHH" = (
-/mob/living/basic/chicken,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/machinery/recharge_station,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/light/directional/south,
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"nHK" = (
/obj/structure/flora/bush/fullgrass/style_random,
/obj/effect/turf_decal/weather/dirt,
@@ -9207,17 +11511,9 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"nJO" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e"
- },
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 6
- },
-/obj/item/kirbyplants/random,
-/obj/machinery/light/warm/directional/east,
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/structure/railing/wooden_fencing,
+/turf/open/floor/wood,
+/area/centcom/holding/cafepark)
"nJQ" = (
/obj/effect/turf_decal/arrows{
dir = 8
@@ -9230,8 +11526,10 @@
/turf/open/floor/wood/tile,
/area/centcom/interlink)
"nKz" = (
-/obj/structure/table/abductor,
-/turf/open/floor/plating/abductor,
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"nKJ" = (
/obj/effect/turf_decal/weather/dirt{
@@ -9240,6 +11538,18 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"nLr" = (
+/obj/structure/fake_stairs/wood/directional/east,
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
+"nMw" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"nNe" = (
/obj/structure/table,
/obj/item/pizzabox/pineapple,
@@ -9293,6 +11603,13 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"nPr" = (
+/obj/structure/table{
+ name = "Jim Norton's Quebecois Coffee table"
+ },
+/obj/item/reagent_containers/cup/glass/mug/coco,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"nQm" = (
/obj/effect/turf_decal/weather/dirt{
dir = 1
@@ -9326,6 +11643,52 @@
},
/turf/open/floor/iron/grimy,
/area/centcom/interlink)
+"nUS" = (
+/obj/structure/flora/grass/jungle/a/style_2,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"nWn" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"nXu" = (
+/obj/structure/stone_tile/slab,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"nXw" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 1
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
+"nYp" = (
+/obj/structure/chair/sofa/corp/right,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"nYB" = (
/obj/effect/turf_decal/siding/white{
dir = 9
@@ -9359,20 +11722,17 @@
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
"oaM" = (
-/obj/effect/turf_decal/tile/blue/half{
- dir = 4
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
},
-/obj/structure/table,
-/obj/item/storage/medkit/brute{
- pixel_x = 3;
- pixel_y = 3
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
},
-/obj/item/storage/medkit/o2{
- pixel_x = -2;
- pixel_y = -2
+/obj/machinery/washing_machine,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
},
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"obP" = (
/obj/effect/turf_decal/box/corners{
dir = 1
@@ -9397,6 +11757,11 @@
/obj/machinery/light/directional/south,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"ofw" = (
+/obj/structure/closet/crate/wooden/storage_barrel,
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"ofJ" = (
/turf/open/misc/beach/coast{
dir = 6
@@ -9417,6 +11782,13 @@
/obj/machinery/light/very_dim/directional/south,
/turf/open/floor/wood,
/area/centcom/interlink)
+"oja" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/holding/cafepark)
"ojv" = (
/obj/effect/turf_decal/siding/dark{
dir = 4
@@ -9459,21 +11831,72 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"onU" = (
+/obj/structure/weightmachine,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"ooD" = (
+/obj/structure/table,
+/obj/item/reagent_containers/cup/glass/waterbottle{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"ooG" = (
/obj/effect/turf_decal/siding/wood/corner{
dir = 1
},
/turf/open/floor/wood,
/area/centcom/interlink)
-"osk" = (
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 8
+"ooW" = (
+/obj/structure/bed/pod{
+ pixel_y = 1
},
-/obj/item/kirbyplants/random,
-/obj/machinery/button/door/directional/south{
- id = "room1";
- name = "Door Lock";
- normaldoorcontrol = 1;
+/obj/structure/mirror/directional/east,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"ooY" = (
+/obj/structure/flora/grass/jungle/a/style_4,
+/obj/structure/chair/sofa/bench/right,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"orh" = (
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/box,
+/obj/structure/window/spawner/directional/east,
+/obj/structure/showcase/fake_cafe_console/rd,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"orB" = (
+/obj/item/paper_bin/bundlenatural,
+/turf/open/floor/sepia,
+/area/centcom/holding/cafe)
+"orU" = (
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = -19;
+ pixel_y = -23
+ },
+/obj/item/fancy_pillow{
+ pixel_x = -10;
+ pixel_y = -7
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
+"osk" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/item/kirbyplants/random,
+/obj/machinery/button/door/directional/south{
+ id = "room1";
+ name = "Door Lock";
+ normaldoorcontrol = 1;
pixel_x = -8;
specialfunctions = 4
},
@@ -9493,6 +11916,11 @@
/obj/structure/chair/sofa/bench,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"ovF" = (
+/obj/structure/fans/tiny/invisible,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ovH" = (
/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe{
default_price = 0;
@@ -9501,6 +11929,18 @@
},
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"owJ" = (
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted,
+/obj/machinery/button/door{
+ id = "CCRobotics";
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = 0;
+ pixel_x = 25
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"oxb" = (
/obj/effect/turf_decal/weather/dirt{
dir = 1
@@ -9509,6 +11949,27 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"oyf" = (
+/obj/structure/flora/bush/sunny{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/structure/flora/bush/grassy{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/structure/window/reinforced/spawner/directional/south,
+/obj/structure/flora/bush/flowers_br{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/structure/flora/bush/ferny,
+/obj/structure/window/reinforced/spawner/directional/east{
+ layer = 2.9
+ },
+/turf/open/floor/grass/fairy,
+/area/centcom/holding/cafepark)
"oyi" = (
/obj/item/reagent_containers/cup/soda_cans/dr_gibb{
pixel_x = -8;
@@ -9555,6 +12016,31 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"ozJ" = (
+/obj/structure/railing/wooden_fencing,
+/obj/structure/railing/wooden_fencing{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"ozR" = (
+/obj/structure/table/reinforced/rglass,
+/obj/structure/curtain/cloth,
+/obj/machinery/light/directional/east,
+/obj/item/reagent_containers/medigel/aiuri{
+ desc = "A medicinal massage oil containing aiuri, normally gives a nice cooling effect on the bodypart where it's applied whilst also healing minor burns.";
+ name = "Cooling massage oil";
+ pixel_x = 2;
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/medigel/libital{
+ desc = "A medicinal massage oil that warms up and relaxes the skin and muscles, great at both treating backpains, cramps and bruises.";
+ name = "Relaxing massage oil";
+ pixel_x = -4;
+ pixel_y = 5
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"oAn" = (
/obj/structure/chair/sofa/bench/right,
/obj/effect/landmark/latejoin,
@@ -9563,6 +12049,25 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"oAt" = (
+/obj/structure/flora/grass/jungle/a/style_4,
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"oBa" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"oBf" = (
/obj/structure/chair/sofa/bench{
dir = 8
@@ -9571,6 +12076,13 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/mineral/titanium,
/area/centcom/interlink)
+"oBn" = (
+/obj/effect/turf_decal/tile/red/anticorner/contrasted,
+/obj/structure/toilet{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"oCU" = (
/obj/effect/turf_decal/weather/dirt{
dir = 1
@@ -9586,11 +12098,30 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"oEm" = (
+/obj/structure/table,
+/obj/item/reagent_containers/cup/rag{
+ pixel_y = 7;
+ pixel_x = -1
+ },
+/obj/item/reagent_containers/cup/glass/waterbottle{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"oFj" = (
/turf/open/floor/iron/smooth_corner{
dir = 4
},
/area/cruiser_dock)
+"oGv" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"oIK" = (
/obj/effect/turf_decal/trimline/dark_green/filled/warning{
dir = 8
@@ -9615,6 +12146,18 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"oLI" = (
+/obj/structure/chair/sofa/corp/left,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"oNz" = (
+/obj/structure/closet/boxinggloves,
+/obj/item/clothing/gloves/boxing,
+/obj/item/clothing/gloves/boxing/blue,
+/obj/item/clothing/gloves/boxing/green,
+/obj/item/clothing/gloves/boxing/yellow,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"oOC" = (
/obj/effect/turf_decal/trimline/dark_green/filled/corner{
dir = 1
@@ -9627,6 +12170,24 @@
},
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"oOS" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"oPL" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"oQR" = (
/turf/closed/indestructible/fakedoor{
name = "Base Access"
@@ -9638,6 +12199,14 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"oRX" = (
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/research{
+ name = "Robotics";
+ id_tag = "CCRobotics"
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"oSp" = (
/obj/structure/table/wood,
/obj/item/paper_bin{
@@ -9647,61 +12216,45 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"oSG" = (
-/obj/effect/turf_decal/tile/blue/half{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "ghostcafemedical";
- pixel_x = 25
+/obj/structure/rack/shelf{
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
+ icon_state = "empty_shelf_1"
},
-/obj/structure/table,
-/obj/item/storage/medkit/fire{
- pixel_x = 3;
- pixel_y = 3
+/obj/item/bedsheet/black{
+ pixel_x = 5;
+ pixel_y = 4
},
-/obj/item/storage/medkit/toxin{
- pixel_x = -3
+/obj/item/bedsheet/black{
+ pixel_x = 5;
+ pixel_y = 8
},
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"oTx" = (
/obj/machinery/shower/directional/west,
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
-"oVT" = (
-/obj/structure/curtain,
-/obj/machinery/shower/directional/south,
-/obj/structure/drain,
-/obj/effect/turf_decal/siding/thinplating_new/end{
- dir = 1
- },
-/obj/effect/turf_decal/siding/thinplating_new/end,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
-/area/centcom/holding/cafedorms)
-"oWR" = (
-/obj/effect/turf_decal/tile/yellow/half{
- dir = 4
- },
-/obj/effect/turf_decal/tile/yellow/half{
- dir = 8
- },
-/obj/effect/turf_decal/tile/neutral/half{
+"oUI" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral/half{
- dir = 8
- },
-/obj/structure/mineral_door/paperframe{
- name = "Shinto Cabin Bedroom"
- },
-/turf/open/floor/iron/textured_half{
+/obj/structure/stone_tile/surrounding_tile/cracked{
dir = 1
},
-/area/centcom/holding/cafedorms)
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"oVT" = (
+/obj/structure/flora/grass/jungle,
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
+"oWR" = (
+/obj/structure/fake_stairs/wood/directional/north,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"oXS" = (
/turf/open/floor/carpet/red,
/area/cruiser_dock)
@@ -9723,6 +12276,41 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"oYg" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 1
+ },
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"oYO" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/closed/indestructible/weeb,
+/area/centcom/holding/cafe)
+"paj" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"pao" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 6
@@ -9733,12 +12321,29 @@
/obj/structure/deployable_barricade/guardrail,
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
-"pbz" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "ghostcafemedical"
+"paJ" = (
+/obj/machinery/button/door{
+ id = "CCD1";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = 25;
+ specialfunctions = 4
},
-/turf/closed/indestructible/fakeglass,
+/obj/item/kirbyplants/random,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
+"pbz" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/sink/directional/east,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"pbP" = (
/obj/structure/flora/bush/flowers_yw/style_random,
/obj/effect/turf_decal/weather/dirt{
@@ -9747,14 +12352,18 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
-"pcp" = (
-/obj/structure/flora/biolumi/flower{
- random_light = null
- },
-/turf/open/misc/beach/sand{
- dir = 4
+"pci" = (
+/obj/structure/mineral_door/wood/large_gate{
+ dir = 8
},
+/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"pcp" = (
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/mineral_door/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"pcH" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -9764,6 +12373,15 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"pdt" = (
+/obj/machinery/light/floor{
+ alpha = 0;
+ invisibility = 100;
+ light_range = 10;
+ nightshift_light_power = 10
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"pdC" = (
/obj/machinery/cryopod{
dir = 4
@@ -9782,6 +12400,25 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"pej" = (
+/obj/structure/sign/painting/library{
+ pixel_y = -32
+ },
+/turf/open/floor/carpet/cyan,
+/area/centcom/holding/cafe)
+"pgm" = (
+/obj/structure/hedge/opaque,
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/curtain/cloth/fancy/mechanical{
+ icon_state = "bounty-open";
+ icon_type = "bounty";
+ id = "CCSalon";
+ name = "curtain"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"pgL" = (
/obj/structure/chair/sofa/bench/right,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -9804,17 +12441,19 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
-"pkJ" = (
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = -19;
- pixel_y = -23
+"pib" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
},
-/obj/item/fancy_pillow{
- pixel_x = -10;
- pixel_y = -7
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"pkJ" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fence{
+ dir = 4
},
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafepark)
"pmu" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
@@ -9838,6 +12477,13 @@
},
/turf/open/floor/mineral/titanium/tiled/white,
/area/cruiser_dock)
+"pny" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"pnH" = (
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/wood,
@@ -9852,9 +12498,30 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"ppd" = (
+/obj/structure/flora/tree/jungle/small/style_random{
+ pixel_x = -49;
+ pixel_y = -12
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ppR" = (
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"pqy" = (
+/obj/structure/chair/sofa/corp/left,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"pqX" = (
/turf/open/floor/iron/stairs/left,
/area/cruiser_dock)
@@ -9866,12 +12533,22 @@
},
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
+"prH" = (
+/obj/machinery/door/window/right/directional/east{
+ base_state = "left";
+ dir = 8;
+ icon_state = "left";
+ name = "Fitness Ring"
+ },
+/turf/open/floor/iron/dark/corner,
+/area/centcom/holding/cafe)
"prT" = (
-/obj/structure/chair/office/light{
- dir = 1
+/obj/structure/weightmachine/weightlifter,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
},
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"psl" = (
/obj/structure/closet/crate/cardboard,
/obj/item/reagent_containers/cup/glass/bottle/champagne,
@@ -9887,34 +12564,65 @@
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/eighties,
/area/centcom/holding/cafe)
+"ptx" = (
+/obj/structure/chair/office/light{
+ dir = 4
+ },
+/obj/machinery/dryer{
+ pixel_y = 14
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"puo" = (
/obj/effect/turf_decal/sand,
/obj/machinery/light/directional/east,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
"pux" = (
-/obj/machinery/door/window/left/directional/west{
- dir = 1;
- name = "Monkey Pen";
- pixel_y = 2;
- req_access = list("genetics")
- },
-/obj/machinery/light/directional/west,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
+/obj/structure/flora/bush/jungle/c/style_2,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/area/centcom/holding/cafe)
+/area/centcom/holding/cafepark)
"pvN" = (
/turf/open/floor/iron/stairs/left{
dir = 8
},
/area/cruiser_dock)
+"pwO" = (
+/obj/structure/chair/sofa/bench/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/machinery/light/small/directional/west,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"pwV" = (
-/obj/effect/turf_decal/tile/red/half{
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/chair/office/light{
dir = 4
},
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"pxW" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -9938,11 +12646,13 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"pBW" = (
-/turf/closed/indestructible/weeb,
-/area/centcom/holding/cafedorms)
+/obj/machinery/light/directional/south,
+/obj/structure/flora/grass/jungle/b/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"pCd" = (
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/turf/closed/wall/mineral/wood/nonmetal,
+/area/centcom/holding/cafepark)
"pCw" = (
/obj/structure/rack,
/obj/item/reagent_containers/cup/rag,
@@ -9974,9 +12684,10 @@
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
"pET" = (
-/obj/structure/flora/bush/flowers_yw,
-/turf/open/misc/grass/planet,
-/area/centcom/holding/cafepark)
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"pFe" = (
/obj/machinery/door/airlock/freezer{
name = "Freezer"
@@ -10008,14 +12719,8 @@
/turf/open/floor/grass,
/area/centcom/interlink)
"pGK" = (
-/obj/machinery/shower/directional/west,
-/obj/structure/sink/directional/south,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
-/area/centcom/holding/cafedorms)
+/turf/open/floor/iron/dark/side,
+/area/centcom/holding/cafe)
"pGZ" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/door/poddoor/shutters/window/indestructible{
@@ -10073,6 +12778,37 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"pLq" = (
+/obj/structure/rack/wooden,
+/obj/item/dyespray{
+ pixel_x = -6;
+ pixel_y = 11
+ },
+/obj/item/dyespray{
+ pixel_x = 5;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/spray/quantum_hair_dye{
+ pixel_x = 11
+ },
+/obj/item/reagent_containers/spray/barbers_aid{
+ pixel_x = -3;
+ pixel_y = -2
+ },
+/obj/item/reagent_containers/spray/baldium{
+ pixel_x = -10;
+ pixel_y = -2
+ },
+/obj/item/reagent_containers/spray/super_barbers_aid{
+ pixel_x = 4;
+ pixel_y = -2
+ },
+/obj/machinery/light/directional/west,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"pMg" = (
/obj/machinery/door/airlock{
id_tag = "room1";
@@ -10113,8 +12849,13 @@
/turf/open/floor/carpet/blue,
/area/centcom/holding/cafedorms)
"pNf" = (
-/obj/item/toy/plush/bubbleplush,
-/turf/closed/mineral/earth_like,
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/turf/open/floor/fakebasalt,
/area/centcom/holding/cafepark)
"pNF" = (
/obj/effect/turf_decal/siding/white/corner{
@@ -10141,16 +12882,10 @@
/turf/open/floor/wood,
/area/centcom/interlink)
"pPH" = (
-/obj/structure/fans/tiny/invisible,
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/machinery/door/airlock/security/old{
- id_tag = "ghostcafesec";
- name = "Detainment"
- },
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
-/area/centcom/holding/cafe)
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"pPI" = (
/obj/machinery/door/airlock/multi_tile/public/glass{
name = "Interlink"
@@ -10164,15 +12899,13 @@
/turf/open/floor/grass,
/area/centcom/interlink)
"pQp" = (
-/obj/effect/turf_decal/siding/wood{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/curtain/cloth/fancy/mechanical/start_closed{
- id = "ghostcafecabinjapcurtain"
+/obj/structure/bed/pod{
+ pixel_y = 1
},
-/turf/closed/indestructible/fakeglass,
-/area/centcom/holding/cafedorms)
+/obj/structure/window/spawner/directional/south,
+/obj/structure/mirror/directional/east,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"pSt" = (
/obj/effect/turf_decal/trimline/dark_green/filled/corner{
dir = 8
@@ -10198,6 +12931,12 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"pSZ" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 4
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
"pTO" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/right/directional/north{
@@ -10208,8 +12947,16 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"pUJ" = (
-/turf/open/floor/plating/abductor,
+/obj/structure/chair/sofa/left/brown{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"pUQ" = (
+/obj/structure/flora/grass/jungle/a/style_2,
+/obj/structure/flora/bush/flowers_br,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"pVh" = (
/obj/machinery/photocopier,
/obj/machinery/button/door/directional/north{
@@ -10228,6 +12975,10 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"pWF" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"pXn" = (
/obj/machinery/button/door/directional/east{
id = "evac_hall_lookout";
@@ -10243,6 +12994,20 @@
},
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"pXT" = (
+/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/machinery/door/firedoor,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/abductor{
+ desc = "What could possibly be in here? Probably naked people.";
+ id_tag = "ghostcafecabin2";
+ name = "Bedroom"
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"pYF" = (
/obj/effect/turf_decal/weather/dirt{
dir = 6
@@ -10306,16 +13071,61 @@
},
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"qdG" = (
+/obj/structure/railing{
+ dir = 6
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 6
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"qdV" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/wall_torch/spawns_lit/directional/south,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"qey" = (
/obj/effect/turf_decal/caution/stand_clear{
dir = 1
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"qfy" = (
+/obj/structure/table/wood/fancy/blue,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
+"qgh" = (
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"qhl" = (
+/obj/structure/flora/bush/large/style_2,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"qhn" = (
/obj/machinery/light/very_dim/directional/east,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"qiI" = (
+/obj/machinery/light/directional/south,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"qjh" = (
/obj/structure/chair/sofa/bench/right{
dir = 4
@@ -10340,6 +13150,13 @@
/obj/effect/turf_decal/siding/wood/corner,
/turf/open/floor/iron,
/area/centcom/interlink)
+"qmG" = (
+/obj/machinery/light/directional/south,
+/obj/structure/chair/stool/directional/south{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"qna" = (
/obj/structure/barricade/wooden,
/turf/open/misc/dirt/planet,
@@ -10387,6 +13204,13 @@
/obj/effect/turf_decal/siding/white/corner,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"qnH" = (
+/obj/structure/flora/grass/jungle/b/style_2,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"qot" = (
/obj/effect/turf_decal/weather/dirt{
dir = 9
@@ -10425,6 +13249,11 @@
},
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"qpx" = (
+/obj/machinery/status_display/evac/directional/north,
+/obj/structure/chair/office,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"qrv" = (
/obj/structure/table{
name = "Jim Norton's Quebecois Coffee table"
@@ -10438,6 +13267,10 @@
/obj/item/coffee_cartridge/bootleg,
/turf/open/floor/iron,
/area/centcom/interlink)
+"qrK" = (
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"qsQ" = (
/obj/machinery/stasis,
/obj/effect/turf_decal/trimline/blue/filled/corner{
@@ -10445,9 +13278,20 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
-"qub" = (
-/obj/effect/turf_decal/weather/dirt{
- dir = 4
+"qtz" = (
+/obj/structure/hedge/opaque,
+/obj/structure/fans/tiny/invisible,
+/obj/structure/curtain/cloth/fancy/mechanical{
+ icon_state = "bounty-open";
+ icon_type = "bounty";
+ id = "CCSalon";
+ name = "curtain"
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"qub" = (
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
},
/turf/open/floor/grass,
/area/centcom/interlink)
@@ -10481,9 +13325,24 @@
/obj/machinery/vending/snack,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"qwJ" = (
+/obj/structure/chair/sofa/corp/left,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"qyu" = (
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"qze" = (
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 5
+ },
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 5
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"qzE" = (
/obj/structure/sign/poster/random/directional/west,
/obj/structure/chair/sofa/bench{
@@ -10494,16 +13353,30 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"qAg" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 8
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"qAW" = (
/obj/effect/turf_decal/siding/white{
dir = 4
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"qBd" = (
+/obj/machinery/light/directional/west,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"qBC" = (
/obj/machinery/vending/primitive_catgirl_clothing_vendor,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"qCU" = (
+/obj/machinery/light/directional/south,
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
"qDc" = (
/obj/machinery/door/window/left/directional/south{
name = "Coffee Counter"
@@ -10511,6 +13384,14 @@
/obj/machinery/duct,
/turf/open/floor/iron,
/area/centcom/interlink)
+"qDk" = (
+/obj/structure/table/reinforced/rglass,
+/obj/structure/window/spawner/directional/west,
+/obj/structure/curtain/cloth,
+/obj/item/clothing/gloves/latex,
+/obj/item/clothing/gloves/latex,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"qEp" = (
/turf/open/floor/iron/smooth_edge{
dir = 8
@@ -10520,6 +13401,12 @@
/obj/structure/sign/poster/random/directional/north,
/turf/open/floor/wood,
/area/centcom/interlink)
+"qFt" = (
+/obj/structure/chair/comfy/black{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"qFG" = (
/obj/machinery/light/directional/south,
/obj/machinery/status_display/shuttle{
@@ -10529,21 +13416,45 @@
/obj/effect/turf_decal/trimline/blue/filled/line,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"qGA" = (
+/obj/effect/turf_decal/tile/red/opposingcorners,
+/obj/machinery/vending/wardrobe/sec_wardrobe,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"qGW" = (
/obj/structure/chair/comfy/brown,
/turf/open/floor/carpet/executive,
/area/centcom/interlink)
"qHc" = (
-/obj/effect/turf_decal/bot,
-/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe,
-/turf/open/indestructible/hoteltile{
- icon_state = "darkfull"
- },
+/obj/structure/closet/crate/wooden,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/obj/item/stack/sheet/mineral/wood/fifty,
+/obj/item/lighter,
+/turf/open/indestructible/carpet,
/area/centcom/holding/cafe)
"qHJ" = (
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"qHT" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/structure/chair/sofa/bench/left{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"qIl" = (
/obj/effect/turf_decal/siding/thinplating_new/dark/corner{
dir = 4
@@ -10572,32 +13483,40 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"qKi" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
},
-/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/turf/open/floor/stone,
+/area/centcom/holding/cafepark)
"qLQ" = (
/obj/machinery/washing_machine,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"qMl" = (
-/obj/machinery/vending/drugs,
-/obj/effect/turf_decal/tile/blue{
- dir = 1
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"qNu" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 4
},
-/obj/effect/turf_decal/tile/blue{
- dir = 8
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
},
-/obj/effect/turf_decal/tile/blue{
+/obj/structure/chair/wood{
dir = 4
},
-/turf/open/floor/iron/white,
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
+"qNZ" = (
+/obj/effect/spawner/liquids_spawner,
+/obj/effect/light_emitter/interlink,
+/turf/open/floor/iron/pool/cobble,
+/area/centcom/holding/cafepark)
+"qPk" = (
+/obj/structure/window/spawner/directional/south,
+/turf/open/floor/carpet/black,
/area/centcom/holding/cafe)
"qPw" = (
/obj/effect/turf_decal/siding/wood{
@@ -10609,6 +13528,12 @@
},
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
+"qPy" = (
+/obj/structure/chair/sofa/corp{
+ dir = 8
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"qQl" = (
/obj/machinery/light/directional/south,
/obj/effect/turf_decal/tile/red/opposingcorners,
@@ -10644,17 +13569,59 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
-"qWc" = (
+"qUb" = (
/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"qUK" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/fake_stairs/directional/south,
+/obj/structure/fence/door/opened,
+/obj/effect/light_emitter/interlink,
+/turf/open/indestructible/dark,
+/area/centcom/holding/cafepark)
+"qVO" = (
+/obj/structure/railing/wooden_fencing{
+ dir = 8
+ },
+/obj/structure/fake_stairs/wood/directional/north,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"qVQ" = (
+/obj/structure/chair/office/light{
+ dir = 4;
+ pixel_y = 3
+ },
+/obj/structure/window/spawner/directional/south,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"qVU" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/siding/wood,
-/obj/structure/curtain/cloth/fancy/mechanical/start_closed{
- id = "ghostcafecabinjapcurtain"
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
},
-/obj/structure/fans/tiny/invisible,
-/turf/closed/indestructible/fakeglass,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafepark)
+"qWc" = (
+/obj/machinery/shower/directional/west,
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
+"qWv" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"qWA" = (
/obj/structure/table/wood,
/obj/machinery/reagentgrinder{
@@ -10662,11 +13629,21 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"qWE" = (
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"qWG" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"qWZ" = (
/obj/effect/light_emitter/interlink,
/obj/structure/fluff/arc,
/turf/open/floor/grass,
/area/centcom/interlink)
+"qXC" = (
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"rah" = (
/obj/structure/flora/bush/flowers_br/style_random,
/obj/effect/light_emitter/interlink,
@@ -10694,15 +13671,14 @@
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
"rcq" = (
-/obj/structure/table/reinforced,
-/obj/item/restraints/handcuffs/fake,
-/obj/item/restraints/handcuffs/fake,
-/obj/item/restraints/handcuffs/fake,
-/obj/effect/turf_decal/tile/red/anticorner{
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/turf/open/floor/iron,
-/area/centcom/holding/cafe)
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"rfx" = (
/obj/structure/reagent_dispensers/fueltank/large,
/turf/open/misc/dirt/planet,
@@ -10731,14 +13707,64 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"riB" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 4
+ },
+/obj/structure/bed/double{
+ pixel_y = -9
+ },
+/obj/item/bedsheet/dorms_double{
+ pixel_y = -9
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"rjf" = (
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"rjg" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 4
+ },
+/obj/structure/statue/bone/rib{
+ dir = 1
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
+"rjk" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"rjD" = (
+/obj/structure/fake_stairs/wood/directional/east,
+/turf/closed/indestructible/wood,
+/area/centcom/holding/cafepark)
"rkm" = (
/obj/machinery/vending/tool,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"rkW" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"rma" = (
/obj/structure/railing/corner{
dir = 1
@@ -10781,12 +13807,54 @@
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"rnK" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 4
+ },
+/obj/structure/table,
+/obj/item/storage/medkit/brute{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/medkit/o2{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/obj/item/storage/medkit/fire{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/medkit/toxin{
+ pixel_x = -3
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"rnM" = (
+/obj/structure/wall_torch/spawns_lit/directional/south,
+/turf/open/misc/asteroid/snow/indestructible/planet,
+/area/centcom/holding/cafepark)
+"roh" = (
+/obj/structure/flora/grass/jungle/a/style_3,
+/obj/structure/flora/tree/jungle/small/style_random,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"rpG" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 4
},
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"rpX" = (
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"rrA" = (
/obj/item/kirbyplants/random,
/turf/open/floor/iron/dark/textured_large,
@@ -10795,12 +13863,33 @@
/obj/machinery/light/cold/directional/north,
/turf/open/floor/iron/smooth_large,
/area/cruiser_dock)
+"rvn" = (
+/obj/structure/flora/grass/jungle/b/style_4,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"rxB" = (
/obj/structure/closet/secure_closet/freezer/meat,
/turf/open/indestructible/hoteltile{
icon_state = "cafeteria"
},
/area/centcom/holding/cafe)
+"rzO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/catwalk_floor/iron_smooth,
+/area/centcom/holding/cafepark)
+"rzT" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet/directional/north,
+/obj/structure/chair/sofa/bench/right,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"rAe" = (
/obj/structure/chair/sofa/bench/left{
dir = 1;
@@ -10808,6 +13897,24 @@
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"rCf" = (
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/siding/blue,
+/obj/effect/turf_decal/siding/blue{
+ dir = 1
+ },
+/obj/machinery/door/airlock/medical/glass{
+ name = "Healthcare Center"
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"rCl" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"rDg" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -10840,6 +13947,25 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"rHD" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/mop_bucket/janitorialcart{
+ dir = 4
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"rHH" = (
+/obj/structure/railing/wooden_fencing,
+/obj/structure/water_source/puddle,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"rHY" = (
/obj/structure/closet/secure_closet/personal/cabinet,
/obj/item/condom_pack,
@@ -10894,6 +14020,32 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"rMZ" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/dirt{
+ dir = 4
+ },
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"rNs" = (
+/obj/structure/chair/office{
+ dir = 1
+ },
+/obj/machinery/button/door{
+ id = "CCGenOffice";
+ name = "Command Office Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = -29
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"rNI" = (
/obj/machinery/duct,
/obj/effect/turf_decal/trimline/blue/filled/warning{
@@ -10901,12 +14053,47 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"rNR" = (
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"rOf" = (
/obj/machinery/door/window/left/directional/east{
name = "Coffee Counter"
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"rOn" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"rOQ" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"rPh" = (
/obj/structure/window/reinforced/spawner/directional/north,
/obj/structure/window/reinforced/spawner/directional/west,
@@ -10985,6 +14172,17 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"rSu" = (
+/obj/machinery/door/airlock/medical{
+ id_tag = "CCPsych";
+ name = "Psychology Office"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/dark,
+/turf/open/floor/iron/dark,
+/area/centcom/holding/cafe)
"rSK" = (
/obj/effect/turf_decal/siding/dark,
/turf/open/floor/iron,
@@ -11037,12 +14235,21 @@
/obj/structure/flora/bush/flowers_br/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"rXY" = (
+/obj/effect/light_emitter/interlink,
+/turf/closed/indestructible/opshuttle,
+/area/centcom/holding/cafe)
"rYj" = (
-/obj/structure/mineral_door/paperframe{
- name = "Shinto Cabin Washroom"
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock/captain{
+ id_tag = "CCGenOffice";
+ name = "Cafe Manager Office"
},
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"rYy" = (
/obj/structure/sign/directions/evac{
pixel_y = -8
@@ -11078,15 +14285,62 @@
/obj/effect/turf_decal/siding/white/corner,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"saT" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/lamp,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"sci" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood,
/area/centcom/interlink)
+"sck" = (
+/obj/machinery/button/curtain{
+ id = "CCSalon";
+ pixel_x = 1;
+ pixel_y = 28
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
+"sen" = (
+/obj/structure/railing{
+ invisibility = 100
+ },
+/obj/effect/turf_decal/weather/dirt,
+/obj/structure/chair/wood,
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
+"sfd" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 5
+ },
+/obj/structure/chair/sofa/bench/corner,
+/obj/machinery/light/small/directional/east,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"sfN" = (
-/obj/structure/mirror/directional/east,
-/obj/structure/sink/directional/west,
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
"sga" = (
/obj/item/kirbyplants/random,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -11126,10 +14380,20 @@
/obj/effect/turf_decal/siding/white,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"ski" = (
+/obj/structure/flora/bush/large{
+ icon_state = "bush3"
+ },
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"skM" = (
-/obj/structure/sign/painting/parting,
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafedorms)
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/door/airlock{
+ name = "Gym"
+ },
+/turf/open/indestructible/dark,
+/area/centcom/holding/cafe)
"slz" = (
/obj/structure/chair/sofa/corp/left{
dir = 4
@@ -11144,10 +14408,42 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"smx" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 10
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = 15
+ },
+/obj/machinery/button/door{
+ id = "ghostcafecabinjap";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
+ },
+/obj/machinery/light/warm/directional/west,
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"smA" = (
/obj/structure/flora/tree/dead,
/turf/open/floor/grass/fairy,
/area/centcom/holding/cafepark)
+"smT" = (
+/obj/structure/railing{
+ dir = 10
+ },
+/turf/open/indestructible/cobble/corner{
+ dir = 8
+ },
+/area/centcom/holding/cafepark)
"sow" = (
/obj/machinery/cryopod{
dir = 4
@@ -11173,9 +14469,27 @@
/obj/structure/chair/sofa/bench/left,
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"srA" = (
+/obj/structure/chair/wood{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"srS" = (
/turf/open/floor/iron/stairs/old,
/area/centcom/holding/cafepark)
+"ssi" = (
+/obj/machinery/button/door{
+ id = "ghostcafecabin2";
+ name = "Dorm Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ specialfunctions = 4
+ },
+/obj/structure/bed/double,
+/obj/item/bedsheet/dorms_double,
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
"ssn" = (
/obj/machinery/status_display/shuttle{
pixel_y = 32;
@@ -11185,6 +14499,12 @@
/obj/effect/turf_decal/box,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"ssQ" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/curtain/bounty,
+/obj/structure/bed/maint,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"std" = (
/obj/machinery/door/airlock/service{
name = "Interlink Kitchen"
@@ -11203,14 +14523,11 @@
/turf/open/floor/iron/white,
/area/centcom/interlink)
"sto" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 9
- },
-/obj/machinery/washing_machine,
-/obj/machinery/light/warm/directional/west,
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/machinery/oven/stone,
+/obj/structure/stone_tile/slab,
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"suL" = (
/obj/effect/turf_decal/weather/dirt{
dir = 8
@@ -11239,6 +14556,23 @@
/obj/structure/flora/bush/large/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"sys" = (
+/obj/machinery/shower/directional/west,
+/obj/structure/sink/directional/south,
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
+"sAC" = (
+/obj/effect/turf_decal/box,
+/obj/effect/turf_decal/caution/stand_clear,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/wood/glass{
+ name = "Lounge"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"sBJ" = (
/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw,
/obj/effect/turf_decal/trimline/green/filled/arrow_cw{
@@ -11257,35 +14591,76 @@
/obj/machinery/light/warm/no_nightlight/directional/north,
/turf/open/floor/wood,
/area/centcom/interlink/dorm_rooms)
+"sCh" = (
+/obj/structure/showcase/fakeid{
+ name = "console"
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"sDJ" = (
/obj/structure/bookcase/random/nonfiction,
/turf/open/floor/wood,
/area/centcom/interlink)
+"sDY" = (
+/obj/structure/railing,
+/turf/open/indestructible/cobble/corner{
+ dir = 8
+ },
+/area/centcom/holding/cafepark)
+"sFB" = (
+/obj/machinery/vending/boozeomat/cafe,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"sFC" = (
+/obj/structure/fake_stairs/wood/directional/east,
+/turf/open/indestructible/cobble,
+/area/centcom/holding/cafepark)
"sFF" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
+/obj/machinery/door/airlock/multi_tile/public/glass,
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
dir = 1
},
-/obj/structure/table/reinforced/plastitaniumglass,
-/obj/item/clothing/head/costume/shrine_wig{
- pixel_y = 7
- },
-/obj/item/clothing/suit/costume/shrine_maiden,
-/obj/item/storage/basket{
- pixel_y = 11
+/turf/open/misc/beach/sand,
+/area/centcom/holding/cafepark)
+"sGb" = (
+/obj/machinery/door/airlock/medical{
+ name = "Surgery";
+ id_tag = "CCSurgery"
},
-/obj/item/gohei,
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
-"sGf" = (
/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
-"sGU" = (
-/obj/structure/flora/bush/fullgrass/style_random,
+"sGf" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/closet/crate/trashcart,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"sGw" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
+"sGU" = (
+/obj/structure/flora/bush/fullgrass/style_random,
/obj/structure/flora/bush/flowers_br/style_random,
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"sHR" = (
+/obj/structure/musician/piano,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"sIb" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -11308,6 +14683,27 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"sIZ" = (
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/blue/filled/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"sJa" = (
/obj/effect/turf_decal/siding/white{
dir = 5
@@ -11328,16 +14724,56 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"sKP" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"sMF" = (
-/obj/structure/sign/painting/library,
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafedorms)
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
+/obj/machinery/firealarm/directional/south,
+/obj/structure/closet/crate/bin,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"sNg" = (
/obj/structure/rack,
/obj/item/mop,
/obj/item/soap/homemade,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"sNh" = (
+/obj/structure/window/spawner/directional/south,
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/flora/grass/jungle/a/style_4,
+/obj/structure/flora/bush/flowers_pp,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafe)
+"sNs" = (
+/obj/structure/bed/double/pod,
+/obj/item/bedsheet/random/double{
+ dir = 2
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
+"sOj" = (
+/obj/structure/table/reinforced/rglass,
+/obj/item/kirbyplants/fern{
+ pixel_y = 14;
+ pixel_x = -5
+ },
+/obj/item/folder/white{
+ pixel_x = 4;
+ pixel_y = -3
+ },
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"sOk" = (
/obj/machinery/door/airlock/public/glass{
name = "Interlink Evac Library"
@@ -11345,6 +14781,18 @@
/obj/effect/turf_decal/trimline/green/filled/arrow_cw,
/turf/open/floor/iron,
/area/centcom/interlink)
+"sPA" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
+"sPH" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/directional/north,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"sQh" = (
/turf/open/floor/iron/smooth_corner,
/area/cruiser_dock)
@@ -11368,9 +14816,16 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"sSe" = (
-/obj/structure/sign/painting/library_secure,
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafedorms)
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"sSX" = (
/obj/machinery/door/airlock/medical{
name = "Interlink Operating Room"
@@ -11385,6 +14840,29 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"sUC" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/flora/grass/jungle/a/style_3,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"sUE" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"sWb" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/closet/secure_closet/freezer/empty{
@@ -11398,6 +14876,9 @@
/obj/item/reagent_containers/cup/glass/bottle/juice/cream,
/turf/open/floor/iron,
/area/centcom/interlink)
+"sXR" = (
+/turf/open/floor/stone,
+/area/centcom/holding/cafe)
"sYC" = (
/obj/structure/closet/secure_closet/freezer/empty{
name = "produce freezer"
@@ -11433,6 +14914,14 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
+"sYY" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/drugs,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"sZl" = (
/obj/effect/light_emitter/interlink,
/obj/structure/flora/tree/jungle/small,
@@ -11442,10 +14931,6 @@
/obj/structure/dresser{
pixel_y = 7
},
-/obj/item/flashlight/lamp/green{
- pixel_x = -3;
- pixel_y = 22
- },
/turf/open/floor/carpet/blue,
/area/centcom/holding/cafedorms)
"sZV" = (
@@ -11460,12 +14945,15 @@
},
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
-"tal" = (
-/obj/structure/flora/bush/lavendergrass{
- icon_state = "lavendergrass_4"
+"tbI" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 8
},
-/turf/open/floor/plating/cobblestone,
-/area/centcom/holding/cafepark)
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"tch" = (
/obj/machinery/chem_dispenser/fullupgrade,
/turf/open/floor/iron/dark/textured_large,
@@ -11475,6 +14963,24 @@
/obj/item/paper_bin,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"tct" = (
+/obj/structure/closet/crate/bin,
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"tdm" = (
/obj/structure/chair/sofa/bench/corner,
/obj/effect/turf_decal/siding/white/corner{
@@ -11504,9 +15010,16 @@
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
"tfI" = (
-/obj/item/paper_bin/bundlenatural,
-/turf/open/floor/sepia,
-/area/centcom/holding/cafedorms)
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"tgU" = (
+/obj/structure/chair/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"thr" = (
/obj/structure/table/wood,
/obj/effect/spawner/random/entertainment/deck{
@@ -11521,12 +15034,28 @@
},
/turf/open/floor/plating,
/area/centcom/interlink)
+"tik" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"tin" = (
/obj/effect/turf_decal/caution{
dir = 1
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"tjv" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"tky" = (
+/turf/open/indestructible/bathroom,
+/area/centcom/holding/cafe)
"tlu" = (
/obj/effect/turf_decal/siding/wood{
dir = 8
@@ -11563,6 +15092,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"tsx" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"ttx" = (
/obj/structure/table,
/obj/item/storage/fancy/candle_box{
@@ -11573,21 +15109,39 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
-"tuO" = (
-/obj/effect/turf_decal/tile/blue/half,
+"ttN" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
+ dir = 8
+ },
+/obj/structure/chair{
+ dir = 4
+ },
/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
-"tvh" = (
+"tur" = (
+/obj/structure/chair/stool/bar/directional/south,
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
+"tuO" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
},
/obj/effect/turf_decal/tile/blue{
- dir = 1
+ dir = 4
},
-/obj/effect/turf_decal/tile/blue,
-/obj/structure/closet/secure_closet/medical2/unlocked,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/south,
+/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"tvh" = (
+/obj/structure/fence{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/yellow/filled/warning,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"tvm" = (
/obj/machinery/door/airlock{
id_tag = "room8";
@@ -11614,6 +15168,26 @@
/obj/machinery/vending/cola,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"tzz" = (
+/obj/structure/toilet/snappop{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating/end{
+ dir = 4;
+ pixel_y = -6
+ },
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8;
+ pixel_y = -7
+ },
+/turf/open/floor/sepia,
+/area/centcom/holding/cafe)
+"tzR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"tBo" = (
/obj/structure/table,
/obj/machinery/microwave{
@@ -11640,6 +15214,18 @@
/obj/effect/turf_decal/caution,
/turf/open/floor/iron,
/area/centcom/interlink)
+"tDj" = (
+/obj/structure/rack/shelf{
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
+ icon_state = "empty_shelf_1"
+ },
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/obj/item/bedsheet/black{
+ pixel_x = 5;
+ pixel_y = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"tEg" = (
/obj/structure/fans/tiny/invisible,
/turf/open/water/beach,
@@ -11677,6 +15263,11 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"tIM" = (
+/obj/structure/flora/bush/jungle/b,
+/obj/structure/fans/tiny/invisible,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"tIN" = (
/obj/effect/light_emitter/interlink,
/obj/structure/flora/bush/flowers_yw/style_random,
@@ -11684,17 +15275,23 @@
/turf/open/floor/grass,
/area/centcom/interlink)
"tKt" = (
-/obj/structure/curtain,
-/obj/machinery/shower/directional/north,
-/obj/structure/window/reinforced/tinted/spawner/directional/east,
-/turf/open/floor/plating/abductor2,
-/area/centcom/holding/cafe)
+/turf/open/floor/plating/abductor,
+/area/centcom/holding/cafepark)
"tLu" = (
/obj/item/toy/plush/lizard_plushie/green{
name = "Soaks-The-Rays"
},
/turf/open/floor/carpet/orange,
/area/centcom/holding/cafepark)
+"tMb" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"tNw" = (
/obj/structure/railing/corner{
dir = 4
@@ -11737,6 +15334,14 @@
/obj/structure/fans/tiny/invisible,
/turf/open/floor/iron/showroomfloor,
/area/centcom/holding/cafe)
+"tVM" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/obj/item/flashlight/flare/candle/infinite,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"tWA" = (
/obj/machinery/light/directional/east,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -11767,6 +15372,13 @@
icon_state = "floor"
},
/area/centcom/holding/cafe)
+"tXp" = (
+/obj/structure/table/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"tYf" = (
/obj/machinery/vending/autodrobe/all_access,
/obj/effect/turf_decal/bot,
@@ -11788,6 +15400,12 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
+"tYP" = (
+/obj/structure/table/wood,
+/obj/item/toy/cards/deck,
+/obj/item/lighter,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"tZU" = (
/obj/effect/turf_decal/siding/white{
dir = 1
@@ -11875,6 +15493,27 @@
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"udI" = (
+/obj/structure/chair/stool/directional/south{
+ dir = 1
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"uew" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/belt/utility{
+ pixel_y = -2;
+ pixel_x = -3
+ },
+/obj/item/clothing/glasses/welding{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/circuit/green,
+/area/centcom/holding/cafe)
"ueC" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/condiment/enzyme{
@@ -11966,6 +15605,15 @@
},
/turf/open/misc/dirt/planet,
/area/centcom/interlink)
+"ujV" = (
+/obj/structure/sign/painting/large/library{
+ dir = 4
+ },
+/obj/structure/sign/painting/library{
+ pixel_y = -32
+ },
+/turf/open/floor/carpet/cyan,
+/area/centcom/holding/cafe)
"ujZ" = (
/obj/item/kirbyplants/organic/plant22,
/obj/effect/turf_decal/tile/green/opposingcorners,
@@ -11982,7 +15630,12 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"umm" = (
-/turf/closed/indestructible/alien,
+/obj/structure/chair/comfy/brown{
+ color = "#c45c57";
+ desc = "Remarkably soft, with plush cozy cushions, premium memory-foam and covered in stain-resistant fabric. Made by Kat-Kea???!";
+ name = "Premium Cozy Chair"
+ },
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"unt" = (
/obj/structure/flora/rock/pile/style_random,
@@ -11995,6 +15648,10 @@
/obj/effect/landmark/latejoin,
/turf/open/floor/iron,
/area/centcom/interlink)
+"uoM" = (
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/pool/cobble,
+/area/centcom/holding/cafepark)
"upo" = (
/obj/structure/chair/sofa/bench/left{
dir = 4
@@ -12012,6 +15669,13 @@
/obj/effect/turf_decal/tile/green/opposingcorners,
/turf/open/floor/iron,
/area/centcom/interlink)
+"use" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 4
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"usr" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -12020,11 +15684,20 @@
/obj/structure/flora/bush/fullgrass/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"uwP" = (
+/obj/structure/chair/wood,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"uxW" = (
/turf/open/misc/beach/coast{
dir = 4
},
/area/centcom/holding/cafepark)
+"uxZ" = (
+/turf/open/misc/dirt/planet{
+ desc = "Upon closer examination, it's still dirt."
+ },
+/area/centcom/holding/cafepark)
"uyr" = (
/obj/structure/chair/sofa/bench/right{
dir = 4
@@ -12046,6 +15719,10 @@
},
/turf/open/floor/iron/smooth,
/area/centcom/interlink)
+"uAN" = (
+/obj/structure/chair/stool/bamboo,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"uBw" = (
/obj/effect/decal/remains/xeno,
/obj/structure/alien/weeds,
@@ -12121,25 +15798,22 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"uIf" = (
-/obj/effect/turf_decal/siding/wood,
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = -12;
- pixel_y = -42
- },
-/obj/item/fancy_pillow{
- pixel_x = -22;
- pixel_y = -7
- },
-/obj/item/fancy_pillow{
- pixel_y = -1
- },
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/structure/closet,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"uIh" = (
/obj/structure/alien/weeds,
/obj/structure/bed/nest,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"uIo" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/weather/dirt{
+ dir = 8
+ },
+/obj/structure/marker_beacon/burgundy,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"uIp" = (
/obj/machinery/deepfryer,
/obj/machinery/light/cold/directional/east,
@@ -12152,6 +15826,12 @@
},
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"uJK" = (
+/obj/machinery/door/airlock/bathroom{
+ name = "Bathroom"
+ },
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"uKw" = (
/turf/open/floor/catwalk_floor/iron_smooth,
/area/cruiser_dock)
@@ -12165,6 +15845,12 @@
/obj/structure/chair/sofa/bench,
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"uMR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"uNg" = (
/obj/structure/bed/double{
dir = 8
@@ -12207,12 +15893,34 @@
},
/turf/open/floor/plating,
/area/centcom/interlink)
-"uWe" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "ghostcafesec"
+"uUf" = (
+/turf/open/floor/iron/dark/side{
+ dir = 8
},
-/turf/closed/indestructible/fakeglass,
/area/centcom/holding/cafe)
+"uVm" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/wall_torch/spawns_lit/directional/west,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"uWe" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/wall_torch/spawns_lit/directional/east,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"uWG" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
/obj/effect/turf_decal/siding/wood/corner{
@@ -12220,6 +15928,39 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"uXf" = (
+/obj/structure/mirror{
+ pixel_y = 32
+ },
+/obj/structure/toilet{
+ pixel_y = 14
+ },
+/obj/structure/window/reinforced/tinted/spawner/directional/east,
+/turf/open/floor/plating/abductor2,
+/area/centcom/holding/cafepark)
+"uXF" = (
+/obj/structure/chair/sofa/bench{
+ dir = 4
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"uXH" = (
+/obj/structure/table/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"uXK" = (
+/obj/structure/mineral_door/wood/large_gate{
+ dir = 8
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
"uYe" = (
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/dark/textured_large,
@@ -12296,15 +16037,19 @@
/obj/item/kirbyplants/organic/plant22,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"vdW" = (
+/obj/structure/flora/bush/jungle/b,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"veh" = (
/obj/structure/fence/door,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
"vgs" = (
/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green{
- pixel_y = 5
- },
/turf/open/floor/wood,
/area/centcom/interlink)
"vgx" = (
@@ -12315,21 +16060,63 @@
/obj/structure/closet/firecloset,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"vgQ" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"vhm" = (
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/trimline/blue/filled/corner,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"vkD" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e";
+ dir = 1
+ },
+/obj/machinery/button/curtain{
+ id = "ghostcafecabinjapcurtain";
+ pixel_x = 20;
+ pixel_y = -4
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"vpT" = (
/obj/structure/table/reinforced,
/obj/machinery/chem_dispenser/drinks/beer,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"vqx" = (
-/obj/structure/mirror{
- pixel_y = 32
- },
-/obj/structure/toilet{
- pixel_y = 14
- },
-/obj/structure/window/reinforced/tinted/spawner/directional/east,
-/turf/open/floor/plating/abductor2,
-/area/centcom/holding/cafe)
+/obj/structure/flora/bush/sparsegrass,
+/obj/structure/flora/bush/reed,
+/turf/open/misc/beach/sand,
+/area/centcom/holding/cafepark)
"vqy" = (
/obj/effect/light_emitter/interlink,
/obj/effect/turf_decal/weather/dirt{
@@ -12361,11 +16148,7 @@
/obj/structure/mirror{
pixel_y = 32
},
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"vui" = (
/obj/effect/turf_decal/siding/wood{
@@ -12429,6 +16212,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"vxC" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"vxF" = (
/obj/machinery/vending/games,
/turf/open/floor/carpet/cyan,
@@ -12438,6 +16228,22 @@
dir = 4
},
/area/cruiser_dock)
+"vyS" = (
+/obj/structure/flora/bush/leafy,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
+"vzb" = (
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 10
+ },
+/obj/effect/turf_decal/sand,
+/obj/structure/fence{
+ dir = 4
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"vzH" = (
/obj/structure/sign/poster/random/directional/north,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -12445,6 +16251,18 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"vDr" = (
+/obj/structure/table,
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/directional/south,
+/obj/item/surgical_drapes,
+/obj/item/surgicaldrill/alien,
+/obj/item/cautery/alien,
+/obj/item/bonesetter,
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
"vEs" = (
/obj/structure/fans/tiny/invisible,
/obj/structure/spacevine{
@@ -12463,6 +16281,12 @@
/obj/machinery/light/warm/directional/south,
/turf/open/floor/wood,
/area/centcom/interlink)
+"vFM" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"vFW" = (
/obj/structure/table/wood,
/obj/machinery/recharger,
@@ -12477,6 +16301,11 @@
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"vIX" = (
+/obj/structure/table,
+/obj/item/soap,
+/turf/open/floor/iron/freezer,
+/area/centcom/holding/cafe)
"vLh" = (
/obj/effect/turf_decal/trimline/green/filled/arrow_cw{
dir = 8
@@ -12505,6 +16334,33 @@
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"vNe" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/railing/wooden_fencing{
+ dir = 4
+ },
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
+"vNs" = (
+/obj/effect/turf_decal/tile/yellow/half{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/yellow/half{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral/half{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral/half{
+ dir = 8
+ },
+/obj/structure/mineral_door/paperframe{
+ name = "Shinto Cabin Bedroom"
+ },
+/turf/open/floor/iron/textured_half{
+ dir = 1
+ },
+/area/centcom/holding/cafe)
"vPe" = (
/obj/structure/chair/stool/bar/directional/east,
/turf/open/floor/iron/cafeteria,
@@ -12530,15 +16386,26 @@
},
/turf/open/floor/wood,
/area/centcom/interlink)
+"vTT" = (
+/turf/closed/indestructible/steel,
+/area/centcom/holding/cafe)
"vUu" = (
-/obj/machinery/door/window/left/directional/west{
- dir = 4
- },
-/obj/structure/sink/directional/east,
-/turf/open/floor/plating/abductor2,
+/obj/structure/chair/sofa/left/brown,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
"vUv" = (
-/obj/effect/turf_decal/tile/red/half,
+/obj/structure/chair/sofa/bench/left{
+ dir = 1
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
+"vUI" = (
+/obj/effect/turf_decal/tile/purple/anticorner/contrasted{
+ dir = 8
+ },
+/obj/machinery/computer/operating{
+ dir = 1
+ },
/turf/open/floor/iron,
/area/centcom/holding/cafe)
"vUJ" = (
@@ -12555,6 +16422,10 @@
},
/turf/open/floor/iron,
/area/centcom/interlink)
+"vXr" = (
+/obj/structure/flora/grass/jungle/b,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"vYz" = (
/obj/machinery/button/curtain{
id = "ghostcaferesort1curtain";
@@ -12562,14 +16433,52 @@
},
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
+"vYC" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"vYI" = (
+/obj/effect/turf_decal/siding{
+ color = "#2e2e2e"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = -19;
+ pixel_y = -10
+ },
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = -16
+ },
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
"vYR" = (
/obj/structure/flora/coconuts,
/turf/open/misc/beach/sand,
/area/centcom/holding/cafepark)
+"vYV" = (
+/obj/machinery/light/directional/east,
+/obj/structure/table/reinforced/rglass,
+/obj/structure/towel_bin,
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
+"vZb" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 4
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafepark)
"vZv" = (
-/obj/structure/sign/painting/library_private,
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafedorms)
+/obj/structure/window/reinforced/spawner/directional/south,
+/turf/open/floor/iron/dark/side{
+ dir = 1
+ },
+/area/centcom/holding/cafe)
"wag" = (
/obj/effect/turf_decal/trimline/green/line{
dir = 4
@@ -12577,21 +16486,13 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"wcd" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 5
- },
-/obj/structure/table/wood/fancy/orange{
- pixel_y = -3
- },
-/obj/item/flashlight/flare/candle/infinite{
- pixel_x = -7;
- pixel_y = -2
+/obj/structure/flora/bush/flowers_pp,
+/obj/structure/flora/bush/flowers_br,
+/obj/structure/flora/bush/lavendergrass,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
},
-/obj/item/flashlight/flare/candle/infinite,
-/obj/machinery/light/warm/directional/east,
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/area/centcom/holding/cafepark)
"wcf" = (
/obj/structure/closet/secure_closet/freezer/kitchen/all_access,
/obj/item/reagent_containers/condiment/mayonnaise,
@@ -12636,20 +16537,10 @@
/turf/open/floor/iron,
/area/centcom/interlink)
"weP" = (
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/structure/table/glass,
-/obj/item/storage/box/gloves{
- pixel_x = 3;
- pixel_y = 3
+/obj/structure/mineral_door/paperframe{
+ name = "Shinto Cabin Washroom"
},
-/obj/item/storage/box/masks,
-/obj/machinery/light/directional/west,
-/turf/open/floor/iron/white,
+/turf/open/floor/sepia,
/area/centcom/holding/cafe)
"wfh" = (
/obj/effect/landmark/latejoin,
@@ -12662,9 +16553,8 @@
/turf/open/floor/wood/tile,
/area/centcom/interlink)
"wfN" = (
-/turf/open/misc/ashplanet{
- initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
- },
+/obj/effect/light_emitter/interlink,
+/turf/open/indestructible/plating,
/area/centcom/holding/cafe)
"wgp" = (
/obj/machinery/door/poddoor/shutters/indestructible,
@@ -12683,14 +16573,43 @@
/obj/structure/flora/rock/style_random,
/turf/open/misc/dirt/planet,
/area/centcom/interlink)
+"wjI" = (
+/obj/structure/flora/grass/jungle/a/style_2,
+/obj/machinery/light/directional/north,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"wkG" = (
/obj/structure/chair/stool/bar/directional/south,
/turf/open/floor/wood/parquet,
/area/centcom/interlink)
+"wkQ" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 1
+ },
+/obj/structure/chair/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"wlA" = (
/obj/structure/window/reinforced/tinted/spawner/directional/south,
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
+"wlL" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block,
+/obj/item/flashlight/flare/candle/infinite,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
+"wmA" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"wmW" = (
/obj/effect/turf_decal/trimline/dark_red/filled/arrow_cw{
dir = 8
@@ -12701,6 +16620,11 @@
/obj/structure/reagent_water_basin,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"wns" = (
+/obj/structure/fans/tiny/invisible,
+/obj/structure/flora/grass/jungle/b,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"wod" = (
/obj/structure/sign/poster/random/directional/north,
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
@@ -12711,6 +16635,10 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"wqC" = (
+/obj/structure/lavaland/ash_walker_fake,
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
"wqG" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 8
@@ -12748,6 +16676,18 @@
},
/turf/open/floor/carpet/executive,
/area/centcom/interlink)
+"wtw" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/bed/maint{
+ pixel_y = 13
+ },
+/obj/structure/bed/maint,
+/obj/item/bedsheet/black/double{
+ dir = 1
+ },
+/obj/structure/curtain/bounty,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"wtI" = (
/obj/effect/turf_decal/siding/wood,
/turf/open/floor/wood/tile,
@@ -12758,6 +16698,11 @@
/obj/effect/turf_decal/delivery/blue,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"wvy" = (
+/obj/structure/closet/firecloset,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"wwD" = (
/obj/effect/turf_decal/weather/dirt{
dir = 4
@@ -12822,13 +16767,13 @@
/obj/effect/turf_decal/trimline/green/filled/arrow_ccw,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"wBV" = (
+/obj/structure/railing,
+/turf/open/indestructible/cobble/side,
+/area/centcom/holding/cafepark)
"wBX" = (
/obj/structure/sink/directional/south,
-/turf/open/indestructible/hoteltile{
- icon = 'modular_skyrat/modules/ghostcafe/icons/floors.dmi';
- icon_state = "titanium_blue_old";
- name = "bathroom floor"
- },
+/turf/open/indestructible/bathroom,
/area/centcom/holding/cafedorms)
"wCl" = (
/obj/item/kirbyplants/random,
@@ -12836,12 +16781,10 @@
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
"wCC" = (
-/obj/effect/turf_decal/siding{
- color = "#2e2e2e";
- dir = 4
- },
-/turf/open/floor/bamboo,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/bush/large/style_random,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"wCN" = (
/obj/machinery/computer/records/security,
/obj/effect/turf_decal/tile/green/opposingcorners,
@@ -12852,6 +16795,13 @@
/obj/structure/chair/stool/bar/directional/north,
/turf/open/indestructible/hotelwood,
/area/centcom/holding/cafe)
+"wFe" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/chair/stool/bamboo{
+ dir = 8
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"wFF" = (
/obj/machinery/light/directional/west,
/obj/structure/closet/crate/bin,
@@ -12908,6 +16858,13 @@
},
/turf/open/floor/iron/cafeteria,
/area/centcom/interlink)
+"wIO" = (
+/obj/effect/turf_decal/sand,
+/obj/effect/turf_decal/trimline/yellow/filled/warning{
+ dir = 8
+ },
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
"wJj" = (
/obj/effect/turf_decal/caution/stand_clear,
/turf/open/floor/iron/dark,
@@ -12920,6 +16877,45 @@
dir = 4
},
/area/cruiser_dock)
+"wKb" = (
+/obj/structure/table/glass,
+/obj/item/storage/box/disks{
+ pixel_x = -8;
+ pixel_y = 10
+ },
+/obj/item/storage/box/syringes{
+ pixel_x = 7;
+ pixel_y = 10
+ },
+/obj/item/storage/box/beakers{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/reagent_containers/spray/cleaner{
+ pixel_x = -11
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "darkfull"
+ },
+/area/centcom/holding/cafepark)
+"wKT" = (
+/obj/structure/bed/pod{
+ pixel_y = 1
+ },
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
+"wLx" = (
+/obj/effect/turf_decal/tile/purple/half/contrasted,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"wLN" = (
+/obj/structure/railing{
+ invisibility = 100;
+ dir = 4
+ },
+/obj/effect/spawner/liquids_spawner,
+/turf/open/floor/iron/pool,
+/area/centcom/holding/cafepark)
"wME" = (
/obj/structure/table,
/obj/item/paper/pamphlet/centcom/visitor_info{
@@ -12929,6 +16925,13 @@
/obj/item/paper/pamphlet/centcom/visitor_info,
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"wOi" = (
+/obj/structure/weightmachine/weightlifter,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"wOQ" = (
/obj/effect/turf_decal/siding/white/corner{
dir = 1
@@ -12947,17 +16950,49 @@
/obj/machinery/light/cold/directional/east,
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"wUt" = (
+/obj/structure/table/wood,
+/obj/structure/towel_bin,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"wUS" = (
/obj/effect/turf_decal/tile/blue{
- dir = 1
+ dir = 4
},
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/structure/bed/medical/emergency,
-/obj/machinery/iv_drip,
-/turf/open/floor/iron/white,
-/area/centcom/holding/cafe)
+/turf/open/indestructible/hoteltile{
+ icon_state = "white"
+ },
+/area/centcom/holding/cafepark)
+"wVd" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/structure/chair/sofa/bench/right{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"wWm" = (
+/obj/structure/chair/stool/bar/directional/south,
+/turf/open/indestructible/cobble/corner{
+ dir = 4
+ },
+/area/centcom/holding/cafepark)
"wXe" = (
/obj/structure/bookcase/random/adult,
/obj/effect/turf_decal/siding/wood{
@@ -12976,12 +17011,26 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink/dorm_rooms)
+"wYD" = (
+/obj/effect/turf_decal/tile/red/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
"wYH" = (
/obj/structure/railing/corner{
dir = 1
},
/turf/open/floor/iron/dark,
/area/centcom/interlink)
+"wZa" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/structure/table/reinforced,
+/obj/item/surgery_tray/full/deployed,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"wZh" = (
/obj/machinery/door/airlock/sandstone{
id_tag = "ghostcaferesortbathroom2";
@@ -12990,6 +17039,10 @@
/obj/structure/fans/tiny/invisible,
/turf/open/floor/wood,
/area/centcom/holding/cafe)
+"wZw" = (
+/obj/structure/chair/sofa/bench/corner,
+/turf/open/floor/wood/large,
+/area/centcom/holding/cafe)
"wZS" = (
/obj/item/storage/cans/sixbeer,
/turf/open/floor/carpet/orange,
@@ -13010,6 +17063,13 @@
},
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"xbn" = (
+/obj/structure/flora/grass/jungle,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"xct" = (
/obj/effect/turf_decal/tile/dark_blue/opposingcorners,
/obj/effect/turf_decal/siding/dark{
@@ -13029,12 +17089,33 @@
/obj/effect/turf_decal/delivery/blue,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"xec" = (
+/obj/structure/table/wood,
+/obj/item/flashlight/flare/candle/infinite{
+ pixel_x = 4;
+ pixel_y = 10
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafepark)
+"xfD" = (
+/obj/structure/punching_bag,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"xfT" = (
/obj/effect/turf_decal/siding/thinplating_new/dark{
dir = 1
},
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"xga" = (
+/obj/structure/table/wood,
+/obj/item/flashlight{
+ desc = "A hand-held not-so-emergency light that's very very bright!";
+ light_power = 10;
+ name = "Super Light"
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
"xgz" = (
/obj/effect/turf_decal/siding/wood{
dir = 1
@@ -13042,12 +17123,76 @@
/obj/machinery/duct,
/turf/open/floor/wood/tile,
/area/centcom/interlink)
+"xkO" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/flora/bush/jungle/b,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafe)
+"xlP" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/lava/fake,
+/area/centcom/holding/cafepark)
+"xlS" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"xmn" = (
/obj/structure/flora/bush/flowers_pp/style_random,
/obj/structure/flora/bush/flowers_yw/style_random,
/obj/effect/light_emitter/interlink,
/turf/open/floor/grass,
/area/centcom/interlink)
+"xnl" = (
+/obj/effect/turf_decal/sand,
+/obj/structure/marker_beacon/burgundy,
+/turf/open/indestructible/plating,
+/area/centcom/holding/cafepark)
+"xnI" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/backpack/duffelbag/science/robo/surgery{
+ pixel_y = 7
+ },
+/obj/machinery/light/directional/south,
+/obj/effect/turf_decal/tile/purple/half/contrasted,
+/obj/structure/window/spawner/directional/east,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"xoB" = (
+/obj/structure/table/wood,
+/obj/structure/window/spawner/directional/west,
+/obj/structure/window/spawner/directional/south,
+/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{
+ pixel_x = -5;
+ pixel_y = 16
+ },
+/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar{
+ pixel_x = 5;
+ pixel_y = 16
+ },
+/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel{
+ pixel_x = 15;
+ pixel_y = 16
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"xpl" = (
/obj/structure/chair/sofa/bench/right{
dir = 8
@@ -13091,6 +17236,10 @@
},
/turf/open/floor/carpet/red,
/area/cruiser_dock)
+"xsf" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/fakebasalt,
+/area/centcom/holding/cafepark)
"xsg" = (
/obj/effect/turf_decal/trimline/blue/filled/arrow_cw{
dir = 8
@@ -13099,17 +17248,36 @@
/turf/open/floor/iron/dark,
/area/centcom/interlink)
"xsM" = (
-/obj/structure/flora/bush/lavendergrass{
- icon_state = "lavendergrass_2"
- },
-/turf/open/floor/plating/cobblestone,
-/area/centcom/holding/cafepark)
+/obj/structure/window/spawner/directional/south,
+/obj/structure/reagent_dispensers/water_cooler,
+/obj/machinery/light/directional/west,
+/turf/open/floor/carpet/black,
+/area/centcom/holding/cafe)
"xtQ" = (
/obj/effect/turf_decal/weather/dirt,
/obj/effect/light_emitter/interlink,
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/centcom/interlink)
+"xuk" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/structure/chair/sofa/bench{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"xuY" = (
/turf/closed/indestructible/syndicate,
/area/cruiser_dock)
@@ -13128,9 +17296,10 @@
/turf/open/floor/wood,
/area/centcom/holding/cafedorms)
"xyn" = (
-/obj/structure/sign/departments/medbay/alt,
-/turf/closed/indestructible/wood,
-/area/centcom/holding/cafe)
+/obj/structure/flora/grass/jungle/a/style_4,
+/obj/machinery/light/directional/north,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"xyz" = (
/obj/structure/closet/crate/bin,
/obj/effect/turf_decal/delivery,
@@ -13154,9 +17323,55 @@
/obj/structure/alien/egg/burst,
/turf/open/misc/dirt/planet,
/area/centcom/holding/cafepark)
+"xCO" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
+"xDp" = (
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/turf/open/indestructible/hoteltile{
+ icon_state = "floor"
+ },
+/area/centcom/holding/cafepark)
"xDE" = (
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
+"xDR" = (
+/obj/effect/turf_decal/tile/blue/anticorner/contrasted,
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/medical,
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"xEn" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/left/directional/north{
@@ -13169,6 +17384,12 @@
"xFA" = (
/turf/open/floor/iron/stairs/right,
/area/cruiser_dock)
+"xFE" = (
+/obj/structure/chair/sofa/bench/right{
+ dir = 1
+ },
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"xFU" = (
/obj/effect/turf_decal/sand,
/turf/open/misc/beach/sand,
@@ -13177,6 +17398,21 @@
/obj/structure/flora/bush/sunny,
/turf/open/misc/grass/planet,
/area/centcom/holding/cafepark)
+"xGO" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/flora/grass/jungle,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafe)
+"xHs" = (
+/obj/machinery/light/small/directional/west,
+/turf/open/floor/bamboo,
+/area/centcom/holding/cafe)
+"xIx" = (
+/obj/structure/chair/office,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"xIR" = (
/obj/effect/turf_decal/siding/wood,
/obj/machinery/door/airlock/multi_tile/public/glass{
@@ -13265,6 +17501,18 @@
},
/turf/open/floor/plating,
/area/centcom/interlink)
+"xQK" = (
+/obj/structure/bed/double,
+/obj/item/bedsheet/dorms_double,
+/obj/structure/sign/painting/library_secure{
+ pixel_y = -32
+ },
+/turf/open/indestructible/carpet,
+/area/centcom/holding/cafe)
+"xRx" = (
+/obj/item/stack/sheet/mineral/wood/fifty,
+/turf/open/floor/stone,
+/area/centcom/holding/cafe)
"xSr" = (
/obj/effect/turf_decal/tile/red/opposingcorners,
/turf/open/floor/iron/dark,
@@ -13300,6 +17548,16 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
+"xTZ" = (
+/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/centcom/holding/cafe)
"xVv" = (
/obj/machinery/button/door/directional/west{
id = "interlink_hall2";
@@ -13352,6 +17610,12 @@
/obj/structure/marker_beacon/teal,
/turf/open/misc/asteroid,
/area/cruiser_dock)
+"xXU" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding/cafe)
"xYp" = (
/obj/machinery/door/airlock/multi_tile/public/glass{
name = "Interlink Cafe"
@@ -13374,12 +17638,9 @@
/turf/open/floor/iron/dark/textured_large,
/area/cruiser_dock)
"ybu" = (
-/obj/machinery/button/curtain{
- id = "ghostcafecabin3curtain";
- pixel_y = -25
- },
-/turf/open/indestructible/hotelwood,
-/area/centcom/holding/cafedorms)
+/obj/structure/flora/rock/pile/jungle/style_3,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ybB" = (
/obj/item/kirbyplants/random,
/obj/effect/turf_decal/trimline/dark_green/filled/line{
@@ -13391,6 +17652,15 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/smooth,
/area/centcom/interlink)
+"ybQ" = (
+/obj/machinery/light/small/directional/north,
+/turf/open/floor/sepia,
+/area/centcom/holding/cafe)
+"ybS" = (
+/obj/structure/flora/grass/jungle/a/style_2,
+/obj/structure/flora/bush/flowers_pp,
+/turf/open/misc/grass/planet,
+/area/centcom/holding/cafepark)
"ybX" = (
/obj/effect/turf_decal/weather/dirt,
/obj/effect/turf_decal/weather/dirt{
@@ -13403,29 +17673,30 @@
/turf/open/floor/grass,
/area/centcom/interlink)
"ycB" = (
-/obj/effect/turf_decal/siding/wood/corner{
+/obj/effect/turf_decal/tile/red/anticorner/contrasted{
dir = 4
},
-/obj/effect/turf_decal/siding/wood/corner,
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 1
- },
-/obj/effect/turf_decal/siding/wood/corner{
- dir = 8
+/obj/structure/bed,
+/obj/item/bedsheet/dorms,
+/turf/open/floor/iron,
+/area/centcom/holding/cafe)
+"ycD" = (
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 4
},
-/obj/structure/beebox{
- name = "Shrine"
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
},
-/turf/open/floor/wood,
-/area/centcom/holding/cafedorms)
-"ycD" = (
-/obj/effect/turf_decal/tile/blue/full,
-/obj/machinery/door/airlock/wood{
- glass = 1;
- name = "Surgery"
+/obj/structure/table/reinforced,
+/obj/item/clothing/suit/jacket/straight_jacket,
+/obj/machinery/button/door{
+ id = "CCSurgery";
+ name = "Bolt Control";
+ normaldoorcontrol = 1;
+ specialfunctions = 4;
+ pixel_y = 0;
+ pixel_x = 25
},
-/obj/effect/turf_decal/caution/stand_clear,
-/obj/structure/fans/tiny/invisible,
/turf/open/floor/iron/white,
/area/centcom/holding/cafe)
"ycL" = (
@@ -13434,6 +17705,13 @@
/obj/effect/turf_decal/bot_blue,
/turf/open/floor/iron/white,
/area/centcom/interlink)
+"yde" = (
+/obj/structure/flora/bush/jungle/a,
+/obj/effect/light_emitter/interlink,
+/turf/open/misc/grass/planet{
+ smoothing_flags = 0
+ },
+/area/centcom/holding/cafepark)
"ydt" = (
/obj/effect/landmark/latejoin,
/obj/effect/turf_decal/trimline/blue/filled/corner{
@@ -13483,6 +17761,23 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/iron/freezer,
/area/centcom/interlink)
+"yjC" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/structure/rack/wooden,
+/obj/item/storage/box/matches{
+ pixel_y = -8;
+ pixel_x = -3
+ },
+/obj/item/towel{
+ pixel_y = 9;
+ pixel_x = 6
+ },
+/obj/item/towel{
+ pixel_y = 9;
+ pixel_x = 1
+ },
+/turf/open/misc/dirt/planet,
+/area/centcom/holding/cafepark)
"yjX" = (
/obj/structure/closet,
/obj/item/clothing/under/rank/centcom/officer/replica{
@@ -49335,18 +53630,6 @@ ofJ
aWi
aWi
ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
aaa
aaa
aaa
@@ -49362,6 +53645,18 @@ aaa
aaa
aaa
aaa
+ajj
+ajj
+ajj
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -49592,18 +53887,6 @@ aWi
aVv
twL
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-ajj
aaa
aaa
aaa
@@ -49617,6 +53900,18 @@ aaa
aaa
aaa
aaa
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -49849,18 +54144,6 @@ aVv
axY
aWg
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-ajj
aaa
aaa
aaa
@@ -49873,6 +54156,18 @@ aaa
aaa
aaa
aaa
+ajj
+ajj
+iGS
+iGS
+iGS
+iGS
+iGS
+ajj
+ajj
+ajj
+ajj
+aaa
aaa
aaa
aaa
@@ -50074,11 +54369,11 @@ ajj
ajj
ajj
ajj
-aqf
-aqf
-aqf
-aqf
-aqf
+ajj
+aFP
+aFP
+aFP
+aFP
axw
auf
aAz
@@ -50106,20 +54401,6 @@ gjj
axa
aUm
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
aaa
aaa
aaa
@@ -50131,6 +54412,20 @@ aaa
aaa
aaa
aaa
+ajj
+ajj
+ajj
+iGS
+mDS
+aAr
+oOS
+iGS
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
aaa
aaa
aaa
@@ -50331,15 +54626,15 @@ aFP
aFP
asF
aMJ
-aqf
-aqX
-aUw
-ahC
-aqf
+kPK
aFP
-aLH
aFP
aFP
+aFP
+aFP
+aLH
+aFP
+aMJ
aBr
aFP
aFP
@@ -50360,34 +54655,34 @@ uxW
ofJ
aWi
gjj
-axa
+cLv
aUm
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+aEQ
+aNK
+iGS
+sCh
+hPq
+rcq
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+ajj
aaa
aaa
aaa
@@ -50588,11 +54883,11 @@ avb
aLH
aFP
aFP
-aqf
-aHl
-aRC
-aUA
-aqf
+kPK
+aFP
+aFP
+aFP
+aFP
aVA
aFP
aCM
@@ -50606,7 +54901,7 @@ aFP
aFP
aLH
aFP
-aFP
+hBy
aFP
aFP
aFP
@@ -50617,9 +54912,13 @@ bFi
aWi
aVv
aRS
-axa
+cLv
aRe
ajj
+ajj
+ajj
+ajj
+ajj
aPf
aPf
aPf
@@ -50627,10 +54926,20 @@ aPf
aPf
aPf
aPf
-aPf
-aPf
-aPf
-aPf
+ajj
+aRH
+iqY
+aUA
+aOW
+sfN
+rcq
+iGS
+mQa
+rCl
+vxC
+sKP
+iGS
+ajj
ajj
aaa
aaa
@@ -50768,20 +55077,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
"}
(146,1,1) = {"
aaa
@@ -50837,7 +55132,7 @@ aWo
ajj
ajj
aCM
-aFP
+auf
ahU
aFP
aIV
@@ -50845,22 +55140,22 @@ ahA
aFP
ahQ
aFP
-aqf
-aAq
-aRC
-nxR
-aqf
-aFB
-akp
+kPK
aFP
+auf
aFP
aFP
aFB
+akp
+azk
+aFP
+kWr
+aFB
aFP
aFP
aVA
aIV
-axw
+aNB
aFP
aKu
aFP
@@ -50889,20 +55184,20 @@ atp
aPf
aPf
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+agb
+aEf
+aDQ
+aOW
+hpX
+aTD
+aTV
+tfI
+tfI
+tfI
+bTg
+iGS
+ajj
+ajj
aaa
aaa
aaa
@@ -51102,21 +55397,21 @@ aAz
ahs
aFP
aAc
-aqf
-amx
-aRC
-aUA
-aqf
+kPK
+aFP
aFP
-agy
aFP
aFP
aFP
-aeT
-asX
-avb
agy
-ahU
+aMJ
+aFP
+aFP
+aFP
+aFP
+aFP
+aFP
+aFP
aFP
aBr
aCM
@@ -51146,20 +55441,20 @@ atp
aPf
aPf
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+smA
+afB
+iGS
+wKb
+fTv
+ltu
+iGS
+bbW
+tfI
+oGv
+hyt
+iGS
+ajj
+ajj
aaa
aaa
aaa
@@ -51356,25 +55651,25 @@ axw
aFP
aFB
aFP
-aFP
+auf
ahQ
aFP
-aqf
-aqf
-aVp
-aqf
-aqf
+kPK
+aFP
+aFP
+aFP
+aFP
ahU
aFP
ayd
aBp
+kWr
aFP
+rMZ
aFP
-aAz
-aFP
-ahQ
+kWr
+kWr
aFP
-alf
arT
ayd
agy
@@ -51403,20 +55698,20 @@ atp
aPf
aPf
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ajj
+ajj
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+aTV
+iGS
+iGS
+iGS
+ajj
+ajj
aaa
aaa
aaa
@@ -51605,20 +55900,20 @@ ajj
ayI
azs
ajj
+ajj
aqf
aqf
-aTb
aqf
-aTb
aqf
aqf
+aFP
aLH
aFP
aFP
ayd
-aLH
+kPK
aKu
-azY
+aFP
aFP
agy
asX
@@ -51626,9 +55921,9 @@ aLH
aFP
aFP
aFP
-aAc
-aFP
-aLH
+hWY
+hfJ
+goK
aFP
aFP
aFP
@@ -51640,14 +55935,14 @@ alF
asX
aFP
aFP
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-aPf
+aFP
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
aPf
atp
atp
@@ -51659,6 +55954,20 @@ atp
atp
aPf
aPf
+ayI
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+iGS
+aHj
+aOW
+fvx
+njQ
+iGS
+iGS
ajj
aaa
aaa
@@ -51796,6 +56105,29 @@ aaa
aaa
aaa
aaa
+"}
+(150,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -51810,122 +56142,6 @@ aaa
aaa
aaa
aaa
-"}
-(150,1,1) = {"
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-ajj
-ayI
-ajj
-ajj
-aqf
-aAE
-azr
-aWT
-aUo
-aBk
-aqf
-aBr
-aFP
-arT
-aFP
-aBr
-azY
-azY
-ahs
-aeT
-aAc
-aFP
-ahs
-aFP
-aFP
-azk
-alF
-aFP
-aFP
-aFP
-aFP
-aMJ
-aFP
-aFP
-aLH
-aAc
-aFP
-aFP
-ahA
-axA
-avl
-aBT
-aUu
-axA
-aNd
-axA
-aPf
-aPf
-atp
-bGx
-qJm
-ckY
-ckY
-qJm
-atp
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -51937,6 +56153,85 @@ aaa
aaa
aaa
aaa
+ajj
+ayI
+ajj
+ajj
+ajj
+aqf
+nGL
+tzz
+orB
+aqf
+aFP
+aBr
+aFP
+arT
+aFP
+aCQ
+aFP
+aFP
+ahs
+aeT
+aAc
+aFP
+kuV
+aFP
+uwP
+aFP
+aPC
+aFP
+aFP
+aFP
+aFP
+aMJ
+aFP
+aFP
+aLH
+aAc
+aFP
+auf
+ayI
+ayI
+aqf
+aBT
+aUu
+aBv
+aqf
+aRx
+aqf
+aPf
+atp
+bGx
+qJm
+ckY
+ckY
+qJm
+atp
+aPf
+aPf
+ayI
+ayI
+ayI
+tUL
+ayI
+ayI
+ayI
+ayI
+iGS
+sPH
+bll
+hPH
+vYC
+iFq
+iGS
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -52119,20 +56414,20 @@ ajj
aCf
ayI
ajj
+ajj
aqf
-aZF
-aHK
-aWT
-aUo
-aqO
+ybQ
+ihd
+ihd
aqf
+aFP
axw
aFP
aFP
ahU
+kPK
+aIV
aFP
-tal
-azY
aFP
aFP
agy
@@ -52140,9 +56435,9 @@ aFB
aFP
aBr
aFP
-aFP
-aeT
-akp
+kWr
+lZn
+lZn
aFP
aFP
aFP
@@ -52152,16 +56447,16 @@ ahs
aMW
aFP
aFP
-aGg
aFP
-aNg
-aIN
-aIN
-aIN
-aOY
+ayI
+ayI
+dWE
+amF
+amF
+amF
axD
-axA
-aPf
+tky
+aqf
aPf
atp
atp
@@ -52171,8 +56466,22 @@ qJm
jFn
atp
aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+aTV
+aOW
+cQH
+kJz
+pwV
+vDr
+iGS
ajj
aaa
aaa
@@ -52310,20 +56619,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
"}
(152,1,1) = {"
aaa
@@ -52376,49 +56671,49 @@ ajj
ayI
ayI
ajj
-sQj
-ail
-aUo
-aUo
-aUo
-aUo
-aUK
-azY
-azY
-azY
+ajj
+aqf
+iBq
+ihd
+lLN
+aqf
+aFP
+aFP
+aFP
+aFP
+aFP
+kPK
+aFP
aFP
-axw
-azY
-azY
aFP
azk
-ahQ
+aRP
aNk
arT
aLH
aFP
-aFB
aFP
-axw
-aKu
-aQw
aFP
aFP
+aFP
+aQw
+kWr
+aFP
alf
aFP
aVA
aFP
agy
aFP
-aKu
-axA
-apT
-aIN
+ayI
+ayI
+aqf
+paJ
amF
-axA
-aVC
-axA
-aPf
+cGX
+aqf
+qWc
+aqf
aPf
atp
atp
@@ -52428,24 +56723,24 @@ cfs
atp
aPf
aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+tUL
+iGS
+oyf
+aTV
+iGS
+fdX
+iGS
+iGS
+ajj
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -52634,18 +56929,18 @@ azs
ayI
ajj
aqf
-aOZ
-aUo
-aSy
-aUo
-afF
aqf
-avb
-azY
-azY
-azY
-auf
-azY
+aqf
+weP
+aqf
+aqf
+aFP
+aFP
+aFP
+aFP
+xFZ
+kPK
+aFP
akp
aFP
aFP
@@ -52667,15 +56962,15 @@ aFP
akp
aFP
aFP
+ayI
aFP
-axA
-axA
-axA
-sSe
-axA
-axA
-axA
-aPf
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
aPf
atp
qJm
@@ -52684,25 +56979,25 @@ atp
ckY
atp
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+iGS
+aOW
+aOW
+iGS
+iGS
+iGS
+iGS
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -52891,19 +57186,19 @@ aPf
ayI
ajj
aqf
-rJC
-aUo
-awr
-aUo
-aGk
+aWp
+cmh
+gOS
+smx
aqf
-aTB
aFP
-azY
-azY
-azY
-azY
-azY
+aFP
+aFP
+aFP
+auf
+kPK
+aFP
+aFP
aFP
aLH
aFP
@@ -52923,16 +57218,16 @@ aFP
aFP
aMJ
aFP
-aeT
-aBr
aFP
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
+ayI
+aFP
+aqf
+aRx
+aqf
+haM
+aQQ
+qHc
+aqf
atp
atp
qJm
@@ -52941,25 +57236,25 @@ atp
atp
atp
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ajj
+ajj
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+aOW
+aOW
+iGS
+uXf
+iNW
+nlM
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -53148,19 +57443,19 @@ aPf
ayI
ajj
aqf
-aqf
-sQj
-aqf
-dau
-aqf
-aqf
+grW
+qXC
+bAr
+agk
+kJU
aFP
aFP
-ahQ
+axw
+aFP
+aFP
+bja
+aFP
aFP
-azY
-azY
-azY
alF
aFP
aFP
@@ -53180,16 +57475,16 @@ aFP
asF
aFP
aFP
-arT
aFP
+ayI
aFP
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
+aqf
+qWc
+axD
+amF
+amF
+alk
+sQj
atp
qJm
qJm
@@ -53198,25 +57493,25 @@ aPf
aPf
aPf
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ajj
+ajj
+iGS
+vZb
+pSZ
+ahk
+ahk
+iGS
+fGv
+aOW
+iGS
+tKt
+tKt
+qCU
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -53404,20 +57699,20 @@ ajj
aPf
ayI
ajj
-aqf
-ufz
-nps
-vxF
-bcb
-sQj
-aFP
-aAc
-aFP
-aFP
-azk
-aFP
-azY
-azY
+adR
+auP
+qXC
+orU
+vYI
+kJU
+aHl
+aHl
+aHl
+aHl
+nJO
+aLu
+ayI
+ayI
aIV
ahQ
aFB
@@ -53438,42 +57733,42 @@ aFP
afA
ahU
aFP
+ayI
aFP
-aFP
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
+aqf
+aqf
+aqf
+aqf
+aFy
+aqf
+aqf
atp
qJm
qJm
atp
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ajj
+ajj
+iGS
+asz
+qfy
+ahk
+ahk
+pXT
+aOW
+aOW
+fbM
+tKt
+tKt
+kIR
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -53661,21 +57956,21 @@ ajj
aCf
ayI
ajj
-aqf
-bcb
-bcb
-bcb
-bcb
-sQj
-aFP
-aFP
-aLH
-aFP
-asX
-aFV
-azY
-azY
-azY
+adR
+vkD
+qXC
+qXC
+iki
+gxF
+aHl
+aHl
+aHl
+aHl
+aHl
+aLu
+ayI
+ayI
+ayI
atQ
aFP
aLH
@@ -53695,15 +57990,15 @@ aFP
aLH
ahs
aFP
-alf
+ayI
aFP
-ajj
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
+auf
+aqf
+kkV
+aUo
+aUo
+aUo
+aqf
atp
ckY
qJm
@@ -53711,26 +58006,26 @@ atp
aPf
aPf
aPf
-aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+ajj
+ajj
+iGS
+npc
+nhZ
+ahk
+ssi
+iGS
+aOW
+aOW
+iGS
+iYC
+fza
+cPo
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -53918,25 +58213,25 @@ ajj
aPf
ayI
ajj
-aqf
-rTU
-bcb
-bcb
-bcb
-sQj
-aFP
-aFP
-aFV
-aFB
+adR
+lVs
+vNs
+bIO
+acF
+kJU
+aHl
+aHl
+aHl
+aHl
+nJO
+aLu
+ayI
+ayI
+ayI
+ayI
aFP
aFP
-arT
-azY
-azY
-azY
-aKu
aFP
-aAc
aFP
azk
aFP
@@ -53952,15 +58247,15 @@ agy
aFP
aFP
aFP
-aFP
-aFP
-auf
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+cOu
+aUo
+eeZ
+bwG
+anw
+aqf
atp
qJm
qJm
@@ -53969,25 +58264,25 @@ atp
atp
aPf
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ajj
+ajj
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
+iGS
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -54176,24 +58471,24 @@ aPf
ayI
ajj
aqf
-sRt
-btN
-bcb
-btN
-sQj
-aFP
+auP
+qXC
+qXC
+aIm
+oYO
aFP
+aLH
aFP
-avb
-aeT
-aMJ
+aAc
aFP
+mCg
aFP
-azY
-azY
aFP
-aSs
-aSs
+ayI
+ayI
+ayI
+ayI
+ayI
aFP
aLH
aFP
@@ -54209,15 +58504,15 @@ aIV
aFP
aVA
aAc
+ayI
aFP
aFP
-aFP
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
+aqf
+aUo
+pqy
+jhR
+fTY
+aqf
atp
esx
qJm
@@ -54226,25 +58521,25 @@ atp
atp
aPf
aPf
-aPf
-aPf
-aPf
+ayI
+tUL
+ayI
+ayI
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+ajj
+ajj
+ajj
+ajj
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -54433,25 +58728,25 @@ aPf
ayI
ajj
aqf
-aqf
-aqf
-aqf
-aqf
+lDy
+kJL
+riB
+iDL
aqf
aFP
-auf
-ahQ
-aTB
aFP
aFP
-aMJ
+auf
aFP
-azY
-azY
+kPK
aFP
-aeT
aFP
-ahA
+aFP
+ayI
+ayI
+ayI
+ayI
+ayI
aFP
aFP
aFP
@@ -54465,16 +58760,16 @@ aGg
aFP
aAz
asX
-aFP
-aFP
+ayI
+ayI
ayd
-aKu
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
+aMJ
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
atp
atp
cBT
@@ -54483,9 +58778,22 @@ aTR
atp
aPf
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
+ayI
+ayI
+asw
+azB
+azB
+aCS
+azB
+azB
+aCS
+azB
+azB
+asw
+ajj
+ajj
ajj
aaa
aaa
@@ -54624,19 +58932,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
"}
(161,1,1) = {"
aaa
@@ -54689,23 +58984,26 @@ ajj
aCf
ayI
ajj
+aqf
+aqf
+bhQ
+bIO
+aqf
+aqf
aFP
aFP
aFP
+aSs
aFP
-aIV
-aFP
-ayd
-aIV
-aAz
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-azY
+lwv
+lwv
+lwv
+lwv
+lwv
+lwv
aFP
+ayI
+ayI
aFP
aFP
aFP
@@ -54715,23 +59013,20 @@ aFP
aFP
aFP
aFP
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
aFP
aFP
aFP
-jhR
-hdV
-jhR
-jhR
-jhR
+axw
aFP
+axw
aFP
aFP
-ajj
-ajj
-aPf
-aPf
-aPf
-aPf
atp
atp
atp
@@ -54740,20 +59035,20 @@ cBT
atp
aPf
aPf
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ayI
+ayI
+ayI
+tUL
+asw
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+asw
aaa
aaa
aaa
@@ -54946,61 +59241,71 @@ ajj
ayI
aPf
ajj
+ajR
+xHs
+qXC
+jgt
+aSP
+aSP
aFP
-aLH
-ahU
-axw
+azk
aFP
-aqf
-aqf
-aqf
-aqf
-aqf
-aqf
-aqf
-aqf
-aqf
+aFP
+aFP
+lwv
+rHD
+wUS
pbz
fOb
-aqf
+lwv
aRi
akW
akW
akW
-akW
-akW
-akW
-akW
-akW
-akW
+gPj
+gPj
+gPj
+gPj
+gPj
+gPj
+gPj
+smT
+gmT
+gmT
aVI
+ayI
+ayI
+ayI
+ayI
aFP
-jhR
-aKQ
-hpP
-rcq
-jhR
aFP
aFP
aFP
aFP
-ajj
-ajj
-ajj
-aPf
-aPf
-ajj
+kWr
+aFP
+aFP
ajj
ajj
kFE
aaY
aPf
aPf
+cEy
+aqP
aPf
aPf
aPf
-aPf
-ajj
+asw
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+aOc
+asw
aaa
aaa
aaa
@@ -55141,6 +59446,133 @@ aaa
aaa
aaa
aaa
+"}
+(163,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+ayI
+aPf
+ajj
+alH
+alH
+alH
+alH
+aSP
+aSP
+aFP
+aFP
+aFP
+aFP
+aFP
+lwv
+bkA
+wUS
+gMy
+aki
+lwv
+aBi
+auM
+aFr
+aFr
+aFr
+aFr
+aFr
+aFr
+aFr
+auM
+fFr
+fFr
+akW
+akW
+sDY
+aFP
+aFP
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+aFP
+aFP
+aFP
+aFI
+axw
+aFP
+aFP
+axw
+aFP
+aFP
+aPf
+aPf
+aPf
+aPf
+asw
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -55151,143 +59583,6 @@ aaa
aaa
aaa
aaa
-"}
-(163,1,1) = {"
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-ajj
-ayI
-aPf
-ajj
-aFP
-aCM
-aFP
-auf
-aFP
-aqf
-qMl
-weP
-goK
-tvh
-aqf
-lwv
-bkA
-wUS
-mZp
-aki
-aqf
-aBi
-auM
-aFr
-aFr
-aFr
-aFr
-aFr
-aFr
-aFr
-auM
-aKc
-aFP
-jhR
-djn
-lwt
-vUv
-jhR
-aFP
-aFP
-aGg
-aFP
-aFP
-aMJ
-ajj
-ajj
-ajj
-ajj
-aFI
-axw
-aFP
-aFP
-axw
-aPf
-aPf
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -55460,23 +59755,23 @@ ajj
ayI
aPf
ajj
-ajK
-ahQ
+aFN
+aFN
+aFN
+aFN
+aSP
+aSP
+auf
aFP
aFP
aFP
-aqf
-sGf
-sGf
-sGf
-tuO
-ycD
-bll
-sGf
-sGf
+aMJ
+lwv
sGf
+wUS
+gMy
tuO
-aqf
+lwv
aBi
ayA
alC
@@ -55487,22 +59782,22 @@ alC
alC
alC
aUM
-aKc
-aFP
-uWe
-egn
-aBv
-vUv
-jhR
-aFP
-aFP
-aFP
-aFP
-aFP
+fFr
+fFr
+qNu
+fFr
+wBV
+kWr
aFP
aFP
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
aFP
-aaY
aFP
aFP
aFP
@@ -55510,21 +59805,21 @@ aFP
aFP
aFP
agy
-aPf
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aFP
+ayI
+ayI
+ayI
+ayI
+aYQ
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+asw
aaa
aaa
aaa
@@ -55717,71 +60012,71 @@ ajj
ayI
aPf
ajj
+fTb
+fTb
+fTb
+fTb
+aSP
+aSP
aFP
-ahQ
aFP
aFP
aFP
-aqf
-lhF
-cMM
-mPR
-hYP
-aqf
-qKi
+aFP
+lwv
oaM
-oSG
+wUS
gMy
-kPK
-aqf
+aki
+lwv
aBi
ayA
alC
+bFD
alC
alC
alC
-alC
-alC
+bFD
alC
aUM
-aKc
-aFV
-jhR
fFr
-nlM
-vUv
-jhR
-aVA
-aFP
+sen
+hfJ
+gqq
+wBV
aFP
+kWr
+kWr
aFP
aFP
aFP
+auf
aFP
+ayI
+ayI
aFP
-aaY
-aFP
-aFP
+auf
aFP
aFP
aFP
aFP
+auf
aFP
-aBr
-aPf
-aPf
-aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ayI
+ayI
+ayI
+ayI
+ayI
+asw
+aOG
+azB
+azB
+azB
+azB
+azB
+azB
+azB
+asw
aaa
aaa
aaa
@@ -55974,11 +60269,11 @@ ajj
aqP
aPf
ajj
-aFP
-aFP
-azk
-aFP
-ahA
+ajj
+ajj
+ajj
+ajj
+ajj
aqf
aqf
aqf
@@ -55988,35 +60283,35 @@ aqf
aqf
aqf
aqf
-fAL
-fOb
-xyn
+aVp
+aqf
+aqf
aJp
-ayA
-alC
-alC
+izT
+wLN
alC
alC
alC
+jmI
alC
alC
aUM
-aKc
-aFP
-jhR
-iQp
-pwV
-gmE
-jhR
-aFP
-aAY
-aFP
-aFP
-aFP
-avb
-aFP
+fFr
+fFr
+eon
+fFr
+gSx
+aqf
+aqf
+aTb
+aqf
+aTb
+aqf
+aqf
+kWr
+ayI
+ayI
aFP
-aaY
aFP
aFP
aFP
@@ -56024,21 +60319,21 @@ aFP
aMJ
aFP
aFP
-alf
-aPf
-aPf
+ayI
+ayI
aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ayI
+ayI
+asw
+aOG
+azB
+azB
+azB
+azB
+azB
+azB
+aOc
+asw
aaa
aaa
aaa
@@ -56250,7 +60545,7 @@ aUo
aqf
aBi
ayA
-alC
+dgl
alC
alC
alC
@@ -56258,44 +60553,44 @@ alC
alC
alC
aUM
-aKc
-aFP
-jhR
-jhR
-pPH
-jhR
-jhR
-aKu
-aFP
+fFr
+fFr
+aJT
+aJT
+ald
+aqf
+aAE
+azr
+aWT
+aUo
+aBk
+aqf
aFP
+ayI
+ayI
aFP
aFP
aFP
-ajj
-ajj
-ajj
-ajj
-awU
aFP
aFP
aFP
aFP
+ayI
+ayI
aFP
-avb
aPf
aPf
aPf
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+asw
+aQM
+aQM
+azB
+azB
+azB
+azB
+azB
+azB
+asw
aaa
aaa
aaa
@@ -56507,52 +60802,52 @@ aUz
aqf
aBi
ayA
+dgl
+bFD
alC
alC
alC
-alC
-alC
-alC
+bFD
alC
aUM
+fFr
aKc
+rjD
+sFC
+nLr
+aqf
+aZF
+aHK
+aWT
+aUo
+aqO
+aqf
aFP
+ayI
+ayI
+ayI
aFP
aFP
aFP
aFP
aFP
+ayI
+ayI
aFP
aFP
-aFP
-aMJ
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ahs
-aFP
-aFP
-aFP
-aFP
-ahQ
-aFP
aPf
aPf
ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+asw
+aQM
+aQM
+afx
+azB
+azB
+afx
+azB
+azB
+asw
aaa
aaa
aaa
@@ -56763,8 +61058,8 @@ aUo
azm
aTb
aBi
-ayA
-alC
+laX
+cby
alC
alC
alC
@@ -56772,34 +61067,45 @@ alC
alC
alC
aUM
-aKc
-aIV
-aAc
-ahs
-aAz
-ayd
-aFP
-aFP
-avb
-aFP
-ajj
-ajj
-umm
-umm
-umm
-umm
-umm
-ajj
-ajj
-ajj
-ajj
-ahs
-aFP
+fFr
+tur
+tXp
+tzR
+tzR
+aqf
+ail
+aUo
+aUo
+aUo
+aUo
+aUK
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
aFP
aFP
aPf
aPf
ajj
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+asw
+aaa
aaa
aaa
aaa
@@ -56907,51 +61213,40 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-"}
-(170,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+"}
+(170,1,1) = {"
aaa
aaa
aaa
@@ -57020,40 +61315,40 @@ aUo
aUo
aOR
aBi
-ayA
-alC
-alC
-alC
-alC
-alC
-alC
-alC
-aUM
-aKc
-aFP
-aLH
-aAY
-bAr
-aCM
-axw
-aFP
-aGg
-ajj
-ajj
-ajj
-umm
-aZs
-aXF
-aPZ
-umm
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-akp
-aFP
+auM
+aIA
+aIA
+aIA
+aIA
+aIA
+aIA
+aIA
+auM
+fFr
+tur
+uXH
+aMQ
+kLD
+aqf
+aOZ
+aUo
+aSy
+aUo
+afF
+aqf
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+aPf
+aPf
+aPf
+aPf
aPf
aPf
ajj
@@ -57277,53 +61572,53 @@ aUo
aUo
aTb
aBi
-auM
-aIA
-aIA
-aIA
-aIA
-aIA
-aIA
-aIA
-auM
-aKc
-aFP
-aKu
-aVA
+fFr
+fFr
+fFr
+fFr
+fFr
+fFr
+fFr
+fFr
+fFr
+fFr
+tur
+uXH
+aMQ
+aMQ
+aqf
+rJC
+aUo
+awr
+aUo
+aGk
+aqf
+ayI
+ayI
+ayI
aFP
-azk
+aMJ
aFP
aFP
aFP
-ajj
-aEQ
-aNK
-umm
-aTV
-arh
-aAr
-umm
-umm
-umm
-umm
-umm
-umm
-ajj
-aCa
-aFP
+ayI
+aWo
+ayI
+aPf
+aPf
aFP
aPf
ajj
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -57538,49 +61833,49 @@ aiw
aJT
aJT
aJT
-aJT
-aYA
+gdL
+aiw
aYA
aJT
awm
-ald
-aFP
-aFP
-aFP
-aFP
+aJT
+wWm
+mLK
+iTA
+mza
+aqf
+aqf
+aqf
+aqf
+dau
+aqf
+aqf
+ayI
+ayI
aFP
+auf
+kWr
aFP
+kWr
aFP
aFP
-ajj
-aRH
-iqY
-pux
-aGL
-aVS
-aAr
-umm
-kYn
-aYc
-fvx
-aDB
-umm
-ajj
-ajj
-alF
+aPf
+ayI
+aPf
+auf
aFP
aLH
ajj
-asw
-azB
-azB
-aCS
-azB
-azB
-aCS
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -57802,42 +62097,42 @@ aqf
aqf
aqf
aqf
+lwv
+sAC
+lwv
+aqf
+ufz
+nps
+vxF
+pej
+aqf
+kWr
+ayI
+ayI
aFP
aFP
-alk
-aFP
-arT
-aFP
-aFP
-ajj
-agb
-aEf
-nii
-aGL
-aSP
-aRd
-akS
-aQQ
-aQQ
-aQQ
-aUd
-umm
-ajj
-ajj
-aIV
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+ejQ
+aqf
+aqf
aVA
aFP
ajj
-asw
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -58059,42 +62354,42 @@ aUo
ayo
ahY
aqf
+aUo
+aUo
+aUo
aqf
-ang
+bcb
+bcb
+bcb
+pej
aqf
+ayI
+ayI
+ayI
+kWr
+vUv
aqf
-aaY
-aaY
-aaY
-ajj
-smA
-afB
-umm
-aTI
-aCY
-aRx
-umm
-jdx
-aQQ
-qHc
-mLK
-umm
-ajj
-ajj
-aBr
-aFB
+aUo
+aUo
+aUo
+aWf
+jQJ
+aUo
+sHR
+aqf
+ahU
akp
-aFP
-asw
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-aOc
-asw
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -58296,7 +62591,7 @@ auU
aqf
aDr
aUo
-aCD
+bwG
aNi
aUo
aUo
@@ -58320,38 +62615,38 @@ aqy
aUo
agr
aqf
+rTU
+bcb
+bcb
+pej
+aqf
+ayI
+ayI
+ayI
aFP
+xFE
+aqf
+aHM
+aUo
+axo
+aLe
+aUo
+aUo
+aUo
+iQp
aFP
aFP
ajj
-ajj
-ajj
-umm
-umm
-umm
-umm
-umm
-umm
-akS
-umm
-umm
-umm
-ajj
-ajj
-ayd
-aFP
-agy
-aFP
-asw
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -58577,38 +62872,38 @@ aPK
aUo
awQ
aqf
+sRt
+btN
+bcb
+ujV
+aqf
+auf
+ayI
+ayI
aFP
aFP
+aqf
+aUo
+aUo
+vUu
+bwG
+bwG
+aUo
+aUo
+iQp
+hpP
aFP
-awU
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-umm
-aqV
-aGL
-aHY
-aZz
-umm
-umm
-ajj
ajj
-ahU
-aFP
-aFP
-aYQ
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -58813,7 +63108,7 @@ aUo
aUo
aUo
aUo
-aCD
+bwG
wDG
aUo
aUz
@@ -58834,38 +63129,38 @@ aYj
aUo
aKD
aqf
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aIm
-aqP
-azC
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+kWr
ayI
+aFP
+kWr
+aqf
+nii
+aUo
umm
-azj
-awW
-aOW
-aMV
-jQJ
-umm
-ajj
-ajj
+aRo
+bwG
+aUo
+aUo
+iQp
aFP
aLH
-aFP
-asw
-aOG
-azB
-azB
-azB
-azB
-azB
-azB
-azB
-asw
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -59070,7 +63365,7 @@ aUo
aUo
aUo
aUo
-aCD
+bwG
wDG
aUo
aUo
@@ -59091,38 +63386,38 @@ aXd
aUo
aQa
aqf
-aLH
-aFP
-aFP
-aFP
+dyU
+bQR
+paj
+fPs
+amF
+aqf
aFP
+ayI
aFP
aFP
-aIm
-azC
-ayI
-akS
-aGL
-atJ
-axo
-aLe
-alH
-umm
-ajj
-ajj
+aqf
+sFB
+aUo
+aMV
+bwG
+bwG
+aUo
+aCF
+aqf
aAc
-aFP
-awU
-asw
-aOG
-azB
-azB
-azB
-azB
-azB
-azB
-aOc
-asw
+auf
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -59327,7 +63622,7 @@ aid
aUo
aUo
aid
-aCD
+bwG
wDG
aUo
aUo
@@ -59347,39 +63642,39 @@ aqf
aqf
aUo
aqf
+aPZ
+dDF
+jYf
+xga
+amF
+amF
aqf
aFP
-aFP
-aFP
-aFP
-aFP
-aIm
-aFP
-aRP
-azC
ayI
-umm
-aFN
-akS
-umm
-aHj
-umm
-umm
-ajj
-ajj
-agy
+aFP
+auf
+aqf
+aZW
+aUo
+eIq
+pUJ
+aUo
+aUo
+aUz
+aqf
+npr
aFB
ajj
-asw
-aQM
-aQM
-azB
-azB
-azB
-azB
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -59605,38 +63900,38 @@ aIU
aUo
bNi
aqf
-ahQ
-aFB
+bZt
+qPy
+clF
+amF
+amF
+ahP
aFP
+ayI
+ayI
aFP
+aqf
+aYO
+aUo
+aCo
+aUo
+aUo
+aUo
+aUo
+pcp
+jbu
+vyS
ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-umm
-aGL
-aGL
-umm
-umm
-umm
-umm
-umm
-ajj
-ahQ
-aNk
-ajj
-asw
-aQM
-aQM
-afx
-azB
-azB
-afx
-azB
-azB
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -59841,7 +64136,7 @@ aPo
aUo
aUo
aUo
-aCD
+bwG
wDG
aUo
aUz
@@ -59862,38 +64157,38 @@ aUo
aUo
jeI
aqf
-atQ
-aFP
-aLH
-ajj
-ajj
-umm
-umm
-umm
-umm
-umm
-umm
-aGL
-aGL
-umm
-vqx
-vUu
-tKt
-umm
-ajj
-akp
+aqf
+aqf
+amF
+amF
+amF
+aqf
+kWr
+ayI
+ayI
aFP
+aqf
+aqf
+aqf
+aqf
+dIR
+aqf
+aqf
+aqf
+aqf
+caY
+aWy
ajj
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
-asw
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -60098,7 +64393,7 @@ aqf
aRt
aUo
alM
-aCD
+bwG
wDG
aUo
aUo
@@ -60119,27 +64414,27 @@ aGY
aUo
jeI
aqf
-aFP
-aFP
-aFP
-ajj
-ajj
-umm
-aYk
-agk
-aPx
-aPx
-umm
-aZW
-aGL
-umm
-pUJ
-pUJ
-dUh
-umm
-ajj
-aFP
-aFP
+dbn
+axD
+amF
+amF
+amF
+aqf
+lwv
+lwv
+npr
+lwv
+aqf
+aRx
+axD
+amF
+amF
+qHc
+aqf
+tgU
+aMQ
+ozJ
+aCU
ajj
ajj
ajj
@@ -60376,27 +64671,27 @@ aUo
aUo
jeI
aqf
-aFP
-aFP
-aFP
-ajj
-ajj
-umm
-ayt
-aCU
-aPx
-aPx
-aDQ
-aGL
-aGL
-aoE
-pUJ
-pUJ
-neb
-umm
-ajj
-aaY
-aOz
+sys
+aqf
+amF
+ioZ
+aqw
+aqf
+cDr
+tzR
+tzR
+tzR
+aqf
+qWc
+aqf
+amF
+bTK
+xQK
+aqf
+xec
+caY
+kgI
+alF
ajj
ajj
ajj
@@ -60633,27 +64928,27 @@ aUo
aUo
jeI
aqf
-aFP
-aFP
-aBr
-ajj
-ajj
-umm
-aCF
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+avl
+fjN
aMQ
-aPx
-awY
-umm
-aGL
-aGL
-umm
-ahk
-amu
-nKz
-umm
-ajj
-akp
-aFP
+fjN
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+srA
+caY
+wcd
+aNk
ajj
ajj
ajj
@@ -60890,27 +65185,27 @@ aUo
aUo
aqf
aqf
-aFP
-aLH
-ayd
-aFP
ajj
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
-umm
ajj
-agy
-aFP
+ajj
+ajj
+ajj
+ajj
+ajj
+amx
+uXK
+amx
+lwv
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
ajj
ajj
aaa
@@ -61131,44 +65426,44 @@ rUT
ayy
aeZ
aqf
-aCa
-aFP
-azY
-azY
-azY
-aFP
-aFP
+pwO
+wVd
+aYc
+aYc
+aYc
+kZK
+bON
aqf
aAX
ajx
-aCo
+aUo
aUo
aUo
xqI
aqf
-awU
-aFP
-aFP
-aFP
-aFP
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+pWF
+ayI
+ayI
+ayI
+dUh
+pib
+pib
+pib
+aDB
+aAd
+aAd
+izJ
+izJ
+amx
ajj
-aFP
-aFP
-ayd
-aFP
ajj
aaa
aaa
@@ -61388,44 +65683,44 @@ aqf
aTb
aqf
aqf
-aFP
-aFP
-azY
-azY
-azY
-aFP
-aFP
-aqf
+ayt
+qVU
+qVU
+qVU
+qVU
+qVU
+aJP
aqf
aqf
aqf
+aHM
+aUo
aUo
avu
aqf
-aqf
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-aFP
-aFP
-aFP
-aLH
-aFP
-ajj
+vTT
+kJu
+ahY
+awr
+vTT
+aJX
+xGO
+vTT
+vTT
+vTT
+vTT
+vTT
+amx
+aAd
+aAd
+aAd
+aSZ
+aDB
+aAd
+aAd
+aEX
+amx
+amx
ajj
aaa
aaa
@@ -61632,57 +65927,57 @@ aPf
aPf
aPf
aPf
-ajj
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
+ekp
+ayI
+ayI
+ayI
+ayI
+mfu
+tsx
+tsx
+tsx
+tsx
+tsx
+tsx
aBa
-aFP
-aFP
-aFP
-azY
-azY
-aFP
-aAz
-aFP
+aqX
+qVU
+vhm
+rOn
+mxd
+qVU
+tct
aqf
aAX
ajx
aUo
+aUo
+aUo
aCR
aqf
-aFP
-aFP
-aFP
-aFP
-alo
-ahQ
-aNk
-arT
-aLH
-aFP
-aFP
-aFP
-aFP
-ahQ
-aFP
-agy
-aFP
-ahQ
-aFP
-agy
-aFP
-aFP
-ahs
-ajj
+vTT
+pqy
+bwG
+aUo
+vTT
+atF
+ttN
+vTT
+dtr
+rjk
+dIM
+vTT
+amx
+aiD
+eFC
+aAd
+aAd
+aCX
+aDB
+aAd
+aAd
+izJ
+aAd
ajj
aaa
aaa
@@ -61889,57 +66184,57 @@ ayI
aPf
aPf
aPf
-ajj
-aIr
-aIr
-aIr
-aIr
-aIr
-aTp
-aIr
-aIr
-aIr
-aIr
-aIr
-aBa
-awU
-aFP
-azY
-azY
-azY
-aFP
-aFP
-aLH
+ekp
+ayI
+ayI
+hea
+bNV
+eTt
+aTB
+eTt
+eTt
+wIO
+wIO
+wIO
+vzb
+sUE
+vhm
+qdG
+vdW
+bUS
+anz
+apT
aqf
aqf
aqf
aTb
+aTb
+aTb
+aTb
aqf
-aqf
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFV
-avb
-aFP
-aFP
-auf
-alF
-aeT
-asX
-ahU
-aFP
-ayd
-asX
-ahU
-aFP
-ayd
-aFB
-awV
-ajj
+vTT
+qpx
+aUo
+aUo
+rSu
+nxR
+pET
+vTT
+fpe
+dOM
+hTf
+vTT
+amx
+gSB
+rHH
+izJ
+aAd
+aSZ
+ayI
+aDB
+aAd
+aAd
+izJ
ajj
aaa
aaa
@@ -62147,56 +66442,56 @@ aPf
aPf
aFP
agU
-aIr
-aIr
-aIr
+mPR
+uIo
+aSt
aIr
aIg
aIg
aIg
aIr
aIr
-aIr
-aIr
-aBa
-aFP
-aFP
-azY
-azY
-aBr
-aFP
-alF
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-alF
-aFP
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-akp
-aFP
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-awV
+xnl
+aSt
+dzn
+sUE
+jtc
+oVT
+axC
+gyS
+nWn
+kJw
+dhi
+avt
+bLZ
+uXF
+uXF
+afN
+pUQ
+aNk
+vTT
+saT
+aVg
+iqj
+vTT
+nxR
+aTl
+vTT
+wZa
+dOM
+lHD
+vTT
+amx
+amx
+pCd
+amx
+amU
+aAd
+aCX
+hRJ
+aDB
+aAd
+aAd
ajj
aaa
aaa
@@ -62404,9 +66699,9 @@ aPf
asX
aFP
agU
-aIr
-aIr
-aIr
+nXw
+aSt
+aSt
aIr
aIg
aiM
@@ -62415,45 +66710,45 @@ aIr
aIr
aIr
aIr
-aBa
-aNk
-azY
-azY
-azY
-aFP
-aFP
-aeT
-akp
-agy
-aFP
-aFP
-aFP
-aFP
-aeT
-akp
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-agy
-aFP
-aFP
-aFP
-aeT
-aMJ
-ahs
-aFP
-aAc
+nMw
+sUE
+jtc
+pux
+qhl
+qnH
+nWn
+qVU
+pkJ
+iqT
+aqV
+dXe
aFP
aFP
-ahQ
-aFP
-ajj
+kWr
+aqV
+vTT
+cxU
+nyj
+aCo
+vTT
+nxR
+aTl
+aAY
+ycD
+azj
+sMF
+vTT
+pCd
+mIp
+lBn
+pCd
+izJ
+aAd
+cnz
+hfJ
+wkQ
+aAd
+aAd
ajj
aaa
aaa
@@ -62661,7 +66956,7 @@ aPf
aFP
aFP
agU
-aIr
+nXw
aIr
aIr
aqo
@@ -62670,47 +66965,47 @@ aNy
aDC
aqo
aIr
-aIr
-aIr
+rzO
+ddp
aWP
-azY
-azY
-azY
-azY
-aFP
-aFB
-aFP
-axw
-aFP
-aBr
-awN
-aFB
-aFP
-aFP
-axw
-aKu
-aQw
-aFP
-ahQ
-aFB
-aFP
-aFP
-aFP
-aFP
-aFP
-ayd
-aBp
-aFP
-aFP
-aFP
-aFP
-aFP
-agy
-aFB
-aeT
-asX
-ahU
-ajj
+sIZ
+jtc
+gyS
+mZp
+yde
+nWn
+qVU
+qUK
+ayI
+aOz
+ayI
+ayI
+aOz
+ayI
+pBW
+aAv
+vTT
+vTT
+vTT
+vTT
+nxR
+aTl
+vTT
+vTT
+sGb
+vTT
+vTT
+pCd
+lDo
+awt
+amx
+aAd
+rOQ
+ayI
+kLW
+eNw
+aAd
+aAd
ajj
aaa
aaa
@@ -62918,7 +67213,7 @@ aFP
aFP
asX
agU
-aIr
+gtO
aIr
aIr
aDC
@@ -62927,47 +67222,47 @@ aSi
aDC
aDC
aIr
+oja
aIr
-aIr
-aBa
-aMW
-azY
-azY
-aeT
-aFP
-aIE
-aNk
-asX
-nHH
-aFP
-ahQ
-aFP
-aFP
-aNk
-asX
-aFP
-aFP
-aFP
-atQ
-aFP
-aLH
-aFP
-aWj
-aFP
-aLH
-aFP
-aFP
-aFP
-aAc
-aFP
-akp
-aFP
-aFP
-aFP
-aFP
+nMw
+sUE
+jtc
+mBs
+bHC
+anD
+nWn
+qVU
+pkJ
+avt
+kWr
aFP
+kWr
aFP
-ajj
+ayI
+ayI
+rCf
+tbI
+aye
+nKz
+akS
+nxR
+qWv
+rjk
+rjk
+rjk
+lhK
+vTT
+pCd
+nnJ
+ayI
+hMt
+tMb
+pib
+uxZ
+eNw
+aAd
+aAd
+izJ
ajj
aaa
aaa
@@ -63175,7 +67470,7 @@ aFP
amT
aFP
veh
-aIr
+gtO
aIr
aIr
aDC
@@ -63184,47 +67479,47 @@ aGL
rne
mYg
aGC
+baM
aIr
-aIr
-aBa
-aFP
-aFP
-azY
-aFP
-aFP
-aFP
-aFP
-aKu
-aFP
-aeT
-asX
-ahU
-aFP
-aFP
-aFP
-aFP
-ahQ
-aFP
-aFP
-aKu
-aFP
-aAc
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aCM
-aFB
-ajj
+tvh
+eNI
+jtc
+qnH
+vdW
+axC
+nWn
+kJq
+jgG
+iJK
+nlB
+ahI
+aCw
+kWr
+ayI
+ayI
+rCf
+gnv
+hTD
+aTl
+akS
+nxR
+dOM
+dOM
+pdt
+dOM
+aTl
+aAv
+amx
+amx
+pCd
+amx
+jxl
+aAd
+aoE
+aAd
+aAd
+izJ
+izJ
ajj
aaa
aaa
@@ -63426,13 +67721,13 @@ aaa
ajj
aPf
aPf
-aPf
+ayI
ajj
aFP
aFP
aFP
agU
-aIr
+gtO
auH
aDC
aDC
@@ -63443,45 +67738,45 @@ aDC
aDC
aVk
aIr
-aBa
-aFP
-aFP
-azY
-awU
-aFP
-aFP
-aTl
-aFP
-alf
-nHH
-aFP
-aFP
-aFP
-aKu
-aFP
-aeT
-asX
-ahU
-aFP
-aFP
-aSs
-aSs
-aFP
-arT
-agy
-aBr
-ahQ
-aFP
-aFP
-aFP
-aFP
-alF
+tvh
+nlv
+jtc
+yde
+erR
+oVT
+nWn
+hOy
+ekp
+aTv
+nUS
aFP
-aeT
aFP
-aMJ
aFP
+ayI
+qiI
+aAv
+xTZ
+hdV
+awW
+vTT
+eAq
+qrK
+azj
+azj
+azj
+fFL
+vTT
ajj
+izJ
+aAd
+izJ
+izJ
+aAd
+aoE
+aAd
+rnM
+amx
+amx
ajj
aaa
aaa
@@ -63689,55 +67984,55 @@ ajj
kMV
aFP
agU
-aGR
-aDC
-aDC
-aDC
+hpl
+rXY
+rXY
+rXY
aox
aGL
apn
-aDC
-aDC
-aDC
+rXY
+rXY
+rXY
aGR
-aBa
-aFP
-aFP
-azY
-azY
-akp
-lXl
-prT
-aFP
-avb
-ahs
-aFP
-aAc
-aFP
-aFP
-alf
-aFP
-aFP
-aFP
-aFP
-ahs
-aFP
-aAc
-aFP
-aFP
-aFP
-aFP
-aFP
-azk
-aFP
-ahA
-agy
-aIV
-aFP
-aFP
-aFP
-aFP
-aFP
+tvh
+ifZ
+jtc
+bHC
+fOu
+axC
+nWn
+qHT
+vTT
+mwo
+kWb
+gzT
+ayI
+ayI
+ayI
+kMw
+aZq
+lNi
+dOM
+rpX
+vTT
+rzT
+aTl
+vTT
+vTT
+oRX
+vTT
+vTT
+ajj
+amx
+cEt
+aAd
+izJ
+aAd
+aoE
+aAd
+izJ
+amx
ajj
ajj
ajj
@@ -63938,7 +68233,7 @@ aaa
aaa
aaa
ajj
-ayI
+aPf
ayI
ayI
ayI
@@ -63946,55 +68241,55 @@ ajj
aFP
aFP
agU
-aIr
+gtO
aCs
aCs
-aDC
+rXY
akf
aGL
awA
-aDC
+rXY
aCs
aCs
aIr
-aBa
-aFP
-aFP
-azY
-azY
-aFP
-aFP
-aFP
-aIV
-ahQ
-aFP
-aFP
-agy
-aFP
-aFP
-avb
-ahs
-aFP
-aAc
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aSs
-axA
-axA
-axA
-axA
-axA
-aBr
-aFP
-aFB
-akp
+tvh
+ayt
+jtc
+jdx
+yde
+jdx
+nWn
+xuk
+azC
+bVx
+aUo
+xoB
+kMw
aFP
-aBr
+aOz
+lWZ
+aZq
+aCY
+dOM
+sPA
+aAv
+bVn
+aTl
+vTT
+kHi
+rNR
+vUI
+vTT
+ajj
+amx
+yjC
+lXl
+aAd
+lgt
+nzn
+lXl
+izJ
+ajj
ajj
ajj
ajj
@@ -64195,64 +68490,64 @@ aaa
aaa
aaa
ajj
-ayI
-aPf
aPf
-aWo
+ayI
+ayI
+ayI
ajj
aFP
aeT
agU
-aIr
+gtO
aPU
aMR
-aDC
+rXY
ani
aGL
aGL
-aDC
+rXY
aPU
aMR
aIr
-aBa
-aFP
-aFP
-aFP
-azY
-azY
-ahQ
-aFP
-aFP
-aFP
-aFP
-alo
-ahQ
-aFP
-aIV
-ahQ
-aFP
-aFP
-agy
-aFP
-avb
-aFP
-aIE
-aFP
-aFP
-aFP
-aFP
-axA
-ekp
-mtr
-tfI
-axA
-ayd
-aFP
-aFP
-aFP
-aFP
-aFP
+tvh
+eNI
+jtc
+xbn
+itm
+rvn
+nWn
+xDp
+vTT
+feU
+aUo
+nng
+nPr
aFP
+ayI
+qAg
+vTT
+gmE
+azj
+rnK
+vTT
+iWH
+aTl
+vTT
+aHY
+afy
+aFK
+vTT
+ajj
+pCd
+amx
+amx
+pCd
+pci
+pCd
+amx
+aAd
+ajj
+aUm
ajj
ajj
ajj
@@ -64452,72 +68747,72 @@ aaa
aaa
aaa
ajj
-ayI
aPf
ayI
ayI
+ayI
ajj
aFP
aFP
agU
-aIr
+gtO
wfN
wfN
-aDC
+rXY
aNy
aNy
aNy
-aDC
+rXY
wfN
wfN
aIr
-aBa
-ahs
-aFP
-aFP
-azY
-azY
-azY
-aeT
-aFP
-akp
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-auf
-aFP
-aFP
-aFP
-aFP
-aVA
-aFP
-ahQ
-axA
-lLN
+tvh
+sUE
+jtc
+fOu
+vdW
+yde
+nWn
+hOy
+vTT
+foq
+awv
+aer
+agA
+kWr
+ayI
+kWr
+vTT
+vTT
+vTT
+vTT
+vTT
+nxR
+pET
+vTT
+orh
+atJ
+xnI
+vTT
+vTT
pCd
+aAJ
+qKi
+dNn
+ayI
+dNn
pCd
-axA
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aDa
+aAd
+ajj
aUm
aUm
-apX
+aDa
+aUm
aHZ
aQf
gjj
+aUm
+aUm
aGw
aUm
aUm
@@ -64709,15 +69004,15 @@ aaa
aaa
aaa
ajj
-ayI
aPf
ayI
+ayI
ajj
ajj
aeT
aFP
agU
-aIr
+gtO
aIr
aIr
aDC
@@ -64728,46 +69023,44 @@ aDC
aIr
aIr
aIr
-aBa
-aFP
-aFP
-aFP
-aFP
-azY
-azY
-azY
-aFB
-aFP
-aFP
-aLH
-aFP
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-aIV
-aFP
-aFP
-aSs
-aFP
-aAz
-aFP
-axA
+tvh
+sUE
+alW
oVT
-pCd
-sfN
-axA
-aLH
-aFP
-aFP
-aBr
-aFP
+alo
+qnH
+nWn
+apT
+vTT
+vTT
+vTT
+vTT
+vTT
+aqV
+ayI
+aqV
aFP
aFP
-aUm
+kWr
+ski
+vTT
+sYY
+xDR
+vTT
+nYp
+afy
+wLx
+uew
+vTT
+pCd
+nis
+aKQ
+vQH
+ayI
+aNd
+amx
+aAd
+ajj
aUm
aUm
aUm
@@ -64775,7 +69068,9 @@ aSq
ofJ
aQf
gjj
-axa
+aOO
+aUm
+aUm
aUm
aUm
aUm
@@ -64966,16 +69261,16 @@ aaa
aaa
aaa
ajj
-ayI
aPf
+ayI
aWo
ajj
aFP
aFP
asX
agU
-aIr
-aIr
+nXw
+lro
aIr
aAh
aIr
@@ -64983,58 +69278,58 @@ aIr
aIr
aAh
aIr
+lro
aIr
-aIr
-aBa
-aFP
-akp
-aFP
-alF
-azY
+dzn
+sUE
+alW
+yde
+bHC
+gyS
+nWn
+apT
+vTT
+bBV
+saT
+rNs
+vTT
+aqV
+ayI
+iqT
+aFP
+cgU
+kMw
+kWr
+vTT
+vTT
+vTT
+vTT
+gCQ
+afy
+wLx
+nHH
+vTT
+pCd
azY
-afN
-aVA
-ahA
-agy
-aIV
-ahQ
-axA
-aNd
-axA
-aSH
-afs
-hTD
-axA
-aFP
-aFP
-pET
-aFP
-avb
-aFP
-axA
-axA
-axA
-rYj
-axA
-axA
-aFP
-aCM
-aeT
-aFP
-aFP
-aFP
+aKQ
+biB
+ayI
+lDo
+pCd
+aAd
+ajj
aUm
aRe
aUm
-sQX
-aqQ
aHZ
aQf
-aVv
-aRS
+aQf
+gjj
axa
+sQX
+aUm
+aUm
aUm
-aDa
aUm
aUm
aUm
@@ -65223,73 +69518,73 @@ aaa
aaa
aaa
ajj
-ayI
aPf
+ayI
aWo
awV
aFP
asX
aFP
agU
+nXw
+aSt
+aSt
+aSt
aIr
aIr
aIr
aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aBa
-aFP
-aFP
-aLH
-aAc
-auf
-azY
-azY
-avb
-aFP
+aSt
+aQE
+aQE
+jEk
+gRb
+alW
+qnH
+pux
+gyS
+nWn
+rkW
+vTT
+xIx
+adu
+aUo
+rYj
+ayI
+ayI
+kWr
aFP
-aBr
-atQ
-axA
-aVC
-aOY
-aSC
aSC
-aHJ
-sMF
-aFP
-aVA
-aFP
-aVA
-aFP
-aFP
-axA
-sto
-iYC
-grr
-gPj
-axA
-akp
-aFP
-aFP
-aMJ
-aFB
-aFP
+mGn
+udI
+cgU
+kWr
+wCC
+vTT
+qwJ
+bIL
+owJ
+ggx
+vTT
+pCd
+qBC
+ayI
+mgr
+ayI
+fbz
+pCd
+foJ
+ajj
aDa
aUm
-aUm
-aUm
-apX
+aqQ
aHZ
aQf
+aQf
gjj
-aOO
+aGw
aUm
+aDa
aUm
aUm
aUm
@@ -65480,71 +69775,71 @@ aaa
aaa
aaa
ajj
-ayI
aPf
+ayI
aPf
ajj
ajj
aFP
aFP
agU
-aIr
-aIr
-aIr
-aIr
-aIr
+qze
+kKs
+kKs
+use
+jfl
aTp
-aIr
-aIr
-aIr
-aIr
-aIr
-aBa
-aeT
-ahs
-aMW
+jfl
+kKs
+fCz
+ayI
+ayI
+eaJ
+mRV
+cqw
+xCO
+xCO
+xCO
+oYg
+qHT
+vTT
+aHM
+aUo
+aUo
+vTT
+kWr
+ayI
aFP
-azk
-azY
-azY
-azY
-arT
-aLH
-ayd
aFP
-axA
-axA
-axA
-axA
-aNa
-axA
-axA
aFP
-aIE
-aFP
-auf
-aAc
-aIV
-pBW
-sFF
-ppR
-uIf
-ycB
-gSD
-agy
+qAg
aFP
aFP
aFP
-aeT
-aFP
-aUm
+kWr
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+pCd
+amx
+amx
+amx
+ayI
+gZM
+amx
+amx
+ajj
+ajj
aUm
aUm
-apX
-aSq
-ofJ
-aVv
-aRS
+aCv
+bFi
+aQf
+gjj
+aJh
aUm
aUm
aUm
@@ -65737,7 +70032,7 @@ aaa
aaa
aaa
ajj
-ayI
+aPf
ayI
aPf
aPf
@@ -65745,69 +70040,69 @@ ajj
ajj
aFP
agU
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aIr
-aBa
-alf
-aFP
-aVA
-aFP
-aFP
-agy
-azY
-azY
-azY
-azk
-aFP
-aFP
-auf
-axA
-aHi
-atF
-atF
-atF
-axA
-aIV
-aFP
-aKu
-aFP
-pET
-aFP
-pQp
-bTK
-ppR
-pkJ
-aAJ
-gSD
-aFP
-ayd
-aBp
+ayI
+ayI
+ayI
+mSQ
+aQE
+aQE
+jYy
+ayI
+ayI
+ayI
+ayI
+eaJ
+sfd
+aZU
+vgQ
+vgQ
+vgQ
+hXd
+ikl
+vTT
+kpY
+qFt
+awr
+vTT
+wjI
+aOz
aFP
+kWr
aFP
+kWr
+ybS
+kWr
aFP
+kWr
+aDl
+vTT
+ldK
+hqp
+fXi
+vTT
+ajj
+pCd
+cXb
+nJO
+ayI
+ayI
+qMl
+lBn
+pCd
+ajj
aUm
aUm
-aUm
-aSq
-ofJ
+aLQ
+aHZ
aQf
-gjj
-aOO
-aUm
-aUm
-aUm
+aLD
+aKP
+axa
aUm
aUm
+aRe
aUm
+cZJ
aUm
ajj
aaa
@@ -65994,75 +70289,589 @@ aaa
aaa
aaa
ajj
+aPf
+ayI
+ayI
+ayI
+aPf
+ajj
+ajj
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+ekp
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+amk
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
+aOz
+aFP
+aFP
+vTT
+vTT
+vTT
+uJK
+vTT
+ajj
+pCd
+hxm
+aHl
+qVO
+ayI
+ayI
+axF
+pCd
+ajj
+aUm
+aUm
+aUm
+aHZ
+aQf
+aQf
+gjj
+aGw
+aUm
+aUm
+aUm
+aUm
+vYR
+aUm
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+eof
+eWR
+uKw
+lJi
+ndy
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+xuY
+hrS
+hrS
+hrS
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+"}
+(206,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+aPf
+ayI
+ayI
+ayI
+ayI
+ayI
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+vTT
+kxO
+lAv
+xsM
+kdo
+kfK
+fAL
+pLq
+mCv
+dRI
+noy
+vTT
+aKu
+ayI
+ayI
+ayI
+aOz
+ayI
+ayI
+ayI
+ayI
+ayI
+aFP
+iho
+kWr
+qBd
+aFP
+vTT
+ajj
+pCd
+hQV
+cna
+oWR
+ayI
+ofw
+hat
+pCd
+ajj
+aUm
+aUm
+aUm
+aCv
+bFi
+aQf
+gjj
+aJh
+aUm
+sQX
+aUm
+aUm
+aUm
+aUm
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+hrS
+cNa
+eWR
+uKw
+lJi
+xfT
+hrS
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+"}
+(207,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+aPf
+aPf
ayI
ayI
ayI
ayI
+ovH
+rUA
+qBC
aPf
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-aMJ
-aFP
-aAc
-aFP
-ahs
-aFP
-azY
-azY
-azY
-azY
-azY
-azY
-azY
-aVg
-atF
-aDl
-abK
-aMG
-axA
-aFP
-aFP
-aAc
-aAz
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+vTT
+oLI
+sOj
+qPk
+pgm
+xkO
+sNh
+mBM
+aII
+aUo
+aII
+vTT
+aqV
+ayI
+kWr
+gko
+kWr
aFP
aFP
-pQp
-iGS
-ppR
-ppR
-gLq
-bGE
+kWr
aFP
+ayI
aFP
aFP
aFP
-aAc
aFP
+kWr
+vTT
+ajj
+amx
+amx
+amx
+amx
+amx
+amx
+amx
+ajj
+ajj
aUm
-aRe
aUm
+aUm
+aLQ
aHZ
aQf
-aQf
-gjj
-axa
-sQX
-aUm
+aLD
+aKP
aUm
aUm
+aDa
aUm
aUm
aUm
@@ -66121,6 +70930,8 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
kjb
kjb
kjb
@@ -66139,14 +70950,13 @@ kjb
kjb
kjb
kjb
-kjb
-kjb
-kjb
-eof
+hrS
+cNa
eWR
uKw
lJi
-ndy
+xfT
+hrS
kjb
kjb
kjb
@@ -66158,10 +70968,6 @@ kjb
kjb
kjb
kjb
-xuY
-hrS
-hrS
-hrS
kjb
kjb
kjb
@@ -66202,8 +71008,11 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
"}
-(206,1,1) = {"
+(208,1,1) = {"
aaa
aaa
aaa
@@ -66252,6 +71061,12 @@ aaa
aaa
ajj
aPf
+aPf
+aPf
+ayI
+ayI
+ayI
+ayI
ayI
ayI
ayI
@@ -66259,65 +71074,59 @@ ayI
ayI
aPf
aPf
+aGb
+pCd
+aGb
+pCd
+aGb
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-aFP
-agy
-aFB
-aFP
-aFP
-aMJ
-azY
-azY
-azY
-aFP
-aFP
-aFP
-axA
-atF
+vTT
+sck
+qWE
+qWE
+caJ
+doA
+doA
+lvk
awv
-aye
-aNz
-axA
-aFP
-aAz
+awv
+aAq
+vTT
+kWr
+ayI
+ybS
+dXe
+aTG
aFP
+dXe
aFP
-aNk
aFP
-qWc
-iJK
-oWR
-pBW
-cXb
-gSD
+aOz
aFP
-ahs
aFP
+dXe
aFP
-azk
+ybu
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+ajj
+ajj
+vqx
aUm
+aDa
aUm
aUm
-aqQ
aHZ
aQf
aQf
gjj
-aGw
-aUm
-aDa
+axa
aUm
aUm
aUm
@@ -66378,6 +71187,9 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
kjb
kjb
kjb
@@ -66396,9 +71208,6 @@ kjb
kjb
kjb
kjb
-kjb
-kjb
-hrS
cNa
eWR
uKw
@@ -66420,9 +71229,9 @@ kjb
kjb
kjb
kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -66460,7 +71269,7 @@ aaa
aaa
aaa
"}
-(207,1,1) = {"
+(209,1,1) = {"
aaa
aaa
aaa
@@ -66510,66 +71319,68 @@ aaa
ajj
aPf
aPf
+aPf
+aPf
+ayI
+ayI
+ayI
+ayI
+ayI
+ayI
ayI
ayI
ayI
aPf
-ovH
-rUA
-qBC
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
+pCd
+wtw
+tDj
+ssQ
+pCd
aPf
+vTT
+ptx
+qDk
+qVQ
+lat
+vNe
+vNe
+awU
+doA
+doA
+doA
+fUQ
+ayI
+ayI
+gko
aFP
+iho
+iho
+dXe
+dXe
+kWr
+ayI
+kWr
aFP
aFP
-ahQ
-aNk
-arT
-aLH
-afN
-azY
-azY
-aFP
-aFP
-aFP
-aFP
-axA
-axA
-axA
-axA
-axA
-axA
-aFP
-aFP
-aFP
-aFP
-aIE
-aVA
-pBW
-bTK
-ppR
-ppR
-jgg
-hge
-aFB
-bAr
-aFP
-aFP
-aFP
+kWr
+aKu
+kWr
+aaY
+qNZ
+vTT
+aUd
+aEm
+aYk
+vTT
aUm
aUm
aUm
aUm
-aCv
-bFi
+aUm
+aUm
+aqQ
+aHZ
+aQf
aQf
gjj
aJh
@@ -66578,8 +71389,6 @@ aUm
aUm
aUm
aUm
-aUm
-aUm
ajj
aaa
aaa
@@ -66637,12 +71446,15 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
kjb
kjb
kjb
kjb
kjb
kjb
+aaa
kjb
kjb
kjb
@@ -66653,21 +71465,11 @@ kjb
kjb
kjb
kjb
-kjb
-kjb
-hrS
-cNa
+dmO
eWR
uKw
lJi
-xfT
-hrS
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+lAd
kjb
kjb
kjb
@@ -66716,8 +71518,15 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
"}
-(208,1,1) = {"
+(210,1,1) = {"
aaa
aaa
aaa
@@ -66768,74 +71577,74 @@ ajj
aPf
aPf
aPf
-ayI
aPf
-ayI
-ayI
-ayI
-ayI
-ayI
-ayI
-ayI
aPf
+dai
+aPf
+aNU
+aPf
+aPf
+aPf
+kHZ
ayI
-ayI
-aWo
-awV
-aFP
-aFP
-aeT
-asX
-avb
-agy
-aFV
-avb
-aFP
-azY
-azY
-aFP
-aFP
-aFP
-aFP
-aeT
-asX
-ahU
-aFP
-aFP
-aLH
-aFP
+aPf
+pCd
+tik
+qgh
+abK
+pCd
+aPf
+vTT
+ooW
+ozR
+pQp
+qtz
+gnq
+aCa
+bEV
+doA
+doA
+lij
+vTT
aFP
aFP
+kWr
aFP
-aMJ
+cgU
+gsX
+kWr
+kWr
aFP
+ayI
+ayI
+ayI
+ayI
aFP
-axA
-wcd
-aFy
-wCC
-nJO
-axA
-aNk
-arT
-aLH
+cgU
aFP
-aFB
+aaY
+uoM
+vTT
+ycB
+wYD
+oBn
+vTT
+aRe
aUm
-aDa
aUm
aUm
-aLQ
+aUm
+sQX
+aUm
aHZ
aQf
+aQf
aLD
aKP
-axa
aUm
aUm
-aRe
aUm
-cZJ
+aUm
aUm
ajj
aaa
@@ -66895,6 +71704,16 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
kjb
kjb
kjb
@@ -66903,6 +71722,11 @@ kjb
kjb
kjb
kjb
+xuY
+mXK
+vxU
+nER
+xuY
kjb
kjb
kjb
@@ -66913,27 +71737,12 @@ kjb
kjb
kjb
kjb
-cNa
-eWR
-uKw
-lJi
-xfT
-hrS
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -66974,7 +71783,7 @@ aaa
aaa
aaa
"}
-(209,1,1) = {"
+(211,1,1) = {"
aaa
aaa
aaa
@@ -67026,74 +71835,74 @@ aPf
aPf
aPf
aPf
+aPf
ayI
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aGb
+pCd
+mfo
+pCd
+aGb
+aPf
+vTT
+vTT
+vTT
+vTT
+qtz
+aLF
+lYJ
+mxI
+wKT
+wKT
+vYV
+vTT
+mZu
+jgg
+wvy
+iho
+aTG
+iho
+gVD
+ybu
+kWr
+gko
+kWr
+aOz
ayI
-ayI
-ayI
-ayI
-ayI
-ayI
-ayI
-ayI
-ayI
-aWo
-awV
-aFP
-aFP
-aFP
-aFP
-aAz
-aFP
-ahQ
-aFP
-aFP
-azY
-azY
-awU
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aLH
-aAc
-aFP
-ahs
-ahQ
-aFP
-aFP
-aFP
-xFZ
-aFP
-axA
-axA
-pBW
-pBW
-axA
-axA
-aFV
-avb
-aFP
-ahQ
-aIE
-aFP
+kWr
+kWr
+aaY
+uoM
+uoM
+vTT
+vTT
+bvn
+vTT
+vTT
+aUm
aUm
aUm
aUm
+aRe
+aUm
aUm
aHZ
aQf
aQf
+aQf
gjj
-aGw
-aUm
-aUm
aUm
aUm
vYR
aUm
+aUm
ajj
aaa
aaa
@@ -67153,33 +71962,30 @@ aaa
aaa
aaa
aaa
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
kjb
kjb
kjb
kjb
kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-dmO
-eWR
-uKw
-lJi
-lAd
-kjb
-kjb
-kjb
-kjb
-kjb
+xuY
+xuY
+xuY
+hLW
+nyr
+iBc
+xuY
+xuY
+xuY
kjb
kjb
kjb
@@ -67230,8 +72036,11 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
+aaa
"}
-(210,1,1) = {"
+(212,1,1) = {"
aaa
aaa
aaa
@@ -67283,73 +72092,73 @@ aPf
aPf
aPf
aPf
-aPf
-dai
-aPf
-aNU
-aPf
+ayI
+ayI
aPf
aPf
-kHZ
-ayI
+aGb
+pCd
+pCd
+pCd
+pCd
+aGb
+sto
+hJz
+nXu
+uAN
+bnI
+aPf
+aPf
+aPf
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+iJK
+pUQ
+kWr
+kWr
ayI
ayI
-aWo
-awV
-auf
-aFP
-aAc
-aFP
-aLH
-aFP
-aFP
-azY
-azY
-azY
-aFP
-aFP
-aFP
-aFP
-aFP
-ahs
-aFP
-aAc
-aFP
-agy
-aFB
-aFP
-aAz
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
+pUQ
+oAt
+uoM
+kso
+vTT
+awY
+gUZ
+lkC
+vTT
aUm
+aDa
aUm
aUm
aUm
-aCv
-bFi
-aQf
-gjj
-aJh
aUm
-sQX
+aUm
+aHZ
+aQf
+aQf
+aVv
+aRS
aUm
aUm
aUm
+cZJ
aUm
ajj
aaa
@@ -67419,29 +72228,29 @@ aaa
aaa
aaa
aaa
-kjb
-kjb
-kjb
+aaa
kjb
kjb
kjb
kjb
kjb
xuY
-mXK
-vxU
-nER
+guS
+hIU
+hLW
+uKw
+iBc
+hIU
+guS
xuY
kjb
kjb
kjb
kjb
kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -67488,7 +72297,7 @@ aaa
aaa
aaa
"}
-(211,1,1) = {"
+(213,1,1) = {"
aaa
aaa
aaa
@@ -67538,74 +72347,74 @@ aaa
ajj
aPf
aPf
-aPf
-aPf
-aPf
+ayI
+ayI
ayI
aPf
aPf
aPf
+pCd
+lgm
+ssQ
+mBS
+aHJ
+nXu
+cMM
+gmD
+pPH
+gxX
+kYn
aPf
aPf
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aMJ
-aFP
-aFP
-aFP
-aFP
-aFP
-azY
-azY
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-agy
-aFB
-aFP
-aFP
-aFP
-aFP
-aFP
-pET
-aFP
-aIV
-aFP
-aFP
-aFP
-aFP
-alF
-aFP
-aFP
-aFP
-aFP
-aFP
-asF
-aFP
-aFP
-aFP
+vTT
+neb
+bsO
+bWA
+vTT
+uIf
+uIf
+nkZ
+uIf
+vTT
+mOW
+prT
+hgd
+onU
+xXU
+ewl
+gmU
+vTT
+gko
+aNk
+avt
+ooY
+aFP
+dav
+oAt
+uoM
+uoM
+uoM
+vTT
+qGA
+gUZ
+aPV
+vTT
+aqQ
aUm
aUm
aUm
-aLQ
+aUm
+aUm
+apX
aHZ
aQf
-aLD
-aKP
-aUm
+aQf
+gjj
+axa
aUm
-aDa
aUm
+aRe
aUm
aUm
ajj
@@ -67677,22 +72486,20 @@ aaa
aaa
aaa
aaa
+aaa
kjb
kjb
kjb
kjb
-kjb
-xuY
-xuY
xuY
+cxX
+kqL
hLW
-nyr
+uKw
iBc
+kqL
+iiV
xuY
-xuY
-xuY
-kjb
-kjb
kjb
kjb
kjb
@@ -67744,8 +72551,10 @@ aaa
aaa
aaa
aaa
+aaa
+aaa
"}
-(212,1,1) = {"
+(214,1,1) = {"
aaa
aaa
aaa
@@ -67795,77 +72604,78 @@ aaa
ajj
aPf
aPf
-aPf
-aPf
+ayI
ayI
ayI
aPf
aPf
aPf
+pCd
+ssQ
+gxX
+nXu
+oBa
+dYa
+ncP
+gxX
+gxX
+tik
+cMM
aPf
aPf
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aIV
-ahA
-aFP
-aFP
-aFP
-azY
-arT
-agy
-aBr
-aFP
-aFB
-akp
-aFP
-aFP
-azk
-ahQ
-aNk
-aFP
-aVA
-aIV
-aFP
-aFP
-aFP
-arT
-agy
-aBr
-aFP
-aFB
-akp
-aFP
-aFP
-aMJ
-aFB
-aFP
-aFP
-aFP
-aFP
-aFP
+vTT
+aUo
+aUo
+aUo
+aNT
+gSD
+kzb
+kzb
+gSD
+eqe
+arh
+uMR
+aUo
+aUo
+qWG
+arh
+aXF
+vTT
aFP
+avt
+ppd
+axA
+kWr
+anQ
+uoM
+uoM
+uoM
+aaY
+vTT
+vTT
+hge
+vTT
+vTT
aUm
-aDa
aUm
aUm
-aHZ
-aQf
-aQf
-gjj
-axa
+aDa
aUm
aUm
+aSq
+ofJ
+aQf
+aVv
+aRS
+aqQ
aUm
+nap
aUm
aUm
ajj
+ajj
+aaa
aaa
aaa
aaa
@@ -67934,25 +72744,24 @@ aaa
aaa
aaa
aaa
-kjb
kjb
kjb
kjb
kjb
xuY
-guS
-hIU
+uYx
+kqL
hLW
uKw
iBc
-hIU
-guS
+kqL
+uYx
xuY
kjb
kjb
kjb
kjb
-kjb
+aaa
aaa
aaa
aaa
@@ -68002,7 +72811,7 @@ aaa
aaa
aaa
"}
-(213,1,1) = {"
+(215,1,1) = {"
aaa
aaa
aaa
@@ -68052,80 +72861,80 @@ aaa
ajj
aPf
aPf
+dai
+aPf
ayI
ayI
-ayI
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
aPf
aPf
+pCd
+oSG
+gxX
+cMM
+qdV
+aGb
+mSw
+cMM
+aSV
+gsj
+aGb
aPf
aPf
aPf
+vTT
+wUt
+aHi
+aZz
+vTT
+uIf
+kzb
+kzb
+gdN
+vTT
+arh
+wOi
+awv
+ikE
+bYx
+arh
+arh
+skM
+ayI
+ayI
aFP
-aAz
-ahs
-aFP
-aAc
-azY
-aFP
-aFP
-azY
-ahQ
-aFP
-agy
-aFP
-aFP
-aFP
-aeT
-asX
-avb
-agy
-ahU
-aFP
-aAc
-aFP
-aFP
-aFP
-auf
-ahQ
-aFP
-agy
-aFP
-aFP
-aFP
-aeT
-asX
-ahQ
-aFP
-agy
-aFP
+kWr
+ayI
+blD
+uoM
+uoM
+aaY
+gko
aFP
+qBd
+ayI
+ekp
aUm
aUm
aUm
+aUm
+anr
+aUm
aqQ
aHZ
aQf
-aQf
-gjj
-aJh
-aUm
-aUm
+aVv
+aRS
+aUr
aUm
+sQX
aUm
aUm
ajj
-aaa
-aaa
-aaa
+ajj
+ajj
+ajj
+ajj
+ajj
aaa
aaa
aaa
@@ -68197,13 +73006,13 @@ kjb
kjb
kjb
xuY
-cxX
-kqL
+mmL
+wCl
hLW
uKw
iBc
-kqL
-iiV
+wCl
+mmL
xuY
kjb
kjb
@@ -68259,7 +73068,7 @@ aaa
aaa
aaa
"}
-(214,1,1) = {"
+(216,1,1) = {"
aaa
aaa
aaa
@@ -68313,72 +73122,75 @@ ayI
ayI
ayI
aPf
+fwu
aPf
+pCd
+nXu
+tik
+nXu
+xsf
+aUw
+hYn
+pNf
+auQ
+pNf
+uVm
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-aFP
-aFP
-ahQ
-azY
-azY
-aKu
-aFP
-aeT
-asX
-ahU
-aFP
-ayd
-aBp
-azY
-aFP
-aAz
-aFP
-ahQ
-aFP
-aFP
-aFP
-aFP
-aKu
-aFP
-aeT
-asX
-ahU
-aFP
-ayd
-aBp
-aFP
-aFP
-aAz
-asX
-ahU
-aFP
-ayd
-aFP
-aUm
-aUm
-sQX
-aUm
-aHZ
-aQf
-aQf
-aLD
-aKP
-aUm
-aUm
+aqf
+aqf
+aqf
+aqf
+djn
+aqf
+vTT
+gdN
+kzb
+kzb
+hKI
+vTT
+arh
+arh
+arh
+arh
+arh
+arh
+oPL
+vTT
+xyn
+ayI
+aOz
+ayI
+ayI
+mYy
+ppR
+bSf
+dNB
+aOz
+ayI
+ayI
+ayI
+sFF
aUm
aUm
+aRe
aUm
+rZY
+ggb
+ggb
+ggb
+ggb
+ggb
+ggb
+geG
+xFU
+xFU
+xFU
+xFU
+xFU
+rPm
+gCR
+gCR
+gCR
ajj
aaa
aaa
@@ -68447,9 +73259,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-kjb
kjb
kjb
kjb
@@ -68516,7 +73325,7 @@ aaa
aaa
aaa
"}
-(215,1,1) = {"
+(217,1,1) = {"
aaa
aaa
aaa
@@ -68566,76 +73375,79 @@ aaa
ajj
aPf
aPf
-dai
-aPf
ayI
ayI
aPf
aPf
+ayI
aPf
+aGb
+mwV
+oUI
+iro
+gxX
+tik
+wlL
+egn
+bcE
+aXn
+jiN
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-auf
-aFP
-ayd
-azY
-aLH
-auf
-alf
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aAc
-aFP
-aLH
-aFP
-aFP
-azY
-ayd
-aLH
-aFP
-alf
-aMJ
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aAc
-aFP
-aFP
-aFP
-aLH
-aFP
-aUm
-aUm
-aRe
-aUm
-aUm
-aHZ
-aQf
-aQf
-aQf
-gjj
+aqf
+kPf
+awN
+fOr
+doA
+aqf
+vTT
+gdN
+gSD
+hds
+ooD
+vTT
+aRC
+oNz
+oEm
+oPL
+arh
+arh
+qmG
+vTT
+aKu
+avt
+gko
+kWr
+vXr
+iHv
+uoM
+uoM
+oAt
+ayI
+ayI
+ayI
+ayI
+aNF
aUm
aUm
-vYR
aUm
aUm
+rZY
+wdo
+wdo
+wdo
+wdo
+wdo
+wdo
+geG
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+ipK
+qoB
+gCR
ajj
aaa
aaa
@@ -68704,25 +73516,22 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-kjb
kjb
kjb
kjb
xuY
-mmL
-wCl
+dgo
+kqL
hLW
uKw
iBc
-wCl
-mmL
+kqL
+iiV
xuY
kjb
kjb
kjb
-kjb
+aaa
aaa
aaa
aaa
@@ -68773,7 +73582,7 @@ aaa
aaa
aaa
"}
-(216,1,1) = {"
+(218,1,1) = {"
aaa
aaa
aaa
@@ -68826,73 +73635,76 @@ aPf
ayI
ayI
ayI
-aPf
ayI
+sGw
+ikb
+wmA
+jOc
+nXu
+wFe
+aHJ
+pny
+tjv
+lhF
+wqC
+xlP
+aNp
aPf
-aPf
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-aPf
-aPf
-aPf
-aFP
-aFP
-arT
-azY
-azY
-aBr
-aFP
-avb
-ahs
-aFP
-aAc
-aFP
-ahs
-aFP
-aFP
-azk
-alF
-aFP
-aFP
-aFP
-aFP
-aFP
-aBr
-aFP
-avb
-ahs
-aFP
-aAc
-aFP
-ahs
-aFP
-aFP
-azk
-alF
-aFP
-aAc
-aFP
-ahs
-aUm
+aqf
+hYP
+vFM
+xXU
+doA
+aqf
+vTT
+vTT
+dPJ
+vTT
+vTT
+vTT
+prH
+aKX
+aKX
+cqv
+vFM
+qUb
+xXU
+vTT
+avt
+amk
+pUQ
+aaY
+iHv
+uoM
+uoM
+uoM
+tIM
+pUQ
+gko
+kWr
+aRd
+ekp
aUm
+aqQ
aUm
aUm
aUm
+apX
aHZ
aQf
aQf
-aVv
-aRS
-aUm
-aUm
-aUm
-cZJ
+gjj
+axa
aUm
+xFU
+xFU
+xFU
+xFU
+xFU
+oei
+gCR
+gCR
+gCR
ajj
aaa
aaa
@@ -68961,25 +73773,22 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
kjb
kjb
kjb
xuY
-uYx
-kqL
+guS
+hIU
hLW
uKw
iBc
-kqL
-uYx
+hIU
+guS
xuY
kjb
kjb
kjb
-kjb
+aaa
aaa
aaa
aaa
@@ -69030,7 +73839,7 @@ aaa
aaa
aaa
"}
-(217,1,1) = {"
+(219,1,1) = {"
aaa
aaa
aaa
@@ -69080,76 +73889,79 @@ aaa
ajj
aPf
aPf
+tUL
ayI
+tUL
ayI
aPf
aPf
-ayI
-aPf
-aPf
-axA
-aLz
-aZq
-aTD
-aSt
-aIN
-axA
-aPf
+aGb
+bqT
+uAN
+gZK
+iro
+uWe
+tVM
+sSe
+amu
+aNg
+hbY
aPf
+aqf
+hYP
+fLD
+bYx
+doA
+aqf
+vTT
+grr
+aXR
+amD
+vIX
+vTT
+pGK
+gSD
+gSD
+vZv
+uMR
+xfD
+qWG
+vTT
+aaY
+aaY
+ovF
+uoM
+uoM
+uoM
+uoM
+aaY
+vXr
+vXr
+vXr
aFP
-aFP
-agy
-azY
-azY
-aFP
-ahU
-aIV
-ahQ
-aFP
-aFP
-agy
-aFB
-aFP
-aFP
-aFP
-aFP
-aeT
-akp
-auf
-aFP
-aFP
-ahU
-aFP
-aIV
-ahQ
-azY
-aFP
-agy
-aFB
-azY
-aFP
-aFP
-aFP
-aeT
-aFP
-agy
-aFB
-aFP
-aUm
+ekp
+ekp
aUm
aUm
+cZJ
aUm
apX
-aHZ
-aQf
+aSq
+ofJ
aQf
-gjj
-axa
-aUm
-aUm
-aRe
+aVv
+aHD
aUm
aUm
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+wZh
+mzs
+gCR
ajj
aaa
aaa
@@ -69218,20 +74030,17 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
kjb
kjb
kjb
xuY
-dgo
-kqL
-hLW
-uKw
-iBc
-kqL
-iiV
+xuY
+xuY
+guS
+nyr
+uYx
+xuY
+xuY
xuY
kjb
kjb
@@ -69287,7 +74096,7 @@ aaa
aaa
aaa
"}
-(218,1,1) = {"
+(220,1,1) = {"
aaa
aaa
aaa
@@ -69340,60 +74149,57 @@ aPf
ayI
ayI
ayI
-ayI
-ayI
+lgh
aPf
aPf
-sSe
-aCw
-aEX
-aPV
-aIN
-aIN
-axA
+pCd
+gxX
+gxX
+lMj
+cMM
+aGb
+hYn
+xlS
+hje
+iOt
+aGb
aPf
+aqf
+wZw
+dSf
+mRb
+eDy
+aqf
+vTT
+hrt
+aXR
+aXR
+nFi
+vTT
+pGK
+gSD
+gSD
+vZv
+uMR
+xfD
+qWG
+vTT
+uoM
+uoM
+uoM
+uoM
+uoM
+uoM
+uoM
+ovF
+aFP
+vXr
aFP
-aFP
-avb
-aFB
-azY
-aLH
-aFP
-axw
-aFP
-aFP
-aFP
-azk
-ahQ
-aNk
-arT
-aLH
-aFP
-aFB
-aFP
-axw
-aKu
-aQw
-aFP
-aFP
-axw
-aFP
-aFP
-aFP
-azk
-ahQ
-aNk
-arT
-aLH
-aFP
-aFB
-bAr
-azY
-aBr
-aFP
+ekp
+ekp
+aUm
aUm
aUm
-aDa
aUm
aUm
aSq
@@ -69401,16 +74207,19 @@ ofJ
aQf
aVv
aRS
-aqQ
-aUm
-nap
+axa
aUm
aUm
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+gCR
+gCR
+gCR
ajj
-ajj
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -69481,18 +74290,18 @@ aaa
kjb
kjb
kjb
+kjb
+kjb
xuY
-guS
-hIU
-hLW
-uKw
-iBc
+cuF
+kGL
hIU
-guS
xuY
kjb
kjb
kjb
+kjb
+kjb
aaa
aaa
aaa
@@ -69544,7 +74353,7 @@ aaa
aaa
aaa
"}
-(219,1,1) = {"
+(221,1,1) = {"
aaa
aaa
aaa
@@ -69594,74 +74403,76 @@ aaa
ajj
aPf
aPf
-tUL
+chT
ayI
-tUL
ayI
+ayI
+jiQ
aPf
+pCd
+gPD
+dMl
+xsf
+gea
aPf
aPf
-axA
-anz
-auQ
-aNF
-aIN
-aIN
-axA
-aFP
-aFP
-aFP
-aKu
-azY
-azY
-aCM
-aFP
-aFP
-aFP
-akp
-aFP
-aFP
-aFP
-aFV
-avb
-aFP
-ahQ
-aIE
-aNk
-asX
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-akp
-aFP
-aFP
-aFP
-aFV
-avb
-aFP
-ahQ
-aIE
-aNk
+lMY
+jDf
+rjg
+aPf
+aPf
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+vTT
+lhh
+ikn
+aXR
+nFi
+vTT
+hYA
+uUf
+aNz
+bvA
+fLD
+awv
+bYx
+vTT
+uoM
+uoM
+uoM
+qNZ
+uoM
+aMG
+wns
aFP
aFP
-ahQ
+ekp
+ekp
+ekp
+aUm
+aUm
+aUm
aUm
aUm
-anr
aUm
-aqQ
aHZ
aQf
-aVv
-aRS
-aUr
+aQf
+gjj
+aOO
aUm
-sQX
aUm
aUm
+xFU
+xFU
+qpu
+qwo
+tyG
+iwF
ajj
ajj
ajj
@@ -69734,22 +74545,20 @@ aaa
aaa
aaa
aaa
-aaa
+kjb
kjb
kjb
kjb
xuY
xuY
xuY
-guS
-nyr
-uYx
-xuY
xuY
xuY
kjb
kjb
kjb
+kjb
+aaa
aaa
aaa
aaa
@@ -69801,7 +74610,7 @@ aaa
aaa
aaa
"}
-(220,1,1) = {"
+(222,1,1) = {"
aaa
aaa
aaa
@@ -69851,76 +74660,78 @@ aaa
ajj
aPf
aPf
+vQH
ayI
ayI
ayI
-lgh
+rfx
aPf
+aGb
+pCd
+pCd
+aGb
+kvU
aPf
aPf
-axA
-axA
-axA
-aIN
-aIN
-aIN
-amU
-azY
-azY
-azY
-azY
-azY
-aFP
-aFP
-aFP
-aFP
-aFP
-aMJ
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aVA
-aFP
-aFP
-aMJ
-aFP
-aFP
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aMJ
-aeT
-aFP
-xsM
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+vTT
+ekp
+ekp
+ekp
+mon
+sUC
+vXr
+gko
+vXr
+aZs
+ekp
aUm
-rZY
-ggb
-ggb
-ggb
-ggb
-ggb
-ggb
-geG
-xFU
-xFU
-xFU
-xFU
-xFU
-rPm
+aUm
+aUm
+aUm
+aUm
+aUm
+cZJ
+aSq
+ofJ
+aQf
+aVv
+aRS
+aUm
+aUm
+dIw
+aUm
+kPg
+gCR
+gCR
+gCR
+gCR
+gCR
+gCR
+gCR
gCR
gCR
gCR
@@ -69997,16 +74808,14 @@ kjb
kjb
kjb
kjb
-xuY
-cuF
-kGL
-hIU
-xuY
kjb
kjb
kjb
kjb
kjb
+kjb
+kjb
+aaa
aaa
aaa
aaa
@@ -70058,7 +74867,7 @@ aaa
aaa
aaa
"}
-(221,1,1) = {"
+(223,1,1) = {"
aaa
aaa
aaa
@@ -70108,78 +74917,80 @@ aaa
ajj
aPf
aPf
-chT
ayI
+wnj
ayI
ayI
-jiQ
aPf
aPf
-axA
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+aPf
+ajj
+aaa
+aaa
+aaa
+aaa
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ekp
+ekp
+roh
+iJK
alb
-aOY
-aIN
-aIN
-aIN
-axA
-awU
-aFP
-aFP
-aFP
-aFP
-aFV
-ahQ
-aFP
-aFP
-aFP
-aFP
-alF
-aFP
-aFP
-aFP
-aMJ
-aFP
-asF
-aFP
-aeT
-ayd
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-alF
-aFP
-aFP
-aFP
-aFP
-aFP
-asF
-aFP
-aeT
-aFP
-aFP
-aFP
+ekp
+ekp
+ekp
aUm
aUm
-rZY
-wdo
-wdo
-wdo
-wdo
-wdo
-wdo
-geG
-xFU
-xFU
-xFU
-xFU
-xFU
+aUm
+aUm
+aSq
+uxW
+uxW
+ofJ
+aQf
+aQf
+gjj
+aGw
+aUm
+aUm
+aUm
+pZn
xFU
-ipK
-qoB
+gCR
+lXo
+aAO
+bhr
+pKF
+ncr
+gCR
+avn
+dcP
gCR
ajj
aaa
@@ -70249,20 +75060,18 @@ aaa
aaa
aaa
aaa
-aaa
kjb
kjb
kjb
kjb
-xuY
-xuY
-xuY
-xuY
-xuY
kjb
kjb
kjb
kjb
+kjb
+kjb
+kjb
+aaa
aaa
aaa
aaa
@@ -70315,7 +75124,7 @@ aaa
aaa
aaa
"}
-(222,1,1) = {"
+(224,1,1) = {"
aaa
aaa
aaa
@@ -70365,78 +75174,80 @@ aaa
ajj
aPf
aPf
-vQH
-ayI
-ayI
-ayI
-rfx
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
aPf
aPf
-axA
-pGK
-axA
-aIN
-aWp
-aJP
-axA
aPf
aPf
-aFP
-aFP
-aAc
-aFP
-aFP
-azk
-auf
-ahA
-agy
-aIV
-ahQ
-aFB
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-azk
-aFP
-ahA
-agy
-aIV
-ahQ
-aFB
-aFP
-aFP
-aFP
-aLH
-aFP
-aFP
-aFP
-aFP
-aUm
-aUm
+aPf
+aPf
+aPf
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+ajj
+aXW
aUm
aUm
-apX
-aHZ
+sQX
+ajj
+ajj
+ekp
+ekp
+ekp
+ekp
+ekp
+ajj
+ajj
+axJ
+axJ
+axJ
+aSq
+ofJ
aQf
aQf
-gjj
+aQf
+aQf
+aVv
+aRS
axa
+rPh
+dOC
+crI
aUm
-xFU
-xFU
-xFU
-xFU
-xFU
-oei
-gCR
-gCR
+uCw
+bXF
+noq
+noq
+noq
+noq
+noq
+kGT
+aNY
+cwh
gCR
ajj
aaa
@@ -70516,10 +75327,8 @@ kjb
kjb
kjb
kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
aaa
aaa
aaa
@@ -70572,7 +75381,7 @@ aaa
aaa
aaa
"}
-(223,1,1) = {"
+(225,1,1) = {"
aaa
aaa
aaa
@@ -70622,78 +75431,80 @@ aaa
ajj
aPf
aPf
-ayI
-wnj
-ayI
-ayI
-aPf
-aPf
-aPf
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-aPf
-aPf
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+aiA
+xWg
aPf
-aLH
-aFP
-aFP
-aFP
-asX
-aFV
-aFP
-aFP
-aBr
-atQ
-aFP
-aLH
-aFP
-aWj
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-asX
-aFV
-auf
-aFP
-aBr
-atQ
-aFP
-aLH
-aFP
-aWj
-aFP
-aTu
-aFP
-aFP
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+aEO
+aXA
aUm
aUm
aUm
aUm
-apX
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
aSq
+uxW
+uxW
ofJ
aQf
aVv
-aHD
+twL
+twL
+twL
+aRS
aUm
+axa
+lCi
+vgx
+srS
aUm
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-wZh
-mzs
+uCw
+bXF
+noq
+iwU
+tHO
+noq
+vuq
+gCR
+qnA
+aNY
gCR
ajj
aaa
@@ -70765,17 +75576,15 @@ aaa
aaa
aaa
aaa
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -70829,7 +75638,7 @@ aaa
aaa
aaa
"}
-(224,1,1) = {"
+(226,1,1) = {"
aaa
aaa
aaa
@@ -70885,72 +75694,74 @@ aiA
aiA
aiA
aiA
+aiA
+aiA
+aiA
aPf
+ayI
+ayI
aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-aFP
-aFP
-aFB
-aFP
-aFP
-arT
-aLH
-ayd
-aFP
-aKu
-aFP
-aAc
-aFP
-azk
-aFP
-aFP
-aFP
-aAz
-asF
-aFP
-aFP
-aFP
-arT
-aLH
-ayd
-aFP
-aKu
-aFP
-aAc
-aFP
-aFP
-aFP
-aFP
-aUm
-aUm
-aRe
-pcp
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
aUm
aSq
+uxW
+uxW
+uxW
+aRL
+aKP
+aUm
+ajj
+ajj
+ajj
+ajj
+ifp
+gUC
ofJ
aQf
+aQf
+aQf
aVv
aRS
-axa
+aOO
+aUr
+aUr
+aUr
+aUr
aUm
aUm
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
+aUm
+aUm
+aUm
+uCw
+fbn
+noq
+noq
+noq
+noq
+ueC
gCR
gCR
+tVg
gCR
ajj
aaa
@@ -71024,14 +75835,12 @@ aaa
aaa
aaa
aaa
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
-kjb
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -71086,7 +75895,7 @@ aaa
aaa
aaa
"}
-(225,1,1) = {"
+(227,1,1) = {"
aaa
aaa
aaa
@@ -71141,76 +75950,76 @@ aiA
aiA
aiA
aiA
-aPf
-aiA
aiA
aiA
aiA
aiA
-xWg
aPf
aPf
-pNf
aPf
aPf
-aFP
-aFP
-aFP
-avb
-aeT
-aFP
-aMJ
-aFP
-aFP
-aFP
-aFP
-aFP
-azk
-auf
-aLH
-aFP
-aTu
-aBr
-aFP
-aFP
-aFP
-aeT
-aFP
-aFP
-aMJ
-aFP
-aFP
-aFP
-azk
-aFP
-aFP
-aLH
-aFP
ajj
-aUm
-axJ
-axJ
-axJ
-anQ
-aHZ
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+aSq
+ofJ
aQf
aQf
-gjj
+aQf
+aQf
+aGB
+uxW
+uxW
+ajj
+lkn
+fTV
+fTV
+fTV
+lkn
+aVv
+twL
+twL
+aRS
aOO
aUm
+eEg
aUm
+nDE
+aUm
+aUm
+aUm
+cZJ
+vYR
aUm
xFU
-xFU
-qpu
-qwo
-tyG
-iwF
-ajj
-ajj
-ajj
-ajj
-ajj
+gCR
+tBo
+noq
+noq
+noq
+qWA
+gCR
+erP
+aNY
+gCR
ajj
aaa
aaa
@@ -71343,7 +76152,7 @@ aaa
aaa
aaa
"}
-(226,1,1) = {"
+(228,1,1) = {"
aaa
aaa
aaa
@@ -71402,67 +76211,67 @@ aiA
aiA
aiA
aiA
+aiA
aPf
-ayI
-ayI
-aPf
-aPf
-aFP
-awV
-aFP
-aFP
-aFP
-ahQ
-aTB
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aeT
-aFP
-ahA
-aFP
-aFP
-aFP
-aFP
-aIE
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aeT
-aFP
-ahA
-aFP
ajj
ajj
-axJ
-axJ
-aSq
-uxW
-uxW
-ofJ
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+ajj
+aHZ
aQf
-aVv
+aQf
+aQf
+aQf
+aQf
+aQf
+aQf
+aQf
+tEg
+aQf
+lkn
+fTV
+mMx
+twL
aRS
aUm
+aAS
+aUr
aUm
-dIw
+mzR
+eEg
+fRe
+nDE
aUm
-kPg
-gCR
-gCR
-gCR
+aDa
+aUm
+aUm
+anr
+aUm
+xFU
gCR
gCR
+uYJ
+bXF
+cBm
gCR
gCR
gCR
@@ -71600,7 +76409,7 @@ aaa
aaa
aaa
"}
-(227,1,1) = {"
+(229,1,1) = {"
aaa
aaa
aaa
@@ -71650,80 +76459,80 @@ aaa
ajj
aPf
aPf
+aPf
aiA
aiA
aiA
+aPf
aiA
aiA
aiA
aiA
aiA
-aiA
-aPf
-aPf
-aPf
aPf
-aFP
-aFP
-aPf
-aPf
-aMJ
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aMJ
-aFP
-aFP
-aFP
-aFP
-aFP
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-ajj
ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
ajj
-axJ
-axJ
-aSq
-ofJ
+aHZ
aQf
aQf
aQf
aQf
-gjj
-aGw
+aQf
+aQf
+aQf
+aQf
+tEg
+aQf
+aQf
+lkn
+ajj
+ajj
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+sQX
aUm
aUm
aUm
-pZn
+xFU
+hAW
+xFU
+cVK
+cVK
xFU
gCR
-lXo
-aAO
-bhr
-pKF
-ncr
-gCR
-avn
-dcP
+hoV
+noq
+aNe
gCR
ajj
aaa
@@ -71857,7 +76666,7 @@ aaa
aaa
aaa
"}
-(228,1,1) = {"
+(230,1,1) = {"
aaa
aaa
aaa
@@ -71907,20 +76716,10 @@ aaa
ajj
aPf
aPf
-aiA
-aiA
-aiA
-aiA
-aiA
aPf
-aiA
-aiA
-aPf
-aiA
aPf
aPf
aPf
-aFP
aPf
aPf
aPf
@@ -71928,59 +76727,69 @@ aPf
aPf
aPf
aPf
-aPf
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-aFP
-ajj
-ajj
-aXW
-aUm
-aUm
-sQX
-ajj
-ajj
-aFP
-aFP
-aFP
-aFP
-aFP
ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
ajj
-axJ
-axJ
-axJ
-aSq
-ofJ
-aQf
+aCv
+twL
+bFi
aQf
aQf
aQf
aVv
-aRS
-axa
-rPh
-dOC
-crI
+twL
+twL
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
aUm
-uCw
-bXF
-noq
-noq
-noq
+vYR
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+aUm
+fQt
+aUm
+aRe
+aUm
+aUm
+kMe
+xFU
+xFU
+xFU
+xFU
+xFU
+ckg
noq
noq
-kGT
-aNY
-cwh
+qTu
gCR
ajj
aaa
@@ -72114,7 +76923,7 @@ aaa
aaa
aaa
"}
-(229,1,1) = {"
+(231,1,1) = {"
aaa
aaa
aaa
@@ -72162,48 +76971,7 @@ aaa
aaa
aaa
ajj
-aPf
-aPf
-aPf
-aiA
-aiA
-aiA
-aPf
-aiA
-aiA
-aiA
-aiA
-aiA
-aPf
-aPf
-aPf
-aFP
-aFP
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-aFP
-aFP
-aFP
-aFP
-aPf
-aPf
ajj
-aEO
-aXA
-aUm
-aUm
-aUm
-aUm
ajj
ajj
ajj
@@ -72212,32 +76980,73 @@ ajj
ajj
ajj
ajj
-aSq
-uxW
-uxW
-ofJ
-aQf
-aVv
+ajj
+ajj
+ajj
+ajj
+ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aSP
+aSP
+aSP
+aSP
+aUm
+aUm
+aCv
twL
twL
twL
aRS
aUm
-axa
-lCi
-vgx
-srS
aUm
-uCw
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+aUm
+cZJ
+aUm
+aDa
+sQX
+aUm
+aUm
+aUm
+aUm
+aUm
+upo
+hoi
+aUm
+upo
+hoi
+xFU
+aLW
+aLW
+aLW
+mEW
bXF
noq
-iwU
-tHO
noq
-vuq
-gCR
-qnA
-aNY
+fTu
gCR
ajj
aaa
@@ -72371,7 +77180,7 @@ aaa
aaa
aaa
"}
-(230,1,1) = {"
+(232,1,1) = {"
aaa
aaa
aaa
@@ -72418,83 +77227,83 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aFP
-aqP
-aWo
-aPf
-aPf
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aSP
+aqf
+aqf
+aqf
+aqf
+aUm
+aUm
+anr
+aUm
+ydM
+aUm
+aUm
ajj
ajj
ajj
-aPf
-aPf
-aPf
+jNB
+ydM
+fwr
ajj
ajj
aUm
aUm
-aSq
-uxW
-uxW
-uxW
-aRL
-aKP
aUm
-ajj
-ajj
-ajj
-ajj
-ifp
-gUC
-ofJ
-aQf
-aQf
-aQf
-aVv
-aRS
-aOO
-aUr
-aUr
-aUr
-aUr
aUm
aUm
aUm
aUm
aUm
-uCw
-fbn
-noq
-noq
+dIw
+aUm
+aqe
+aqe
+aUm
+aqe
+niQ
+xFU
+aLW
+aLW
+aLW
+mEW
+bXF
noq
noq
-ueC
-gCR
-gCR
-tVg
+qaO
gCR
ajj
aaa
@@ -72627,8 +77436,41 @@ aaa
aaa
aaa
aaa
-"}
-(231,1,1) = {"
+"}
+(233,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -72675,83 +77517,50 @@ aaa
aaa
aaa
aaa
+aSP
+aqf
+sNs
+feR
+aqf
+grX
+jZH
+aUm
+aRe
+aUm
+aUm
+aUm
ajj
ajj
ajj
+cZJ
+tLu
+aUm
ajj
ajj
-ajj
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-axA
-axA
-axA
-aYO
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-ajj
-ajj
-ajj
-ajj
-asz
+dIw
aUm
-aSq
-ofJ
-aQf
-aQf
-aQf
-aQf
-aGB
-uxW
-uxW
-ajj
-lkn
-fTV
-fTV
-fTV
-lkn
-aVv
-twL
-twL
-aRS
-aOO
aUm
-eEg
aUm
-nDE
aUm
aUm
aUm
-cZJ
-vYR
aUm
+aUm
+aUm
+mJG
+lwc
+aUm
+mJG
+lwc
xFU
-gCR
-tBo
-noq
+aLW
+aLW
+aLW
+fwc
+bXF
noq
noq
-qWA
-gCR
-erP
-aNY
+adt
gCR
ajj
aaa
@@ -72885,7 +77694,7 @@ aaa
aaa
aaa
"}
-(232,1,1) = {"
+(234,1,1) = {"
aaa
aaa
aaa
@@ -72938,77 +77747,77 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-aAv
-atF
-atF
-atF
-avt
-amk
-aSV
-axA
-axA
-aNd
-aOY
-aSC
-afs
-hTD
-axA
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aSP
+aqf
+hVq
+aUo
+aqf
+jvm
+aqf
aUm
aUm
-aNq
aUm
aUm
+ajj
+ajj
+ajj
+ajj
+cZJ
+wZS
+aUm
+jzL
+vEs
+dIw
aUm
-aHZ
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-tEg
-aQf
-lkn
-fTV
-mMx
-twL
-aRS
aUm
-aAS
-aUr
aUm
-mzR
-eEg
-fRe
-nDE
aUm
-aDa
aUm
aUm
-anr
aUm
xFU
+puo
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
+xFU
gCR
-gCR
-uYJ
-bXF
-cBm
-gCR
-gCR
-gCR
-gCR
+jAH
+noq
+mIk
gCR
ajj
aaa
@@ -73142,7 +77951,7 @@ aaa
aaa
aaa
"}
-(233,1,1) = {"
+(235,1,1) = {"
aaa
aaa
aaa
@@ -73195,77 +78004,77 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-lNi
-atF
-aEm
-atF
-hea
-abK
-aFK
-axA
-axA
-aVC
-axA
-aSC
-aSC
-alW
-sSe
-aSZ
-aUm
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aSP
+aqf
+sXR
+uMR
+aNq
+aUo
+aqf
aUm
aUm
aUm
aUm
-aHZ
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-aQf
-tEg
-aQf
-aQf
-lkn
ajj
ajj
+ajj
+ajj
+jNB
aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-sQX
-aUm
-aUm
-aUm
-xFU
-hAW
-xFU
-cVK
-cVK
-xFU
+fwr
+ajj
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+kDh
+gMw
+lJK
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+pzq
+gMw
+iCz
+gMw
+gCR
+gCR
+gCR
gCR
-hoV
-noq
-aNe
gCR
ajj
aaa
@@ -73398,8 +78207,35 @@ aaa
aaa
aaa
aaa
-"}
-(234,1,1) = {"
+"}
+(236,1,1) = {"
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -73452,46 +78288,15 @@ aaa
aaa
aaa
aaa
+aSP
+aqf
+mJB
+uMR
+lwt
+lwt
+aqf
+ajj
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-aiD
-atF
-aQE
-atF
-abK
-abK
-aqw
-axA
-axA
-axA
-axA
-axA
-aNa
-axA
-axA
-axA
-aTG
-axA
-axA
-aUm
-aUm
-aCv
-twL
-bFi
-aQf
-aQf
-aQf
-aVv
-twL
-twL
ajj
ajj
ajj
@@ -73499,31 +78304,35 @@ ajj
ajj
ajj
ajj
-aUm
-vYR
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-fQt
-aUm
-aRe
-aUm
-aUm
-kMe
-xFU
-xFU
-xFU
-xFU
-xFU
-ckg
-noq
-noq
-qTu
-gCR
+ajj
+ajj
+ajj
+gMw
+vsW
+gMw
+yev
+haE
+xxv
+jBF
+jIj
+jIj
+boa
+gMw
+vsW
+gMw
+pMT
+wrf
+xxv
+vYz
+jIj
+jIj
+lct
+gMw
+ajj
+ajj
+ajj
+ajj
+ajj
ajj
aaa
aaa
@@ -73656,7 +78465,7 @@ aaa
aaa
aaa
"}
-(235,1,1) = {"
+(237,1,1) = {"
aaa
aaa
aaa
@@ -73709,89 +78518,6 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-axC
-aJX
-aNT
-atF
-aZU
-ajR
-axF
-axA
-ajj
-ajj
-axA
-ahI
-atF
-atF
-aNp
-aXR
-atF
-aRo
-axA
-aUm
-aUm
-aUm
-aUm
-aCv
-twL
-twL
-twL
-aRS
-aUm
-aUm
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-aUm
-cZJ
-aUm
-aDa
-sQX
-aUm
-aUm
-aUm
-aUm
-aUm
-upo
-hoi
-aUm
-upo
-hoi
-xFU
-aLW
-aLW
-aLW
-mEW
-bXF
-noq
-noq
-fTu
-gCR
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -73819,6 +78545,14 @@ aaa
aaa
aaa
aaa
+aSP
+aqf
+xRx
+kWI
+tYP
+mgY
+aqf
+aSP
aaa
aaa
aaa
@@ -73829,6 +78563,29 @@ aaa
aaa
aaa
aaa
+ajj
+gMw
+wBX
+aOY
+haE
+haE
+gMw
+jIj
+knL
+tYk
+tBN
+gMw
+wBX
+aOY
+wrf
+wrf
+gMw
+jIj
+knL
+wId
+tBN
+gMw
+ajj
aaa
aaa
aaa
@@ -73912,8 +78669,6 @@ aaa
aaa
aaa
aaa
-"}
-(236,1,1) = {"
aaa
aaa
aaa
@@ -73966,80 +78721,8 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-axA
-axA
-axA
-aNa
-axA
-axA
-axA
-axA
-ajj
-ajj
-axA
-aAd
-atF
-anD
-aSV
-atF
-atF
-atF
-aGb
-aUm
-aRe
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-ajj
-ajj
-ajj
-jNB
-ydM
-fwr
-ajj
-ajj
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-dIw
-aUm
-aqe
-aqe
-aUm
-aqe
-niQ
-xFU
-aLW
-aLW
-aLW
-mEW
-bXF
-noq
-noq
-qaO
-gCR
-ajj
-aaa
+"}
+(238,1,1) = {"
aaa
aaa
aaa
@@ -74119,6 +78802,14 @@ aaa
aaa
aaa
aaa
+aSP
+aqf
+aqf
+aqf
+aqf
+aqf
+aqf
+aSP
aaa
aaa
aaa
@@ -74129,6 +78820,29 @@ aaa
aaa
aaa
aaa
+ajj
+gMw
+aVC
+gMw
+ehI
+lQB
+gMw
+jIj
+epr
+yea
+lIy
+gMw
+aVC
+gMw
+sZM
+uNg
+gMw
+jIj
+epr
+yea
+lIy
+gMw
+ajj
aaa
aaa
aaa
@@ -74169,8 +78883,6 @@ aaa
aaa
aaa
aaa
-"}
-(237,1,1) = {"
aaa
aaa
aaa
@@ -74223,79 +78935,6 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-awt
-aTv
-axA
-atF
-axA
-aTv
-awt
-axA
-ajj
-ajj
-axA
-atF
-atF
-aCQ
-abK
-abK
-atF
-atF
-aGb
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aRe
-aUm
-aUm
-aUm
-ajj
-ajj
-ajj
-cZJ
-tLu
-aUm
-ajj
-ajj
-dIw
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-mJG
-lwc
-aUm
-mJG
-lwc
-xFU
-aLW
-aLW
-aLW
-fwc
-bXF
-noq
-noq
-adt
-gCR
-ajj
aaa
aaa
aaa
@@ -74339,6 +78978,8 @@ aaa
aaa
aaa
aaa
+"}
+(239,1,1) = {"
aaa
aaa
aaa
@@ -74418,6 +79059,14 @@ aaa
aaa
aaa
aaa
+aSP
+aSP
+aSP
+aSP
+aSP
+aSP
+aSP
+aSP
aaa
aaa
aaa
@@ -74426,10 +79075,31 @@ aaa
aaa
aaa
aaa
-"}
-(238,1,1) = {"
aaa
aaa
+ajj
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+gMw
+ajj
aaa
aaa
aaa
@@ -74480,79 +79150,6 @@ aaa
aaa
aaa
aaa
-ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-axA
-aWy
-atF
-axA
-atF
-axA
-atF
-aKX
-axA
-ajj
-ajj
-axA
-agA
-atF
-aII
-aLu
-abK
-atF
-atF
-aGb
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-ajj
-ajj
-ajj
-ajj
-cZJ
-wZS
-aUm
-jzL
-vEs
-dIw
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-aUm
-xFU
-puo
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-xFU
-gCR
-jAH
-noq
-mIk
-gCR
-ajj
aaa
aaa
aaa
@@ -74638,6 +79235,8 @@ aaa
aaa
aaa
aaa
+"}
+(240,1,1) = {"
aaa
aaa
aaa
@@ -74683,8 +79282,6 @@ aaa
aaa
aaa
aaa
-"}
-(239,1,1) = {"
aaa
aaa
aaa
@@ -74738,77 +79335,27 @@ aaa
aaa
aaa
ajj
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-aPf
-skM
-afy
-atF
-aNa
-apW
-aNa
-atF
-auP
-axA
ajj
ajj
-axA
-bVx
-atF
-amD
-abK
-abK
-atF
-ybu
-axA
-aUm
-aUm
-aNq
-aRe
-aUm
-aUm
-aUm
-aUm
-aUm
ajj
ajj
ajj
ajj
-jNB
-aUm
-fwr
ajj
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-kDh
-gMw
-lJK
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-pzq
-gMw
-iCz
-gMw
-gCR
-gCR
-gCR
-gCR
-gCR
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
+ajj
ajj
aaa
aaa
@@ -74940,150 +79487,13 @@ aaa
aaa
aaa
aaa
-"}
-(240,1,1) = {"
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-vZv
-axA
-ajj
-ajj
-axA
-aiD
-atF
-aer
-axF
-atF
-atF
-aKX
-axA
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-gMw
-vsW
-gMw
-yev
-haE
-xxv
-jBF
-jIj
-jIj
-boa
-gMw
-vsW
-gMw
-pMT
-wrf
-xxv
-vYz
-jIj
-jIj
-lct
-gMw
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
aaa
aaa
+"}
+(241,1,1) = {"
aaa
aaa
aaa
@@ -75197,8 +79607,6 @@ aaa
aaa
aaa
aaa
-"}
-(241,1,1) = {"
aaa
aaa
aaa
@@ -75271,15 +79679,6 @@ aaa
aaa
aaa
aaa
-axA
-axC
-atF
-aNB
-atF
-atF
-atF
-atF
-axA
aaa
aaa
aaa
@@ -75296,29 +79695,6 @@ aaa
aaa
aaa
aaa
-ajj
-gMw
-wBX
-aOY
-haE
-haE
-gMw
-jIj
-knL
-tYk
-tBN
-gMw
-wBX
-aOY
-wrf
-wrf
-gMw
-jIj
-knL
-wId
-tBN
-gMw
-ajj
aaa
aaa
aaa
@@ -75373,6 +79749,8 @@ aaa
aaa
aaa
aaa
+"}
+(242,1,1) = {"
aaa
aaa
aaa
@@ -75454,8 +79832,6 @@ aaa
aaa
aaa
aaa
-"}
-(242,1,1) = {"
aaa
aaa
aaa
@@ -75528,15 +79904,6 @@ aaa
aaa
aaa
aaa
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
-axA
aaa
aaa
aaa
@@ -75553,32 +79920,6 @@ aaa
aaa
aaa
aaa
-ajj
-gMw
-aVC
-gMw
-ehI
-lQB
-gMw
-jIj
-epr
-yea
-lIy
-gMw
-aVC
-gMw
-sZM
-uNg
-gMw
-jIj
-epr
-yea
-lIy
-gMw
-ajj
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -75665,6 +80006,8 @@ aaa
aaa
aaa
aaa
+"}
+(243,1,1) = {"
aaa
aaa
aaa
@@ -75711,8 +80054,6 @@ aaa
aaa
aaa
aaa
-"}
-(243,1,1) = {"
aaa
aaa
aaa
@@ -75810,29 +80151,6 @@ aaa
aaa
aaa
aaa
-ajj
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-gMw
-ajj
aaa
aaa
aaa
@@ -75945,6 +80263,8 @@ aaa
aaa
aaa
aaa
+"}
+(244,1,1) = {"
aaa
aaa
aaa
@@ -75968,8 +80288,6 @@ aaa
aaa
aaa
aaa
-"}
-(244,1,1) = {"
aaa
aaa
aaa
@@ -76067,29 +80385,6 @@ aaa
aaa
aaa
aaa
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
-ajj
aaa
aaa
aaa
diff --git a/_maps/shuttles/emergency_tranquility.dmm b/_maps/shuttles/emergency_tranquility.dmm
index b2a15c5df11..5458e59c843 100644
--- a/_maps/shuttles/emergency_tranquility.dmm
+++ b/_maps/shuttles/emergency_tranquility.dmm
@@ -716,7 +716,7 @@
/turf/open/floor/grass,
/area/shuttle/escape)
"nQ" = (
-/mob/living/simple_animal/bot/hygienebot,
+/mob/living/basic/bot/hygienebot,
/turf/open/floor/wood,
/area/shuttle/escape)
"nV" = (
diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm
index 7188b8bd3c0..9f8cc92dd22 100644
--- a/_maps/shuttles/ruin_cyborg_mothership.dmm
+++ b/_maps/shuttles/ruin_cyborg_mothership.dmm
@@ -585,7 +585,7 @@
/turf/open/floor/iron/showroomfloor,
/area/shuttle/ruin/cyborg_mothership)
"Fe" = (
-/mob/living/simple_animal/bot/hygienebot,
+/mob/living/basic/bot/hygienebot,
/obj/machinery/camera/directional/south,
/turf/open/floor/iron/showroomfloor,
/area/shuttle/ruin/cyborg_mothership)
diff --git a/_maps/skyrat/automapper/automapper_config.toml b/_maps/skyrat/automapper/automapper_config.toml
index 00c9ae33593..e5fec573ebe 100644
--- a/_maps/skyrat/automapper/automapper_config.toml
+++ b/_maps/skyrat/automapper/automapper_config.toml
@@ -352,14 +352,6 @@ required_map = "north_star.dmm"
coordinates = [121, 109, 4]
trait_name = "Station"
-# Northstar Prison
-[templates.northstar_prison]
-map_files = ["northstar_prison.dmm"]
-directory = "_maps/skyrat/automapper/templates/northstar/"
-required_map = "north_star.dmm"
-coordinates = [149, 109, 4]
-trait_name = "Station"
-
# Northstar NTR Office
[templates.northstar_ntrep_office]
map_files = ["northstar_ntrep_office.dmm"]
diff --git a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm
index e488cbeb684..b85cc42558b 100644
--- a/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm
+++ b/_maps/skyrat/automapper/templates/mining/lavaland_ashwalker_nenest.dmm
@@ -140,7 +140,7 @@
/area/ruin/unpowered/ash_walkers)
"fd" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/glass/bottle/small{
@@ -194,7 +194,7 @@
dir = 1
},
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/screwdriver/ashwalker,
@@ -321,7 +321,7 @@
/area/ruin/unpowered/ash_walkers)
"kP" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/forging/billow/primitive,
@@ -424,7 +424,7 @@
/area/ruin/unpowered/ash_walkers)
"oH" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/forging/billow/primitive,
@@ -499,7 +499,7 @@
/area/ruin/unpowered/ash_walkers)
"sp" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/bedsheet/black{
@@ -523,7 +523,7 @@
/area/ruin/unpowered/ash_walkers)
"sN" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/stack/sheet/iron/twenty,
@@ -541,7 +541,7 @@
/area/ruin/unpowered/ash_walkers)
"un" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/structure/stone_tile/slab,
@@ -673,7 +673,7 @@
/area/ruin/unpowered/ash_walkers)
"xl" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/bowl/mushroom_bowl{
@@ -728,7 +728,7 @@
/area/ruin/unpowered/ash_walkers)
"yO" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/gun/ballistic/bow/longbow,
@@ -768,7 +768,7 @@
/area/ruin/unpowered/ash_walkers)
"zV" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/knife/combat/bone{
@@ -990,7 +990,7 @@
/area/ruin/unpowered/ash_walkers)
"Jx" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/bottle/nutrient/rh{
@@ -1298,7 +1298,7 @@
/area/ruin/unpowered/ash_walkers)
"UN" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/reagent_containers/cup/glass/bottle/lizardwine,
@@ -1344,7 +1344,7 @@
/area/ruin/unpowered/ash_walkers)
"Wn" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/claymore/bone,
@@ -1393,7 +1393,7 @@
/area/ruin/unpowered/ash_walkers)
"Xq" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/secateurs,
@@ -1406,7 +1406,7 @@
/area/ruin/unpowered/ash_walkers)
"XH" = (
/obj/structure/rack/shelf{
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi';
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi';
icon_state = "empty_shelf_1"
},
/obj/item/spear/bonespear,
diff --git a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm b/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm
deleted file mode 100644
index 403bebf29b0..00000000000
--- a/_maps/skyrat/automapper/templates/northstar/northstar_prison.dmm
+++ /dev/null
@@ -1,23 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/obj/machinery/cryopod/prison/directional/west{
- quiet = 1
- },
-/turf/template_noop,
-/area/template_noop)
-"r" = (
-/obj/machinery/cryopod/prison/directional/north,
-/turf/template_noop,
-/area/template_noop)
-"P" = (
-/turf/template_noop,
-/area/template_noop)
-
-(1,1,1) = {"
-r
-P
-P
-P
-P
-a
-"}
diff --git a/_maps/virtual_domains/skyrat_ancientmilsim.dmm b/_maps/virtual_domains/skyrat_ancientmilsim.dmm
index 86a71a32584..ab9984ae054 100644
--- a/_maps/virtual_domains/skyrat_ancientmilsim.dmm
+++ b/_maps/virtual_domains/skyrat_ancientmilsim.dmm
@@ -434,7 +434,7 @@
dir = 1;
name = "vehicle console";
icon_screen = "shuttle";
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi';
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi';
icon_state = "intercom";
desc = "An armored vehicle control computer. Doesn't work anymore... who would've thought.";
density = 0;
diff --git a/_maps/virtual_domains/wendigo.dmm b/_maps/virtual_domains/wendigo.dmm
index 9d57c242aff..57c002c148c 100644
--- a/_maps/virtual_domains/wendigo.dmm
+++ b/_maps/virtual_domains/wendigo.dmm
@@ -1,1375 +1,1651 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
+"aa" = (
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"b" = (
+"ab" = (
/turf/closed/indestructible/rock/snow/ice/ore,
/area/icemoon/underground/explored/virtual_domain)
-"e" = (
-/turf/open/misc/asteroid/snow/ice/icemoon,
+"ac" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
/area/icemoon/underground/explored/virtual_domain)
-"f" = (
-/obj/structure/marker_beacon/olive,
+"ad" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"i" = (
+"ae" = (
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"ag" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"ah" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"ai" = (
/turf/closed/indestructible/binary,
/area/icemoon/underground/explored/virtual_domain)
-"o" = (
-/obj/structure/marker_beacon/indigo,
+"aj" = (
+/obj/effect/mob_spawn/corpse/human/cargo_tech,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"ak" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"p" = (
-/obj/structure/marker_beacon/bronze,
+"al" = (
+/obj/structure/flora/rock/pile/icy/style_3,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"am" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"q" = (
-/obj/structure/marker_beacon/yellow,
+"an" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"ar" = (
+/obj/structure/flora/tree/stump,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"as" = (
+/turf/closed/indestructible/necropolis,
+/area/icemoon/underground/explored/virtual_domain)
+"au" = (
+/obj/structure/flora/rock/pile/icy/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"av" = (
+/obj/structure/flora/grass/brown/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"aw" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"t" = (
-/obj/structure/marker_beacon/teal,
+"ay" = (
+/obj/effect/mob_spawn/corpse/human/bitrunner,
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"x" = (
-/obj/structure/marker_beacon/burgundy,
+"az" = (
+/obj/effect/turf_decal/weather/snow/corner,
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"A" = (
+"aA" = (
/obj/effect/baseturf_helper/virtual_domain,
/turf/template_noop,
/area/virtual_domain/safehouse)
-"E" = (
-/obj/effect/mob_spawn/corpse/human/miner,
-/turf/open/misc/asteroid/snow/ice/icemoon,
+"aB" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/structure/holosign/barrier,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aC" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aD" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
/area/icemoon/underground/explored/virtual_domain)
-"H" = (
+"aF" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/effect/mob_spawn/corpse/human/bitrunner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aG" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aH" = (
/mob/living/simple_animal/hostile/megafauna/wendigo,
/turf/open/indestructible/necropolis{
initial_gas_mix = "ICEMOON_ATMOS"
},
/area/icemoon/underground/explored/virtual_domain)
-"L" = (
+"aI" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aJ" = (
+/obj/effect/decal/cleanable/blood/gibs/torso,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aK" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aL" = (
/obj/effect/baseturf_helper/virtual_domain,
/turf/closed/indestructible/binary,
/area/icemoon/underground/explored/virtual_domain)
-"R" = (
+"aM" = (
+/obj/effect/decal/cleanable/blood/gibs/core,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aN" = (
+/obj/structure/flora/grass/brown/style_random,
+/obj/structure/holosign/barrier,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"aO" = (
+/obj/effect/mob_spawn/corpse/human/cyber_police,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aP" = (
+/obj/structure/flora/rock/pile/icy/style_random,
+/obj/structure/flora/grass/brown/style_random,
+/turf/open/misc/asteroid/snow/icemoon,
+/area/icemoon/underground/explored/virtual_domain)
+"aQ" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aR" = (
/obj/item/paper/crumpled/bloody{
default_raw_text = "for your own sake, do not enter"
},
-/turf/open/misc/asteroid/snow/ice/icemoon,
+/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/underground/explored/virtual_domain)
-"S" = (
+"aS" = (
/turf/template_noop,
/area/template_noop)
-"V" = (
+"aT" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aU" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aV" = (
/turf/template_noop,
/area/virtual_domain/safehouse)
-"Z" = (
+"aW" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aX" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aY" = (
+/obj/effect/decal/cleanable/blood/drip{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"aZ" = (
/obj/modular_map_root/safehouse{
key = "lavaland_boss"
},
/turf/template_noop,
/area/virtual_domain/safehouse)
+"bX" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"jc" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"lc" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"pl" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/mob_spawn/corpse/human/bitrunner,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"sn" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"KV" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/open/indestructible/necropolis{
+ initial_gas_mix = "ICEMOON_ATMOS"
+ },
+/area/icemoon/underground/explored/virtual_domain)
+"Vt" = (
+/obj/structure/flora/grass/brown/style_random,
+/turf/closed/indestructible/rock/snow/ice/ore,
+/area/icemoon/underground/explored/virtual_domain)
(1,1,1) = {"
-S
-S
-S
-S
-S
-S
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+aS
+aS
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(2,1,1) = {"
-S
-S
-S
-S
-S
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ar
+ae
+ae
+ad
+ag
+ae
+ae
+ae
+ar
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(3,1,1) = {"
-S
-S
-S
-S
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ad
+aI
+aI
+an
+aw
+ae
+ae
+ae
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(4,1,1) = {"
-S
-S
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-e
-e
-e
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+av
+ab
+ab
+ar
+ae
+au
+ad
+az
+ae
+ae
+ae
+ae
+av
+av
+ae
+ae
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(5,1,1) = {"
-S
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-L
+aS
+aS
+ai
+ai
+ae
+ae
+av
+ae
+ab
+ab
+ab
+ab
+ab
+aC
+aa
+ag
+ar
+ab
+ab
+ab
+ab
+ab
+ae
+au
+ae
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+aL
"}
(6,1,1) = {"
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-i
+aS
+ai
+ai
+ae
+ae
+ae
+av
+ab
+ab
+ab
+ab
+ab
+ab
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ar
+au
+ae
+ae
+ae
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(7,1,1) = {"
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ai
+ae
+ae
+ae
+au
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+as
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+av
+ae
+ae
+ae
+ai
+ae
+ae
+ae
+ae
+ad
+ag
+ae
+ae
+ai
"}
(8,1,1) = {"
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+ar
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ar
+aC
+aa
+az
+au
+ab
+ab
+ab
+ab
+ab
+ab
+ar
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+aQ
+aa
+aa
+ag
+ae
+ai
"}
(9,1,1) = {"
-i
-e
-e
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+av
+ab
+ab
+ab
+ab
+ab
+av
+ae
+ae
+am
+aa
+aF
+av
+av
+ae
+ab
+ab
+ab
+ab
+ab
+av
+av
+ae
+ae
+ae
+ae
+ae
+ae
+am
+aa
+aD
+ae
+ai
"}
(10,1,1) = {"
-i
-e
-e
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ar
+av
+ab
+ab
+ab
+ab
+au
+ae
+jc
+ae
+ae
+aC
+aa
+ac
+ak
+au
+ae
+ab
+ab
+ab
+ab
+ab
+au
+ae
+ae
+ad
+aw
+ae
+ae
+ae
+aT
+ae
+ae
+ai
"}
(11,1,1) = {"
-i
-e
-E
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-o
-a
-a
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+ab
+ab
+ab
+av
+aX
+ae
+ae
+am
+ag
+ae
+aC
+aa
+az
+ae
+ae
+al
+aX
+ae
+ab
+ab
+ab
+ae
+ae
+aQ
+aD
+ae
+ae
+ae
+ae
+aK
+ae
+ae
+ai
"}
(12,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ab
+ab
+ab
+KV
+ac
+aa
+ag
+ae
+al
+aC
+ac
+aa
+aa
+az
+au
+ad
+ac
+az
+ae
+au
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(13,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-q
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ab
+ab
+ab
+ae
+ae
+aC
+aa
+ag
+ae
+aC
+aa
+aa
+aa
+aa
+ac
+aa
+aa
+aa
+ag
+ae
+ab
+ab
+ab
+av
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(14,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-V
-V
-V
-V
-V
-Z
-e
-i
+ai
+ae
+ae
+ar
+ab
+ab
+ab
+ar
+aC
+aa
+az
+ae
+aC
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+ab
+ab
+ab
+al
+ar
+ae
+aV
+aV
+aV
+aV
+aV
+aZ
+ae
+ai
"}
(15,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-E
-e
-e
-V
-V
-V
-V
-V
-V
-e
-i
+ai
+ae
+ae
+au
+ab
+ab
+ab
+as
+aa
+aa
+aa
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ay
+aa
+as
+as
+av
+ae
+aj
+ae
+aV
+aV
+aV
+aV
+aV
+aV
+ae
+ai
"}
(16,1,1) = {"
-i
-e
-e
-e
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-e
-e
-e
-e
-V
-V
-V
-V
-V
-V
-e
-i
+ai
+ae
+ad
+ac
+ab
+as
+as
+as
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ah
+aM
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+as
+aB
+ae
+ae
+av
+aV
+aV
+aV
+aV
+aV
+aV
+ae
+ai
"}
(17,1,1) = {"
-i
-e
-e
-e
-e
-e
-a
-a
-a
-a
-a
-a
-a
-a
-H
-a
-a
-a
-a
-x
-a
-a
-a
-e
-e
-e
-e
-R
-e
-V
-V
-V
-V
-V
-V
-e
-i
+ai
+KV
+aI
+aa
+aa
+as
+as
+as
+aa
+aa
+aa
+aa
+aa
+aa
+aH
+aJ
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aY
+aw
+aR
+av
+aV
+aV
+aV
+aV
+aV
+aV
+ae
+ai
"}
(18,1,1) = {"
-i
-e
-e
-e
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-e
-e
-e
-e
-V
-V
-V
-V
-V
-V
-e
-i
+ai
+ae
+ae
+am
+aa
+as
+as
+as
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+sn
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aD
+ae
+ae
+ae
+aV
+aV
+aV
+aV
+aV
+aV
+ae
+ai
"}
(19,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-V
-V
-V
-V
-V
-V
-e
-i
+ai
+ae
+ae
+av
+aC
+ab
+as
+aI
+aI
+aI
+aa
+aa
+aa
+aa
+aa
+aa
+aO
+aa
+aa
+aa
+aa
+aa
+aa
+as
+as
+aN
+ae
+ae
+ar
+aV
+aV
+aV
+aV
+aV
+aV
+ae
+ai
"}
(20,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-p
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-V
-V
-V
-V
-V
-A
-e
-i
+ai
+ae
+ae
+ae
+ab
+ab
+ar
+ae
+ae
+al
+aC
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+av
+ae
+ae
+aV
+aV
+aV
+aV
+aV
+aA
+ae
+ai
"}
(21,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-f
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ar
+ae
+au
+ab
+ab
+au
+ae
+ad
+ac
+aa
+aa
+aa
+aa
+aa
+aI
+aa
+aa
+aa
+aI
+aI
+aa
+aa
+ab
+ab
+ab
+av
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(22,1,1) = {"
-i
-e
-e
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ab
+ab
+ab
+ac
+lc
+aI
+aa
+aa
+az
+al
+aC
+az
+al
+am
+aa
+az
+ae
+au
+am
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(23,1,1) = {"
-i
-e
-e
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-t
-a
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ab
+ab
+ab
+ab
+av
+ae
+pl
+aa
+aD
+au
+aC
+az
+ae
+ae
+aC
+az
+ae
+ae
+ae
+ab
+ab
+ab
+ae
+ae
+aQ
+ag
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(24,1,1) = {"
-i
-e
-e
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+ab
+ab
+ab
+Vt
+ar
+aC
+aD
+au
+ae
+aC
+aa
+aW
+ae
+am
+az
+ae
+ae
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+am
+ac
+aW
+ae
+ae
+aU
+ae
+ae
+ai
"}
(25,1,1) = {"
-i
-e
-e
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+ae
+ab
+ab
+ab
+ab
+az
+ae
+ae
+ad
+aa
+az
+au
+av
+av
+aC
+ab
+ab
+ab
+ab
+ab
+au
+ae
+ae
+ae
+ae
+aG
+ae
+ae
+ad
+aI
+aW
+ae
+ai
"}
(26,1,1) = {"
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-a
-a
-a
-a
-a
-a
-a
-a
-a
-b
-b
-b
-b
-b
-b
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ae
+ae
+ae
+ae
+ae
+ar
+ab
+ab
+ab
+ae
+av
+aC
+as
+as
+ab
+ar
+aP
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+aK
+ae
+ae
+ae
+ai
"}
(27,1,1) = {"
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-e
-e
-e
-e
-e
-e
-e
-e
-i
+ai
+ai
+ae
+au
+ae
+av
+av
+ab
+ab
+ab
+ab
+ab
+as
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ar
+ae
+ai
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(28,1,1) = {"
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-i
+aS
+ai
+ai
+ae
+au
+ae
+av
+ae
+ab
+ab
+ab
+ab
+as
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+au
+ae
+ae
+ae
+ae
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
"}
(29,1,1) = {"
-S
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-b
-b
-e
-b
-b
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ar
+av
+aC
+as
+as
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ar
+ae
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
"}
(30,1,1) = {"
-S
-S
-S
-i
-i
-e
-e
-e
-b
-b
-b
-b
-b
-e
-e
-e
-b
-b
-b
-b
-b
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+au
+ae
+am
+aa
+aa
+aI
+ab
+ab
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(31,1,1) = {"
-S
-S
-S
-S
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+ae
+aC
+aD
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(32,1,1) = {"
-S
-S
-S
-S
-S
-i
-i
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-e
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+aS
+ai
+ai
+ae
+ae
+ae
+ae
+ae
+bX
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
(33,1,1) = {"
-S
-S
-S
-S
-S
-S
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-i
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
-S
+aS
+aS
+aS
+aS
+aS
+aS
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+ai
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
+aS
"}
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index ebb14c09240..f756678b43a 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -40,7 +40,7 @@
#define DNA_UNI_IDENTITY_BLOCKS 8
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/_DEFINES/DNA.dm)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/_DEFINES/DNA.dm)
/*
/// This number needs to equal the total number of DNA blocks
#define DNA_MUTANT_COLOR_BLOCK 1
@@ -60,7 +60,7 @@
#define DNA_POD_HAIR_BLOCK 15
#define DNA_FEATURE_BLOCKS 15
-*/ //SKYRAT EDIT CHANGE - ORIGINAL
+*/ //NOVA EDIT CHANGE - ORIGINAL
#define DNA_FEATURE_BLOCKS GLOB.dna_total_feature_blocks
#define DNA_MANDATORY_COLOR_BLOCKS 5
@@ -72,7 +72,7 @@
#define DNA_POD_HAIR_BLOCK 15
-// SKYRAT EDIT CHANGE END
+// NOVA EDIT CHANGE END
#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index 7a1e91cd408..65ae6609ee1 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -333,7 +333,7 @@
ACCESS_WEAPONS, \
ACCESS_XENOBIOLOGY, \
ACCESS_BARBER, \
-) // SKYRAT EDIT ADDITION
+) // NOVA EDIT ADDITION
/// Command staff/secure accesses, think bridge/armoury, ai_upload, notably access to modify ID cards themselves. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_COMMAND)
#define COMMAND_ACCESS list( \
@@ -360,7 +360,7 @@
ACCESS_HOP, \
ACCESS_QM, \
ACCESS_RD, \
-) // SKYRAT EDIT - Added ACCESS_CE and ACCESS_CMO to PRIVATE_COMMAND_ACCESS
+) // NOVA EDIT - Added ACCESS_CE and ACCESS_CMO to PRIVATE_COMMAND_ACCESS
/// Captains private rooms. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_CAPTAIN)
#define CAPTAIN_ACCESS list( \
diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm
index 7af89f2673a..60b9ed03948 100644
--- a/code/__DEFINES/achievements.dm
+++ b/code/__DEFINES/achievements.dm
@@ -42,8 +42,8 @@
#define MEDAL_BLADE_ASCENSION "Blade"
#define MEDAL_COSMOS_ASCENSION "Cosmos"
#define MEDAL_LOCK_ASCENSION "Knock"
+#define MEDAL_MOON_ASCENSION "Moon"
#define MEDAL_TOOLBOX_SOUL "Toolsoul"
-#define MEDAL_CHEM_TUT "Beginner Chemist"
#define MEDAL_HOT_DAMN "Hot Damn!"
#define MEDAL_CAYENNE_DISK "Very Important Piscis"
#define MEDAL_TRAM_SURFER "Tram Surfer"
diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm
index 9946e022b61..c7274638e79 100644
--- a/code/__DEFINES/admin.dm
+++ b/code/__DEFINES/admin.dm
@@ -7,9 +7,9 @@
#define MUTE_ADMINHELP (1<<3)
#define MUTE_DEADCHAT (1<<4)
#define MUTE_INTERNET_REQUEST (1<<5)
-// Skyrat Edit Addition - Mute LOOC
+// NOVA EDIT Addition - Mute LOOC
#define MUTE_LOOC (1<<6)
-// Skyrat Edit End
+// NOVA EDIT End
#define MUTE_ALL ALL
//Some constants for DB_Ban
@@ -102,7 +102,7 @@
#define AHELP_RESOLVED 3
/// Amount of time after the round starts that the player disconnect report is issued.
-#define ROUNDSTART_LOGOUT_REPORT_TIME (21 MINUTES) // SKYRAT EDIT CHANGE - ORIGINAL: 10 MINUTES
+#define ROUNDSTART_LOGOUT_REPORT_TIME (21 MINUTES) // NOVA EDIT CHANGE - ORIGINAL: 10 MINUTES
/// Threshold in minutes for counting a player as AFK on the roundstart report.
#define ROUNDSTART_LOGOUT_AFK_THRESHOLD (ROUNDSTART_LOGOUT_REPORT_TIME * 0.7)
diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm
index 25467e45485..5cf2e4263d4 100644
--- a/code/__DEFINES/ai/bot_keys.dm
+++ b/code/__DEFINES/ai/bot_keys.dm
@@ -15,6 +15,8 @@
#define BB_RADIO_CHANNEL "radio_channel"
///list of unreachable things we will temporarily ignore
#define BB_TEMPORARY_IGNORE_LIST "temporary_ignore_list"
+///Last thing we attempted to reach
+#define BB_LAST_ATTEMPTED_PATHING "last_attempted_pathing"
// medbot keys
///the patient we must heal
@@ -55,3 +57,17 @@
#define BB_ACID_SPRAY_TARGET "acid_spray_target"
///key that holds trash we will burn
#define BB_HUNTABLE_TRASH "huntable_trash"
+
+//hygienebots
+///key that holds our threats
+#define BB_WASH_THREATS "wash_threats"
+///key that holds speech when we find our target
+#define BB_WASH_FOUND "wash_found"
+///key that holds speech when we cleaned our target
+#define BB_WASH_DONE "wash_done"
+///key that holds target we will wash
+#define BB_WASH_TARGET "wash_target"
+///key that holds how frustrated we are when target is running away
+#define BB_WASH_FRUSTRATION "wash_frustration"
+///key that holds cooldown after we finish cleaning something, so we dont immediately run off to patrol
+#define BB_POST_CLEAN_COOLDOWN "post_clean_cooldown"
diff --git a/code/__DEFINES/ai/monkey.dm b/code/__DEFINES/ai/monkey.dm
index fc4af74d9f0..0e8c44e40fa 100644
--- a/code/__DEFINES/ai/monkey.dm
+++ b/code/__DEFINES/ai/monkey.dm
@@ -15,3 +15,4 @@
#define BB_MONKEY_TARGET_MONKEYS "BB_monkey_target_monkeys"
#define BB_MONKEY_DISPOSING "BB_monkey_disposing"
#define BB_MONKEY_RECRUIT_COOLDOWN "BB_monkey_recruit_cooldown"
+#define BB_RESISTING "BB_resisting"
diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm
index 6ed9272a9ff..d750a0a3631 100644
--- a/code/__DEFINES/antagonists.dm
+++ b/code/__DEFINES/antagonists.dm
@@ -84,6 +84,7 @@
#define PATH_BLADE "Blade Path"
#define PATH_COSMIC "Cosmic Path"
#define PATH_LOCK "Lock Path"
+#define PATH_MOON "Moon Path"
/// Defines are used in /proc/has_living_heart() to report if the heretic has no heart period, no living heart, or has a living heart.
#define HERETIC_NO_HEART_ORGAN -1
@@ -222,8 +223,10 @@ GLOBAL_LIST_INIT(ai_employers, list(
#define IS_HERETIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic))
/// Check if the given mob is a heretic monster.
#define IS_HERETIC_MONSTER(mob) (mob.mind?.has_antag_datum(/datum/antagonist/heretic_monster))
-/// Checks if the given mob is either a heretic or a heretic monster.
-#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob))
+/// Check if the given mob is a lunatic
+#define IS_LUNATIC(mob) (mob.mind?.has_antag_datum(/datum/antagonist/lunatic))
+/// Checks if the given mob is either a heretic, heretic monster or a lunatic.
+#define IS_HERETIC_OR_MONSTER(mob) (IS_HERETIC(mob) || IS_HERETIC_MONSTER(mob) || IS_LUNATIC(mob))
/// Checks if the given mob is a wizard
#define IS_WIZARD(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/wizard))
@@ -333,6 +336,7 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list(
#define ANTAG_GROUP_FUGITIVES "Escaped Fugitives"
#define ANTAG_GROUP_HUNTERS "Bounty Hunters"
#define ANTAG_GROUP_PARADOX "Spacetime Aberrations"
+#define ANTAG_GROUP_CREW "Deviant Crew"
// This flag disables certain checks that presume antagonist datums mean 'baddie'.
diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm
index 7a1ca9705ac..eeac64d4bca 100644
--- a/code/__DEFINES/atom_hud.dm
+++ b/code/__DEFINES/atom_hud.dm
@@ -48,7 +48,7 @@
/// Steady Hacked APC effect, visible only to Malf AIs
#define MALF_APC_HUD "23"
-// SKYRAT EDIT ADDITION BEGIN - gun permits and DNR
+// NOVA EDIT ADDITION BEGIN - gun permits and DNR
/// ammo of guns
#define AMMO_HUD "25"
/// if they have a gun permit
@@ -56,7 +56,7 @@
/// If they have the DNR trait
#define DNR_HUD "27"
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
//by default everything in the hud_list of an atom is an image
//a value in hud_list with one of these will change that behavior
@@ -75,8 +75,8 @@
#define DATA_HUD_AI_DETECT 9
#define DATA_HUD_FAN 10
#define DATA_HUD_MALF_APC 11
-#define DATA_HUD_PERMIT 12 //SKYRAT EDIT
-#define DATA_HUD_DNR 13 // SKYRAT EDIT
+#define DATA_HUD_PERMIT 12 //NOVA EDIT
+#define DATA_HUD_DNR 13 // NOVA EDIT
/// cooldown for being shown the images for any particular data hud
#define ADD_HUD_TO_COOLDOWN 20
diff --git a/code/__DEFINES/blob_defines.dm b/code/__DEFINES/blob_defines.dm
index 966e02af3fc..781aed2cab3 100644
--- a/code/__DEFINES/blob_defines.dm
+++ b/code/__DEFINES/blob_defines.dm
@@ -14,7 +14,7 @@
// Generic blob defines
//#define BLOB_BASE_POINT_RATE 2 // Base amount of points per process()
-#define BLOB_BASE_POINT_RATE 2.5 // SKYRAT EDIT CHANGE
+#define BLOB_BASE_POINT_RATE 2.5 // NOVA EDIT CHANGE
#define BLOB_EXPAND_COST 4 // Price to expand onto a new tile
#define BLOB_ATTACK_REFUND 2 // Points 'refunded' when the expand attempt actually attacks something instead
#define BLOB_BRUTE_RESIST 0.5 // Brute damage taken gets multiplied by this value
diff --git a/code/__DEFINES/bodyparts.dm b/code/__DEFINES/bodyparts.dm
index b8d7e86f4ae..de721dcf861 100644
--- a/code/__DEFINES/bodyparts.dm
+++ b/code/__DEFINES/bodyparts.dm
@@ -6,9 +6,9 @@
/// The max damage a limb can take before it stops taking damage.
/// Used by the max_damage var.
#define LIMB_MAX_HP_PROSTHESIS 20 //Used by surplus prosthesis limbs.
-#define LIMB_MAX_HP_DEFAULT 60 //Used by most all limbs by default. // SKYRAT EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_DEFAULT 50
+#define LIMB_MAX_HP_DEFAULT 60 //Used by most all limbs by default. // NOVA EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_DEFAULT 50
#define LIMB_MAX_HP_ADVANCED 75 //Used by advanced robotic limbs.
-#define LIMB_MAX_HP_CORE 250 //Only use this for heads and torsos. // SKYRAT EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_CORE 200
+#define LIMB_MAX_HP_CORE 250 //Only use this for heads and torsos. // NOVA EDIT CHANGE - ORIGINAL : #define LIMB_MAX_HP_CORE 200
/// Xenomorph Limbs
#define LIMB_MAX_HP_ALIEN_LARVA 50 //Used by the weird larva chest and head. Did you know they have those?
diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm
index 56d3896f0dc..63d5682ef0f 100644
--- a/code/__DEFINES/cargo.dm
+++ b/code/__DEFINES/cargo.dm
@@ -53,21 +53,14 @@
/// Universal Scanner mode for using the price tagger.
#define SCAN_PRICE_TAG 3
-GLOBAL_LIST_EMPTY(supplypod_loading_bays)
+///Used by coupons to define that they're cursed
+#define COUPON_OMEN "omen"
-GLOBAL_LIST_INIT(podstyles, list(\
- list(POD_SHAPE_NORML, "pod", TRUE, "default", "yellow", RUBBLE_NORMAL, "supply pod", "A Nanotrasen supply drop pod."),\
- list(POD_SHAPE_NORML, "advpod", TRUE, "bluespace", "blue", RUBBLE_NORMAL, "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\
- list(POD_SHAPE_NORML, "advpod", TRUE, "centcom", "blue", RUBBLE_NORMAL, "\improper CentCom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to CentCom after delivery."),\
- list(POD_SHAPE_NORML, "darkpod", TRUE, "syndicate", "red", RUBBLE_NORMAL, "blood-red supply pod", "An intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\
- list(POD_SHAPE_NORML, "darkpod", TRUE, "deathsquad", "blue", RUBBLE_NORMAL, "\improper Deathsquad drop pod", "A Nanotrasen drop pod. This one has been marked the markings of Nanotrasen's elite strike team."),\
- list(POD_SHAPE_NORML, "pod", TRUE, "cultist", "red", RUBBLE_NORMAL, "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\
- list(POD_SHAPE_OTHER, "missile", FALSE, FALSE, FALSE, RUBBLE_THIN, "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
- list(POD_SHAPE_OTHER, "smissile", FALSE, FALSE, FALSE, RUBBLE_THIN, "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
- list(POD_SHAPE_OTHER, "box", TRUE, FALSE, FALSE, RUBBLE_WIDE, "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\
- list(POD_SHAPE_NORML, "clownpod", TRUE, "clown", "green", RUBBLE_NORMAL, "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\
- list(POD_SHAPE_OTHER, "orange", TRUE, FALSE, FALSE, RUBBLE_NONE, "\improper Orange", "An angry orange."),\
- list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\
- list(POD_SHAPE_OTHER, "gondola", FALSE, FALSE, FALSE, RUBBLE_NONE, "gondola", "The silent walker. This one seems to be part of a delivery agency."),\
- list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, FALSE, FALSE, "rl_click", "give_po")\
-))
+///Discount categories for coupons. This one is for anything that isn't discountable.
+#define SUPPLY_PACK_NOT_DISCOUNTABLE null
+///Discount category for the standard stuff, mostly goodies.
+#define SUPPLY_PACK_STD_DISCOUNTABLE "standard_discount"
+///Discount category for stuff that's mostly niche and/or that might be useful.
+#define SUPPLY_PACK_UNCOMMON_DISCOUNTABLE "uncommon_discount"
+///Discount category for the silly, overpriced, joke content, sometimes useful or plain bad.
+#define SUPPLY_PACK_RARE_DISCOUNTABLE "rare_discount"
diff --git a/code/__DEFINES/communications.dm b/code/__DEFINES/communications.dm
index 813179974f9..94b53cd8bc9 100644
--- a/code/__DEFINES/communications.dm
+++ b/code/__DEFINES/communications.dm
@@ -4,7 +4,7 @@
/// The extended time an admin has to cancel a cross-sector message if they pass the filter, for instance
#define EXTENDED_CROSS_SECTOR_CANCEL_TIME (30 SECONDS)
-// SKYRAT EDIT REMOVAL BEGIN - modularized into code/__DEFINES/~skyrat_defines/security_alerts.dm
+// NOVA EDIT REMOVAL BEGIN - modularized into code/__DEFINES/~skyrat_defines/security_alerts.dm
/*
//Security levels affect the escape shuttle timer
/// Security level is green. (no threats)
@@ -16,4 +16,4 @@
/// Security level is delta. (station destruction immiment)
#define SEC_LEVEL_DELTA 3
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm
index dad575c58c3..294fe6364cd 100644
--- a/code/__DEFINES/construction/material.dm
+++ b/code/__DEFINES/construction/material.dm
@@ -40,26 +40,6 @@
///If the user won't receive a warning when attacking the container with an unallowed item.
#define MATCONTAINER_SILENT (1<<3)
-// The following flags are for decomposing alloys. Should be expanded upon and diversified once someone gets around to reworking recycling.
-/// Can reduce an alloy into its component materials.
-#define BREAKDOWN_ALLOYS (1<<4)
-/// Makes the material composition include transmuted materials objects
-#define BREAKDOWN_INCLUDE_ALCHEMY (1<<5)
-/// Breakdown flags used by techfabs and circuit printers.
-#define BREAKDOWN_FLAGS_LATHE (BREAKDOWN_ALLOYS)
-/// Breakdown flags used by the ORM.
-#define BREAKDOWN_FLAGS_ORM (BREAKDOWN_ALLOYS)
-/// Breakdown flags used by the recycler.
-#define BREAKDOWN_FLAGS_RECYCLER (BREAKDOWN_ALLOYS)
-/// Breakdown flags used by the sheetifier.
-#define BREAKDOWN_FLAGS_SHEETIFIER (BREAKDOWN_ALLOYS)
-/// Breakdown flags used by the ore processor.
-#define BREAKDOWN_FLAGS_ORE_PROCESSOR (BREAKDOWN_ALLOYS)
-/// Breakdown flags used by the drone dispenser.
-#define BREAKDOWN_FLAGS_DRONE_DISPENSER (BREAKDOWN_ALLOYS)
-/// Breakdown flags used when exporting materials.
-#define BREAKDOWN_FLAGS_EXPORT (NONE)
-
/// Whether a material's mechanical effects should apply to the atom. This is necessary for other flags to work.
#define MATERIAL_EFFECTS (1<<0)
/// Applies the material color to the atom's color. Deprecated, use MATERIAL_GREYSCALE instead
diff --git a/code/__DEFINES/dcs/signals/signals_circuit.dm b/code/__DEFINES/dcs/signals/signals_circuit.dm
index 1b7b6b53c4f..c0676d768ce 100644
--- a/code/__DEFINES/dcs/signals/signals_circuit.dm
+++ b/code/__DEFINES/dcs/signals/signals_circuit.dm
@@ -75,3 +75,9 @@
///Called when an Ntnet sender is sending Ntnet data
#define COMSIG_GLOB_CIRCUIT_NTNET_DATA_SENT "!circuit_ntnet_data_sent"
+
+/// Called when an equipment action component is added to a shell (/obj/item/circuit_component/equipment_action/action_comp)
+#define COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED "circuit_action_component_registered"
+
+/// Called when an equipment action component is removed from a shell (/obj/item/circuit_component/equipment_action/action_comp)
+#define COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED "circuit_action_component_unregistered"
diff --git a/code/__DEFINES/dcs/signals/signals_material_container.dm b/code/__DEFINES/dcs/signals/signals_material_container.dm
index f33567a2739..2c77be55c31 100644
--- a/code/__DEFINES/dcs/signals/signals_material_container.dm
+++ b/code/__DEFINES/dcs/signals/signals_material_container.dm
@@ -2,10 +2,14 @@
/// Called from datum/component/material_container/proc/can_hold_material() : (mat)
#define COMSIG_MATCONTAINER_MAT_CHECK "matcontainer_mat_check"
#define MATCONTAINER_ALLOW_MAT (1<<0)
-/// Called from datum/component/material_container/proc/user_insert() : (held_item, user)
+/// Called from datum/component/material_container/proc/user_insert() : (target_item, user)
#define COMSIG_MATCONTAINER_PRE_USER_INSERT "matcontainer_pre_user_insert"
#define MATCONTAINER_BLOCK_INSERT (1<<1)
-/// Called from datum/component/material_container/proc/insert_item() : (target, last_inserted_id, mats_consumed, material_amount, context)
+/// Called from datum/component/material_container/proc/insert_item() : (item, primary_mat, mats_consumed, material_amount, context)
#define COMSIG_MATCONTAINER_ITEM_CONSUMED "matcontainer_item_consumed"
-/// Called from datum/component/material_container/proc/retrieve_sheets() : (sheets, context)
+/// Called from datum/component/material_container/proc/retrieve_sheets() : (new_sheets, context)
#define COMSIG_MATCONTAINER_SHEETS_RETRIEVED "matcontainer_sheets_retrieved"
+
+//mat container signals but from the ore silo's perspective
+/// Called from /obj/machinery/ore_silo/on_item_consumed() : (container, item_inserted, last_inserted_id, mats_consumed, amount_inserted)
+#define COMSIG_SILO_ITEM_CONSUMED "silo_item_consumed"
diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm
index 07e93bebcf3..47f5b748599 100644
--- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm
+++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm
@@ -3,8 +3,6 @@
///sent from borg mobs to itself, for tools to catch an upcoming destroy() due to safe decon (rather than detonation)
#define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon"
///called from /obj/item/borg/cyborghug/attack proc
-#define COMSIG_BORG_TOUCH_MOB "borg_touch_mob"
-///called from /obj/item/borg/cyborghug/attack proc
#define COMSIG_BORG_HUG_MOB "borg_hug_mob"
///returned if this action was handled by signal handler.
#define COMSIG_BORG_HUG_HANDLED 1
diff --git a/code/__DEFINES/dcs/signals/signals_moveloop.dm b/code/__DEFINES/dcs/signals/signals_moveloop.dm
index 38ab63a5969..8a354f8bfbb 100644
--- a/code/__DEFINES/dcs/signals/signals_moveloop.dm
+++ b/code/__DEFINES/dcs/signals/signals_moveloop.dm
@@ -9,3 +9,5 @@
#define COMSIG_MOVELOOP_POSTPROCESS "moveloop_postprocess"
//from [/datum/move_loop/has_target/jps/recalculate_path] ():
#define COMSIG_MOVELOOP_JPS_REPATH "moveloop_jps_repath"
+///from [/datum/move_loop/has_target/jps/on_finish_pathing]
+#define COMSIG_MOVELOOP_JPS_FINISHED_PATHING "moveloop_jps_finished_pathing"
diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm
index eab28820c41..14c221b22fa 100644
--- a/code/__DEFINES/fonts.dm
+++ b/code/__DEFINES/fonts.dm
@@ -13,7 +13,7 @@
#define SIGNATURE_FONT "Segoe Script"
/// Emoji icon set
-#define EMOJI_SET 'modular_skyrat/master_files/icons/emoji.dmi' // SKYRAT EDIT - ORIGINAL: 'icons/ui_icons/emoji/emoji.dmi'
+#define EMOJI_SET 'modular_nova/master_files/icons/emoji.dmi' // NOVA EDIT - ORIGINAL: 'icons/ui_icons/emoji/emoji.dmi'
// Font metrics bitfield
/// Include leading A width and trailing C width in GetWidth() or in DrawText()
diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm
index 85ced17e67c..e1c9185914f 100644
--- a/code/__DEFINES/food.dm
+++ b/code/__DEFINES/food.dm
@@ -19,7 +19,7 @@
#define BUGS (1<<18)
#define GORE (1<<19)
#define STONE (1<<20)
-#define BLOODY (1<<21) // SKYRAT EDIT - Hemophage Food
+#define BLOODY (1<<21) // NOVA EDIT - Hemophage Food
DEFINE_BITFIELD(foodtypes, list(
"MEAT" = MEAT,
@@ -43,7 +43,7 @@ DEFINE_BITFIELD(foodtypes, list(
"BUGS" = BUGS,
"GORE" = GORE,
"STONE" = STONE,
- "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food
+ "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food
))
/// A list of food type names, in order of their flags
@@ -69,7 +69,7 @@ DEFINE_BITFIELD(foodtypes, list(
"BUGS", \
"GORE", \
"STONE", \
- "BLOODY", /* SKYRAT EDIT - Hemophage Food */ \
+ "BLOODY", /* NOVA EDIT - Hemophage Food */ \
)
/// IC meaning (more or less) for food flags
@@ -95,7 +95,7 @@ DEFINE_BITFIELD(foodtypes, list(
"Bugs", \
"Gore", \
"Rocks", \
- "Bloody", /* SKYRAT EDIT - Hemophage Food */ \
+ "Bloody", /* NOVA EDIT - Hemophage Food */ \
)
#define DRINK_REVOLTING 1
@@ -182,7 +182,7 @@ DEFINE_BITFIELD(food_flags, list(
"FOOD_IN_CONTAINER" = FOOD_IN_CONTAINER,
))
-#define STOP_SERVING_BREAKFAST (35 MINUTES) // SKYRAT EDIT - ORIGINAL: 15 MINUTES
+#define STOP_SERVING_BREAKFAST (35 MINUTES) // NOVA EDIT - ORIGINAL: 15 MINUTES
#define FOOD_MEAT_NORMAL 5
#define FOOD_MEAT_HUMAN 50
diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm
index c00361184a5..63bfb4192af 100644
--- a/code/__DEFINES/icon_smoothing.dm
+++ b/code/__DEFINES/icon_smoothing.dm
@@ -131,14 +131,14 @@ DEFINE_BITFIELD(smoothing_junction, list(
#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(59) ///turf/closed/wall/mineral/titanium/survival
#define SMOOTH_GROUP_TURF_OPEN_CLIFF S_TURF(60) ///turf/open/cliff
-// SKYRAT EDIT ADDITION
+// NOVA EDIT ADDITION
#define SMOOTH_GROUP_ELEVATED_PLASTEEL S_TURF(61)
#define SMOOTH_GROUP_LOWERED_PLASTEEL S_TURF(62)
#define SMOOTH_GROUP_FISSURE S_TURF(63)
#define MAX_S_TURF 63 //Always match this value with the one above it.
-//SKYRAT EDIT END
+//NOVA EDIT END
#define S_OBJ(num) ("-" + #num + ",")
@@ -162,10 +162,10 @@ DEFINE_BITFIELD(smoothing_junction, list(
#define SMOOTH_GROUP_BAMBOO_WALLS S_TURF(17) //![/turf/closed/wall/mineral/bamboo, /obj/structure/falsewall/bamboo]
#define SMOOTH_GROUP_PLASTINUM_WALLS S_TURF(18) //![turf/closed/indestructible/riveted/plastinum]
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
#define SMOOTH_GROUP_SHIPWALLS S_OBJ(19) ///turf/closed/wall/mineral/titanium/spaceship
#define SMOOTH_GROUP_STONE_WALLS S_OBJ(20) ///turf/closed/wall/mineral/stone, /obj/structure/falsewall/stone
-//SKYRAT EDIT END
+//NOVA EDIT END
#define SMOOTH_GROUP_PAPERFRAME S_OBJ(21) ///obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe
@@ -207,11 +207,11 @@ DEFINE_BITFIELD(smoothing_junction, list(
#define SMOOTH_GROUP_GAS_TANK S_OBJ(72)
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
#define SMOOTH_GROUP_SHUTTERS S_OBJ(73)
#define SMOOTH_GROUP_WATER S_OBJ(74) ///obj/effect/abstract/liquid_turf
-//SKYRAT EDIT END
+//NOVA EDIT END
/// Performs the work to set smoothing_groups and canSmoothWith.
/// An inlined function used in both turf/Initialize and atom/Initialize.
diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm
index f164c78d422..f77bbda463e 100644
--- a/code/__DEFINES/inventory.dm
+++ b/code/__DEFINES/inventory.dm
@@ -90,7 +90,7 @@
///hides mutant/moth wings, does not apply to functional wings
#define HIDEMUTWINGS (1<<13)
-//SKYRAT EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING -
+//NOVA EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING -
/// Manually set this on items you want anthro ears to show on!
#define SHOWSPRITEEARS (1<<14)
/// Does this sprite hide the tail?
@@ -99,7 +99,7 @@
#define HIDESPINE (1<<16)
/// Does this sprite hide devious devices?
#define HIDESEXTOY (1<<17)
-//SKYRAT EDIT ADDITION END
+//NOVA EDIT ADDITION END
//bitflags for clothing coverage - also used for limbs
#define HEAD (1<<0)
@@ -133,10 +133,10 @@
#define FEMALE_UNIFORM_TOP_ONLY (1<<1)
/// For when you don't want the "breast" effect to be applied (the one that cuts two pixels in the middle of the front of the uniform when facing east or west).
#define FEMALE_UNIFORM_NO_BREASTS (1<<2)
-// SKYRAT EDIT ADDITION START
+// NOVA EDIT ADDITION START
/// For when you -don't- want to apply FEMALE_UNIFORM_TOP_ONLY to the digi version (which happens by default).
#define FEMALE_UNIFORM_DIGI_FULL (1<<3)
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
//flags for alternate styles: These are hard sprited so don't set this if you didn't put the effort in
#define NORMAL_STYLE 0
@@ -152,7 +152,7 @@
#define CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2)
///has a sprite for monkeys
#define CLOTHING_MONKEY_VARIATION (1<<3)
-// SKYRAT EDIT ADDITION START
+// NOVA EDIT ADDITION START
/// The sprite works fine for snouts.
#define CLOTHING_SNOUTED_VARIATION (1<<4)
/// The sprite works fine for snouts as-is.
@@ -165,7 +165,7 @@
#define CLOTHING_SNOUTED_BETTER_VOX_VARIATION (1<<8)
/// The sprite works fine for vox snouts as is.
#define CLOTHING_SNOUTED_BETTER_VOX_VARIATION_NO_NEW_ICON (1<<9)
-// SKYRAT EDIT END
+// NOVA EDIT END
//flags for covering body parts
#define GLASSESCOVERSEYES (1<<0)
@@ -210,7 +210,7 @@ GLOBAL_LIST_INIT(detective_vest_allowed, list(
/obj/item/storage/belt/holster/nukie,
/obj/item/storage/belt/holster/energy,
/obj/item/gun/ballistic/shotgun/automatic/combat/compact,
- /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION
+ /obj/item/gun/microfusion, //NOVA EDIT ADDITION
))
GLOBAL_LIST_INIT(security_vest_allowed, list(
@@ -228,7 +228,7 @@ GLOBAL_LIST_INIT(security_vest_allowed, list(
/obj/item/storage/belt/holster/energy,
/obj/item/gun/ballistic/shotgun/automatic/combat/compact,
/obj/item/pen/red/security,
- /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION
+ /obj/item/gun/microfusion, //NOVA EDIT ADDITION
))
GLOBAL_LIST_INIT(security_wintercoat_allowed, list(
@@ -241,7 +241,7 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, list(
/obj/item/storage/belt/holster/nukie,
/obj/item/storage/belt/holster/energy,
/obj/item/gun/ballistic/shotgun/automatic/combat/compact,
- /obj/item/gun/microfusion, //SKYRAT EDIT ADDITION
+ /obj/item/gun/microfusion, //NOVA EDIT ADDITION
))
//Allowed list for all chaplain suits (except the honkmother robe)
diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index 7feca0782dc..7e09a7ea178 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -60,18 +60,18 @@
#define JOB_SECURITY_OFFICER_ENGINEERING "Security Officer (Engineering)"
#define JOB_SECURITY_OFFICER_SCIENCE "Security Officer (Science)"
#define JOB_SECURITY_OFFICER_SUPPLY "Security Officer (Cargo)"
-#define JOB_CORRECTIONS_OFFICER "Corrections Officer" // SKYRAT EDIT ADDITION
+#define JOB_CORRECTIONS_OFFICER "Corrections Officer" // NOVA EDIT ADDITION
//Engineering
#define JOB_STATION_ENGINEER "Station Engineer"
#define JOB_ATMOSPHERIC_TECHNICIAN "Atmospheric Technician"
-#define JOB_ENGINEERING_GUARD "Engineering Guard" // SKYRAT EDIT ADDITION
+#define JOB_ENGINEERING_GUARD "Engineering Guard" // NOVA EDIT ADDITION
//Medical
#define JOB_CORONER "Coroner"
#define JOB_MEDICAL_DOCTOR "Medical Doctor"
#define JOB_PARAMEDIC "Paramedic"
#define JOB_CHEMIST "Chemist"
#define JOB_VIROLOGIST "Virologist"
-#define JOB_ORDERLY "Orderly" // SKYRAT EDIT ADDITION
+#define JOB_ORDERLY "Orderly" // NOVA EDIT ADDITION
//Science
#define JOB_SCIENTIST "Scientist"
#define JOB_ROBOTICIST "Roboticist"
@@ -82,7 +82,7 @@
#define JOB_CARGO_TECHNICIAN "Cargo Technician"
#define JOB_SHAFT_MINER "Shaft Miner"
#define JOB_BITRUNNER "Bitrunner"
-#define JOB_CUSTOMS_AGENT "Customs Agent" // SKYRAT EDIT ADDITION
+#define JOB_CUSTOMS_AGENT "Customs Agent" // NOVA EDIT ADDITION
//Service
#define JOB_BARTENDER "Bartender"
#define JOB_BOTANIST "Botanist"
@@ -94,8 +94,8 @@
#define JOB_LAWYER "Lawyer"
#define JOB_CHAPLAIN "Chaplain"
#define JOB_PSYCHOLOGIST "Psychologist"
-#define JOB_BARBER "Barber" // SKYRAT EDIT ADDITION
-#define JOB_BOUNCER "Service Guard" // SKYRAT EDIT ADDITION
+#define JOB_BARBER "Barber" // NOVA EDIT ADDITION
+#define JOB_BOUNCER "Service Guard" // NOVA EDIT ADDITION
//ERTs
#define JOB_ERT_DEATHSQUAD "Death Commando"
#define JOB_ERT_COMMANDER "Emergency Response Team Commander"
@@ -118,7 +118,7 @@
#define JOB_CENTCOM_RESEARCH_OFFICER "Research Officer"
#define JOB_CENTCOM_SPECIAL_OFFICER "Special Ops Officer"
#define JOB_CENTCOM_PRIVATE_SECURITY "Private Security Force"
-// SKYRAT EDIT ADDITION START
+// NOVA EDIT ADDITION START
#define JOB_BLUESHIELD "Blueshield"
#define JOB_NT_REP "Nanotrasen Consultant"
// Nanotrasen Naval Command jobs
@@ -134,7 +134,7 @@
#define JOB_SPACE_POLICE "Space Police"
#define JOB_SOLFED "SolFed"
#define JOB_SOLFED_LIASON "SolFed Liason"
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
#define JOB_GROUP_ENGINEERS list( \
JOB_STATION_ENGINEER, \
@@ -179,16 +179,16 @@
#define JOB_DISPLAY_ORDER_DETECTIVE 35
#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 36
#define JOB_DISPLAY_ORDER_PRISONER 37
-#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //SKYRAT EDIT ADDITON
-#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 39 //SKYRAT EDIT ADDITON
-#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 40 //SKYRAT EDIT ADDITON
-#define JOB_DISPLAY_ORDER_BLUESHIELD 41 //SKYRAT EDIT ADDITON
-#define JOB_DISPLAY_ORDER_ORDERLY 42 //SKYRAT EDIT ADDITION
-#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 43 //SKYRAT EDIT ADDITION
-#define JOB_DISPLAY_ORDER_BOUNCER 44 //SKYRAT EDIT ADDITION
-#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 45 //SKYRAT EDIT ADDITION
-#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 46 //SKYRAT EDIT ADDITION
-#define JOB_DISPLAY_ORDER_EXP_CORPS 47 //SKYRAT EDIT ADDITON
+#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //NOVA EDIT ADDITON
+#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 39 //NOVA EDIT ADDITON
+#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 40 //NOVA EDIT ADDITON
+#define JOB_DISPLAY_ORDER_BLUESHIELD 41 //NOVA EDIT ADDITON
+#define JOB_DISPLAY_ORDER_ORDERLY 42 //NOVA EDIT ADDITION
+#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 43 //NOVA EDIT ADDITION
+#define JOB_DISPLAY_ORDER_BOUNCER 44 //NOVA EDIT ADDITION
+#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 45 //NOVA EDIT ADDITION
+#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 46 //NOVA EDIT ADDITION
+#define JOB_DISPLAY_ORDER_EXP_CORPS 47 //NOVA EDIT ADDITON
#define DEPARTMENT_UNASSIGNED "No Department"
@@ -212,8 +212,8 @@
#define DEPARTMENT_ASSISTANT "Assistant"
#define DEPARTMENT_BITFLAG_CAPTAIN (1<<9)
#define DEPARTMENT_CAPTAIN "Captain"
-#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<10) //SKYRAT EDIT CHANGE
-#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //SKYRAT EDIT CHANGE
+#define DEPARTMENT_BITFLAG_CENTRAL_COMMAND (1<<10) //NOVA EDIT CHANGE
+#define DEPARTMENT_CENTRAL_COMMAND "Central Command" //NOVA EDIT CHANGE
/* Job datum job_flags */
/// Whether the mob is announced on arrival.
diff --git a/code/__DEFINES/lag_switch.dm b/code/__DEFINES/lag_switch.dm
index 2152d0d9a55..fc0922a33d3 100644
--- a/code/__DEFINES/lag_switch.dm
+++ b/code/__DEFINES/lag_switch.dm
@@ -16,8 +16,8 @@
#define DISABLE_PARALLAX 7
/// Disables footsteps, TRAIT_BYPASS_MEASURES exempted
#define DISABLE_FOOTSTEPS 8
-// SKYRAT EDIT ADDITION
+// NOVA EDIT ADDITION
/// Stops people from changing things in the character creator. Entirely.
#define DISABLE_CREATOR 9
-// SKYRAT EDIT END
-#define MEASURES_AMOUNT 9 // The total number of switches defined above // SKYRAT EDIT ADDITION
+// NOVA EDIT END
+#define MEASURES_AMOUNT 9 // The total number of switches defined above // NOVA EDIT ADDITION
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 0cdad4f7241..1ba6879005b 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -2,35 +2,31 @@
//KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE
//NEVER HAVE ANYTHING BELOW THIS PLANE ADJUST IF YOU NEED MORE SPACE
-#define LOWEST_EVER_PLANE -100
+#define LOWEST_EVER_PLANE -50
-#define FIELD_OF_VISION_BLOCKER_PLANE -90
+// Doesn't really layer, just throwing this in here cause it's the best place imo
+#define FIELD_OF_VISION_BLOCKER_PLANE -45
#define FIELD_OF_VISION_BLOCKER_RENDER_TARGET "*FIELD_OF_VISION_BLOCKER_RENDER_TARGET"
-#define CLICKCATCHER_PLANE -80
+#define CLICKCATCHER_PLANE -40
-#define PLANE_SPACE -25
+#define PLANE_SPACE -21
#define PLANE_SPACE_PARALLAX -20
-#define GRAVITY_PULSE_PLANE -13
+#define GRAVITY_PULSE_PLANE -12
#define GRAVITY_PULSE_RENDER_TARGET "*GRAVPULSE_RENDER_TARGET"
-#define RENDER_PLANE_TRANSPARENT -12 //Transparent plane that shows openspace underneath the floor
+#define RENDER_PLANE_TRANSPARENT -11 //Transparent plane that shows openspace underneath the floor
-#define TRANSPARENT_FLOOR_PLANE -11
+#define TRANSPARENT_FLOOR_PLANE -10
-#define FLOOR_PLANE -10
-
-#define WALL_PLANE -9
-#define GAME_PLANE -8
-#define GAME_PLANE_FOV_HIDDEN -7
-#define GAME_PLANE_UPPER -6
-#define WALL_PLANE_UPPER -5
-#define GAME_PLANE_UPPER_FOV_HIDDEN -4
+#define FLOOR_PLANE -6
+#define WALL_PLANE -5
+#define GAME_PLANE -4
+#define ABOVE_GAME_PLANE -3
///Slightly above the game plane but does not catch mouse clicks. Useful for certain visuals that should be clicked through, like seethrough trees
-#define SEETHROUGH_PLANE -3
-#define ABOVE_GAME_PLANE -2
+#define SEETHROUGH_PLANE -2
#define RENDER_PLANE_GAME_WORLD -1
@@ -91,31 +87,36 @@
//-------------------- HUD ---------------------
//HUD layer defines
-#define HUD_PLANE 40
-#define ABOVE_HUD_PLANE 41
+#define HUD_PLANE 35
+#define ABOVE_HUD_PLANE 36
///Plane of the "splash" icon used that shows on the lobby screen
-#define SPLASHSCREEN_PLANE 50
+#define SPLASHSCREEN_PLANE 37
// The largest plane here must still be less than RENDER_PLANE_GAME
//-------------------- Rendering ---------------------
-#define RENDER_PLANE_GAME 100
-#define RENDER_PLANE_NON_GAME 101
+#define RENDER_PLANE_GAME 40
+/// If fov is enabled we'll draw game to this and do shit to it
+#define RENDER_PLANE_GAME_MASKED 41
+/// The bit of the game plane that is let alone is sent here
+#define RENDER_PLANE_GAME_UNMASKED 42
+#define RENDER_PLANE_NON_GAME 45
// Only VERY special planes should be here, as they are above not just the game, but the UI planes as well.
/// Plane related to the menu when pressing Escape.
/// Needed so that we can apply a blur effect to EVERYTHING, and guarantee we are above all UI.
-#define ESCAPE_MENU_PLANE 105
+#define ESCAPE_MENU_PLANE 46
-#define RENDER_PLANE_MASTER 110
+#define RENDER_PLANE_MASTER 50
// Lummox I swear to god I will find you
// NOTE! You can only ever have planes greater then -10000, if you add too many with large offsets you will brick multiz
// Same can be said for large multiz maps. Tread carefully mappers
#define HIGHEST_EVER_PLANE RENDER_PLANE_MASTER
/// The range unique planes can be in
+/// Try and keep this to a nice whole number, so it's easy to look at a plane var and know what's going on
#define PLANE_RANGE (HIGHEST_EVER_PLANE - LOWEST_EVER_PLANE)
// PLANE_SPACE layer(s)
@@ -188,8 +189,6 @@
#define NOT_HIGH_OBJ_LAYER 3.5
#define HIGH_OBJ_LAYER 3.6
#define BELOW_MOB_LAYER 3.7
-
-// GAME_PLANE_FOV_HIDDEN layers
#define LOW_MOB_LAYER 3.75
#define LYING_MOB_LAYER 3.8
#define VEHICLE_LAYER 3.9
@@ -199,21 +198,16 @@
#define MOB_ABOVE_PIGGYBACK_LAYER 4.06
#define MOB_UPPER_LAYER 4.07
#define HITSCAN_PROJECTILE_LAYER 4.09 //above all mob but still hidden by FoV
-
-// GAME_PLANE_UPPER layers
#define ABOVE_MOB_LAYER 4.1
#define WALL_OBJ_LAYER 4.25
#define TRAM_SIGNAL_LAYER 4.26
-// WALL_PLANE_UPPER layers
#define EDGED_TURF_LAYER 4.3
#define ON_EDGED_TURF_LAYER 4.35
-
-// GAME_PLANE_UPPER_FOV_HIDDEN layers
#define SPACEVINE_LAYER 4.4
#define LARGE_MOB_LAYER 4.5
#define SPACEVINE_MOB_LAYER 4.6
-// Intermediate layer used by both GAME_PLANE_FOV_HIDDEN and ABOVE_GAME_PLANE
+// Intermediate layer used by both GAME_PLANE and ABOVE_GAME_PLANE
#define ABOVE_ALL_MOB_LAYER 4.7
// ABOVE_GAME_PLANE layers
@@ -229,6 +223,8 @@
*/
#define WATER_VISUAL_OVERLAY_LAYER 1000
+// SEETHROUGH_PLANE layers here, tho it has no layer values
+
//---------- LIGHTING -------------
// LIGHTING_PLANE layers
diff --git a/code/__DEFINES/lazy_templates.dm b/code/__DEFINES/lazy_templates.dm
index 1e8fab8d92c..1f715778f0d 100644
--- a/code/__DEFINES/lazy_templates.dm
+++ b/code/__DEFINES/lazy_templates.dm
@@ -11,4 +11,4 @@
"Abductor Ships" = LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS, \
"Heretic Sacrifice Level" = LAZY_TEMPLATE_KEY_HERETIC_SACRIFICE, \
"Outpost of Cogs" = LAZY_TEMPLATE_KEY_OUTPOST_OF_COGS, \
-) // SKYRAT EDIT ABOVE - OUTPOST OF COGS
+) // NOVA EDIT ABOVE - OUTPOST OF COGS
diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm
index dba718901fb..576164bd136 100644
--- a/code/__DEFINES/lighting.dm
+++ b/code/__DEFINES/lighting.dm
@@ -22,7 +22,7 @@
/// frequency, in 1/10ths of a second, of the lighting process
#define LIGHTING_INTERVAL 5
-#define MINIMUM_USEFUL_LIGHT_RANGE 1.5 // SKYRAT EDIT CHANGE - Original value 1.4
+#define MINIMUM_USEFUL_LIGHT_RANGE 1.5 // NOVA EDIT CHANGE - Original value 1.4
/// type of falloff to use for lighting; 1 for circular, 2 for square
#define LIGHTING_FALLOFF 1
diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index d5f7c1d1517..62f201f015e 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -66,10 +66,10 @@
/// For wiremod/integrated circuits. Uses various minerals.
#define COMPONENT_PRINTER (1<<10)
//Note: More than one of these can be added to a design but imprinter and lathe designs are incompatable.
-// SKYRAT EDIT ADDITION
+// NOVA EDIT ADDITION
/// Can be made by the orderable colony fabricator
#define COLONY_FABRICATOR (1<<11)
-// SKYRAT EDIT END
+// NOVA EDIT END
#define FIREDOOR_OPEN 1
#define FIREDOOR_CLOSED 2
diff --git a/code/__DEFINES/map_exporter.dm b/code/__DEFINES/map_exporter.dm
new file mode 100644
index 00000000000..becedcd23e5
--- /dev/null
+++ b/code/__DEFINES/map_exporter.dm
@@ -0,0 +1,14 @@
+//Bits to save
+#define SAVE_OBJECTS (1 << 1) //! Save objects?
+#define SAVE_MOBS (1 << 2) //! Save Mobs?
+#define SAVE_TURFS (1 << 3) //! Save turfs?
+#define SAVE_AREAS (1 << 4) //! Save areas?
+#define SAVE_SPACE (1 << 5) //! Save space areas? (If not they will be saved as NOOP)
+#define SAVE_OBJECT_PROPERTIES (1 << 6) //! Save custom properties of objects (obj.on_object_saved() output)
+
+//Ignore turf if it contains
+#define SAVE_SHUTTLEAREA_DONTCARE 0
+#define SAVE_SHUTTLEAREA_IGNORE 1
+#define SAVE_SHUTTLEAREA_ONLY 2
+
+#define DMM2TGM_MESSAGE "MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE"
diff --git a/code/__DEFINES/matrices.dm b/code/__DEFINES/matrices.dm
index 1bb86f9ff47..26ff5a7232a 100644
--- a/code/__DEFINES/matrices.dm
+++ b/code/__DEFINES/matrices.dm
@@ -1,3 +1,27 @@
/// Helper macro for creating a matrix at the given offsets.
/// Works at compile time.
#define TRANSLATE_MATRIX(offset_x, offset_y) matrix(1, 0, (offset_x), 0, 1, (offset_y))
+/// The color matrix of an image which colors haven't been altered. Does nothing.
+#define COLOR_MATRIX_IDENTITY list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0)
+/// Color inversion
+#define COLOR_MATRIX_INVERT list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0)
+///Sepiatone
+#define COLOR_MATRIX_SEPIATONE list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0,0,0)
+///Grayscale
+#define COLOR_MATRIX_GRAYSCALE list(0.33,0.33,0.33,0, 0.59,0.59,0.59,0, 0.11,0.11,0.11,0, 0,0,0,1, 0,0,0,0)
+///Polaroid colors
+#define COLOR_MATRIX_POLAROID list(1.438,-0.062,-0.062,0, -0.122,1.378,-0.122,0, -0.016,-0.016,1.483,0, 0,0,0,1, 0,0,0,0)
+/// Converts reds to blue, green to red and blue to green.
+#define COLOR_MATRIX_BRG list(0,0,1,0, 0,1,0,0, 1,0,0,0, 0,0,0,1, 0,0,0,0)
+/// Black & White
+#define COLOR_MATRIX_BLACK_WHITE list(1.5,1.5,1.5,0, 1.5,1.5,1.5,0, 1.5,1.5,1.5,0, 0,0,0,1, -1,-1,-1,0)
+/**
+ * Adds/subtracts overall lightness
+ * 0 is identity, 1 makes everything white, -1 makes everything black
+ */
+#define COLOR_MATRIX_LIGHTNESS(power) list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, power,power,power,0)
+/**
+ * Changes distance colors have from rgb(127,127,127) grey
+ * 1 is identity. 0 makes everything grey >1 blows out colors and greys
+ */
+#define COLOR_MATRIX_CONTRAST(val) list(val,0,0,0, 0,val,0,0, 0,0,val,0, 0,0,0,1, (1-val)*0.5,(1-val)*0.5,(1-val)*0.5,0)
diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm
index 6cc9f47fa18..df7320f5085 100644
--- a/code/__DEFINES/melee.dm
+++ b/code/__DEFINES/melee.dm
@@ -11,4 +11,4 @@
#define MARTIALART_WRESTLING "wrestling"
/// The number of hits required to crit a target
-#define HITS_TO_CRIT(damage) round(HUMAN_MAXHEALTH / damage, 0.1) // SKYRAT EDIT - changes the magic health number of 100 to HUMAN_MAXHEALTH.
+#define HITS_TO_CRIT(damage) round(HUMAN_MAXHEALTH / damage, 0.1) // NOVA EDIT - changes the magic health number of 100 to HUMAN_MAXHEALTH.
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index e4d7bc60502..4c2eea59834 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -13,7 +13,7 @@
//Blood levels
#define BLOOD_VOLUME_MAX_LETHAL 2150
#define BLOOD_VOLUME_EXCESS 2100
-#define BLOOD_VOLUME_MAXIMUM 1000 // SKYRAT EDIT - Blood volume balancing (mainly for Hemophages as nobody else really goes much above regular blood volume) - ORIGINAL VALUE: 2000
+#define BLOOD_VOLUME_MAXIMUM 1000 // NOVA EDIT - Blood volume balancing (mainly for Hemophages as nobody else really goes much above regular blood volume) - ORIGINAL VALUE: 2000
#define BLOOD_VOLUME_SLIME_SPLIT 1120
#define BLOOD_VOLUME_NORMAL 560
#define BLOOD_VOLUME_SAFE 475
@@ -97,7 +97,7 @@
#define BODYTYPE_ALIEN (1<<7)
///The limb is from a golem
#define BODYTYPE_GOLEM (1<<8)
-// SKYRAT EDIT ADDITION
+// NOVA EDIT ADDITION
///The limb fits a modular custom shape
#define BODYTYPE_CUSTOM (1<<9)
///The limb fits a taur body
@@ -106,7 +106,7 @@
#define BODYTYPE_HIDE_SHOES (1<<11)
///The limb causes glasses and hats to be drawn on layers 5 and 4 respectively. Currently used for snouts with the (Top) suffix, which are drawn on layer 6 and would normally cover facewear
#define BODYTYPE_ALT_FACEWEAR_LAYER (1<<12)
-// SKYRAT EDIT END
+// NOVA EDIT END
#define BODYTYPE_BIOSCRAMBLE_COMPATIBLE (BODYTYPE_HUMANOID | BODYTYPE_MONKEY | BODYTYPE_ALIEN)
#define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_ROBOTIC) && (bodytype & BODYTYPE_BIOSCRAMBLE_COMPATIBLE))
@@ -456,12 +456,12 @@
#define OFFSET_SUIT "suit"
#define OFFSET_NECK "neck"
#define OFFSET_HELD "held"
-#define OFFSET_ACCESSORY "accessory" // Skyrat edit - addition
-#define OFFSET_HAIR "hair" // Skyrat edit - addition - Akulas
+#define OFFSET_ACCESSORY "accessory" // NOVA EDIT - addition
+#define OFFSET_HAIR "hair" // NOVA EDIT - addition - Akulas
//MINOR TWEAKS/MISC
//#define AGE_MIN 17 //youngest a character can be //ORIGINAL
-#define AGE_MIN 18 //youngest a character can be //SKYRAT EDIT CHANGE - age
+#define AGE_MIN 18 //youngest a character can be //NOVA EDIT CHANGE - age
#define AGE_MAX 85 //oldest a character can be
#define AGE_MINOR 20 //legal age of space drinking and smoking
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
@@ -707,36 +707,36 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list(
/// Total number of layers for mob overlays
/// KEEP THIS UP-TO-DATE OR SHIT WILL BREAK
/// Also consider updating layers_to_offset
-#define TOTAL_LAYERS 40 // SKYRAT EDIT CHANGE - ORIGINAL: 34
+#define TOTAL_LAYERS 40 // NOVA EDIT CHANGE - ORIGINAL: 34
/// Mutations layer - Tk headglows, cold resistance glow, etc
-#define MUTATIONS_LAYER 40 // SKYRAT EDIT CHANGE - ORIGINAL: 34
+#define MUTATIONS_LAYER 40 // NOVA EDIT CHANGE - ORIGINAL: 34
/// Mutantrace features (tail when looking south) that must appear behind the body parts
-#define BODY_BEHIND_LAYER 39 // SKYRAT EDIT CHANGE - ORIGINAL: 33
+#define BODY_BEHIND_LAYER 39 // NOVA EDIT CHANGE - ORIGINAL: 33
/// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST
-#define BODYPARTS_LOW_LAYER 38 // SKYRAT EDIT CHANGE - ORIGINAL: 32
+#define BODYPARTS_LOW_LAYER 38 // NOVA EDIT CHANGE - ORIGINAL: 32
/// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER
-#define BODYPARTS_LAYER 37 // SKYRAT EDIT CHANGE - ORIGINAL: 31
+#define BODYPARTS_LAYER 37 // NOVA EDIT CHANGE - ORIGINAL: 31
/// Mutantrace features (snout, body markings) that must appear above the body parts
-#define BODY_ADJ_LAYER 36 // SKYRAT EDIT CHANGE - ORIGINAL: 30
+#define BODY_ADJ_LAYER 36 // NOVA EDIT CHANGE - ORIGINAL: 30
/// Underwear, undershirts, socks, eyes, lips(makeup)
-#define BODY_LAYER 35 // SKYRAT EDIT CHANGE - ORIGINAL: 29
+#define BODY_LAYER 35 // NOVA EDIT CHANGE - ORIGINAL: 29
/// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
-#define FRONT_MUTATIONS_LAYER 34 // SKYRAT EDIT CHANGE - ORIGINAL: 28
+#define FRONT_MUTATIONS_LAYER 34 // NOVA EDIT CHANGE - ORIGINAL: 28
/// Damage indicators (cuts and burns)
-#define DAMAGE_LAYER 33 // SKYRAT EDIT CHANGE - ORIGINAL: 27
-// SKYRAT EDIT ADDITION START
+#define DAMAGE_LAYER 33 // NOVA EDIT CHANGE - ORIGINAL: 27
+// NOVA EDIT ADDITION START
/// This layer is used for things that shouldn't be over clothes, but should be over mutations
#define BODY_FRONT_UNDER_CLOTHES 32
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
/// Jumpsuit clothing layer
-#define UNIFORM_LAYER 31 // SKYRAT EDIT CHANGE - ORIGINAL: 26
-// SKYRAT EDIT ADDITION BEGIN - cursed layers under clothing
+#define UNIFORM_LAYER 31 // NOVA EDIT CHANGE - ORIGINAL: 26
+// NOVA EDIT ADDITION BEGIN - cursed layers under clothing
#define ANUS_LAYER 30
#define VAGINA_LAYER 29
#define PENIS_LAYER 28
#define NIPPLES_LAYER 27
#define BANDAGE_LAYER 26
-//SKYRAT EDIT ADDITION END
+//NOVA EDIT ADDITION END
/// ID card layer
#define ID_LAYER 25
/// ID card layer (might be deprecated)
@@ -839,14 +839,14 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
#define EXTERNAL_ADJACENT (1 << 2)
/// Draws organ on the BODY_BEHIND_LAYER
#define EXTERNAL_BEHIND (1 << 3)
-// SKYRAT EDIT ADDITION - Customization
+// NOVA EDIT ADDITION - Customization
/// Draws organ on the BODY_FRONT_UNDER_CLOTHES
#define EXTERNAL_FRONT_UNDER_CLOTHES (1 << 4)
/// Draws organ on the ABOVE_BODY_FRONT_HEAD_LAYER
#define EXTERNAL_FRONT_OVER (1 << 5)
/// Draws organ on the HEAD_LAYER, for things that need to be above hair but below hats.
#define EXTERNAL_FRONT_ABOVE_HAIR (1 << 6)
-// SKYRAT EDIT END (not touching what comes next because we don't actually have to (nor want to))
+// NOVA EDIT END (not touching what comes next because we don't actually have to (nor want to))
/// Draws organ on all EXTERNAL layers
#define ALL_EXTERNAL_OVERLAYS EXTERNAL_FRONT | EXTERNAL_ADJACENT | EXTERNAL_BEHIND
diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm
index 1c9f3b59ecd..a316c1443b1 100644
--- a/code/__DEFINES/modular_computer.dm
+++ b/code/__DEFINES/modular_computer.dm
@@ -1,37 +1,75 @@
-//NTNet stuff, for modular computers
-
-//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 300
-#define MIN_NTNET_LOGS 10
-
-//Program bitflags
+/**
+ * can_run_on_flags bitflags
+ * Used by programs to tell what type of ModPC it can run on.
+ * Everything a program can run on needs valid icons for each individual one.
+ */
+///Runs on everything.
#define PROGRAM_ALL ALL
+///Can run on Modular PC Consoles
#define PROGRAM_CONSOLE (1<<0)
+///Can run on Laptops.
#define PROGRAM_LAPTOP (1<<1)
-#define PROGRAM_TABLET (1<<2)
+///Can run on PDAs.
+#define PROGRAM_PDA (1<<2)
+
+/**
+ * program_flags
+ * Used by programs to tell the ModPC any special functions it has.
+ */
+///If the program requires NTNet to be online for it to work.
+#define PROGRAM_REQUIRES_NTNET (1<<0)
+///The program can be downloaded from the default NTNet downloader store.
+#define PROGRAM_ON_NTNET_STORE (1<<1)
+///The program can only be downloaded from the Syndinet store, usually nukie/emagged pda.
+#define PROGRAM_ON_SYNDINET_STORE (1<<2)
+///The program is unique and will delete itself upon being transferred to ensure only one copy exists.
+#define PROGRAM_UNIQUE_COPY (1<<3)
+///The program is a header and will show up at the top of the ModPC's UI.
+#define PROGRAM_HEADER (1<<4)
+///The program will run despite the ModPC not having any power in it.
+#define PROGRAM_RUNS_WITHOUT_POWER (1<<5)
+
//Program categories
-#define PROGRAM_CATEGORY_CREW "Crew"
-#define PROGRAM_CATEGORY_ENGI "Engineering"
-#define PROGRAM_CATEGORY_SUPL "Supply"
-#define PROGRAM_CATEGORY_SCI "Science"
-#define PROGRAM_CATEGORY_MISC "Other"
+#define PROGRAM_CATEGORY_DEVICE "Device Tools"
+#define PROGRAM_CATEGORY_EQUIPMENT "Equipment"
+#define PROGRAM_CATEGORY_GAMES "Games"
+#define PROGRAM_CATEGORY_SECURITY "Security & Records"
+#define PROGRAM_CATEGORY_ENGINEERING "Engineering"
+#define PROGRAM_CATEGORY_SUPPLY "Supply"
+#define PROGRAM_CATEGORY_SCIENCE "Science"
+///This app grants a minor protection against being PDA bombed if installed.
+///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender).
#define DETOMATIX_RESIST_MINOR 1
+///This app grants a larger protection against being PDA bombed if installed.
+///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender).
#define DETOMATIX_RESIST_MAJOR 2
+///This app gives a diminished protection against being PDA bombed if installed.
+#define DETOMATIX_RESIST_MALUS -4
-//NTNet transfer speeds, used when downloading/uploading a file/program.
-#define NTNETSPEED_LOWSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on Low signal
-#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal
-#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection
+/**
+ * NTNet transfer speeds, used when downloading/uploading a file/program.
+ * The define is how fast it will download an app every program's process_tick.
+ */
+///Used for wireless devices with low signal.
+#define NTNETSPEED_LOWSIGNAL 0.5
+///Used for wireless devices with high signal.
+#define NTNETSPEED_HIGHSIGNAL 1
+///Used for laptops with a high signal, or computers, which is connected regardless of z level.
+#define NTNETSPEED_ETHERNET 2
-// NTNet connection signals
-///When you're away from the station/mining base and not on a console, you can't access the internet
+/**
+ * NTNet connection signals
+ * Used to calculate the defines above from NTNet Downloader, this is how
+ * good a ModPC's signal is.
+ */
+///When you're away from the station/mining base and not on a console, you can't access the internet.
#define NTNET_NO_SIGNAL 0
///Low signal, so away from the station, but still connected
#define NTNET_LOW_SIGNAL 1
-///On station, good signal
+///On station with good signal.
#define NTNET_GOOD_SIGNAL 2
-///Using a Computer, ethernet-connected.
+///Using a Computer or Laptop with good signal, ethernet-connected.
#define NTNET_ETHERNET_SIGNAL 3
/// The default ringtone of the Messenger app.
@@ -40,6 +78,11 @@
/// The maximum length of the ringtone of the Messenger app.
#define MESSENGER_RINGTONE_MAX_LENGTH 20
+/**
+ * PDA Themes
+ * For these to work, the defines must be defined in tgui/styles/themes/[define].scss
+ */
+
///Default NtOS PDA theme
#define PDA_THEME_NTOS "ntos"
#define PDA_THEME_DARK_MODE "ntos_darkmode"
diff --git a/code/__DEFINES/pai.dm b/code/__DEFINES/pai.dm
index 356cbc28843..c2b4cf7ba84 100644
--- a/code/__DEFINES/pai.dm
+++ b/code/__DEFINES/pai.dm
@@ -12,7 +12,7 @@
#define PAI_SPAM_TIME (40 SECONDS)
/// Maximum distance you can set the holoform leash
-#define HOLOFORM_MAX_RANGE 25 // SKYRAT EDIT CHANGE - ORIGINAL: #define HOLOFORM_MAX_RANGE 9
+#define HOLOFORM_MAX_RANGE 25 // NOVA EDIT CHANGE - ORIGINAL: #define HOLOFORM_MAX_RANGE 9
/// Minimum distance you can set the holoform leash
#define HOLOFORM_MIN_RANGE 3
/// Default holoform leash distance
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index fa24963e34e..44a9115ec2d 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -60,7 +60,7 @@
// Playtime tracking system, see jobs_exp.dm
#define EXP_TYPE_LIVING "Living"
#define EXP_TYPE_CREW "Crew"
-#define EXP_TYPE_CENTRAL_COMMAND "Central Command" // SKYRAT EDIT ADD
+#define EXP_TYPE_CENTRAL_COMMAND "Central Command" // NOVA EDIT ADD
#define EXP_TYPE_COMMAND "Command"
#define EXP_TYPE_ENGINEERING "Engineering"
#define EXP_TYPE_MEDICAL "Medical"
diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm
index 64e084b6e00..533bff874ff 100644
--- a/code/__DEFINES/reagents.dm
+++ b/code/__DEFINES/reagents.dm
@@ -136,11 +136,11 @@
#define MAX_ADDICTION_POINTS 1000
///Addiction start/ends
-#define WITHDRAWAL_STAGE1_START_CYCLE 121 // SKYRAT EDIT CHANGE - Original 61
-#define WITHDRAWAL_STAGE1_END_CYCLE 240 // SKYRAT EDIT CHANGE - Original 120
-#define WITHDRAWAL_STAGE2_START_CYCLE 241 // SKYRAT EDIT CHANGE - Original 121
-#define WITHDRAWAL_STAGE2_END_CYCLE 360 // SKYRAT EDIT CHANGE - Original 180
-#define WITHDRAWAL_STAGE3_START_CYCLE 361 // SKYRAT EDIT CHANGE - Original 181
+#define WITHDRAWAL_STAGE1_START_CYCLE 121 // NOVA EDIT CHANGE - Original 61
+#define WITHDRAWAL_STAGE1_END_CYCLE 240 // NOVA EDIT CHANGE - Original 120
+#define WITHDRAWAL_STAGE2_START_CYCLE 241 // NOVA EDIT CHANGE - Original 121
+#define WITHDRAWAL_STAGE2_END_CYCLE 360 // NOVA EDIT CHANGE - Original 180
+#define WITHDRAWAL_STAGE3_START_CYCLE 361 // NOVA EDIT CHANGE - Original 181
///reagent tags - used to look up reagents for specific effects. Feel free to add to but comment it
/// This reagent does brute effects (BOTH damaging and healing)
diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm
index 9ab97ae5a8d..0ae1c24b0e3 100644
--- a/code/__DEFINES/research/anomalies.dm
+++ b/code/__DEFINES/research/anomalies.dm
@@ -44,9 +44,9 @@ GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list (
/obj/item/organ/internal/monster_core,
/obj/item/organ/internal/vocal_cords/colossus,
/obj/item/organ/internal/zombie_infection,
- /obj/item/organ/internal/empowered_borer_egg, // SKYRAT EDIT ADDITION
- /obj/item/organ/internal/eyes/robotic, // SKYRAT EDIT ADDITION
- /obj/item/organ/internal/eyes/night_vision/cyber, // SKYRAT EDIT ADDITION
+ /obj/item/organ/internal/empowered_borer_egg, // NOVA EDIT ADDITION
+ /obj/item/organ/internal/eyes/robotic, // NOVA EDIT ADDITION
+ /obj/item/organ/internal/eyes/night_vision/cyber, // NOVA EDIT ADDITION
)))
/// List of body parts we can apply to people
diff --git a/code/__DEFINES/research/slimes.dm b/code/__DEFINES/research/slimes.dm
index 64a85afc217..59410564928 100644
--- a/code/__DEFINES/research/slimes.dm
+++ b/code/__DEFINES/research/slimes.dm
@@ -1,7 +1,13 @@
+#define SLIME_LIFE_STAGE_BABY "baby"
+#define SLIME_LIFE_STAGE_ADULT "adult"
+
+#define SLIME_MIN_POWER 0
+#define SLIME_MEDIUM_POWER 5
+#define SLIME_MAX_POWER 10
+
// Just slimin' here.
-// Warning: These defines are used for slime cores and their icon states, so if you
-// touch these names, remember to update icons/mob/simple/slimes.dmi and the respective
-// slime core paths too!
+// Warning: These defines are used for slime icon states, so if you
+// touch these names, remember to update icons/mob/simple/slimes.dmi!
#define SLIME_TYPE_ADAMANTINE "adamantine"
#define SLIME_TYPE_BLACK "black"
diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm
index 26b66f0de60..1bf75871175 100644
--- a/code/__DEFINES/robots.dm
+++ b/code/__DEFINES/robots.dm
@@ -51,14 +51,14 @@
///Third Borg module slot.
#define BORG_CHOOSE_MODULE_THREE 3
-// SKYRAT EDIT START - TODO - Move this upstream later
+// NOVA EDIT START - TODO - Move this upstream later
/// To store all the different cyborg models, instead of creating that for each cyborg.
GLOBAL_LIST_EMPTY(cyborg_model_list)
/// To store all of the different base cyborg model icons, instead of creating them every time the pick_module() proc is called.
GLOBAL_LIST_EMPTY(cyborg_base_models_icon_list)
/// To store all of the different cyborg model icons, instead of creating them every time the be_transformed_to() proc is called.
GLOBAL_LIST_EMPTY(cyborg_all_models_icon_list)
-// SKYRAT EDIT END
+// NOVA EDIT END
#define SKIN_ICON "skin_icon"
#define SKIN_ICON_STATE "skin_icon_state"
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index 5ac9be55345..44a6eadafff 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -16,10 +16,10 @@
#define ROLE_OPERATIVE "Operative"
#define ROLE_TRAITOR "Traitor"
#define ROLE_WIZARD "Wizard"
-// SKYRAT EDIT START
+// NOVA EDIT START
#define ROLE_ASSAULT_OPERATIVE "Assault Operative"
#define ROLE_OPFOR_CANDIDATE "OPFOR Candidate"
-// SKYRAT EDIT END
+// NOVA EDIT END
// Midround roles
#define ROLE_ABDUCTOR "Abductor"
@@ -41,13 +41,13 @@
#define ROLE_SPACE_DRAGON "Space Dragon"
#define ROLE_SPIDER "Spider"
#define ROLE_WIZARD_MIDROUND "Wizard (Midround)"
-//SKYRAT EDIT START
+//NOVA EDIT START
#define ROLE_BORER "Borer"
#define ROLE_DRIFTING_CONTRACTOR "Drifting Contractor"
#define ROLE_LONE_INFILTRATOR "Lone Infiltrator"
#define ROLE_MUTANT "Mutated Abomination"
#define ROLE_CLOCK_CULTIST "Clock Cultist"
-// SKYRAT EDIT END
+// NOVA EDIT END
// Latejoin roles
#define ROLE_HERETIC_SMUGGLER "Heretic Smuggler"
@@ -122,13 +122,13 @@
#define ROLE_CYBER_POLICE "Cyber Police"
#define ROLE_CYBER_TAC "Cyber Tac"
#define ROLE_NETGUARDIAN "NetGuardian Prime"
-//SKYRAT EDIT START - Skyrat roles
+//NOVA EDIT START - Skyrat roles
#define ROLE_BLACK_MARKET_DEALER "Black Market Dealer"
#define ROLE_DS2 "DS2 Syndicate"
#define ROLE_FREIGHTER_CREW "Freighter Crew"
#define ROLE_GHOST_CAFE "Ghost Cafe Visitor"
#define ROLE_PORT_TARKON "Port Tarkon Survivor"
-//SKYRAT EDIT END
+//NOVA EDIT END
/// This defines the antagonists you can operate with in the settings.
/// Keys are the antagonist, values are the number of days since the player's
@@ -145,9 +145,9 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_REV_HEAD = 14,
ROLE_TRAITOR = 0,
ROLE_WIZARD = 14,
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
ROLE_ASSAULT_OPERATIVE = 14,
- // SKYRAT EDIT END
+ // NOVA EDIT END
// Midround
ROLE_ABDUCTOR = 0,
@@ -169,12 +169,12 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_SPACE_DRAGON = 0,
ROLE_SPIDER = 0,
ROLE_WIZARD_MIDROUND = 14,
- //SKYRAT EDIT START
+ //NOVA EDIT START
ROLE_LONE_INFILTRATOR = 0,
ROLE_BORER = 0,
ROLE_DRIFTING_CONTRACTOR = 14,
ROLE_MUTANT = 0,
- //SKYRAT EDIT END
+ //NOVA EDIT END
// Latejoin
ROLE_HERETIC_SMUGGLER = 0,
diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm
index d5f1496079f..4ea5e070146 100644
--- a/code/__DEFINES/say.dm
+++ b/code/__DEFINES/say.dm
@@ -98,7 +98,7 @@
#define FOLLOW_OR_TURF_LINK(alice, bob, turfy) "(F) "
//Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
-#define MAX_MESSAGE_LEN 2048 //SKYRAT EDIT CHANGE - ORIGINAL 1024 - I SAID DOUBLE IT!! FUCK THE WARNING!
+#define MAX_MESSAGE_LEN 2048 //NOVA EDIT CHANGE - ORIGINAL 1024 - I SAID DOUBLE IT!! FUCK THE WARNING!
#define MAX_NAME_LEN 42
#define MAX_BROADCAST_LEN 512
#define MAX_CHARTER_LEN 80
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index d95973e3fdb..4bd9c5acefd 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -2,7 +2,7 @@
#define CHANNEL_LOBBYMUSIC 1024
#define CHANNEL_ADMIN 1023
#define CHANNEL_VOX 1022
-#define CHANNEL_JUKEBOX 1011 // SKYRAT EDIT - JUKEBOX - ORIGINAL: #define CHANNEL_JUKEBOX 1021
+#define CHANNEL_JUKEBOX 1011 // NOVA EDIT - JUKEBOX - ORIGINAL: #define CHANNEL_JUKEBOX 1021
#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats
#define CHANNEL_BOSS_MUSIC 1019
#define CHANNEL_AMBIENCE 1018
@@ -11,10 +11,10 @@
#define CHANNEL_CHARGED_SPELL 1015
#define CHANNEL_ELEVATOR 1014
-// SKYRAT EDIT START - JUKEBOX
+// NOVA EDIT START - JUKEBOX
#define CHANNEL_JUKEBOX_START 1006
#define CHANNEL_HEV 1005
-//SKYRAT EDIT CHANGE END
+//NOVA EDIT CHANGE END
///Default range of a sound.
#define SOUND_RANGE 17
@@ -31,7 +31,7 @@
//THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED
-#define CHANNEL_HIGHEST_AVAILABLE 1005 //SKYRAT EDIT CHANGE - JUKEBOX > ORIGINAL VALUE 1015
+#define CHANNEL_HIGHEST_AVAILABLE 1005 //NOVA EDIT CHANGE - JUKEBOX > ORIGINAL VALUE 1015
#define MAX_INSTRUMENT_CHANNELS (128 * 6)
@@ -124,7 +124,7 @@
#define ANNOUNCER_SHUTTLERECALLED "announcer_shuttlerecalled"
#define ANNOUNCER_SPANOMALIES "announcer_spanomalies"
-//SKYRAT EDIT ADDITION BEGIN
+//NOVA EDIT ADDITION BEGIN
#define ANNOUNCER_SHUTTLELEFT "announcer_shuttleleft"
#define ANNOUNCER_CARP "announcer_carp"
#define ANNOUNCER_VORTEXANOMALIES "announcer_vortexanomalies"
@@ -152,7 +152,7 @@
#define ANNOUNCER_OUTBREAK6 "announcer_outbreak6"
#define ANNOUNCER_DEPARTMENTAL "announcer_departmental"
#define ANNOUNCER_SHUTTLE "announcer_shuttle"
-//SKYRAT EDIT END
+//NOVA EDIT END
/// Global list of all of our announcer keys.
@@ -173,7 +173,7 @@ GLOBAL_LIST_INIT(announcer_keys, list(
ANNOUNCER_SHUTTLEDOCK,
ANNOUNCER_SHUTTLERECALLED,
ANNOUNCER_SPANOMALIES,
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
ANNOUNCER_SHUTTLELEFT,
ANNOUNCER_CARP,
ANNOUNCER_VORTEXANOMALIES,
@@ -198,7 +198,7 @@ GLOBAL_LIST_INIT(announcer_keys, list(
ANNOUNCER_ICARUS,
ANNOUNCER_NRI_RAIDERS,
ANNOUNCER_OUTBREAK6,
- //SKYRAT EDIT END
+ //NOVA EDIT END
))
/// List of all of our sound keys.
diff --git a/code/__DEFINES/spacevines.dm b/code/__DEFINES/spacevines.dm
index 84739f344b5..602b8143f55 100644
--- a/code/__DEFINES/spacevines.dm
+++ b/code/__DEFINES/spacevines.dm
@@ -27,10 +27,10 @@
#define SEVERITY_MAJOR 10
/// Kudzu mutativeness is based on a scale factor * potency
-#define MUTATIVENESS_SCALE_FACTOR 0.1 // SKYRAT EDIT CHANGE - Original: 0.2
+#define MUTATIVENESS_SCALE_FACTOR 0.1 // NOVA EDIT CHANGE - Original: 0.2
/// Kudzu maximum mutation severity is a linear function of potency
-#define MAX_SEVERITY_LINEAR_COEFF 0.1 // SKYRAT EDIT CHANGE - Original: 0.15
+#define MAX_SEVERITY_LINEAR_COEFF 0.1 // NOVA EDIT CHANGE - Original: 0.15
#define MAX_SEVERITY_CONSTANT_TERM 10
/// Additional maximum mutation severity given to kudzu spawned by a random event
diff --git a/code/__DEFINES/species_clothing_paths.dm b/code/__DEFINES/species_clothing_paths.dm
index 9b7a3b88905..38247852182 100644
--- a/code/__DEFINES/species_clothing_paths.dm
+++ b/code/__DEFINES/species_clothing_paths.dm
@@ -8,12 +8,12 @@
//MONKEY PATHS
///The dmi for monkey uniforms
-#define MONKEY_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi' // SKYRAT EDIT CHANGE
+#define MONKEY_UNIFORM_FILE 'modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi' // NOVA EDIT CHANGE
//DIGITIGRADE PATHS
///The dmi containing digitigrade uniforms
-#define DIGITIGRADE_UNIFORM_FILE 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi' // SKYRAT EDIT CHANGE
+#define DIGITIGRADE_UNIFORM_FILE 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi' // NOVA EDIT CHANGE
///The dmi containing digitigrade shoes
-#define DIGITIGRADE_SHOES_FILE 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi' // SKYRAT EDIT CHANGE
+#define DIGITIGRADE_SHOES_FILE 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi' // NOVA EDIT CHANGE
///The dmi containing digitigrade oversuits
-#define DIGITIGRADE_SUIT_FILE 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi' // SKYRAT EDIT CHANGE
+#define DIGITIGRADE_SUIT_FILE 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi' // NOVA EDIT CHANGE
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index d227744ddd1..802ff324bd2 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -20,7 +20,7 @@
*
* make sure you add an update to the schema_version stable in the db changelog
*/
-#define DB_MINOR_VERSION 26
+#define DB_MINOR_VERSION 28
//! ## Timing subsystem
@@ -137,7 +137,7 @@
#define INIT_ORDER_BLACKBOX 94
#define INIT_ORDER_SERVER_MAINT 93
#define INIT_ORDER_INPUT 85
-#define INIT_ORDER_PLAYER_RANKS 84 // SKYRAT EDIT - Player Ranks Subsystem
+#define INIT_ORDER_PLAYER_RANKS 84 // NOVA EDIT - Player Ranks Subsystem
#define INIT_ORDER_SOUNDS 83
#define INIT_ORDER_INSTRUMENTS 82
#define INIT_ORDER_GREYSCALE 81
@@ -155,7 +155,7 @@
#define INIT_ORDER_AI_CONTROLLERS 55 //So the controller can get the ref
#define INIT_ORDER_TICKER 55
#define INIT_ORDER_TCG 55
-#define INIT_ORDER_AUTOMAPPER 51 // SKYRAT EDIT ADDITION - We need to load just before mapping.
+#define INIT_ORDER_AUTOMAPPER 51 // NOVA EDIT ADDITION - We need to load just before mapping.
#define INIT_ORDER_MAPPING 50
#define INIT_ORDER_EARLY_ASSETS 48
#define INIT_ORDER_RESEARCH 47
@@ -164,10 +164,10 @@
#define INIT_ORDER_ECONOMY 40
#define INIT_ORDER_OUTPUTS 35
#define INIT_ORDER_RESTAURANT 34
-#define INIT_ORDER_POLLUTION 32 //SKYRAT EDIT ADDITION - //Needs to be above atoms
+#define INIT_ORDER_POLLUTION 32 //NOVA EDIT ADDITION - //Needs to be above atoms
#define INIT_ORDER_TTS 33
#define INIT_ORDER_ATOMS 30
-#define INIT_ORDER_ARMAMENTS 27 // SKYRAT EDIT ADDITION - Needs to be between atoms and default so it runs before gun companies
+#define INIT_ORDER_ARMAMENTS 27 // NOVA EDIT ADDITION - Needs to be between atoms and default so it runs before gun companies
#define INIT_ORDER_LANGUAGE 25
#define INIT_ORDER_MACHINES 20
#define INIT_ORDER_SKILLS 15
@@ -187,7 +187,7 @@
#define INIT_ORDER_SHUTTLE -21
#define INIT_ORDER_MINOR_MAPPING -40
#define INIT_ORDER_PATH -50
-#define INIT_ORDER_DECAY -61 //SKYRAT EDIT ADDITION
+#define INIT_ORDER_DECAY -61 //NOVA EDIT ADDITION
#define INIT_ORDER_EXPLOSIONS -69
#define INIT_ORDER_STATPANELS -97
#define INIT_ORDER_BAN_CACHE -98
diff --git a/code/__DEFINES/surgery.dm b/code/__DEFINES/surgery.dm
index 6f078c28724..e0a3c3b9837 100644
--- a/code/__DEFINES/surgery.dm
+++ b/code/__DEFINES/surgery.dm
@@ -26,10 +26,10 @@
#define ORGAN_HIDDEN (1<<9)
/// Has the organ already been inserted inside someone
#define ORGAN_VIRGIN (1<<10)
-// SKYRAT EDIT START - Customization
+// NOVA EDIT START - Customization
/// Synthetic organ granted by a species (for use for organ replacements between species)
#define ORGAN_SYNTHETIC_FROM_SPECIES (1<<11)
-// SKYRAT EDIT END
+// NOVA EDIT END
/// Helper to figure out if a limb is organic
#define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC)
diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm
index c98baa5f4aa..9529d6c4fe2 100644
--- a/code/__DEFINES/text.dm
+++ b/code/__DEFINES/text.dm
@@ -84,10 +84,10 @@
#define FLESH_SCAR_FILE "wounds/flesh_scar_desc.json"
/// File location for bone wound descriptions
#define BONE_SCAR_FILE "wounds/bone_scar_desc.json"
-// SKYRAT EDIT ADDITION BEGIN - SYNTH WOUNDS
+// NOVA EDIT ADDITION BEGIN - SYNTH WOUNDS
/// File location for metalic wound descriptions
-#define METAL_SCAR_FILE "wounds/metal_scar_desc.json"
-// SKYRAT EDIT ADDITION END
+#define METAL_SCAR_FILE "wounds/metal_scar_desc.json"
+// NOVA EDIT ADDITION END
/// File location for scar wound descriptions
#define SCAR_LOC_FILE "wounds/scar_loc.json"
/// File location for exodrone descriptions
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index b0e97e05e9b..c561a64ebf5 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "6.7.0"
+#define TGS_DMAPI_VERSION "7.0.1"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
@@ -73,12 +73,12 @@
#define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3
/// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path.
#define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4
-/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND.
-#define TGS_EVENT_BYOND_INSTALL_START 5
-/// When a BYOND install operation fails. Parameters: Error message
-#define TGS_EVENT_BYOND_INSTALL_FAIL 6
-/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND.
-#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7
+/// Before a engine install operation begins. Parameters: Version string of the installing engine.
+#define TGS_EVENT_ENGINE_INSTALL_START 5
+/// When a engine install operation fails. Parameters: Error message
+#define TGS_EVENT_ENGINE_INSTALL_FAIL 6
+/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine.
+#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7
/// When the compiler starts running. Parameters: Game directory path, origin commit SHA.
#define TGS_EVENT_COMPILE_START 8
/// When a compile is cancelled. No parameters.
@@ -108,7 +108,7 @@
// #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22
/// After a single submodule update is performed. Parameters: Updated submodule name.
#define TGS_EVENT_REPO_SUBMODULE_UPDATE 23
-/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version.
+/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine.
#define TGS_EVENT_PRE_DREAM_MAKER 24
/// Whenever a deployment folder is deleted from disk. Parameters: Game directory path.
#define TGS_EVENT_DEPLOYMENT_CLEANUP 25
@@ -122,6 +122,7 @@
/// The watchdog will restart on reboot.
#define TGS_REBOOT_MODE_RESTART 2
+// Note that security levels are currently meaningless in OpenDream
/// DreamDaemon Trusted security level.
#define TGS_SECURITY_TRUSTED 0
/// DreamDaemon Safe security level.
@@ -136,6 +137,11 @@
/// DreamDaemon invisible visibility level.
#define TGS_VISIBILITY_INVISIBLE 2
+/// The Build Your Own Net Dream engine.
+#define TGS_ENGINE_TYPE_BYOND 0
+/// The OpenDream engine.
+#define TGS_ENGINE_TYPE_OPENDREAM 1
+
//REQUIRED HOOKS
/**
@@ -449,6 +455,10 @@
/world/proc/TgsVersion()
return
+/// Returns the running engine type
+/world/proc/TgsEngine()
+ return
+
/// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping!
/world/proc/TgsApiVersion()
return
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index 8b7cb16c21f..2f8098cc6dd 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -415,6 +415,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
// Being close enough to the supermatter makes it heal at higher temperatures
// and emit less heat. Present on /mob or /datum/mind
#define TRAIT_SUPERMATTER_SOOTHER "supermatter_soother"
+/// Mob has fov applied to it
+#define TRAIT_FOV_APPLIED "fov_applied"
+/// Mob is using the scope component
+#define TRAIT_USER_SCOPED "user_scoped"
/// Trait added when a revenant is visible.
#define TRAIT_REVENANT_REVEALED "revenant_revealed"
@@ -612,9 +616,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags]
#define TRAIT_KEEP_TOGETHER "keep-together"
-///Marks the item as having been transmuted. Functionally blacklists the item from being recycled or sold for materials.
-#define TRAIT_MAT_TRANSMUTED "transmuted"
-
// cargo traits
///If the item will block the cargo shuttle from flying to centcom
#define TRAIT_BANNED_FROM_CARGO_SHUTTLE "banned_from_cargo_shuttle"
@@ -774,10 +775,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Trait applied when an integrated circuit opens a UI on a player (see list pick component)
#define TRAIT_CIRCUIT_UI_OPEN "circuit_ui_open"
-/// PDA Traits. This one makes PDAs explode if the user opens the messages menu
+/// PDA/ModPC Traits. This one makes PDAs explode if the user opens the messages menu
#define TRAIT_PDA_MESSAGE_MENU_RIGGED "pda_message_menu_rigged"
/// This one denotes a PDA has received a rigged message and will explode when the user tries to reply to a rigged PDA message
#define TRAIT_PDA_CAN_EXPLODE "pda_can_explode"
+///The download speeds of programs from the dowloader is halved.
+#define TRAIT_MODPC_HALVED_DOWNLOAD_SPEED "modpc_halved_download_speed"
/// If present on a [/mob/living/carbon], will make them appear to have a medium level disease on health HUDs.
#define TRAIT_DISEASELIKE_SEVERITY_MEDIUM "diseaselike_severity_medium"
@@ -1011,6 +1014,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Trait given to foam darts that have an insert in them
#define TRAIT_DART_HAS_INSERT "dart_has_insert"
+/// Trait determines if this mob has examined an eldritch painting
+#define TRAIT_ELDRITCH_PAINTING_EXAMINE "eldritch_painting_examine"
+
+/// Trait used by the /datum/brain_trauma/severe/flesh_desire trauma to change their preferences of what they eat
+#define TRAIT_FLESH_DESIRE "flesh_desire"
+
///Trait granted by janitor skillchip, allows communication with cleanbots
#define TRAIT_CLEANBOT_WHISPERER "cleanbot_whisperer"
diff --git a/code/__DEFINES/transport.dm b/code/__DEFINES/transport.dm
index b0b38ee70ef..7413ad58916 100644
--- a/code/__DEFINES/transport.dm
+++ b/code/__DEFINES/transport.dm
@@ -99,10 +99,10 @@ DEFINE_BITFIELD(request_flags, list(
#define XING_STATE_RED 2
#define XING_STATE_MALF 3
-#define AMBER_THRESHOLD_NORMAL 60 // SKYRAT EDIT CHANGE - RUN/WALK SPEED
-#define RED_THRESHOLD_NORMAL 37 // SKYRAT EDIT CHANGE - RUN/WALK SPEED
-#define AMBER_THRESHOLD_DEGRADED 45 // SKYRAT EDIT CHANGE - RUN/WALK SPEED
-#define RED_THRESHOLD_DEGRADED 33 // SKYRAT EDIT CHANGE - RUN/WALK SPEED
+#define AMBER_THRESHOLD_NORMAL 60 // NOVA EDIT CHANGE - RUN/WALK SPEED
+#define RED_THRESHOLD_NORMAL 37 // NOVA EDIT CHANGE - RUN/WALK SPEED
+#define AMBER_THRESHOLD_DEGRADED 45 // NOVA EDIT CHANGE - RUN/WALK SPEED
+#define RED_THRESHOLD_DEGRADED 33 // NOVA EDIT CHANGE - RUN/WALK SPEED
#define DEFAULT_TRAM_LENGTH 10
diff --git a/code/__DEFINES/uplink.dm b/code/__DEFINES/uplink.dm
index fcc2118348c..d6412e0e4d1 100644
--- a/code/__DEFINES/uplink.dm
+++ b/code/__DEFINES/uplink.dm
@@ -9,6 +9,9 @@
/// This item is purchasable to clown ops
#define UPLINK_CLOWN_OPS (1 << 2)
+/// This item is purchasable to infiltrators (midround traitors)
+#define UPLINK_INFILTRATORS (1 << 3)
+
/// Progression gets turned into a user-friendly form. This is just an abstract equation that makes progression not too large.
#define DISPLAY_PROGRESSION(time) round(time/60, 0.01)
diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm
index 787dfe13957..dfa930f7a76 100644
--- a/code/__DEFINES/vv.dm
+++ b/code/__DEFINES/vv.dm
@@ -1,6 +1,6 @@
#define VV_NUM "Number"
#define VV_TEXT "Text"
-#define VV_MESSAGE "Mutiline Text"
+#define VV_MESSAGE "Multiline Text"
#define VV_COLOR "Color"
#define VV_COLOR_MATRIX "Color Matrix"
#define VV_ICON "Icon"
diff --git a/code/__DEFINES/wall_dents.dm b/code/__DEFINES/wall_dents.dm
index 1e4f813849e..555f98671c0 100644
--- a/code/__DEFINES/wall_dents.dm
+++ b/code/__DEFINES/wall_dents.dm
@@ -1,2 +1,3 @@
#define WALL_DENT_HIT 1
#define WALL_DENT_SHOT 2
+#define MAX_DENT_DECALS 15
diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm
index 79c188cd481..224b2c973cb 100644
--- a/code/__DEFINES/wounds.dm
+++ b/code/__DEFINES/wounds.dm
@@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(bio_state_anatomy, list(
/// Generic loss wounds. See loss.dm
#define WOUND_SERIES_LOSS_BASIC "wound_series_loss_basic"
-// SKYRAT EDIT ADDITION BEGIN - MUSCLE AND SYNTH WOUNDS
+// NOVA EDIT ADDITION BEGIN - MUSCLE AND SYNTH WOUNDS
// Have to put it here so I can use it in the global list of wound series
/// See muscle.dm and robotic_blunt.dm
#define WOUND_SERIES_MUSCLE_DAMAGE "skyrat_wound_series_muscle_damage"
@@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(bio_state_anatomy, list(
#define WOUND_SERIES_METAL_BURN_OVERHEAT "wound_series_metal_burn_basic"
#define WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE "wound_series_metal_slash_electrical_damage_basic"
#define WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE "wound_series_metal_pierce_electrical_damage_basic"
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
/// A assoc list of (wound typepath -> wound_pregen_data instance). Every wound should have a pregen data.
GLOBAL_LIST_INIT_TYPED(all_wound_pregen_data, /datum/wound_pregen_data, generate_wound_static_data())
@@ -207,24 +207,24 @@ GLOBAL_LIST_INIT(wound_series_collections, generate_wound_series_collection())
GLOBAL_LIST_INIT(wounding_types_to_series, list(
WOUND_BLUNT = list(
WOUND_SERIES_BONE_BLUNT_BASIC,
- WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT -- MUSCLE WOUNDS
- WOUND_SERIES_METAL_BLUNT_BASIC, // SKYRAT EDIT ADDITION - SYNTH WOUNDS
+ WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT -- MUSCLE WOUNDS
+ WOUND_SERIES_METAL_BLUNT_BASIC, // NOVA EDIT ADDITION - SYNTH WOUNDS
),
WOUND_SLASH = list(
WOUND_SERIES_FLESH_SLASH_BLEED,
- WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT ADDITION - MUSCLE WOUNDS
- WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE, // SKYRAT EDIT ADDITION - SYNTH WOUNDS
+ WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT ADDITION - MUSCLE WOUNDS
+ WOUND_SERIES_WIRE_SLASH_ELECTRICAL_DAMAGE, // NOVA EDIT ADDITION - SYNTH WOUNDS
),
WOUND_BURN = list(
WOUND_SERIES_FLESH_BURN_BASIC,
- WOUND_SERIES_METAL_BURN_OVERHEAT, // SKYRAT EDIT ADDITION - SYNTH WOUNDS
+ WOUND_SERIES_METAL_BURN_OVERHEAT, // NOVA EDIT ADDITION - SYNTH WOUNDS
),
WOUND_PIERCE = list(
WOUND_SERIES_FLESH_PUNCTURE_BLEED,
- WOUND_SERIES_MUSCLE_DAMAGE, // SKYRAT EDIT ADDITION - MUSCLE WOUNDS
- WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE, // SKYRAT EDIT ADDITION - SYNTH WOUNDS
+ WOUND_SERIES_MUSCLE_DAMAGE, // NOVA EDIT ADDITION - MUSCLE WOUNDS
+ WOUND_SERIES_WIRE_PIERCE_ELECTRICAL_DAMAGE, // NOVA EDIT ADDITION - SYNTH WOUNDS
),
))
@@ -296,7 +296,7 @@ GLOBAL_LIST_INIT(wounding_types_to_series, list(
GLOBAL_LIST_INIT(biotypes_to_scar_file, list(
"[BIO_FLESH]" = FLESH_SCAR_FILE,
"[BIO_BONE]" = BONE_SCAR_FILE,
- "[BIO_METAL]" = METAL_SCAR_FILE // SKYRAT EDIT ADDITION - METAL SCARS (see robotic_blunt.dm)
+ "[BIO_METAL]" = METAL_SCAR_FILE // NOVA EDIT ADDITION - METAL SCARS (see robotic_blunt.dm)
))
// ~burn wound infection defines
diff --git a/code/__DEFINES/zoom.dm b/code/__DEFINES/zoom.dm
new file mode 100644
index 00000000000..590e0c47500
--- /dev/null
+++ b/code/__DEFINES/zoom.dm
@@ -0,0 +1,6 @@
+///How the scope component is toggled. This one is done by right-clicking.
+#define ZOOM_METHOD_RIGHT_CLICK 1
+/// Wielding the object with both hands toggles the zoom. Requires the two-handed component to work.
+#define ZOOM_METHOD_WIELD 2
+/// Activated by clicking an item action button specified by the `item_action_type` var.
+#define ZOOM_METHOD_ITEM_ACTION 3
diff --git a/code/__DEFINES/~skyrat_defines/barsigns.dm b/code/__DEFINES/~skyrat_defines/barsigns.dm
index 8a6fe2652bb..37e40b375ef 100644
--- a/code/__DEFINES/~skyrat_defines/barsigns.dm
+++ b/code/__DEFINES/~skyrat_defines/barsigns.dm
@@ -1,2 +1,2 @@
-#define SKYRAT_BARSIGN_FILE 'modular_skyrat/modules/barsigns/icons/barsigns.dmi'
-#define SKYRAT_LARGE_BARSIGN_FILE 'modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi'
+#define SKYRAT_BARSIGN_FILE 'modular_nova/modules/barsigns/icons/barsigns.dmi'
+#define SKYRAT_LARGE_BARSIGN_FILE 'modular_nova/modules/barsigns/icons/barsigns96x96.dmi'
diff --git a/code/__DEFINES/~skyrat_defines/mobs.dm b/code/__DEFINES/~skyrat_defines/mobs.dm
index 71f8c21e894..2943a1b5e3c 100644
--- a/code/__DEFINES/~skyrat_defines/mobs.dm
+++ b/code/__DEFINES/~skyrat_defines/mobs.dm
@@ -15,20 +15,20 @@
#define DEFIB_FAIL_DNR (1<<11)
///Defines for icons used for modular bodyparts, created to make it easier to relocate the module or files if necessary.
-#define BODYPART_ICON_HUMAN 'modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi'
-#define BODYPART_ICON_MAMMAL 'modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi'
-#define BODYPART_ICON_AKULA 'modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi'
-#define BODYPART_ICON_AQUATIC 'modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi'
-#define BODYPART_ICON_GHOUL 'modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi'
-#define BODYPART_ICON_INSECT 'modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi'
-#define BODYPART_ICON_LIZARD 'modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi'
-#define BODYPART_ICON_MOTH 'modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi'
-#define BODYPART_ICON_ROUNDSTARTSLIME 'modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi'
-#define BODYPART_ICON_SKRELL 'modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi'
-#define BODYPART_ICON_TAUR 'modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi'
-#define BODYPART_ICON_TESHARI 'modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi'
-#define BODYPART_ICON_VOX 'modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi'
-#define BODYPART_ICON_XENO 'modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi'
-#define BODYPART_ICON_SYNTHMAMMAL 'modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi'
-#define BODYPART_ICON_IPC 'modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi'
-#define BODYPART_ICON_SYNTHLIZARD 'modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi'
+#define BODYPART_ICON_HUMAN 'modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi'
+#define BODYPART_ICON_MAMMAL 'modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi'
+#define BODYPART_ICON_AKULA 'modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi'
+#define BODYPART_ICON_AQUATIC 'modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi'
+#define BODYPART_ICON_GHOUL 'modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi'
+#define BODYPART_ICON_INSECT 'modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi'
+#define BODYPART_ICON_LIZARD 'modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi'
+#define BODYPART_ICON_MOTH 'modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi'
+#define BODYPART_ICON_ROUNDSTARTSLIME 'modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi'
+#define BODYPART_ICON_SKRELL 'modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi'
+#define BODYPART_ICON_TAUR 'modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi'
+#define BODYPART_ICON_TESHARI 'modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi'
+#define BODYPART_ICON_VOX 'modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi'
+#define BODYPART_ICON_XENO 'modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi'
+#define BODYPART_ICON_SYNTHMAMMAL 'modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi'
+#define BODYPART_ICON_IPC 'modular_nova/modules/bodyparts/icons/ipc_parts.dmi'
+#define BODYPART_ICON_SYNTHLIZARD 'modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi'
diff --git a/code/__DEFINES/~skyrat_defines/robot_defines.dm b/code/__DEFINES/~skyrat_defines/robot_defines.dm
index 935fe1db1c8..e25e11091bf 100644
--- a/code/__DEFINES/~skyrat_defines/robot_defines.dm
+++ b/code/__DEFINES/~skyrat_defines/robot_defines.dm
@@ -7,50 +7,50 @@
#define SKIN_FEATURES "skin_features" //for the new system of borg making
// Icon file locations for modular borg icons
-#define CYBORG_ICON_STANDARD 'modular_skyrat/modules/borgs/icons/robots.dmi'
+#define CYBORG_ICON_STANDARD 'modular_nova/modules/borgs/icons/robots.dmi'
-#define CYBORG_ICON_MED 'modular_skyrat/modules/borgs/icons/robots_med.dmi'
-#define CYBORG_ICON_MED_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_med.dmi'
-#define CYBORG_ICON_MED_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_med.dmi'
+#define CYBORG_ICON_MED 'modular_nova/modules/borgs/icons/robots_med.dmi'
+#define CYBORG_ICON_MED_WIDE 'modular_nova/modules/borgs/icons/widerobot_med.dmi'
+#define CYBORG_ICON_MED_TALL 'modular_nova/modules/borgs/icons/tallrobot_med.dmi'
-#define CYBORG_ICON_CARGO 'modular_skyrat/modules/borgs/icons/robots_cargo.dmi'
-#define CYBORG_ICON_CARGO_WIDE 'modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi'
-#define CYBORG_ICON_CARGO_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi'
+#define CYBORG_ICON_CARGO 'modular_nova/modules/borgs/icons/robots_cargo.dmi'
+#define CYBORG_ICON_CARGO_WIDE 'modular_nova/modules/borgs/icons/widerobots_cargo.dmi'
+#define CYBORG_ICON_CARGO_TALL 'modular_nova/modules/borgs/icons/tallrobot_cargo.dmi'
-#define CYBORG_ICON_SEC 'modular_skyrat/modules/borgs/icons/robots_sec.dmi'
-#define CYBORG_ICON_SEC_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_sec.dmi'
-#define CYBORG_ICON_SEC_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi'
+#define CYBORG_ICON_SEC 'modular_nova/modules/borgs/icons/robots_sec.dmi'
+#define CYBORG_ICON_SEC_WIDE 'modular_nova/modules/borgs/icons/widerobot_sec.dmi'
+#define CYBORG_ICON_SEC_TALL 'modular_nova/modules/borgs/icons/tallrobot_sec.dmi'
-#define CYBORG_ICON_ENG 'modular_skyrat/modules/borgs/icons/robots_eng.dmi'
-#define CYBORG_ICON_ENG_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_eng.dmi'
-#define CYBORG_ICON_ENG_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi'
+#define CYBORG_ICON_ENG 'modular_nova/modules/borgs/icons/robots_eng.dmi'
+#define CYBORG_ICON_ENG_WIDE 'modular_nova/modules/borgs/icons/widerobot_eng.dmi'
+#define CYBORG_ICON_ENG_TALL 'modular_nova/modules/borgs/icons/tallrobot_eng.dmi'
-#define CYBORG_ICON_PEACEKEEPER 'modular_skyrat/modules/borgs/icons/robots_pk.dmi'
-#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_pk.dmi'
-#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi'
+#define CYBORG_ICON_PEACEKEEPER 'modular_nova/modules/borgs/icons/robots_pk.dmi'
+#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_nova/modules/borgs/icons/widerobot_pk.dmi'
+#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_nova/modules/borgs/icons/tallrobot_pk.dmi'
-#define CYBORG_ICON_SERVICE 'modular_skyrat/modules/borgs/icons/robots_serv.dmi'
-#define CYBORG_ICON_SERVICE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_serv.dmi'
-#define CYBORG_ICON_SERVICE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi'
+#define CYBORG_ICON_SERVICE 'modular_nova/modules/borgs/icons/robots_serv.dmi'
+#define CYBORG_ICON_SERVICE_WIDE 'modular_nova/modules/borgs/icons/widerobot_serv.dmi'
+#define CYBORG_ICON_SERVICE_TALL 'modular_nova/modules/borgs/icons/tallrobot_serv.dmi'
-#define CYBORG_ICON_MINING 'modular_skyrat/modules/borgs/icons/robots_mine.dmi'
-#define CYBORG_ICON_MINING_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_mine.dmi'
-#define CYBORG_ICON_MINING_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi'
+#define CYBORG_ICON_MINING 'modular_nova/modules/borgs/icons/robots_mine.dmi'
+#define CYBORG_ICON_MINING_WIDE 'modular_nova/modules/borgs/icons/widerobot_mine.dmi'
+#define CYBORG_ICON_MINING_TALL 'modular_nova/modules/borgs/icons/tallrobot_mine.dmi'
-#define CYBORG_ICON_JANI 'modular_skyrat/modules/borgs/icons/robots_jani.dmi'
-#define CYBORG_ICON_JANI_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_jani.dmi'
-#define CYBORG_ICON_JANI_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi'
+#define CYBORG_ICON_JANI 'modular_nova/modules/borgs/icons/robots_jani.dmi'
+#define CYBORG_ICON_JANI_WIDE 'modular_nova/modules/borgs/icons/widerobot_jani.dmi'
+#define CYBORG_ICON_JANI_TALL 'modular_nova/modules/borgs/icons/tallrobot_jani.dmi'
-#define CYBORG_ICON_SYNDIE 'modular_skyrat/modules/borgs/icons/robots_syndi.dmi'
-#define CYBORG_ICON_SYNDIE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_syndi.dmi'
-#define CYBORG_ICON_SYNDIE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi'
+#define CYBORG_ICON_SYNDIE 'modular_nova/modules/borgs/icons/robots_syndi.dmi'
+#define CYBORG_ICON_SYNDIE_WIDE 'modular_nova/modules/borgs/icons/widerobot_syndi.dmi'
+#define CYBORG_ICON_SYNDIE_TALL 'modular_nova/modules/borgs/icons/tallrobot_syndi.dmi'
-#define CYBORG_ICON_CLOWN 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'
-#define CYBORG_ICON_CLOWN_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_clown.dmi'
-#define CYBORG_ICON_CLOWN_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi'
+#define CYBORG_ICON_CLOWN 'modular_nova/modules/borgs/icons/robots_clown.dmi'
+#define CYBORG_ICON_CLOWN_WIDE 'modular_nova/modules/borgs/icons/widerobot_clown.dmi'
+#define CYBORG_ICON_CLOWN_TALL 'modular_nova/modules/borgs/icons/tallrobot_clown.dmi'
-#define CYBORG_ICON_NINJA 'modular_skyrat/modules/borgs/icons/robots_ninja.dmi'
-#define CYBORG_ICON_NINJA_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi'
+#define CYBORG_ICON_NINJA 'modular_nova/modules/borgs/icons/robots_ninja.dmi'
+#define CYBORG_ICON_NINJA_TALL 'modular_nova/modules/borgs/icons/tallrobot_ninja.dmi'
/// Module is compatible with Cargo Cyborg model
#define BORG_MODEL_CARGO (BORG_MODEL_ENGINEERING<<1)
diff --git a/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm b/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm
index 8a537ed9015..64c4a5692ea 100644
--- a/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm
+++ b/code/__DEFINES/~skyrat_defines/species_clothing_paths.dm
@@ -1,30 +1,30 @@
///The dmi containing snouted masks
-#define SNOUTED_MASK_FILE 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
+#define SNOUTED_MASK_FILE 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
///The dmi containing snouted hats
-#define SNOUTED_HEAD_FILE 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
+#define SNOUTED_HEAD_FILE 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
// Vox stuff
-#define VOX_BACK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi'
-#define VOX_BELT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi'
-#define VOX_EYES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi'
-#define VOX_FEET_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi'
-#define VOX_HANDS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi'
-#define VOX_HEAD_ICON 'modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi'
-#define VOX_MASK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
-#define VOX_NECK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/neck.dmi'
-#define VOX_SUIT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi'
-#define VOX_UNIFORM_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi'
-#define VOX_EARS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi'
+#define VOX_BACK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi'
+#define VOX_BELT_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi'
+#define VOX_EYES_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi'
+#define VOX_FEET_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi'
+#define VOX_HANDS_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi'
+#define VOX_HEAD_ICON 'modular_nova/master_files/icons/mob/clothing/head_vox.dmi'
+#define VOX_MASK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+#define VOX_NECK_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/neck.dmi'
+#define VOX_SUIT_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi'
+#define VOX_UNIFORM_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi'
+#define VOX_EARS_ICON 'modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi'
// Vox primalis stuff
-#define VOX_PRIMALIS_BACK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/back.dmi'
-#define VOX_PRIMALIS_BELT_ICON 'modular_skyrat/modules/better_vox/icons/clothing/belt.dmi'
-#define VOX_PRIMALIS_EYES_ICON 'modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi'
-#define VOX_PRIMALIS_FEET_ICON 'modular_skyrat/modules/better_vox/icons/clothing/feet.dmi'
-#define VOX_PRIMALIS_GLOVES_ICON 'modular_skyrat/modules/better_vox/icons/clothing/hands.dmi'
-#define VOX_PRIMALIS_HEAD_ICON 'modular_skyrat/modules/better_vox/icons/clothing/head.dmi'
-#define VOX_PRIMALIS_MASK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/mask.dmi'
-#define VOX_PRIMALIS_NECK_ICON 'modular_skyrat/modules/better_vox/icons/clothing/neck.dmi'
-#define VOX_PRIMALIS_SUIT_ICON 'modular_skyrat/modules/better_vox/icons/clothing/suit.dmi'
-#define VOX_PRIMALIS_UNIFORM_ICON 'modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi'
-#define VOX_PRIMALIS_EARS_ICON 'modular_skyrat/modules/better_vox/icons/clothing/ears.dmi'
+#define VOX_PRIMALIS_BACK_ICON 'modular_nova/modules/better_vox/icons/clothing/back.dmi'
+#define VOX_PRIMALIS_BELT_ICON 'modular_nova/modules/better_vox/icons/clothing/belt.dmi'
+#define VOX_PRIMALIS_EYES_ICON 'modular_nova/modules/better_vox/icons/clothing/eyes.dmi'
+#define VOX_PRIMALIS_FEET_ICON 'modular_nova/modules/better_vox/icons/clothing/feet.dmi'
+#define VOX_PRIMALIS_GLOVES_ICON 'modular_nova/modules/better_vox/icons/clothing/hands.dmi'
+#define VOX_PRIMALIS_HEAD_ICON 'modular_nova/modules/better_vox/icons/clothing/head.dmi'
+#define VOX_PRIMALIS_MASK_ICON 'modular_nova/modules/better_vox/icons/clothing/mask.dmi'
+#define VOX_PRIMALIS_NECK_ICON 'modular_nova/modules/better_vox/icons/clothing/neck.dmi'
+#define VOX_PRIMALIS_SUIT_ICON 'modular_nova/modules/better_vox/icons/clothing/suit.dmi'
+#define VOX_PRIMALIS_UNIFORM_ICON 'modular_nova/modules/better_vox/icons/clothing/uniform.dmi'
+#define VOX_PRIMALIS_EARS_ICON 'modular_nova/modules/better_vox/icons/clothing/ears.dmi'
diff --git a/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm b/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm
index fbc66c208f1..20034b3a59f 100644
--- a/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm
+++ b/code/__DEFINES/~skyrat_defines/teshari_clothing_paths.dm
@@ -1,12 +1,12 @@
-#define TESHARI_ACCESSORIES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi'
-#define TESHARI_BACK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi'
-#define TESHARI_BELT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi'
-#define TESHARI_EYES_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi'
-#define TESHARI_FEET_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi'
-#define TESHARI_HANDS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi'
-#define TESHARI_HEAD_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi'
-#define TESHARI_MASK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi'
-#define TESHARI_NECK_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi'
-#define TESHARI_SUIT_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi'
-#define TESHARI_UNIFORM_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi'
-#define TESHARI_EARS_ICON 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi'
+#define TESHARI_ACCESSORIES_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi'
+#define TESHARI_BACK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi'
+#define TESHARI_BELT_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi'
+#define TESHARI_EYES_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi'
+#define TESHARI_FEET_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi'
+#define TESHARI_HANDS_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi'
+#define TESHARI_HEAD_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi'
+#define TESHARI_MASK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi'
+#define TESHARI_NECK_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi'
+#define TESHARI_SUIT_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi'
+#define TESHARI_UNIFORM_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi'
+#define TESHARI_EARS_ICON 'modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi'
diff --git a/code/__DEFINES/~skyrat_defines/traits/declarations.dm b/code/__DEFINES/~skyrat_defines/traits/declarations.dm
index c005247fb55..66fe2caf072 100644
--- a/code/__DEFINES/~skyrat_defines/traits/declarations.dm
+++ b/code/__DEFINES/~skyrat_defines/traits/declarations.dm
@@ -47,7 +47,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_INSTANT_RELOAD "instant_reload"
// Trait sources
-#define TRAIT_GHOSTROLE "ghostrole" // SKYRAT EDIT ADDITION -- Ghost Cafe Traits
+#define TRAIT_GHOSTROLE "ghostrole" // NOVA EDIT ADDITION -- Ghost Cafe Traits
/// One can breath under water, you get me?
#define TRAIT_WATER_BREATHING "water_breathing"
diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm
index eb6d53517df..b799406376f 100644
--- a/code/__HELPERS/dynamic_human_icon_gen.dm
+++ b/code/__HELPERS/dynamic_human_icon_gen.dm
@@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(dynamic_human_appearances)
dummy.underwear = "Nude"
dummy.undershirt = "Nude"
dummy.socks = "Nude"
- dummy.bra = "Nude" // SKYRAT EDIT ADDITION - Underwear and bra split
+ dummy.bra = "Nude" // NOVA EDIT ADDITION - Underwear and bra split
if(outfit_path)
var/datum/outfit/outfit = new outfit_path()
if(r_hand != NO_REPLACE) //we can still override to be null, no replace means just use outfit's
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index adf8722b120..99c7dd562ea 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -174,145 +174,6 @@
active_players++
return active_players
-///Show the poll window to the candidate mobs
-/proc/show_candidate_poll_window(mob/candidate_mob, poll_time, question, list/candidates, ignore_category, time_passed, flashwindow = TRUE)
- set waitfor = 0
-
- // Universal opt-out for all players.
- if ((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles)))
- return
-
- // Opt-out for admins whom are currently adminned.
- if ((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder)
- return
-
- SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') //Alerting them to their consideration
- if(flashwindow)
- window_flash(candidate_mob.client)
- var/list/answers = ignore_category ? list("Yes", "No", "Never for this round") : list("Yes", "No")
- switch(tgui_alert(candidate_mob, question, "A limited-time offer!", answers, poll_time, autofocus = FALSE))
- if("Yes")
- to_chat(candidate_mob, span_notice("Choice registered: Yes."))
- if(time_passed + poll_time <= world.time)
- to_chat(candidate_mob, span_danger("Sorry, you answered too late to be considered!"))
- SEND_SOUND(candidate_mob, 'sound/machines/buzz-sigh.ogg')
- candidates -= candidate_mob
- else
- candidates += candidate_mob
- if("No")
- to_chat(candidate_mob, span_danger("Choice registered: No."))
- candidates -= candidate_mob
- if("Never for this round")
- var/list/ignore_list = GLOB.poll_ignore[ignore_category]
- if(!ignore_list)
- GLOB.poll_ignore[ignore_category] = list()
- GLOB.poll_ignore[ignore_category] += candidate_mob.ckey
- to_chat(candidate_mob, span_danger("Choice registered: Never for this round."))
- candidates -= candidate_mob
- else
- candidates -= candidate_mob
-
-///Wrapper to send all ghosts the poll to ask them if they want to be considered for a mob.
-/proc/poll_ghost_candidates(question, jobban_type, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE)
- var/list/candidates = list()
- if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE))
- return candidates
-
- for(var/mob/dead/observer/ghost_player in GLOB.player_list)
- candidates += ghost_player
-
- return poll_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
-
-///Calls the show_candidate_poll_window() to all eligible ghosts
-/proc/poll_candidates(question, jobban_type, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null)
- if (group.len == 0)
- return list()
-
- var/time_passed = world.time
- if (!question)
- question = "Would you like to be a special role?"
- var/list/result = list()
- for(var/mob/candidate_mob as anything in group)
- if(!candidate_mob.key || !candidate_mob.client || (ignore_category && GLOB.poll_ignore[ignore_category] && (candidate_mob.ckey in GLOB.poll_ignore[ignore_category])))
- continue
- //SKYRAT EDIT ADDITION BEGIN
- if(is_banned_from(candidate_mob.ckey, BAN_GHOST_TAKEOVER) || is_banned_from(candidate_mob.ckey, BAN_ANTAGONIST))
- to_chat(candidate_mob, "There was a ghost prompt for: [question], unfortunately you are banned from ghost takeovers.")
- continue
- //SKYRAT EDIT END
- if(be_special_flag)
- if(!(candidate_mob.client.prefs) || !(be_special_flag in candidate_mob.client.prefs.be_special))
- continue
-
- var/required_time = GLOB.special_roles[be_special_flag] || 0
- if (candidate_mob.client && candidate_mob.client.get_remaining_days(required_time) > 0)
- continue
- if(jobban_type)
- if(is_banned_from(candidate_mob.ckey, list(jobban_type, ROLE_SYNDICATE)) || QDELETED(candidate_mob))
- continue
-
- show_candidate_poll_window(candidate_mob, poll_time, question, result, ignore_category, time_passed, flashwindow)
- sleep(poll_time)
-
- //Check all our candidates, to make sure they didn't log off or get deleted during the wait period.
- for(var/mob/asking_mob in result)
- if(!asking_mob.key || !asking_mob.client)
- result -= asking_mob
-
- list_clear_nulls(result)
-
- return result
-
-/**
- * Returns a list of ghosts that are eligible to take over and wish to be considered for a mob.
- *
- * Arguments:
- * * question - question to show players as part of poll
- * * jobban_type - Type of jobban to use to filter out potential candidates.
- * * be_special_flag - The required role that the player has to have enabled to see the prompt.
- * * poll_time - Length of time in deciseconds that the poll input box exists before closing.
- * * target_mob - The mob that is being polled for.
- * * ignore_category - The notification preference that hides the prompt.
- */
-/proc/poll_candidates_for_mob(question, jobban_type, be_special_flag = 0, poll_time = 30 SECONDS, mob/target_mob, ignore_category = null)
- var/static/list/mob/currently_polling_mobs = list()
-
- if(currently_polling_mobs.Find(target_mob))
- return list()
-
- currently_polling_mobs += target_mob
-
- var/list/possible_candidates = poll_ghost_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category)
-
- currently_polling_mobs -= target_mob
- if(!target_mob || QDELETED(target_mob) || !target_mob.loc)
- return list()
-
- return possible_candidates
-
-/**
- * Returns a list of ghosts that are eligible to take over and wish to be considered for a mob.
- *
- * Arguments:
- * * question - question to show players as part of poll
- * * jobban_type - Type of jobban to use to filter out potential candidates.
- * * be_special_flag - The required role that the player has to have enabled to see the prompt.
- * * poll_time - Length of time in deciseconds that the poll input box exists before closing.
- * * mobs - The list of mobs being polled for. This list is mutated and invalid mobs are removed from it before the proc returns.
- * * ignore_category - The notification preference that hides the prompt.
- */
-/proc/poll_candidates_for_mobs(question, jobban_type, be_special_flag = 0, poll_time = 30 SECONDS, list/mobs, ignore_category = null)
- var/list/candidate_list = poll_ghost_candidates(question, jobban_type, be_special_flag, poll_time, ignore_category)
-
- for(var/mob/potential_mob as anything in mobs)
- if(QDELETED(potential_mob) || !potential_mob.loc)
- mobs -= potential_mob
-
- if(!length(mobs))
- return list()
-
- return candidate_list
-
///Uses stripped down and bastardized code from respawn character
/proc/make_body(mob/dead/observer/ghost_player)
if(!ghost_player || !ghost_player.key)
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index ba342c20d5e..408852af459 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -14,7 +14,7 @@
//socks
init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, GLOB.socks_list)
//bodypart accessories (blizzard intensifies)
- //SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION
+ //NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION
/*
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE)
@@ -33,15 +33,15 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list)
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
- */ //SKYRAT EDIT REMOVAL END
+ */ //NOVA EDIT REMOVAL END
//bras
- init_sprite_accessory_subtypes(/datum/sprite_accessory/bra, GLOB.bra_list, GLOB.bra_m, GLOB.bra_f) // SKYRAT EDIT ADDITION
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/bra, GLOB.bra_list, GLOB.bra_m, GLOB.bra_f) // NOVA EDIT ADDITION
- init_sprite_accessory_subtypes(/datum/sprite_accessory/wings/moth, GLOB.moth_wings_list) // SKYRAT EDIT ADDITION - Customization
- init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = TRUE) // SKYRAT EDIT ADDITION - We don't want monkeys getting randomized non-monkey tails
- init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list, add_blank = TRUE) // SKYRAT EDIT - Customization - ORIGINAL: init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/wings/moth, GLOB.moth_wings_list) // NOVA EDIT ADDITION - Customization
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = TRUE) // NOVA EDIT ADDITION - We don't want monkeys getting randomized non-monkey tails
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list, add_blank = TRUE) // NOVA EDIT - Customization - ORIGINAL: init_sprite_accessory_subtypes(/datum/sprite_accessory/pod_hair, GLOB.pod_hair_list)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
//Scream types
for(var/spath in subtypesof(/datum/scream_type))
var/datum/scream_type/S = new spath()
@@ -53,7 +53,7 @@
var/datum/laugh_type/L = new spath()
GLOB.laugh_types[L.name] = spath
sort_list(GLOB.laugh_types, GLOBAL_PROC_REF(cmp_typepaths_asc))
- //SKYRAT EDIT END
+ //NOVA EDIT END
//THE FLUFFY FRONTIER EDIT ADDITION BEGIN - Blooper
for(var/sound_blooper_path in subtypesof(/datum/blooper))
@@ -97,7 +97,7 @@
GLOB.emote_list = init_emote_list() // WHY DOES THIS NEED TO GO HERE? IT JUST INITS DATUMS
- make_skyrat_datum_references() //SKYRAT EDIT ADDITION - CUSTOMIZATION
+ make_skyrat_datum_references() //NOVA EDIT ADDITION - CUSTOMIZATION
init_crafting_recipes()
init_crafting_recipes_atoms()
@@ -107,7 +107,7 @@
if(ispath(path, /datum/crafting_recipe/stack))
continue
var/datum/crafting_recipe/recipe = new path()
- var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_skyrat)) // SKYRAT EDIT - Add skyrat food crafting category
+ var/is_cooking = ((recipe.category in GLOB.crafting_category_food) || (recipe.category in GLOB.crafting_category_food_skyrat)) // NOVA EDIT - Add skyrat food crafting category
recipe.reqs = sort_list(recipe.reqs, GLOBAL_PROC_REF(cmp_crafting_req_priority))
if(recipe.name != "" && recipe.result)
if(is_cooking)
@@ -128,7 +128,7 @@
/obj/item/stack/sheet/sinew = GLOB.sinew_recipes,
/obj/item/stack/sheet/animalhide/carp = GLOB.carp_recipes,
/obj/item/stack/sheet/mineral/sandstone = GLOB.sandstone_recipes,
- /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, // SKYRAT EDIT ADDITION
+ /obj/item/stack/sheet/mineral/clay = GLOB.clay_recipes, // NOVA EDIT ADDITION
/obj/item/stack/sheet/mineral/sandbags = GLOB.sandbag_recipes,
/obj/item/stack/sheet/mineral/diamond = GLOB.diamond_recipes,
/obj/item/stack/sheet/mineral/uranium = GLOB.uranium_recipes,
@@ -270,7 +270,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INTERIOR, typecacheof(list(
/obj/machinery/status_display,
/obj/machinery/ticket_machine,
/obj/machinery/turretid,
- /obj/machinery/time_clock, //SKYRAT EDIT TIME CLOCK
+ /obj/machinery/time_clock, //NOVA EDIT TIME CLOCK
/obj/machinery/barsign,
/obj/structure/extinguisher_cabinet,
/obj/structure/fireaxecabinet,
diff --git a/code/__HELPERS/heap.dm b/code/__HELPERS/heap.dm
index 363fbbb80d6..eeabfa6a20b 100644
--- a/code/__HELPERS/heap.dm
+++ b/code/__HELPERS/heap.dm
@@ -10,7 +10,7 @@
L = new()
cmp = compare
-/datum/heap/Destroy(force, ...)
+/datum/heap/Destroy(force)
for(var/i in L) // because this is before the list helpers are loaded
qdel(i)
L = null
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index acb03151f1d..798059ac7b7 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -1021,7 +1021,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types)
if(job)
body.dna.species.pre_equip_species_outfit(job, body, TRUE)
if(outfit)
- body.equip_outfit_and_loadout(outfit, prefs, TRUE) //SKYRAT EDIT CHANGE
+ body.equip_outfit_and_loadout(outfit, prefs, TRUE) //NOVA EDIT CHANGE
var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing")
for(var/direction in showDirs)
diff --git a/code/__HELPERS/logging/_logging.dm b/code/__HELPERS/logging/_logging.dm
index 045d7fcbcce..1e8b688efcc 100644
--- a/code/__HELPERS/logging/_logging.dm
+++ b/code/__HELPERS/logging/_logging.dm
@@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
if(!log_globally)
return
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
#ifndef SPACEMAN_DMM
if(CONFIG_GET(flag/sql_game_log) && CONFIG_GET(flag/sql_enabled))
SSdbcore.add_log_to_mass_insert_queue(
@@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
if(!CONFIG_GET(flag/file_game_log))
return
#endif
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
var/log_text = "[key_name_and_tag(src)] [message] [loc_name(src)]"
switch(message_type)
/// ship both attack logs and victim logs to the end of round attack.log just to ensure we don't lose information
@@ -128,12 +128,12 @@ GLOBAL_LIST_INIT(testing_global_profiler, list("_PROFILE_NAME" = "Global"))
log_whisper(log_text, data)
if(LOG_EMOTE)
log_emote(log_text, data)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(LOG_SUBTLE)
log_subtle(log_text, data)
if(LOG_SUBTLER)
log_subtler(log_text, data)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(LOG_RADIO_EMOTE)
log_radio_emote(log_text, data)
if(LOG_DSAY)
diff --git a/code/__HELPERS/logging/dynamic.dm b/code/__HELPERS/logging/dynamic.dm
index 51bba86ca05..488aeaec3be 100644
--- a/code/__HELPERS/logging/dynamic.dm
+++ b/code/__HELPERS/logging/dynamic.dm
@@ -1,5 +1,5 @@
/// Log to dynamic and message admins
-/datum/game_mode/dynamic/proc/log_dynamic_and_announce(text)
+/datum/controller/subsystem/dynamic/proc/log_dynamic_and_announce(text)
message_admins("DYNAMIC: [text]")
log_dynamic("[text]")
diff --git a/code/__HELPERS/logging/mob.dm b/code/__HELPERS/logging/mob.dm
index 9b8f3c0a831..05893970db6 100644
--- a/code/__HELPERS/logging/mob.dm
+++ b/code/__HELPERS/logging/mob.dm
@@ -44,12 +44,12 @@
colored_message = "(ASAY) [colored_message]"
if(LOG_EMOTE)
colored_message = "(EMOTE) [colored_message]"
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(LOG_SUBTLE)
colored_message = "(EMOTE) (SUBTLE) [colored_message]"
if(LOG_SUBTLER)
colored_message = "(EMOTE) (SUBTLER) [colored_message]"
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(LOG_RADIO_EMOTE)
colored_message = "(RADIOEMOTE) [colored_message]"
diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm
index 075a5e5ae0e..e6a9e038849 100644
--- a/code/__HELPERS/matrices.dm
+++ b/code/__HELPERS/matrices.dm
@@ -102,15 +102,6 @@ list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0)
list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0,0,0)
*/
-//Does nothing
-/proc/color_matrix_identity()
- return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0)
-
-//Adds/subtracts overall lightness
-//0 is identity, 1 makes everything white, -1 makes everything black
-/proc/color_matrix_lightness(power)
- return list(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1, power,power,power,0)
-
//Changes distance hues have from grey while maintaining the overall lightness. Greys are unaffected.
//1 is identity, 0 is greyscale, >1 oversaturates colors
/proc/color_matrix_saturation(value)
@@ -121,12 +112,6 @@ list(0.393,0.349,0.272,0, 0.769,0.686,0.534,0, 0.189,0.168,0.131,0, 0,0,0,1, 0,0
return list(R + value,R,R,0, G,G + value,G,0, B,B,B + value,0, 0,0,0,1, 0,0,0,0)
-//Changes distance colors have from rgb(127,127,127) grey
-//1 is identity. 0 makes everything grey >1 blows out colors and greys
-/proc/color_matrix_contrast(value)
- var/add = (1 - value) / 2
- return list(value,0,0,0, 0,value,0,0, 0,0,value,0, 0,0,0,1, add,add,add,0)
-
//Moves all colors angle degrees around the color wheel while maintaining intensity of the color and not affecting greys
//0 is identity, 120 moves reds to greens, 240 moves reds to blues
/proc/color_matrix_rotate_hue(angle)
@@ -159,9 +144,9 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro
//Returns a matrix addition of A with B
/proc/color_matrix_add(list/A, list/B)
if(!istype(A) || !istype(B))
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
if(A.len != 20 || B.len != 20)
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
var/list/output = list()
output.len = 20
for(var/value in 1 to 20)
@@ -171,9 +156,9 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro
//Returns a matrix multiplication of A with B
/proc/color_matrix_multiply(list/A, list/B)
if(!istype(A) || !istype(B))
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
if(A.len != 20 || B.len != 20)
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
var/list/output = list()
output.len = 20
var/x = 1
@@ -191,14 +176,14 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro
*/
/proc/color_to_full_rgba_matrix(color, return_identity_on_fail = TRUE)
if(!color)
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
if(istext(color))
var/list/L = ReadRGB(color)
if(!L)
var/message = "Invalid/unsupported color ([color]) argument in color_to_full_rgba_matrix()"
if(return_identity_on_fail)
stack_trace(message)
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
CRASH(message)
return list(L[1]/255,0,0,0, 0,L[2]/255,0,0, 0,0,L[3]/255,0, 0,0,0,L.len>3?L[4]/255:1, 0,0,0,0)
if(!islist(color)) //invalid format
@@ -231,7 +216,7 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro
var/message = "Invalid/unsupported color (list of length [L.len]) argument in color_to_full_rgba_matrix()"
if(return_identity_on_fail)
stack_trace(message)
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
CRASH(message)
#undef LUMA_R
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 5a408937a04..19a062bb156 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -58,7 +58,7 @@
/proc/random_backpack()
return pick(GLOB.backpacklist)
-// SKYRAT EDIT REMOVAL - CUSTOMIZATION (moved to modular)
+// NOVA EDIT REMOVAL - CUSTOMIZATION (moved to modular)
/*
/proc/random_features()
if(!GLOB.tails_list.len)
@@ -114,7 +114,7 @@
"pod_hair" = pick(GLOB.pod_hair_list),
))
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/proc/random_hairstyle(gender)
switch(gender)
@@ -218,7 +218,7 @@ GLOBAL_LIST_EMPTY(species_list)
/proc/age2agedescription(age)
switch(age)
- if(0 to 30) //SKYRAT EDIT CHANGE - NO
+ if(0 to 30) //NOVA EDIT CHANGE - NO
return "young adult"
if(30 to 45)
return "adult"
@@ -623,10 +623,10 @@ GLOBAL_LIST_EMPTY(species_list)
moblist += mob_to_sort
for(var/mob/living/basic/mob_to_sort in sortmob)
moblist += mob_to_sort
- // SKYRAT EDIT START - SOULCATCHERS
+ // NOVA EDIT START - SOULCATCHERS
for(var/mob/living/soulcatcher_soul/mob_to_sort in sortmob)
moblist += mob_to_sort
- // SKYRAT EDIT END - SOULCATCHERS
+ // NOVA EDIT END - SOULCATCHERS
return moblist
///returns a mob type controlled by a specified ckey
/proc/get_mob_by_ckey(key)
diff --git a/code/__HELPERS/paths/jps.dm b/code/__HELPERS/paths/jps.dm
index 6a86f6ebe62..2dc46dea1b7 100644
--- a/code/__HELPERS/paths/jps.dm
+++ b/code/__HELPERS/paths/jps.dm
@@ -38,7 +38,7 @@
f_value = number_tiles + heuristic
// otherwise, no parent node means this is from a subscan lateral scan, so we just need the tile for now until we call [datum/jps/proc/update_parent] on it
-/datum/jps_node/Destroy(force, ...)
+/datum/jps_node/Destroy(force)
previous_node = null
return ..()
diff --git a/code/__HELPERS/paths/path.dm b/code/__HELPERS/paths/path.dm
index 14241ef8e70..28ef66aa45e 100644
--- a/code/__HELPERS/paths/path.dm
+++ b/code/__HELPERS/paths/path.dm
@@ -97,7 +97,7 @@
/// Datum that holds the canpass info of this pathing attempt. This is what CanAstarPass sees
var/datum/can_pass_info/pass_info
-/datum/pathfind/Destroy(force, ...)
+/datum/pathfind/Destroy(force)
. = ..()
SSpathfinder.active_pathing -= src
SSpathfinder.currentrun -= src
diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm
index d675b252796..f63b90b83a1 100644
--- a/code/__HELPERS/priority_announce.dm
+++ b/code/__HELPERS/priority_announce.dm
@@ -142,7 +142,7 @@
else
finalized_announcement = CHAT_ALERT_DEFAULT_SPAN(jointext(minor_announcement_strings, ""))
- var/custom_sound = sound_override || (alert ? 'modular_skyrat/modules/alerts/sound/alerts/alert1.ogg' : 'sound/misc/notice2.ogg') // SKYRAT EDIT CHANGE - CUSTOM ANNOUNCEMENTS - Original: 'sound/misc/notice1.ogg'
+ var/custom_sound = sound_override || (alert ? 'modular_nova/modules/alerts/sound/alerts/alert1.ogg' : 'sound/misc/notice2.ogg') // NOVA EDIT CHANGE - CUSTOM ANNOUNCEMENTS - Original: 'sound/misc/notice1.ogg'
dispatch_announcement_to_players(finalized_announcement, players, custom_sound, should_play_sound)
/// Sends an announcement about the level changing to players. Uses the passed in datum and the subsystem's previous security level to generate the message.
@@ -186,7 +186,7 @@
/// Proc that just dispatches the announcement to our applicable audience. Only the announcement is a mandatory arg.
/proc/dispatch_announcement_to_players(announcement, list/players = GLOB.player_list, sound_override = null, should_play_sound = TRUE)
- // SKYRAT EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS
+ // NOVA EDIT CHANGE BEGIN - CUSTOM ANNOUNCEMENTS
/* Original:
var/sound_to_play = !isnull(sound_override) ? sound_override : 'sound/misc/notice2.ogg'
@@ -219,7 +219,7 @@
continue
to_chat(target, announcement)
- // SKYRAT EDIT CHANGE END - CUSTOM ANNOUNCEMENTS
+ // NOVA EDIT CHANGE END - CUSTOM ANNOUNCEMENTS
#undef MAJOR_ANNOUNCEMENT_TITLE
#undef MAJOR_ANNOUNCEMENT_TEXT
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index bad17bdc28f..03660568a7e 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -234,32 +234,32 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
CHECK_TICK
- /* ///SKYRAT EDIT START
+ /* ///NOVA EDIT START
// Add AntagHUD to everyone, see who was really evil the whole time!
for(var/datum/atom_hud/alternate_appearance/basic/antagonist_hud/antagonist_hud in GLOB.active_alternate_appearances)
for(var/mob/player as anything in GLOB.player_list)
antagonist_hud.show_to(player)
CHECK_TICK
- ///Skyrat EDIT END
+ ///NOVA EDIT END
*/
//Set news report and mode result
- mode.set_round_result()
+ SSdynamic.set_round_result()
to_chat(world, span_infoplain(span_big(span_bold(" The round has ended."))))
log_game("The round has ended.")
send2chat(new /datum/tgs_message_content("[GLOB.round_id ? "Round [GLOB.round_id]" : "The round has"] just ended."), CONFIG_GET(string/channel_announce_end_game))
send2adminchat("Server", "Round just ended.")
- /* //SKYRAT EDIT - START (DISCORD Updates)
+ /* //NOVA EDIT - START (DISCORD Updates)
MOVED CHECK INTO TICKER.DM
if(length(CONFIG_GET(keyed_list/cross_server)))
send_news_report()
*/
send2chat("The current round has ended. Please standby for your shift interlude Nanotrasen News Network's report!", CONFIG_GET(string/channel_announce_end_game))
send2chat(send_news_report(), CONFIG_GET(string/channel_announce_end_game))
- //SKYRAT EDIT - END
+ //NOVA EDIT - END
CHECK_TICK
@@ -322,7 +322,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
//Antagonists
parts += antag_report()
- parts += opfor_report() //SKYRAT EDIT ADDITION
+ parts += opfor_report() //NOVA EDIT ADDITION
parts += hardcore_random_report()
@@ -364,17 +364,17 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
//ignore this comment, it fixes the broken sytax parsing caused by the " above
else
parts += "[FOURSPACES]Nobody died this shift! "
- if(istype(SSticker.mode, /datum/game_mode/dynamic))
- var/datum/game_mode/dynamic/mode = SSticker.mode
- parts += "[FOURSPACES]Threat level: [mode.threat_level]"
- parts += "[FOURSPACES]Threat left: [mode.mid_round_budget]"
- if(mode.roundend_threat_log.len)
- parts += "[FOURSPACES]Threat edits:"
- for(var/entry as anything in mode.roundend_threat_log)
- parts += "[FOURSPACES][FOURSPACES][entry] "
- parts += "[FOURSPACES]Executed rules:"
- for(var/datum/dynamic_ruleset/rule in mode.executed_rules)
- parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name] : -[rule.cost + rule.scaled_times * rule.scaling_cost] threat"
+
+ parts += "[FOURSPACES]Threat level: [SSdynamic.threat_level]"
+ parts += "[FOURSPACES]Threat left: [SSdynamic.mid_round_budget]"
+ if(SSdynamic.roundend_threat_log.len)
+ parts += "[FOURSPACES]Threat edits:"
+ for(var/entry as anything in SSdynamic.roundend_threat_log)
+ parts += "[FOURSPACES][FOURSPACES][entry] "
+ parts += "[FOURSPACES]Executed rules:"
+ for(var/datum/dynamic_ruleset/rule in SSdynamic.executed_rules)
+ parts += "[FOURSPACES][FOURSPACES][rule.ruletype] - [rule.name] : -[rule.cost + rule.scaled_times * rule.scaling_cost] threat"
+
return parts.Join(" ")
/client/proc/roundend_report_file()
@@ -471,7 +471,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
var/mob/living/silicon/ai/aiPlayer = i
var/datum/mind/aiMind = aiPlayer.deployed_shell?.mind || aiPlayer.mind
if(aiMind)
- parts += "[aiPlayer.name] 's laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:" //SKYRAT EDIT CHANGE
+ parts += "[aiPlayer.name] 's laws [aiPlayer.stat != DEAD ? "at the end of the round" : "when it was [span_redtext("deactivated")]"] were:" //NOVA EDIT CHANGE
parts += aiPlayer.laws.get_law_list(include_zeroth=TRUE)
parts += "Total law changes: [aiPlayer.law_change_counter] "
@@ -482,19 +482,19 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
for(var/mob/living/silicon/robot/robo in aiPlayer.connected_robots)
borg_num--
if(robo.mind)
- //SKYRAT EDIT CHANGE BEGIN - ROUNDEND
- //parts += "[robo.name] (Played by: [robo.mind.key] )[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]" - SKYRAT EDIT - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN - ROUNDEND
+ //parts += "[robo.name] (Played by: [robo.mind.key] )[robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]" - NOVA EDIT - ORIGINAL
parts += "[robo.name] [robo.stat == DEAD ? " [span_redtext("(Deactivated)")]" : ""][borg_num ?", ":""]"
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
if(!borg_spacer)
borg_spacer = TRUE
for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs)
if (!robo.connected_ai && robo.mind)
- //SKYRAT EDIT CHANGE BEGIN - ROUNDEND
+ //NOVA EDIT CHANGE BEGIN - ROUNDEND
//parts += "[borg_spacer?" ":""][robo.name] (Played by: [robo.mind.key] ) [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:"
parts += "[borg_spacer?" ":""][robo.name] [(robo.stat != DEAD)? "[span_greentext("survived")] as an AI-less borg!" : "was [span_redtext("unable to survive")] the rigors of being a cyborg without an AI."] Its laws were:"
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
if(robo) //How the hell do we lose robo between here and the world messages directly above this?
parts += robo.laws.get_law_list(include_zeroth=TRUE)
@@ -700,10 +700,10 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
var/jobtext = ""
if(!is_unassigned_job(ply.assigned_role))
jobtext = " the [ply.assigned_role.title] "
- //SKYRAT EDIT CHANGE BEGIN - ROUNDEND
- //var/text = "[ply.key] was [ply.name] [jobtext] and" - SKYRAT EDIT - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN - ROUNDEND
+ //var/text = "[ply.key] was [ply.name] [jobtext] and" - NOVA EDIT - ORIGINAL
var/text = "[ply.name] [jobtext]"
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
if(ply.current)
if(ply.current.stat == DEAD)
text += " [span_redtext("died")]"
@@ -827,7 +827,7 @@ GLOBAL_LIST_INIT(achievements_unlocked, list())
parts += "Total Achievements Earned: [length(GLOB.achievements_unlocked)]! "
parts += "
"
for(var/datum/achievement_report/cheevo_report in GLOB.achievements_unlocked)
- parts += "[cheevo_report.winner] earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]! " // SKYRAT EDIT - No ckeys in the round end report - ORIGINAL: parts += " [cheevo_report.winner_key] was [cheevo_report.winner] , who earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]! "
+ parts += "[cheevo_report.winner] earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]! " // NOVA EDIT - No ckeys in the round end report - ORIGINAL: parts += " [cheevo_report.winner_key] was [cheevo_report.winner] , who earned the [span_greentext("'[cheevo_report.cheevo]'")] achievement at [cheevo_report.award_location]! "
parts += " "
return ""
diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm
index 002ac24c732..f4de5bedab7 100644
--- a/code/__HELPERS/sanitize_values.dm
+++ b/code/__HELPERS/sanitize_values.dm
@@ -53,11 +53,11 @@
/proc/sanitize_hexcolor(color, desired_format = DEFAULT_HEX_COLOR_LEN, include_crunch = TRUE, default)
var/crunch = include_crunch ? "#" : ""
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
if(islist(color))
var/list/color_list = color
color = color_list.Join()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(!istext(color))
color = ""
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 1e39cd6eaf3..d12ac9a2d50 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -157,7 +157,7 @@
* * allow_numbers - allows numbers and common special characters - used for silicon/other weird things names
* * cap_after_symbols - words like Bob's will be capitalized to Bob'S by default. False is good for titles.
*/
-/proc/reject_bad_name(t_in, allow_numbers = TRUE, max_length = MAX_NAME_LEN, ascii_only = TRUE, strict = FALSE, cap_after_symbols = TRUE) // SKYRAT EDIT CHANGE - allow_numbers to TRUE
+/proc/reject_bad_name(t_in, allow_numbers = TRUE, max_length = MAX_NAME_LEN, ascii_only = TRUE, strict = FALSE, cap_after_symbols = TRUE) // NOVA EDIT CHANGE - allow_numbers to TRUE
if(!t_in)
return //Rejects the input if it is null
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 3b2d52fbbb6..98e48852094 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,
/proc/color_hex2color_matrix(string)
var/length = length(string)
if((length != 7 && length != 9) || length != length_char(string))
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
var/r = hex2num(copytext(string, 2, 4))/255
var/g = hex2num(copytext(string, 4, 6))/255
var/b = hex2num(copytext(string, 6, 8))/255
@@ -345,7 +345,7 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,
if(length == 9)
a = hex2num(copytext(string, 8, 10))/255
if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a))
- return color_matrix_identity()
+ return COLOR_MATRIX_IDENTITY
return list(r,0,0,0, 0,g,0,0, 0,0,b,0, 0,0,0,a, 0,0,0,0)
//will drop all values not on the diagonal
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 93d55731d95..d2ff2e7b542 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -205,10 +205,10 @@ DEFINE_BITFIELD(flags_inv, list(
"HIDESHOES" = HIDESHOES,
"HIDESNOUT" = HIDESNOUT,
"HIDESUITSTORAGE" = HIDESUITSTORAGE,
- "SHOWSPRITEEARS" = SHOWSPRITEEARS, // SKYRAT EDIT ADDITION START
+ "SHOWSPRITEEARS" = SHOWSPRITEEARS, // NOVA EDIT ADDITION START
"HIDETAIL" = HIDETAIL,
"HIDESPINE" = HIDESPINE,
- "HIDESEXTOY" = HIDESEXTOY, // SKYRAT EDIT ADDITION END
+ "HIDESEXTOY" = HIDESEXTOY, // NOVA EDIT ADDITION END
))
DEFINE_BITFIELD(machine_stat, list(
@@ -222,8 +222,7 @@ DEFINE_BITFIELD(mat_container_flags, list(
"MATCONTAINER_EXAMINE" = MATCONTAINER_EXAMINE,
"MATCONTAINER_NO_INSERT" = MATCONTAINER_NO_INSERT,
"MATCONTAINER_ANY_INTENT" = MATCONTAINER_ANY_INTENT,
- "MATCONTAINER_SILENT" = MATCONTAINER_SILENT,
- "BREAKDOWN_ALLOYS" = BREAKDOWN_ALLOYS,
+ "MATCONTAINER_SILENT" = MATCONTAINER_SILENT
))
DEFINE_BITFIELD(internal_damage, list(
@@ -398,12 +397,12 @@ DEFINE_BITFIELD(acceptable_bodytype, list(
"BODYTYPE_LARVA_PLACEHOLDER" = BODYTYPE_LARVA_PLACEHOLDER,
"BODYTYPE_ALIEN" = BODYTYPE_ALIEN,
"BODYTYPE_GOLEM" = BODYTYPE_GOLEM,
- // SKYRAT EDIT ADDITION - customization
+ // NOVA EDIT ADDITION - customization
"BODYTYPE_CUSTOM" = BODYTYPE_CUSTOM,
"BODYTYPE_TAUR" = BODYTYPE_TAUR,
"BODYTYPE_HIDE_SHOES" = BODYTYPE_HIDE_SHOES,
"BODYTYPE_ALT_FACEWEAR_LAYER" = BODYTYPE_ALT_FACEWEAR_LAYER,
- // SKYRAT EDIT END
+ // NOVA EDIT END
))
DEFINE_BITFIELD(bodypart_flags, list(
@@ -430,11 +429,11 @@ DEFINE_BITFIELD(supports_variations_flags, list(
"CLOTHING_NO_VARIATION" = CLOTHING_NO_VARIATION,
"CLOTHING_DIGITIGRADE_VARIATION" = CLOTHING_DIGITIGRADE_VARIATION,
"CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON" = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON,
- "CLOTHING_MONKEY_VARIATION" = CLOTHING_MONKEY_VARIATION, // SKYRAT EDIT ADDITION BEGIN
+ "CLOTHING_MONKEY_VARIATION" = CLOTHING_MONKEY_VARIATION, // NOVA EDIT ADDITION BEGIN
"CLOTHING_SNOUTED_VARIATION" = CLOTHING_SNOUTED_VARIATION,
"CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON,
"CLOTHING_SNOUTED_VOX_VARIATION" = CLOTHING_SNOUTED_VOX_VARIATION,
- "CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON, // SKYRAT EDIT END
+ "CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON" = CLOTHING_SNOUTED_VOX_VARIATION_NO_NEW_ICON, // NOVA EDIT END
))
DEFINE_BITFIELD(flora_flags, list(
@@ -489,7 +488,7 @@ DEFINE_BITFIELD(liked_foodtypes, list(
"BUGS" = BUGS,
"GORE" = GORE,
"STONE" = STONE,
- "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food
+ "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food
))
DEFINE_BITFIELD(disliked_foodtypes, list(
@@ -514,7 +513,7 @@ DEFINE_BITFIELD(disliked_foodtypes, list(
"BUGS" = BUGS,
"GORE" = GORE,
"STONE" = STONE,
- "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food
+ "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food
))
DEFINE_BITFIELD(toxic_foodtypes, list(
@@ -539,7 +538,7 @@ DEFINE_BITFIELD(toxic_foodtypes, list(
"BUGS" = BUGS,
"GORE" = GORE,
"STONE" = STONE,
- "BLOODY" = BLOODY, // SKYRAT EDIT - Hemophage Food
+ "BLOODY" = BLOODY, // NOVA EDIT - Hemophage Food
))
DEFINE_BITFIELD(sharpness, list(
diff --git a/code/_globalvars/lists/ambience.dm b/code/_globalvars/lists/ambience.dm
index 60d3dfad789..261b8133dd0 100644
--- a/code/_globalvars/lists/ambience.dm
+++ b/code/_globalvars/lists/ambience.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL BEGIN
+/* NOVA EDIT REMOVAL BEGIN
GLOBAL_LIST_INIT(generic_ambience,list(
'sound/ambience/ambigen1.ogg',
'sound/ambience/ambigen2.ogg',
@@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(generic_ambience,list(
'sound/ambience/ambigen13.ogg',
'sound/ambience/ambigen14.ogg',
))
-*/ //SKYRAT EDIT REMOVAL END
+*/ //NOVA EDIT REMOVAL END
GLOBAL_LIST_INIT(holy_ambience,list(
'sound/ambience/ambicha1.ogg',
@@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(spooky_ambience,list(
))
GLOBAL_LIST_INIT(space_ambience,list(
- 'modular_skyrat/master_files/sound/ambience/starlight.ogg', //SKYRAT EDIT ADDITION
+ 'modular_nova/master_files/sound/ambience/starlight.ogg', //NOVA EDIT ADDITION
'sound/ambience/ambiatmos.ogg',
'sound/ambience/ambispace.ogg',
'sound/ambience/ambispace2.ogg',
diff --git a/code/_globalvars/lists/cargo.dm b/code/_globalvars/lists/cargo.dm
new file mode 100644
index 00000000000..5e4766fc7c3
--- /dev/null
+++ b/code/_globalvars/lists/cargo.dm
@@ -0,0 +1,34 @@
+GLOBAL_LIST_INIT(discountable_packs, init_discountable_packs())
+
+/proc/init_discountable_packs()
+ var/list/packs = list()
+ for(var/datum/supply_pack/prototype as anything in subtypesof(/datum/supply_pack))
+ var/discountable = initial(prototype.discountable)
+ if(discountable)
+ LAZYADD(packs[discountable], prototype)
+ return packs
+
+GLOBAL_LIST_INIT(pack_discount_odds, list(
+ SUPPLY_PACK_STD_DISCOUNTABLE = 45,
+ SUPPLY_PACK_UNCOMMON_DISCOUNTABLE = 4,
+ SUPPLY_PACK_RARE_DISCOUNTABLE = 1,
+))
+
+GLOBAL_LIST_EMPTY(supplypod_loading_bays)
+
+GLOBAL_LIST_INIT(podstyles, list(\
+ list(POD_SHAPE_NORML, "pod", TRUE, "default", "yellow", RUBBLE_NORMAL, "supply pod", "A Nanotrasen supply drop pod."),\
+ list(POD_SHAPE_NORML, "advpod", TRUE, "bluespace", "blue", RUBBLE_NORMAL, "bluespace supply pod" , "A Nanotrasen Bluespace supply pod. Teleports back to CentCom after delivery."),\
+ list(POD_SHAPE_NORML, "advpod", TRUE, "centcom", "blue", RUBBLE_NORMAL, "\improper CentCom supply pod", "A Nanotrasen supply pod, this one has been marked with Central Command's designations. Teleports back to CentCom after delivery."),\
+ list(POD_SHAPE_NORML, "darkpod", TRUE, "syndicate", "red", RUBBLE_NORMAL, "blood-red supply pod", "An intimidating supply pod, covered in the blood-red markings of the Syndicate. It's probably best to stand back from this."),\
+ list(POD_SHAPE_NORML, "darkpod", TRUE, "deathsquad", "blue", RUBBLE_NORMAL, "\improper Deathsquad drop pod", "A Nanotrasen drop pod. This one has been marked the markings of Nanotrasen's elite strike team."),\
+ list(POD_SHAPE_NORML, "pod", TRUE, "cultist", "red", RUBBLE_NORMAL, "bloody supply pod", "A Nanotrasen supply pod covered in scratch-marks, blood, and strange runes."),\
+ list(POD_SHAPE_OTHER, "missile", FALSE, FALSE, FALSE, RUBBLE_THIN, "cruise missile", "A big ass missile that didn't seem to fully detonate. It was likely launched from some far-off deep space missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
+ list(POD_SHAPE_OTHER, "smissile", FALSE, FALSE, FALSE, RUBBLE_THIN, "\improper Syndicate cruise missile", "A big ass, blood-red missile that didn't seem to fully detonate. It was likely launched from some deep space Syndicate missile silo. There appears to be an auxillery payload hatch on the side, though manually opening it is likely impossible."),\
+ list(POD_SHAPE_OTHER, "box", TRUE, FALSE, FALSE, RUBBLE_WIDE, "\improper Aussec supply crate", "An incredibly sturdy supply crate, designed to withstand orbital re-entry. Has 'Aussec Armory - 2532' engraved on the side."),\
+ list(POD_SHAPE_NORML, "clownpod", TRUE, "clown", "green", RUBBLE_NORMAL, "\improper HONK pod", "A brightly-colored supply pod. It likely originated from the Clown Federation."),\
+ list(POD_SHAPE_OTHER, "orange", TRUE, FALSE, FALSE, RUBBLE_NONE, "\improper Orange", "An angry orange."),\
+ list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, "\improper S.T.E.A.L.T.H. pod MKVII", "A supply pod that, under normal circumstances, is completely invisible to conventional methods of detection. How are you even seeing this?"),\
+ list(POD_SHAPE_OTHER, "gondola", FALSE, FALSE, FALSE, RUBBLE_NONE, "gondola", "The silent walker. This one seems to be part of a delivery agency."),\
+ list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, FALSE, FALSE, "rl_click", "give_po")\
+))
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 5123ffaec00..1fceed44004 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name
//Socks
GLOBAL_LIST_EMPTY(socks_list) //stores /datum/sprite_accessory/socks indexed by name
//Lizard Bits (all datum lists indexed by name)
-//SKYRAT EDIT REMOVAL - CUSTOMIZATION
+//NOVA EDIT REMOVAL - CUSTOMIZATION
/*
GLOBAL_LIST_EMPTY(body_markings_list)
GLOBAL_LIST_EMPTY(snouts_list)
@@ -41,9 +41,9 @@ GLOBAL_LIST_EMPTY(moth_antennae_list)
GLOBAL_LIST_EMPTY(moth_markings_list)
GLOBAL_LIST_EMPTY(caps_list)
*/
-//SKYRAT EDIT REMOVAL END
-GLOBAL_LIST_EMPTY(moth_wings_list) // SKYRAT EDIT ADDITION - Customization
-GLOBAL_LIST_EMPTY(tails_list_monkey) // SKYRAT EDIT ADDITION - Customization
+//NOVA EDIT REMOVAL END
+GLOBAL_LIST_EMPTY(moth_wings_list) // NOVA EDIT ADDITION - Customization
+GLOBAL_LIST_EMPTY(tails_list_monkey) // NOVA EDIT ADDITION - Customization
GLOBAL_LIST_EMPTY(pod_hair_list)
GLOBAL_LIST_INIT(color_list_ethereal, list(
@@ -301,12 +301,12 @@ GLOBAL_LIST_INIT(status_display_approved_pictures, list(
"lockdown",
"greenalert",
"bluealert",
- "violetalert", // SKYRAT EDIT ADD - Alert Levels
- "orangealert", // SKYRAT EDIT ADD - Alert Levels
- "amberalert", // SKYRAT EDIT ADD - Alert Levels
+ "violetalert", // NOVA EDIT ADD - Alert Levels
+ "orangealert", // NOVA EDIT ADD - Alert Levels
+ "amberalert", // NOVA EDIT ADD - Alert Levels
"redalert",
"deltaalert",
- "gammaalert", // SKYRAT EDIT ADD - Alert Levels
+ "gammaalert", // NOVA EDIT ADD - Alert Levels
"radiation",
"currentalert", //For automatic set of status display on current level
))
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 05aa4e419a2..fe4d88468df 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -256,10 +256,10 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items
list(//computer disks
/obj/item/computer_disk/maintenance/scanner = 1,
- ///obj/item/computer_disk/maintenance/camera = 1, //SKYRAT EDIT REMOVAL - Available To Crew Now
+ ///obj/item/computer_disk/maintenance/camera = 1, //NOVA EDIT REMOVAL - Available To Crew Now
/obj/item/computer_disk/maintenance/modsuit_control = 1,
/obj/item/computer_disk/maintenance/theme = 3,
- ) = 3, //SKYRAT EDIT CHANGE - Original : 4
+ ) = 3, //NOVA EDIT CHANGE - Original : 4
list(//modsuits
/obj/effect/spawner/random/mod/maint = 3,
diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm
index 9dcdf05db73..fa23263abb0 100644
--- a/code/_globalvars/lists/poll_ignore.dm
+++ b/code/_globalvars/lists/poll_ignore.dm
@@ -1,7 +1,7 @@
//Each lists stores ckeys for "Never for this round" option category
#define POLL_IGNORE_ACADEMY_WIZARD "academy_wizard"
-#define POLL_IGNORE_CORTICAL_BORER "cortical_borer" // SKYRAT EDIT - Cortical Borer
+#define POLL_IGNORE_CORTICAL_BORER "cortical_borer" // NOVA EDIT - Cortical Borer
#define POLL_IGNORE_ALIEN_LARVA "alien_larva"
#define POLL_IGNORE_ASH_SPIRIT "ash_spirit"
#define POLL_IGNORE_ASHWALKER "ashwalker"
@@ -40,7 +40,7 @@
GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_ACADEMY_WIZARD = "Academy Wizard Defender",
- POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", // SKYRAT EDIT ADDITION
+ POLL_IGNORE_CORTICAL_BORER = "Cortical Borer", // NOVA EDIT ADDITION
POLL_IGNORE_ALIEN_LARVA = "Xenomorph larva",
POLL_IGNORE_ASH_SPIRIT = "Ash Spirit",
POLL_IGNORE_ASHWALKER = "Ashwalker eggs",
diff --git a/code/_globalvars/lists/quirks.dm b/code/_globalvars/lists/quirks.dm
index 5db4f53ed71..3d15865a527 100644
--- a/code/_globalvars/lists/quirks.dm
+++ b/code/_globalvars/lists/quirks.dm
@@ -8,7 +8,7 @@ GLOBAL_LIST_INIT(nearsighted_glasses, list(
"Thin" = /obj/item/clothing/glasses/regular/thin,
"Jamjar" = /obj/item/clothing/glasses/regular/jamjar,
"Binoclard" = /obj/item/clothing/glasses/regular/kim,
- "Modern" = /obj/item/clothing/glasses/regular/betterunshit, // SKYRAT EDIT ADDITION
+ "Modern" = /obj/item/clothing/glasses/regular/betterunshit, // NOVA EDIT ADDITION
))
@@ -19,3 +19,10 @@ GLOBAL_LIST_INIT(limb_choice, list(
"Left Leg" = /obj/item/bodypart/leg/left/robot/surplus,
"Right Leg" = /obj/item/bodypart/leg/right/robot/surplus,
))
+
+GLOBAL_LIST_INIT(limb_choice_transhuman, list(
+ "Left Arm" = /obj/item/bodypart/arm/left/robot,
+ "Right Arm" = /obj/item/bodypart/arm/right/robot,
+ "Left Leg" = /obj/item/bodypart/leg/left/robot,
+ "Right Leg" = /obj/item/bodypart/leg/right/robot,
+))
diff --git a/code/_globalvars/lists/reagents.dm b/code/_globalvars/lists/reagents.dm
index 47b1008aa8a..a2946e838da 100644
--- a/code/_globalvars/lists/reagents.dm
+++ b/code/_globalvars/lists/reagents.dm
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(reagent_containers, list(
CAT_PATCHES = typecacheof(list(
/obj/item/reagent_containers/pill/patch/style
)),
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
CAT_HYPOS = list(
/obj/item/reagent_containers/cup/vial/small,
/obj/item/reagent_containers/cup/vial/large,
@@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(reagent_containers, list(
CAT_DARTS = typecacheof(list(
/obj/item/reagent_containers/syringe/smartdart
)),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
))
/// list of all /datum/chemical_reaction datums indexed by their typepath. Use this for general lookup stuff
diff --git a/code/_globalvars/tgui.dm b/code/_globalvars/tgui.dm
index a81078420f5..84a5019fd75 100644
--- a/code/_globalvars/tgui.dm
+++ b/code/_globalvars/tgui.dm
@@ -1,4 +1,4 @@
GLOBAL_DATUM(crew_manifest_tgui, /datum/crew_manifest)
GLOBAL_DATUM(changelog_tgui, /datum/changelog)
GLOBAL_DATUM(hotkeys_tgui, /datum/hotkeys_help)
-GLOBAL_DATUM(record_manifest_tgui, /datum/record_manifest) //SKYRAT EDIT ADDITION -- EXPLOITABLE VERB
+GLOBAL_DATUM(record_manifest_tgui, /datum/record_manifest) //NOVA EDIT ADDITION -- EXPLOITABLE VERB
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 68691895452..7d5bd3040d0 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -22,7 +22,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FOOD_SILVER" = TRAIT_FOOD_SILVER,
"TRAIT_KEEP_TOGETHER" = TRAIT_KEEP_TOGETHER,
"TRAIT_LIGHTING_DEBUGGED" = TRAIT_LIGHTING_DEBUGGED,
- "TRAIT_MAT_TRANSMUTED" = TRAIT_MAT_TRANSMUTED,
"TRAIT_RECENTLY_COINED" = TRAIT_RECENTLY_COINED,
"TRAIT_RUSTY" = TRAIT_RUSTY,
"TRAIT_SPINNING" = TRAIT_SPINNING,
@@ -180,6 +179,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_EASYBLEED" = TRAIT_EASYBLEED,
"TRAIT_ECHOLOCATION_EXTRA_RANGE" = TRAIT_ECHOLOCATION_EXTRA_RANGE,
"TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER,
+ "TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE,
"TRAIT_ELITE_CHALLENGER" = TRAIT_ELITE_CHALLENGER,
"TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE,
"TRAIT_EMOTEMUTE" = TRAIT_EMOTEMUTE,
@@ -196,10 +196,12 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FIST_MINING" = TRAIT_FIST_MINING,
"TRAIT_FIXED_HAIRCOLOR" = TRAIT_FIXED_HAIRCOLOR,
"TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS,
+ "TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE,
"TRAIT_FLOORED" = TRAIT_FLOORED,
"TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION" = TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
"TRAIT_FORCED_GRAVITY" = TRAIT_FORCED_GRAVITY,
"TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING,
+ "TRAIT_FOV_APPLIED" = TRAIT_FOV_APPLIED,
"TRAIT_FREE_FLOAT_MOVEMENT" = TRAIT_FREE_FLOAT_MOVEMENT,
"TRAIT_FREE_HYPERSPACE_MOVEMENT" = TRAIT_FREE_HYPERSPACE_MOVEMENT,
"TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT" = TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT,
@@ -443,6 +445,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_UNOBSERVANT" = TRAIT_UNOBSERVANT,
"TRAIT_UNSTABLE" = TRAIT_UNSTABLE,
"TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT,
+ "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED,
"TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES,
"TRAIT_VATGROWN" = TRAIT_VATGROWN,
"TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS,
@@ -524,6 +527,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_COMPONENT_MMI" = TRAIT_COMPONENT_MMI,
),
/obj/item/modular_computer = list(
+ "TRAIT_MODPC_HALVED_DOWNLOAD_SPEED" = TRAIT_MODPC_HALVED_DOWNLOAD_SPEED,
"TRAIT_PDA_CAN_EXPLODE" = TRAIT_PDA_CAN_EXPLODE,
"TRAIT_PDA_MESSAGE_MENU_RIGGED" = TRAIT_PDA_MESSAGE_MENU_RIGGED,
),
@@ -571,7 +575,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_TURF_IGNORE_SLOWDOWN" = TRAIT_TURF_IGNORE_SLOWDOWN,
"TRAIT_ELEVATED_TURF" = TRAIT_ELEVATED_TURF,
),
- // SKYRAT EDIT ADDITION START - SKYRAT TRAITS
+ // NOVA EDIT ADDITION START - SKYRAT TRAITS
/obj/item/toy/plush/skyrat = list(
"TRAIT_AFFECTION_AVERSION" = TRAIT_AFFECTION_AVERSION,
"TRAIT_APHRO" = TRAIT_APHRO,
@@ -645,7 +649,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE,
"TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING,
),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
))
/// value -> trait name, list of ALL traits that exist in the game, used for any type of accessing.
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index 221d6ef820d..debea57306d 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -275,7 +275,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
/obj/item/organ/internal/lungs = list(
"TRAIT_SPACEBREATHING" = TRAIT_SPACEBREATHING,
),
- // SKYRAT EDIT ADDITION START - SKYRAT TRAITS
+ // NOVA EDIT ADDITION START - SKYRAT TRAITS
/obj/item/toy/plush/skyrat = list(
"TRAIT_AFFECTION_AVERSION" = TRAIT_AFFECTION_AVERSION,
"TRAIT_APHRO" = TRAIT_APHRO,
@@ -349,7 +349,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE,
"TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING,
),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
))
/// value -> trait name, generated as needed for adminning.
diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm
index 3d632a99f73..7660b0c7bc3 100644
--- a/code/_onclick/ai.dm
+++ b/code/_onclick/ai.dm
@@ -111,7 +111,7 @@
for AI shift, ctrl, and alt clicking.
*/
-/mob/living/silicon/ai/CtrlShiftClickOn(atom/target) // Procs overriden in modular_skyrat/modules/Silicon_QoL
+/mob/living/silicon/ai/CtrlShiftClickOn(atom/target) // Procs overriden in modular_nova/modules/Silicon_QoL
target.AICtrlShiftClick(src)
/mob/living/silicon/ai/ShiftClickOn(atom/target)
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 98c5c4d94a7..d898fd9f618 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -461,7 +461,7 @@
/mob/proc/ShiftMiddleClickOn(atom/A)
src.pointed(A)
return
-//SKYRAT EDIT NOTE: CtrlShiftClick for HUMANS has been overriden in click.dm in the interaction module.
+//NOVA EDIT NOTE: CtrlShiftClick for HUMANS has been overriden in click.dm in the interaction module.
/atom/proc/CtrlShiftClick(mob/user)
if(!can_interact(user))
return FALSE
diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm
index 8cc8603f552..50b341cd906 100644
--- a/code/_onclick/cyborg.dm
+++ b/code/_onclick/cyborg.dm
@@ -88,7 +88,7 @@
//Give cyborgs hotkey clicks without breaking existing uses of hotkey clicks
// for non-doors/apcs
-/mob/living/silicon/robot/CtrlShiftClickOn(atom/target) // Procs overriden in modular_skyrat/modules/Silicon_QoL
+/mob/living/silicon/robot/CtrlShiftClickOn(atom/target) // Procs overriden in modular_nova/modules/Silicon_QoL
target.BorgCtrlShiftClick(src)
/mob/living/silicon/robot/ShiftClickOn(atom/target)
@@ -197,14 +197,14 @@
/mob/living/silicon/robot/RangedAttack(atom/A)
A.attack_robot(src)
-/* //SKYRAT EDIT - MOVED TO modular_skyrat/master_files/code/_onclick/cyborg.dm
+/* //NOVA EDIT - MOVED TO modular_nova/master_files/code/_onclick/cyborg.dm
/atom/proc/attack_robot(mob/user)
if (SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ROBOT, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return
attack_ai(user)
return
-*/ //SKYRAT EDIT END
+*/ //NOVA EDIT END
/**
* What happens when the cyborg without active module holds right-click on an item. Returns a SECONDARY_ATTACK_* value.
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 2f3df52dfd3..e73cebf14c0 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -12,7 +12,7 @@
*flicks are forwarded to master
*override makes it so the alert is not replaced until cleared by a clear_alert with clear_override, and it's used for hallucinations.
*/
-/mob/proc/throw_alert(category, type, severity, obj/new_master, override = FALSE)
+/mob/proc/throw_alert(category, type, severity, obj/new_master, override = FALSE, timeout_override, no_anim = FALSE)
if(!category || QDELETED(src))
return
@@ -39,7 +39,7 @@
// No need to update existing alert
return thealert
// Reset timeout of existing alert
- var/timeout = initial(thealert.timeout)
+ var/timeout = timeout_override || initial(thealert.timeout)
addtimer(CALLBACK(src, PROC_REF(alert_timeout), thealert, category), timeout)
thealert.timeout = world.time + timeout - world.tick_lag
return thealert
@@ -67,9 +67,11 @@
alerts[category] = thealert
if(client && hud_used)
hud_used.reorganize_alerts()
- thealert.transform = matrix(32, 6, MATRIX_TRANSLATE)
- animate(thealert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
-
+ if(!no_anim)
+ thealert.transform = matrix(32, 6, MATRIX_TRANSLATE)
+ animate(thealert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
+ if(timeout_override)
+ thealert.timeout = timeout_override
if(thealert.timeout)
addtimer(CALLBACK(src, PROC_REF(alert_timeout), thealert, category), thealert.timeout)
thealert.timeout = world.time + thealert.timeout - world.tick_lag
@@ -802,6 +804,155 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
ghost_owner.observer_view(target)
+/atom/movable/screen/alert/poll_alert
+ name = "Looking for candidates"
+ icon_state = "template"
+ timeout = 30 SECONDS
+ ghost_screentips = TRUE
+ /// If true you need to call START_PROCESSING manually
+ var/show_time_left = FALSE
+ /// MA for maptext showing time left for poll
+ var/mutable_appearance/time_left_overlay
+ /// MA for overlay showing that you're signed up to poll
+ var/mutable_appearance/signed_up_overlay
+ /// MA for maptext overlay showing how many polls are stacked together
+ var/mutable_appearance/stacks_overlay
+ /// MA for maptext overlay showing how many candidates are signed up to a poll
+ var/mutable_appearance/candidates_num_overlay
+ /// MA for maptext overlay of poll's role name or question
+ var/mutable_appearance/role_overlay
+ /// If set, on Click() it'll register the player as a candidate
+ var/datum/candidate_poll/poll
+
+/atom/movable/screen/alert/poll_alert/Initialize(mapload)
+ . = ..()
+ signed_up_overlay = mutable_appearance('icons/hud/screen_gen.dmi', icon_state = "selector")
+ register_context()
+
+/atom/movable/screen/alert/poll_alert/proc/set_role_overlay()
+ var/role_or_only_question = poll.role || "?"
+ role_overlay = new
+ role_overlay.screen_loc = screen_loc
+ role_overlay.maptext = MAPTEXT("[full_capitalize(role_or_only_question)] ")
+ role_overlay.maptext_width = 128
+ role_overlay.transform = role_overlay.transform.Translate(-128, 0)
+ add_overlay(role_overlay)
+
+/atom/movable/screen/alert/poll_alert/Destroy()
+ QDEL_NULL(role_overlay)
+ QDEL_NULL(time_left_overlay)
+ QDEL_NULL(stacks_overlay)
+ QDEL_NULL(candidates_num_overlay)
+ QDEL_NULL(signed_up_overlay)
+ if(poll)
+ poll.alert_buttons -= src
+ poll = null
+ return ..()
+
+/atom/movable/screen/alert/poll_alert/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+ var/left_click_text
+ if(poll)
+ if(owner in poll.signed_up)
+ left_click_text = "Leave"
+ else
+ left_click_text = "Enter"
+ context[SCREENTIP_CONTEXT_LMB] = "[left_click_text] Poll"
+ if(poll.ignoring_category)
+ var/selected_never = FALSE
+ if(owner.ckey in GLOB.poll_ignore[poll.ignoring_category])
+ selected_never = TRUE
+ context[SCREENTIP_CONTEXT_ALT_LMB] = "[selected_never ? "Cancel " : ""]Never For This Round"
+ if(poll.jump_to_me && isobserver(owner))
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Jump To"
+ return CONTEXTUAL_SCREENTIP_SET
+
+/atom/movable/screen/alert/poll_alert/process()
+ if(show_time_left)
+ var/timeleft = timeout - world.time
+ if(timeleft <= 0)
+ return PROCESS_KILL
+ cut_overlay(time_left_overlay)
+ time_left_overlay = new
+ time_left_overlay.maptext = MAPTEXT("[CEILING(timeleft / (1 SECONDS), 1)] ")
+ time_left_overlay.transform = time_left_overlay.transform.Translate(4, 19)
+ add_overlay(time_left_overlay)
+
+/atom/movable/screen/alert/poll_alert/Click(location, control, params)
+ . = ..()
+ if(!. || isnull(poll))
+ return
+ var/list/modifiers = params2list(params)
+ if(LAZYACCESS(modifiers, ALT_CLICK) && poll.ignoring_category)
+ set_never_round()
+ return
+ if(LAZYACCESS(modifiers, CTRL_CLICK) && poll.jump_to_me)
+ jump_to_pic_source()
+ return
+ handle_sign_up()
+
+/atom/movable/screen/alert/poll_alert/proc/handle_sign_up()
+ if(owner in poll.signed_up)
+ poll.remove_candidate(owner)
+ else if(!(owner.ckey in GLOB.poll_ignore[poll.ignoring_category]))
+ poll.sign_up(owner)
+ update_signed_up_overlay()
+
+/atom/movable/screen/alert/poll_alert/proc/set_never_round()
+ if(!(owner.ckey in GLOB.poll_ignore[poll.ignoring_category]))
+ poll.do_never_for_this_round(owner)
+ color = "red"
+ update_signed_up_overlay()
+ return
+ poll.undo_never_for_this_round(owner)
+ color = initial(color)
+
+/atom/movable/screen/alert/poll_alert/proc/jump_to_pic_source()
+ if(!poll?.jump_to_me || !isobserver(owner))
+ return
+ var/turf/target_turf = get_turf(poll.jump_to_me)
+ if(target_turf && isturf(target_turf))
+ owner.abstract_move(target_turf)
+
+/atom/movable/screen/alert/poll_alert/Topic(href, href_list)
+ if(href_list["never"])
+ set_never_round()
+ return
+ if(href_list["signup"])
+ handle_sign_up()
+ if(href_list["jump"])
+ jump_to_pic_source()
+ return
+
+/atom/movable/screen/alert/poll_alert/proc/update_signed_up_overlay()
+ if(owner in poll.signed_up)
+ add_overlay(signed_up_overlay)
+ else
+ cut_overlay(signed_up_overlay)
+
+/atom/movable/screen/alert/poll_alert/proc/update_candidates_number_overlay()
+ cut_overlay(candidates_num_overlay)
+ if(!length(poll.signed_up))
+ return
+ candidates_num_overlay = new
+ candidates_num_overlay.maptext = MAPTEXT("[length(poll.signed_up)] ")
+ candidates_num_overlay.transform = candidates_num_overlay.transform.Translate(-4, 2)
+ add_overlay(candidates_num_overlay)
+
+/atom/movable/screen/alert/poll_alert/proc/update_stacks_overlay()
+ cut_overlay(stacks_overlay)
+ var/stack_number = 1
+ for(var/datum/candidate_poll/other_poll as anything in SSpolling.currently_polling)
+ if(other_poll != poll && other_poll.poll_key == poll.poll_key && !other_poll.finished)
+ stack_number++
+ if(stack_number <= 1)
+ return
+ stacks_overlay = new
+ stacks_overlay.maptext = MAPTEXT("[stack_number]x ")
+ stacks_overlay.transform = stacks_overlay.transform.Translate(3, 2)
+ stacks_overlay.layer = layer
+ add_overlay(stacks_overlay)
+
//OBJECT-BASED
/atom/movable/screen/alert/buckled
diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm
index 79f857e8cbe..e928a2b8b3e 100644
--- a/code/_onclick/hud/fullscreen.dm
+++ b/code/_onclick/hud/fullscreen.dm
@@ -223,3 +223,4 @@
icon_state = "noise"
color = "#04a8d1"
alpha = 80
+
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index ba5f987a473..aceb360c953 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -17,29 +17,29 @@ GLOBAL_LIST_INIT(available_ui_styles, list(
"Detective" = 'icons/hud/screen_detective.dmi',
))
-//SKYRAT EDIT - ADDITION - ERP ICONS FIX
+//NOVA EDIT - ADDITION - ERP ICONS FIX
GLOBAL_LIST_INIT(available_erp_ui_styles, list(
- "Midnight" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi',
- "Retro" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi',
- "Plasmafire" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi',
- "Slimecore" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi',
- "Operative" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi',
- "Clockwork" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi',
- "Glass" = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi'
+ "Midnight" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi',
+ "Retro" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi',
+ "Plasmafire" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi',
+ "Slimecore" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi',
+ "Operative" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi',
+ "Clockwork" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi',
+ "Glass" = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi'
))
-//SKYRAT EDIT - ADDITION - ERP ICONS FIX - END
+//NOVA EDIT - ADDITION - ERP ICONS FIX - END
/proc/ui_style2icon(ui_style)
return GLOB.available_ui_styles[ui_style] || GLOB.available_ui_styles[GLOB.available_ui_styles[1]]
-//SKYRAT EDIT - ADDITION - ERP ICONS FIX
+//NOVA EDIT - ADDITION - ERP ICONS FIX
/proc/erp_ui_style2icon(ui_style)
return GLOB.available_erp_ui_styles[ui_style] || GLOB.available_erp_ui_styles[GLOB.available_erp_ui_styles[1]]
-//SKYRAT EDIT - ADDITION - ERP ICONS FIX - END
+//NOVA EDIT - ADDITION - ERP ICONS FIX - END
/datum/hud
var/mob/mymob
@@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list(
var/inventory_shown = FALSE //Equipped item inventory
var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
- var/atom/movable/screen/ammo_counter //SKYRAT EDIT ADDITION
+ var/atom/movable/screen/ammo_counter //NOVA EDIT ADDITION
var/atom/movable/screen/blobpwrdisplay
@@ -120,7 +120,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list(
var/atom/movable/screen/spacesuit
// subtypes can override this to force a specific UI style
var/ui_style
- var/erp_ui_style //SKYRAT EDIT - ADDITION - ERP ICONS FIX
+ var/erp_ui_style //NOVA EDIT - ADDITION - ERP ICONS FIX
// List of weakrefs to objects that we add to our screen that we don't expect to DO anything
// They typically use * in their render target. They exist solely so we can reuse them,
@@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list(
if (!ui_style)
// will fall back to the default if any of these are null
ui_style = ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style))
- erp_ui_style = erp_ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) //SKYRAT EDIT - ADDITION - ERP ICONS FIX
+ erp_ui_style = erp_ui_style2icon(owner.client?.prefs?.read_preference(/datum/preference/choiced/ui_style)) //NOVA EDIT - ADDITION - ERP ICONS FIX
toggle_palette = new()
toggle_palette.set_hud(src)
@@ -269,9 +269,9 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list(
alien_queen_finder = null
combo_display = null
- //SKYRAT EDIT START - SKYRAT HUD
+ //NOVA EDIT START - SKYRAT HUD
wanted_lvl = null
- // SKYRAT EDIT END - SKYRAT HUD
+ // NOVA EDIT END - SKYRAT HUD
QDEL_LIST_ASSOC_VAL(master_groups)
QDEL_LIST_ASSOC_VAL(plane_master_controllers)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 11f186e9877..410f6c07a45 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -288,8 +288,8 @@
combo_display = new /atom/movable/screen/combo(null, src)
infodisplay += combo_display
- ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //SKYRAT EDIT ADDITION
- infodisplay += ammo_counter //SKYRAT EDIT ADDITION
+ ammo_counter = new /atom/movable/screen/ammo_counter(null, src) //NOVA EDIT ADDITION
+ infodisplay += ammo_counter //NOVA EDIT ADDITION
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
if(inv.slot_id)
diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm
index 376164235a7..86735de1127 100644
--- a/code/_onclick/hud/new_player.dm
+++ b/code/_onclick/hud/new_player.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL - Custom HTML Lobby Screen
+/* NOVA EDIT REMOVAL - Custom HTML Lobby Screen
#define SHUTTER_MOVEMENT_DURATION 0.4 SECONDS
#define SHUTTER_WAIT_DURATION 0.2 SECONDS
@@ -84,7 +84,7 @@
return
flick("[base_icon_state]_pressed", src)
update_appearance(UPDATE_ICON)
- SEND_SOUND(hud.mymob, sound('modular_skyrat/master_files/sound/effects/save.ogg')) //SKYRAT EDIT ADDITION
+ SEND_SOUND(hud.mymob, sound('modular_nova/master_files/sound/effects/save.ogg')) //NOVA EDIT ADDITION
return TRUE
/atom/movable/screen/lobby/button/MouseEntered(location,control,params)
@@ -184,11 +184,11 @@
return
var/mob/dead/new_player/new_player = hud.mymob
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(!is_admin(new_player.client) && length_char(new_player.client?.prefs?.read_preference(/datum/preference/text/flavor_text)) < FLAVOR_TEXT_CHAR_REQUIREMENT)
to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to ready up for the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters."))
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
ready = !ready
if(ready)
@@ -253,11 +253,11 @@
to_chat(new_player, span_notice("You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len]."))
return
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text)) <= FLAVOR_TEXT_CHAR_REQUIREMENT)
to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to join the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters."))
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(!LAZYACCESS(params2list(params), CTRL_CLICK))
GLOB.latejoin_menu.ui_interact(new_player)
@@ -541,4 +541,4 @@
#undef SHUTTER_MOVEMENT_DURATION
#undef SHUTTER_WAIT_DURATION
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index ba1ccbd5d47..51220c48512 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/hudfix_method = TRUE //TRUE to change anchor to user, FALSE to shift by py_shift
var/py_shift = 0
var/entry_animation = TRUE
- var/icon_path = 'icons/hud/radial.dmi' //SKYRAT EDIT ADDITION - GUNPOINT
+ var/icon_path = 'icons/hud/radial.dmi' //NOVA EDIT ADDITION - GUNPOINT
///A replacement icon state for the generic radial slice bg icon. Doesn't affect the next page nor the center buttons
var/radial_slice_icon
@@ -159,7 +159,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/elements_to_add = max_elements - elements.len
for(var/i in 1 to elements_to_add) //Create all elements
var/atom/movable/screen/radial/slice/new_element = new /atom/movable/screen/radial/slice
- new_element.icon = icon_path //SKYRAT EDIT ADDITION - GUNPOINT
+ new_element.icon = icon_path //NOVA EDIT ADDITION - GUNPOINT
new_element.tooltips = use_tooltips
new_element.set_parent(src)
elements += new_element
@@ -396,7 +396,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
/// If provided, will display an info button that will put this text in your chat
var/info
-/datum/radial_menu_choice/Destroy(force, ...)
+/datum/radial_menu_choice/Destroy(force)
. = ..()
QDEL_NULL(image)
diff --git a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm
index 8988b2f7f33..63206afdaa9 100644
--- a/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm
+++ b/code/_onclick/hud/rendering/plane_masters/plane_master_subtypes.dm
@@ -1,3 +1,38 @@
+/atom/movable/screen/plane_master/field_of_vision_blocker
+ name = "Field of vision blocker"
+ documentation = "This is one of those planes that's only used as a filter. It cuts out a portion of the game plate and does effects to it."
+ plane = FIELD_OF_VISION_BLOCKER_PLANE
+ appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR
+ render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ render_relay_planes = list()
+ // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently
+ allows_offsetting = FALSE
+ // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us.
+ // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER
+ multiz_scaled = FALSE
+
+/atom/movable/screen/plane_master/field_of_vision_blocker/show_to(mob/mymob)
+ . = ..()
+ if(!. || !mymob)
+ return .
+ RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
+ RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
+ if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
+ fov_enabled(mymob)
+ else
+ fov_disabled(mymob)
+
+/atom/movable/screen/plane_master/field_of_vision_blocker/proc/fov_enabled(mob/source)
+ SIGNAL_HANDLER
+ if(force_hidden == FALSE)
+ return
+ unhide_plane(source)
+
+/atom/movable/screen/plane_master/field_of_vision_blocker/proc/fov_disabled(mob/source)
+ SIGNAL_HANDLER
+ hide_plane(source)
+
/atom/movable/screen/plane_master/clickcatcher
name = "Click Catcher"
documentation = "Contains the screen object we use as a backdrop to catch clicks on portions of the screen that would otherwise contain nothing else. \
@@ -168,69 +203,17 @@
add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color)
/atom/movable/screen/plane_master/game
- name = "Lower game world"
- documentation = "Exists mostly because of FOV shit. Basically, if you've just got a normal not ABOVE fov thing, and you don't want it masked, stick it here yeah?"
+ name = "Game"
+ documentation = "Holds most non floor/wall things. Anything on this plane \"wants\" to interlayer depending on position."
plane = GAME_PLANE
render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
-/atom/movable/screen/plane_master/game_world_fov_hidden
- name = "lower game world fov hidden"
- documentation = "If you want something to be hidden by fov, stick it on this plane. We're masked by the fov blocker plane, so the items on us can actually well, disappear."
- plane = GAME_PLANE_FOV_HIDDEN
- render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
-
-/atom/movable/screen/plane_master/game_world_fov_hidden/Initialize(mapload, datum/hud/hud_owner)
- . = ..()
- add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE))
-
-/atom/movable/screen/plane_master/field_of_vision_blocker
- name = "Field of vision blocker"
- documentation = "This is one of those planes that's only used as a filter. It masks out things that want to be hidden by fov.\
- Literally just contains FOV images, or masks."
- plane = FIELD_OF_VISION_BLOCKER_PLANE
- appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR
- render_target = FIELD_OF_VISION_BLOCKER_RENDER_TARGET
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- render_relay_planes = list()
- // We do NOT allow offsetting, because there's no case where you would want to block only one layer, at least currently
- allows_offsetting = FALSE
- start_hidden = TRUE
- // We mark as multiz_scaled FALSE so transforms don't effect us, and we draw to the planes below us as if they were us.
- // This is safe because we will ALWAYS be on the top z layer, so it DON'T MATTER
- multiz_scaled = FALSE
-
-/atom/movable/screen/plane_master/field_of_vision_blocker/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
- . = ..()
- mirror_parent_hidden()
-
-/atom/movable/screen/plane_master/game_world_upper
- name = "Upper game world"
- documentation = "Ok so fov is kinda fucky, because planes in byond serve both as effect groupings and as rendering orderers. Since that's true, we need a plane that we can stick stuff that draws above fov blocked stuff on."
- plane = GAME_PLANE_UPPER
- render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
-
-/atom/movable/screen/plane_master/wall_upper
- name = "Upper wall"
- documentation = "There are some walls that want to render above most things (mostly minerals since they shift over.\
- We draw them to their own plane so we can hijack them for our emissive mask stuff"
- plane = WALL_PLANE_UPPER
- render_relay_planes = list(RENDER_PLANE_GAME_WORLD, LIGHT_MASK_PLANE)
-
-/atom/movable/screen/plane_master/wall_upper/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
- . = ..()
- add_relay_to(GET_NEW_PLANE(EMISSIVE_RENDER_PLATE, offset), relay_layer = EMISSIVE_WALL_LAYER, relay_color = GLOB.em_block_color)
-
-/atom/movable/screen/plane_master/game_world_upper_fov_hidden
- name = "Upper game world fov hidden"
- documentation = "Just as we need a place to draw things \"above\" the hidden fov plane, we also need to be able to hide stuff that draws over the upper game plane."
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
+/atom/movable/screen/plane_master/game_world_above
+ name = "Upper Game"
+ documentation = "For stuff you want to draw like the game plane, but not ever below its contents"
+ plane = ABOVE_GAME_PLANE
render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
-/atom/movable/screen/plane_master/game_world_upper_fov_hidden/Initialize(mapload, datum/hud/hud_owner)
- . = ..()
- // Dupe of the other hidden plane
- add_filter("vision_cone", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE))
-
/atom/movable/screen/plane_master/seethrough
name = "Seethrough"
documentation = "Holds the seethrough versions (done using image overrides) of large objects. Mouse transparent, so you can click through them."
@@ -239,12 +222,6 @@
render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
start_hidden = TRUE
-/atom/movable/screen/plane_master/game_world_above
- name = "Above game world"
- documentation = "We need a place that's unmasked by fov that also draws above the upper game world fov hidden plane. I told you fov was hacky man."
- plane = ABOVE_GAME_PLANE
- render_relay_planes = list(RENDER_PLANE_GAME_WORLD)
-
/**
* Plane master that byond will by default draw to
* Shouldn't be used, exists to prevent people using plane 0
diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm
index 02c43d34767..a4ec391c784 100644
--- a/code/_onclick/hud/rendering/render_plate.dm
+++ b/code/_onclick/hud/rendering/render_plate.dm
@@ -72,7 +72,8 @@
/atom/movable/screen/plane_master/rendering_plate/game_plate
name = "Game rendering plate"
documentation = "Holds all objects that are ahhh, in character? is maybe the best way to describe it.\
- We apply a displacement effect from the gravity pulse plane too, so we can warp the game world."
+ We apply a displacement effect from the gravity pulse plane too, so we can warp the game world.\
+ If we have fov enabled we'll relay this onto two different rendering plates to apply fov effects to only a portion. If not, we just draw straight to master"
plane = RENDER_PLANE_GAME
render_relay_planes = list(RENDER_PLANE_MASTER)
@@ -84,6 +85,97 @@
// We're basically using alpha as better constant here btw
add_filter("spook_color", 2, color_matrix_filter(list(0.75,0.13,0.13,0, 0.13,0.7,0.13,0, 0.13,0.13,0.75,0, -0.06,-0.09,-0.08,1, 0,0,0,0)))
+/atom/movable/screen/plane_master/rendering_plate/game_plate/show_to(mob/mymob)
+ . = ..()
+ if(!. || !mymob)
+ return .
+ RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
+ RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
+ if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
+ fov_enabled(mymob)
+ else
+ fov_disabled(mymob)
+
+/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_enabled(mob/source)
+ SIGNAL_HANDLER
+ add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset))
+ add_relay_to(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset))
+ remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset))
+
+/atom/movable/screen/plane_master/rendering_plate/game_plate/proc/fov_disabled(mob/source)
+ SIGNAL_HANDLER
+ remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_UNMASKED, offset))
+ remove_relay_from(GET_NEW_PLANE(RENDER_PLANE_GAME_MASKED, offset))
+ add_relay_to(GET_NEW_PLANE(RENDER_PLANE_MASTER, offset))
+
+///renders the parts of the plate unmasked by fov
+/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate
+ name = "Unmasked Game rendering plate"
+ documentation = "Holds the bits of the game plate that aren't impacted by fov.\
+ We use an alpha mask to cut out the bits we plan on dealing with elsewhere"
+ plane = RENDER_PLANE_GAME_UNMASKED
+ render_relay_planes = list(RENDER_PLANE_MASTER)
+
+/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
+ . = ..()
+ add_filter("fov_handled", 1, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset), flags = MASK_INVERSE))
+
+/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/show_to(mob/mymob)
+ . = ..()
+ if(!. || !mymob)
+ return .
+ RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
+ RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
+ if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
+ fov_enabled(mymob)
+ else
+ fov_disabled(mymob)
+
+/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_enabled(mob/source)
+ SIGNAL_HANDLER
+ if(force_hidden == FALSE)
+ return
+ unhide_plane(source)
+
+/atom/movable/screen/plane_master/rendering_plate/unmasked_game_plate/proc/fov_disabled(mob/source)
+ SIGNAL_HANDLER
+ hide_plane(source)
+
+///renders the parts of the plate masked by fov
+/atom/movable/screen/plane_master/rendering_plate/masked_game_plate
+ name = "FOV Game rendering plate"
+ documentation = "Contains the bits of the game plate that are hidden by some form of fov\
+ Applies a color matrix to dim and create contrast, alongside a blur. Goal is only half being able to see stuff"
+ plane = RENDER_PLANE_GAME_MASKED
+ render_relay_planes = list(RENDER_PLANE_MASTER)
+
+/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/Initialize(mapload, datum/hud/hud_owner, datum/plane_master_group/home, offset)
+ . = ..()
+ add_filter("fov_blur", 1, gauss_blur_filter(1.8))
+ add_filter("fov_handled_space", 2, alpha_mask_filter(render_source = OFFSET_RENDER_TARGET(FIELD_OF_VISION_BLOCKER_RENDER_TARGET, offset)))
+ add_filter("fov_matrix", 3, color_matrix_filter(list(0.5,-0.15,-0.15,0, -0.15,0.5,-0.15,0, -0.15,-0.15,0.5,0, 0,0,0,1, 0,0,0,0)))
+
+/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/show_to(mob/mymob)
+ . = ..()
+ if(!. || !mymob)
+ return .
+ RegisterSignal(mymob, SIGNAL_ADDTRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_enabled), override = TRUE)
+ RegisterSignal(mymob, SIGNAL_REMOVETRAIT(TRAIT_FOV_APPLIED), PROC_REF(fov_disabled), override = TRUE)
+ if(HAS_TRAIT(mymob, TRAIT_FOV_APPLIED))
+ fov_enabled(mymob)
+ else
+ fov_disabled(mymob)
+
+/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_enabled(mob/source)
+ SIGNAL_HANDLER
+ if(force_hidden == FALSE)
+ return
+ unhide_plane(source)
+
+/atom/movable/screen/plane_master/rendering_plate/masked_game_plate/proc/fov_disabled(mob/source)
+ SIGNAL_HANDLER
+ hide_plane(source)
+
// Blackness renders weird when you view down openspace, because of transforms and borders and such
// This is a consequence of not using lummy's grouped transparency, but I couldn't get that to work without totally fucking up
// Sight flags, and shooting vis_contents usage to the moon. So we're doin it different.
@@ -293,7 +385,6 @@
plane = RENDER_PLANE_NON_GAME
render_relay_planes = list(RENDER_PLANE_MASTER)
-
/**
* Plane master proc called in Initialize() that creates relay objects, and sets them uo as needed
* Sets:
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 5053b4672f3..372a32b3c68 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -634,7 +634,7 @@
var/client/holder
INITIALIZE_IMMEDIATE(/atom/movable/screen/splash)
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/atom/movable/screen/splash/Initialize(mapload, datum/hud/hud_owner, client/C, visible, use_previous_title)
. = ..()
if(!istype(C))
@@ -654,7 +654,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/splash)
icon = SStitle.previous_icon
holder.screen += src
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
/atom/movable/screen/splash/proc/Fade(out, qdel_after = TRUE)
if(QDELETED(src))
return
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 745d63b5b94..0e37a2f0c95 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -407,7 +407,7 @@
// rev deconversion through blunt trauma.
// this can be signalized to the rev datum
- if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((maxHealth - health) * 0.5))) // SKYRAT EDIT CHANGE - ORIGINAL : if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((100 - health) * 0.5)))
+ if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((maxHealth - health) * 0.5))) // NOVA EDIT CHANGE - ORIGINAL : if(mind && stat == CONSCIOUS && src != attacker && prob(damage_done + ((100 - health) * 0.5)))
var/datum/antagonist/rev/rev = mind.has_antag_datum(/datum/antagonist/rev)
rev?.remove_revolutionary(attacker)
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index f398a5c0343..03d6606a5f0 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -237,31 +237,6 @@
/atom/proc/attack_larva_secondary(mob/user, list/modifiers)
return SECONDARY_ATTACK_CALL_NORMAL
-
-/*
- Slimes
- Nothing happening here
-*/
-/mob/living/simple_animal/slime/resolve_unarmed_attack(atom/attack_target, proximity_flag, list/modifiers)
- if(isturf(attack_target))
- return ..()
- attack_target.attack_slime(src, modifiers)
-
-/mob/living/simple_animal/slime/resolve_right_click_attack(atom/target, list/modifiers)
- if(isturf(target))
- return ..()
- return target.attack_slime_secondary(src, modifiers)
-
-/atom/proc/attack_slime(mob/user, list/modifiers)
- return
-
-/**
- * Called when a slime mob right clicks an atom (that is not a turf).
- * Returns a SECONDARY_ATTACK_* value.
- */
-/atom/proc/attack_slime_secondary(mob/user, list/modifiers)
- return SECONDARY_ATTACK_CALL_NORMAL
-
/*
Drones
*/
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index 10c6cc4284f..a59b386090f 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -104,10 +104,10 @@
if(CONFIG_GET(flag/usewhitelist))
load_whitelist()
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
populate_interaction_instances()
remove_erp_things()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
loaded = TRUE
diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm
index 2c02e70fc8f..d3c86fa602e 100644
--- a/code/controllers/configuration/entries/general.dm
+++ b/code/controllers/configuration/entries/general.dm
@@ -115,7 +115,7 @@
/// log attack messages
/datum/config_entry/flag/log_attack
-/datum/config_entry/flag/log_subtler // log subtler emotes //SKYRAT EDIT ADDITION
+/datum/config_entry/flag/log_subtler // log subtler emotes //NOVA EDIT ADDITION
/datum/config_entry/flag/log_econ // log economy actions
@@ -317,7 +317,7 @@
/datum/config_entry/string/banappeals
/datum/config_entry/string/wikiurl
- default = "https://wiki.skyrat13.com/index.php" //SKYRAT EDIT - Original: "http://www.tgstation13.org/wiki"
+ default = "https://wiki.novasector13.com/index.php" //NOVA EDIT - Original: "http://www.tgstation13.org/wiki"
/datum/config_entry/string/forumurl
default = "http://tgstation13.org/phpBB/index.php"
diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm
index 365fdab921d..a3520ab1ee3 100644
--- a/code/controllers/globals.dm
+++ b/code/controllers/globals.dm
@@ -19,7 +19,7 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
controller_vars["vars"] = null
gvars_datum_in_built_vars = controller_vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order))
-#if DM_VERSION >= 515 && DM_BUILD > 1620
+#if MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_BUILD > 1620
#warn datum.vars hanging a ref should now be fixed, there should be no reason to remove the vars list from our controller's vars list anymore
#endif
QDEL_IN(exclude_these, 0) //signal logging isn't ready
diff --git a/code/controllers/master.dm b/code/controllers/master.dm
index da98580d5e0..ce660ff512b 100644
--- a/code/controllers/master.dm
+++ b/code/controllers/master.dm
@@ -216,7 +216,7 @@ GLOBAL_REAL(Master, /datum/controller/master)
init_stage_completed = 0
var/mc_started = FALSE
- add_startup_message("Initializing subsystems...") //SKYRAT EDIT CHANGE - Custom HTML Lobby Screen
+ add_startup_message("Initializing subsystems...") //NOVA EDIT CHANGE - Custom HTML Lobby Screen
var/list/stage_sorted_subsystems = new(INITSTAGE_MAX)
for (var/i in 1 to INITSTAGE_MAX)
@@ -250,7 +250,7 @@ GLOBAL_REAL(Master, /datum/controller/master)
SetRunLevel(1) // Intentionally not using the defines here because the MC doesn't care about them
// Loop.
Master.StartProcessing(0)
- add_startup_message("Clearing clutter...") //SKYRAT EDIT ADDITION
+ add_startup_message("Clearing clutter...") //NOVA EDIT ADDITION
var/time = (REALTIMEOFDAY - start_timeofday) / 10
@@ -349,12 +349,12 @@ GLOBAL_REAL(Master, /datum/controller/master)
chat_warning = TRUE
var/message = "[message_prefix] [seconds] second[seconds == 1 ? "" : "s"]!"
- // SKYRAT EDIT REMOVAL BEGIN -- chat_message not used anymore due to change below
+ // NOVA EDIT REMOVAL BEGIN -- chat_message not used anymore due to change below
// var/chat_message = chat_warning ? span_boldwarning(message) : span_boldannounce(message)
- // SKYRAT EDIT REMOVAL END
+ // NOVA EDIT REMOVAL END
if(result != SS_INIT_NO_MESSAGE)
- add_startup_message(message, chat_warning) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(world, chat_message)
+ add_startup_message(message, chat_warning) //NOVA EDIT CHANGE - ORIGINAL: to_chat(world, chat_message)
log_world(message)
/datum/controller/master/proc/SetRunLevel(new_runlevel)
diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm
index 6512ca6b97f..b4a2bfe7526 100644
--- a/code/controllers/subsystem/blackbox.dm
+++ b/code/controllers/subsystem/blackbox.dm
@@ -44,14 +44,14 @@ SUBSYSTEM_DEF(blackbox)
return
var/playercount = LAZYLEN(GLOB.player_list)
var/admincount = GLOB.admins.len
- var/datum/db_query/query_record_playercount = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_record_playercount = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
INSERT INTO [format_table_name("legacy_population")] (playercount, admincount, time, server_name, server_ip, server_port, round_id)
VALUES (:playercount, :admincount, :time, :server_name, INET_ATON(:server_ip), :server_port, :round_id)
"}, list(
"playercount" = playercount,
"admincount" = admincount,
"time" = SQLtime(),
- "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER
+ "server_name" = CONFIG_GET(string/serversqlname), // NOVA EDIT ADDITION - MULTISERVER
"server_ip" = world.internet_address || "0",
"server_port" = "[world.port]",
"round_id" = GLOB.round_id,
@@ -336,7 +336,7 @@ Versioning
if(!SSdbcore.Connect())
return
- var/datum/db_query/query_report_death = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_report_death = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_name, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, staminaloss, last_words, suicide)
VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, :server_name, INET_ATON(:internet_address), :port, :round_id, :time, :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :clone, :stamina, :last_words, :suicide)
"}, list(
@@ -359,7 +359,7 @@ Versioning
"last_words" = L.last_words,
"suicide" = did_they_suicide,
"map" = SSmapping.config.map_name,
- "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER
+ "server_name" = CONFIG_GET(string/serversqlname), // NOVA EDIT ADDITION - MULTISERVER
"internet_address" = world.internet_address || "0",
"port" = "[world.port]",
"round_id" = GLOB.round_id,
diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm
index 3ad52bbf150..dfdeea26962 100644
--- a/code/controllers/subsystem/communications.dm
+++ b/code/controllers/subsystem/communications.dm
@@ -40,7 +40,7 @@ SUBSYSTEM_DEF(communications)
if(syndicate)
priority_announce(html_decode(message_data["message"]), null, 'sound/misc/announce_syndi.ogg', ANNOUNCEMENT_TYPE_SYNDICATE, has_important_message = TRUE, players = players, color_override = "red")
else
- priority_announce(html_decode(message_data["message"]), null, ANNOUNCER_CAPTAIN, ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) // SKYRAT EDIT CHANGE - 'sound/misc/announce.ogg' to ANNOUNCER_CAPTAIN
+ priority_announce(html_decode(message_data["message"]), null, ANNOUNCER_CAPTAIN, ANNOUNCEMENT_TYPE_CAPTAIN, has_important_message = TRUE, players = players) // NOVA EDIT CHANGE - 'sound/misc/announce.ogg' to ANNOUNCER_CAPTAIN
COOLDOWN_START(src, nonsilicon_message_cooldown, COMMUNICATION_COOLDOWN)
user.log_talk(input, LOG_SAY, tag="priority announcement")
message_admins("[ADMIN_LOOKUPFLW(user)] has made a priority announcement.")
diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm
index 15484fb9cc6..56fd25f2f73 100644
--- a/code/controllers/subsystem/dbcore.dm
+++ b/code/controllers/subsystem/dbcore.dm
@@ -186,10 +186,10 @@ SUBSYSTEM_DEF(dbcore)
UNTIL(query.process())
queries_active -= query
- // SKYRAT EDIT START - SQL-based logging
+ // NOVA EDIT START - SQL-based logging
for(var/table in queued_log_entries_by_table)
MassInsert(table, rows = queued_log_entries_by_table[table], duplicate_key = FALSE, ignore_errors = FALSE, warn = FALSE, async = TRUE, special_columns = null)
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/datum/db_query/query_round_shutdown = SSdbcore.NewQuery(
"UPDATE [format_table_name("round")] SET shutdown_datetime = Now(), end_state = :end_state WHERE id = :round_id",
@@ -303,9 +303,9 @@ SUBSYSTEM_DEF(dbcore)
if(!Connect())
return
- var/datum/db_query/query_round_initialize = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */
+ var/datum/db_query/query_round_initialize = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */
"INSERT INTO [format_table_name("round")] (initialize_datetime, server_name, server_ip, server_port) VALUES (Now(), :server_name, INET_ATON(:internet_address), :port)",
- list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = "[world.port]") // SKYRAT EDIT CHANGE - MULTISERVER
+ list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = "[world.port]") // NOVA EDIT CHANGE - MULTISERVER
)
query_round_initialize.Execute(async = FALSE)
GLOB.round_id = "[query_round_initialize.last_insert_id]"
diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm
new file mode 100644
index 00000000000..fd6a5ecf9a5
--- /dev/null
+++ b/code/controllers/subsystem/dynamic/dynamic.dm
@@ -0,0 +1,1066 @@
+#define FAKE_GREENSHIFT_FORM_CHANCE 15
+#define FAKE_REPORT_CHANCE 8
+#define PULSAR_REPORT_CHANCE 8
+#define REPORT_NEG_DIVERGENCE -15
+#define REPORT_POS_DIVERGENCE 15
+
+// Are HIGH_IMPACT_RULESETs allowed to stack?
+GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE)
+// If enabled does not accept or execute any rulesets.
+GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE)
+// How high threat is required for HIGH_IMPACT_RULESETs stacking.
+// This is independent of dynamic_no_stacking.
+GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
+// List of forced roundstart rulesets.
+GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
+// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
+GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
+/// Modify the threat level for station traits before dynamic can be Initialized. List(instance = threat_reduction)
+GLOBAL_LIST_EMPTY(dynamic_station_traits)
+/// Rulesets which have been forcibly enabled or disabled
+GLOBAL_LIST_EMPTY(dynamic_forced_rulesets)
+
+SUBSYSTEM_DEF(dynamic)
+ name = "Dynamic"
+ flags = SS_NO_INIT
+ wait = 1 SECONDS
+
+ // Threat logging vars
+ /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations
+ var/threat_level = 0
+
+ /// Set at the beginning of the round. Spent by the mode to "purchase" rules. Everything else goes in the postround budget.
+ var/round_start_budget = 0
+
+ /// Set at the beginning of the round. Spent by midrounds and latejoins.
+ var/mid_round_budget = 0
+
+ /// The initial round start budget for logging purposes, set once at the beginning of the round.
+ var/initial_round_start_budget = 0
+
+ /// Running information about the threat. Can store text or datum entries.
+ var/list/threat_log = list()
+ /// Threat log shown on the roundend report. Should only list player-made edits.
+ var/list/roundend_threat_log = list()
+ /// List of latejoin rules used for selecting the rules.
+ var/list/latejoin_rules
+ /// List of midround rules used for selecting the rules.
+ var/list/midround_rules
+ /** # Pop range per requirement.
+ * If the value is five the range is:
+ * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+
+ * If it is six the range is:
+ * 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+
+ * If it is seven the range is:
+ * 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+
+ */
+ var/pop_per_requirement = 6
+ /// Number of players who were ready on roundstart.
+ var/roundstart_pop_ready = 0
+ /// List of candidates used on roundstart rulesets.
+ var/list/candidates = list()
+ /// Rules that are processed, rule_process is called on the rules in this list.
+ var/list/current_rules = list()
+ /// List of executed rulesets.
+ var/list/executed_rules = list()
+ /// If TRUE, the next player to latejoin will guarantee roll for a random latejoin antag
+ /// (this does not guarantee they get said antag roll, depending on preferences and circumstances)
+ var/forced_injection = FALSE
+ /// Forced ruleset to be executed for the next latejoin.
+ var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null
+ /// How many percent of the rounds are more peaceful.
+ var/peaceful_percentage = 50
+ /// If a high impact ruleset was executed. Only one will run at a time in most circumstances.
+ var/high_impact_ruleset_executed = FALSE
+ /// If a only ruleset has been executed.
+ var/only_ruleset_executed = FALSE
+ /// Dynamic configuration, loaded on pre_setup
+ var/list/configuration = null
+
+ /// When world.time is over this number the mode tries to inject a latejoin ruleset.
+ var/latejoin_injection_cooldown = 0
+
+ /// The minimum time the recurring latejoin ruleset timer is allowed to be.
+ var/latejoin_delay_min = (5 MINUTES)
+
+ /// The maximum time the recurring latejoin ruleset timer is allowed to be.
+ var/latejoin_delay_max = (25 MINUTES)
+
+ /// The low bound for the midround roll time splits.
+ /// This number influences where to place midround rolls, making this smaller
+ /// will make midround rolls more frequent, and vice versa.
+ /// A midround will never be able to roll before this.
+ var/midround_lower_bound = 10 MINUTES
+
+ /// The upper bound for the midround roll time splits.
+ /// This number influences where to place midround rolls, making this larger
+ /// will make midround rolls less frequent, and vice versa.
+ /// A midround will never be able to roll farther than this.
+ var/midround_upper_bound = 100 MINUTES
+
+ /// The distance between the chosen midround roll point (which is deterministic),
+ /// and when it can actually roll.
+ /// Basically, if this is set to 5 minutes, and a midround roll point is decided to be at 20 minutes,
+ /// then it can roll anywhere between 15 and 25 minutes.
+ var/midround_roll_distance = 3 MINUTES
+
+ /// The amount of threat per midround roll.
+ /// Basically, if this is set to 5, then for every 5 threat, one midround roll will be added.
+ /// The equation this is used in rounds up, meaning that if this is set to 5, and you have 6
+ /// threat, then you will get 2 midround rolls.
+ var/threat_per_midround_roll = 7
+
+ /// A number between -5 and +5.
+ /// A negative value will give a more peaceful round and
+ /// a positive value will give a round with higher threat.
+ var/threat_curve_centre = 0
+
+ /// A number between 0.5 and 4.
+ /// Higher value will favour extreme rounds and
+ /// lower value rounds closer to the average.
+ var/threat_curve_width = 1.8
+
+ /// A number between -5 and +5.
+ /// Equivalent to threat_curve_centre, but for the budget split.
+ /// A negative value will weigh towards midround rulesets, and a positive
+ /// value will weight towards roundstart ones.
+ var/roundstart_split_curve_centre = 1
+
+ /// A number between 0.5 and 4.
+ /// Equivalent to threat_curve_width, but for the budget split.
+ /// Higher value will favour more variance in splits and
+ /// lower value rounds closer to the average.
+ var/roundstart_split_curve_width = 1.8
+
+ /// The minimum amount of time for antag random events to be hijacked.
+ var/random_event_hijack_minimum = 10 MINUTES
+
+ /// The maximum amount of time for antag random events to be hijacked.
+ var/random_event_hijack_maximum = 18 MINUTES
+
+ /// What is the lower bound of when the roundstart annoucement is sent out?
+ var/waittime_l = 600
+
+ /// What is the higher bound of when the roundstart annoucement is sent out?
+ var/waittime_h = 1800
+
+ /// A number between 0 and 100. The maximum amount of threat allowed to generate.
+ var/max_threat_level = 100
+
+ /// The extra chance multiplier that a heavy impact midround ruleset will run next time.
+ /// For example, if this is set to 50, then the next heavy roll will be about 50% more likely to happen.
+ var/hijacked_random_event_injection_chance_modifier = 50
+
+ /// Any midround before this point is guaranteed to be light
+ var/midround_light_upper_bound = 25 MINUTES
+
+ /// Any midround after this point is guaranteed to be heavy
+ var/midround_heavy_lower_bound = 55 MINUTES
+
+ /// If there are less than this many players readied, threat level will be lowered.
+ /// This number should be kept fairly low, as there are other measures that population
+ /// impacts Dynamic, such as the requirements variable on rulesets.
+ var/low_pop_player_threshold = 20
+
+ /// The maximum threat that can roll with *zero* players.
+ /// As the number of players approaches `low_pop_player_threshold`, the maximum
+ /// threat level will increase.
+ /// For example, if `low_pop_maximum_threat` is 50, `low_pop_player_threshold` is 20,
+ /// and the number of readied players is 10, then the highest threat that can roll is
+ /// lerp(50, 100, 10 / 20), AKA 75.
+ var/low_pop_maximum_threat = 40
+
+ /// The chance for latejoins to roll when ready
+ var/latejoin_roll_chance = 50
+
+ // == EVERYTHING BELOW THIS POINT SHOULD NOT BE CONFIGURED ==
+
+ /// A list of recorded "snapshots" of the round, stored in the dynamic.json log
+ var/list/datum/dynamic_snapshot/snapshots
+
+ /// The time when the last midround injection was attempted, whether or not it was successful
+ var/last_midround_injection_attempt = 0
+
+ /// Whether or not a random event has been hijacked this midround cycle
+ var/random_event_hijacked = HIJACKED_NOTHING
+
+ /// The timer ID for the cancellable midround rule injection
+ var/midround_injection_timer_id
+
+ /// The last drafted midround rulesets (without the current one included).
+ /// Used for choosing different midround injections.
+ var/list/current_midround_rulesets
+
+ /// The amount of threat shown on the piece of paper.
+ /// Can differ from the actual threat amount.
+ var/shown_threat
+
+ VAR_PRIVATE/next_midround_injection
+
+/datum/controller/subsystem/dynamic/proc/admin_panel()
+ var/list/dat = list("Game Mode Panel Game Mode Panel ")
+ dat += "Dynamic Mode \[VV\] \[Refresh\] "
+ dat += "Threat Level: [threat_level] "
+ dat += "Budgets (Roundstart/Midrounds): [initial_round_start_budget]/[threat_level - initial_round_start_budget] "
+
+ dat += "Midround budget to spend: [mid_round_budget] \[Adjust\] \[View Log\] "
+ dat += " "
+ dat += "Parameters: centre = [threat_curve_centre] ; width = [threat_curve_width]. "
+ dat += "Split parameters: centre = [roundstart_split_curve_centre] ; width = [roundstart_split_curve_width]. "
+ dat += "On average, [clamp(peaceful_percentage, 1, 99)] % of the rounds are more peaceful. "
+ dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"] "
+ dat += "No stacking (only one round-ender): [GLOB.dynamic_no_stacking ? "On" : "Off"] "
+ dat += "Stacking limit: [GLOB.dynamic_stacking_limit] \[Adjust\] "
+ dat += " "
+ dat += "\[Force Next Latejoin Ruleset\] "
+ if (forced_latejoin_rule)
+ dat += {"-> [forced_latejoin_rule.name] <- "}
+ dat += "\[Execute Midround Ruleset\] "
+ dat += " "
+ dat += "Executed rulesets: "
+ if (executed_rules.len > 0)
+ dat += " "
+ for (var/datum/dynamic_ruleset/DR in executed_rules)
+ dat += "[DR.ruletype] - [DR.name] "
+ else
+ dat += "none. "
+ dat += " Injection Timers: ([get_heavy_midround_injection_chance(dry_run = TRUE)]% heavy midround chance) "
+ dat += "Latejoin: [DisplayTimeText(latejoin_injection_cooldown-world.time)] \[Now!\] "
+
+ var/next_injection = next_midround_injection()
+ if (next_injection == INFINITY)
+ dat += "All midrounds have been exhausted."
+ else
+ dat += "Midround: [DisplayTimeText(next_injection - world.time)] \[Now!\] "
+
+ usr << browse(dat.Join(), "window=gamemode_panel;size=500x500")
+
+/datum/controller/subsystem/dynamic/Topic(href, href_list)
+ if (..()) // Sanity, maybe ?
+ return
+ if(!check_rights(R_ADMIN))
+ message_admins("[usr.key] has attempted to override the game mode panel!")
+ log_admin("[key_name(usr)] tried to use the game mode panel without authorization.")
+ return
+ if (href_list["forced_extended"])
+ GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended
+ else if (href_list["no_stacking"])
+ GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking
+ else if (href_list["adjustthreat"])
+ var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num
+ if(!threatadd)
+ return
+ if(threatadd > 0)
+ create_threat(threatadd, threat_log, "[worldtime2text()]: increased by [key_name(usr)]")
+ else
+ spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]")
+ else if (href_list["injectlate"])
+ latejoin_injection_cooldown = 0
+ forced_injection = TRUE
+ message_admins("[key_name(usr)] forced a latejoin injection.")
+ else if (href_list["injectmid"])
+ forced_injection = TRUE
+ message_admins("[key_name(usr)] forced a midround injection.")
+ try_midround_roll()
+ else if (href_list["threatlog"])
+ show_threatlog(usr)
+ else if (href_list["stacking_limit"])
+ GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
+ else if(href_list["force_latejoin_rule"])
+ var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/latejoin))
+ if (!added_rule)
+ return
+ forced_latejoin_rule = added_rule
+ log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.")
+ message_admins("[key_name(usr)] set [added_rule] to proc on the next valid latejoin.")
+ else if(href_list["clear_forced_latejoin"])
+ forced_latejoin_rule = null
+ log_admin("[key_name(usr)] cleared the forced latejoin ruleset.")
+ message_admins("[key_name(usr)] cleared the forced latejoin ruleset.")
+ else if(href_list["force_midround_rule"])
+ var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/midround))
+ if (!added_rule)
+ return
+ log_admin("[key_name(usr)] executed the [added_rule] ruleset.")
+ message_admins("[key_name(usr)] executed the [added_rule] ruleset.")
+ picking_specific_rule(added_rule, TRUE)
+ else if(href_list["cancelmidround"])
+ admin_cancel_midround(usr, href_list["cancelmidround"])
+ return
+ else if (href_list["differentmidround"])
+ admin_different_midround(usr, href_list["differentmidround"])
+ return
+
+ admin_panel() // Refreshes the window
+
+// Set result and news report here
+/datum/controller/subsystem/dynamic/proc/set_round_result()
+ // If it got to this part, just pick one high impact ruleset if it exists
+ for(var/datum/dynamic_ruleset/rule in executed_rules)
+ if(rule.flags & HIGH_IMPACT_RULESET)
+ rule.round_result()
+ // One was set, so we're done here
+ if(SSticker.news_report)
+ return
+
+ SSticker.mode_result = "undefined"
+
+ // Something nuked the station - it wasn't nuke ops (they set their own via their rulset)
+ if(GLOB.station_was_nuked)
+ SSticker.news_report = STATION_NUKED
+
+ if(SSsupermatter_cascade.cascade_initiated)
+ SSticker.news_report = SUPERMATTER_CASCADE
+
+ // Only show this one if we have nothing better to show
+ if(EMERGENCY_ESCAPED_OR_ENDGAMED && !SSticker.news_report)
+ SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED
+
+/datum/controller/subsystem/dynamic/proc/send_intercept()
+ if(SScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready
+ addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS)
+ return
+
+ . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR]: "
+ . += generate_advisory_level()
+
+ var/min_threat = 100
+ for(var/datum/dynamic_ruleset/ruleset as anything in init_rulesets(/datum/dynamic_ruleset))
+ if(ruleset.weight <= 0 || ruleset.cost <= 0)
+ continue
+ min_threat = min(ruleset.cost, min_threat)
+ var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time
+
+ generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget))
+
+ if (GLOB.station_goals.len > 0)
+ var/list/texts = list("Special Orders for [station_name()]: ")
+ for(var/datum/station_goal/station_goal as anything in GLOB.station_goals)
+ station_goal.on_report()
+ texts += station_goal.get_report()
+
+ . += texts.Join(" ")
+
+ var/list/trait_list_strings = list()
+ for(var/datum/station_trait/station_trait as anything in SSstation.station_traits)
+ if(!station_trait.show_in_report)
+ continue
+ trait_list_strings += "[station_trait.get_report()] "
+ if(trait_list_strings.len > 0)
+ . += "Identified shift divergencies: " + trait_list_strings.Join()
+
+ if(length(SScommunications.command_report_footnotes))
+ var/footnote_pile = ""
+
+ for(var/datum/command_footnote/footnote in SScommunications.command_report_footnotes)
+ footnote_pile += "[footnote.message] "
+ footnote_pile += "[footnote.signature] "
+ footnote_pile += " "
+
+ . += "Additional Notes: " + footnote_pile
+
+ print_command_report(., "[command_name()] Status Summary", announce=FALSE)
+ if(greenshift)
+ priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound(), color_override = "green")
+ else
+ if(SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_BLUE)
+ SSsecurity_level.set_level(SEC_LEVEL_BLUE, announce = FALSE)
+ priority_announce("[SSsecurity_level.current_security_level.elevating_to_announcement]\n\nA summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT, color_override = SSsecurity_level.current_security_level.announcement_color)
+
+ return .
+
+/// Generate the advisory level depending on the shown threat level.
+/datum/controller/subsystem/dynamic/proc/generate_advisory_level()
+ var/advisory_string = ""
+ if (prob(PULSAR_REPORT_CHANCE))
+ if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS))
+ advisory_string += "Advisory Level: Clown Planet "
+ advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advice you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department advises defending chemistry from any clowns that are trying to make baldium or space lube."
+ return advisory_string
+
+ advisory_string += "Advisory Level: Pulsar Star "
+ advisory_string += "Your sector's advisory level is Pulsar Star. A large unknown electromagnetic field has stormed through nearby surveillance equipment. No surveillance data has been able to be obtained showing no credible threats to Nanotrasen assets within the Spinward Sector. The Department advises maintaining high alert against potential threats, regardless of a lack of information."
+ return advisory_string
+
+ switch(round(shown_threat))
+ if(0)
+ advisory_string += "Advisory Level: White Dwarf "
+ advisory_string += "Your sector's advisory level is White Dwarf. Our surveillors have ruled out any and all potential risks known in our database, ruling out the loss of our assets in the Spinward Sector. We advise a lower level of security, alongside distributing ressources on potential profit."
+ if(1 to 19)
+ var/show_core_territory = (GLOB.current_living_antags.len > 0)
+ if (prob(FAKE_GREENSHIFT_FORM_CHANCE))
+ show_core_territory = !show_core_territory
+
+ if (show_core_territory)
+ advisory_string += "Advisory Level: Blue Star "
+ advisory_string += "Your sector's advisory level is Blue Star. At this threat advisory, the risk of attacks on Nanotrasen assets within the sector is minor, but cannot be ruled out entirely. Remain vigilant."
+ else
+ advisory_string += "Advisory Level: Green Star "
+ advisory_string += "Your sector's advisory level is Green Star. Surveillance information shows no credible threats to Nanotrasen assets within the Spinward Sector at this time. As always, the Department advises maintaining vigilance against potential threats, regardless of a lack of known threats."
+ if(20 to 39)
+ advisory_string += "Advisory Level: Yellow Star "
+ advisory_string += "Your sector's advisory level is Yellow Star. Surveillance shows a credible risk of enemy attack against our assets in the Spinward Sector. We advise a heightened level of security, alongside maintaining vigilance against potential threats."
+ if(40 to 65)
+ advisory_string += "Advisory Level: Orange Star "
+ advisory_string += "Your sector's advisory level is Orange Star. Upon reviewing your sector's intelligence, the Department has determined that the risk of enemy activity is moderate to severe. At this advisory, we recommend maintaining a higher degree of security and alertness, and vigilance against threats that may (or will) arise."
+ if(66 to 79)
+ advisory_string += "Advisory Level: Red Star "
+ advisory_string += "Your sector's advisory level is Red Star. The Department of Intelligence has decrypted Cybersun communications suggesting a high likelihood of attacks on Nanotrasen assets within the Spinward Sector. Stations in the region are advised to remain highly vigilant for signs of enemy activity and to be on high alert."
+ if(80 to 99)
+ advisory_string += "Advisory Level: Black Orbit "
+ advisory_string += "Your sector's advisory level is Black Orbit. Your sector's local comms network is currently undergoing a blackout, and we are therefore unable to accurately judge enemy movements within the region. However, information passed to us by GDI suggests a high amount of enemy activity in the sector, indicative of an impending attack. Remain on high alert, and as always, we advise remaining vigilant against any other potential threats."
+ if(100)
+ advisory_string += "Advisory Level: Midnight Sun "
+ advisory_string += "Your sector's advisory level is Midnight Sun. Credible information passed to us by GDI suggests that the Syndicate is preparing to mount a major concerted offensive on Nanotrasen assets in the Spinward Sector to cripple our foothold there. All stations should remain on high alert and prepared to defend themselves."
+
+ return advisory_string
+
+/datum/controller/subsystem/dynamic/proc/show_threatlog(mob/admin)
+ if(!SSticker.HasRoundStarted())
+ tgui_alert(usr, "The round hasn't started yet!")
+ return
+
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/list/out = list("Threat Log Threat Log Starting Threat: [threat_level] ")
+
+ for(var/entry in threat_log)
+ if(istext(entry))
+ out += "[entry] "
+
+ out += "Remaining threat/threat_level: [mid_round_budget]/[threat_level]"
+
+ usr << browse(out.Join(), "window=threatlog;size=700x500")
+
+/// Generates the threat level using lorentz distribution and assigns peaceful_percentage.
+/datum/controller/subsystem/dynamic/proc/generate_threat()
+ // At lower pop levels we run a Liner Interpolation against the max threat based proportionally on the number
+ // of players ready. This creates a balanced lorentz curve within a smaller range than 0 to max_threat_level.
+ var/calculated_max_threat = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level
+ log_dynamic("Calculated maximum threat level based on player count of [SSticker.totalPlayersReady]: [calculated_max_threat]")
+
+ threat_level = lorentz_to_amount(threat_curve_centre, threat_curve_width, calculated_max_threat)
+
+ for(var/datum/station_trait/station_trait in GLOB.dynamic_station_traits)
+ threat_level = max(threat_level - GLOB.dynamic_station_traits[station_trait], 0)
+ log_dynamic("Threat reduced by [GLOB.dynamic_station_traits[station_trait]]. Source: [type].")
+
+ peaceful_percentage = (threat_level/max_threat_level)*100
+
+/// Generates the midround and roundstart budgets
+/datum/controller/subsystem/dynamic/proc/generate_budgets()
+ round_start_budget = lorentz_to_amount(roundstart_split_curve_centre, roundstart_split_curve_width, threat_level, 0.1)
+ initial_round_start_budget = round_start_budget
+ mid_round_budget = threat_level - round_start_budget
+
+/datum/controller/subsystem/dynamic/proc/setup_parameters()
+ log_dynamic("Dynamic mode parameters for the round:")
+ log_dynamic("Centre is [threat_curve_centre], Width is [threat_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].")
+ log_dynamic("Stacking limit is [GLOB.dynamic_stacking_limit].")
+ if(GLOB.dynamic_forced_threat_level >= 0)
+ threat_level = round(GLOB.dynamic_forced_threat_level, 0.1)
+ else
+ generate_threat()
+ generate_budgets()
+ set_cooldowns()
+ log_dynamic("Dynamic Mode initialized with a Threat Level of... [threat_level]! ([round_start_budget] round start budget)")
+ SSblackbox.record_feedback(
+ "associative",
+ "dynamic_threat",
+ 1,
+ list(
+ "server_name" = CONFIG_GET(string/serversqlname),
+ "forced_threat_level" = GLOB.dynamic_forced_threat_level,
+ "threat_level" = threat_level,
+ "max_threat" = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level,
+ "player_count" = SSticker.totalPlayersReady,
+ "round_start_budget" = round_start_budget,
+ "parameters" = list(
+ "threat_curve_centre" = threat_curve_centre,
+ "threat_curve_width" = threat_curve_width,
+ "forced_extended" = GLOB.dynamic_forced_extended,
+ "no_stacking" = GLOB.dynamic_no_stacking,
+ "stacking_limit" = GLOB.dynamic_stacking_limit,
+ ),
+ ),
+ )
+ return TRUE
+
+/datum/controller/subsystem/dynamic/proc/setup_shown_threat()
+ if (prob(FAKE_REPORT_CHANCE))
+ shown_threat = rand(1, 100)
+ else
+ shown_threat = clamp(threat_level + rand(REPORT_NEG_DIVERGENCE, REPORT_POS_DIVERGENCE), 0, 100)
+
+/datum/controller/subsystem/dynamic/proc/set_cooldowns()
+ var/latejoin_injection_cooldown_middle = 0.5*(latejoin_delay_max + latejoin_delay_min)
+ latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time
+
+// Called BEFORE everyone is equipped with their job
+/datum/controller/subsystem/dynamic/proc/pre_setup()
+ if(CONFIG_GET(flag/dynamic_config_enabled))
+ var/json_file = file("[global.config.directory]/dynamic.json")
+ if(fexists(json_file))
+ configuration = json_decode(file2text(json_file))
+ if(configuration["Dynamic"])
+ for(var/variable in configuration["Dynamic"])
+ if(!(variable in vars))
+ stack_trace("Invalid dynamic configuration variable [variable] in game mode variable changes.")
+ continue
+ vars[variable] = configuration["Dynamic"][variable]
+
+ configure_station_trait_costs()
+ setup_parameters()
+ setup_hijacking()
+ setup_shown_threat()
+ setup_rulesets()
+
+ //We do this here instead of with the midround rulesets and such because these rules can hang refs
+ //To new_player and such, and we want the datums to just free when the roundstart work is done
+ var/list/roundstart_rules = init_rulesets(/datum/dynamic_ruleset/roundstart)
+
+ SSjob.DivideOccupations(pure = TRUE, allow_all = TRUE)
+ for(var/i in GLOB.new_player_list)
+ var/mob/dead/new_player/player = i
+ if(player.ready == PLAYER_READY_TO_PLAY && player.mind && player.check_preferences())
+ if(is_unassigned_job(player.mind.assigned_role))
+ var/list/job_data = list()
+ var/job_prefs = player.client.prefs.job_preferences
+ for(var/job in job_prefs)
+ var/priority = job_prefs[job]
+ job_data += "[job]: [SSjob.job_priority_level_to_string(priority)]"
+ to_chat(player, span_danger("You were unable to qualify for any roundstart antagonist role this round because your job preferences presented a high chance of all of your selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled. Increase the number of roles set to medium or low priority to reduce the chances of this happening."))
+ log_admin("[player.ckey] failed to qualify for any roundstart antagonist role because their job preferences presented a high chance of all of their selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled and has [player.client.prefs.be_special.len] antag preferences enabled. They will be unable to qualify for any roundstart antagonist role. These are their job preferences - [job_data.Join(" | ")]")
+ else
+ roundstart_pop_ready++
+ candidates.Add(player)
+ SSjob.ResetOccupations()
+ log_dynamic("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
+ if (candidates.len <= 0)
+ log_dynamic("[candidates.len] candidates.")
+ return TRUE
+
+ if(GLOB.dynamic_forced_roundstart_ruleset.len > 0)
+ rigged_roundstart()
+ else
+ roundstart(roundstart_rules)
+
+ log_dynamic("[round_start_budget] round start budget was left, donating it to midrounds.")
+ threat_log += "[worldtime2text()]: [round_start_budget] round start budget was left, donating it to midrounds."
+ mid_round_budget += round_start_budget
+
+ var/starting_rulesets = ""
+ for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
+ starting_rulesets += "[DR.name], "
+ log_dynamic("Picked the following roundstart rules: [starting_rulesets]")
+ candidates.Cut()
+ return TRUE
+
+// Called AFTER everyone is equipped with their job
+/datum/controller/subsystem/dynamic/proc/post_setup(report)
+ for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
+ rule.candidates.Cut() // The rule should not use candidates at this point as they all are null.
+ addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/dynamic/, execute_roundstart_rule), rule), rule.delay)
+
+ if (!CONFIG_GET(flag/no_intercept_report))
+ addtimer(CALLBACK(src, PROC_REF(send_intercept)), rand(waittime_l, waittime_h))
+
+ addtimer(CALLBACK(src, PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME)
+ //NOVA EDIT START - DIVERGENCY/GOALS REPORT
+ else
+ addtimer(CALLBACK(src, PROC_REF(send_trait_report)), rand(waittime_l, waittime_h))
+ //NOVA EDIT END
+
+ if(CONFIG_GET(flag/reopen_roundstart_suicide_roles))
+ var/delay = CONFIG_GET(number/reopen_roundstart_suicide_roles_delay)
+ if(delay)
+ delay *= (1 SECONDS)
+ else
+ delay = (4 MINUTES) //default to 4 minutes if the delay isn't defined.
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reopen_roundstart_suicide_roles)), delay)
+
+ if(SSdbcore.Connect())
+ var/list/to_set = list()
+ var/arguments = list()
+ if(GLOB.revdata.originmastercommit)
+ to_set += "commit_hash = :commit_hash"
+ arguments["commit_hash"] = GLOB.revdata.originmastercommit
+ if(to_set.len)
+ arguments["round_id"] = GLOB.round_id
+ var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery(
+ "UPDATE [format_table_name("round")] SET [to_set.Join(", ")] WHERE id = :round_id",
+ arguments
+ )
+ query_round_game_mode.Execute()
+ qdel(query_round_game_mode)
+ return TRUE
+
+/datum/controller/subsystem/dynamic/proc/display_roundstart_logout_report()
+ var/list/msg = list("[span_boldnotice("Roundstart logout report")]\n\n")
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ var/mob/living/carbon/C = L
+ if (istype(C) && !C.last_mind)
+ continue // never had a client
+
+ if(L.ckey && !GLOB.directory[L.ckey])
+ msg += "[L.name] ([L.key]), the [L.job] (Disconnected )\n"
+
+
+ if(L.ckey && L.client)
+ var/failed = FALSE
+ if(L.client.inactivity >= ROUNDSTART_LOGOUT_AFK_THRESHOLD) //Connected, but inactive (alt+tabbed or something)
+ msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive )\n"
+ failed = TRUE //AFK client
+ if(!failed && L.stat)
+ if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider
+ msg += "[L.name] ([L.key]), the [L.job] ([span_boldannounce("Suicide")])\n"
+ failed = TRUE //Disconnected client
+ if(!failed && (L.stat == UNCONSCIOUS || L.stat == HARD_CRIT))
+ msg += "[L.name] ([L.key]), the [L.job] (Dying)\n"
+ failed = TRUE //Unconscious
+ if(!failed && L.stat == DEAD)
+ msg += "[L.name] ([L.key]), the [L.job] (Dead)\n"
+ failed = TRUE //Dead
+
+ continue //Happy connected client
+ for(var/mob/dead/observer/D in GLOB.dead_mob_list)
+ if(D.mind && D.mind.current == L)
+ if(L.stat == DEAD)
+ if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Suicide")])\n"
+ continue //Disconnected client
+ else
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n"
+ continue //Dead mob, ghost abandoned
+ else
+ if(D.can_reenter_corpse)
+ continue //Adminghost, or cult/wizard ghost
+ else
+ msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Ghosted")])\n"
+ continue //Ghosted while alive
+
+ var/concatenated_message = msg.Join()
+ log_admin(concatenated_message)
+ to_chat(GLOB.admins, concatenated_message)
+
+
+/// Initializes the internal ruleset variables
+/datum/controller/subsystem/dynamic/proc/setup_rulesets()
+ midround_rules = init_rulesets(/datum/dynamic_ruleset/midround)
+ latejoin_rules = init_rulesets(/datum/dynamic_ruleset/latejoin)
+
+/// Returns a list of the provided rulesets.
+/// Configures their variables to match config.
+/datum/controller/subsystem/dynamic/proc/init_rulesets(ruleset_subtype)
+ var/list/rulesets = list()
+
+ for (var/datum/dynamic_ruleset/ruleset_type as anything in subtypesof(ruleset_subtype))
+ if (initial(ruleset_type.name) == "")
+ continue
+
+ if (initial(ruleset_type.weight) == 0)
+ continue
+
+ var/ruleset = new ruleset_type
+ configure_ruleset(ruleset)
+ rulesets += ruleset
+
+ return rulesets
+
+/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it.
+/datum/controller/subsystem/dynamic/proc/rigged_roundstart()
+ message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
+ log_dynamic("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
+ for (var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
+ configure_ruleset(rule)
+ message_admins("Drafting players for forced ruleset [rule.name].")
+ log_dynamic("Drafting players for forced ruleset [rule.name].")
+ rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency
+ rule.candidates = candidates.Copy()
+ rule.trim_candidates()
+ rule.load_templates()
+ if (rule.ready(roundstart_pop_ready, TRUE))
+ var/cost = rule.cost
+ var/scaled_times = 0
+ if (rule.scaling_cost)
+ scaled_times = round(max(round_start_budget - cost, 0) / rule.scaling_cost)
+ cost += rule.scaling_cost * scaled_times
+
+ spend_roundstart_budget(picking_roundstart_rule(rule, scaled_times, forced = TRUE))
+
+/datum/controller/subsystem/dynamic/proc/roundstart(list/roundstart_rules)
+ if (GLOB.dynamic_forced_extended)
+ log_dynamic("Starting a round of forced extended.")
+ return TRUE
+ var/list/drafted_rules = list()
+ for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
+ if (!rule.weight)
+ continue
+ if (rule.acceptable(roundstart_pop_ready, threat_level) && round_start_budget >= rule.cost) // If we got the population and threat required
+ rule.candidates = candidates.Copy()
+ rule.trim_candidates()
+ rule.load_templates()
+ if (rule.ready(roundstart_pop_ready) && rule.candidates.len > 0)
+ drafted_rules[rule] = rule.weight
+
+ var/list/rulesets_picked = list()
+
+ // Kept in case a ruleset can't be initialized for whatever reason, we want to be able to only spend what we can use.
+ var/round_start_budget_left = round_start_budget
+
+ while (round_start_budget_left > 0)
+ var/datum/dynamic_ruleset/roundstart/ruleset = pick_weight(drafted_rules)
+ if (isnull(ruleset))
+ log_dynamic("No more rules can be applied, stopping with [round_start_budget] left.")
+ break
+
+ var/cost = (ruleset in rulesets_picked) ? ruleset.scaling_cost : ruleset.cost
+ if (cost == 0)
+ stack_trace("[ruleset] cost 0, this is going to result in an infinite loop.")
+ drafted_rules[ruleset] = null
+ continue
+
+ if (cost > round_start_budget_left)
+ drafted_rules[ruleset] = null
+ continue
+
+ if (check_blocking(ruleset.blocking_rules, rulesets_picked))
+ drafted_rules[ruleset] = null
+ continue
+
+ round_start_budget_left -= cost
+
+ rulesets_picked[ruleset] += 1
+
+ if (ruleset.flags & HIGH_IMPACT_RULESET)
+ for (var/_other_ruleset in drafted_rules)
+ var/datum/dynamic_ruleset/other_ruleset = _other_ruleset
+ if (other_ruleset.flags & HIGH_IMPACT_RULESET)
+ drafted_rules[other_ruleset] = null
+
+ if (ruleset.flags & LONE_RULESET)
+ drafted_rules[ruleset] = null
+
+ for (var/ruleset in rulesets_picked)
+ spend_roundstart_budget(picking_roundstart_rule(ruleset, rulesets_picked[ruleset] - 1))
+
+ update_log()
+
+/// Initializes the round start ruleset provided to it. Returns how much threat to spend.
+/datum/controller/subsystem/dynamic/proc/picking_roundstart_rule(datum/dynamic_ruleset/roundstart/ruleset, scaled_times = 0, forced = FALSE)
+ log_dynamic("Picked a ruleset: [ruleset.name], scaled [scaled_times] times")
+
+ ruleset.trim_candidates()
+ var/added_threat = ruleset.scale_up(roundstart_pop_ready, scaled_times)
+
+ if(ruleset.pre_execute(roundstart_pop_ready))
+ threat_log += "[worldtime2text()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]"
+ if(ruleset.flags & ONLY_RULESET)
+ only_ruleset_executed = TRUE
+ if(ruleset.flags & HIGH_IMPACT_RULESET)
+ high_impact_ruleset_executed = TRUE
+ executed_rules += ruleset
+ return ruleset.cost + added_threat
+ else
+ stack_trace("The starting rule \"[ruleset.name]\" failed to pre_execute.")
+ return 0
+
+/// Mainly here to facilitate delayed rulesets. All roundstart rulesets are executed with a timered callback to this proc.
+/datum/controller/subsystem/dynamic/proc/execute_roundstart_rule(sent_rule)
+ var/datum/dynamic_ruleset/rule = sent_rule
+ if(rule.execute())
+ if(rule.persistent)
+ current_rules += rule
+ new_snapshot(rule)
+ rule.forget_startup()
+ return TRUE
+ rule.clean_up() // Refund threat, delete teams and so on.
+ rule.forget_startup()
+ executed_rules -= rule
+ stack_trace("The starting rule \"[rule.name]\" failed to execute.")
+ return FALSE
+
+/// An experimental proc to allow admins to call rules on the fly or have rules call other rules.
+/datum/controller/subsystem/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE, ignore_cost = FALSE)
+ var/datum/dynamic_ruleset/midround/new_rule
+ if(ispath(ruletype))
+ new_rule = new ruletype() // You should only use it to call midround rules though.
+ configure_ruleset(new_rule) // This makes sure the rule is set up properly.
+ else if(istype(ruletype, /datum/dynamic_ruleset))
+ new_rule = ruletype
+ else
+ return FALSE
+
+ if(!new_rule)
+ return FALSE
+
+ if(!forced)
+ if(only_ruleset_executed)
+ return FALSE
+ // Check if a blocking ruleset has been executed.
+ else if(check_blocking(new_rule.blocking_rules, executed_rules))
+ return FALSE
+ // Check if the ruleset is high impact and if a high impact ruleset has been executed
+ else if(new_rule.flags & HIGH_IMPACT_RULESET)
+ if(threat_level < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
+ if(high_impact_ruleset_executed)
+ return FALSE
+
+ var/population = GLOB.alive_player_list.len
+ if((new_rule.acceptable(population, threat_level) && (ignore_cost || new_rule.cost <= mid_round_budget)) || forced)
+ new_rule.trim_candidates()
+ new_rule.load_templates()
+ if (new_rule.ready(forced))
+ if (!ignore_cost)
+ spend_midround_budget(new_rule.cost, threat_log, "[worldtime2text()]: Forced rule [new_rule.name]")
+ new_rule.pre_execute(population)
+ if (new_rule.execute()) // This should never fail since ready() returned 1
+ if(new_rule.flags & HIGH_IMPACT_RULESET)
+ high_impact_ruleset_executed = TRUE
+ else if(new_rule.flags & ONLY_RULESET)
+ only_ruleset_executed = TRUE
+ log_dynamic("Making a call to a specific ruleset...[new_rule.name]!")
+ executed_rules += new_rule
+ if (new_rule.persistent)
+ current_rules += new_rule
+ new_rule.forget_startup()
+ return TRUE
+ else if (forced)
+ log_dynamic("The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.")
+ new_rule.forget_startup()
+ return FALSE
+
+/datum/controller/subsystem/dynamic/fire()
+ for (var/datum/dynamic_ruleset/rule in current_rules)
+ if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing.
+ current_rules -= rule
+
+ try_midround_roll()
+
+/// Removes type from the list
+/datum/controller/subsystem/dynamic/proc/remove_from_list(list/type_list, type)
+ for(var/I in type_list)
+ if(istype(I, type))
+ type_list -= I
+ return type_list
+
+/// Checks if a type in blocking_list is in rule_list.
+/datum/controller/subsystem/dynamic/proc/check_blocking(list/blocking_list, list/rule_list)
+ if(blocking_list.len > 0)
+ for(var/blocking in blocking_list)
+ for(var/_executed in rule_list)
+ var/datum/executed = _executed
+ if(blocking == executed.type)
+ log_dynamic("FAIL: check_blocking - [blocking] conflicts with [executed.type]")
+ return TRUE
+ return FALSE
+
+/// Handles late-join antag assignments
+/datum/controller/subsystem/dynamic/proc/make_antag_chance(mob/living/carbon/human/newPlayer)
+ if (GLOB.dynamic_forced_extended)
+ return
+ if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left
+ return
+
+ if (forced_latejoin_rule)
+ log_dynamic("Forcing specific [forced_latejoin_rule.ruletype] ruleset [forced_latejoin_rule].")
+ if(!handle_executing_latejoin(forced_latejoin_rule, newPlayer, forced = TRUE))
+ message_admins("The forced latejoin ruleset [forced_latejoin_rule.name] couldn't be executed \
+ as the most recent latejoin did not fulfill the ruleset's requirements.")
+ forced_latejoin_rule = null
+ return
+
+ if(!forced_injection)
+ if(latejoin_injection_cooldown >= world.time)
+ return
+ if(!prob(latejoin_roll_chance))
+ return
+
+ var/was_forced = forced_injection
+ forced_injection = FALSE
+ var/list/possible_latejoin_rules = list()
+ for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
+ if(!rule.weight)
+ continue
+ if(mid_round_budget < rule.cost)
+ continue
+ if(!rule.acceptable(GLOB.alive_player_list.len, threat_level))
+ continue
+ possible_latejoin_rules[rule] = rule.get_weight()
+
+ if(!length(possible_latejoin_rules))
+ log_dynamic("FAIL: [newPlayer] was selected to roll for a latejoin ruleset, but there were no valid rulesets.")
+ return
+
+ log_dynamic("[newPlayer] was selected to roll for a latejoin ruleset from the following list: [english_list(possible_latejoin_rules)].")
+ // You get one shot at becoming a latejoin antag, if it fails the next guy will try.
+ var/datum/dynamic_ruleset/latejoin/picked_rule = pick_ruleset(possible_latejoin_rules, max_allowed_attempts = 1)
+ if(isnull(picked_rule))
+ log_dynamic("FAIL: No valid rulset was selected for [newPlayer]'s latejoin[was_forced ? "" : ", the next player will be checked instead"].")
+ return
+ if(was_forced)
+ log_dynamic("Forcing random [picked_rule.ruletype] ruleset [picked_rule].")
+ handle_executing_latejoin(picked_rule, newPlayer, forced = was_forced)
+
+/**
+ * This proc handles the execution of a latejoin ruleset, including removing it from latejoin rulesets if not repeatable,
+ * upping the injection cooldown, and starting a timer to execute the ruleset on delay.
+ */
+/datum/controller/subsystem/dynamic/proc/handle_executing_latejoin(datum/dynamic_ruleset/ruleset, mob/living/carbon/human/only_candidate, forced = FALSE)
+ ruleset.candidates = list(only_candidate)
+ ruleset.trim_candidates()
+ ruleset.load_templates()
+ if (!ruleset.ready(forced))
+ log_dynamic("FAIL: [only_candidate] was selected to latejoin with the [ruleset] ruleset, \
+ but the ruleset failed to execute[length(ruleset.candidates) ? "":" as they were not a valid candiate"].")
+ return FALSE
+ if (!ruleset.repeatable)
+ latejoin_rules = remove_from_list(latejoin_rules, ruleset.type)
+ addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), ruleset), ruleset.delay)
+
+ if(!forced)
+ var/latejoin_injection_cooldown_middle = 0.5 * (latejoin_delay_max + latejoin_delay_min)
+ latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time
+ log_dynamic("A latejoin rulset triggered successfully, the next latejoin injection will happen at [latejoin_injection_cooldown] round time.")
+
+ return TRUE
+
+/// Apply configurations to rule.
+/datum/controller/subsystem/dynamic/proc/configure_ruleset(datum/dynamic_ruleset/ruleset)
+ var/rule_conf = LAZYACCESSASSOC(configuration, ruleset.ruletype, ruleset.name)
+ for(var/variable in rule_conf)
+ if(!(variable in ruleset.vars))
+ stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].")
+ continue
+ ruleset.vars[variable] = rule_conf[variable]
+ if(CONFIG_GET(flag/protect_roles_from_antagonist))
+ ruleset.restricted_roles |= ruleset.protected_roles
+ if(CONFIG_GET(flag/protect_assistant_from_antagonist))
+ ruleset.restricted_roles |= JOB_ASSISTANT
+ // NOVA EDIT ADDITION
+ for(var/datum/job/iterating_job as anything in subtypesof(/datum/job))
+ if(!initial(iterating_job.antagonist_restricted))
+ continue
+ if(initial(iterating_job.restricted_antagonists))
+ var/list/restricted_antagonists = initial(iterating_job.restricted_antagonists)
+ if(!(ruleset.antag_flag in restricted_antagonists))
+ continue
+ ruleset.restricted_roles |= initial(iterating_job.title)
+ else
+ ruleset.restricted_roles |= initial(iterating_job.title)
+ // NOVA EDIT END
+
+/// Get station traits and call for their config
+/datum/controller/subsystem/dynamic/proc/configure_station_trait_costs()
+ if(!CONFIG_GET(flag/dynamic_config_enabled))
+ return
+ for(var/datum/station_trait/station_trait as anything in GLOB.dynamic_station_traits)
+ configure_station_trait(station_trait)
+
+/// Apply configuration for station trait costs
+/datum/controller/subsystem/dynamic/proc/configure_station_trait(datum/station_trait/station_trait)
+ var/list/station_trait_config = LAZYACCESSASSOC(configuration, "Station", station_trait.dynamic_threat_id)
+ var/cost = station_trait_config["cost"]
+
+ if(isnull(cost)) //0 is valid so check for null specifically
+ return
+
+ if(cost != GLOB.dynamic_station_traits[station_trait])
+ log_dynamic("Config set [station_trait.dynamic_threat_id] cost from [station_trait.threat_reduction] to [cost]")
+
+ GLOB.dynamic_station_traits[station_trait] = cost
+
+/// Refund threat, but no more than threat_level.
+/datum/controller/subsystem/dynamic/proc/refund_threat(regain)
+ mid_round_budget = min(threat_level, mid_round_budget + regain)
+
+/// Generate threat and increase the threat_level if it goes beyond, capped at 100
+/datum/controller/subsystem/dynamic/proc/create_threat(gain, list/threat_log, reason)
+ mid_round_budget = min(100, mid_round_budget + gain)
+ if(mid_round_budget > threat_level)
+ threat_level = mid_round_budget
+ for(var/list/logs in threat_log)
+ log_threat(gain, logs, reason)
+
+/datum/controller/subsystem/dynamic/proc/log_threat(threat_change, list/threat_log, reason)
+ var/gain_or_loss = "+"
+ if(threat_change < 0)
+ gain_or_loss = "-"
+ threat_log += "Threat [gain_or_loss][abs(threat_change)] - [reason]."
+
+/// Expend round start threat, can't fall under 0.
+/datum/controller/subsystem/dynamic/proc/spend_roundstart_budget(cost, list/threat_log, reason)
+ round_start_budget = max(round_start_budget - cost,0)
+ if (!isnull(threat_log))
+ log_threat(-cost, threat_log, reason)
+
+/// Expend midround threat, can't fall under 0.
+/datum/controller/subsystem/dynamic/proc/spend_midround_budget(cost, list/threat_log, reason)
+ mid_round_budget = max(mid_round_budget - cost,0)
+ if (!isnull(threat_log))
+ log_threat(-cost, threat_log, reason)
+
+#define MAXIMUM_DYN_DISTANCE 5
+
+/**
+ * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5
+ * plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum
+ * threat and then rounded to the nearest interval.
+ * rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals.
+ */
+/datum/controller/subsystem/dynamic/proc/lorentz_to_amount(centre = 0, scale = 1.8, max_threat = 100, interval = 1)
+ var/location = RANDOM_DECIMAL(-MAXIMUM_DYN_DISTANCE, MAXIMUM_DYN_DISTANCE) * rand()
+ var/lorentz_result = LORENTZ_CUMULATIVE_DISTRIBUTION(centre, location, scale)
+ var/std_threat = lorentz_result * max_threat
+ ///Without these, the amount won't come close to hitting 0% or 100% of the max threat.
+ var/lower_deviation = max(std_threat * (location-centre)/MAXIMUM_DYN_DISTANCE, 0)
+ var/upper_deviation = max((max_threat - std_threat) * (centre-location)/MAXIMUM_DYN_DISTANCE, 0)
+ return clamp(round(std_threat + upper_deviation - lower_deviation, interval), 0, 100)
+
+/proc/reopen_roundstart_suicide_roles()
+ var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions)
+ var/list/reopened_jobs = list()
+
+ for(var/mob/living/quitter in GLOB.suicided_mob_list)
+ var/datum/job/job = SSjob.GetJob(quitter.job)
+ if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS))
+ continue
+ if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
+ continue
+ job.current_positions = max(job.current_positions - 1, 0)
+ reopened_jobs += quitter.job
+
+ if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report))
+ if(reopened_jobs.len)
+ var/reopened_job_report_positions
+ for(var/dead_dudes_job in reopened_jobs)
+ reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]"
+
+ var/suicide_command_report = {"
+ [command_name()] Human Resources Board
+ Notice of Personnel Change
+ To personnel management staff aboard [station_name()]:
+ Our medical staff have detected a series of anomalies in the vital sensors
+ of some of the staff aboard your station.
+ Further investigation into the situation on our end resulted in us discovering
+ a series of rather... unforturnate decisions that were made on the part of said staff.
+ As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members
+ who have decided not to partake in our research. We will be forwarding their cases to our employment review board
+ to determine their eligibility for continued service with the company (and of course the
+ continued storage of cloning records within the central medical backup server.)
+ The following positions have been reopened on our behalf:
+ [reopened_job_report_positions]
+ "}
+
+ print_command_report(suicide_command_report, "Central Command Personnel Update")
+
+
+#undef MAXIMUM_DYN_DISTANCE
+
+#undef FAKE_REPORT_CHANCE
+#undef FAKE_GREENSHIFT_FORM_CHANCE
+#undef PULSAR_REPORT_CHANCE
+#undef REPORT_NEG_DIVERGENCE
+#undef REPORT_POS_DIVERGENCE
diff --git a/code/game/gamemodes/dynamic/dynamic_hijacking.dm b/code/controllers/subsystem/dynamic/dynamic_hijacking.dm
similarity index 86%
rename from code/game/gamemodes/dynamic/dynamic_hijacking.dm
rename to code/controllers/subsystem/dynamic/dynamic_hijacking.dm
index 62c9a5d2124..7577cbcd84f 100644
--- a/code/game/gamemodes/dynamic/dynamic_hijacking.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_hijacking.dm
@@ -1,7 +1,7 @@
-/datum/game_mode/dynamic/proc/setup_hijacking()
+/datum/controller/subsystem/dynamic/proc/setup_hijacking()
RegisterSignal(SSdcs, COMSIG_GLOB_PRE_RANDOM_EVENT, PROC_REF(on_pre_random_event))
-/datum/game_mode/dynamic/proc/on_pre_random_event(datum/source, datum/round_event_control/round_event_control)
+/datum/controller/subsystem/dynamic/proc/on_pre_random_event(datum/source, datum/round_event_control/round_event_control)
SIGNAL_HANDLER
if (!round_event_control.dynamic_should_hijack)
return
diff --git a/code/game/gamemodes/dynamic/dynamic_logging.dm b/code/controllers/subsystem/dynamic/dynamic_logging.dm
similarity index 95%
rename from code/game/gamemodes/dynamic/dynamic_logging.dm
rename to code/controllers/subsystem/dynamic/dynamic_logging.dm
index 7490894b526..16bd56a7303 100644
--- a/code/game/gamemodes/dynamic/dynamic_logging.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_logging.dm
@@ -69,7 +69,7 @@
return serialization
/// Updates the log for the current snapshots.
-/datum/game_mode/dynamic/proc/update_log()
+/datum/controller/subsystem/dynamic/proc/update_log()
var/list/serialized = list()
serialized["threat_level"] = threat_level
serialized["round_start_budget"] = initial_round_start_budget
@@ -84,7 +84,7 @@
rustg_file_write(json_encode(serialized), "[GLOB.log_directory]/dynamic.json")
/// Creates a new snapshot with the given rulesets chosen, and writes to the JSON output.
-/datum/game_mode/dynamic/proc/new_snapshot(datum/dynamic_ruleset/ruleset_chosen)
+/datum/controller/subsystem/dynamic/proc/new_snapshot(datum/dynamic_ruleset/ruleset_chosen)
var/datum/dynamic_snapshot/new_snapshot = new
new_snapshot.remaining_threat = mid_round_budget
diff --git a/code/game/gamemodes/dynamic/dynamic_midround_rolling.dm b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
similarity index 95%
rename from code/game/gamemodes/dynamic/dynamic_midround_rolling.dm
rename to code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
index c3e295ae875..968037b9fa2 100644
--- a/code/game/gamemodes/dynamic/dynamic_midround_rolling.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_midround_rolling.dm
@@ -1,7 +1,7 @@
/// Returns the world.time of the next midround injection.
/// Will return a cached result from `next_midround_injection`, the variable.
/// If that variable is null, will generate a new one.
-/datum/game_mode/dynamic/proc/next_midround_injection()
+/datum/controller/subsystem/dynamic/proc/next_midround_injection()
if (!isnull(next_midround_injection))
return next_midround_injection
@@ -16,7 +16,7 @@
return last_midround_injection_attempt + distance
-/datum/game_mode/dynamic/proc/try_midround_roll()
+/datum/controller/subsystem/dynamic/proc/try_midround_roll()
if (!forced_injection && next_midround_injection() > world.time)
return
@@ -90,7 +90,7 @@
log_dynamic_and_announce("No midround rulesets could be drafted. ([heavy_light_log_count])")
/// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection.
-/datum/game_mode/dynamic/proc/get_heavy_midround_injection_chance(dry_run)
+/datum/controller/subsystem/dynamic/proc/get_heavy_midround_injection_chance(dry_run)
var/chance_modifier = 1
var/next_midround_roll = next_midround_injection() - SSticker.round_start_time
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm
similarity index 92%
rename from code/game/gamemodes/dynamic/dynamic_rulesets.dm
rename to code/controllers/subsystem/dynamic/dynamic_rulesets.dm
index 0af18e0b0aa..f05ae48fe1e 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets.dm
@@ -7,7 +7,7 @@
var/ruletype = ""
/// If set to TRUE, the rule won't be discarded after being executed, and dynamic will call rule_process() every time it ticks.
var/persistent = FALSE
- /// If set to TRUE, dynamic mode will be able to draft this ruleset again later on. (doesn't apply for roundstart rules)
+ /// If set to TRUE, dynamic will be able to draft this ruleset again later on. (doesn't apply for roundstart rules)
var/repeatable = FALSE
/// If set higher than 0 decreases weight by itself causing the ruleset to appear less often the more it is repeated.
var/repeatable_weight_decrease = 2
@@ -41,7 +41,7 @@
var/required_candidates = 0
/// 0 -> 9, probability for this rule to be picked against other rules. If zero this will effectively disable the rule.
var/weight = 5
- /// Threat cost for this rule, this is decreased from the mode's threat when the rule is executed.
+ /// Threat cost for this rule, this is decreased from the threat level when the rule is executed.
var/cost = 0
/// Cost per level the rule scales up.
var/scaling_cost = 0
@@ -51,13 +51,11 @@
var/total_cost = 0
/// A flag that determines how the ruleset is handled. Check __DEFINES/dynamic.dm for an explanation of the accepted values.
var/flags = NONE
- /// Pop range per requirement. If zero defaults to mode's pop_per_requirement.
+ /// Pop range per requirement. If zero defaults to dynamic's pop_per_requirement.
var/pop_per_requirement = 0
/// Requirements are the threat level requirements per pop range.
/// With the default values, The rule will never get drafted below 10 threat level (aka: "peaceful extended"), and it requires a higher threat level at lower pops.
var/list/requirements = list(40,30,20,10,10,10,10,10,10,10)
- /// Reference to the mode, use this instead of SSticker.mode.
- var/datum/game_mode/dynamic/mode = null
/// If a role is to be considered another for the purpose of banning.
var/antag_flag_override = null
/// If set, will check this preference instead of antag_flag.
@@ -92,8 +90,6 @@
// side effects here. Dynamic rulesets should be stateless anyway.
SHOULD_NOT_OVERRIDE(TRUE)
- mode = SSticker.mode
-
..()
/datum/dynamic_ruleset/roundstart // One or more of those drafted at roundstart
@@ -135,7 +131,7 @@
/// Sets the current threat indices and returns true if we're inside of them
/datum/dynamic_ruleset/proc/is_valid_threat(population, threat_level)
- pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : mode.pop_per_requirement
+ pop_per_requirement = pop_per_requirement > 0 ? pop_per_requirement : SSdynamic.pop_per_requirement
indice_pop = min(requirements.len,round(population/pop_per_requirement)+1)
return threat_level >= requirements[indice_pop]
@@ -148,14 +144,14 @@
return 0
var/antag_fraction = 0
- for(var/_ruleset in (mode.executed_rules + list(src))) // we care about the antags we *will* assign, too
+ for(var/_ruleset in (SSdynamic.executed_rules + list(src))) // we care about the antags we *will* assign, too
var/datum/dynamic_ruleset/ruleset = _ruleset
- antag_fraction += ((1 + ruleset.scaled_times) * ruleset.get_antag_cap(population)) / mode.roundstart_pop_ready
+ antag_fraction += ((1 + ruleset.scaled_times) * ruleset.get_antag_cap(population)) / SSdynamic.roundstart_pop_ready
for(var/i in 1 to max_scale)
if(antag_fraction < 0.25)
scaled_times += 1
- antag_fraction += get_antag_cap(population) / mode.roundstart_pop_ready // we added new antags, gotta update the %
+ antag_fraction += get_antag_cap(population) / SSdynamic.roundstart_pop_ready // we added new antags, gotta update the %
return scaled_times * scaling_cost
@@ -170,7 +166,7 @@
/datum/dynamic_ruleset/proc/rule_process()
return
-/// Called on game mode pre_setup for roundstart rulesets.
+/// Called on pre_setup for roundstart rulesets.
/// Do everything you need to do before job is assigned here.
/// IMPORTANT: ASSIGN special_role HERE
/datum/dynamic_ruleset/proc/pre_execute()
@@ -206,15 +202,15 @@
/// Runs from gamemode process() if ruleset fails to start, like delayed rulesets not getting valid candidates.
/// This one only handles refunding the threat, override in ruleset to clean up the rest.
/datum/dynamic_ruleset/proc/clean_up()
- mode.refund_threat(cost + (scaled_times * scaling_cost))
- mode.threat_log += "[worldtime2text()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute."
+ SSdynamic.refund_threat(cost + (scaled_times * scaling_cost))
+ SSdynamic.threat_log += "[worldtime2text()]: [ruletype] [name] refunded [cost + (scaled_times * scaling_cost)]. Failed to execute."
/// Gets weight of the ruleset
/// Note that this decreases weight if repeatable is TRUE and repeatable_weight_decrease is higher than 0
/// Note: If you don't want repeatable rulesets to decrease their weight use the weight variable directly
/datum/dynamic_ruleset/proc/get_weight()
if(repeatable && weight > 1 && repeatable_weight_decrease > 0)
- for(var/datum/dynamic_ruleset/DR in mode.executed_rules)
+ for(var/datum/dynamic_ruleset/DR in SSdynamic.executed_rules)
if(istype(DR, type))
weight = max(weight-repeatable_weight_decrease,1)
return weight
@@ -233,7 +229,7 @@
/datum/dynamic_ruleset/proc/trim_candidates()
return
-/// Set mode result and news report here.
+/// Set mode_result and news report here.
/// Only called if ruleset is flagged as HIGH_IMPACT_RULESET
/datum/dynamic_ruleset/proc/round_result()
@@ -251,7 +247,7 @@
candidates.Remove(candidate_player)
continue
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(!candidate_client.prefs?.read_preference(/datum/preference/toggle/be_antag))
candidates.Remove(candidate_player)
continue
@@ -259,7 +255,7 @@
if(is_banned_from(candidate_client.ckey, BAN_ANTAGONIST))
candidates.Remove(candidate_player)
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(candidate_client.get_remaining_days(minimum_required_age) > 0)
candidates.Remove(candidate_player)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm
similarity index 98%
rename from code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
rename to code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm
index 1d676ea2667..24347783847 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_latejoin.dm
@@ -16,14 +16,14 @@
candidates.Remove(P)
else if (!((antag_preference || antag_flag) in P.client.prefs.be_special) || is_banned_from(P.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE)))
candidates.Remove(P)
- // SKYRAT EDIT ADDITION - PROTECTED JOBS
+ // NOVA EDIT ADDITION - PROTECTED JOBS
else if(P.client?.prefs && !P.client.prefs.read_preference(/datum/preference/toggle/be_antag))
candidates.Remove(P)
continue
else if(is_banned_from(P.client?.ckey, BAN_ANTAGONIST))
candidates.Remove(P)
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
/datum/dynamic_ruleset/latejoin/ready(forced = 0)
if (forced)
@@ -37,7 +37,7 @@
if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles)))
job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
- var/threat = round(mode.threat_level/10)
+ var/threat = round(SSdynamic.threat_level/10)
var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED
if (!ruleset_forced && job_check < required_enemies[threat])
log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found")
diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
new file mode 100644
index 00000000000..9890f4c0425
--- /dev/null
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm
@@ -0,0 +1,947 @@
+/// Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws.
+#define MALF_ION_PROB 33
+/// The probability to replace an existing law with an ion law instead of adding a new ion law.
+#define REPLACE_LAW_WITH_ION_PROB 10
+
+/// Midround Rulesets
+/datum/dynamic_ruleset/midround // Can be drafted once in a while during a round
+ ruletype = MIDROUND_RULESET
+ var/midround_ruleset_style
+ /// If the ruleset should be restricted from ghost roles.
+ var/restrict_ghost_roles = TRUE
+ /// What mob type the ruleset is restricted to.
+ var/required_type = /mob/living/carbon/human
+ var/list/living_players = list()
+ var/list/living_antags = list()
+ var/list/dead_players = list()
+ var/list/list_observers = list()
+
+ /// The minimum round time before this ruleset will show up
+ var/minimum_round_time = 0
+ /// Abstract root value
+ var/abstract_type = /datum/dynamic_ruleset/midround
+
+/datum/dynamic_ruleset/midround/forget_startup()
+ living_players = list()
+ living_antags = list()
+ dead_players = list()
+ list_observers = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts
+ weight = 0
+ required_type = /mob/dead/observer
+ abstract_type = /datum/dynamic_ruleset/midround/from_ghosts
+ /// Whether the ruleset should call generate_ruleset_body or not.
+ var/makeBody = TRUE
+ /// The rule needs this many applicants to be properly executed.
+ var/required_applicants = 1
+
+/datum/dynamic_ruleset/midround/from_ghosts/check_candidates()
+ var/dead_count = dead_players.len + list_observers.len
+ if (required_candidates <= dead_count)
+ return TRUE
+
+ log_dynamic("FAIL: [src], a from_ghosts ruleset, did not have enough dead candidates: [required_candidates] needed, [dead_count] found")
+
+ return FALSE
+
+/datum/dynamic_ruleset/midround/trim_candidates()
+ living_players = trim_list(GLOB.alive_player_list)
+ living_antags = trim_list(GLOB.current_living_antags)
+ dead_players = trim_list(GLOB.dead_player_list)
+ list_observers = trim_list(GLOB.current_observers_list)
+
+/datum/dynamic_ruleset/midround/proc/trim_list(list/to_trim = list())
+ var/list/trimmed_list = to_trim.Copy()
+ for(var/mob/creature in trimmed_list)
+ if (!istype(creature, required_type))
+ trimmed_list.Remove(creature)
+ continue
+ if (isnull(creature.client)) // Are they connected?
+ trimmed_list.Remove(creature)
+ continue
+ //NOVA EDIT ADDITION
+ if(is_banned_from(creature.client.ckey, BAN_ANTAGONIST))
+ trimmed_list.Remove(creature)
+ continue
+ if(!creature.client?.prefs?.read_preference(/datum/preference/toggle/be_antag))
+ trimmed_list.Remove(creature)
+ continue
+ //NOVA EDIT END
+ if(creature.client.get_remaining_days(minimum_required_age) > 0)
+ trimmed_list.Remove(creature)
+ continue
+ if (!((antag_preference || antag_flag) in creature.client.prefs.be_special))
+ trimmed_list.Remove(creature)
+ continue
+ if (is_banned_from(creature.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE)))
+ trimmed_list.Remove(creature)
+ continue
+
+ if (isnull(creature.mind))
+ continue
+
+ if (restrict_ghost_roles && (creature.mind.assigned_role.title in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role?
+ trimmed_list.Remove(creature)
+ continue
+ if (creature.mind.assigned_role.title in restricted_roles) // Does their job allow it?
+ trimmed_list.Remove(creature)
+ continue
+ if (length(exclusive_roles) && !(creature.mind.assigned_role.title in exclusive_roles)) // Is the rule exclusive to their job?
+ trimmed_list.Remove(creature)
+ continue
+ if(HAS_TRAIT(creature, TRAIT_MIND_TEMPORARILY_GONE)) // are they out of body?
+ trimmed_list.Remove(creature)
+ continue
+ if(HAS_TRAIT(creature, TRAIT_TEMPORARY_BODY)) // are they an avatar?
+ trimmed_list.Remove(creature)
+ continue
+ return trimmed_list
+
+// You can then for example prompt dead players in execute() to join as strike teams or whatever
+// Or autotator someone
+
+// IMPORTANT, since /datum/dynamic_ruleset/midround may accept candidates from both living, dead, and even antag players
+// subtype your midround with /from_ghosts or /from_living to get candidate checking. Or check yourself by subtyping from neither
+/datum/dynamic_ruleset/midround/ready(forced = FALSE)
+ if (forced)
+ return TRUE
+
+ var/job_check = 0
+ if (enemy_roles.len > 0)
+ for (var/mob/M in GLOB.alive_player_list)
+ if (M.stat == DEAD || !M.client)
+ continue // Dead/disconnected players cannot count as opponents
+ if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles)))
+ job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
+
+ var/threat = round(SSdynamic.threat_level/10)
+ var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED
+ if (!ruleset_forced && job_check < required_enemies[threat])
+ log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found")
+ return FALSE
+
+ return TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/execute()
+ var/list/possible_candidates = list()
+ possible_candidates.Add(dead_players)
+ possible_candidates.Add(list_observers)
+ send_applications(possible_candidates)
+ if(assigned.len > 0)
+ return TRUE
+ else
+ return FALSE
+
+/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset.
+/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list())
+ if (possible_volunteers.len <= 0) // This shouldn't happen, as ready() should return FALSE if there is not a single valid candidate
+ message_admins("Possible volunteers was 0. This shouldn't appear, because of ready(), unless you forced it!")
+ return
+
+ SSdynamic.log_dynamic_and_announce("Polling [possible_volunteers.len] players to apply for the [name] ruleset.")
+ candidates = SSpolling.poll_ghost_candidates("Looking for volunteers to become [antag_flag] for [name]", check_jobban = antag_flag_override, role = antag_flag || antag_flag_override, poll_time = 30 SECONDS, pic_source = /obj/structure/sign/poster/contraband/syndicate_recruitment, role_name_text = antag_flag)
+
+ if(!candidates || candidates.len <= 0)
+ SSdynamic.log_dynamic_and_announce("The ruleset [name] received no applications.")
+ SSdynamic.executed_rules -= src
+ attempt_replacement()
+ return
+
+ SSdynamic.log_dynamic_and_announce("[candidates.len] players volunteered for [name].")
+ review_applications()
+
+/// Here is where you can check if your ghost applicants are valid for the ruleset.
+/// Called by send_applications().
+/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications()
+ if(candidates.len < required_applicants)
+ SSdynamic.executed_rules -= src
+ return
+ for (var/i = 1, i <= required_candidates, i++)
+ if(candidates.len <= 0)
+ break
+ var/mob/applicant = pick(candidates)
+ candidates -= applicant
+ if(!isobserver(applicant))
+ if(applicant.stat == DEAD) // Not an observer? If they're dead, make them one.
+ applicant = applicant.ghostize(FALSE)
+ else // Not dead? Disregard them, pick a new applicant
+ i--
+ continue
+ if(!applicant)
+ i--
+ continue
+ assigned += applicant
+ finish_applications()
+
+/// Here the accepted applications get generated bodies and their setup is finished.
+/// Called by review_applications()
+/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_applications()
+ var/i = 0
+ for(var/mob/applicant as anything in assigned)
+ i++
+ var/mob/new_character = applicant
+ if(makeBody)
+ new_character = generate_ruleset_body(applicant)
+ finish_setup(new_character, i)
+ notify_ghosts(
+ "[applicant.name] has been picked for the ruleset [name]!",
+ source = new_character,
+ )
+
+/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant)
+ var/mob/living/carbon/human/new_character = make_body(applicant)
+ new_character.dna.remove_all_mutations()
+ return new_character
+
+/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_setup(mob/new_character, index)
+ var/datum/antagonist/new_role = new antag_datum()
+ setup_role(new_role)
+ new_character.mind.add_antag_datum(new_role)
+ new_character.mind.special_role = antag_flag
+
+/datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role)
+ return
+
+/// Fired when there are no valid candidates. Will spawn a sleeper agent or latejoin traitor.
+/datum/dynamic_ruleset/midround/from_ghosts/proc/attempt_replacement()
+ var/datum/dynamic_ruleset/midround/from_living/autotraitor/sleeper_agent = new
+
+ SSdynamic.configure_ruleset(sleeper_agent)
+
+ if (!SSdynamic.picking_specific_rule(sleeper_agent))
+ return
+
+ SSdynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator)
+
+///subtype to handle checking players
+/datum/dynamic_ruleset/midround/from_living
+ weight = 0
+ abstract_type = /datum/dynamic_ruleset/midround/from_living
+
+/datum/dynamic_ruleset/midround/from_living/ready(forced)
+ if(!check_candidates())
+ return FALSE
+ return ..()
+
+
+/// Midround Traitor Ruleset (From Living)
+/datum/dynamic_ruleset/midround/from_living/autotraitor
+ name = "Syndicate Sleeper Agent"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/traitor/infiltrator/sleeper_agent
+ antag_flag = ROLE_SLEEPER_AGENT
+ antag_flag_override = ROLE_TRAITOR
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_PERSONNEL,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ ROLE_POSITRONIC_BRAIN,
+ )
+ required_candidates = 1
+ weight = 35
+ cost = 3
+ requirements = list(3,3,3,3,3,3,3,3,3,3)
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_living/autotraitor/trim_candidates()
+ ..()
+ candidates = living_players
+ for(var/mob/living/player in candidates)
+ if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon.
+ candidates -= player
+ else if(is_centcom_level(player.z))
+ candidates -= player // We don't autotator people in CentCom
+ else if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
+ candidates -= player // We don't autotator people with roles already
+
+/datum/dynamic_ruleset/midround/from_living/autotraitor/execute()
+ var/mob/M = pick(candidates)
+ assigned += M
+ candidates -= M
+ var/datum/antagonist/traitor/infiltrator/sleeper_agent/newTraitor = new
+ M.mind.add_antag_datum(newTraitor)
+ message_admins("[ADMIN_LOOKUPFLW(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
+ log_dynamic("[key_name(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
+ return TRUE
+
+
+//////////////////////////////////////////////
+// //
+// Malfunctioning AI //
+// //
+//////////////////////////////////////////////
+
+/datum/dynamic_ruleset/midround/malf
+ name = "Malfunctioning AI"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/malf_ai
+ antag_flag = ROLE_MALF_MIDROUND
+ antag_flag_override = ROLE_MALF
+ enemy_roles = list(
+ JOB_CHEMIST,
+ JOB_CHIEF_ENGINEER,
+ JOB_HEAD_OF_SECURITY,
+ JOB_RESEARCH_DIRECTOR,
+ JOB_SCIENTIST,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ exclusive_roles = list(JOB_AI)
+ required_enemies = list(4,4,4,4,4,4,2,2,2,0)
+ required_candidates = 1
+ minimum_players = 25
+ weight = 2
+ cost = 10
+ required_type = /mob/living/silicon/ai
+ blocking_rules = list(/datum/dynamic_ruleset/roundstart/malf_ai)
+
+/datum/dynamic_ruleset/midround/malf/trim_candidates()
+ ..()
+ candidates = living_players
+ for(var/mob/living/player in candidates)
+ if(!isAI(player))
+ candidates -= player
+ continue
+
+ if(is_centcom_level(player.z))
+ candidates -= player
+ continue
+
+ if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
+ candidates -= player
+
+/datum/dynamic_ruleset/midround/malf/execute()
+ if(!candidates || !candidates.len)
+ return FALSE
+ var/mob/living/silicon/ai/new_malf_ai = pick_n_take(candidates)
+ assigned += new_malf_ai.mind
+ var/datum/antagonist/malf_ai/malf_antag_datum = new
+ new_malf_ai.mind.special_role = antag_flag
+ new_malf_ai.mind.add_antag_datum(malf_antag_datum)
+ if(prob(MALF_ION_PROB))
+ priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", ANNOUNCER_IONSTORM)
+ if(prob(REPLACE_LAW_WITH_ION_PROB))
+ new_malf_ai.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION), LAW_ION)
+ else
+ new_malf_ai.add_ion_law(generate_ion_law())
+ return TRUE
+
+/// Midround Wizard Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/wizard
+ name = "Wizard"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/wizard
+ antag_flag = ROLE_WIZARD_MIDROUND
+ antag_flag_override = ROLE_WIZARD
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 1
+ cost = 10
+ requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED
+ flags = HIGH_IMPACT_RULESET
+ ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_WIZARDDEN)
+
+/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
+ if(!check_candidates())
+ return FALSE
+ if(!length(GLOB.wizardstart))
+ log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
+ message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/wizard/finish_setup(mob/new_character, index)
+ ..()
+ new_character.forceMove(pick(GLOB.wizardstart))
+
+/// Midround Nuclear Operatives Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/nuclear
+ name = "Nuclear Assault"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_flag = ROLE_OPERATIVE_MIDROUND
+ antag_flag_override = ROLE_OPERATIVE
+ antag_datum = /datum/antagonist/nukeop
+ enemy_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = list(3,3,3,3,3,2,1,1,0,0)
+ required_candidates = 5
+ weight = 5
+ cost = 7
+ minimum_round_time = 70 MINUTES
+ requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED
+ ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE)
+ flags = HIGH_IMPACT_RULESET
+
+ var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
+
+/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat_level=0)
+ if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in SSdynamic.executed_rules)
+ return FALSE // Unavailable if nuke ops were already sent at roundstart
+ indice_pop = min(operative_cap.len, round(living_players.len/5)+1)
+ required_candidates = operative_cap[indice_pop]
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
+ if (!check_candidates())
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_applications()
+ var/mob/leader = get_most_experienced(assigned, ROLE_NUCLEAR_OPERATIVE)
+ if(leader)
+ assigned.Remove(leader)
+ assigned.Insert(1, leader)
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index)
+ new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative))
+ new_character.mind.special_role = ROLE_NUCLEAR_OPERATIVE
+ if(index == 1)
+ var/datum/antagonist/nukeop/leader/leader_antag_datum = new()
+ new_character.mind.add_antag_datum(leader_antag_datum)
+ return
+ return ..()
+
+/// Midround Blob Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/blob
+ name = "Blob"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/blob
+ antag_flag = ROLE_BLOB
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ minimum_round_time = 35 MINUTES
+ weight = 3
+ cost = 8
+ minimum_players = 25
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant)
+ var/body = applicant.become_overmind()
+ return body
+
+/// Midround Blob Infection Ruleset (From Living)
+/datum/dynamic_ruleset/midround/from_living/blob_infection
+ name = "Blob Infection"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/blob/infection
+ antag_flag = ROLE_BLOB_INFECTION
+ antag_flag_override = ROLE_BLOB
+ protected_roles = list(
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_PRISONER,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ ROLE_POSITRONIC_BRAIN,
+ )
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ minimum_round_time = 35 MINUTES
+ weight = 3
+ cost = 10
+ minimum_players = 25
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_living/blob_infection/trim_candidates()
+ ..()
+ candidates = living_players
+ for(var/mob/living/player as anything in candidates)
+ var/turf/player_turf = get_turf(player)
+ if(!player_turf || !is_station_level(player_turf.z))
+ candidates -= player
+ continue
+
+ if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0))
+ candidates -= player
+
+/datum/dynamic_ruleset/midround/from_living/blob_infection/execute()
+ if(!candidates || !candidates.len)
+ return FALSE
+ var/mob/living/carbon/human/blob_antag = pick_n_take(candidates)
+ assigned += blob_antag.mind
+ blob_antag.mind.special_role = antag_flag
+ return ..()
+
+/// Midround Xenomorph Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/xenomorph
+ name = "Alien Infestation"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/xeno
+ antag_flag = ROLE_ALIEN
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ minimum_round_time = 40 MINUTES
+ weight = 5
+ cost = 10
+ minimum_players = 25
+ repeatable = TRUE
+ var/list/vents = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/forget_startup()
+ vents = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute()
+ // 50% chance of being incremented by one
+ required_candidates += prob(50)
+ var/list/vent_pumps = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump)
+ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in vent_pumps)
+ if(QDELETED(temp_vent))
+ continue
+ if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
+ var/datum/pipeline/temp_vent_parent = temp_vent.parents[1]
+ if(!temp_vent_parent)
+ continue // No parent vent
+ // Stops Aliens getting stuck in small networks.
+ // See: Security, Virology
+ if(temp_vent_parent.other_atmos_machines.len > 20)
+ vents += temp_vent
+ if(!vents.len)
+ return FALSE
+ . = ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant)
+ var/obj/vent = pick_n_take(vents)
+ var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
+ new_xeno.key = applicant.key
+ new_xeno.move_into_vent(vent)
+ message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.")
+ log_dynamic("[key_name(new_xeno)] was spawned as an alien by the midround ruleset.")
+ return new_xeno
+
+/// Midround Nightmare Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/nightmare
+ name = "Nightmare"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/nightmare
+ antag_flag = ROLE_NIGHTMARE
+ antag_flag_override = ROLE_ALIEN
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 3
+ cost = 5
+ minimum_players = 15
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/nightmare/acceptable(population = 0, threat_level = 0)
+ var/turf/spawn_loc = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE) //Checks if there's a single safe, dark tile on station.
+ if(!spawn_loc)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant)
+ var/datum/mind/player_mind = new /datum/mind(applicant.key)
+ player_mind.active = TRUE
+
+ var/mob/living/carbon/human/new_nightmare = new (find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE))
+ player_mind.transfer_to(new_nightmare)
+ player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare))
+ player_mind.special_role = ROLE_NIGHTMARE
+ player_mind.add_antag_datum(/datum/antagonist/nightmare)
+ new_nightmare.set_species(/datum/species/shadow/nightmare)
+
+ playsound(new_nightmare, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
+ message_admins("[ADMIN_LOOKUPFLW(new_nightmare)] has been made into a Nightmare by the midround ruleset.")
+ log_dynamic("[key_name(new_nightmare)] was spawned as a Nightmare by the midround ruleset.")
+ return new_nightmare
+
+/// Midround Space Dragon Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/space_dragon
+ name = "Space Dragon"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/space_dragon
+ antag_flag = ROLE_SPACE_DRAGON
+ antag_flag_override = ROLE_SPACE_DRAGON
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 7
+ minimum_players = 25
+ repeatable = TRUE
+ var/list/spawn_locs = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/forget_startup()
+ spawn_locs = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/execute()
+ for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
+ spawn_locs += (C.loc)
+ if(!spawn_locs.len)
+ message_admins("No valid spawn locations found, aborting...")
+ return MAP_ERROR
+ . = ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/generate_ruleset_body(mob/applicant)
+ var/datum/mind/player_mind = new /datum/mind(applicant.key)
+ player_mind.active = TRUE
+
+ var/mob/living/basic/space_dragon/S = new (pick(spawn_locs))
+ player_mind.transfer_to(S)
+ player_mind.add_antag_datum(/datum/antagonist/space_dragon)
+
+ playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
+ message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Space Dragon by the midround ruleset.")
+ log_dynamic("[key_name(S)] was spawned as a Space Dragon by the midround ruleset.")
+ priority_announce("A large organic energy flux has been recorded near of [station_name()], please stand-by.", "Lifesign Alert")
+ return S
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors
+ name = "Abductors"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/abductor
+ antag_flag = ROLE_ABDUCTOR
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 2
+ required_applicants = 2
+ weight = 4
+ cost = 7
+ minimum_players = 25
+ repeatable = TRUE
+ ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS)
+
+ var/datum/team/abductor_team/new_team
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors/forget_startup()
+ new_team = null
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
+ if (required_candidates > (dead_players.len + list_observers.len))
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/abductors/finish_setup(mob/new_character, index)
+ if (index == 1) // Our first guy is the scientist. We also initialize the team here as well since this should only happen once per pair of abductors.
+ new_team = new
+ if(new_team.team_number > ABDUCTOR_MAX_TEAMS)
+ return MAP_ERROR
+ var/datum/antagonist/abductor/scientist/new_role = new
+ new_character.mind.add_antag_datum(new_role, new_team)
+ else // Our second guy is the agent, team is already created, don't need to make another one.
+ var/datum/antagonist/abductor/agent/new_role = new
+ new_character.mind.add_antag_datum(new_role, new_team)
+
+/// Midround Space Ninja Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja
+ name = "Space Ninja"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/ninja
+ antag_flag = ROLE_NINJA
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 8
+ minimum_players = 30
+ repeatable = TRUE
+ ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NINJA_HOLDING_FACILITY) // I mean, no one uses the nets anymore but whateva
+
+ var/list/spawn_locs = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/forget_startup()
+ spawn_locs = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/execute()
+ for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list)
+ if(!isturf(carp_spawn.loc))
+ stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]")
+ continue
+ spawn_locs += carp_spawn.loc
+ if(!spawn_locs.len)
+ message_admins("No valid spawn locations found, aborting...")
+ return MAP_ERROR
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/generate_ruleset_body(mob/applicant)
+ var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs))
+ ninja.key = applicant.key
+ ninja.mind.add_antag_datum(/datum/antagonist/ninja)
+
+ message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a Space Ninja by the midround ruleset.")
+ log_dynamic("[key_name(ninja)] was spawned as a Space Ninja by the midround ruleset.")
+ return ninja
+
+/// Midround Spiders Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/spiders
+ name = "Spiders"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_flag = ROLE_SPIDER
+ required_type = /mob/dead/observer
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 0
+ weight = 3
+ cost = 8
+ minimum_players = 27
+ repeatable = TRUE
+ var/spawncount = 2
+
+/datum/dynamic_ruleset/midround/spiders/execute()
+ create_midwife_eggs(spawncount)
+ return ..()
+
+/// Midround Revenant Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/revenant
+ name = "Revenant"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/revenant
+ antag_flag = ROLE_REVENANT
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 5
+ minimum_players = 15
+ repeatable = TRUE
+ var/dead_mobs_required = 20
+ var/need_extra_spawns_value = 15
+ var/list/spawn_locs = list()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/forget_startup()
+ spawn_locs = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/acceptable(population=0, threat_level=0)
+ if(GLOB.dead_mob_list.len < dead_mobs_required)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/execute()
+ for(var/mob/living/corpse in GLOB.dead_mob_list) //look for any dead bodies
+ var/turf/corpse_turf = get_turf(corpse)
+ if(corpse_turf && is_station_level(corpse_turf.z))
+ spawn_locs += corpse_turf
+ if(!spawn_locs.len || spawn_locs.len < need_extra_spawns_value) //look for any morgue trays, crematoriums, ect if there weren't alot of dead bodies on the station to pick from
+ for(var/obj/structure/bodycontainer/corpse_container in GLOB.bodycontainers)
+ var/turf/container_turf = get_turf(corpse_container)
+ if(container_turf && is_station_level(container_turf.z))
+ spawn_locs += container_turf
+ if(!spawn_locs.len) //If we can't find any valid spawnpoints, try the carp spawns
+ for(var/obj/effect/landmark/carpspawn/carp_spawnpoint in GLOB.landmarks_list)
+ if(isturf(carp_spawnpoint.loc))
+ spawn_locs += carp_spawnpoint.loc
+ if(!spawn_locs.len) //If we can't find THAT, then just give up and cry
+ return FALSE
+ . = ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/revenant/generate_ruleset_body(mob/applicant)
+ var/mob/living/basic/revenant/revenant = new(pick(spawn_locs))
+ revenant.key = applicant.key
+ message_admins("[ADMIN_LOOKUPFLW(revenant)] has been made into a revenant by the midround ruleset.")
+ log_game("[key_name(revenant)] was spawned as a revenant by the midround ruleset.")
+ return revenant
+
+/// Midround Sentient Disease Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease
+ name = "Sentient Disease"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_datum = /datum/antagonist/disease
+ antag_flag = ROLE_SENTIENT_DISEASE
+ required_candidates = 1
+ minimum_players = 25
+ weight = 4
+ cost = 8
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant)
+ var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center())
+ virus.key = applicant.key
+ INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name))
+ message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.")
+ log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.")
+ return virus
+
+/// Midround Space Pirates Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/pirates
+ name = "Space Pirates"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_flag = "Space Pirates"
+ required_type = /mob/dead/observer
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 0
+ weight = 3
+ cost = 8
+ minimum_players = 20
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat_level=0)
+ if (SSmapping.is_planetary() || GLOB.light_pirate_gangs.len == 0)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/pirates/execute()
+ send_pirate_threat(GLOB.light_pirate_gangs)
+ return ..()
+
+/// Dangerous Space Pirates ruleset
+/datum/dynamic_ruleset/midround/dangerous_pirates
+ name = "Dangerous Space Pirates"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
+ antag_flag = "Space Pirates"
+ required_type = /mob/dead/observer
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 0
+ weight = 3
+ cost = 8
+ minimum_players = 25
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/dangerous_pirates/acceptable(population=0, threat_level=0)
+ if (SSmapping.is_planetary() || GLOB.heavy_pirate_gangs.len == 0)
+ return FALSE
+ return ..()
+
+/datum/dynamic_ruleset/midround/dangerous_pirates/execute()
+ send_pirate_threat(GLOB.heavy_pirate_gangs)
+ return ..()
+
+/// Midround Obsessed Ruleset (From Living)
+/datum/dynamic_ruleset/midround/from_living/obsessed
+ name = "Obsessed"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/obsessed
+ antag_flag = ROLE_OBSESSED
+ restricted_roles = list(
+ JOB_AI,
+ JOB_CYBORG,
+ ROLE_POSITRONIC_BRAIN,
+ )
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 4
+ cost = 3 // Doesn't have the same impact on rounds as revenants, dragons, sentient disease (10) or syndicate infiltrators (5).
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_living/obsessed/trim_candidates()
+ ..()
+ candidates = living_players
+ for(var/mob/living/carbon/human/candidate in candidates)
+ if( \
+ !candidate.get_organ_by_type(/obj/item/organ/internal/brain) \
+ || candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
+ || candidate.stat == DEAD \
+ || !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
+ || !candidate.mind.assigned_role \
+ )
+ candidates -= candidate
+
+/datum/dynamic_ruleset/midround/from_living/obsessed/execute()
+ var/mob/living/carbon/human/obsessed = pick_n_take(candidates)
+ obsessed.gain_trauma(/datum/brain_trauma/special/obsessed)
+ message_admins("[ADMIN_LOOKUPFLW(obsessed)] has been made Obsessed by the midround ruleset.")
+ log_game("[key_name(obsessed)] was made Obsessed by the midround ruleset.")
+ return TRUE
+
+/// Midround Space Changeling Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround
+ name = "Space Changeling"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/changeling/space
+ antag_flag = ROLE_CHANGELING_MIDROUND
+ antag_flag_override = ROLE_CHANGELING
+ required_type = /mob/dead/observer
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 1
+ weight = 3
+ cost = 7
+ minimum_players = 15
+ repeatable = TRUE
+
+/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround/generate_ruleset_body(mob/applicant)
+ var/body = generate_changeling_meteor(applicant)
+ message_admins("[ADMIN_LOOKUPFLW(body)] has been made into a space changeling by the midround ruleset.")
+ log_dynamic("[key_name(body)] was spawned as a space changeling by the midround ruleset.")
+ return body
+
+/// Midround Paradox Clone Ruleset (From Ghosts)
+/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone
+ name = "Paradox Clone"
+ midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
+ antag_datum = /datum/antagonist/paradox_clone
+ antag_flag = ROLE_PARADOX_CLONE
+ enemy_roles = list(
+ JOB_CAPTAIN,
+ JOB_DETECTIVE,
+ JOB_HEAD_OF_SECURITY,
+ JOB_SECURITY_OFFICER,
+ JOB_WARDEN,
+ )
+ required_enemies = list(2, 2, 1, 1, 1, 1, 1, 0, 0, 0)
+ required_candidates = 1
+ weight = 4
+ cost = 3
+ repeatable = TRUE
+ var/list/possible_spawns = list() ///places the antag can spawn
+
+/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/forget_startup()
+ possible_spawns = list()
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/execute()
+ possible_spawns += find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)
+ if(!possible_spawns.len)
+ return MAP_ERROR
+ return ..()
+
+/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/generate_ruleset_body(mob/applicant)
+ var/datum/mind/player_mind = new /datum/mind(applicant.key)
+ player_mind.active = TRUE
+
+ var/mob/living/carbon/human/clone_victim = find_original()
+ var/mob/living/carbon/human/clone = clone_victim.make_full_human_copy(pick(possible_spawns))
+ player_mind.transfer_to(clone)
+
+ var/datum/antagonist/paradox_clone/new_datum = player_mind.add_antag_datum(/datum/antagonist/paradox_clone)
+ new_datum.original_ref = WEAKREF(clone_victim.mind)
+ new_datum.setup_clone()
+
+ playsound(clone, 'sound/weapons/zapbang.ogg', 30, TRUE)
+ new /obj/item/storage/toolbox/mechanical(clone.loc) //so they dont get stuck in maints
+
+ message_admins("[ADMIN_LOOKUPFLW(clone)] has been made into a Paradox Clone by the midround ruleset.")
+ clone.log_message("was spawned as a Paradox Clone of [key_name(clone)] by the midround ruleset.", LOG_GAME)
+
+ return clone
+
+/**
+ * Trims through GLOB.player_list and finds a target
+ * Returns a single human victim, if none is possible then returns null.
+ */
+/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/proc/find_original()
+ var/list/possible_targets = list()
+
+ for(var/mob/living/carbon/human/player in GLOB.player_list)
+ if(!player.client || !player.mind || player.stat)
+ continue
+ if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER))
+ continue
+ possible_targets += player
+
+ if(possible_targets.len)
+ return pick(possible_targets)
+ return FALSE
+
+#undef MALF_ION_PROB
+#undef REPLACE_LAW_WITH_ION_PROB
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
similarity index 99%
rename from code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
rename to code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
index bb1300249c7..290b7116162 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm
@@ -605,9 +605,9 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE)
. = ..()
message_admins("Starting a round of extended.")
log_game("Starting a round of extended.")
- mode.spend_roundstart_budget(mode.round_start_budget)
- mode.spend_midround_budget(mode.mid_round_budget)
- mode.threat_log += "[worldtime2text()]: Extended ruleset set threat to 0."
+ SSdynamic.spend_roundstart_budget(SSdynamic.round_start_budget)
+ SSdynamic.spend_midround_budget(SSdynamic.mid_round_budget)
+ SSdynamic.threat_log += "[worldtime2text()]: Extended ruleset set threat to 0."
return TRUE
//////////////////////////////////////////////
diff --git a/code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm b/code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm
similarity index 90%
rename from code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm
rename to code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm
index 1be6511433c..994f2e3f5de 100644
--- a/code/game/gamemodes/dynamic/dynamic_unfavorable_situation.dm
+++ b/code/controllers/subsystem/dynamic/dynamic_unfavorable_situation.dm
@@ -2,12 +2,12 @@
/// This is used for impactful events like traitors hacking and creating more threat, or a revolutions victory.
/// It tries to spawn a heavy midround if possible, otherwise it will trigger a "bad" random event after a short period.
/// Calling this function will not use up any threat.
-/datum/game_mode/dynamic/proc/unfavorable_situation()
+/datum/controller/subsystem/dynamic/proc/unfavorable_situation()
SHOULD_NOT_SLEEP(TRUE)
INVOKE_ASYNC(src, PROC_REF(_unfavorable_situation))
-/datum/game_mode/dynamic/proc/_unfavorable_situation()
+/datum/controller/subsystem/dynamic/proc/_unfavorable_situation()
var/static/list/unfavorable_random_events = list()
if (!length(unfavorable_random_events))
unfavorable_random_events = generate_unfavourable_events()
@@ -24,7 +24,7 @@
picking_specific_rule(heavy_ruleset, forced = TRUE, ignore_cost = TRUE)
/// Return a valid heavy dynamic ruleset, or an empty list if there's no time to run any rulesets
-/datum/game_mode/dynamic/proc/generate_unfavourable_heavy_rulesets()
+/datum/controller/subsystem/dynamic/proc/generate_unfavourable_heavy_rulesets()
if (EMERGENCY_PAST_POINT_OF_NO_RETURN)
return list()
@@ -58,7 +58,7 @@
return possible_heavies
/// Filter the below list by which events can actually run on this map
-/datum/game_mode/dynamic/proc/generate_unfavourable_events()
+/datum/controller/subsystem/dynamic/proc/generate_unfavourable_events()
var/static/list/unfavorable_random_events = list(
/datum/round_event_control/earthquake,
/datum/round_event_control/immovable_rod,
diff --git a/code/controllers/subsystem/dynamic/readme.md b/code/controllers/subsystem/dynamic/readme.md
new file mode 100644
index 00000000000..ec21626945e
--- /dev/null
+++ b/code/controllers/subsystem/dynamic/readme.md
@@ -0,0 +1,194 @@
+# Dynamic Mode
+
+## Roundstart
+
+Dynamic rolls threat based on a special sauce formula:
+
+> [dynamic_curve_width][/datum/controller/global_vars/var/dynamic_curve_width] \* tan((3.1416 \* (rand() - 0.5) \* 57.2957795)) + [dynamic_curve_centre][/datum/controller/global_vars/var/dynamic_curve_centre]
+
+This threat is split into two separate budgets--`round_start_budget` and `mid_round_budget`. For example, a round with 50 threat might be split into a 30 roundstart budget, and a 20 midround budget. The roundstart budget is used to apply antagonists applied on readied players when the roundstarts (`/datum/dynamic_ruleset/roundstart`). The midround budget is used for two types of rulesets:
+- `/datum/dynamic_ruleset/midround` - Rulesets that apply to either existing alive players, or to ghosts. Think Blob or Space Ninja, which poll ghosts asking if they want to play as these roles.
+- `/datum/dynamic_ruleset/latejoin` - Rulesets that apply to the next player that joins. Think Syndicate Infiltrator, which converts a player just joining an existing round into traitor.
+
+This split is done with a similar method, known as the ["lorentz distribution"](https://en.wikipedia.org/wiki/Cauchy_distribution), exists to create a bell curve that ensures that while most rounds will have a threat level around ~50, chaotic and tame rounds still exist for variety.
+
+The process of creating these numbers occurs in `/datum/controller/subsystem/dynamic/proc/generate_threat` (for creating the threat level) and `/datum/controller/subsystem/dynamic/proc/generate_budgets` (for splitting the threat level into budgets).
+
+## Deciding roundstart threats
+In `/datum/controller/subsystem/dynamic/proc/roundstart()` (called when no admin chooses the rulesets explicitly), Dynamic uses the available roundstart budget to pick threats. This is done through the following system:
+
+- All roundstart rulesets (remember, `/datum/dynamic_ruleset/roundstart`) are put into an associative list with their weight as the values (`drafted_rules`).
+- Until there is either no roundstart budget left, or until there is no ruleset we can choose from with the available threat, a `pickweight` is done based on the drafted_rules. If the same threat is picked twice, it will "scale up". The meaning of this depends on the ruleset itself, using the `scaled_times` variable; traitors for instance will create more the higher they scale.
+ - If a ruleset is chosen with the `HIGH_IMPACT_RULESET` in its `flags`, then all other `HIGH_IMPACT_RULESET`s will be removed from `drafted_rules`. This is so that only one can ever be chosen.
+ - If a ruleset has `LONE_RULESET` in its `flags`, then it will be removed from `drafted_rules`. This is to ensure it will only ever be picked once. An example of this in use is Wizard, to avoid creating multiple wizards.
+- After all roundstart threats are chosen, `/datum/dynamic_ruleset/proc/picking_roundstart_rule` is called for each, passing in the ruleset and the number of times it is scaled.
+ - In this stage, `pre_execute` is called, which is the function that will determine what players get what antagonists. If this function returns FALSE for whatever reason (in the case of an error), then its threat is refunded.
+
+After this process is done, any leftover roundstart threat will be given to the existing midround budget (done in `/datum/controller/subsystem/dynamic/pre_setup()`).
+
+## Deciding midround threats
+
+### Frequency
+
+The frequency of midround threats is based on the midround threat of the round. The number of midround threats that will roll is `threat_level` / `threat_per_midround_roll` (configurable), rounded up. For example, if `threat_per_midround_roll` is set to 5, then for every 5 threat, one midround roll will be added. If you have 6 threat, with this configuration, you will get 2 midround rolls.
+
+These midround roll points are then equidistantly spaced across the round, starting from `midround_lower_bound` (configurable) to `midround_upper_bound` (configurable), with a +/- of `midround_roll_distance` (configurable).
+
+For example, if:
+1. `midround_lower_bound` is `10 MINUTES`
+2. `midround_upper_bound` is `100 MINUTES`
+3. `midround_roll_distance` is `3 MINUTES`
+4. You have 5 midround rolls for the round
+
+...then those 5 midround rolls will be placed equidistantly (meaning equally apart) across the first 10-100 minutes of the round. Every individual roll will then be adjusted to either be 3 minutes earlier, or 3 minutes later.
+
+### Threat variety
+
+Threats are split between **heavy** rulesets and **light** rulesets. A heavy ruleset includes major threats like space dragons or blobs, while light rulesets are ones that don't often cause shuttle calls when rolled, such as revenants or traitors (sleeper agents).
+
+When a midround roll occurs, the decision to choose between light or heavy depends on the current round time. If it is less than `midround_light_upper_bound` (configurable), then it is guaranteed to be a light ruleset. If it is more than `midround_heavy_lower_bound`, then it is guaranteed to be a heavy ruleset. If it is any point in between, it will interpolate the value between those. This means that the longer the round goes on, the more likely you are to get a heavy ruleset.
+
+If no heavy ruleset can run, such as not having enough threat, then a light ruleset is guaranteed to run.
+
+## Rule Processing
+
+Calls [rule_process][/datum/dynamic_ruleset/proc/rule_process] on every rule which is in the current_rules list.
+Every sixty seconds, update_playercounts()
+Midround injection time is checked against world.time to see if an injection should happen.
+If midround injection time is lower than world.time, it updates playercounts again, then tries to inject and generates a new cooldown regardless of whether a rule is picked.
+
+## Latejoin
+
+make_antag_chance(newPlayer) -> (For each latespawn rule...)
+-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE)
+**If true, add to drafted rules
+**NOTE that acceptable uses threat_level not threat!
+**NOTE Latejoin timer is ONLY reset if at least one rule was drafted.
+**NOTE the new_player.dm AttemptLateSpawn() calls OnPostSetup for all roles (unless assigned role is MODE)
+
+(After collecting all draftble rules...)
+-> picking_latejoin_ruleset(drafted_rules) -> spend threat -> ruleset.execute()
+
+## Midround
+
+process() -> (For each midround rule...
+-> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE)
+(After collecting all draftble rules...)
+-> picking_midround_ruleset(drafted_rules) -> spend threat -> ruleset.execute()
+
+## Forced
+
+For latejoin, it simply sets forced_latejoin_rule
+make_antag_chance(newPlayer) -> trim_candidates() -> ready(forced=TRUE) **NOTE no acceptable() call
+
+For midround, calls the below proc with forced = TRUE
+picking_specific_rule(ruletype,forced) -> forced OR acceptable(living_players, threat_level) -> trim_candidates() -> ready(forced) -> spend threat -> execute()
+**NOTE specific rule can be called by RS traitor->MR autotraitor w/ forced=FALSE
+**NOTE that due to short circuiting acceptable() need not be called if forced.
+
+## Ruleset
+
+acceptable(population,threat) just checks if enough threat_level for population indice.
+**NOTE that we currently only send threat_level as the second arg, not threat.
+ready(forced) checks if enough candidates and calls the map's map_ruleset(dynamic_ruleset) at the parent level
+
+trim_candidates() varies significantly according to the ruleset type
+Roundstart: All candidates are new_player mobs. Check them for standard stuff: connected, desire role, not banned, etc.
+**NOTE Roundstart deals with both candidates (trimmed list of valid players) and mode.candidates (everyone readied up). Don't confuse them!
+Latejoin: Only one candidate, the latejoiner. Standard checks.
+Midround: Instead of building a single list candidates, candidates contains four lists: living, dead, observing, and living antags. Standard checks in trim_list(list).
+
+Midround - Rulesets have additional types
+/from_ghosts: execute() -> send_applications() -> review_applications() -> finish_applications() -> finish_setup(mob/newcharacter, index) -> setup_role(role)
+**NOTE: execute() here adds dead players and observers to candidates list
+
+## Configuration and variables
+
+### Configuration
+Configuration can be done through a `config/dynamic.json` file. One is provided as example in the codebase. This config file, loaded in `/datum/controller/subsystem/dynamic/pre_setup()`, directly overrides the values in the codebase, and so is perfect for making some rulesets harder/easier to get, turning them off completely, changing how much they cost, etc.
+
+The format of this file is:
+```json
+{
+ "Dynamic": {
+ /* Configuration in here will directly override `/datum/controller/subsystem/dynamic` itself. */
+ /* Keys are variable names, values are their new values. */
+ },
+
+ "Roundstart": {
+ /* Configuration in here will apply to `/datum/dynamic_ruleset/roundstart` instances. */
+ /* Keys are the ruleset names, values are another associative list with keys being variable names and values being new values. */
+ "Wizard": {
+ /* I, a head admin, have died to wizard, and so I made it cost a lot more threat than it does in the codebase. */
+ "cost": 80
+ }
+ },
+
+ "Midround": {
+ /* Same as "Roundstart", but for `/datum/dynamic_ruleset/midround` instead. */
+ },
+
+ "Latejoin": {
+ /* Same as "Roundstart", but for `/datum/dynamic_ruleset/latejoin` instead. */
+ },
+
+ "Station": {
+ /* Special threat reductions for dangerous station traits. Traits are selected before dynamic, so traits will always */
+ /* reduce threat even if there's no threat for it available. Only "cost" can be modified */
+ }
+}
+```
+
+Note: Comments are not possible in this format, and are just in this document for the sake of readability.
+
+### Rulesets
+Rulesets have the following variables notable to developers and those interested in tuning.
+
+- `required_candidates` - The number of people that *must be willing* (in their preferences) to be an antagonist with this ruleset. If the candidates do not meet this requirement, then the ruleset will not bother to be drafted.
+- `antag_cap` - Judges the amount of antagonists to apply, for both solo and teams. Note that some antagonists (such as traitors, lings, heretics, etc) will add more based on how many times they've been scaled. Written as a linear equation--ceil(x/denominator) + offset, or as a fixed constant. If written as a linear equation, will be in the form of `list("denominator" = denominator, "offset" = offset)`.
+ - Examples include:
+ - Traitor: `antag_cap = list("denominator" = 24)`. This means that for every 24 players, 1 traitor will be added (assuming no scaling).
+ - Nuclear Emergency: `antag_cap = list("denominator" = 18, "offset" = 1)`. For every 18 players, 1 nuke op will be added. Starts at 1, meaning at 30 players, 3 nuke ops will be created, rather than 2.
+ - Revolution: `antag_cap = 3`. There will always be 3 rev-heads, no matter what.
+- `minimum_required_age` - The minimum age in order to apply for the ruleset.
+- `weight` - How likely this ruleset is to be picked. A higher weight results in a higher chance of drafting.
+- `cost` - The initial cost of the ruleset. This cost is taken from either the roundstart or midround budget, depending on the ruleset.
+- `scaling_cost` - Cost for every *additional* application of this ruleset.
+ - Suppose traitors has a `cost` of 8, and a `scaling_cost` of 5. This means that buying 1 application of the traitor ruleset costs 8 threat, but buying two costs 13 (8 + 5). Buying it a third time is 18 (8 + 5 + 5), etc.
+- `pop_per_requirement` - The range of population each value in `requirements` represents. By default, this is 6.
+ - If the value is five the range is 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+.
+ - If it is six the range is 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+.
+ - If it is seven the range is 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+.
+- `requirements` - A list that represents, per population range (see: `pop_per_requirement`), how much threat is required to *consider* this ruleset. This is independent of how much it'll actually cost. This uses *threat level*, not the budget--meaning if a round has 50 threat level, but only 10 points of round start threat, a ruleset with a requirement of 40 can still be picked if it can be bought.
+ - Suppose wizard has a `requirements` of `list(90,90,70,40,30,20,10,10,10,10)`. This means that, at 0-5 and 6-11 players, A station must have 90 threat in order for a wizard to be possible. At 12-17, 70 threat is required instead, etc.
+- `restricted_roles` - A list of jobs that *can't* be drafted by this ruleset. For example, cyborgs cannot be changelings, and so are in the `restricted_roles`.
+- `protected_roles` - Serves the same purpose of `restricted_roles`, except it can be turned off through configuration (`protect_roles_from_antagonist`). For example, security officers *shouldn't* be made traitor, so they are in Traitor's `protected_roles`.
+ - When considering putting a role in `protected_roles` or `restricted_roles`, the rule of thumb is if it is *technically infeasible* to support that job in that role. There's no *technical* reason a security officer can't be a traitor, and so they are simply in `protected_roles`. There *are* technical reasons a cyborg can't be a changeling, so they are in `restricted_roles` instead.
+
+This is not a complete list--search "configurable" in this README to learn more.
+
+### Dynamic
+
+The "Dynamic" key has the following configurable values:
+- `pop_per_requirement` - The default value of `pop_per_requirement` for any ruleset that does not explicitly set it. Defaults to 6.
+- `latejoin_delay_min`, `latejoin_delay_max` - The time range, in deciseconds (take your seconds, and multiply by 10), for a latejoin to attempt rolling. Once this timer is finished, a new one will be created within the same range.
+ - Suppose you have a `latejoin_delay_min` of 600 (60 seconds, 1 minute) and a `latejoin_delay_max` of 1800 (180 seconds, 3 minutes). Once the round starts, a random number in this range will be picked--let's suppose 1.5 minutes. After 1.5 minutes, Dynamic will decide if a latejoin threat should be created (a probability of `/datum/controller/subsystem/dynamic/proc/get_injection_chance()`). Regardless of its decision, a new timer will be started within the range of 1 to 3 minutes, repeatedly.
+- `threat_curve_centre` - A number between -5 and +5. A negative value will give a more peaceful round and a positive value will give a round with higher threat.
+- `threat_curve_width` - A number between 0.5 and 4. Higher value will favour extreme rounds and lower value rounds closer to the average.
+- `roundstart_split_curve_centre` - A number between -5 and +5. Equivalent to threat_curve_centre, but for the budget split. A negative value will weigh towards midround rulesets, and a positive value will weight towards roundstart ones.
+- `roundstart_split_curve_width` - A number between 0.5 and 4. Equivalent to threat_curve_width, but for the budget split. Higher value will favour more variance in splits and lower value rounds closer to the average.
+- `random_event_hijack_minimum` - The minimum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking))
+- `random_event_hijack_maximum` - The maximum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking))
+- `hijacked_random_event_injection_chance` - The amount of injection chance to give to Dynamic when a random event is hijacked. (See [Random Event Hijacking](#random-event-hijacking))
+- `max_threat_level` - Sets the maximum amount of threat that can be rolled. Defaults to 100. You should only use this to *lower* the maximum threat, as raising it higher will not do anything.
+
+## Random Event "Hijacking"
+Random events have the potential to be hijacked by Dynamic to keep the pace of midround injections, while also allowing greenshifts to contain some antagonists.
+
+`/datum/round_event_control/dynamic_should_hijack` is a variable to random events to allow Dynamic to hijack them, and defaults to FALSE. This is set to TRUE for random events that spawn antagonists.
+
+In `/datum/controller/subsystem/dynamic/on_pre_random_event` (in `dynamic_hijacking.dm`), Dynamic hooks to random events. If the `dynamic_should_hijack` variable is TRUE, the following sequence of events occurs:
+
+![Flow chart to describe the chain of events for Dynamic 2021 to take](https://github.com/tgstation/documentation-assets/blob/main/dynamic/random_event_hijacking.png)
+
+`n` is a random value between `random_event_hijack_minimum` and `random_event_hijack_maximum`. Heavy injection chance, should it need to be raised, is increased by `hijacked_random_event_injection_chance_modifier`.
diff --git a/code/game/gamemodes/dynamic/ruleset_picking.dm b/code/controllers/subsystem/dynamic/ruleset_picking.dm
similarity index 87%
rename from code/game/gamemodes/dynamic/ruleset_picking.dm
rename to code/controllers/subsystem/dynamic/ruleset_picking.dm
index d6e2fd6b1f4..1a77a0288da 100644
--- a/code/game/gamemodes/dynamic/ruleset_picking.dm
+++ b/code/controllers/subsystem/dynamic/ruleset_picking.dm
@@ -1,4 +1,4 @@
-#define ADMIN_CANCEL_MIDROUND_TIME (180 SECONDS) //SKYRAT EDIT - ORIGINAL 10 SECONDS
+#define ADMIN_CANCEL_MIDROUND_TIME (180 SECONDS) //NOVA EDIT - ORIGINAL 10 SECONDS
///
///
@@ -8,7 +8,7 @@
*
* * max_allowed_attempts - Allows you to configure how many times the proc will attempt to pick a ruleset before giving up.
*/
-/datum/game_mode/dynamic/proc/pick_ruleset(list/drafted_rules, max_allowed_attempts = INFINITY)
+/datum/controller/subsystem/dynamic/proc/pick_ruleset(list/drafted_rules, max_allowed_attempts = INFINITY)
if (only_ruleset_executed)
log_dynamic("FAIL: only_ruleset_executed")
return null
@@ -52,7 +52,7 @@
return null
/// Executes a random midround ruleset from the list of drafted rules.
-/datum/game_mode/dynamic/proc/pick_midround_rule(list/drafted_rules, description)
+/datum/controller/subsystem/dynamic/proc/pick_midround_rule(list/drafted_rules, description)
log_dynamic("Rolling [drafted_rules.len] [description]")
var/datum/dynamic_ruleset/rule = pick_ruleset(drafted_rules)
@@ -66,7 +66,7 @@
ADMIN_CANCEL_MIDROUND_TIME, \
TIMER_STOPPABLE, \
)
- // SKYRAT EDIT REMOVAL BEGIN - Event notification
+ // NOVA EDIT REMOVAL BEGIN - Event notification
/**
log_dynamic("[rule] ruleset executing...")
message_admins("DYNAMIC: Executing midround ruleset [rule] in [DisplayTimeText(ADMIN_CANCEL_MIDROUND_TIME)]. \
@@ -75,9 +75,9 @@
return rule
*/
- // SKYRAT EDIT REMOVAL END - Event notification
+ // NOVA EDIT REMOVAL END - Event notification
- // SKYRAT EDIT ADDITION BEGIN - Event notification
+ // NOVA EDIT ADDITION BEGIN - Event notification
message_admins("Dynamic Event triggering in [DisplayTimeText(ADMIN_CANCEL_MIDROUND_TIME)]: [rule]. (\
CANCEL | \
SOMETHING ELSE ) ")
@@ -92,10 +92,10 @@
SOMETHING ELSE )")
return rule
- // SKYRAT EDIT ADDITION END - Event notification
+ // NOVA EDIT ADDITION END - Event notification
/// Fired after admins do not cancel a midround injection.
-/datum/game_mode/dynamic/proc/execute_midround_rule(datum/dynamic_ruleset/rule)
+/datum/controller/subsystem/dynamic/proc/execute_midround_rule(datum/dynamic_ruleset/rule)
current_midround_rulesets = null
midround_injection_timer_id = null
if (!rule.repeatable)
@@ -103,7 +103,7 @@
addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), rule), rule.delay)
/// Mainly here to facilitate delayed rulesets. All midround/latejoin rulesets are executed with a timered callback to this proc.
-/datum/game_mode/dynamic/proc/execute_midround_latejoin_rule(sent_rule)
+/datum/controller/subsystem/dynamic/proc/execute_midround_latejoin_rule(sent_rule)
var/datum/dynamic_ruleset/rule = sent_rule
spend_midround_budget(rule.cost, threat_log, "[worldtime2text()]: [rule.ruletype] [rule.name]")
rule.pre_execute(GLOB.alive_player_list.len)
@@ -129,7 +129,7 @@
return FALSE
/// Fired when an admin cancels the current midround injection.
-/datum/game_mode/dynamic/proc/admin_cancel_midround(mob/user, timer_id)
+/datum/controller/subsystem/dynamic/proc/admin_cancel_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
to_chat(user, span_notice("Too late!"))
return
@@ -140,7 +140,7 @@
current_midround_rulesets = null
/// Fired when an admin requests a different midround injection.
-/datum/game_mode/dynamic/proc/admin_different_midround(mob/user, timer_id)
+/datum/controller/subsystem/dynamic/proc/admin_different_midround(mob/user, timer_id)
if (midround_injection_timer_id != timer_id || !deltimer(midround_injection_timer_id))
to_chat(user, span_notice("Too late!"))
return
diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm
index f047d17d944..f8377302bd3 100644
--- a/code/controllers/subsystem/economy.dm
+++ b/code/controllers/subsystem/economy.dm
@@ -13,7 +13,7 @@ SUBSYSTEM_DEF(economy)
ACCOUNT_MED = ACCOUNT_MED_NAME,
ACCOUNT_SRV = ACCOUNT_SRV_NAME,
ACCOUNT_CAR = ACCOUNT_CAR_NAME,
- ACCOUNT_CMD = ACCOUNT_CMD_NAME, // SKYRAT EDIT
+ ACCOUNT_CMD = ACCOUNT_CMD_NAME, // NOVA EDIT
ACCOUNT_SEC = ACCOUNT_SEC_NAME)
var/list/departmental_accounts = list()
/**
diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm
index 98f847e4be6..037d3d09b96 100644
--- a/code/controllers/subsystem/events.dm
+++ b/code/controllers/subsystem/events.dm
@@ -17,7 +17,7 @@ SUBSYSTEM_DEF(events)
///Will wizard events be included in the event pool?
var/wizardmode = FALSE
- var/list/previously_run = list() //SKYRAT EDIT ADDITION
+ var/list/previously_run = list() //NOVA EDIT ADDITION
/datum/controller/subsystem/events/Initialize()
for(var/type in typesof(/datum/round_event_control))
@@ -60,7 +60,7 @@ SUBSYSTEM_DEF(events)
scheduled = world.time + rand(frequency_lower, max(frequency_lower,frequency_upper))
//selects a random event based on whether it can occur and it's 'weight'(probability)
-/datum/controller/subsystem/events/proc/spawnEvent(threat_override = FALSE) //SKYRAT EDIT CHANGE
+/datum/controller/subsystem/events/proc/spawnEvent(threat_override = FALSE) //NOVA EDIT CHANGE
set waitfor = FALSE //for the admin prompt
if(!CONFIG_GET(flag/allow_random_events))
return
@@ -73,10 +73,10 @@ SUBSYSTEM_DEF(events)
for(var/datum/round_event_control/event_to_check in control)
if(!event_to_check.can_spawn_event(players_amt))
continue
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(threat_override && !event_to_check.alert_observers)
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(event_to_check.weight < 0) //for round-start events etc.
var/res = TriggerEvent(event_to_check)
if(res == EVENT_INTERRUPTED)
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
index 2021964609a..abc9918489d 100644
--- a/code/controllers/subsystem/explosions.dm
+++ b/code/controllers/subsystem/explosions.dm
@@ -441,10 +441,10 @@ SUBSYSTEM_DEF(explosions)
if(EXPLODE_LIGHT)
SSexplosions.lowturf += explode
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
for(var/obj/machinery/light/iterating_light in explode)
iterating_light.start_flickering()
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(prob(40) && dist < flame_range && !isspaceturf(explode) && !explode.density)
flameturf += explode
diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index 66d3f2e5e15..4f11a3ee577 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -337,7 +337,7 @@ SUBSYSTEM_DEF(garbage)
/// Should be treated as a replacement for the 'del' keyword.
///
/// Datums passed to this will be given a chance to clean up references to allow the GC to collect them.
-/proc/qdel(datum/to_delete, force = FALSE, ...)
+/proc/qdel(datum/to_delete, force = FALSE)
if(!istype(to_delete))
del(to_delete)
return
@@ -359,7 +359,7 @@ SUBSYSTEM_DEF(garbage)
var/start_time = world.time
var/start_tick = world.tick_usage
SEND_SIGNAL(to_delete, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy
- var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
+ var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
if(world.time != start_time)
trash.slept_destroy++
diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm
index 86f2e124a8f..b2dadf4bcb8 100644
--- a/code/controllers/subsystem/id_access.dm
+++ b/code/controllers/subsystem/id_access.dm
@@ -330,7 +330,7 @@ SUBSYSTEM_DEF(id_access)
desc_by_access["[ACCESS_CENT_CAPTAIN]"] = "Code Gold"
desc_by_access["[ACCESS_CENT_BAR]"] = "Code Scotch"
desc_by_access["[ACCESS_BIT_DEN]"] = "Bitrunner Den"
- desc_by_access["[ACCESS_BARBER]"] = "Barber" // SKYRAT EDIT ADD - BARBER UPDATE
+ desc_by_access["[ACCESS_BARBER]"] = "Barber" // NOVA EDIT ADD - BARBER UPDATE
/**
* Returns the access bitflags associated with any given access level.
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 8376059e910..4f5308365c1 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -277,11 +277,11 @@ SUBSYSTEM_DEF(job)
JobDebug("GRJ skipping command role, Player: [player], Job: [job]")
continue
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(job.departments_bitflags & DEPARTMENT_BITFLAG_CENTRAL_COMMAND) //If you want a CC position, select it!
JobDebug("GRJ skipping Central Command role, Player: [player], Job: [job]")
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
// This check handles its own output to JobDebug.
if(check_job_eligibility(player, job, "GRJ", add_job_to_log = TRUE) != JOB_AVAILABLE)
@@ -542,18 +542,18 @@ SUBSYSTEM_DEF(job)
//Gives the player the stuff he should have with his rank
/datum/controller/subsystem/job/proc/EquipRank(mob/living/equipping, datum/job/job, client/player_client)
- // SKYRAT EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
+ // NOVA EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
// The alt job title, if user picked one, or the default
- var/alt_title = player_client?.prefs.alt_job_titles[job.title]
- // SKYRAT EDIT ADDITION END
+ var/alt_title = player_client?.prefs.alt_job_titles?[job.title] || job.title
+ // NOVA EDIT ADDITION END
equipping.job = job.title
SEND_SIGNAL(equipping, COMSIG_JOB_RECEIVED, job)
- equipping.mind?.set_assigned_role_with_greeting(job, player_client, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.mind?.set_assigned_role_with_greeting(job, player_client)
- equipping.on_job_equipping(job, player_client?.prefs, player_client) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.on_job_equipping(job)
- job.announce_job(equipping, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: job.announce_job(equipping)
+ equipping.mind?.set_assigned_role_with_greeting(job, player_client, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.mind?.set_assigned_role_with_greeting(job, player_client)
+ equipping.on_job_equipping(job, player_client?.prefs, player_client) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: equipping.on_job_equipping(job)
+ job.announce_job(equipping, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: job.announce_job(equipping)
if(player_client?.holder)
if(CONFIG_GET(flag/auto_deadmin_players) || (player_client.prefs?.toggles & DEADMIN_ALWAYS))
@@ -561,7 +561,7 @@ SUBSYSTEM_DEF(job)
else
handle_auto_deadmin_roles(player_client, job.title)
- setup_alt_job_items(equipping, job, player_client) // SKYRAT EDIT ADDITION - ALTERNATIVE_JOB_TITLES
+ setup_alt_job_items(equipping, job, player_client) // NOVA EDIT ADDITION - ALTERNATIVE_JOB_TITLES
job.after_spawn(equipping, player_client)
/datum/controller/subsystem/job/proc/handle_auto_deadmin_roles(client/C, rank)
@@ -592,7 +592,7 @@ SUBSYSTEM_DEF(job)
var/ssc = CONFIG_GET(number/security_scaling_coeff)
if(ssc > 0)
if(J.spawn_positions > 0)
- // SKYRAT EDIT - Reduced from 12 max sec to 7 max sec due to departmental security being deactivated and replaced.
+ // NOVA EDIT - Reduced from 12 max sec to 7 max sec due to departmental security being deactivated and replaced.
var/officer_positions = min(7, max(J.spawn_positions, round(unassigned.len / ssc))) //Scale between configured minimum and 12 officers
JobDebug("Setting open security officer positions to [officer_positions]")
J.total_positions = officer_positions
@@ -666,7 +666,7 @@ SUBSYSTEM_DEF(job)
if(!run_divide_occupation_pure)
to_chat(player, "You have failed to qualify for any job you desired. ")
player.ready = PLAYER_NOT_READY
- player.client << output(player.ready, "lobby_browser:imgsrc") //SKYRAT EDIT ADDITION
+ player.client << output(player.ready, "lobby_browser:imgsrc") //NOVA EDIT ADDITION
/datum/controller/subsystem/job/Recover()
@@ -904,7 +904,7 @@ SUBSYSTEM_DEF(job)
JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_UNAVAILABLE_AGE)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]")
return JOB_UNAVAILABLE_AGE
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
if(possible_job.veteran_only && !SSplayer_ranks.is_veteran(player.client))
JobDebug("[debug_prefix] Error: [get_job_unavailable_error_message(JOB_NOT_VETERAN)], Player: [player][add_job_to_log ? ", Job: [possible_job]" : ""]")
return JOB_NOT_VETERAN
@@ -931,7 +931,7 @@ SUBSYSTEM_DEF(job)
return JOB_UNAVAILABLE_AUGMENT
- //SKYRAT EDIT END
+ //NOVA EDIT END
// Run this check after is_banned_from since it can query the DB which may sleep.
diff --git a/code/controllers/subsystem/lag_switch.dm b/code/controllers/subsystem/lag_switch.dm
index fdd9a9287e5..f59ead3a99b 100644
--- a/code/controllers/subsystem/lag_switch.dm
+++ b/code/controllers/subsystem/lag_switch.dm
@@ -124,13 +124,13 @@ SUBSYSTEM_DEF(lag_switch)
to_chat(world, span_boldannounce("Footstep sounds have been disabled for performance concerns."))
else
to_chat(world, span_boldannounce("Footstep sounds have been re-enabled."))
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if (DISABLE_CREATOR)
if (state)
to_chat(world, span_boldannounce("The character creator and preferences menu has been disabled for performance metrics."))
else
to_chat(world, span_boldannounce("The character creator has been re-enabled."))
- // SKYRAT EDIT END
+ // NOVA EDIT END
return TRUE
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index cf1058f8a44..5881405da0b 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -405,24 +405,24 @@ Used by the AI doomsday and the self-destruct nuke.
add_new_zlevel("[name][i ? " [i + 1]" : ""]", level, contain_turfs = FALSE)
++i
- SSautomapper.preload_templates_from_toml(files) // SKYRAT EDIT ADDITION - We need to load our templates AFTER the Z level exists, otherwise, there is no z level to preload.
- var/turf_blacklist = SSautomapper.get_turf_blacklists(files) // SKYRAT EDIT ADDITION - We use blacklisted turfs to carve out places for our templates.
+ SSautomapper.preload_templates_from_toml(files) // NOVA EDIT ADDITION - We need to load our templates AFTER the Z level exists, otherwise, there is no z level to preload.
+ var/turf_blacklist = SSautomapper.get_turf_blacklists(files) // NOVA EDIT ADDITION - We use blacklisted turfs to carve out places for our templates.
// load the maps
for (var/P in parsed_maps)
var/datum/parsed_map/pm = P
- pm.turf_blacklist = turf_blacklist // SKYRAT EDIT ADDITION - apply blacklist
+ pm.turf_blacklist = turf_blacklist // NOVA EDIT ADDITION - apply blacklist
var/bounds = pm.bounds
var/x_offset = bounds ? round(world.maxx / 2 - bounds[MAP_MAXX] / 2) + 1 : 1
var/y_offset = bounds ? round(world.maxy / 2 - bounds[MAP_MAXY] / 2) + 1 : 1
if (!pm.load(x_offset, y_offset, start_z + parsed_maps[P], no_changeturf = TRUE, new_z = TRUE))
errorList |= pm.original_path
- // SKYRAT EDIT ADDITION BEGIN - We need to load our templates from cache after our space has been carved out.
+ // NOVA EDIT ADDITION BEGIN - We need to load our templates from cache after our space has been carved out.
if(!LAZYLEN(errorList))
SSautomapper.load_templates_from_cache(files)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
if(!silent)
- add_startup_message("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") //SKYRAT EDIT CHANGE
+ add_startup_message("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") //NOVA EDIT CHANGE
return parsed_maps
/datum/controller/subsystem/mapping/proc/loadWorld()
@@ -434,7 +434,7 @@ Used by the AI doomsday and the self-destruct nuke.
// load the station
station_start = world.maxz + 1
- add_startup_message("Loading [config.map_name]...") // SKYRAT EDIT CHANGE
+ add_startup_message("Loading [config.map_name]...") // NOVA EDIT CHANGE
LoadGroup(FailedZs, "Station", config.map_path, config.map_file, config.traits, ZTRAITS_STATION)
if(SSdbcore.Connect())
diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm
index 8516ed98ea9..3f3d32d7bf4 100644
--- a/code/controllers/subsystem/minor_mapping.dm
+++ b/code/controllers/subsystem/minor_mapping.dm
@@ -11,7 +11,7 @@ SUBSYSTEM_DEF(minor_mapping)
return SS_INIT_NO_NEED
#else
trigger_migration(CONFIG_GET(number/mice_roundstart))
- place_satchels(satchel_amount = 10) //SKYRAT EDIT CHANGE - ORIGINAL : place_satchels(satchel_amount = 2)
+ place_satchels(satchel_amount = 10) //NOVA EDIT CHANGE - ORIGINAL : place_satchels(satchel_amount = 2)
return SS_INIT_SUCCESS
#endif // the mice are easily the bigger problem, but let's just avoid anything that could cause some bullshit.
diff --git a/code/controllers/subsystem/modular_computers.dm b/code/controllers/subsystem/modular_computers.dm
index ad0be83bb52..678b26d24a4 100644
--- a/code/controllers/subsystem/modular_computers.dm
+++ b/code/controllers/subsystem/modular_computers.dm
@@ -1,12 +1,15 @@
-///The maximum amount of logs that can be generated before they start overwriting eachother.
+s///The maximum amount of logs that can be generated before they start overwriting eachother.
#define MAX_LOG_COUNT 300
SUBSYSTEM_DEF(modular_computers)
name = "Modular Computers"
- flags = SS_NO_FIRE
- ///List of all ModPC logging
- var/list/logs = list()
+ wait = 1 MINUTES
+ runlevels = RUNLEVEL_GAME
+
+ ///List of all logs generated by ModPCs through the round.
+ ///Stops at MAX_LOG_COUNT and must be purged to keep logging.
+ var/list/modpc_logs = list()
///List of all programs available to download from the NTNet store.
var/list/available_station_software = list()
@@ -21,22 +24,105 @@ SUBSYSTEM_DEF(modular_computers)
var/intrusion_detection_alarm = FALSE
var/next_picture_id = 0
+ ///Lazylist of coupons used by the Coupon Master PDA app. e.g. "COUPONCODE25" = coupon_code
+ var/list/discount_coupons
+ ///When will the next coupon drop?
+ var/next_discount = 0
+
/datum/controller/subsystem/modular_computers/Initialize()
build_software_lists()
initialized = TRUE
return SS_INIT_SUCCESS
+/datum/controller/subsystem/modular_computers/fire(resumed = FALSE)
+ if(discount_coupons && world.time >= next_discount)
+ announce_coupon()
+
+///Generate new coupon codes that can be redeemed with the Coupon Master App
+/datum/controller/subsystem/modular_computers/proc/announce_coupon()
+ //If there's no way to announce the coupon, we may as well skip it.
+ if(!length(GLOB.announcement_systems))
+ return
+ var/obj/machinery/announcement_system/announcement_system = pick(GLOB.announcement_systems)
+
+ var/static/list/discounts = list("0.10" = 7, "0.15" = 16, "0.20" = 20, "0.25" = 16, "0.50" = 8, "0.66" = 1)
+ var/static/list/flash_discounts = list("0.30" = 3, "0.40" = 8, "0.50" = 8, "0.66" = 2, "0.75" = 1)
+ ///Eliminates non-alphanumeri characters, as well as the word "Single-Pack" or "Pack" or "Crate" from the coupon code
+ var/static/regex/strip_pack_name = regex("\[^a-zA-Z0-9]|(Single-)?Pack|Crate", "g")
+
+ var/datum/supply_pack/discounted_pack = pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)])
+ var/pack_name = initial(discounted_pack.name)
+ var/chosen_discount
+ var/expires_in = 0
+ if(prob(75))
+ chosen_discount = text2num(pick_weight(discounts))
+ if(prob(20))
+ expires_in = rand(8,10)
+ else
+ chosen_discount = text2num(pick_weight(flash_discounts))
+ expires_in = rand(2, 4)
+ var/coupon_code = "[uppertext(strip_pack_name.Replace(pack_name, ""))][chosen_discount*100]"
+
+ var/list/targets = list()
+ for (var/messenger_ref in GLOB.pda_messengers)
+ var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref]
+ if(locate(/datum/computer_file/program/coupon) in messenger?.computer.stored_files)
+ targets += messenger
+
+ ///Don't go any further if the same coupon code has been done alrady or if there's no recipient for the 'promo'.
+ if((coupon_code in discount_coupons) || !length(targets))
+ return
+
+ var/datum/coupon_code/coupon = new(chosen_discount, discounted_pack, expires_in)
+
+ discount_coupons[coupon_code] = coupon
+
+ ///pda message code here
+ var/static/list/promo_messages = list(
+ "A new discount has dropped for %GOODY: %DISCOUNT.",
+ "Check this new offer out: %GOODY, now %DISCOUNT off.",
+ "Now on sales: %GOODY, at %DISCOUNT discount!",
+ "This item is now on sale (%DISCOUNT off): %GOODY.",
+ "Would you look at that! A %DISCOUNT discount on %GOODY!",
+ "Exclusive offer for %GOODY. Only %DISCOUNT! Get it now:",
+ "%GOODY is now %DISCOUNT off.",
+ "*RING* A new discount has dropped: %GOODY, %DISCOUNT off.",
+ "%GOODY - %DISCOUNT off."
+ )
+ var/static/list/code_messages = list(
+ "Here's the code",
+ "Use this code to redeem it",
+ "Open the app to redeem it",
+ "Code",
+ "Redeem it now",
+ "Buy it now",
+ )
+
+ var/chosen_promo_message = replacetext(replacetext(pick(promo_messages), "%GOODY", pack_name), "%DISCOUNT", "[chosen_discount*100]%")
+ var/datum/signal/subspace/messaging/tablet_message/signal = new(announcement_system, list(
+ "fakename" = "Coupon Master",
+ "fakejob" = "Goodies Promotion",
+ "message" = "[chosen_promo_message] [pick(code_messages)]: [coupon_code][expires_in ? " (EXPIRES IN [expires_in] MINUTES)" : ""].",
+ "targets" = targets,
+ "automated" = TRUE,
+ ))
+
+ signal.send_to_receivers()
+
+ next_discount = world.time + rand(3, 5) MINUTES
+
+
///Finds all downloadable programs and adds them to their respective downloadable list.
/datum/controller/subsystem/modular_computers/proc/build_software_lists()
for(var/datum/computer_file/program/prog as anything in subtypesof(/datum/computer_file/program))
// Has no TGUI file so is not meant to be a downloadable thing.
- if(!initial(prog.tgui_id))
+ if(!initial(prog.tgui_id) || !initial(prog.filename))
continue
prog = new prog
- if(prog.available_on_ntnet)
+ if(prog.program_flags & PROGRAM_ON_NTNET_STORE)
available_station_software.Add(prog)
- if(prog.available_on_syndinet)
+ if(prog.program_flags & PROGRAM_ON_SYNDINET_STORE)
available_antag_software.Add(prog)
///Attempts to find a new file through searching the available stores with its name.
@@ -65,17 +151,17 @@ SUBSYSTEM_DEF(modular_computers)
log_text += log_string
log_string = log_text.Join()
- logs.Add(log_string)
+ modpc_logs.Add(log_string)
// We have too many logs, remove the oldest entries until we get into the limit
- if(logs.len > MAX_LOG_COUNT)
- logs = logs.Copy(logs.len - MAX_LOG_COUNT, 0)
+ if(modpc_logs.len > MAX_LOG_COUNT)
+ modpc_logs = modpc_logs.Copy(modpc_logs.len - MAX_LOG_COUNT, 0)
/**
* Removes all station logs and leaves it with an alert that it's been wiped.
*/
/datum/controller/subsystem/modular_computers/proc/purge_logs()
- logs = list()
+ modpc_logs = list()
add_log("-!- LOGS DELETED BY SYSTEM OPERATOR -!-")
/**
diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm
index de8e4531236..bf4b6a43029 100644
--- a/code/controllers/subsystem/movement/movement_types.dm
+++ b/code/controllers/subsystem/movement/movement_types.dm
@@ -323,6 +323,7 @@
turf/avoid,
skip_first,
subsystem,
+ diagonal_handling,
priority,
flags,
datum/extra_info,
@@ -343,6 +344,7 @@
simulated_only,
avoid,
skip_first,
+ diagonal_handling,
initial_path)
/datum/move_loop/has_target/jps
@@ -360,6 +362,8 @@
var/turf/avoid
///Should we skip the first step? This is the tile we're currently on, which breaks some things
var/skip_first
+ ///Whether we replace diagonal movements with cardinal movements or follow through with them
+ var/diagonal_handling
///A list for the path we're currently following
var/list/movement_path
///Cooldown for repathing, prevents spam
@@ -373,7 +377,7 @@
. = ..()
on_finish_callbacks += CALLBACK(src, PROC_REF(on_finish_pathing))
-/datum/move_loop/has_target/jps/setup(delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, list/initial_path)
+/datum/move_loop/has_target/jps/setup(delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, diagonal_handling, list/initial_path)
. = ..()
if(!.)
return
@@ -384,6 +388,7 @@
src.simulated_only = simulated_only
src.avoid = avoid
src.skip_first = skip_first
+ src.diagonal_handling = diagonal_handling
movement_path = initial_path?.Copy()
/datum/move_loop/has_target/jps/compare_loops(datum/move_loop/loop_type, priority, flags, extra_info, delay, timeout, atom/chasing, repath_delay, max_path_length, minimum_distance, list/access, simulated_only, turf/avoid, skip_first, initial_path)
@@ -410,7 +415,7 @@
if(!COOLDOWN_FINISHED(src, repath_cooldown))
return
COOLDOWN_START(src, repath_cooldown, repath_delay)
- if(SSpathfinder.pathfind(moving, target, max_path_length, minimum_distance, access, simulated_only, avoid, skip_first, on_finish = on_finish_callbacks))
+ if(SSpathfinder.pathfind(moving, target, max_path_length, minimum_distance, access, simulated_only, avoid, skip_first, diagonal_handling, on_finish = on_finish_callbacks))
is_pathing = TRUE
SEND_SIGNAL(src, COMSIG_MOVELOOP_JPS_REPATH)
@@ -418,6 +423,7 @@
/datum/move_loop/has_target/jps/proc/on_finish_pathing(list/path)
movement_path = path
is_pathing = FALSE
+ SEND_SIGNAL(src, COMSIG_MOVELOOP_JPS_FINISHED_PATHING, path)
/datum/move_loop/has_target/jps/move()
if(!length(movement_path))
diff --git a/code/controllers/subsystem/persistence/_persistence.dm b/code/controllers/subsystem/persistence/_persistence.dm
index 565cf519d4b..fbc094f5b53 100644
--- a/code/controllers/subsystem/persistence/_persistence.dm
+++ b/code/controllers/subsystem/persistence/_persistence.dm
@@ -20,8 +20,23 @@ SUBSYSTEM_DEF(persistence)
var/list/blocked_maps = list()
var/list/saved_trophies = list()
var/list/picture_logging_information = list()
- var/list/obj/structure/sign/picture_frame/photo_frames
- var/list/obj/item/storage/photo_album/photo_albums
+
+ /// A json_database linking to data/photo_frames.json.
+ /// Schema is persistence_id => array of photo names.
+ var/datum/json_database/photo_frames_database
+
+ /// A lazy list of every picture frame that is going to be loaded with persistent photos.
+ /// Will be null'd once the persistence system initializes, and never read from again.
+ var/list/obj/structure/sign/picture_frame/queued_photo_frames
+
+ /// A json_database linking to data/photo_albums.json.
+ /// Schema is persistence_id => array of photo names.
+ var/datum/json_database/photo_albums_database
+
+ /// A lazy list of every photo album that is going to be loaded with persistent photos.
+ /// Will be null'd once the persistence system initializes, and never read from again.
+ var/list/obj/item/storage/photo_album/queued_photo_albums
+
var/rounds_since_engine_exploded = 0
var/delam_highscore = 0
var/tram_hits_this_round = 0
@@ -37,7 +52,7 @@ SUBSYSTEM_DEF(persistence)
load_randomized_recipes()
load_custom_outfits()
load_delamination_counter()
- load_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER
+ load_panic_bunker() //NOVA EDIT ADDITION - PANICBUNKER
load_tram_counter()
load_adventures()
return SS_INIT_SUCCESS
@@ -48,17 +63,16 @@ SUBSYSTEM_DEF(persistence)
save_prisoner_tattoos()
collect_trophies()
collect_maps()
- save_photo_persistence() //THIS IS PERSISTENCE, NOT THE LOGGING PORTION.
save_randomized_recipes()
save_scars()
save_custom_outfits()
- save_modular_persistence() // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE
+ save_modular_persistence() // NOVA EDIT ADDITION - MODULAR_PERSISTENCE
save_delamination_counter()
if(SStransport.can_fire)
for(var/datum/transport_controller/linear/tram/transport as anything in SStransport.transports_by_type[TRANSPORT_TYPE_TRAM])
save_tram_history(transport.specific_transport_id)
save_tram_counter()
- save_panic_bunker() //SKYRAT EDIT ADDITION - PANICBUNKER
+ save_panic_bunker() //NOVA EDIT ADDITION - PANICBUNKER
///Loads up Poly's speech buffer.
/datum/controller/subsystem/persistence/proc/load_poly()
diff --git a/code/controllers/subsystem/persistence/photo_albums.dm b/code/controllers/subsystem/persistence/photo_albums.dm
index 3aee856b2c2..90c8ec31ac1 100644
--- a/code/controllers/subsystem/persistence/photo_albums.dm
+++ b/code/controllers/subsystem/persistence/photo_albums.dm
@@ -1,15 +1,3 @@
-///Loads up the photo album source file.
-/datum/controller/subsystem/persistence/proc/get_photo_albums()
- var/album_path = file("data/photo_albums.json")
- if(fexists(album_path))
- return json_decode(file2text(album_path))
-
-///Loads up the photo frames source file.
-/datum/controller/subsystem/persistence/proc/get_photo_frames()
- var/frame_path = file("data/photo_frames.json")
- if(fexists(frame_path))
- return json_decode(file2text(frame_path))
-
/// Removes the identifier of a persistent photo frame from the json.
/datum/controller/subsystem/persistence/proc/remove_photo_frames(identifier)
var/frame_path = file("data/photo_frames.json")
@@ -25,62 +13,23 @@
///Loads photo albums, and populates them; also loads and applies frames to picture frames.
/datum/controller/subsystem/persistence/proc/load_photo_persistence()
- var/album_path = file("data/photo_albums.json")
- var/frame_path = file("data/photo_frames.json")
- if(fexists(album_path))
- var/list/json = json_decode(file2text(album_path))
- if(json.len)
- for(var/i in photo_albums)
- var/obj/item/storage/photo_album/A = i
- if(!A.persistence_id)
- continue
- if(json[A.persistence_id])
- A.populate_from_id_list(json[A.persistence_id])
-
- if(fexists(frame_path))
- var/list/json = json_decode(file2text(frame_path))
- if(json.len)
- for(var/i in photo_frames)
- var/obj/structure/sign/picture_frame/PF = i
- if(!PF.persistence_id)
- continue
- if(json[PF.persistence_id])
- PF.load_from_id(json[PF.persistence_id])
-
-///Saves the contents of photo albums and the picture frames.
-/datum/controller/subsystem/persistence/proc/save_photo_persistence()
- var/album_path = file("data/photo_albums.json")
- var/frame_path = file("data/photo_frames.json")
-
- var/list/frame_json = list()
- var/list/album_json = list()
-
- if(fexists(album_path))
- album_json = json_decode(file2text(album_path))
- fdel(album_path)
-
- for(var/i in photo_albums)
- var/obj/item/storage/photo_album/A = i
- if(!istype(A) || !A.persistence_id)
+ photo_albums_database = new("data/photo_albums.json")
+ for (var/obj/item/storage/photo_album/album as anything in queued_photo_albums)
+ if (isnull(album.persistence_id))
continue
- var/list/L = A.get_picture_id_list()
- album_json[A.persistence_id] = L
-
- album_json = json_encode(album_json)
-
- WRITE_FILE(album_path, album_json)
- if(fexists(frame_path))
- frame_json = json_decode(file2text(frame_path))
- fdel(frame_path)
+ var/album_data = photo_albums_database.get_key(album.persistence_id)
+ if (!isnull(album_data))
+ album.populate_from_id_list(album_data)
- for(var/i in photo_frames)
- var/obj/structure/sign/picture_frame/F = i
- if(!istype(F) || !F.persistence_id)
+ photo_frames_database = new("data/photo_frames.json")
+ for (var/obj/structure/sign/picture_frame/frame as anything in queued_photo_frames)
+ if (isnull(frame.persistence_id))
continue
- frame_json[F.persistence_id] = F.get_photo_id()
- frame_json = json_encode(frame_json)
-
- WRITE_FILE(frame_path, frame_json)
+ var/frame_data = photo_frames_database.get_key(frame.persistence_id)
+ if (!isnull(frame_data))
+ frame.load_from_id(frame_data)
+ queued_photo_albums = null
+ queued_photo_frames = null
diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm
new file mode 100644
index 00000000000..1eab3fb8f0d
--- /dev/null
+++ b/code/controllers/subsystem/polling.dm
@@ -0,0 +1,234 @@
+SUBSYSTEM_DEF(polling)
+ name = "Polling"
+ flags = SS_BACKGROUND | SS_NO_INIT
+ wait = 1 SECONDS
+ runlevels = RUNLEVEL_GAME
+ /// List of polls currently ongoing, to be checked on next fire()
+ var/list/datum/candidate_poll/currently_polling
+ /// Number of polls performed since the start
+ var/total_polls = 0
+
+/datum/controller/subsystem/polling/fire()
+ if(!currently_polling) // if polls_active is TRUE then this shouldn't happen, but still..
+ currently_polling = list()
+
+ for(var/datum/candidate_poll/running_poll as anything in currently_polling)
+ if(running_poll.time_left() <= 0)
+ polling_finished(running_poll)
+
+/datum/controller/subsystem/polling/proc/poll_candidates(question, role, check_jobban, poll_time = 30 SECONDS, ignore_category = null, flash_window = TRUE, list/group = null, pic_source, role_name_text)
+ if(group.len == 0)
+ return list()
+ if(role && !role_name_text)
+ role_name_text = role
+ if(role_name_text && !question)
+ question = "Do you want to play as [full_capitalize(role_name_text)]?"
+ if(!question)
+ question = "Do you want to play as a special role?"
+ log_game("Polling candidates [role_name_text ? "for [role_name_text]" : "\"[question]\""] for [DisplayTimeText(poll_time)] seconds")
+
+ // Start firing
+ total_polls++
+
+ var/jumpable = isatom(pic_source) ? pic_source : null
+
+ var/datum/candidate_poll/new_poll = new(role_name_text, question, poll_time, ignore_category, jumpable)
+ LAZYADD(currently_polling, new_poll)
+
+ var/category = "[new_poll.poll_key]_poll_alert"
+
+ for(var/mob/candidate_mob as anything in group)
+ if(!candidate_mob.client)
+ continue
+ // Universal opt-out for all players.
+ if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles)))
+ continue
+ // Opt-out for admins whom are currently adminned.
+ if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder)
+ continue
+ if(!is_eligible(candidate_mob, role, check_jobban, ignore_category))
+ continue
+
+ SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg')
+ if(flash_window)
+ window_flash(candidate_mob.client)
+
+ // If we somehow send two polls for the same mob type, but with a duration on the second one shorter than the time left on the first one,
+ // we need to keep the first one's timeout rather than use the shorter one
+ var/atom/movable/screen/alert/poll_alert/current_alert = LAZYACCESS(candidate_mob.alerts, category)
+ var/alert_time = poll_time
+ var/datum/candidate_poll/alert_poll = new_poll
+ if(current_alert && current_alert.timeout > (world.time + poll_time - world.tick_lag))
+ alert_time = current_alert.timeout - world.time + world.tick_lag
+ alert_poll = current_alert.poll
+
+ // Send them an on-screen alert
+ var/atom/movable/screen/alert/poll_alert/poll_alert_button = candidate_mob.throw_alert(category, /atom/movable/screen/alert/poll_alert, timeout_override = alert_time, no_anim = TRUE)
+ if(!poll_alert_button)
+ continue
+
+ new_poll.alert_buttons += poll_alert_button
+ new_poll.RegisterSignal(poll_alert_button, COMSIG_QDELETING, TYPE_PROC_REF(/datum/candidate_poll, clear_alert_ref))
+
+ poll_alert_button.icon = ui_style2icon(candidate_mob.client?.prefs?.read_preference(/datum/preference/choiced/ui_style))
+ poll_alert_button.desc = "[question]"
+ poll_alert_button.show_time_left = TRUE
+ poll_alert_button.poll = alert_poll
+ poll_alert_button.set_role_overlay()
+ poll_alert_button.update_stacks_overlay()
+
+
+ // Sign up inheritance and stacking
+ for(var/datum/candidate_poll/other_poll as anything in currently_polling)
+ if(new_poll == other_poll || new_poll.poll_key != other_poll.poll_key)
+ continue
+ // If there's already a poll for an identical mob type ongoing and the client is signed up for it, sign them up for this one
+ if((candidate_mob in other_poll.signed_up) && new_poll.sign_up(candidate_mob, TRUE))
+ break
+
+ // Image to display
+ var/image/poll_image
+ if(pic_source)
+ if(!ispath(pic_source))
+ var/atom/the_pic_source = pic_source
+ var/old_layer = the_pic_source.layer
+ var/old_plane = the_pic_source.plane
+ the_pic_source.plane = poll_alert_button.plane
+ the_pic_source.layer = FLOAT_LAYER
+ poll_alert_button.add_overlay(the_pic_source)
+ the_pic_source.layer = old_layer
+ the_pic_source.plane = old_plane
+ else
+ poll_image = image(pic_source, layer = FLOAT_LAYER)
+ else
+ // Just use a generic image
+ poll_image = image('icons/effects/effects.dmi', icon_state = "static", layer = FLOAT_LAYER)
+
+ if(poll_image)
+ poll_image.plane = poll_alert_button.plane
+ poll_alert_button.add_overlay(poll_image)
+
+ // Chat message
+ var/act_jump = ""
+ if(isatom(pic_source) && isobserver(candidate_mob))
+ act_jump = "\[Teleport] "
+ var/act_signup = "\[Sign Up] "
+ var/act_never = ""
+ if(ignore_category)
+ act_never = "\[Never For This Round] "
+ to_chat(candidate_mob, span_boldnotice(examine_block("Now looking for candidates [role_name_text ? "to play as \an [role_name_text]." : "\"[question]\""] [act_jump] [act_signup] [act_never]")))
+
+ // Start processing it so it updates visually the timer
+ START_PROCESSING(SSprocessing, poll_alert_button)
+
+ // Sleep until the time is up
+ UNTIL(new_poll.finished)
+ return new_poll.signed_up
+
+/datum/controller/subsystem/polling/proc/poll_ghost_candidates(question, role, check_jobban, poll_time = 30 SECONDS, ignore_category = null, flashwindow = TRUE, pic_source, role_name_text)
+ var/list/candidates = list()
+ if(!(GLOB.ghost_role_flags & GHOSTROLE_STATION_SENTIENCE))
+ return candidates
+
+ for(var/mob/dead/observer/ghost_player in GLOB.player_list)
+ candidates += ghost_player
+
+ return poll_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, candidates, pic_source, role_name_text)
+
+/datum/controller/subsystem/polling/proc/poll_ghost_candidates_for_mob(question, role, check_jobban, poll_time = 30 SECONDS, mob/target_mob, ignore_category = null, flashwindow = TRUE, pic_source, role_name_text)
+ var/static/list/mob/currently_polling_mobs = list()
+
+ if(currently_polling_mobs.Find(target_mob))
+ return list()
+
+ currently_polling_mobs += target_mob
+
+ var/list/possible_candidates = poll_ghost_candidates(question, role, check_jobban, poll_time, ignore_category, flashwindow, pic_source, role_name_text)
+
+ currently_polling_mobs -= target_mob
+ if(!target_mob || QDELETED(target_mob) || !target_mob.loc)
+ return list()
+
+ return possible_candidates
+
+/datum/controller/subsystem/polling/proc/poll_ghost_candidates_for_mobs(question, role, check_jobban, poll_time = 30 SECONDS, list/mobs, ignore_category = null, pic_source, role_name_text)
+ var/list/candidate_list = poll_ghost_candidates(question, role, check_jobban, poll_time, ignore_category, pic_source, role_name_text)
+
+ for(var/mob/potential_mob as anything in mobs)
+ if(QDELETED(potential_mob) || !potential_mob.loc)
+ mobs -= potential_mob
+
+ if(!length(mobs))
+ return list()
+
+ return candidate_list
+
+/datum/controller/subsystem/polling/proc/is_eligible(mob/potential_candidate, role, check_jobban, the_ignore_category)
+ if(isnull(potential_candidate.key) || isnull(potential_candidate.client))
+ return FALSE
+ if(the_ignore_category)
+ if(potential_candidate.ckey in GLOB.poll_ignore[the_ignore_category])
+ return FALSE
+ // NOVA EDIT ADDITION BEGIN
+ if(is_banned_from(potential_candidate.ckey, BAN_GHOST_TAKEOVER) || is_banned_from(potential_candidate.ckey, BAN_ANTAGONIST))
+ to_chat(potential_candidate, "There was a ghost prompt for: [role], unfortunately you are banned from ghost takeovers.")
+ return FALSE
+ // NOVA EDIT ADDITION END
+ if(role)
+ if(!(role in potential_candidate.client.prefs.be_special))
+ return FALSE
+ var/required_time = GLOB.special_roles[role] || 0
+ if(potential_candidate.client && potential_candidate.client.get_remaining_days(required_time) > 0)
+ return FALSE
+
+ if(check_jobban)
+ if(is_banned_from(potential_candidate.ckey, list(check_jobban, ROLE_SYNDICATE)))
+ return FALSE
+
+ return TRUE
+
+/datum/controller/subsystem/polling/proc/polling_finished(datum/candidate_poll/finishing_poll)
+ currently_polling -= finishing_poll
+ // Trim players who aren't eligible anymore
+ var/length_pre_trim = length(finishing_poll.signed_up)
+ finishing_poll.trim_candidates()
+ log_game("Candidate poll [finishing_poll.role ? "for [finishing_poll.role]" : "\"[finishing_poll.question]\""] finished. [length_pre_trim] players signed up, [length(finishing_poll.signed_up)] after trimming")
+ finishing_poll.finished = TRUE
+
+ // Take care of updating the remaining screen alerts if a similar poll is found, or deleting them.
+ if(length(finishing_poll.alert_buttons))
+ var/polls_of_same_type_left = FALSE
+ for(var/datum/candidate_poll/running_poll as anything in currently_polling)
+ if(running_poll.poll_key == finishing_poll.poll_key && running_poll.time_left() > 0)
+ polls_of_same_type_left = TRUE
+ break
+ for(var/atom/movable/screen/alert/poll_alert/alert as anything in finishing_poll.alert_buttons)
+ if(polls_of_same_type_left)
+ alert.update_stacks_overlay()
+ else
+ alert.owner.clear_alert("[finishing_poll.poll_key]_poll_alert")
+
+ //More than enough time for the the `UNTIL()` stopping loop in `poll_candidates()` to be over, and the results to be turned in.
+ QDEL_IN(finishing_poll, 0.5 SECONDS)
+
+/datum/controller/subsystem/polling/stat_entry(msg)
+ msg += "Active: [length(currently_polling)] | Total: [total_polls]"
+ var/datum/candidate_poll/soonest_to_complete = get_next_poll_to_finish()
+ if(soonest_to_complete)
+ msg += " | Next: [DisplayTimeText(soonest_to_complete.time_left())] ([length(soonest_to_complete.signed_up)] candidates)"
+ return ..()
+
+/datum/controller/subsystem/polling/proc/get_next_poll_to_finish()
+ var/lowest_time_left = INFINITY
+ var/next_poll_to_finish
+ for(var/datum/candidate_poll/poll as anything in currently_polling)
+ var/time_left = poll.time_left()
+ if(time_left >= lowest_time_left)
+ continue
+ lowest_time_left = time_left
+ next_poll_to_finish = poll
+
+ if(isnull(next_poll_to_finish))
+ return FALSE
+
+ return next_poll_to_finish
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index f6a47fc7f8a..fd77c26c634 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -12,10 +12,10 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/item_quirk/clown_enjoyer, /datum/quirk/item_quirk/mime_fan, /datum/quirk/item_quirk/pride_pin),
list(/datum/quirk/bad_touch, /datum/quirk/friendly),
list(/datum/quirk/extrovert, /datum/quirk/introvert),
- list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/body_purist),
+ list(/datum/quirk/prosthetic_limb, /datum/quirk/quadruple_amputee, /datum/quirk/transhumanist, /datum/quirk/body_purist),
list(/datum/quirk/prosthetic_organ, /datum/quirk/tin_man, /datum/quirk/body_purist),
list(/datum/quirk/quadruple_amputee, /datum/quirk/paraplegic, /datum/quirk/hemiplegic),
- //list(/datum/quirk/quadruple_amputee, /datum/quirk/frail), // SKYRAT EDIT REMOVAL- Since we have synth wounds now, frail has a large downside for prosthetics and such
+ //list(/datum/quirk/quadruple_amputee, /datum/quirk/frail), // NOVA EDIT REMOVAL- Since we have synth wounds now, frail has a large downside for prosthetics and such
list(/datum/quirk/social_anxiety, /datum/quirk/mute),
list(/datum/quirk/mute, /datum/quirk/softspoken),
list(/datum/quirk/poor_aim, /datum/quirk/bighands),
@@ -24,7 +24,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/photophobia, /datum/quirk/nyctophobia),
list(/datum/quirk/item_quirk/settler, /datum/quirk/freerunning),
list(/datum/quirk/numb, /datum/quirk/selfaware),
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
list(/datum/quirk/equipping/nerve_staple, /datum/quirk/nonviolent),
list(/datum/quirk/equipping/nerve_staple, /datum/quirk/item_quirk/nearsighted),
list(/datum/quirk/no_guns, /datum/quirk/bighands, /datum/quirk/poor_aim),
@@ -32,7 +32,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/spacer_born, /datum/quirk/oversized),
list(/datum/quirk/feline_aspect, /datum/quirk/item_quirk/canine, /datum/quirk/item_quirk/avian),
list(/datum/quirk/all_nighter, /datum/quirk/heavy_sleeper),
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
))
GLOBAL_LIST_INIT(quirk_string_blacklist, generate_quirk_string_blacklist())
@@ -83,13 +83,13 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
if(initial(quirk_type.abstract_parent_type) == type)
continue
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(initial(quirk_type.erp_quirk) && CONFIG_GET(flag/disable_erp_preferences))
continue
// Hidden quirks aren't visible to TGUI or the player
if (initial(quirk_type.hidden_quirk))
continue
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
quirks[initial(quirk_type.name)] = quirk_type
quirk_points[initial(quirk_type.name)] = initial(quirk_type.value)
@@ -106,7 +106,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
var/datum/quirk/quirk_type = quirks[quirk_name]
if(ispath(quirk_type))
if(user.add_quirk(quirk_type, override_client = applied_client))
- SSblackbox.record_feedback("nested tally", "quirks_taken", 1, list("[quirk_name]"))
+ SSblackbox.record_feedback("tally", "quirks_taken", 1, "[quirk_name]")
else
stack_trace("Invalid quirk \"[quirk_name]\" in client [applied_client.ckey] preferences")
applied_client.prefs.all_quirks -= quirk_name
@@ -181,18 +181,18 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
/// be valid.
/// If no changes need to be made, will return the same list.
/// Expects all quirk names to be unique, but makes no other expectations.
-/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks, list/augments) // SKYRAT EDIT - AUGMENTS+
+/datum/controller/subsystem/processing/quirks/proc/filter_invalid_quirks(list/quirks, list/augments) // NOVA EDIT - AUGMENTS+
var/list/new_quirks = list()
var/list/positive_quirks = list()
var/balance = 0
var/list/all_quirks = get_quirks()
- // SKYRAT EDIT BEGIN - AUGMENTS+
+ // NOVA EDIT BEGIN - AUGMENTS+
for(var/key in augments)
var/datum/augment_item/aug = GLOB.augment_items[augments[key]]
balance += aug.cost
- // SKYRAT EDIT END
+ // NOVA EDIT END
for (var/quirk_name in quirks)
var/datum/quirk/quirk = all_quirks[quirk_name]
if (isnull(quirk))
diff --git a/code/controllers/subsystem/processing/reagents.dm b/code/controllers/subsystem/processing/reagents.dm
index c4b86a23efc..20244c12bb5 100644
--- a/code/controllers/subsystem/processing/reagents.dm
+++ b/code/controllers/subsystem/processing/reagents.dm
@@ -18,7 +18,7 @@ PROCESSING_SUBSYSTEM_DEF(reagents)
//Build GLOB lists - see holder.dm
build_chemical_reactions_lists()
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(CONFIG_GET(flag/disable_erp_preferences))
for(var/reaction_path in GLOB.chemical_reactions_list)
var/datum/chemical_reaction/reaction_datum = GLOB.chemical_reactions_list[reaction_path]
@@ -29,7 +29,7 @@ PROCESSING_SUBSYSTEM_DEF(reagents)
var/list/reaction_list = GLOB.chemical_reactions_list_reactant_index[reaction]
if(reaction_list)
reaction_list -= reaction_datum
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
return SS_INIT_SUCCESS
/datum/controller/subsystem/processing/reagents/fire(resumed = FALSE)
diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm
index b1ebf3d586c..bb88e8d6824 100644
--- a/code/controllers/subsystem/shuttle.dm
+++ b/code/controllers/subsystem/shuttle.dm
@@ -147,10 +147,10 @@ SUBSYSTEM_DEF(shuttle)
while(length(pack_processing))
var/datum/supply_pack/pack = pack_processing[length(pack_processing)]
pack_processing.len--
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(pack == /datum/supply_pack/armament)
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(ispath(pack, /datum/supply_pack))
pack = new pack
@@ -279,7 +279,7 @@ SUBSYSTEM_DEF(shuttle)
priority_announce(
text = "Emergency shuttle uplink interference detected, shuttle call disabled while the system reinitializes. Estimated restore in [DisplayTimeText(lockout_timer, round_seconds_to = 60)].",
title = "Uplink Interference",
- sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
+ sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
sender_override = "Emergency Shuttle Uplink Alert",
color_override = "grey",
)
@@ -293,7 +293,7 @@ SUBSYSTEM_DEF(shuttle)
priority_announce(
text= "Emergency shuttle uplink services are now back online.",
title = "Uplink Restored",
- sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
+ sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
sender_override = "Emergency Shuttle Uplink Alert",
color_override = "green",
)
@@ -447,9 +447,9 @@ SUBSYSTEM_DEF(shuttle)
return
if(SEC_LEVEL_BLUE)
//if(emergency.timeLeft(1) < emergency_call_time * 0.5) ORIGINAL
- if(emergency.timeLeft(1) < emergency_call_time * 0.6) //SKYRAT EDIT CHANGE - ALERTS
+ if(emergency.timeLeft(1) < emergency_call_time * 0.6) //NOVA EDIT CHANGE - ALERTS
return
- //SKYRAT EDIT ADDITION BEGIN - ALERTS
+ //NOVA EDIT ADDITION BEGIN - ALERTS
if(SEC_LEVEL_ORANGE)
if(emergency.timeLeft(1) < emergency_call_time * 0.4)
return
@@ -459,7 +459,7 @@ SUBSYSTEM_DEF(shuttle)
if(SEC_LEVEL_AMBER)
if(emergency.timeLeft(1) < emergency_call_time * 0.4)
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else
if(emergency.timeLeft(1) < emergency_call_time * 0.25)
return
diff --git a/code/controllers/subsystem/spatial_gridmap.dm b/code/controllers/subsystem/spatial_gridmap.dm
index 64f7994a1fe..81ae29f6bad 100644
--- a/code/controllers/subsystem/spatial_gridmap.dm
+++ b/code/controllers/subsystem/spatial_gridmap.dm
@@ -44,7 +44,7 @@
client_contents = dummy_list
atmos_contents = dummy_list
-/datum/spatial_grid_cell/Destroy(force, ...)
+/datum/spatial_grid_cell/Destroy(force)
if(force)//the response to someone trying to qdel this is a right proper fuck you
stack_trace("dont try to destroy spatial grid cells without a good reason. if you need to do it use force")
return
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 3f155695257..d652df3a567 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -23,7 +23,7 @@ SUBSYSTEM_DEF(statpanels)
if (!resumed)
num_fires++
var/datum/map_config/cached = SSmapping.next_map_config
- /* SKYRAT EDIT CHANGE
+ /* NOVA EDIT CHANGE
global_data = list(
"Map: [SSmapping.config?.map_name || "Loading..."]",
cached ? "Next Map: [cached.map_name]" : null,
@@ -50,7 +50,7 @@ SUBSYSTEM_DEF(statpanels)
"Round Timer: [round_time > MIDNIGHT_ROLLOVER ? "[round(round_time/MIDNIGHT_ROLLOVER)]:[worldtime2text()]" : worldtime2text()]",
"Actual Round Timer: [time2text(real_round_time, "hh:mm:ss", 0)]"
)
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(SSshuttle.emergency)
var/ETA = SSshuttle.emergency.getModeStr()
@@ -341,7 +341,7 @@ SUBSYSTEM_DEF(statpanels)
. = ..()
src.parent = parent
-/datum/object_window_info/Destroy(force, ...)
+/datum/object_window_info/Destroy(force)
atoms_to_show = null
atoms_to_images = null
atoms_to_imagify = null
diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm
index 60c8ecbf84c..b391200d6cf 100644
--- a/code/controllers/subsystem/throwing.dm
+++ b/code/controllers/subsystem/throwing.dm
@@ -58,7 +58,7 @@ SUBSYSTEM_DEF(throwing)
///Turfs to travel per tick
var/speed
///If a mob is the one who has thrown the object, then it's moved here. This can be null and must be null checked before trying to use it.
- var/mob/thrower
+ var/datum/weakref/thrower
///A variable that helps in describing objects thrown at an angle, if it should be moved diagonally first or last.
var/diagonals_first
///Set to TRUE if the throw is exclusively diagonal (45 Degree angle throws for example)
@@ -101,7 +101,8 @@ SUBSYSTEM_DEF(throwing)
src.init_dir = init_dir
src.maxrange = maxrange
src.speed = speed
- src.thrower = thrower
+ if(thrower)
+ src.thrower = WEAKREF(thrower)
src.diagonals_first = diagonals_first
src.force = force
src.gentle = gentle
@@ -124,6 +125,12 @@ SUBSYSTEM_DEF(throwing)
qdel(src)
+/// Returns the mob thrower, or null
+/datum/thrownthing/proc/get_thrower()
+ . = thrower?.resolve()
+ if(isnull(.))
+ thrower = null
+
/datum/thrownthing/proc/tick()
var/atom/movable/AM = thrownthing
if (!isturf(AM.loc) || !AM.throwing)
@@ -135,10 +142,11 @@ SUBSYSTEM_DEF(throwing)
return
var/atom/movable/actual_target = initial_target?.resolve()
+ var/mob/mob_thrower = get_thrower()
if(dist_travelled) //to catch sneaky things moving on our tile while we slept
for(var/atom/movable/obstacle as anything in get_turf(thrownthing))
- if (obstacle == thrownthing || (obstacle == thrower && !ismob(thrownthing)))
+ if (obstacle == thrownthing || (obstacle == mob_thrower && !ismob(thrownthing)))
continue
if(ismob(obstacle) && thrownthing.pass_flags & PASSMOB && (obstacle != actual_target))
continue
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 97b2c85b2aa..75b51b2babc 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -20,8 +20,6 @@ SUBSYSTEM_DEF(ticker)
/// Boolean to track and check if our subsystem setup is done.
var/setup_done = FALSE
- var/datum/game_mode/mode = null
-
var/login_music //music played in pregame lobby
var/round_end_sound //music/jingle played when the world reboots
var/round_end_sound_sent = TRUE //If all clients have loaded it
@@ -69,9 +67,9 @@ SUBSYSTEM_DEF(ticker)
/// Why an emergency shuttle was called
var/emergency_reason
- var/real_round_start_time = 0 //SKYRAT EDIT ADDITION
+ var/real_round_start_time = 0 //NOVA EDIT ADDITION
- var/discord_alerted = FALSE //SKYRAT EDIT - DISCORD PING SPAM PREVENTION
+ var/discord_alerted = FALSE //NOVA EDIT - DISCORD PING SPAM PREVENTION
/datum/controller/subsystem/ticker/Initialize()
var/list/byond_sound_formats = list(
@@ -165,14 +163,14 @@ SUBSYSTEM_DEF(ticker)
to_chat(world, span_notice("Welcome to [station_name()]! "))
/* ORIGINAL:
send2chat("New round starting on [SSmapping.config.map_name]!", CONFIG_GET(string/channel_announce_new_game))
- */ // SKYRAT EDIT START - DISCORD SPAM PREVENTION
+ */ // NOVA EDIT START - DISCORD SPAM PREVENTION
if(!discord_alerted)
discord_alerted = TRUE
- send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles."), CONFIG_GET(string/channel_announce_new_game)) // SKYRAT EDIT - Role ping and round ID in game-alert
- // SKYRAT EDIT END
+ send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles."), CONFIG_GET(string/channel_announce_new_game)) // NOVA EDIT - Role ping and round ID in game-alert
+ // NOVA EDIT END
current_state = GAME_STATE_PREGAME
- SStitle.change_title_screen() //SKYRAT EDIT ADDITION - Title screen
- addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //SKYRAT EDIT ADDITION - Title screen
+ SStitle.change_title_screen() //NOVA EDIT ADDITION - Title screen
+ addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //NOVA EDIT ADDITION - Title screen
//Everyone who wants to be an observer is now spawned
SEND_SIGNAL(src, COMSIG_TICKER_ENTER_PREGAME)
fire()
@@ -205,7 +203,7 @@ SUBSYSTEM_DEF(ticker)
SEND_SIGNAL(src, COMSIG_TICKER_ENTER_SETTING_UP)
current_state = GAME_STATE_SETTING_UP
Master.SetRunLevel(RUNLEVEL_SETUP)
- SSevents.reschedule() // SKYRAT EDIT ADDITION
+ SSevents.reschedule() // NOVA EDIT ADDITION
if(start_immediately)
fire()
@@ -219,10 +217,9 @@ SUBSYSTEM_DEF(ticker)
SEND_SIGNAL(src, COMSIG_TICKER_ERROR_SETTING_UP)
if(GAME_STATE_PLAYING)
- mode.process(wait * 0.1)
check_queue()
- if(!roundend_check_paused && (mode.check_finished() || force_ending))
+ if(!roundend_check_paused && (check_finished() || force_ending))
current_state = GAME_STATE_FINISHED
toggle_ooc(TRUE) // Turn it on
toggle_dooc(TRUE)
@@ -230,17 +227,27 @@ SUBSYSTEM_DEF(ticker)
check_maprotate()
Master.SetRunLevel(RUNLEVEL_POSTGAME)
+/// Checks if the round should be ending, called every ticker tick
+/datum/controller/subsystem/ticker/proc/check_finished()
+ if(!setup_done)
+ return FALSE
+ if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME))
+ return TRUE
+ if(GLOB.station_was_nuked)
+ return TRUE
+ if(GLOB.revolutionary_win)
+ return TRUE
+ return FALSE
+
/datum/controller/subsystem/ticker/proc/setup()
to_chat(world, span_boldannounce("Starting game..."))
var/init_start = world.timeofday
- mode = new /datum/game_mode/dynamic
-
CHECK_TICK
- //Configure mode and assign player to special mode stuff
- var/can_continue = 0
- can_continue = src.mode.pre_setup() //Choose antagonists
+ //Configure mode and assign player to antagonists
+ var/can_continue = FALSE
+ can_continue = SSdynamic.pre_setup() //Choose antagonists
CHECK_TICK
can_continue = can_continue && SSjob.DivideOccupations() //Distribute jobs
CHECK_TICK
@@ -248,7 +255,6 @@ SUBSYSTEM_DEF(ticker)
if(!GLOB.Debug2)
if(!can_continue)
log_game("Game failed pre_setup")
- QDEL_NULL(mode)
to_chat(world, "Error setting up game. Reverting to pre-game lobby.")
SSjob.ResetOccupations()
return FALSE
@@ -284,14 +290,14 @@ SUBSYSTEM_DEF(ticker)
round_start_time = world.time //otherwise round_start_time would be 0 for the signals
SEND_SIGNAL(src, COMSIG_TICKER_ROUND_STARTING, world.time)
- real_round_start_time = REALTIMEOFDAY //SKYRAT EDIT ADDITION
- SSautotransfer.new_shift(real_round_start_time) //SKYRAT EDIT ADDITION
+ real_round_start_time = REALTIMEOFDAY //NOVA EDIT ADDITION
+ SSautotransfer.new_shift(real_round_start_time) //NOVA EDIT ADDITION
log_world("Game start took [(world.timeofday - init_start)/10]s")
INVOKE_ASYNC(SSdbcore, TYPE_PROC_REF(/datum/controller/subsystem/dbcore,SetRoundStart))
to_chat(world, span_notice("Welcome to [station_name()], enjoy your stay! "))
- alert_sound_to_playing(sound(SSstation.announcer.get_rand_welcome_sound())) //SKYRAT EDIT CHANGE
+ alert_sound_to_playing(sound(SSstation.announcer.get_rand_welcome_sound())) //NOVA EDIT CHANGE
current_state = GAME_STATE_PLAYING
Master.SetRunLevel(RUNLEVEL_GAME)
@@ -308,7 +314,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/PostSetup()
set waitfor = FALSE
- mode.post_setup()
+ SSdynamic.post_setup()
GLOB.start_state = new /datum/station_state()
GLOB.start_state.count()
@@ -332,7 +338,7 @@ SUBSYSTEM_DEF(ticker)
iter_human.increment_scar_slot()
iter_human.load_persistent_scars()
- SSpersistence.load_modular_persistence(iter_human.get_organ_slot(ORGAN_SLOT_BRAIN)) // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE
+ SSpersistence.load_modular_persistence(iter_human.get_organ_slot(ORGAN_SLOT_BRAIN)) // NOVA EDIT ADDITION - MODULAR_PERSISTENCE
if(!iter_human.hardcore_survival_score)
continue
@@ -366,11 +372,11 @@ SUBSYSTEM_DEF(ticker)
GLOB.joined_player_list += player.ckey
var/atom/destination = player.mind.assigned_role.get_roundstart_spawn_point()
if(!destination) // Failed to fetch a proper roundstart location, won't be going anywhere.
- player.show_title_screen() //SKYRAT EDIT CHANGE
+ player.show_title_screen() //NOVA EDIT CHANGE
continue
player.create_character(destination)
else
- player.show_title_screen() //SKYRAT EDIT ADDITION
+ player.show_title_screen() //NOVA EDIT ADDITION
CHECK_TICK
@@ -443,13 +449,13 @@ SUBSYSTEM_DEF(ticker)
new_player_mob.client.prefs.hardcore_random_setup(new_player_living)
SSquirks.AssignQuirks(new_player_living, new_player_mob.client)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(ishuman(new_player_living))
for(var/datum/loadout_item/item as anything in loadout_list_to_datums(new_player_mob.client?.prefs?.loadout_list))
if (item.restricted_roles && length(item.restricted_roles) && !(player_assigned_role.title in item.restricted_roles))
continue
item.post_equip_item(new_player_mob.client?.prefs, new_player_living)
- //SKYRAT EDIT END
+ //NOVA EDIT END
CHECK_TICK
if(captainless)
@@ -554,7 +560,6 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/Recover()
current_state = SSticker.current_state
force_ending = SSticker.force_ending
- mode = SSticker.mode
login_music = SSticker.login_music
round_end_sound = SSticker.round_end_sound
@@ -591,7 +596,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/send_news_report()
var/news_message
var/news_source = "Nanotrasen News Network"
- var/decoded_station_name = html_decode(CONFIG_GET(string/cross_comms_name)) //decode station_name to avoid minor_announce double encode // SKYRAT EDIT: CROSS COMMS CONFIG
+ var/decoded_station_name = html_decode(CONFIG_GET(string/cross_comms_name)) //decode station_name to avoid minor_announce double encode // NOVA EDIT: CROSS COMMS CONFIG
switch(news_report)
// The nuke was detonated on the syndicate recon outpost
@@ -682,24 +687,24 @@ SUBSYSTEM_DEF(ticker)
news_message = "Officials are advising nearby colonies about a newly declared exclusion zone in \
the sector surrounding [decoded_station_name]."
- //SKYRAT EDIT - START
+ //NOVA EDIT - START
if(SSblackbox.first_death)
var/list/ded = SSblackbox.first_death
if(ded.len)
news_message += " NT Sanctioned Psykers picked up faint traces of someone near the station, allegedly having had died. Their name was: [ded["name"]], [ded["role"]], at [ded["area"]].[ded["last_words"] ? " Their last words were: \"[ded["last_words"]]\"" : ""]" // " // An Extra quote and comment because highlighting goes weird
else
news_message += " NT Sanctioned Psykers proudly confirm reports that nobody died this shift!"
- //SKYRAT EDIT - END
+ //NOVA EDIT - END
- if(news_message && length(CONFIG_GET(keyed_list/cross_server))) //SKYRAT EDIT - CONFIG CHECK MOVED FROM ROUNDEND.DM
- news_message += " (Shift on [CONFIG_GET(string/cross_server_name)] ending!)" //SKYRAT EDIT ADDITION
+ if(news_message && length(CONFIG_GET(keyed_list/cross_server))) //NOVA EDIT - CONFIG CHECK MOVED FROM ROUNDEND.DM
+ news_message += " (Shift on [CONFIG_GET(string/cross_server_name)] ending!)" //NOVA EDIT ADDITION
send2otherserver(news_source, news_message,"News_Report")
- //SKYRAT EDIT - START
+ //NOVA EDIT - START
if(news_message)
return news_message
else
return "We regret to inform you that shit be whack, yo. None of our reporters have any idea of what may or may not have gone on."
- //SKYRAT EDIT - END
+ //NOVA EDIT - END
/datum/controller/subsystem/ticker/proc/GetTimeLeft()
if(isnull(SSticker.timeLeft))
diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm
index 1fb7944191d..93b684e7526 100644
--- a/code/controllers/subsystem/title.dm
+++ b/code/controllers/subsystem/title.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
SUBSYSTEM_DEF(title)
name = "Title Screen"
flags = SS_NO_FIRE
diff --git a/code/datums/achievements/job_achievements.dm b/code/datums/achievements/job_achievements.dm
index 10835b895b8..6aafbee8e68 100644
--- a/code/datums/achievements/job_achievements.dm
+++ b/code/datums/achievements/job_achievements.dm
@@ -24,12 +24,6 @@
database_id = MEDAL_HELBITALJANKEN
icon = "helbital"
-/datum/award/achievement/jobs/chemistry_tut
- name = "Perfect chemistry blossom"
- desc = "Passed the chemistry tutorial with perfect purity!"
- database_id = MEDAL_CHEM_TUT
- icon = "chem_tut"
-
//mining
/datum/award/achievement/jobs/frenching
diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm
index 8ae3da33e3a..3a62e6c940a 100644
--- a/code/datums/achievements/misc_achievements.dm
+++ b/code/datums/achievements/misc_achievements.dm
@@ -141,6 +141,12 @@
database_id = MEDAL_LOCK_ASCENSION
icon = "lockascend"
+/datum/award/achievement/misc/moon_ascension
+ name = "The Last Act"
+ desc = "You managed to become the ringleader and slay the lie."
+ database_id = MEDAL_MOON_ASCENSION
+ icon = "moonascend"
+
/datum/award/achievement/misc/grand_ritual_finale
name = "Archmage"
desc = "Made a big impression on the station with your phenomenal cosmic power."
diff --git a/code/datums/actions/items/hands_free.dm b/code/datums/actions/items/hands_free.dm
index 24fddb52942..8b7a4f405b1 100644
--- a/code/datums/actions/items/hands_free.dm
+++ b/code/datums/actions/items/hands_free.dm
@@ -6,3 +6,7 @@
/datum/action/item_action/hands_free/shift_nerves
name = "Shift Nerves"
+
+/datum/action/item_action/hands_free/moth_googles
+ name = "Toggle Zoom"
+ desc = "Look further out with the help of your mothic googles."
diff --git a/code/datums/actions/items/toggles.dm b/code/datums/actions/items/toggles.dm
index fa7bc821a5e..508c6e8639b 100644
--- a/code/datums/actions/items/toggles.dm
+++ b/code/datums/actions/items/toggles.dm
@@ -15,8 +15,8 @@
name = "Toggle Hood"
/datum/action/item_action/toggle_firemode
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_items.dmi' //SKYRAT EDIT ADDITION
- button_icon_state = "fireselect_no" //SKYRAT EDIT ADDITION
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_items.dmi' //NOVA EDIT ADDITION
+ button_icon_state = "fireselect_no" //NOVA EDIT ADDITION
name = "Toggle Firemode"
/datum/action/item_action/toggle_gunlight
diff --git a/code/datums/actions/mobs/lava_swoop.dm b/code/datums/actions/mobs/lava_swoop.dm
index 7532ccfda08..a5acc29bab6 100644
--- a/code/datums/actions/mobs/lava_swoop.dm
+++ b/code/datums/actions/mobs/lava_swoop.dm
@@ -199,7 +199,6 @@
icon = 'icons/mob/simple/lavaland/96x96megafauna.dmi'
icon_state = "dragon"
layer = ABOVE_ALL_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
pixel_x = -32
duration = 10
randomdir = FALSE
diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm
index 6bbdabfc50d..a13cc8b36fa 100644
--- a/code/datums/ai/_ai_controller.dm
+++ b/code/datums/ai/_ai_controller.dm
@@ -67,7 +67,7 @@ multiple modular subtrees with behaviors
if(!isnull(new_pawn)) // unit tests need the ai_controller to exist in isolation due to list schenanigans i hate it here
PossessPawn(new_pawn)
-/datum/ai_controller/Destroy(force, ...)
+/datum/ai_controller/Destroy(force)
set_ai_status(AI_STATUS_OFF)
UnpossessPawn(FALSE)
set_movement_target(type, null)
@@ -175,6 +175,7 @@ multiple modular subtrees with behaviors
///Runs any actions that are currently running
/datum/ai_controller/process(seconds_per_tick)
+
if(!able_to_run())
SSmove_manager.stop_looping(pawn) //stop moving
return //this should remove them from processing in the future through event-based stuff.
diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm
index 435b9cb1ef3..8ba9624c21e 100644
--- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm
+++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm
@@ -1,11 +1,12 @@
+/// List of objects that AIs will treat as targets
+GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom)
+
/datum/ai_behavior/find_potential_targets
action_cooldown = 2 SECONDS
/// How far can we see stuff?
var/vision_range = 9
/// Blackboard key for aggro range, uses vision range if not specified
var/aggro_range_key = BB_AGGRO_RANGE
- /// Static typecache list of potentially dangerous objs
- var/static/list/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/vehicle/sealed/mecha))
/datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key)
. = ..()
@@ -26,9 +27,9 @@
var/list/potential_targets = hearers(aggro_range, get_turf(controller.pawn)) - living_mob //Remove self, so we don't suicide
- for(var/HM in typecache_filter_list(range(aggro_range, living_mob), hostile_machines)) //Can we see any hostile machines?
- if(can_see(living_mob, HM, aggro_range))
- potential_targets += HM
+ for (var/atom/hostile_machine as anything in GLOB.hostile_machines)
+ if (can_see(living_mob, hostile_machine, aggro_range))
+ potential_targets += hostile_machine
if(!potential_targets.len)
finish_action(controller, succeeded = FALSE)
diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm
index 9a7ec19cd5e..b769bc529e2 100644
--- a/code/datums/ai/generic/generic_behaviors.dm
+++ b/code/datums/ai/generic/generic_behaviors.dm
@@ -2,6 +2,7 @@
/datum/ai_behavior/resist/perform(seconds_per_tick, datum/ai_controller/controller)
. = ..()
var/mob/living/living_pawn = controller.pawn
+ living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, TRUE)
living_pawn.execute_resist()
finish_action(controller, TRUE)
diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm
index 781bfb70a85..8be754f8d4b 100644
--- a/code/datums/ai/monkey/monkey_controller.dm
+++ b/code/datums/ai/monkey/monkey_controller.dm
@@ -26,9 +26,22 @@ have ways of interacting with a specific mob and control it.
BB_MONKEY_GUN_NEURONS_ACTIVATED = FALSE,
BB_MONKEY_GUN_WORKED = TRUE,
BB_SONG_LINES = MONKEY_SONG,
+ BB_RESISTING = FALSE,
)
idle_behavior = /datum/idle_behavior/idle_monkey
+/datum/ai_controller/monkey/process(seconds_per_tick)
+
+ var/mob/living/living_pawn = src.pawn
+
+ if(!length(living_pawn.do_afters) && living_pawn.ai_controller.blackboard[BB_RESISTING])
+ living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, FALSE)
+
+ if(living_pawn.ai_controller.blackboard[BB_RESISTING])
+ return
+
+ . = ..()
+
/datum/ai_controller/monkey/New(atom/new_pawn)
var/static/list/control_examine = list(
ORGAN_SLOT_EYES = span_monkey("eyes have a primal look in them."),
@@ -91,7 +104,7 @@ have ways of interacting with a specific mob and control it.
/datum/ai_controller/monkey/able_to_run()
var/mob/living/living_pawn = pawn
- if(IS_DEAD_OR_INCAP(living_pawn))
+ if(living_pawn.incapacitated(IGNORE_RESTRAINTS | IGNORE_GRAB | IGNORE_STASIS) || living_pawn.stat > CONSCIOUS)
return FALSE
return ..()
diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm
index 31fd90ccf53..3644869140d 100644
--- a/code/datums/ai/movement/ai_movement_jps.dm
+++ b/code/datums/ai/movement/ai_movement_jps.dm
@@ -4,13 +4,15 @@
/datum/ai_movement/jps
max_pathing_attempts = 20
var/maximum_length = AI_MAX_PATH_LENGTH
+ ///how we deal with diagonal movement, whether we try to avoid them or follow through with them
+ var/diagonal_flags = DIAGONAL_REMOVE_CLUNKY
/datum/ai_movement/jps/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance)
. = ..()
var/atom/movable/moving = controller.pawn
var/delay = controller.movement_delay
- var/datum/move_loop/loop = SSmove_manager.jps_move(moving,
+ var/datum/move_loop/has_target/jps/loop = SSmove_manager.jps_move(moving,
current_movement_target,
delay,
repath_delay = 0.5 SECONDS,
@@ -18,6 +20,7 @@
minimum_distance = controller.get_minimum_distance(),
access = controller.get_access(),
subsystem = SSai_movement,
+ diagonal_handling = diagonal_flags,
extra_info = controller,
)
@@ -25,6 +28,8 @@
RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move))
RegisterSignal(loop, COMSIG_MOVELOOP_JPS_REPATH, PROC_REF(repath_incoming))
+ return loop
+
/datum/ai_movement/jps/proc/repath_incoming(datum/move_loop/has_target/jps/source)
SIGNAL_HANDLER
var/datum/ai_controller/controller = source.extra_info
@@ -35,3 +40,11 @@
/datum/ai_movement/jps/bot
max_pathing_attempts = 25
maximum_length = AI_BOT_PATH_LENGTH
+ diagonal_flags = DIAGONAL_REMOVE_ALL
+
+/datum/ai_movement/jps/bot/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance)
+ var/datum/move_loop/loop = ..()
+ var/atom/our_pawn = controller.pawn
+ if(isnull(our_pawn))
+ return
+ our_pawn.RegisterSignal(loop, COMSIG_MOVELOOP_JPS_FINISHED_PATHING, TYPE_PROC_REF(/mob/living/basic/bot, generate_bot_path))
diff --git a/code/datums/announcers/default_announcer.dm b/code/datums/announcers/default_announcer.dm
index c5dc142f818..8b91323ef5f 100644
--- a/code/datums/announcers/default_announcer.dm
+++ b/code/datums/announcers/default_announcer.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/centcom_announcer/default
welcome_sounds = list('sound/ai/default/welcome.ogg')
alert_sounds = list('sound/ai/default/attention.ogg')
diff --git a/code/datums/armor/_armor.dm b/code/datums/armor/_armor.dm
index bfd15af4189..616ad00c324 100644
--- a/code/datums/armor/_armor.dm
+++ b/code/datums/armor/_armor.dm
@@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(armor_by_type, generate_armor_type_cache())
/// A version of armor that cannot be modified and will always return itself when attempted to be modified
/datum/armor/immune
-/datum/armor/Destroy(force, ...)
+/datum/armor/Destroy(force)
if(!force && tag)
return QDEL_HINT_LETMELIVE
diff --git a/code/datums/atmosphere/planetary.dm b/code/datums/atmosphere/planetary.dm
index 29db62369b9..e4babc9cf48 100644
--- a/code/datums/atmosphere/planetary.dm
+++ b/code/datums/atmosphere/planetary.dm
@@ -17,7 +17,7 @@
/datum/gas/miasma=1.2,
/datum/gas/water_vapor=0.1,
)
- restricted_chance = 0 // SKYRAT EDIT: Disables restricted gases from rolling - Original value (30)
+ restricted_chance = 0 // NOVA EDIT: Disables restricted gases from rolling - Original value (30)
minimum_pressure = HAZARD_LOW_PRESSURE + 10
maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1
@@ -42,7 +42,7 @@
/datum/gas/water_vapor=0.1,
/datum/gas/miasma=1.2,
)
- restricted_chance = 0 // SKYRAT EDIT: Disables restricted gases from rolling - Original value (20)
+ restricted_chance = 0 // NOVA EDIT: Disables restricted gases from rolling - Original value (20)
minimum_pressure = HAZARD_LOW_PRESSURE + 10
maximum_pressure = LAVALAND_EQUIPMENT_EFFECT_PRESSURE - 1
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index 6b138387290..152de6ec1e1 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -179,7 +179,6 @@
/obj/effect/ebeam
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
layer = ABOVE_ALL_MOB_LAYER
anchored = TRUE
var/emissive = TRUE
diff --git a/code/datums/bodypart_overlays/bodypart_overlay.dm b/code/datums/bodypart_overlays/bodypart_overlay.dm
index 5b6232fd303..7639aa8da53 100644
--- a/code/datums/bodypart_overlays/bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/bodypart_overlay.dm
@@ -4,7 +4,7 @@
///Sometimes we need multiple layers, for like the back, middle and front of the person (EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
var/layers
///List of all possible layers. Used for looping through in drawing
- var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND, EXTERNAL_FRONT_UNDER_CLOTHES, EXTERNAL_FRONT_OVER, EXTERNAL_FRONT_ABOVE_HAIR) // SKYRAT EDIT - Customization - ORIGINAL: var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
+ var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND, EXTERNAL_FRONT_UNDER_CLOTHES, EXTERNAL_FRONT_OVER, EXTERNAL_FRONT_ABOVE_HAIR) // NOVA EDIT - Customization - ORIGINAL: var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
///Key of the icon states of all the sprite_datums for easy caching
var/cache_key = ""
@@ -46,14 +46,14 @@
return "ADJ"
if(-BODY_FRONT_LAYER)
return "FRONT"
- //SKYRAT EDIT ADDITION - Customization
+ //NOVA EDIT ADDITION - Customization
if(-BODY_FRONT_UNDER_CLOTHES)
return "FRONT_UNDER"
if(-ABOVE_BODY_FRONT_HEAD_LAYER)
return "FRONT_OVER"
if(-HEAD_LAYER)
return "FRONT_OVER_HAIR"
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
///Converts a bitflag to the right layer. I'd love to make this a static index list, but byond made an attempt on my life when i did
/datum/bodypart_overlay/proc/bitflag_to_layer(layer)
@@ -64,14 +64,14 @@
return -BODY_ADJ_LAYER
if(EXTERNAL_FRONT)
return -BODY_FRONT_LAYER
- //SKYRAT EDIT ADDITION - Customization
+ //NOVA EDIT ADDITION - Customization
if(EXTERNAL_FRONT_UNDER_CLOTHES)
return -BODY_FRONT_UNDER_CLOTHES
if(EXTERNAL_FRONT_OVER)
return -ABOVE_BODY_FRONT_HEAD_LAYER
if(EXTERNAL_FRONT_ABOVE_HAIR)
return -HEAD_LAYER
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
///Check whether we can draw the overlays. You generally don't want lizard snouts to draw over an EVA suit
/datum/bodypart_overlay/proc/can_draw_on_bodypart(mob/living/carbon/human/human)
diff --git a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
index 7dd453163c5..f2b82e7a2c8 100644
--- a/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
+++ b/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
@@ -96,13 +96,13 @@
/datum/bodypart_overlay/mutant/proc/inherit_color(obj/item/bodypart/ownerlimb, force)
if(isnull(ownerlimb))
draw_color = null
- alpha = 255 // SKYRAT EDIT - Mutant bodyparts transparency are based on limb transparency
+ alpha = 255 // NOVA EDIT - Mutant bodyparts transparency are based on limb transparency
return TRUE
if(draw_color && !force)
return FALSE
- alpha = ownerlimb.alpha // SKYRAT EDIT - Mutant bodyparts transparency are based on limb transparency
+ alpha = ownerlimb.alpha // NOVA EDIT - Mutant bodyparts transparency are based on limb transparency
switch(color_source)
if(ORGAN_COLOR_OVERRIDE)
draw_color = override_color(ownerlimb.draw_color)
diff --git a/code/datums/brain_damage/creepy_trauma.dm b/code/datums/brain_damage/creepy_trauma.dm
index 6d1122fa716..b056ddfb8de 100644
--- a/code/datums/brain_damage/creepy_trauma.dm
+++ b/code/datums/brain_damage/creepy_trauma.dm
@@ -136,10 +136,10 @@
continue
if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER))
continue
- // SKYRAT EDIT ADDITION START - Players in the interlink can't be obsession targets
+ // NOVA EDIT ADDITION START - Players in the interlink can't be obsession targets
if(SSticker.IsRoundInProgress() && istype(get_area(player), /area/centcom/interlink))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
viable_minds += player.mind
for(var/datum/mind/possible_target as anything in viable_minds)
if(possible_target != owner && ishuman(possible_target.current))
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index 90248df1cfb..fc30d7fb3b8 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -330,3 +330,104 @@
/datum/brain_trauma/severe/dyslexia/on_lose()
REMOVE_TRAIT(owner, TRAIT_ILLITERATE, TRAUMA_TRAIT)
..()
+
+/*
+ * Brain traumas that eldritch paintings apply
+ * This one is for "The Sister and He Who Wept" or /obj/structure/sign/painting/eldritch
+ */
+/datum/brain_trauma/severe/weeping
+ name = "The Weeping"
+ desc = "Patient hallucinates everyone as a figure called He Who Wept"
+ scan_desc = "H_E##%%%WEEP6%11S!!,)()"
+ gain_text = span_warning("HE WEEPS AND I WILL SEE HIM ONCE MORE")
+ lose_text = span_notice("You feel the tendrils of something slip from your mind.")
+ random_gain = FALSE
+ /// Our cooldown declare for causing hallucinations
+ COOLDOWN_DECLARE(weeping_hallucinations)
+
+/datum/brain_trauma/severe/weeping/on_life(seconds_per_tick, times_fired)
+ if(owner.stat != CONSCIOUS || owner.IsSleeping() || owner.IsUnconscious())
+ return
+ // If they have examined a painting recently
+ if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE))
+ return
+ if(!COOLDOWN_FINISHED(src, weeping_hallucinations))
+ return
+ owner.cause_hallucination(/datum/hallucination/delusion/preset/heretic, "Caused by The Weeping brain trauma")
+ owner.add_mood_event("eldritch_weeping", /datum/mood_event/eldritch_painting/weeping)
+ COOLDOWN_START(src, weeping_hallucinations, 10 SECONDS)
+ ..()
+
+//This one is for "The First Desire" or /obj/structure/sign/painting/eldritch/desire
+/datum/brain_trauma/severe/flesh_desire
+ name = "The Desire for Flesh"
+ desc = "Patient appears hungrier and only wishes to eat meats."
+ scan_desc = "H_(82882)G3E:__))9R"
+ gain_text = span_warning("I feel a hunger, only organs and flesh will feed it...")
+ lose_text = span_notice("You no longer feel the hunger for flesh...")
+ random_gain = FALSE
+ /// How much faster we loose hunger
+ var/hunger_rate = 15
+
+/datum/brain_trauma/severe/flesh_desire/on_gain()
+ // Allows them to eat faster, mainly for flavor
+ ADD_TRAIT(owner, TRAIT_VORACIOUS, REF(src))
+ ADD_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src))
+ ..()
+
+/datum/brain_trauma/severe/flesh_desire/on_life(seconds_per_tick, times_fired)
+ // Causes them to need to eat at 10x the normal rate
+ owner.adjust_nutrition(-hunger_rate * HUNGER_FACTOR)
+ if(SPT_PROB(10, seconds_per_tick))
+ to_chat(owner, span_notice("You feel a ravenous hunger for flesh..."))
+ owner.overeatduration = max(owner.overeatduration - 200 SECONDS, 0)
+
+/datum/brain_trauma/severe/flesh_desire/on_lose()
+ REMOVE_TRAIT(owner, TRAIT_VORACIOUS, REF(src))
+ REMOVE_TRAIT(owner, TRAIT_FLESH_DESIRE, REF(src))
+ return ..()
+
+// This one is for "Lady out of gates" or /obj/item/wallframe/painting/eldritch/beauty
+/datum/brain_trauma/severe/eldritch_beauty
+ name = "The Pursuit of Perfection"
+ desc = "Patient seems to furiously scratch at their body, the only way to make them cease is for them to remove their jumpsuit."
+ scan_desc = "I_)8(P_E##R&&F(E)C__T)"
+ gain_text = span_warning("I WILL RID MY FLESH FROM IMPERFECTION!! I WILL BE PERFECT WITHOUT MY SUITS!!")
+ lose_text = span_notice("You feel the influence of something slip your mind, and you feel content as you are.")
+ random_gain = FALSE
+ /// How much damage we deal with each scratch
+ var/scratch_damage = 0.5
+
+/datum/brain_trauma/severe/eldritch_beauty/on_life(seconds_per_tick, times_fired)
+ // Jumpsuits ruin the "perfection" of the body
+ if(!owner.get_item_by_slot(ITEM_SLOT_ICLOTHING))
+ return
+
+ // Scratching code
+ var/obj/item/bodypart/bodypart = owner.get_bodypart(owner.get_random_valid_zone(even_weights = TRUE))
+ if(!(bodypart && IS_ORGANIC_LIMB(bodypart)) && bodypart.bodypart_flags & BODYPART_PSEUDOPART)
+ return
+ if(owner.incapacitated())
+ return
+ bodypart.receive_damage(scratch_damage)
+ if(SPT_PROB(33, seconds_per_tick))
+ to_chat(owner, span_notice("You scratch furiously at [bodypart] to ruin the cloth that hides the beauty!"))
+
+// This one is for "Climb over the rusted mountain" or /obj/structure/sign/painting/eldritch/rust
+/datum/brain_trauma/severe/rusting
+ name = "The Rusted Climb"
+ desc = "Patient seems to oxidise things around them at random, and seem to believe they are aiding a creature in climbing a mountin."
+ scan_desc = "C_)L(#_I_##M;B"
+ gain_text = span_warning("The rusted climb shall finish at the peak")
+ lose_text = span_notice("The rusted climb? Whats that? An odd dream to be sure.")
+ random_gain = FALSE
+
+/datum/brain_trauma/severe/rusting/on_life(seconds_per_tick, times_fired)
+ var/atom/tile = get_turf(owner)
+ // Examining a painting should stop this effect to give counterplay
+ if(HAS_TRAIT(owner, TRAIT_ELDRITCH_PAINTING_EXAMINE))
+ return
+
+ if(SPT_PROB(50, seconds_per_tick))
+ to_chat(owner, span_notice("You feel eldritch energies pulse from your body!"))
+ tile.rust_heretic_act()
diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm
index 81d354a19e8..d9348f98f4b 100644
--- a/code/datums/brain_damage/special.dm
+++ b/code/datums/brain_damage/special.dm
@@ -100,7 +100,6 @@
image_icon = 'icons/effects/effects.dmi'
image_state = "bluestream"
image_layer = ABOVE_MOB_LAYER
- image_plane = GAME_PLANE_UPPER
var/obj/effect/client_image_holder/bluespace_stream/linked_to
/obj/effect/client_image_holder/bluespace_stream/Initialize(mapload, list/mobs_which_see_us)
diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 7cbcdd6a4d8..f6e83c9537c 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -211,7 +211,7 @@
/datum/brain_trauma/severe/split_personality/brainwashing/get_ghost()
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [owner.real_name]'s brainwashed mind?", null, null, 7.5 SECONDS, stranger_backseat)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [owner.real_name]'s brainwashed mind?", poll_time = 7.5 SECONDS, target_mob = stranger_backseat, pic_source = owner, role_name_text = "brainwashed mind")
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
stranger_backseat.key = C.key
diff --git a/code/datums/candidate_poll.dm b/code/datums/candidate_poll.dm
new file mode 100644
index 00000000000..1856858accd
--- /dev/null
+++ b/code/datums/candidate_poll.dm
@@ -0,0 +1,114 @@
+/// The datum that describes one instance of candidate polling
+/datum/candidate_poll
+ /// The role the poll is for
+ var/role
+ /// The question asked to potential candidates
+ var/question
+ /// The duration of the poll
+ var/duration
+ /// the atom observers can jump/teleport to
+ var/atom/jump_to_me
+ /// Never For This Round category
+ var/ignoring_category
+ /// The players who signed up to this poll
+ var/list/mob/signed_up
+ /// the linked alert buttons
+ var/list/atom/movable/screen/alert/poll_alert/alert_buttons = list()
+ /// The world.time at which the poll was created
+ var/time_started
+ /// Whether the polling is finished
+ var/finished = FALSE
+ /// Used to categorize in the alerts system and identify polls of same question+role so we can stack the alert buttons
+ var/poll_key
+
+/datum/candidate_poll/New(polled_role, polled_question, poll_duration, poll_ignoring_category, poll_jumpable)
+ role = polled_role
+ question = polled_question
+ duration = poll_duration
+ ignoring_category = poll_ignoring_category
+ jump_to_me = poll_jumpable
+ signed_up = list()
+ time_started = world.time
+ poll_key = "[question]_[role ? role : "0"]"
+ return ..()
+
+/datum/candidate_poll/Destroy()
+ if(src in SSpolling.currently_polling)
+ SSpolling.polling_finished(src)
+ return QDEL_HINT_IWILLGC // the above proc will call QDEL_IN(src, 0.5 SECONDS)
+ jump_to_me = null
+ signed_up = null
+ return ..()
+
+/datum/candidate_poll/proc/clear_alert_ref(atom/movable/screen/alert/poll_alert/source)
+ SIGNAL_HANDLER
+ alert_buttons -= source
+
+/datum/candidate_poll/proc/sign_up(mob/candidate, silent = FALSE)
+ if(!istype(candidate) || isnull(candidate.key) || isnull(candidate.client))
+ return FALSE
+ if(candidate in signed_up)
+ if(!silent)
+ to_chat(candidate, span_warning("You have already signed up for this!"))
+ return FALSE
+ if(time_left() <= 0)
+ if(!silent)
+ to_chat(candidate, span_danger("Sorry, you were too late for the consideration!"))
+ SEND_SOUND(candidate, 'sound/machines/buzz-sigh.ogg')
+ return FALSE
+
+ signed_up += candidate
+ if(!silent)
+ to_chat(candidate, span_notice("You have signed up for [role]! A candidate will be picked randomly soon."))
+ // Sign them up for any other polls with the same mob type
+ for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling)
+ if(src != existing_poll && poll_key == existing_poll.poll_key && !(candidate in existing_poll.signed_up))
+ existing_poll.sign_up(candidate, TRUE)
+ for(var/atom/movable/screen/alert/poll_alert/linked_button as anything in alert_buttons)
+ linked_button.update_candidates_number_overlay()
+ return TRUE
+
+/datum/candidate_poll/proc/remove_candidate(mob/candidate, silent = FALSE)
+ if(!istype(candidate) || isnull(candidate.key) || isnull(candidate.client))
+ return FALSE
+ if(!(candidate in signed_up))
+ if(!silent)
+ to_chat(candidate, span_warning("You aren't signed up for this!"))
+ return FALSE
+
+ if(time_left() <= 0)
+ if(!silent)
+ to_chat(candidate, span_danger("It's too late to unregister yourself, selection has already begun!"))
+ return FALSE
+
+ signed_up -= candidate
+ if(!silent)
+ to_chat(candidate, span_danger("You have been unregistered as a candidate for [role]. You can sign up again before the poll ends."))
+
+ for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling)
+ if(src != existing_poll && poll_key == existing_poll.poll_key && (candidate in existing_poll.signed_up))
+ existing_poll.remove_candidate(candidate, TRUE)
+ for(var/atom/movable/screen/alert/poll_alert/linked_button as anything in alert_buttons)
+ linked_button.update_candidates_number_overlay()
+ return TRUE
+
+/datum/candidate_poll/proc/do_never_for_this_round(mob/candidate)
+ var/list/ignore_list = GLOB.poll_ignore[ignoring_category]
+ if(!ignore_list)
+ GLOB.poll_ignore[ignoring_category] = list()
+ GLOB.poll_ignore[ignoring_category] += candidate.ckey
+ to_chat(candidate, span_danger("Choice registered: Never for this round."))
+ remove_candidate(candidate, silent = TRUE)
+
+/datum/candidate_poll/proc/undo_never_for_this_round(mob/candidate)
+ GLOB.poll_ignore[ignoring_category] -= candidate.ckey
+ to_chat(candidate, span_notice("Choice registered: Eligible for this round"))
+
+/datum/candidate_poll/proc/trim_candidates()
+ list_clear_nulls(signed_up)
+ for(var/mob/candidate as anything in signed_up)
+ if(isnull(candidate.key) || isnull(candidate.client))
+ signed_up -= candidate
+
+/datum/candidate_poll/proc/time_left()
+ return duration - (world.time - time_started)
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
index e461aa2ee36..acf9ceead56 100644
--- a/code/datums/components/_component.dm
+++ b/code/datums/components/_component.dm
@@ -72,15 +72,13 @@
*
* Arguments:
* * force - makes it not check for and remove the component from the parent
- * * silent - deletes the component without sending a [COMSIG_COMPONENT_REMOVING] signal
*/
-/datum/component/Destroy(force=FALSE, silent=FALSE)
+/datum/component/Destroy(force = FALSE)
if(!parent)
return ..()
if(!force)
_RemoveFromParent()
- if(!silent)
- SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src)
+ SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src)
parent = null
return ..()
diff --git a/code/datums/components/acid.dm b/code/datums/components/acid.dm
index 67be754c504..fc60e0312fd 100644
--- a/code/datums/components/acid.dm
+++ b/code/datums/components/acid.dm
@@ -72,7 +72,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
particle_effect = new(atom_parent, acid_particles, isitem(atom_parent) ? NONE : PARTICLE_ATTACH_MOB)
START_PROCESSING(SSacid, src)
-/datum/component/acid/Destroy(force, silent)
+/datum/component/acid/Destroy(force)
STOP_PROCESSING(SSacid, src)
if(sizzle)
QDEL_NULL(sizzle)
diff --git a/code/datums/components/action_item_overlay.dm b/code/datums/components/action_item_overlay.dm
index e7e567cde36..80478aa9ca4 100644
--- a/code/datums/components/action_item_overlay.dm
+++ b/code/datums/components/action_item_overlay.dm
@@ -24,7 +24,7 @@
src.item_ref = WEAKREF(item)
src.item_callback = item_callback
-/datum/component/action_item_overlay/Destroy(force, silent)
+/datum/component/action_item_overlay/Destroy(force)
item_ref = null
item_callback = null
item_appearance = null
diff --git a/code/datums/components/admin_popup.dm b/code/datums/components/admin_popup.dm
index 1d258653bae..ff1e2a3d285 100644
--- a/code/datums/components/admin_popup.dm
+++ b/code/datums/components/admin_popup.dm
@@ -26,7 +26,7 @@
PROC_REF(delete_self),
)
-/datum/component/admin_popup/Destroy(force, silent)
+/datum/component/admin_popup/Destroy(force)
var/client/parent_client = parent
parent_client?.screen -= admin_popup
diff --git a/code/datums/components/ai_has_target_timer.dm b/code/datums/components/ai_has_target_timer.dm
index bcd748ce638..5fdc07417f4 100644
--- a/code/datums/components/ai_has_target_timer.dm
+++ b/code/datums/components/ai_has_target_timer.dm
@@ -33,7 +33,7 @@
REMOVE_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type)
return ..()
-/datum/component/ai_target_timer/Destroy(force, silent)
+/datum/component/ai_target_timer/Destroy(force)
finalise_losing_target()
return ..()
diff --git a/code/datums/components/ai_retaliate_advanced.dm b/code/datums/components/ai_retaliate_advanced.dm
index ca477a0db27..d734fa92b3c 100644
--- a/code/datums/components/ai_retaliate_advanced.dm
+++ b/code/datums/components/ai_retaliate_advanced.dm
@@ -16,7 +16,7 @@
ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type)
-/datum/component/ai_retaliate_advanced/Destroy(force, silent)
+/datum/component/ai_retaliate_advanced/Destroy(force)
post_retaliate_callback = null
return ..()
diff --git a/code/datums/components/anti_magic.dm b/code/datums/components/anti_magic.dm
index 059bc2f787d..48e5b10b25f 100644
--- a/code/datums/components/anti_magic.dm
+++ b/code/datums/components/anti_magic.dm
@@ -56,7 +56,7 @@
src.drain_antimagic = drain_antimagic
src.expiration = expiration
-/datum/component/anti_magic/Destroy(force, silent)
+/datum/component/anti_magic/Destroy(force)
drain_antimagic = null
expiration = null
return ..()
diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm
index 589b831aa72..3e7e704638f 100644
--- a/code/datums/components/aquarium_content.dm
+++ b/code/datums/components/aquarium_content.dm
@@ -138,7 +138,7 @@
. = ..()
REMOVE_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src))
-/datum/component/aquarium_content/Destroy(force, silent)
+/datum/component/aquarium_content/Destroy(force)
if(current_aquarium)
remove_from_aquarium()
QDEL_NULL(vc_obj)
diff --git a/code/datums/components/area_sound_manager.dm b/code/datums/components/area_sound_manager.dm
index bea20222699..65faf7ab3d6 100644
--- a/code/datums/components/area_sound_manager.dm
+++ b/code/datums/components/area_sound_manager.dm
@@ -29,7 +29,7 @@
else if(!isnull(remove_on))
RegisterSignal(parent, remove_on, PROC_REF(handle_removal))
-/datum/component/area_sound_manager/Destroy(force, silent)
+/datum/component/area_sound_manager/Destroy(force)
QDEL_NULL(our_loop)
. = ..()
diff --git a/code/datums/components/areabound.dm b/code/datums/components/areabound.dm
index f952d5db2e1..872fab2d8e7 100644
--- a/code/datums/components/areabound.dm
+++ b/code/datums/components/areabound.dm
@@ -26,6 +26,6 @@
AM.forceMove(reset_turf)
moving = FALSE
-/datum/component/areabound/Destroy(force, silent)
+/datum/component/areabound/Destroy(force)
QDEL_NULL(move_tracker)
. = ..()
diff --git a/code/datums/components/aura_healing.dm b/code/datums/components/aura_healing.dm
index ebd7691ac3b..2aa33203b41 100644
--- a/code/datums/components/aura_healing.dm
+++ b/code/datums/components/aura_healing.dm
@@ -78,7 +78,7 @@
src.limit_to_trait = limit_to_trait
src.healing_color = healing_color
-/datum/component/aura_healing/Destroy(force, silent)
+/datum/component/aura_healing/Destroy(force)
STOP_PROCESSING(SSaura_healing, src)
var/alert_category = "aura_healing_[REF(src)]"
diff --git a/code/datums/components/basic_mob_attack_telegraph.dm b/code/datums/components/basic_mob_attack_telegraph.dm
index 5473dbd0fa0..2ccf2f5022b 100644
--- a/code/datums/components/basic_mob_attack_telegraph.dm
+++ b/code/datums/components/basic_mob_attack_telegraph.dm
@@ -25,7 +25,7 @@
src.telegraph_duration = telegraph_duration
src.on_began_forecast = on_began_forecast
-/datum/component/basic_mob_attack_telegraph/Destroy(force, silent)
+/datum/component/basic_mob_attack_telegraph/Destroy(force)
if(current_target)
forget_target(current_target)
target_overlay = null
diff --git a/code/datums/components/basic_ranged_ready_overlay.dm b/code/datums/components/basic_ranged_ready_overlay.dm
index 434a64dd6ff..4bcbd580ca7 100644
--- a/code/datums/components/basic_ranged_ready_overlay.dm
+++ b/code/datums/components/basic_ranged_ready_overlay.dm
@@ -29,7 +29,7 @@
UnregisterSignal(parent, list(COMSIG_BASICMOB_POST_ATTACK_RANGED, COMSIG_LIVING_REVIVE))
return ..()
-/datum/component/basic_ranged_ready_overlay/Destroy(force, silent)
+/datum/component/basic_ranged_ready_overlay/Destroy(force)
deltimer(waiting_timer)
return ..()
diff --git a/code/datums/components/boomerang.dm b/code/datums/components/boomerang.dm
index 751013d7116..8b35f171c28 100644
--- a/code/datums/components/boomerang.dm
+++ b/code/datums/components/boomerang.dm
@@ -37,12 +37,13 @@
* * thrown_thing: The thrownthing datum from the parent object's latest throw. Updates thrown_boomerang.
* * spin: Carry over from POST_THROW, the speed of rotation on the boomerang when thrown.
*/
-/datum/component/boomerang/proc/prepare_throw(datum/source, datum/thrownthing/thrown_thing, spin)
+/datum/component/boomerang/proc/prepare_throw(datum/source, datum/thrownthing/throwingdatum, spin)
SIGNAL_HANDLER
- if(thrower_easy_catch_enabled && thrown_thing?.thrower)
- if(iscarbon(thrown_thing.thrower))
- var/mob/living/carbon/Carbon = thrown_thing.thrower
- Carbon.throw_mode_on(THROW_MODE_TOGGLE)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(thrower_easy_catch_enabled && thrower)
+ if(iscarbon(thrower))
+ var/mob/living/carbon/carbon_mob = thrower
+ carbon_mob.throw_mode_on(THROW_MODE_TOGGLE)
return
/**
@@ -63,24 +64,25 @@
* * source: Datum src from original signal call.
* * throwing_datum: The thrownthing datum that originally impacted the object, that we use to build the new throwing datum for the rebound.
*/
-/datum/component/boomerang/proc/return_missed_throw(datum/source, datum/thrownthing/throwing_datum)
+/datum/component/boomerang/proc/return_missed_throw(datum/source, datum/thrownthing/throwingdatum)
SIGNAL_HANDLER
if(!COOLDOWN_FINISHED(src, last_boomerang_throw))
return
var/obj/item/true_parent = parent
- aerodynamic_swing(throwing_datum, true_parent)
+ aerodynamic_swing(throwingdatum, true_parent)
/**
* Proc that triggers when the thrown boomerang has been fully thrown, rethrowing the boomerang back to the thrower, and producing visible feedback.
* * throwing_datum: The thrownthing datum that originally impacted the object, that we use to build the new throwing datum for the rebound.
* * hit_atom: The atom that has been hit by the boomerang'd object.
*/
-/datum/component/boomerang/proc/aerodynamic_swing(datum/thrownthing/throwing_datum, obj/item/true_parent)
+/datum/component/boomerang/proc/aerodynamic_swing(datum/thrownthing/throwingdatum, obj/item/true_parent)
var/mob/thrown_by = true_parent.thrownby?.resolve()
if(thrown_by)
- addtimer(CALLBACK(true_parent, TYPE_PROC_REF(/atom/movable, throw_at), thrown_by, boomerang_throw_range, throwing_datum.speed, null, TRUE), 1)
+ addtimer(CALLBACK(true_parent, TYPE_PROC_REF(/atom/movable, throw_at), thrown_by, boomerang_throw_range, throwingdatum.speed, null, TRUE), 1)
COOLDOWN_START(src, last_boomerang_throw, BOOMERANG_REBOUND_INTERVAL)
- true_parent.visible_message(span_danger("[true_parent] is flying back at [throwing_datum.thrower]!"), \
+ var/mob/thrower = throwingdatum?.get_thrower()
+ true_parent.visible_message(span_danger("[true_parent] is flying back at [thrower]!"), \
span_danger("You see [true_parent] fly back at you!"), \
span_hear("You hear an aerodynamic woosh!"))
diff --git a/code/datums/components/boss_music.dm b/code/datums/components/boss_music.dm
index 56307d12655..a5d2de4c8d5 100644
--- a/code/datums/components/boss_music.dm
+++ b/code/datums/components/boss_music.dm
@@ -22,7 +22,7 @@
src.boss_track = boss_track
src.track_duration = track_duration
-/datum/component/boss_music/Destroy(force, silent)
+/datum/component/boss_music/Destroy(force)
. = ..()
for(var/callback in music_callbacks)
deltimer(callback)
diff --git a/code/datums/components/bullet_intercepting.dm b/code/datums/components/bullet_intercepting.dm
index d8de0680665..c176de54b94 100644
--- a/code/datums/components/bullet_intercepting.dm
+++ b/code/datums/components/bullet_intercepting.dm
@@ -25,7 +25,7 @@
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_parent_equipped))
RegisterSignal(parent, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(on_unequipped))
-/datum/component/bullet_intercepting/Destroy(force, silent)
+/datum/component/bullet_intercepting/Destroy(force)
wearer = null
on_intercepted = null
return ..()
diff --git a/code/datums/components/burning.dm b/code/datums/components/burning.dm
index e5624d69b08..2535a5b6f90 100644
--- a/code/datums/components/burning.dm
+++ b/code/datums/components/burning.dm
@@ -30,7 +30,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e
particle_effect = new(atom_parent, fire_particles, isitem(atom_parent) ? NONE : PARTICLE_ATTACH_MOB)
START_PROCESSING(SSburning, src)
-/datum/component/burning/Destroy(force, silent)
+/datum/component/burning/Destroy(force)
STOP_PROCESSING(SSburning, src)
fire_overlay = null
if(particle_effect)
diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm
index 183203ed709..0cf6631f807 100644
--- a/code/datums/components/butchering.dm
+++ b/code/datums/components/butchering.dm
@@ -34,7 +34,7 @@
if(isitem(parent))
RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(onItemAttack))
-/datum/component/butchering/Destroy(force, silent)
+/datum/component/butchering/Destroy(force)
butcher_callback = null
return ..()
diff --git a/code/datums/components/caltrop.dm b/code/datums/components/caltrop.dm
index a863eb62d1f..c760adbebb0 100644
--- a/code/datums/components/caltrop.dm
+++ b/code/datums/components/caltrop.dm
@@ -97,10 +97,10 @@
return
if (!(flags & CALTROP_BYPASS_SHOES))
- // SKYRAT EDIT ADDITION BEGIN - Hardened Soles Quirk
+ // NOVA EDIT ADDITION BEGIN - Hardened Soles Quirk
if(HAS_TRAIT(digitigrade_fan, TRAIT_HARD_SOLES))
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
if ((digitigrade_fan.wear_suit?.body_parts_covered | digitigrade_fan.w_uniform?.body_parts_covered | digitigrade_fan.shoes?.body_parts_covered) & FEET)
return
diff --git a/code/datums/components/cleaner.dm b/code/datums/components/cleaner.dm
index 0ab0b199d74..242ad72071c 100644
--- a/code/datums/components/cleaner.dm
+++ b/code/datums/components/cleaner.dm
@@ -29,7 +29,7 @@
src.pre_clean_callback = pre_clean_callback
src.on_cleaned_callback = on_cleaned_callback
-/datum/component/cleaner/Destroy(force, silent)
+/datum/component/cleaner/Destroy(force)
pre_clean_callback = null
on_cleaned_callback = null
return ..()
diff --git a/code/datums/components/combo_attacks.dm b/code/datums/components/combo_attacks.dm
index 33989e26682..a8dbe423780 100644
--- a/code/datums/components/combo_attacks.dm
+++ b/code/datums/components/combo_attacks.dm
@@ -32,7 +32,7 @@
src.leniency_time = leniency_time
src.can_attack_callback = can_attack_callback
-/datum/component/combo_attacks/Destroy(force, silent)
+/datum/component/combo_attacks/Destroy(force)
can_attack_callback = null
return ..()
diff --git a/code/datums/components/cracked.dm b/code/datums/components/cracked.dm
index 60264090b31..4d67a9190ea 100644
--- a/code/datums/components/cracked.dm
+++ b/code/datums/components/cracked.dm
@@ -12,7 +12,7 @@
src.crack_appearances = crack_appearances
src.crack_integrity = crack_integrity
-/datum/component/cracked/Destroy(force, silent)
+/datum/component/cracked/Destroy(force)
RemoveCracks(parent, length(applied_cracks))
return ..()
diff --git a/code/datums/components/crafting/entertainment.dm b/code/datums/components/crafting/entertainment.dm
index d01ffbc00dc..8b2bfa40731 100644
--- a/code/datums/components/crafting/entertainment.dm
+++ b/code/datums/components/crafting/entertainment.dm
@@ -205,3 +205,12 @@
/obj/item/stack/cable_coil = 2,
)
category = CAT_EQUIPMENT
+
+/datum/crafting_recipe/bonedice
+ name = "Bone Die"
+ result = /obj/item/dice/d6/bone
+ time = 5 SECONDS
+ reqs = list(
+ /obj/item/stack/sheet/bone = 1,
+ )
+ category = CAT_EQUIPMENT
diff --git a/code/datums/components/crafting/robot.dm b/code/datums/components/crafting/robot.dm
index e0c6b4ecd3a..326c58d50c4 100644
--- a/code/datums/components/crafting/robot.dm
+++ b/code/datums/components/crafting/robot.dm
@@ -131,7 +131,7 @@
/datum/crafting_recipe/hygienebot
name = "Hygienebot"
- result = /mob/living/simple_animal/bot/hygienebot
+ result = /mob/living/basic/bot/hygienebot
reqs = list(
/obj/item/bot_assembly/hygienebot = 1,
/obj/item/stack/ducts = 1,
diff --git a/code/datums/components/crafting/slapcrafting.dm b/code/datums/components/crafting/slapcrafting.dm
index e08fa3ad6c6..a15a8a80b17 100644
--- a/code/datums/components/crafting/slapcrafting.dm
+++ b/code/datums/components/crafting/slapcrafting.dm
@@ -38,7 +38,7 @@
return
src.slapcraft_recipes += slapcraft_recipes
-/datum/component/slapcrafting/Destroy(force, silent)
+/datum/component/slapcrafting/Destroy(force)
UnregisterSignal(parent, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_EXAMINE_MORE))
return ..()
diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm
index b7d93f162a5..15cc565d5e0 100644
--- a/code/datums/components/crafting/tools.dm
+++ b/code/datums/components/crafting/tools.dm
@@ -14,7 +14,7 @@
reqs = list(/obj/item/grown/log = 5)
parts = list(/obj/item/grown/log = 5)
blacklist = list(/obj/item/grown/log/steel)
- result = /obj/structure/bonfire/player_made // SKYRAT EDIT - Pollution - ORIGINAL: result = /obj/structure/bonfire
+ result = /obj/structure/bonfire/player_made // NOVA EDIT - Pollution - ORIGINAL: result = /obj/structure/bonfire
category = CAT_TOOLS
/datum/crafting_recipe/boneshovel
diff --git a/code/datums/components/crank_recharge.dm b/code/datums/components/crank_recharge.dm
index 455fa9298f9..3cee7088008 100644
--- a/code/datums/components/crank_recharge.dm
+++ b/code/datums/components/crank_recharge.dm
@@ -54,7 +54,7 @@
is_charging = FALSE
return
charging_cell.give(charge_amount)
- SEND_SIGNAL(parent, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - AMMO COUNT HUD
+ SEND_SIGNAL(parent, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - AMMO COUNT HUD
source.update_appearance()
is_charging = FALSE
source.balloon_alert(user, "charged")
diff --git a/code/datums/components/crate_carrier.dm b/code/datums/components/crate_carrier.dm
index a36128b89e1..9f2f1ac9dae 100644
--- a/code/datums/components/crate_carrier.dm
+++ b/code/datums/components/crate_carrier.dm
@@ -23,7 +23,7 @@
var/static/default_cache = typecacheof(list(/obj/structure/closet/crate))
src.carriable_cache = default_cache
-/datum/component/crate_carrier/Destroy(force, silent)
+/datum/component/crate_carrier/Destroy(force)
LAZYCLEARLIST(crates_in_hand)
return ..()
diff --git a/code/datums/components/cult_ritual_item.dm b/code/datums/components/cult_ritual_item.dm
index 749fa1eac1c..c3acb0b9467 100644
--- a/code/datums/components/cult_ritual_item.dm
+++ b/code/datums/components/cult_ritual_item.dm
@@ -39,7 +39,7 @@
var/datum/action/added_action = item_parent.add_item_action(action)
linked_action_ref = WEAKREF(added_action)
-/datum/component/cult_ritual_item/Destroy(force, silent)
+/datum/component/cult_ritual_item/Destroy(force)
cleanup_shields()
QDEL_NULL(linked_action_ref)
return ..()
diff --git a/code/datums/components/customizable_reagent_holder.dm b/code/datums/components/customizable_reagent_holder.dm
index 36c84fc94af..7bffb3d9ada 100644
--- a/code/datums/components/customizable_reagent_holder.dm
+++ b/code/datums/components/customizable_reagent_holder.dm
@@ -55,7 +55,7 @@
handle_fill(ingredient)
-/datum/component/customizable_reagent_holder/Destroy(force, silent)
+/datum/component/customizable_reagent_holder/Destroy(force)
QDEL_NULL(top_overlay)
return ..()
diff --git a/code/datums/components/damage_aura.dm b/code/datums/components/damage_aura.dm
index e1111dc628d..b4c535cb52d 100644
--- a/code/datums/components/damage_aura.dm
+++ b/code/datums/components/damage_aura.dm
@@ -74,7 +74,7 @@
src.immune_factions = immune_factions
src.current_owner = WEAKREF(current_owner)
-/datum/component/damage_aura/Destroy(force, silent)
+/datum/component/damage_aura/Destroy(force)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/code/datums/components/damage_chain.dm b/code/datums/components/damage_chain.dm
index be61ec68a33..9b24a4c2bae 100644
--- a/code/datums/components/damage_chain.dm
+++ b/code/datums/components/damage_chain.dm
@@ -61,7 +61,7 @@
/datum/component/damage_chain/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_LIVING_DEATH)
-/datum/component/damage_chain/Destroy(force, silent)
+/datum/component/damage_chain/Destroy(force)
if (!QDELETED(chain))
UnregisterSignal(chain, COMSIG_QDELETING)
QDEL_NULL(chain)
diff --git a/code/datums/components/deadchat_control.dm b/code/datums/components/deadchat_control.dm
index f1ec2d73bc8..7517f35ff29 100644
--- a/code/datums/components/deadchat_control.dm
+++ b/code/datums/components/deadchat_control.dm
@@ -48,7 +48,7 @@
SSpoints_of_interest.make_point_of_interest(parent)
generated_point_of_interest = TRUE
-/datum/component/deadchat_control/Destroy(force, silent)
+/datum/component/deadchat_control/Destroy(force)
on_removal?.Invoke()
inputs = null
orbiters = null
diff --git a/code/datums/components/direct_explosive_trap.dm b/code/datums/components/direct_explosive_trap.dm
index 0d204f21a1e..e3a125eb928 100644
--- a/code/datums/components/direct_explosive_trap.dm
+++ b/code/datums/components/direct_explosive_trap.dm
@@ -46,7 +46,7 @@
if (!isnull(saboteur))
UnregisterSignal(saboteur, COMSIG_QDELETING)
-/datum/component/direct_explosive_trap/Destroy(force, silent)
+/datum/component/direct_explosive_trap/Destroy(force)
if (isnull(saboteur))
return ..()
UnregisterSignal(saboteur, COMSIG_QDELETING)
diff --git a/code/datums/components/echolocation.dm b/code/datums/components/echolocation.dm
index 2de6d028605..5e4f7528415 100644
--- a/code/datums/components/echolocation.dm
+++ b/code/datums/components/echolocation.dm
@@ -63,7 +63,7 @@
echolocator.overlay_fullscreen("echo", /atom/movable/screen/fullscreen/echo, echo_icon)
START_PROCESSING(SSfastprocess, src)
-/datum/component/echolocation/Destroy(force, silent)
+/datum/component/echolocation/Destroy(force)
STOP_PROCESSING(SSfastprocess, src)
var/mob/living/echolocator = parent
QDEL_NULL(client_color)
diff --git a/code/datums/components/effect_remover.dm b/code/datums/components/effect_remover.dm
index 7f1f437eddf..a02be73f568 100644
--- a/code/datums/components/effect_remover.dm
+++ b/code/datums/components/effect_remover.dm
@@ -41,7 +41,7 @@
src.effects_we_clear = typecacheof(effects_we_clear)
src.time_to_remove = time_to_remove
-/datum/component/effect_remover/Destroy(force, silent)
+/datum/component/effect_remover/Destroy(force)
on_clear_callback = null
return ..()
diff --git a/code/datums/components/egg_layer.dm b/code/datums/components/egg_layer.dm
index a1e137de6d3..3092829fd13 100644
--- a/code/datums/components/egg_layer.dm
+++ b/code/datums/components/egg_layer.dm
@@ -47,7 +47,7 @@
. = ..()
UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY)
-/datum/component/egg_layer/Destroy(force, silent)
+/datum/component/egg_layer/Destroy(force)
. = ..()
STOP_PROCESSING(SSobj, src)
egg_laid_callback = null
diff --git a/code/datums/components/energized.dm b/code/datums/components/energized.dm
index 97ff670113f..d637bc2eb76 100644
--- a/code/datums/components/energized.dm
+++ b/code/datums/components/energized.dm
@@ -76,7 +76,7 @@
if(prob(100 - toast_prob))
if(prob(25))
do_sparks(1, FALSE, source)
- playsound(src, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(parent, SFX_SPARKS, 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
source.audible_message(span_danger("[parent] makes an electric crackle..."))
return FALSE
@@ -116,10 +116,10 @@
header = "Electrifying!",
)
do_sparks(4, FALSE, source)
- playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ playsound(parent, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
source.audible_message(span_danger("[parent] makes a loud electric crackle!"))
to_chat(future_tram_victim, span_userdanger("You hear a loud electric crackle!"))
- future_tram_victim.electrocute_act(15, src, 1)
+ future_tram_victim.electrocute_act(15, parent, 1)
return TRUE
#undef NORMAL_TOAST_PROB
diff --git a/code/datums/components/engraved.dm b/code/datums/components/engraved.dm
index 016e3082a8d..60bfa5f6177 100644
--- a/code/datums/components/engraved.dm
+++ b/code/datums/components/engraved.dm
@@ -52,7 +52,7 @@
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays))
engraved_wall.update_appearance()
-/datum/component/engraved/Destroy(force, silent)
+/datum/component/engraved/Destroy(force)
if(!parent)
return ..()
parent.RemoveElement(/datum/element/art)
diff --git a/code/datums/components/evolutionary_leap.dm b/code/datums/components/evolutionary_leap.dm
index 5ff7f31beaa..3a47dbbdcf0 100644
--- a/code/datums/components/evolutionary_leap.dm
+++ b/code/datums/components/evolutionary_leap.dm
@@ -30,7 +30,7 @@
setup_timer()
-/datum/component/evolutionary_leap/Destroy(force, silent)
+/datum/component/evolutionary_leap/Destroy(force)
. = ..()
deltimer(timer_id)
diff --git a/code/datums/components/focused_attacker.dm b/code/datums/components/focused_attacker.dm
index 8635973f263..c927aab8822 100644
--- a/code/datums/components/focused_attacker.dm
+++ b/code/datums/components/focused_attacker.dm
@@ -17,7 +17,7 @@
src.maximum_gain = maximum_gain
src.gain_per_attack = gain_per_attack
-/datum/component/focused_attacker/Destroy(force, silent)
+/datum/component/focused_attacker/Destroy(force)
if (!isnull(last_target))
UnregisterSignal(last_target, COMSIG_QDELETING)
return ..()
diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm
index 9986b2a4d43..b7b6bda2f5a 100644
--- a/code/datums/components/food/edible.dm
+++ b/code/datums/components/food/edible.dm
@@ -187,7 +187,7 @@ Behavior that's still missing from this component that original food items had t
// add newly passed in reagents
setup_initial_reagents(initial_reagents)
-/datum/component/edible/Destroy(force, silent)
+/datum/component/edible/Destroy(force)
after_eat = null
on_consume = null
check_liked = null
diff --git a/code/datums/components/food/ghost_edible.dm b/code/datums/components/food/ghost_edible.dm
index 801aa95cb6b..fb8a0c55559 100644
--- a/code/datums/components/food/ghost_edible.dm
+++ b/code/datums/components/food/ghost_edible.dm
@@ -36,7 +36,7 @@
/datum/component/ghost_edible/UnregisterFromParent()
STOP_PROCESSING(SSdcs, src)
-/datum/component/ghost_edible/Destroy(force, silent)
+/datum/component/ghost_edible/Destroy(force)
STOP_PROCESSING(SSdcs, src)
return ..()
diff --git a/code/datums/components/food/golem_food.dm b/code/datums/components/food/golem_food.dm
index c2540f54cc1..136d495b59e 100644
--- a/code/datums/components/food/golem_food.dm
+++ b/code/datums/components/food/golem_food.dm
@@ -29,7 +29,7 @@
UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ATOM_EXAMINE))
return ..()
-/datum/component/golem_food/Destroy(force, silent)
+/datum/component/golem_food/Destroy(force)
QDEL_NULL(golem_snack)
snack_type = null
extra_validation = null
diff --git a/code/datums/components/food_storage.dm b/code/datums/components/food_storage.dm
index 60fc3f6c486..cb1008f88f0 100644
--- a/code/datums/components/food_storage.dm
+++ b/code/datums/components/food_storage.dm
@@ -33,7 +33,7 @@
food.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1
-/datum/component/food_storage/Destroy(force, silent)
+/datum/component/food_storage/Destroy(force)
if(stored_item)
stored_item.forceMove(stored_item.drop_location())
stored_item.dropped()
diff --git a/code/datums/components/fov_handler.dm b/code/datums/components/fov_handler.dm
index 0390357aced..73d04a6b0e6 100644
--- a/code/datums/components/fov_handler.dm
+++ b/code/datums/components/fov_handler.dm
@@ -10,8 +10,6 @@
var/fov_angle = FOV_180_DEGREES
/// The blocker mask applied to a client's screen
var/atom/movable/screen/fov_blocker/blocker_mask
- /// The shadow mask applied to a client's screen
- var/atom/movable/screen/fov_shadow/visual_shadow
/datum/component/fov_handler/Initialize(fov_type = FOV_180_DEGREES)
if(!isliving(parent))
@@ -22,13 +20,9 @@
qdel(src) //no QDEL hint for components, and we dont want this to print a warning regarding bad component application
return
- for(var/atom/movable/screen/plane_master/plane_master as anything in mob_parent.hud_used.get_true_plane_masters(FIELD_OF_VISION_BLOCKER_PLANE))
- plane_master.unhide_plane(mob_parent)
+ ADD_TRAIT(mob_parent, TRAIT_FOV_APPLIED, REF(src))
blocker_mask = new
- visual_shadow = new
- //visual_shadow.alpha = parent_client?.prefs.read_preference(/datum/preference/numeric/fov_darkness) //SKYRAT EDIT REMOVAL
- update_visual_shadow_alpha() //SKYRAT EDIT ADDITION
set_fov_angle(fov_type)
on_dir_change(mob_parent, mob_parent.dir, mob_parent.dir)
update_fov_size()
@@ -36,21 +30,17 @@
/datum/component/fov_handler/Destroy()
var/mob/living/mob_parent = parent
- for(var/atom/movable/screen/plane_master/plane_master as anything in mob_parent.hud_used.get_true_plane_masters(FIELD_OF_VISION_BLOCKER_PLANE))
- plane_master.hide_plane(mob_parent)
+ REMOVE_TRAIT(mob_parent, TRAIT_FOV_APPLIED, REF(src))
if(applied_mask)
remove_mask()
if(blocker_mask) // In a case of early deletion due to volatile client
QDEL_NULL(blocker_mask)
- if(visual_shadow) // In a case of early deletion due to volatile client
- QDEL_NULL(visual_shadow)
return ..()
/datum/component/fov_handler/proc/set_fov_angle(new_angle)
fov_angle = new_angle
blocker_mask.icon_state = "[fov_angle]"
- visual_shadow.icon_state = "[fov_angle]_v"
/// Updates the size of the FOV masks by comparing them to client view size.
/datum/component/fov_handler/proc/update_fov_size()
@@ -71,8 +61,8 @@
var/y_scale = view_size[2] / current_fov_y
current_fov_x = view_size[1]
current_fov_y = view_size[2]
- visual_shadow.transform = blocker_mask.transform = new_matrix.Scale(x_scale, y_scale)
- visual_shadow.transform = blocker_mask.transform = new_matrix.Translate(x_shift * 16, y_shift * 16)
+ blocker_mask.transform = new_matrix.Scale(x_scale, y_scale)
+ blocker_mask.transform = new_matrix.Translate(x_shift * 16, y_shift * 16)
/// Updates the mask application to client by checking `stat` and `eye`
/datum/component/fov_handler/proc/update_mask()
@@ -99,13 +89,10 @@
var/client/parent_client = parent_mob.client
// Prevents stupid ass hard deletes
parent_mob.hud_used.always_visible_inventory -= blocker_mask
- parent_mob.hud_used.always_visible_inventory -= visual_shadow
if(!parent_client) //Love client volatility!!
return
applied_mask = FALSE
parent_client.screen -= blocker_mask
- parent_client.screen -= visual_shadow
-
/datum/component/fov_handler/proc/add_mask()
var/mob/parent_mob = parent
@@ -114,15 +101,12 @@
return
applied_mask = TRUE
parent_client.screen += blocker_mask
- parent_client.screen += visual_shadow
parent_mob.hud_used.always_visible_inventory += blocker_mask
- parent_mob.hud_used.always_visible_inventory += visual_shadow
/// When a direction of the user changes, so do the masks
/datum/component/fov_handler/proc/on_dir_change(mob/source, old_dir, new_dir)
SIGNAL_HANDLER
blocker_mask.dir = new_dir
- visual_shadow.dir = new_dir
/// When a mob logs out, delete the component
/datum/component/fov_handler/proc/mob_logout(mob/source)
@@ -137,19 +121,7 @@
RegisterSignal(parent, COMSIG_MOB_CLIENT_CHANGE_VIEW, PROC_REF(update_fov_size))
RegisterSignal(parent, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(update_mask))
RegisterSignal(parent, COMSIG_MOB_LOGOUT, PROC_REF(mob_logout))
- RegisterSignal(parent, COMSIG_LIVING_COMBAT_MODE_TOGGLE, PROC_REF(update_visual_shadow_alpha)) //SKYRAT EDIT ADDITION
/datum/component/fov_handler/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_MOB_RESET_PERSPECTIVE, COMSIG_ATOM_DIR_CHANGE, COMSIG_LIVING_DEATH, COMSIG_LIVING_REVIVE, COMSIG_MOB_LOGOUT))
- UnregisterSignal(parent, COMSIG_LIVING_COMBAT_MODE_TOGGLE) //SKYRAT EDIT ADDITION
-
-//SKYRAT EDIT ADDITION BEGIN
-/// When toggling combat mode, we update the alpha of the shadow mask
-/datum/component/fov_handler/proc/update_visual_shadow_alpha()
- SIGNAL_HANDLER
- var/mob/living/parent_mob = parent
- var/pref_to_read = parent_mob.combat_mode ? /datum/preference/numeric/fov_darkness : /datum/preference/numeric/out_of_combat_fov_darkness
- var/target_alpha = parent_mob.client.prefs.read_preference(pref_to_read)
- visual_shadow.alpha = target_alpha
-//SKYRAT EDIT ADDITION END
diff --git a/code/datums/components/gas_leaker.dm b/code/datums/components/gas_leaker.dm
index d386b73ff00..eeceb73f5fa 100644
--- a/code/datums/components/gas_leaker.dm
+++ b/code/datums/components/gas_leaker.dm
@@ -30,7 +30,7 @@
src.integrity_leak_percent = integrity_leak_percent
src.leak_rate = leak_rate
-/datum/component/gas_leaker/Destroy(force, silent)
+/datum/component/gas_leaker/Destroy(force)
SSair.stop_processing_machine(src)
return ..()
diff --git a/code/datums/components/geiger_sound.dm b/code/datums/components/geiger_sound.dm
index 3a8a22df383..441aef27756 100644
--- a/code/datums/components/geiger_sound.dm
+++ b/code/datums/components/geiger_sound.dm
@@ -8,7 +8,7 @@
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
-/datum/component/geiger_sound/Destroy(force, silent)
+/datum/component/geiger_sound/Destroy(force)
QDEL_NULL(sound)
if (!isnull(last_parent))
diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm
index c4d08380db1..83c893b6dca 100644
--- a/code/datums/components/ghost_direct_control.dm
+++ b/code/datums/components/ghost_direct_control.dm
@@ -47,7 +47,7 @@
UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_EXAMINE))
return ..()
-/datum/component/ghost_direct_control/Destroy(force, silent)
+/datum/component/ghost_direct_control/Destroy(force)
extra_control_checks = null
after_assumed_control = null
@@ -73,12 +73,14 @@
if (!(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER))
return
awaiting_ghosts = TRUE
- var/list/mob/dead/observer/candidates = poll_ghost_candidates(
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
question = "Do you want to play as [role_name]?",
- jobban_type = ban_type,
- be_special_flag = ban_type,
+ check_jobban = ban_type,
+ role = ban_type,
poll_time = poll_length,
ignore_category = poll_ignore_key,
+ pic_source = parent,
+ role_name_text = role_name,
)
awaiting_ghosts = FALSE
if (!LAZYLEN(candidates))
diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm
index 72c2e75e8cb..b74ae607290 100644
--- a/code/datums/components/grillable.dm
+++ b/code/datums/components/grillable.dm
@@ -83,11 +83,11 @@
SIGNAL_HANDLER
. = COMPONENT_HANDLED_GRILLING
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(pollutant_type)
var/turf/parent_turf = get_turf(parent)
parent_turf.pollute_turf(pollutant_type, 10)
- //SKYRAT EDIT END
+ //NOVA EDIT END
current_cook_time += seconds_per_tick * 10 //turn it into ds
if(current_cook_time >= required_cook_time)
diff --git a/code/datums/components/ground_sinking.dm b/code/datums/components/ground_sinking.dm
index b4f069fb507..d29e84908a4 100644
--- a/code/datums/components/ground_sinking.dm
+++ b/code/datums/components/ground_sinking.dm
@@ -59,7 +59,7 @@
deltimer(ground_sinking_start_timer)
UnregisterSignal(parent, COMSIG_MOVABLE_MOVED)
-/datum/component/ground_sinking/Destroy(force, silent)
+/datum/component/ground_sinking/Destroy(force)
if(sinked || is_sinking)
unsink()
. = ..()
diff --git a/code/datums/components/growth_and_differentiation.dm b/code/datums/components/growth_and_differentiation.dm
index 0920344ce58..a6e10b98f6d 100644
--- a/code/datums/components/growth_and_differentiation.dm
+++ b/code/datums/components/growth_and_differentiation.dm
@@ -63,7 +63,7 @@
return setup_growth_tracking()
-/datum/component/growth_and_differentiation/Destroy(force, silent)
+/datum/component/growth_and_differentiation/Destroy(force)
STOP_PROCESSING(SSdcs, src)
deltimer(timer_id)
optional_checks = null
diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm
index bf44f1c4b3c..cb8dfb1ec8d 100644
--- a/code/datums/components/gunpoint.dm
+++ b/code/datums/components/gunpoint.dm
@@ -73,7 +73,7 @@
addtimer(CALLBACK(src, PROC_REF(update_stage), 2), GUNPOINT_DELAY_STAGE_2)
-/datum/component/gunpoint/Destroy(force, silent)
+/datum/component/gunpoint/Destroy(force)
var/mob/living/shooter = parent
shooter.remove_status_effect(/datum/status_effect/holdup)
target.remove_status_effect(/datum/status_effect/grouped/heldup, REF(shooter))
diff --git a/code/datums/components/hazard_area.dm b/code/datums/components/hazard_area.dm
index 79b4399023e..f747e8e2ace 100644
--- a/code/datums/components/hazard_area.dm
+++ b/code/datums/components/hazard_area.dm
@@ -39,7 +39,7 @@
UnregisterSignal(SSdcs, COMSIG_AREA_CREATED)
parent_mob.lose_area_sensitivity(type)
-/datum/component/hazard_area/Destroy(force, silent)
+/datum/component/hazard_area/Destroy(force)
. = ..()
area_created = null
diff --git a/code/datums/components/healing_touch.dm b/code/datums/components/healing_touch.dm
index cf6ef88f24d..bc0493b4787 100644
--- a/code/datums/components/healing_touch.dm
+++ b/code/datums/components/healing_touch.dm
@@ -103,7 +103,7 @@
UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET))
return ..()
-/datum/component/healing_touch/Destroy(force, silent)
+/datum/component/healing_touch/Destroy(force)
extra_checks = null
return ..()
diff --git a/code/datums/components/health_scaling_effects.dm b/code/datums/components/health_scaling_effects.dm
index 140a60ea962..e3754ae2061 100644
--- a/code/datums/components/health_scaling_effects.dm
+++ b/code/datums/components/health_scaling_effects.dm
@@ -53,7 +53,7 @@
UnregisterSignal(parent, COMSIG_LIVING_HEALTH_UPDATE)
return ..()
-/datum/component/health_scaling_effects/Destroy(force, silent)
+/datum/component/health_scaling_effects/Destroy(force)
additional_status_callback = null
return ..()
diff --git a/code/datums/components/heirloom.dm b/code/datums/components/heirloom.dm
index 064c33ff7d7..fe3aa73bcd3 100644
--- a/code/datums/components/heirloom.dm
+++ b/code/datums/components/heirloom.dm
@@ -14,7 +14,7 @@
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
-/datum/component/heirloom/Destroy(force, silent)
+/datum/component/heirloom/Destroy(force)
owner = null
return ..()
diff --git a/code/datums/components/interaction_booby_trap.dm b/code/datums/components/interaction_booby_trap.dm
index 12cf0a7c677..2ae22ffbb5a 100644
--- a/code/datums/components/interaction_booby_trap.dm
+++ b/code/datums/components/interaction_booby_trap.dm
@@ -56,7 +56,7 @@
if (length(additional_triggers))
RegisterSignals(parent, additional_triggers, PROC_REF(trigger_explosive))
-/datum/component/interaction_booby_trap/Destroy(force, silent)
+/datum/component/interaction_booby_trap/Destroy(force)
UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_TOOL_ACT(defuse_tool), COMSIG_ATOM_EXAMINE_MORE) + additional_triggers)
QDEL_NULL(active_sound_loop)
on_triggered_callback = null
diff --git a/code/datums/components/irradiated.dm b/code/datums/components/irradiated.dm
index bffd56459bf..805288fe486 100644
--- a/code/datums/components/irradiated.dm
+++ b/code/datums/components/irradiated.dm
@@ -58,7 +58,7 @@
COMSIG_GEIGER_COUNTER_SCAN,
))
-/datum/component/irradiated/Destroy(force, silent)
+/datum/component/irradiated/Destroy(force)
var/atom/movable/parent_movable = parent
if (istype(parent_movable))
parent_movable.remove_filter("rad_glow")
diff --git a/code/datums/components/itembound.dm b/code/datums/components/itembound.dm
index f742c1233fd..f6df7f0bab5 100644
--- a/code/datums/components/itembound.dm
+++ b/code/datums/components/itembound.dm
@@ -40,7 +40,7 @@
return
qdel(src)
-/datum/component/itembound/Destroy(force, silent)
+/datum/component/itembound/Destroy(force)
var/atom/movable/container = containerref?.resolve()
if (!QDELETED(container))
UnregisterSignal(container, COMSIG_ATOM_EXAMINE_MORE)
diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm
index f7e1fca70e6..3e0fd28ed80 100644
--- a/code/datums/components/jetpack.dm
+++ b/code/datums/components/jetpack.dm
@@ -63,7 +63,7 @@
if(trail && trail.effect_type != effect_type)
setup_trail(trail.holder)
-/datum/component/jetpack/Destroy(force, silent)
+/datum/component/jetpack/Destroy(force)
if(trail)
QDEL_NULL(trail)
check_on_move = null
diff --git a/code/datums/components/keep_me_secure.dm b/code/datums/components/keep_me_secure.dm
index 9bce3ab5e86..84e295db178 100644
--- a/code/datums/components/keep_me_secure.dm
+++ b/code/datums/components/keep_me_secure.dm
@@ -22,7 +22,7 @@
src.secured_callback = secured_callback
src.unsecured_callback = unsecured_callback
-/datum/component/keep_me_secure/Destroy(force, silent)
+/datum/component/keep_me_secure/Destroy(force)
secured_callback = null
unsecured_callback = null
return ..()
diff --git a/code/datums/components/light_eater.dm b/code/datums/components/light_eater.dm
index 0501af5e0cb..11344d5f37c 100644
--- a/code/datums/components/light_eater.dm
+++ b/code/datums/components/light_eater.dm
@@ -22,7 +22,7 @@
LAZYSET(cached_eaten_lights, morsel, TRUE)
RegisterSignal(morsel, COMSIG_QDELETING, PROC_REF(deref_eaten_light))
-/datum/component/light_eater/Destroy(force, silent)
+/datum/component/light_eater/Destroy(force)
for(var/light in eaten_lights)
var/atom/eaten_light = light
eaten_light.RemoveElement(/datum/element/light_eaten)
diff --git a/code/datums/components/listen_and_repeat.dm b/code/datums/components/listen_and_repeat.dm
index 307e515bbb2..f3006d3111d 100644
--- a/code/datums/components/listen_and_repeat.dm
+++ b/code/datums/components/listen_and_repeat.dm
@@ -33,7 +33,7 @@
ADD_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type)
-/datum/component/listen_and_repeat/Destroy(force, silent)
+/datum/component/listen_and_repeat/Destroy(force)
REMOVE_TRAIT(parent, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM, type)
return ..()
@@ -49,11 +49,11 @@
if(over_radio && prob(RADIO_IGNORE_CHANCE))
return
- //SKYRAT EDIT ADDITION START - parrot commands
+ //NOVA EDIT ADDITION START - parrot commands
var/mob/living/basic/parrot/maybe_parrot = parent
if(!over_radio && istype(maybe_parrot))
maybe_parrot.check_command(message, speaker)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/number_of_excess_strings = LAZYLEN(speech_buffer) - MAX_SPEECH_BUFFER_SIZE
if(number_of_excess_strings > 0) // only remove if we're overfull
diff --git a/code/datums/components/lock_on_cursor.dm b/code/datums/components/lock_on_cursor.dm
index 30140dd95bd..4b78f031aa0 100644
--- a/code/datums/components/lock_on_cursor.dm
+++ b/code/datums/components/lock_on_cursor.dm
@@ -62,7 +62,7 @@
mouse_tracker.assign_to_mob(owner)
START_PROCESSING(SSfastprocess, src)
-/datum/component/lock_on_cursor/Destroy(force, silent)
+/datum/component/lock_on_cursor/Destroy(force)
clear_visuals()
STOP_PROCESSING(SSfastprocess, src)
mouse_tracker = null
diff --git a/code/datums/components/magnet.dm b/code/datums/components/magnet.dm
index 5c78b8665ce..2d1d8932dfa 100644
--- a/code/datums/components/magnet.dm
+++ b/code/datums/components/magnet.dm
@@ -40,7 +40,7 @@
STOP_PROCESSING(SSdcs, src)
UnregisterSignal(parent, COMSIG_MOB_STATCHANGE)
-/datum/component/magnet/Destroy(force, silent)
+/datum/component/magnet/Destroy(force)
STOP_PROCESSING(SSdcs, src)
on_pulled = null
on_contact = null
diff --git a/code/datums/components/manual_blinking.dm b/code/datums/components/manual_blinking.dm
index 1a742c68678..67229a8b85f 100644
--- a/code/datums/components/manual_blinking.dm
+++ b/code/datums/components/manual_blinking.dm
@@ -22,7 +22,7 @@
last_blink = world.time
to_chat(C, span_notice("You suddenly realize you're blinking manually."))
-/datum/component/manual_blinking/Destroy(force, silent)
+/datum/component/manual_blinking/Destroy(force)
E = null
STOP_PROCESSING(SSdcs, src)
to_chat(parent, span_notice("You revert back to automatic blinking."))
diff --git a/code/datums/components/manual_breathing.dm b/code/datums/components/manual_breathing.dm
index 0488cce6aa3..d8d4fea07d9 100644
--- a/code/datums/components/manual_breathing.dm
+++ b/code/datums/components/manual_breathing.dm
@@ -22,7 +22,7 @@
last_breath = world.time
to_chat(C, span_notice("You suddenly realize you're breathing manually."))
-/datum/component/manual_breathing/Destroy(force, silent)
+/datum/component/manual_breathing/Destroy(force)
L = null
STOP_PROCESSING(SSdcs, src)
to_chat(parent, span_notice("You revert back to automatic breathing."))
diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm
index 8acf3e274f1..e84e3a46c82 100644
--- a/code/datums/components/material/material_container.dm
+++ b/code/datums/components/material/material_container.dm
@@ -30,13 +30,13 @@
/// Sets up the proper signals and fills the list of materials with the appropriate references.
/datum/component/material_container/Initialize(
- list/init_mats,
- max_amt = 0,
- _mat_container_flags = NONE,
- list/allowed_mats = init_mats,
- list/allowed_items,
- list/container_signals
- )
+ list/init_mats,
+ max_amt = 0,
+ _mat_container_flags = NONE,
+ list/allowed_mats = init_mats,
+ list/allowed_items,
+ list/container_signals
+)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
@@ -74,7 +74,7 @@
RegisterSignal(atom_target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item))
-/datum/component/material_container/Destroy(force, silent)
+/datum/component/material_container/Destroy(force)
retrieve_all()
materials = null
allowed_materials = null
@@ -133,17 +133,16 @@
* Arguments:
* - [source][/obj/item]: The source of the materials we are inserting.
* - multiplier: The multiplier for the materials extract from this item being inserted.
- * - breakdown_flags: The breakdown bitflags that will be used to retrieve the materials from the source
* - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED
* and is used mostly for silo logging, the silo resends this signal on the context to give it a
* chance to process the item
*/
-/datum/component/material_container/proc/insert_item_materials(obj/item/source, multiplier = 1, breakdown_flags = mat_container_flags, atom/context = parent)
+/datum/component/material_container/proc/insert_item_materials(obj/item/source, multiplier = 1, atom/context = parent)
var/primary_mat
var/max_mat_value = 0
var/material_amount = 0
- var/list/item_materials = source.get_material_composition(breakdown_flags)
+ var/list/item_materials = source.get_material_composition()
var/list/mats_consumed = list()
for(var/MAT in item_materials)
if(!can_hold_material(MAT))
@@ -200,17 +199,16 @@
* Arguments:
* - [weapon][obj/item]: the item you are trying to insert
* - multiplier: The multiplier for the materials being inserted
- * - breakdown_flags: The breakdown bitflags that will be used to retrieve the materials from the source
* - context: the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging
*/
-/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, breakdown_flags = mat_container_flags, atom/context = parent)
+/datum/component/material_container/proc/insert_item(obj/item/weapon, multiplier = 1, atom/context = parent)
if(QDELETED(weapon))
return MATERIAL_INSERT_ITEM_NO_MATS
multiplier = CEILING(multiplier, 0.01)
var/obj/item/target = weapon
- var/material_amount = OPTIMAL_COST(get_item_material_amount(target, breakdown_flags) * multiplier)
+ var/material_amount = OPTIMAL_COST(get_item_material_amount(target) * multiplier)
if(!material_amount)
return MATERIAL_INSERT_ITEM_NO_MATS
var/obj/item/stack/item_stack
@@ -224,7 +222,7 @@
if(!sheets_to_insert)
return MATERIAL_INSERT_ITEM_NO_SPACE
target = fast_split_stack(item_stack, sheets_to_insert)
- material_amount = get_item_material_amount(target, breakdown_flags) * multiplier
+ material_amount = get_item_material_amount(target) * multiplier
material_amount = OPTIMAL_COST(material_amount)
//not enough space, time to bail
@@ -232,7 +230,7 @@
return MATERIAL_INSERT_ITEM_NO_SPACE
//do the insert
- var/last_inserted_id = insert_item_materials(target, multiplier, breakdown_flags, context)
+ var/last_inserted_id = insert_item_materials(target, multiplier, context)
if(!isnull(last_inserted_id))
qdel(target) //item gone
return material_amount
@@ -254,10 +252,9 @@
* Arguments:
* * held_item - the item to insert
* * user - the mob inserting this item
- * * breakdown_flags - how this item and all it's contents inside are broken down during insertion. This is unique to the machine doing the insertion
* * context - the atom performing the operation, this is the last argument sent in COMSIG_MATCONTAINER_ITEM_CONSUMED and is used mostly for silo logging
*/
-/datum/component/material_container/proc/user_insert(obj/item/held_item, mob/living/user, breakdown_flags = mat_container_flags, atom/context = parent)
+/datum/component/material_container/proc/user_insert(obj/item/held_item, mob/living/user, atom/context = parent)
set waitfor = FALSE
. = 0
@@ -342,7 +339,7 @@
if(!isstack(target_item) && !is_type_in_list(target_item, storage_items))
var/total_amount = 0
for(var/obj/item/weapon as anything in target_item.get_all_contents_type(/obj/item))
- total_amount += get_item_material_amount(weapon, breakdown_flags)
+ total_amount += get_item_material_amount(weapon)
if(!has_space(total_amount))
if(!(mat_container_flags & MATCONTAINER_SILENT))
to_chat(user, span_warning("[parent] does not have enough space for [target_item]!"))
@@ -397,7 +394,7 @@
item_name = the_stack.singular_name
item_count = the_stack.amount
is_stack = TRUE
- inserted = insert_item(target_item, 1, mat_container_flags, context)
+ inserted = insert_item(target_item, 1, context)
if(inserted > 0)
. += inserted
inserted /= SHEET_MATERIAL_AMOUNT // display units inserted as sheets for improved readability
@@ -418,11 +415,9 @@
//collect all messages to print later
var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] || list()
var/list/item_data = status_data[item_name] || list()
+ item_data["count"] += item_count
item_data["amount"] += inserted
- if(!is_stack) //count will match with amount so its not required
- item_data["count"] += item_count
- else
- item_data["stack"] = TRUE
+ item_data["stack"] = is_stack
status_data[item_name] = item_data
chat_msgs["[MATERIAL_INSERT_ITEM_SUCCESS]"] = status_data
@@ -463,7 +458,8 @@
switch(text2num(status))
if(MATERIAL_INSERT_ITEM_SUCCESS) //no problems full item was consumed
if(chat_data["stack"])
- to_chat(user, span_notice("[amount > 1 ? amount : ""] [item_name][amount > 1 ? "'s" : ""] was consumed by [parent]"))
+ var/sheets = min(count, amount) //minimum between sheets inserted vs sheets consumed(values differ for alloys)
+ to_chat(user, span_notice("[sheets > 1 ? sheets : ""] [item_name][sheets > 1 ? "'s" : ""] was consumed by [parent]"))
else
to_chat(user, span_notice("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] worth [amount] sheets of material was consumed by [parent]"))
if(MATERIAL_INSERT_ITEM_NO_SPACE) //no space
@@ -539,13 +535,12 @@
*
* Arguments:
* - [I][obj/item]: the item whos materials must be retrieved
- * - breakdown_flags: how this item must be broken down to retrieve its materials
*/
-/datum/component/material_container/proc/get_item_material_amount(obj/item/I, breakdown_flags = mat_container_flags)
+/datum/component/material_container/proc/get_item_material_amount(obj/item/I)
if(!istype(I) || !I.custom_materials)
return 0
var/material_amount = 0
- var/list/item_materials = I.get_material_composition(breakdown_flags)
+ var/list/item_materials = I.get_material_composition()
for(var/MAT in item_materials)
if(!can_hold_material(MAT))
continue
@@ -750,7 +745,7 @@
return NONE
if((held_item.flags_1 & HOLOGRAM_1) || (held_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(held_item, allowed_item_typecache)))
return NONE
- var/list/item_materials = held_item.get_material_composition(mat_container_flags)
+ var/list/item_materials = held_item.get_material_composition()
if(!length(item_materials))
return NONE
for(var/material in item_materials)
diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm
index e57a212cbde..33d85a5376f 100644
--- a/code/datums/components/material/remote_materials.dm
+++ b/code/datums/components/material/remote_materials.dm
@@ -19,15 +19,24 @@ handles linking back and forth.
var/allow_standalone
///Local size of container when silo = null
var/local_size = INFINITY
- ///Flags used when converting inserted materials into their component materials.
+ ///Flags used for the local material container(exceptions for item insert & intent flags)
var/mat_container_flags = NONE
-
-/datum/component/remote_materials/Initialize(mapload, allow_standalone = TRUE, force_connect = FALSE, mat_container_flags = NONE)
+ ///List of signals to hook onto the local container
+ var/list/mat_container_signals
+
+/datum/component/remote_materials/Initialize(
+ mapload,
+ allow_standalone = TRUE,
+ force_connect = FALSE,
+ mat_container_flags = NONE,
+ list/mat_container_signals = null
+)
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
src.allow_standalone = allow_standalone
src.mat_container_flags = mat_container_flags
+ src.mat_container_signals = mat_container_signals
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(OnMultitool))
@@ -35,7 +44,8 @@ handles linking back and forth.
var/connect_to_silo = FALSE
if(force_connect || (mapload && is_station_level(T.z)))
connect_to_silo = TRUE
- RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy))
+ if(!(mat_container_flags & MATCONTAINER_NO_INSERT))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy))
if(mapload) // wait for silo to initialize during mapload
addtimer(CALLBACK(src, PROC_REF(_PrepareStorage), connect_to_silo))
@@ -50,6 +60,8 @@ handles linking back and forth.
* only if allow_standalone = TRUE, else you a null mat_container
*/
/datum/component/remote_materials/proc/_PrepareStorage(connect_to_silo)
+ PRIVATE_PROC(TRUE)
+
if (connect_to_silo)
silo = GLOB.ore_silo_default
if (silo)
@@ -68,6 +80,8 @@ handles linking back and forth.
return ..()
/datum/component/remote_materials/proc/_MakeLocal()
+ PRIVATE_PROC(TRUE)
+
silo = null
var/static/list/allowed_mats = list(
@@ -89,6 +103,7 @@ handles linking back and forth.
allowed_mats, \
local_size, \
mat_container_flags, \
+ container_signals = mat_container_signals, \
allowed_items = /obj/item/stack \
)
@@ -132,7 +147,7 @@ handles linking back and forth.
return
if(silo)
- mat_container.user_insert(target, user, mat_container_flags, parent)
+ mat_container.user_insert(target, user, parent)
return COMPONENT_NO_AFTERATTACK
@@ -170,7 +185,8 @@ handles linking back and forth.
silo.ore_connected_machines += src
silo.updateUsrDialog()
mat_container = new_container
- RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy))
+ if(!(mat_container_flags & MATCONTAINER_NO_INSERT))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy))
to_chat(user, span_notice("You connect [parent] to [silo] from the multitool's buffer."))
return ITEM_INTERACT_BLOCKING
@@ -199,15 +215,19 @@ handles linking back and forth.
* - The parent is of type movable atom
* - A mat container is actually present
* - The silo in not on hold
+ * Arguments
+ * * check_hold - should we check if the silo is on hold
*/
-/datum/component/remote_materials/proc/_can_use_resource()
+/datum/component/remote_materials/proc/_can_use_resource(check_hold = TRUE)
+ PRIVATE_PROC(TRUE)
+
var/atom/movable/movable_parent = parent
if (!istype(movable_parent))
return FALSE
if (!mat_container) //no silolink & local storage not supported
movable_parent.say("No access to material storage, please contact the quartermaster.")
return FALSE
- if(on_hold()) //silo on hold
+ if(check_hold && on_hold()) //silo on hold
movable_parent.say("Mineral access is on hold, please contact the quartermaster.")
return FALSE
return TRUE
@@ -254,3 +274,16 @@ handles linking back and forth.
drop_target = movable_parent.drop_location()
return mat_container.retrieve_sheets(eject_amount, material_ref, target = drop_target, context = parent)
+
+/**
+ * Insert an item into the mat container, helper proc to insert items with the correct context
+ *
+ * Arguments
+ * * obj/item/weapon - the item you are trying to insert
+ * * multiplier - the multiplier applied on the materials consumed
+ */
+/datum/component/remote_materials/proc/insert_item(obj/item/weapon, multiplier = 1)
+ if(!_can_use_resource(FALSE))
+ return MATERIAL_INSERT_ITEM_FAILURE
+
+ return mat_container.insert_item(weapon, multiplier, parent)
diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm
index 41ed23ecc2f..d22999512d9 100644
--- a/code/datums/components/mind_linker.dm
+++ b/code/datums/components/mind_linker.dm
@@ -65,13 +65,13 @@
master_speech.Grant(owner)
*/ //ORIGINAL CODE END
- //SKYRAT EDIT - NIFs
+ //NOVA EDIT - NIFs
if(speech_action)
master_speech = new(src)
master_speech.Grant(owner)
- //SKYRAT EDIT END
+ //NOVA EDIT END
-/datum/component/mind_linker/Destroy(force, silent)
+/datum/component/mind_linker/Destroy(force)
for(var/mob/living/remaining_mob as anything in linked_mobs)
unlink_mob(remaining_mob)
linked_mobs.Cut()
@@ -102,12 +102,12 @@
if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0))
return FALSE
*/ //ORIGINAL CODE END
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD) && linking_protection) // Mindshield implant - no dice
return FALSE
if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0) && linking_protection)
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(linked_mobs[to_link])
return FALSE
diff --git a/code/datums/components/mob_chain.dm b/code/datums/components/mob_chain.dm
index 583a80534c1..a258fe3f5be 100644
--- a/code/datums/components/mob_chain.dm
+++ b/code/datums/components/mob_chain.dm
@@ -28,7 +28,7 @@
var/mob/living/living_parent = parent
living_parent.set_glide_size(front.glide_size)
-/datum/component/mob_chain/Destroy(force, silent)
+/datum/component/mob_chain/Destroy(force)
if (!isnull(front))
SEND_SIGNAL(front, COMSIG_MOB_LOST_CHAIN_TAIL, parent)
front = null
diff --git a/code/datums/components/mob_harvest.dm b/code/datums/components/mob_harvest.dm
index 8342ee411fe..b9f9f86350b 100644
--- a/code/datums/components/mob_harvest.dm
+++ b/code/datums/components/mob_harvest.dm
@@ -42,7 +42,7 @@
item_generation_time = item_generation_wait
START_PROCESSING(SSobj, src)
-/datum/component/mob_harvest/Destroy(force, silent)
+/datum/component/mob_harvest/Destroy(force)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/code/datums/components/nuclear_bomb_operator.dm b/code/datums/components/nuclear_bomb_operator.dm
index da6e8b0cab1..6ab9330e5ca 100644
--- a/code/datums/components/nuclear_bomb_operator.dm
+++ b/code/datums/components/nuclear_bomb_operator.dm
@@ -48,7 +48,7 @@
))
parent.remove_traits(list(TRAIT_DISK_VERIFIER, TRAIT_CAN_STRIP, TRAIT_CAN_USE_NUKE), NUKE_OP_MINION_TRAIT)
-/datum/component/nuclear_bomb_operator/Destroy(force, silent)
+/datum/component/nuclear_bomb_operator/Destroy(force)
QDEL_NULL(disky)
on_disk_collected = null
add_disk_overlays = null
diff --git a/code/datums/components/on_hit_effect.dm b/code/datums/components/on_hit_effect.dm
index 50f31269f16..4093249c1ad 100644
--- a/code/datums/components/on_hit_effect.dm
+++ b/code/datums/components/on_hit_effect.dm
@@ -21,7 +21,7 @@
return ELEMENT_INCOMPATIBLE
src.thrown_effect = thrown_effect
-/datum/component/on_hit_effect/Destroy(force, silent)
+/datum/component/on_hit_effect/Destroy(force)
on_hit_callback = null
extra_check_callback = null
return ..()
diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm
index fbd32fe5e4f..5a34feafed7 100644
--- a/code/datums/components/pellet_cloud.dm
+++ b/code/datums/components/pellet_cloud.dm
@@ -55,7 +55,7 @@
/datum/component/pellet_cloud/Initialize(projectile_type=/obj/item/shrapnel, magnitude=5)
- if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent) && !ishorrorling(parent)) //SKYRAT EDIT CHANGE: if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent))
+ if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent) && !ishorrorling(parent)) //NOVA EDIT CHANGE: if(!isammocasing(parent) && !isgrenade(parent) && !islandmine(parent) && !issupplypod(parent))
return COMPONENT_INCOMPATIBLE
if(magnitude < 1)
@@ -66,10 +66,10 @@
if(isammocasing(parent))
num_pellets = magnitude
- else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent) || ishorrorling(parent)) //SKYRAT EDIT CHANGE: else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent))
+ else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent) || ishorrorling(parent)) //NOVA EDIT CHANGE: else if(isgrenade(parent) || islandmine(parent) || issupplypod(parent))
radius = magnitude
-/datum/component/pellet_cloud/Destroy(force, silent)
+/datum/component/pellet_cloud/Destroy(force)
purple_hearts = null
pellets = null
targets_hit = null
@@ -88,10 +88,10 @@
RegisterSignal(parent, COMSIG_MINE_TRIGGERED, PROC_REF(create_blast_pellets))
else if(issupplypod(parent))
RegisterSignal(parent, COMSIG_SUPPLYPOD_LANDED, PROC_REF(create_blast_pellets))
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
else if(ishorrorling(parent))
RegisterSignal(parent, COMSIG_HORRORFORM_EXPLODE, PROC_REF(create_blast_pellets))
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/component/pellet_cloud/UnregisterFromParent()
UnregisterSignal(parent, list(COMSIG_PREQDELETED, COMSIG_FIRE_CASING, COMSIG_GRENADE_DETONATE, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED))
diff --git a/code/datums/components/pet_commands/fetch.dm b/code/datums/components/pet_commands/fetch.dm
index fa0b3193a44..9a42c485d5c 100644
--- a/code/datums/components/pet_commands/fetch.dm
+++ b/code/datums/components/pet_commands/fetch.dm
@@ -57,7 +57,7 @@
RegisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(listen_throw_land))
/// A throw we were listening to has finished, see if it's in range for us to try grabbing it
-/datum/pet_command/point_targeting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwing_datum)
+/datum/pet_command/point_targeting/fetch/proc/listen_throw_land(obj/item/thrown_thing, datum/thrownthing/throwingdatum)
SIGNAL_HANDLER
UnregisterSignal(thrown_thing, COMSIG_MOVABLE_THROW_LANDED)
@@ -69,9 +69,11 @@
if (!can_see(parent, thrown_thing, length = sense_radius))
return
- try_activate_command(throwing_datum.thrower)
- set_command_target(parent, thrown_thing)
- parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, throwing_datum.thrower)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(thrower)
+ try_activate_command(thrower)
+ set_command_target(parent, thrown_thing)
+ parent.ai_controller.set_blackboard_key(BB_FETCH_DELIVER_TO, thrower)
// Don't try and fetch turfs or anchored objects if someone points at them
/datum/pet_command/point_targeting/fetch/look_for_target(mob/living/pointing_friend, obj/item/pointed_atom)
diff --git a/code/datums/components/pet_commands/obeys_commands.dm b/code/datums/components/pet_commands/obeys_commands.dm
index efe01985d20..2fceaa2b337 100644
--- a/code/datums/components/pet_commands/obeys_commands.dm
+++ b/code/datums/components/pet_commands/obeys_commands.dm
@@ -22,7 +22,7 @@
var/datum/pet_command/new_command = new command_path(parent)
available_commands[new_command.command_name] = new_command
-/datum/component/obeys_commands/Destroy(force, silent)
+/datum/component/obeys_commands/Destroy(force)
. = ..()
QDEL_NULL(available_commands)
diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm
index 7762b9b2aa8..cf376b21001 100644
--- a/code/datums/components/pet_commands/pet_command.dm
+++ b/code/datums/components/pet_commands/pet_command.dm
@@ -30,10 +30,18 @@
/// Register a new guy we want to listen to
/datum/pet_command/proc/add_new_friend(mob/living/tamer)
RegisterSignal(tamer, COMSIG_MOB_SAY, PROC_REF(respond_to_command))
+ RegisterSignal(tamer, COMSIG_MOB_AUTOMUTE_CHECK, PROC_REF(waive_automute))
/// Stop listening to a guy
/datum/pet_command/proc/remove_friend(mob/living/unfriended)
- UnregisterSignal(unfriended, COMSIG_MOB_SAY)
+ UnregisterSignal(unfriended, list(COMSIG_MOB_SAY, COMSIG_MOB_AUTOMUTE_CHECK))
+
+/// Stop the automute from triggering for commands (unless the spoken text is suspiciously longer than the command)
+/datum/pet_command/proc/waive_automute(mob/living/speaker, client/client, last_message, mute_type)
+ SIGNAL_HANDLER
+ if(mute_type == MUTE_IC && find_command_in_text(last_message, check_verbosity = TRUE))
+ return WAIVE_AUTOMUTE_CHECK
+ return NONE
/// Respond to something that one of our friends has asked us to do
/datum/pet_command/proc/respond_to_command(mob/living/speaker, speech_args)
@@ -51,11 +59,16 @@
try_activate_command(speaker)
-/// Returns true if we find any of our spoken commands in the text
-/datum/pet_command/proc/find_command_in_text(spoken_text)
+/**
+ * Returns true if we find any of our spoken commands in the text.
+ * if check_verbosity is true, skip the match if there spoken_text is way longer than the match
+ */
+/datum/pet_command/proc/find_command_in_text(spoken_text, check_verbosity = FALSE)
for (var/command as anything in speech_commands)
if (!findtext(spoken_text, command))
continue
+ if(check_verbosity && length(spoken_text) > length(command) + MAX_NAME_LEN)
+ continue
return TRUE
return FALSE
diff --git a/code/datums/components/pinata.dm b/code/datums/components/pinata.dm
index 1056200e3e2..064bc2de26b 100644
--- a/code/datums/components/pinata.dm
+++ b/code/datums/components/pinata.dm
@@ -52,7 +52,7 @@
new dropped_item(get_turf(parent))
qdel(src)
-/datum/component/pinata/Destroy(force, silent)
+/datum/component/pinata/Destroy(force)
UnregisterSignal(parent, list(
COMSIG_MOB_APPLY_DAMAGE,
COMSIG_LIVING_DEATH,
diff --git a/code/datums/components/plumbing/chemical_acclimator.dm b/code/datums/components/plumbing/chemical_acclimator.dm
index 777a2804a78..f84252c51de 100644
--- a/code/datums/components/plumbing/chemical_acclimator.dm
+++ b/code/datums/components/plumbing/chemical_acclimator.dm
@@ -9,7 +9,7 @@
return COMPONENT_INCOMPATIBLE
myacclimator = parent
-/datum/component/plumbing/acclimator/Destroy(force, silent)
+/datum/component/plumbing/acclimator/Destroy(force)
myacclimator = null
return ..()
diff --git a/code/datums/components/puzzgrid.dm b/code/datums/components/puzzgrid.dm
index 8a7620b06e3..611df16ccaa 100644
--- a/code/datums/components/puzzgrid.dm
+++ b/code/datums/components/puzzgrid.dm
@@ -55,7 +55,7 @@
addtimer(CALLBACK(src, PROC_REF(out_of_time)), timer)
time_to_finish = world.time + timer
-/datum/component/puzzgrid/Destroy(force, silent)
+/datum/component/puzzgrid/Destroy(force)
puzzgrid = null
on_victory_callback = null
on_fail_callback = null
diff --git a/code/datums/components/radioactive_emitter.dm b/code/datums/components/radioactive_emitter.dm
index 6a95f36079c..26e33855a11 100644
--- a/code/datums/components/radioactive_emitter.dm
+++ b/code/datums/components/radioactive_emitter.dm
@@ -41,7 +41,7 @@
// Easier to handle edits to the cooldown duration, prevents timer spam for short cooldown emitters
START_PROCESSING(SSfastprocess, src)
-/datum/component/radioactive_emitter/Destroy(force, silent)
+/datum/component/radioactive_emitter/Destroy(force)
STOP_PROCESSING(SSfastprocess, src)
return ..()
diff --git a/code/datums/components/radioactive_exposure.dm b/code/datums/components/radioactive_exposure.dm
index 0819b46f7df..b8a034e7788 100644
--- a/code/datums/components/radioactive_exposure.dm
+++ b/code/datums/components/radioactive_exposure.dm
@@ -66,7 +66,7 @@
qdel(src)
-/datum/component/radioactive_exposure/Destroy(force, silent)
+/datum/component/radioactive_exposure/Destroy(force)
var/mob/living/carbon/human/human_parent = parent
human_parent.clear_alert(ALERT_RADIOACTIVE_AREA)
diff --git a/code/datums/components/reagent_refiller.dm b/code/datums/components/reagent_refiller.dm
index ffb451b83ac..35bdcb4ce51 100644
--- a/code/datums/components/reagent_refiller.dm
+++ b/code/datums/components/reagent_refiller.dm
@@ -28,7 +28,7 @@
return ..()
-/datum/component/reagent_refiller/Destroy(force, silent)
+/datum/component/reagent_refiller/Destroy(force)
power_draw_callback = null
return ..()
diff --git a/code/datums/components/redirect_attack_hand_from_turf.dm b/code/datums/components/redirect_attack_hand_from_turf.dm
index 5beef957dd3..bb823609241 100644
--- a/code/datums/components/redirect_attack_hand_from_turf.dm
+++ b/code/datums/components/redirect_attack_hand_from_turf.dm
@@ -25,7 +25,7 @@
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))
connect_to_new_turf()
-/datum/component/redirect_attack_hand_from_turf/Destroy(force, silent)
+/datum/component/redirect_attack_hand_from_turf/Destroy(force)
disconnect_from_old_turf()
return ..()
diff --git a/code/datums/components/reflection.dm b/code/datums/components/reflection.dm
index 80532ca2a61..d85960951aa 100644
--- a/code/datums/components/reflection.dm
+++ b/code/datums/components/reflection.dm
@@ -55,7 +55,7 @@
var/list/reflect_update_signals = list(COMSIG_MOVABLE_MOVED) + update_signals
RegisterSignals(parent, reflect_update_signals, PROC_REF(get_reflection_targets))
-/datum/component/reflection/Destroy(force, silent)
+/datum/component/reflection/Destroy(force)
QDEL_LIST_ASSOC_VAL(reflected_movables)
QDEL_NULL(reflection_holder)
can_reflect = null
diff --git a/code/datums/components/regenerator.dm b/code/datums/components/regenerator.dm
index b9886764565..a8fd3d0c46c 100644
--- a/code/datums/components/regenerator.dm
+++ b/code/datums/components/regenerator.dm
@@ -59,7 +59,7 @@
UnregisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE)
stop_regenerating()
-/datum/component/regenerator/Destroy(force, silent)
+/datum/component/regenerator/Destroy(force)
stop_regenerating()
. = ..()
if(regeneration_start_timer)
diff --git a/code/datums/components/religious_tool.dm b/code/datums/components/religious_tool.dm
index 8491e489bed..3c421a04aa3 100644
--- a/code/datums/components/religious_tool.dm
+++ b/code/datums/components/religious_tool.dm
@@ -43,7 +43,7 @@
RegisterSignal(SSdcs, COMSIG_RELIGIOUS_SECT_CHANGED, PROC_REF(SetGlobalToLocal))
RegisterSignal(SSdcs, COMSIG_RELIGIOUS_SECT_RESET, PROC_REF(on_sect_reset))
-/datum/component/religious_tool/Destroy(force, silent)
+/datum/component/religious_tool/Destroy(force)
easy_access_sect = null
performing_rite = null
catalyst_type = null
diff --git a/code/datums/components/riding/riding.dm b/code/datums/components/riding/riding.dm
index c8c969a8c6b..98024e1a00e 100644
--- a/code/datums/components/riding/riding.dm
+++ b/code/datums/components/riding/riding.dm
@@ -26,8 +26,6 @@
var/list/directional_vehicle_layers = list()
/// same as above but instead of layer you have a list(px, py)
var/list/directional_vehicle_offsets = list()
- /// planes of the rider
- var/list/directional_rider_planes = list()
/// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence.
var/list/allowed_turf_typecache
/// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence.
@@ -108,7 +106,6 @@
var/atom/movable/movable_parent = parent
handle_vehicle_layer(movable_parent.dir)
handle_vehicle_offsets(movable_parent.dir)
- handle_rider_plane(movable_parent.dir)
if(rider.pulling == source)
rider.stop_pulling()
@@ -138,20 +135,9 @@
. = AM.layer
AM.layer = .
-/datum/component/riding/proc/handle_rider_plane(dir)
- var/atom/movable/movable_parent = parent
- var/target_plane = directional_rider_planes["[dir]"]
- if(isnull(target_plane))
- return
- for(var/mob/buckled_mob in movable_parent.buckled_mobs)
- SET_PLANE_EXPLICIT(buckled_mob, target_plane, movable_parent)
-
/datum/component/riding/proc/set_vehicle_dir_layer(dir, layer)
directional_vehicle_layers["[dir]"] = layer
-/datum/component/riding/proc/set_rider_dir_plane(dir, plane)
- directional_rider_planes["[dir]"] = plane
-
/// This is called after the ridden atom is successfully moved and is used to handle icon stuff
/datum/component/riding/proc/vehicle_moved(datum/source, oldloc, dir, forced)
SIGNAL_HANDLER
@@ -166,7 +152,6 @@
return // runtimed with piggy's without this, look into this more
handle_vehicle_offsets(dir)
handle_vehicle_layer(dir)
- handle_rider_plane(dir)
/// Turning is like moving
/datum/component/riding/proc/vehicle_turned(datum/source, _old_dir, new_dir)
diff --git a/code/datums/components/riding/riding_mob.dm b/code/datums/components/riding/riding_mob.dm
index 0ad6c1e4c7f..53aa87b74bb 100644
--- a/code/datums/components/riding/riding_mob.dm
+++ b/code/datums/components/riding/riding_mob.dm
@@ -1,11 +1,11 @@
// For any mob that can be ridden
-//SKYRAT EDIT START: Human Riding Defines
+//NOVA EDIT START: Human Riding Defines
#define OVERSIZED_OFFSET 18
#define OVERSIZED_SIDE_OFFSET 11
#define REGULAR_OFFSET 6
#define REGULAR_SIDE_OFFSET 4
-//SKYRAT EDIT END
+//NOVA EDIT END
/datum/component/riding/creature
/// If TRUE, this creature's movements can be controlled by the rider while mounted (as opposed to riding cyborgs and humans, which is passive)
var/can_be_driven = TRUE
@@ -32,7 +32,7 @@
var/mob/living/simple_animal/simple_parent = parent
simple_parent.stop_automated_movement = TRUE
-/datum/component/riding/creature/Destroy(force, silent)
+/datum/component/riding/creature/Destroy(force)
unequip_buckle_inhands(parent)
if(isanimal(parent))
var/mob/living/simple_animal/simple_parent = parent
@@ -289,7 +289,7 @@
/datum/component/riding/creature/human/get_offsets(pass_index)
var/mob/living/carbon/human/H = parent
- //SKYRAT EDIT BEGIN - Oversized Overhaul
+ //NOVA EDIT BEGIN - Oversized Overhaul
if(H.buckle_lying)
return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list(
TEXT_NORTH = list(0, OVERSIZED_OFFSET),
@@ -314,7 +314,7 @@
TEXT_EAST = list(-REGULAR_OFFSET, REGULAR_SIDE_OFFSET),
TEXT_WEST = list(REGULAR_OFFSET, REGULAR_SIDE_OFFSET)
)
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/component/riding/creature/human/force_dismount(mob/living/dismounted_rider)
var/atom/movable/AM = parent
AM.unbuckle_mob(dismounted_rider)
@@ -464,7 +464,7 @@
var/mob/living/basic/mining/goliath/goliath = parent
goliath.add_movespeed_modifier(/datum/movespeed_modifier/goliath_mount)
-/datum/component/riding/creature/goliath/Destroy(force, silent)
+/datum/component/riding/creature/goliath/Destroy(force)
var/mob/living/basic/mining/goliath/goliath = parent
goliath.remove_movespeed_modifier(/datum/movespeed_modifier/goliath_mount)
return ..()
@@ -527,10 +527,6 @@
/datum/component/riding/creature/leaper/handle_specials()
. = ..()
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(17, 46), TEXT_SOUTH = list(17,51), TEXT_EAST = list(27, 46), TEXT_WEST = list(6, 46)))
- set_rider_dir_plane(SOUTH, GAME_PLANE_UPPER)
- set_rider_dir_plane(NORTH, GAME_PLANE)
- set_rider_dir_plane(EAST, GAME_PLANE_UPPER)
- set_rider_dir_plane(WEST, GAME_PLANE_UPPER)
/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE, potion_boost = FALSE)
. = ..()
@@ -550,9 +546,9 @@
. = ..()
UnregisterSignal(rider, COMSIG_MOB_POINTED)
-//SKYRAT EDIT START: Human Riding Defines
+//NOVA EDIT START: Human Riding Defines
#undef OVERSIZED_OFFSET
#undef OVERSIZED_SIDE_OFFSET
#undef REGULAR_OFFSET
#undef REGULAR_SIDE_OFFSET
-//SKYRAT EDIT END
+//NOVA EDIT END
diff --git a/code/datums/components/riding/riding_vehicle.dm b/code/datums/components/riding/riding_vehicle.dm
index 2a556ac8944..bacf012aa5a 100644
--- a/code/datums/components/riding/riding_vehicle.dm
+++ b/code/datums/components/riding/riding_vehicle.dm
@@ -178,7 +178,7 @@
set_vehicle_dir_layer(WEST, OBJ_LAYER)
/datum/component/riding/vehicle/scooter/skateboard/wheelys
- vehicle_move_delay = 1.75 // SKYRAT EDIT - ORIGINAL: 0
+ vehicle_move_delay = 1.75 // NOVA EDIT - ORIGINAL: 0
/datum/component/riding/vehicle/scooter/skateboard/wheelys/handle_specials()
. = ..()
diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm
index 853820eaa73..b413b6f8e51 100644
--- a/code/datums/components/scope.dm
+++ b/code/datums/components/scope.dm
@@ -1,33 +1,54 @@
+///A component that allows players to use the item to zoom out. Mainly intended for firearms, but now works with other items too.
/datum/component/scope
/// How far we can extend, with modifier of 1, up to our vision edge, higher numbers multiply.
var/range_modifier = 1
- /// Fullscreen object we use for tracking the shots.
+ /// Fullscreen object we use for tracking.
var/atom/movable/screen/fullscreen/cursor_catcher/scope/tracker
/// The owner of the tracker's ckey. For comparing with the current owner mob, in case the client has left it (e.g. ghosted).
var/tracker_owner_ckey
- /// Are we zooming currently?
- var/zooming
+ /// The method which we zoom in and out
+ var/zoom_method = ZOOM_METHOD_RIGHT_CLICK
+ /// if not null, an item action will be added. Redundant if the mode is ZOOM_METHOD_RIGHT_CLICK or ZOOM_METHOD_WIELD.
+ var/item_action_type
-/datum/component/scope/Initialize(range_modifier)
- if(!isgun(parent))
+/datum/component/scope/Initialize(range_modifier = 1, zoom_method = ZOOM_METHOD_RIGHT_CLICK, item_action_type)
+ if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
src.range_modifier = range_modifier
+ src.zoom_method = zoom_method
+ src.item_action_type = item_action_type
-/datum/component/scope/Destroy(force, silent)
+/datum/component/scope/Destroy(force)
if(tracker)
stop_zooming(tracker.owner)
return ..()
/datum/component/scope/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
- RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_afterattack))
- RegisterSignal(parent, COMSIG_GUN_TRY_FIRE, PROC_REF(on_gun_fire))
+ switch(zoom_method)
+ if(ZOOM_METHOD_RIGHT_CLICK)
+ RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_afterattack))
+ if(ZOOM_METHOD_WIELD)
+ RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_WIELDED), PROC_REF(on_wielded))
+ RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_WIELDED), PROC_REF(on_unwielded))
+ if(item_action_type)
+ var/obj/item/parent_item = parent
+ var/datum/action/item_action/scope = parent_item.add_item_action(item_action_type)
+ RegisterSignal(scope, COMSIG_ACTION_TRIGGER, PROC_REF(on_action_trigger))
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
+ if(isgun(parent))
+ RegisterSignal(parent, COMSIG_GUN_TRY_FIRE, PROC_REF(on_gun_fire))
/datum/component/scope/UnregisterFromParent()
+ if(item_action_type)
+ var/obj/item/parent_item = parent
+ var/datum/action/item_action/scope = locate(item_action_type) in parent_item.actions
+ parent_item.remove_item_action(scope)
UnregisterSignal(parent, list(
COMSIG_MOVABLE_MOVED,
COMSIG_ITEM_AFTERATTACK_SECONDARY,
+ SIGNAL_ADDTRAIT(TRAIT_WIELDED),
+ SIGNAL_REMOVETRAIT(TRAIT_WIELDED),
COMSIG_GUN_TRY_FIRE,
COMSIG_ATOM_EXAMINE,
))
@@ -56,9 +77,28 @@
if(tracker)
stop_zooming(user)
else
- start_zooming(user)
+ zoom(user)
return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN
+/datum/component/scope/proc/on_action_trigger(datum/action/source)
+ SIGNAL_HANDLER
+ var/obj/item/item = source.target
+ var/mob/living/user = item.loc
+ if(tracker)
+ stop_zooming(user)
+ else
+ zoom(user)
+
+/datum/component/scope/proc/on_wielded(obj/item/source, trait)
+ SIGNAL_HANDLER
+ var/mob/living/user = source.loc
+ zoom(user)
+
+/datum/component/scope/proc/on_unwielded(obj/item/source, trait)
+ SIGNAL_HANDLER
+ var/mob/living/user = source.loc
+ stop_zooming(user)
+
/datum/component/scope/proc/on_gun_fire(obj/item/gun/source, mob/living/user, atom/target, flag, params)
SIGNAL_HANDLER
@@ -70,7 +110,12 @@
/datum/component/scope/proc/on_examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
- examine_list += span_notice("You can scope in with right-click .")
+ var/scope = isgun(parent) ? "scope in" : "zoom out"
+ switch(zoom_method)
+ if(ZOOM_METHOD_RIGHT_CLICK)
+ examine_list += span_notice("You can [scope] with right-click .")
+ if(ZOOM_METHOD_WIELD)
+ examine_list += span_notice("You can [scope] by wielding it with both hands.")
/**
* We find and return the best target to hit on a given turf.
@@ -105,17 +150,7 @@
return target_turf
/**
- * Wrapper for zoom(), so in case we runtime we do not get stuck in a bad state
- *
- * Arguments:
- * * user: The mob we are starting zooming on.
-*/
-/datum/component/scope/proc/start_zooming(mob/user)
- if(zoom(user))
- zooming = TRUE
-
-/**
- * We start zooming by hiding the mouse pointer, adding our tracker overlay and starting our processing.
+ * We start zooming by adding our tracker overlay and starting our processing.
*
* Arguments:
* * user: The mob we are starting zooming on.
@@ -123,18 +158,33 @@
/datum/component/scope/proc/zoom(mob/user)
if(isnull(user.client))
return
- if(zooming)
+ if(HAS_TRAIT(user, TRAIT_USER_SCOPED))
+ user.balloon_alert(user, "already zoomed!")
return
- user.client.mouse_override_icon = 'icons/effects/mouse_pointers/scope_hide.dmi'
- user.update_mouse_pointer()
user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE)
- tracker = user.overlay_fullscreen("scope", /atom/movable/screen/fullscreen/cursor_catcher/scope, 0)
+ tracker = user.overlay_fullscreen("scope", /atom/movable/screen/fullscreen/cursor_catcher/scope, isgun(parent))
tracker.assign_to_mob(user, range_modifier)
tracker_owner_ckey = user.ckey
- RegisterSignals(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING), PROC_REF(stop_zooming))
+ if(user.is_holding(parent))
+ RegisterSignals(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING), PROC_REF(stop_zooming))
+ else // The item is likely worn (eg. mothic cap)
+ RegisterSignal(user, COMSIG_QDELETING, PROC_REF(stop_zooming))
+ var/static/list/capacity_signals = list(
+ COMSIG_LIVING_STATUS_KNOCKDOWN,
+ COMSIG_LIVING_STATUS_PARALYZE,
+ COMSIG_LIVING_STATUS_STUN,
+ )
+ RegisterSignals(user, capacity_signals, PROC_REF(on_incapacitated))
START_PROCESSING(SSprojectiles, src)
+ ADD_TRAIT(user, TRAIT_USER_SCOPED, REF(src))
return TRUE
+/datum/component/scope/proc/on_incapacitated(mob/living/source, amount = 0, ignore_canstun = FALSE)
+ SIGNAL_HANDLER
+
+ if(amount > 0)
+ stop_zooming(source)
+
/**
* We stop zooming, canceling processing, resetting stuff back to normal and deleting our tracker.
*
@@ -144,13 +194,18 @@
/datum/component/scope/proc/stop_zooming(mob/user)
SIGNAL_HANDLER
- if(!zooming)
+ if(!HAS_TRAIT(user, TRAIT_USER_SCOPED))
return
STOP_PROCESSING(SSprojectiles, src)
- UnregisterSignal(user, list(COMSIG_MOB_SWAP_HANDS, COMSIG_QDELETING))
-
- zooming = FALSE
+ UnregisterSignal(user, list(
+ COMSIG_LIVING_STATUS_KNOCKDOWN,
+ COMSIG_LIVING_STATUS_PARALYZE,
+ COMSIG_LIVING_STATUS_STUN,
+ COMSIG_MOB_SWAP_HANDS,
+ COMSIG_QDELETING,
+ ))
+ REMOVE_TRAIT(user, TRAIT_USER_SCOPED, REF(src))
user.playsound_local(parent, 'sound/weapons/scope.ogg', 75, TRUE, frequency = -1)
user.clear_fullscreen("scope")
@@ -165,8 +220,6 @@
if(user.client)
animate(user.client, 0.2 SECONDS, pixel_x = 0, pixel_y = 0)
- user.client.mouse_override_icon = null
- user.update_mouse_pointer()
tracker = null
tracker_owner_ckey = null
diff --git a/code/datums/components/seclight_attachable.dm b/code/datums/components/seclight_attachable.dm
index d82f274a07c..b1d4aebc93f 100644
--- a/code/datums/components/seclight_attachable.dm
+++ b/code/datums/components/seclight_attachable.dm
@@ -50,7 +50,7 @@
if(istype(starting_light))
add_light(starting_light)
-/datum/component/seclite_attachable/Destroy(force, silent)
+/datum/component/seclite_attachable/Destroy(force)
if(light)
remove_light()
return ..()
diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm
index 4359c454f1a..bae87faf615 100644
--- a/code/datums/components/seethrough_mob.dm
+++ b/code/datums/components/seethrough_mob.dm
@@ -42,7 +42,7 @@
var/datum/action/cooldown/toggle_seethrough/action = new(src)
action.Grant(parent)
-/datum/component/seethrough_mob/Destroy(force, silent)
+/datum/component/seethrough_mob/Destroy(force)
QDEL_NULL(render_source_atom)
return ..()
diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm
index 77f0b16ab71..a436a40d516 100644
--- a/code/datums/components/shell.dm
+++ b/code/datums/components/shell.dm
@@ -101,7 +101,7 @@
QDEL_NULL(attached_circuit)
-/datum/component/shell/Destroy(force, silent)
+/datum/component/shell/Destroy(force)
QDEL_LIST(unremovable_circuit_components)
return ..()
diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm
index 0265148c8b5..8a46697745f 100644
--- a/code/datums/components/shielded.dm
+++ b/code/datums/components/shielded.dm
@@ -57,7 +57,7 @@
if(recharge_start_delay)
START_PROCESSING(SSdcs, src)
-/datum/component/shielded/Destroy(force, silent)
+/datum/component/shielded/Destroy(force)
if(wearer)
shield_icon = "broken"
UnregisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS)
diff --git a/code/datums/components/shovel_hands.dm b/code/datums/components/shovel_hands.dm
index 34eaf8a98b6..752af0d8bd9 100644
--- a/code/datums/components/shovel_hands.dm
+++ b/code/datums/components/shovel_hands.dm
@@ -20,7 +20,7 @@
UnregisterSignal(parent, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET))
return ..()
-/datum/component/shovel_hands/Destroy(force, silent)
+/datum/component/shovel_hands/Destroy(force)
if (internal_shovel)
UnregisterSignal(internal_shovel, COMSIG_QDELETING)
QDEL_NULL(internal_shovel)
diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm
index 9cbff17c0a3..6702b9d601d 100644
--- a/code/datums/components/shuttle_cling.dm
+++ b/code/datums/components/shuttle_cling.dm
@@ -177,7 +177,7 @@
qdel(src)
-/datum/component/shuttle_cling/Destroy(force, silent)
+/datum/component/shuttle_cling/Destroy(force)
REMOVE_TRAIT(parent, TRAIT_HYPERSPACED, REF(src))
QDEL_NULL(hyperloop)
diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm
index 41b11a219c0..c1323d01e2f 100644
--- a/code/datums/components/singularity.dm
+++ b/code/datums/components/singularity.dm
@@ -108,7 +108,7 @@
GLOB.singularities |= src
-/datum/component/singularity/Destroy(force, silent)
+/datum/component/singularity/Destroy(force)
GLOB.singularities -= src
consume_callback = null
target = null
diff --git a/code/datums/components/sitcomlaughter.dm b/code/datums/components/sitcomlaughter.dm
index 8ca335eb8b5..62e9276b1d7 100644
--- a/code/datums/components/sitcomlaughter.dm
+++ b/code/datums/components/sitcomlaughter.dm
@@ -22,7 +22,7 @@
if(laugh_delay)
src.laugh_delay = laugh_delay
-/datum/component/wearertargeting/sitcomlaughter/Destroy(force, silent)
+/datum/component/wearertargeting/sitcomlaughter/Destroy(force)
post_comedy_callback = null
return ..()
diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm
index 620f6baa816..74dbdd5642f 100644
--- a/code/datums/components/slippery.dm
+++ b/code/datums/components/slippery.dm
@@ -88,7 +88,7 @@
else
RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(Slip))
-/datum/component/slippery/Destroy(force, silent)
+/datum/component/slippery/Destroy(force)
can_slip_callback = null
on_slip_callback = null
holder = null
diff --git a/code/datums/components/smooth_tunes.dm b/code/datums/components/smooth_tunes.dm
index 1442d29547b..0b86693f7f2 100644
--- a/code/datums/components/smooth_tunes.dm
+++ b/code/datums/components/smooth_tunes.dm
@@ -24,7 +24,7 @@
src.particles_path = particles_path
src.glow_color = glow_color
-/datum/component/smooth_tunes/Destroy(force, silent)
+/datum/component/smooth_tunes/Destroy(force)
if(particle_holder)
QDEL_NULL(particle_holder)
qdel(linked_songtuner_rite)
diff --git a/code/datums/components/spin2win.dm b/code/datums/components/spin2win.dm
index 0812258f769..4524b403355 100644
--- a/code/datums/components/spin2win.dm
+++ b/code/datums/components/spin2win.dm
@@ -38,7 +38,7 @@
src.start_spin_message = start_spin_message
src.end_spin_message = end_spin_message
-/datum/component/spin2win/Destroy(force, silent)
+/datum/component/spin2win/Destroy(force)
on_spin_callback = null
on_unspin_callback = null
return ..()
diff --git a/code/datums/components/spinny.dm b/code/datums/components/spinny.dm
index bec04b34560..d3cf52e29e0 100644
--- a/code/datums/components/spinny.dm
+++ b/code/datums/components/spinny.dm
@@ -18,7 +18,7 @@
turn_degrees = (reverse ? -90 : 90)
START_PROCESSING(SSfastprocess, src)
-/datum/component/spinny/Destroy(force, silent)
+/datum/component/spinny/Destroy(force)
STOP_PROCESSING(SSfastprocess, src)
return ..()
diff --git a/code/datums/components/spirit_holding.dm b/code/datums/components/spirit_holding.dm
index 37186825d62..cb626801d86 100644
--- a/code/datums/components/spirit_holding.dm
+++ b/code/datums/components/spirit_holding.dm
@@ -13,7 +13,7 @@
if(!ismovable(parent)) //you may apply this to mobs, i take no responsibility for how that works out
return COMPONENT_INCOMPATIBLE
-/datum/component/spirit_holding/Destroy(force, silent)
+/datum/component/spirit_holding/Destroy(force)
. = ..()
if(bound_spirit)
QDEL_NULL(bound_spirit)
diff --git a/code/datums/components/squashable.dm b/code/datums/components/squashable.dm
index 86135faa7bb..785c6771ad3 100644
--- a/code/datums/components/squashable.dm
+++ b/code/datums/components/squashable.dm
@@ -29,7 +29,7 @@
AddComponent(/datum/component/connect_loc_behalf, parent, loc_connections)
-/datum/component/squashable/Destroy(force, silent)
+/datum/component/squashable/Destroy(force)
on_squash_callback = null
return ..()
diff --git a/code/datums/components/strong_pull.dm b/code/datums/components/strong_pull.dm
index bfcfb34c163..afb46b7252d 100644
--- a/code/datums/components/strong_pull.dm
+++ b/code/datums/components/strong_pull.dm
@@ -10,7 +10,7 @@ Basically, the items they pull cannot be pulled (except by the puller)
if(!isliving(parent))
return COMPONENT_INCOMPATIBLE
-/datum/component/strong_pull/Destroy(force, silent)
+/datum/component/strong_pull/Destroy(force)
if(strongpulling)
lose_strong_grip()
return ..()
diff --git a/code/datums/components/style/style.dm b/code/datums/components/style/style.dm
index 99fe652fad6..fd4c2580a79 100644
--- a/code/datums/components/style/style.dm
+++ b/code/datums/components/style/style.dm
@@ -98,7 +98,7 @@
RegisterSignal(src, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_parent_multitool))
- ADD_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips
+ ADD_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // NOVA EDIT ADD - allows style meter chads to do flips
/datum/component/style/RegisterWithParent()
RegisterSignal(parent, COMSIG_MOB_ITEM_AFTERATTACK, PROC_REF(hotswap))
@@ -146,13 +146,13 @@
qdel(projectile_parry.resolve())
-/datum/component/style/Destroy(force, silent)
+/datum/component/style/Destroy(force)
STOP_PROCESSING(SSdcs, src)
var/mob/mob_parent = parent
if(mob_parent.hud_used)
mob_parent.hud_used.static_inventory -= meter
mob_parent.hud_used.show_hud(mob_parent.hud_used.hud_version)
- REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // SKYRAT EDIT ADD - allows style meter chads to do flips
+ REMOVE_TRAIT(mob_parent, TRAIT_STYLISH, REF(src)) // NOVA EDIT ADD - allows style meter chads to do flips
return ..()
diff --git a/code/datums/components/subtype_picker.dm b/code/datums/components/subtype_picker.dm
index 2bc429f9b70..78401c9e022 100644
--- a/code/datums/components/subtype_picker.dm
+++ b/code/datums/components/subtype_picker.dm
@@ -22,7 +22,7 @@
src.on_picked_callback = on_picked_callback
build_radial_list()
-/datum/component/subtype_picker/Destroy(force, silent)
+/datum/component/subtype_picker/Destroy(force)
on_picked_callback = null
return ..()
diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm
index f3047f87768..cf9e9d36a82 100644
--- a/code/datums/components/supermatter_crystal.dm
+++ b/code/datums/components/supermatter_crystal.dm
@@ -28,7 +28,7 @@
src.tool_act_callback = tool_act_callback
src.consume_callback = consume_callback
-/datum/component/supermatter_crystal/Destroy(force, silent)
+/datum/component/supermatter_crystal/Destroy(force)
tool_act_callback = null
consume_callback = null
return ..()
diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm
index bc8b0ee9b97..bb817612e98 100644
--- a/code/datums/components/surgery_initiator.dm
+++ b/code/datums/components/surgery_initiator.dm
@@ -14,7 +14,7 @@
var/obj/item/surgery_tool = parent
surgery_tool.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS
-/datum/component/surgery_initiator/Destroy(force, silent)
+/datum/component/surgery_initiator/Destroy(force)
last_user_ref = null
surgery_target_ref = null
@@ -233,9 +233,9 @@
if (surgery_needs_exposure(surgery, surgery_target))
surgery_info["blocked"] = TRUE
- surgery_info["blocked_reason"] = "Their body is covered!" // SKYRAT EDIT ADDITION - Surgically unremovable bodyparts
+ surgery_info["blocked_reason"] = "Their body is covered!" // NOVA EDIT ADDITION - Surgically unremovable bodyparts
- // SKYRAT EDIT START - Surgically unremovable bodyparts
+ // NOVA EDIT START - Surgically unremovable bodyparts
if (surgery.removes_target_bodypart)
if (iscarbon(surgery_target))
var/mob/living/carbon/carbon_target = surgery_target
@@ -243,7 +243,7 @@
if(!affecting_limb.can_be_surgically_removed)
surgery_info["blocked"] = TRUE
surgery_info["blocked_reason"] = "That limb cannot be surgically removed!"
- // SKYRAT EDIT END
+ // NOVA EDIT END
surgeries += list(surgery_info)
@@ -314,11 +314,11 @@
target.balloon_alert(user, "not the right type of limb!")
return
- // SKYRAT EDIT START - Limbs that can't be surgically removed
+ // NOVA EDIT START - Limbs that can't be surgically removed
if (surgery.removes_target_bodypart && !isnull(affecting_limb) && !affecting_limb.can_be_surgically_removed)
target.balloon_alert(user, "limb can't be surgically removed!")
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if (IS_IN_INVALID_SURGICAL_POSITION(target, surgery))
target.balloon_alert(user, "patient is not lying down!")
diff --git a/code/datums/components/swabbing.dm b/code/datums/components/swabbing.dm
index fa649a5e018..12d851afe39 100644
--- a/code/datums/components/swabbing.dm
+++ b/code/datums/components/swabbing.dm
@@ -32,7 +32,7 @@ This component is used in vat growing to swab for microbiological samples which
src.update_icons = update_icons
src.update_overlays = update_overlays
-/datum/component/swabbing/Destroy(force, silent)
+/datum/component/swabbing/Destroy(force)
for(var/swabbed in swabbed_items)
qdel(swabbed)
update_icons = null
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index c05277c136f..d93a6e3d3c5 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -65,7 +65,7 @@
SIGNAL_HANDLER
tackle_ref = WEAKREF(tackle)
- tackle.thrower = user
+ tackle.thrower = WEAKREF(user)
///See if we can tackle or not. If we can, leap!
/datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/clicked_atom, list/modifiers)
@@ -106,7 +106,7 @@
RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(checkObstacle))
playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1)
- var/leap_word = isfeline(user) ? "pounce" : "leap" //If cat, "pounce" instead of "leap". // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(user)
+ var/leap_word = isfeline(user) ? "pounce" : "leap" //If cat, "pounce" instead of "leap". // NOVA EDIT - FELINE TRAITS. Was: isfelinid(user)
if(can_see(user, clicked_atom, 7))
user.visible_message(span_warning("[user] [leap_word]s at [clicked_atom]!"), span_danger("You [leap_word] at [clicked_atom]!"))
else
@@ -152,7 +152,7 @@
return
var/mob/living/carbon/target = hit
- var/tackle_word = isfeline(user) ? "pounce" : "tackle" //If cat, "pounce" instead of "tackle". // SKYRAT EDIT - FELINE TRAITS - ORIGINAL : var/tackle_word = isfelinid(user) ? "pounce" : "tackle"
+ var/tackle_word = isfeline(user) ? "pounce" : "tackle" //If cat, "pounce" instead of "tackle". // NOVA EDIT - FELINE TRAITS - ORIGINAL : var/tackle_word = isfelinid(user) ? "pounce" : "tackle"
var/roll = rollTackle(target)
tackling = FALSE
diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm
index ec78f3dfeb9..e8e54926949 100644
--- a/code/datums/components/tactical.dm
+++ b/code/datums/components/tactical.dm
@@ -40,7 +40,6 @@
var/obj/item/master = parent
var/image/I = image(icon = master.icon, icon_state = master.icon_state, loc = user)
- SET_PLANE_EXPLICIT(I, GAME_PLANE_FOV_HIDDEN, master)
I.copy_overlays(master)
I.override = TRUE
source.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I)
diff --git a/code/datums/components/takes_reagent_appearance.dm b/code/datums/components/takes_reagent_appearance.dm
index fd1312ba112..96b9a4d6f0c 100644
--- a/code/datums/components/takes_reagent_appearance.dm
+++ b/code/datums/components/takes_reagent_appearance.dm
@@ -43,7 +43,7 @@
src.base_container_type = base_container_type || parent.type
-/datum/component/takes_reagent_appearance/Destroy(force, silent)
+/datum/component/takes_reagent_appearance/Destroy(force)
on_icon_changed = null
on_icon_reset = null
return ..()
diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm
index 81228b2c3cc..3da6d616149 100644
--- a/code/datums/components/tameable.dm
+++ b/code/datums/components/tameable.dm
@@ -32,7 +32,7 @@
RegisterSignal(parent, COMSIG_SIMPLEMOB_SENTIENCEPOTION, PROC_REF(on_tame)) //Instantly succeeds
RegisterSignal(parent, COMSIG_SIMPLEMOB_TRANSFERPOTION, PROC_REF(on_tame)) //Instantly succeeds
-/datum/component/tameable/Destroy(force, silent)
+/datum/component/tameable/Destroy(force)
after_tame = null
return ..()
diff --git a/code/datums/components/tattoo.dm b/code/datums/components/tattoo.dm
index 7289c301520..fe51a53781b 100644
--- a/code/datums/components/tattoo.dm
+++ b/code/datums/components/tattoo.dm
@@ -25,7 +25,7 @@
if(tatted_limb.owner)
setup_tatted_owner(tatted_limb.owner)
-/datum/component/tattoo/Destroy(force, silent)
+/datum/component/tattoo/Destroy(force)
if(!parent)
return ..()
var/obj/item/bodypart/tatted_limb = parent
diff --git a/code/datums/components/toggle_attached_clothing.dm b/code/datums/components/toggle_attached_clothing.dm
index 5d8f7c2b3ea..da503985169 100644
--- a/code/datums/components/toggle_attached_clothing.dm
+++ b/code/datums/components/toggle_attached_clothing.dm
@@ -77,7 +77,7 @@
if (!destroy_on_removal)
create_deployable()
-/datum/component/toggle_attached_clothing/Destroy(force, silent)
+/datum/component/toggle_attached_clothing/Destroy(force)
unequip_deployable()
QDEL_NULL(deployable)
QDEL_NULL(toggle_action)
diff --git a/code/datums/components/trapdoor.dm b/code/datums/components/trapdoor.dm
index da90580a20d..bda67048ffe 100644
--- a/code/datums/components/trapdoor.dm
+++ b/code/datums/components/trapdoor.dm
@@ -59,11 +59,11 @@
RegisterSignal(SSdcs, COMSIG_GLOB_TRAPDOOR_LINK, PROC_REF(on_link_requested))
else
RegisterSignal(assembly, COMSIG_ASSEMBLY_PULSED, PROC_REF(toggle_trapdoor))
- // SKYRAT EDIT START - Trapdoors shouldn't be targeted by SSDecay.
+ // NOVA EDIT START - Trapdoors shouldn't be targeted by SSDecay.
if(isturf(parent))
var/turf/turf_parent = parent
turf_parent.turf_flags &= ~CAN_DECAY_BREAK_1
- // SKYRAT EDIT END
+ // NOVA EDIT END
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(try_unlink))
/datum/component/trapdoor/UnregisterFromParent()
diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm
index 37df7308217..6d033469cc2 100644
--- a/code/datums/components/twohanded.dm
+++ b/code/datums/components/twohanded.dm
@@ -56,7 +56,7 @@
if(require_twohands)
ADD_TRAIT(parent, TRAIT_NEEDS_TWO_HANDS, ABSTRACT_ITEM_TRAIT)
-/datum/component/two_handed/Destroy(force, silent)
+/datum/component/two_handed/Destroy(force)
offhand_item = null
wield_callback = null
unwield_callback = null
diff --git a/code/datums/components/unbreakable.dm b/code/datums/components/unbreakable.dm
index 423fad138bb..594b8dc7b8f 100644
--- a/code/datums/components/unbreakable.dm
+++ b/code/datums/components/unbreakable.dm
@@ -6,7 +6,7 @@
return COMPONENT_INCOMPATIBLE
ADD_TRAIT(parent, TRAIT_UNBREAKABLE, INNATE_TRAIT)
-/datum/component/unbreakable/Destroy(force, silent)
+/datum/component/unbreakable/Destroy(force)
REMOVE_TRAIT(parent, TRAIT_UNBREAKABLE, INNATE_TRAIT)
return ..()
diff --git a/code/datums/components/unusual_effect.dm b/code/datums/components/unusual_effect.dm
index eb67b953799..7fe5b281825 100644
--- a/code/datums/components/unusual_effect.dm
+++ b/code/datums/components/unusual_effect.dm
@@ -39,7 +39,7 @@
special_effects = new(parent_movable, /particles/unusual_effect)
START_PROCESSING(SSobj, src)
-/datum/component/unusual_effect/Destroy(force, silent)
+/datum/component/unusual_effect/Destroy(force)
var/atom/movable/parent_movable = parent
if (istype(parent_movable))
parent_movable.remove_filter("unusual_effect")
diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm
index 03740417678..adb10f128ae 100644
--- a/code/datums/components/uplink.dm
+++ b/code/datums/components/uplink.dm
@@ -59,7 +59,7 @@
RegisterSignal(parent, COMSIG_IMPLANT_IMPLANTING, PROC_REF(implanting))
RegisterSignal(parent, COMSIG_IMPLANT_OTHER, PROC_REF(old_implant))
RegisterSignal(parent, COMSIG_IMPLANT_EXISTING_UPLINK, PROC_REF(new_implant))
- else if(istype(parent, /obj/item/modular_computer/pda))
+ else if(istype(parent, /obj/item/modular_computer))
RegisterSignal(parent, COMSIG_TABLET_CHANGE_ID, PROC_REF(new_ringtone))
RegisterSignal(parent, COMSIG_TABLET_CHECK_DETONATE, PROC_REF(check_detonate))
else if(istype(parent, /obj/item/radio))
@@ -455,7 +455,7 @@
/datum/component/uplink/proc/setup_unlock_code()
unlock_code = generate_code()
var/obj/item/P = parent
- if(istype(parent,/obj/item/modular_computer/pda))
+ if(istype(parent,/obj/item/modular_computer))
unlock_note = "Uplink Passcode: [unlock_code] ([P.name])."
else if(istype(parent,/obj/item/radio))
unlock_note = "Radio Passcode: [unlock_code] ([P.name], [RADIO_TOKEN_UPLINK] channel)."
@@ -465,7 +465,7 @@
/datum/component/uplink/proc/generate_code()
var/returnable_code = ""
- if(istype(parent, /obj/item/modular_computer/pda))
+ if(istype(parent, /obj/item/modular_computer))
returnable_code = "[rand(100,999)] [pick(GLOB.phonetic_alphabet)]"
else if(istype(parent, /obj/item/radio))
diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm
index 8d1722f89fe..62af35dc974 100644
--- a/code/datums/components/wall_mounted.dm
+++ b/code/datums/components/wall_mounted.dm
@@ -18,7 +18,7 @@
/datum/component/wall_mounted/RegisterWithParent()
RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing))
- RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(drop_wallmount))
+ RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed))
/datum/component/wall_mounted/UnregisterFromParent()
@@ -49,6 +49,18 @@
if (ispath(path, /turf/open))
drop_wallmount()
+
+/**
+ * If we get dragged from our wall (by a singulo for instance) we should deconstruct
+ */
+/datum/component/wall_mounted/proc/on_move(datum/source, atom/old_loc, dir, forced, list/old_locs)
+ SIGNAL_HANDLER
+ // If we're having our lighting messed with we're likely to get dragged about
+ // That shouldn't lead to a decon
+ if(HAS_TRAIT(parent, TRAIT_LIGHTING_DEBUGGED))
+ return
+ drop_wallmount()
+
/**
* Handles the dropping of the linked object. This is done via deconstruction, as that should be the most sane way to handle it for most objects.
* Except for intercoms, which are handled by creating a new wallframe intercom, as they're apparently items.
@@ -66,6 +78,7 @@
if(!QDELING(src))
qdel(src) //Well, we fell off the wall, so we're done here.
+
/**
* Checks object direction and then verifies if there's a wall in that direction. Finally, applies a wall_mounted component to the object.
*
diff --git a/code/datums/components/weatherannouncer.dm b/code/datums/components/weatherannouncer.dm
index fec31ccf9d3..0eda6c47a32 100644
--- a/code/datums/components/weatherannouncer.dm
+++ b/code/datums/components/weatherannouncer.dm
@@ -38,7 +38,7 @@
speaker.update_appearance(UPDATE_ICON)
update_light_color()
-/datum/component/weather_announcer/Destroy(force, silent)
+/datum/component/weather_announcer/Destroy(force)
STOP_PROCESSING(SSprocessing, src)
return ..()
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index a0fcd94c89e..5bfd548b64e 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -101,7 +101,7 @@
*
* Returns [QDEL_HINT_QUEUE]
*/
-/datum/proc/Destroy(force=FALSE, ...)
+/datum/proc/Destroy(force = FALSE)
SHOULD_CALL_PARENT(TRUE)
SHOULD_NOT_SLEEP(TRUE)
tag = null
@@ -129,10 +129,10 @@
var/component_or_list = dc[component_key]
if(islist(component_or_list))
for(var/datum/component/component as anything in component_or_list)
- qdel(component, FALSE, TRUE)
+ qdel(component, FALSE)
else
var/datum/component/C = component_or_list
- qdel(C, FALSE, TRUE)
+ qdel(C, FALSE)
dc.Cut()
_clear_signal_refs()
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm
index 0da4a27c6a4..b00e6ca7966 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/advance/symptoms/heal.dm
@@ -273,14 +273,14 @@
level = 6
passive_message = span_notice("You feel tingling on your skin as light passes over it.")
threshold_descs = list(
- "Stage Speed 7" = "Doubles healing speed.", //SKYRAT EDIT: Brings Noc regen into line with the rest of the healing symptoms.
+ "Stage Speed 7" = "Doubles healing speed.", //NOVA EDIT: Brings Noc regen into line with the rest of the healing symptoms.
)
/datum/symptom/heal/darkness/Start(datum/disease/advance/A)
. = ..()
if(!.)
return
- if(A.totalStageSpeed() >= 7)//SKYRAT EDIT: Brings Noc regen into line with the rest of the healing symptoms.
+ if(A.totalStageSpeed() >= 7)//NOVA EDIT: Brings Noc regen into line with the rest of the healing symptoms.
power = 2
/datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A)
@@ -378,7 +378,7 @@
return power * 0.9
if(SOFT_CRIT)
return power * 0.5
- if(M.getBruteLoss() + M.getFireLoss() >= 103 && !active_coma) //SKYRAT EDIT: ORIGINAL: 70 - Adjusts this to remain 37.5% of total health(plus crit health). Because 70 is alot less health here then it is on tg.
+ if(M.getBruteLoss() + M.getFireLoss() >= 103 && !active_coma) //NOVA EDIT: ORIGINAL: 70 - Adjusts this to remain 37.5% of total health(plus crit health). Because 70 is alot less health here then it is on tg.
to_chat(M, span_warning("You feel yourself slip into a regenerative coma..."))
active_coma = TRUE
addtimer(CALLBACK(src, PROC_REF(coma), M), 60)
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index 259a1b28dff..741520ed6ae 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -84,7 +84,7 @@
/datum/disease/transformation/proc/replace_banned_player(mob/living/new_mob) // This can run well after the mob has been transferred, so need a handle on the new mob to kill it if needed.
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [affected_mob.real_name]?", bantype, bantype, 5 SECONDS, affected_mob)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [affected_mob.real_name]?", check_jobban = bantype, role = bantype, poll_time = 5 SECONDS, target_mob = affected_mob, pic_source = affected_mob, role_name_text = "transformation victim")
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
to_chat(affected_mob, span_userdanger("Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!"))
diff --git a/code/datums/dna.dm b/code/datums/dna.dm
index 3651735ddfd..0eb811cc8bd 100644
--- a/code/datums/dna.dm
+++ b/code/datums/dna.dm
@@ -1,4 +1,4 @@
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm)
/*
/**
* Some identity blocks (basically pieces of the unique_identity string variable of the dna datum, commonly abbreviated with ui)
@@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
. += total_block_len
total_block_len += GET_UF_BLOCK_LEN(blocknumber)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/////////////////////////// DNA DATUM
/datum/dna
///An md5 hash of the dna holder's real name
@@ -137,17 +137,17 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
destination.dna.features = features.Copy()
destination.dna.real_name = real_name
destination.dna.temporary_mutations = temporary_mutations.Copy()
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
destination.dna.mutant_bodyparts = mutant_bodyparts.Copy()
destination.dna.body_markings = body_markings.Copy()
destination.dna.update_body_size()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(transfer_SE)
destination.dna.mutation_index = mutation_index
destination.dna.default_mutation_genes = default_mutation_genes
if(transfer_species)
//destination.set_species(species.type, icon_update=0) - ORIGINAL
- destination.set_species(species.type, TRUE, FALSE, features.Copy(), mutant_bodyparts.Copy(), body_markings.Copy()) //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ destination.set_species(species.type, TRUE, FALSE, features.Copy(), mutant_bodyparts.Copy(), body_markings.Copy()) //NOVA EDIT CHANGE - CUSTOMIZATION
/datum/dna/proc/copy_dna(datum/dna/new_dna)
new_dna.unique_enzymes = unique_enzymes
@@ -157,11 +157,11 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
new_dna.unique_features = unique_features
new_dna.blood_type = blood_type
new_dna.features = features.Copy()
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
new_dna.mutant_bodyparts = mutant_bodyparts.Copy()
new_dna.body_markings = body_markings.Copy()
new_dna.update_body_size()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
//if the new DNA has a holder, transform them immediately, otherwise save it
if(new_dna.holder)
new_dna.holder.set_species(species.type, icon_update = 0)
@@ -233,7 +233,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
for(var/blocknum in 1 to DNA_UNI_IDENTITY_BLOCKS)
. += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters)
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm)
/*
/datum/dna/proc/generate_unique_features()
. = ""
@@ -275,7 +275,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
return data.Join()
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/dna/proc/generate_dna_blocks()
var/bonus
@@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if(DNA_HAIRSTYLE_BLOCK)
set_uni_identity_block(blocknumber, construct_block(GLOB.hairstyles_list.Find(H.hairstyle), GLOB.hairstyles_list.len))
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm)
/*
/datum/dna/proc/update_uf_block(blocknumber)
if(!blocknumber)
@@ -412,7 +412,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if(DNA_POD_HAIR_BLOCK)
set_uni_feature_block(blocknumber, construct_block(GLOB.pod_hair_list.Find(features["pod_hair"]), GLOB.pod_hair_list.len))
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
//Please use add_mutation or activate_mutation instead
/datum/dna/proc/force_give(datum/mutation/human/human_mutation)
@@ -497,7 +497,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if(create_mutation_blocks) //I hate this
generate_dna_blocks()
if(randomize_features)
- /* SKYRAT EDIT REMOVAL - We don't really want this. We instead let get_mutant_bodyparts() handle the bodypart randomization on our end, to prevent getting any crazy cross-species features.
+ /* NOVA EDIT REMOVAL - We don't really want this. We instead let get_mutant_bodyparts() handle the bodypart randomization on our end, to prevent getting any crazy cross-species features.
var/static/list/all_species_protoypes
if(isnull(all_species_protoypes))
all_species_protoypes = list()
@@ -506,12 +506,12 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
for(var/datum/species/random_species as anything in all_species_protoypes)
features |= random_species.randomize_features()
- SKYRAT EDIT REMOVAL END */
+ NOVA EDIT REMOVAL END */
- features = species.randomize_features() | features // SKYRAT EDIT CHANGE - Where applicable, replace features with the features generated by species/randomize_features() - Original: features["mcolor"] = "#[random_color()]"
- body_markings = species.get_random_body_markings(features) // SKYRAT EDIT ADDITION
+ features = species.randomize_features() | features // NOVA EDIT CHANGE - Where applicable, replace features with the features generated by species/randomize_features() - Original: features["mcolor"] = "#[random_color()]"
+ body_markings = species.get_random_body_markings(features) // NOVA EDIT ADDITION
- mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // SKYRAT EDIT ADDITION
+ mutant_bodyparts = species.get_mutant_bodyparts(features, existing_mutant_bodyparts = randomize_features ? list() : mutant_bodyparts) // NOVA EDIT ADDITION
update_dna_identity()
/datum/dna/stored //subtype used by brain mob's stored_dna
@@ -545,7 +545,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
stored_dna.species = mrace //not calling any species update procs since we're a brain, not a monkey/human
-/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings) // SKYRAT EDIT CHANGE - ORIGINAL: /mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE)
+/mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings) // NOVA EDIT CHANGE - ORIGINAL: /mob/living/carbon/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE)
if(QDELETED(src))
CRASH("You're trying to change your species post deletion, this is a recipe for madness")
if(isnull(mrace))
@@ -571,7 +571,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if (old_species.properly_gained)
old_species.on_species_loss(src, new_race, pref_load)
- // SKYRAT EDIT ADDITION START - BODYPARTS AND FEATURES
+ // NOVA EDIT ADDITION START - BODYPARTS AND FEATURES
// We need to instantiate the list with compatible mutant parts so we don't break things
if(override_mutantparts && override_mutantparts.len)
@@ -593,7 +593,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.unique_features = dna.generate_unique_features()
dna.update_body_size()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
dna.species.on_species_gain(src, old_species, pref_load)
log_mob_tag("TAG: [tag] SPECIES: [key_name(src)] \[[mrace]\]")
@@ -687,7 +687,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
else
gender = PLURAL
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_skyrat/modules/customization/code/datums/dna.dm)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular_nova/modules/customization/code/datums/dna.dm)
/*
/mob/living/carbon/human/updateappearance(icon_update = TRUE, mutcolor_update = FALSE, mutations_overlay_update = FALSE)
..()
@@ -756,7 +756,7 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
if(mutations_overlay_update)
update_mutations_overlay()
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/mob/proc/domutcheck()
return
diff --git a/code/datums/elements/crusher_loot.dm b/code/datums/elements/crusher_loot.dm
index 7d53794d5b0..0de39bcbab0 100644
--- a/code/datums/elements/crusher_loot.dm
+++ b/code/datums/elements/crusher_loot.dm
@@ -35,11 +35,11 @@
SIGNAL_HANDLER
var/datum/status_effect/crusher_damage/damage = target.has_status_effect(/datum/status_effect/crusher_damage)
- // SKYRAT EDIT START - ASHWALKER TROPHIES
- var/datum/status_effect/ashwalker_damage/ashie_damage = target.has_status_effect(/datum/status_effect/ashwalker_damage) // SKYRAT EDIT ADDITION
- var/damage_total = damage?.total_damage + ashie_damage?.total_damage // SKYRAT EDIT ADDITION
- if(damage_total && prob((damage_total/target.maxHealth) * drop_mod)) //on average, you'll need to kill 4 creatures before getting the item. by default. // SKYRAT EDIT - ORIGINAL: if(damage && prob((damage.total_damage/target.maxHealth) * drop_mod))
- // SKYRAT EDIT END - ASHWALKER TROPHIES
+ // NOVA EDIT START - ASHWALKER TROPHIES
+ var/datum/status_effect/ashwalker_damage/ashie_damage = target.has_status_effect(/datum/status_effect/ashwalker_damage) // NOVA EDIT ADDITION
+ var/damage_total = damage?.total_damage + ashie_damage?.total_damage // NOVA EDIT ADDITION
+ if(damage_total && prob((damage_total/target.maxHealth) * drop_mod)) //on average, you'll need to kill 4 creatures before getting the item. by default. // NOVA EDIT - ORIGINAL: if(damage && prob((damage.total_damage/target.maxHealth) * drop_mod))
+ // NOVA EDIT END - ASHWALKER TROPHIES
if(drop_immediately)
new trophy_type(get_turf(target))
else
diff --git a/code/datums/elements/damage_threshold.dm b/code/datums/elements/damage_threshold.dm
index 918c984b066..60c87dc5ed5 100644
--- a/code/datums/elements/damage_threshold.dm
+++ b/code/datums/elements/damage_threshold.dm
@@ -40,7 +40,7 @@
var/obj/item/item_hitting = hitby
var/tap_vol = istype(item_hitting) ? item_hitting.get_clamped_volume() : 50
source.visible_message(
- span_warning("[src] looks unharmed!"),
+ span_warning("[source] looks unharmed!"),
span_warning("[attack_text] deals no damage to you!"),
span_hear("You hear a thud."),
COMBAT_MESSAGE_RANGE,
diff --git a/code/datums/elements/elevation.dm b/code/datums/elements/elevation.dm
index 645ee2a6081..ffa6de398b6 100644
--- a/code/datums/elements/elevation.dm
+++ b/code/datums/elements/elevation.dm
@@ -152,10 +152,13 @@
/datum/element/elevation_core/proc/on_exited(turf/source, atom/movable/gone)
SIGNAL_HANDLER
if((isnull(gone.loc) || !HAS_TRAIT_FROM(gone.loc, TRAIT_ELEVATED_TURF, REF(src))) && isliving(gone))
+ // Always unregister the signal, we're still leaving even if already shifted down.
+ UnregisterSignal(gone, COMSIG_LIVING_SET_BUCKLED)
+ if(!HAS_TRAIT_FROM(gone, TRAIT_ON_ELEVATED_SURFACE, REF(src)))
+ return
REMOVE_TRAIT(gone, TRAIT_ON_ELEVATED_SURFACE, REF(src))
var/elevate_time = isturf(gone.loc) && source.Adjacent(gone.loc) ? ELEVATE_TIME : 0
elevate_mob(gone, -pixel_shift, elevate_time)
- UnregisterSignal(gone, COMSIG_LIVING_SET_BUCKLED)
/datum/element/elevation_core/proc/elevate_mob(mob/living/target, z_shift = pixel_shift, elevate_time = ELEVATE_TIME)
var/buckled_to_vehicle = FALSE
diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm
index bdf3f98a11f..a162e58752d 100644
--- a/code/datums/elements/footstep.dm
+++ b/code/datums/elements/footstep.dm
@@ -137,7 +137,7 @@
return
//cache for sanic speed (lists are references anyways)
- var/static/list/footstep_sounds = GLOB.footstep
+ var/footstep_sounds = GLOB.footstep
///list returned by playsound() filled by client mobs who heard the footstep. given to play_fov_effect()
var/list/heard_clients
@@ -157,7 +157,7 @@
heard_clients = playsound(source.loc, pick(source.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary)
else
var/barefoot_type = prepared_steps[FOOTSTEP_MOB_BAREFOOT]
- var/static/list/bare_footstep_sounds = GLOB.barefootstep
+ var/bare_footstep_sounds = GLOB.barefootstep
if(!isnull(barefoot_type) && bare_footstep_sounds[barefoot_type]) // barefoot_type can be null
heard_clients = playsound(source.loc, pick(bare_footstep_sounds[barefoot_type][1]),
bare_footstep_sounds[barefoot_type][2] * volume * volume_multiplier,
diff --git a/code/datums/elements/hostile_machine.dm b/code/datums/elements/hostile_machine.dm
new file mode 100644
index 00000000000..0a5f19287bb
--- /dev/null
+++ b/code/datums/elements/hostile_machine.dm
@@ -0,0 +1,15 @@
+/// AIs will attack this as a potential target if they see it
+/datum/element/hostile_machine
+ element_flags = ELEMENT_DETACH_ON_HOST_DESTROY
+
+/datum/element/hostile_machine/Attach(datum/target)
+ . = ..()
+
+ if (!isatom(target))
+ return ELEMENT_INCOMPATIBLE
+
+ GLOB.hostile_machines += target
+
+/datum/element/hostile_machine/Detach(datum/source)
+ GLOB.hostile_machines -= source
+ return ..()
diff --git a/code/datums/elements/immerse.dm b/code/datums/elements/immerse.dm
index 1a3b37d6530..d4171588c31 100644
--- a/code/datums/elements/immerse.dm
+++ b/code/datums/elements/immerse.dm
@@ -96,8 +96,8 @@
/datum/element/immerse/proc/stop_immersion(turf/source)
SIGNAL_HANDLER
UnregisterSignal(source, list(COMSIG_ATOM_ABSTRACT_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_ABSTRACT_EXITED))
- for(var/atom/movable/movable as anything in attached_turfs_and_movables[source])
- remove_from_element(source, movable)
+ for(var/datum/weakref/movable as anything in attached_turfs_and_movables[source])
+ remove_from_element(source, movable.resolve())
attached_turfs_and_movables -= source
/**
@@ -109,7 +109,7 @@
SIGNAL_HANDLER
if(HAS_TRAIT(movable, TRAIT_IMMERSED))
return
- if(movable.layer >= ABOVE_ALL_MOB_LAYER || !ISINRANGE(movable.plane, MUTATE_PLANE(FLOOR_PLANE, source), MUTATE_PLANE(GAME_PLANE_UPPER_FOV_HIDDEN, source)))
+ if(movable.layer >= ABOVE_ALL_MOB_LAYER || !ISINRANGE(movable.plane, MUTATE_PLANE(FLOOR_PLANE, source), MUTATE_PLANE(GAME_PLANE, source)))
return
if(is_type_in_typecache(movable, movables_to_ignore))
return
@@ -122,7 +122,7 @@
try_immerse(movable, buckled)
RegisterSignal(movable, COMSIG_QDELETING, PROC_REF(on_movable_qdel))
- LAZYADD(attached_turfs_and_movables[source], movable)
+ LAZYADD(attached_turfs_and_movables[source], WEAKREF(movable))
ADD_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src))
/datum/element/immerse/proc/on_movable_qdel(atom/movable/source)
@@ -170,7 +170,7 @@
movable.vis_contents |= vis_overlay
- LAZYSET(immersed_movables, movable, vis_overlay)
+ LAZYSET(immersed_movables, WEAKREF(movable), vis_overlay)
///Initializes and caches a new visual overlay given parameters such as width, height and whether it should appear fully underwater.
/datum/element/immerse/proc/generate_vis_overlay(width, height, is_below_water)
@@ -212,11 +212,11 @@
///This proc removes the vis_overlay, the keep together trait and some signals from the movable.
/datum/element/immerse/proc/remove_immerse_overlay(atom/movable/movable)
- var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, movable)
+ var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, WEAKREF(movable))
if(!vis_overlay)
return
movable.vis_contents -= vis_overlay
- LAZYREMOVE(immersed_movables, movable)
+ LAZYREMOVE(immersed_movables, WEAKREF(movable))
if(HAS_TRAIT(movable, TRAIT_UNIQUE_IMMERSE))
UnregisterSignal(movable, list(COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM))
qdel(vis_overlay)
@@ -298,8 +298,8 @@
if(!(exited.loc in attached_turfs_and_movables))
remove_from_element(source, exited)
else
- LAZYREMOVE(attached_turfs_and_movables[source], exited)
- LAZYADD(attached_turfs_and_movables[exited.loc], exited)
+ LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(exited))
+ LAZYADD(attached_turfs_and_movables[exited.loc], WEAKREF(exited))
///Remove any signal, overlay, trait given to the movable and reference to it within the element.
/datum/element/immerse/proc/remove_from_element(turf/source, atom/movable/movable)
@@ -311,7 +311,7 @@
UnregisterSignal(movable, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_QDELETING))
REMOVE_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src))
- LAZYREMOVE(attached_turfs_and_movables[source], movable)
+ LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(movable))
/// A band-aid to keep the (unique) visual overlay from scaling and rotating along with its owner. I'm sorry.
/datum/element/immerse/proc/on_update_transform(mob/living/source, resize, new_lying_angle, is_opposite_angle)
@@ -320,7 +320,7 @@
new_transform.Scale(1/source.current_size)
new_transform.Turn(-new_lying_angle)
- var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source]
+ var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)]
if(is_opposite_angle)
vis_overlay.transform = new_transform
vis_overlay.adjust_living_overlay_offset(source)
@@ -361,7 +361,7 @@
///Spin the overlay in the opposite direction so it doesn't look like it's spinning at all.
/datum/element/immerse/proc/on_spin_animation(atom/source, speed, loops, segments, segment)
SIGNAL_HANDLER
- var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source]
+ var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)]
vis_overlay.do_spin_animation(speed, loops, segments, -segment)
///We need to make sure to remove hard refs from the element when deleted.
diff --git a/code/datums/elements/snail_crawl.dm b/code/datums/elements/snail_crawl.dm
index 80b3f66e03b..d514ba03e30 100644
--- a/code/datums/elements/snail_crawl.dm
+++ b/code/datums/elements/snail_crawl.dm
@@ -23,24 +23,24 @@
if(snail.resting && !snail.buckled && lubricate(snail))
snail.add_movespeed_modifier(/datum/movespeed_modifier/snail_crawl)
- //SKYRAT EDIT ADDITION BEGIN - This is to prevent snails from achieving FTL speeds without gravity, think of it like snails affixing to walls irl.
+ //NOVA EDIT ADDITION BEGIN - This is to prevent snails from achieving FTL speeds without gravity, think of it like snails affixing to walls irl.
ADD_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC)
snail.AddElement(/datum/element/forced_gravity, 0)
if(HAS_TRAIT(snail, TRAIT_SETTLER)) //This is to keep settlers from reaching FTL speeds too.
snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else
snail.remove_movespeed_modifier(/datum/movespeed_modifier/snail_crawl)
- //SKYRAT EDIT ADDITION BEGIN - This clears the forced gravity so they're affected by it while standing.
+ //NOVA EDIT ADDITION BEGIN - This clears the forced gravity so they're affected by it while standing.
REMOVE_TRAIT(snail, TRAIT_NEGATES_GRAVITY, TRAIT_GENERIC)
snail.RemoveElement(/datum/element/forced_gravity, 0)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/datum/element/snailcrawl/proc/lubricate(atom/movable/snail)
SIGNAL_HANDLER
var/turf/open/OT = get_turf(snail)
if(istype(OT))
- OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //SKYRAT EDIT CHANGE: Roundstart Snails - No more lube - ORIGINAL: OT.MakeSlippery(TURF_WET_LUBE, 20)
- OT.wash(CLEAN_WASH) //SKYRAT EDIT ADDITION: Roundstart Snails - Snails Keep Clean
+ OT.MakeSlippery(TURF_WET_WATER, 1 SECONDS) //NOVA EDIT CHANGE: Roundstart Snails - No more lube - ORIGINAL: OT.MakeSlippery(TURF_WET_LUBE, 20)
+ OT.wash(CLEAN_WASH) //NOVA EDIT ADDITION: Roundstart Snails - Snails Keep Clean
return TRUE
diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm
index e6f0d257ed7..9d671f9cd93 100644
--- a/code/datums/elements/strippable.dm
+++ b/code/datums/elements/strippable.dm
@@ -68,7 +68,7 @@
var/show_visible_message = TRUE
/// Can it be silent?
- var/can_be_silent = FALSE //SKYRAT EDIT ADDITION - THIEVING GLOVES
+ var/can_be_silent = FALSE //NOVA EDIT ADDITION - THIEVING GLOVES
/// Gets the item from the given source.
/datum/strippable_item/proc/get_item(atom/source)
@@ -131,7 +131,7 @@
if (HAS_TRAIT(item, TRAIT_NO_STRIP))
return FALSE
- //SKYRAT EDIT CHANGE START - THIEVING GLOVES
+ //NOVA EDIT CHANGE START - THIEVING GLOVES
var/is_silent = can_be_silent && HAS_TRAIT(user, TRAIT_STICKY_FINGERS)
if (!is_silent)
source.visible_message(
@@ -140,14 +140,14 @@
blind_message = span_hear("You hear rustling."),
ignored_mobs = user,
)
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
to_chat(user, span_danger("You try to remove [source]'s [item.name]..."))
user.log_message("is stripping [key_name(source)] of [item].", LOG_ATTACK, color="red")
source.log_message("is being stripped of [item] by [key_name(user)].", LOG_VICTIM, color="orange", log_globally=FALSE)
item.add_fingerprint(src)
- if(ishuman(source) && !is_silent) //SKYRAT EDIT ADDITION - THIEVING GLOVES ORIGINAL if(ishuman(source))
+ if(ishuman(source) && !is_silent) //NOVA EDIT ADDITION - THIEVING GLOVES ORIGINAL if(ishuman(source))
var/mob/living/carbon/human/victim_human = source
if(victim_human.key && !victim_human.client) // AKA braindead
if(victim_human.stat <= SOFT_CRIT && LAZYLEN(victim_human.afk_thefts) <= AFK_THEFT_MAX_MESSAGES)
@@ -277,7 +277,7 @@
/// A utility function for `/datum/strippable_item`s to start unequipping an item from a mob.
/proc/start_unequip_mob(obj/item/item, mob/source, mob/user, strip_delay)
- //SKYRAT EDIT ADDITION - THIEVING GLOVES
+ //NOVA EDIT ADDITION - THIEVING GLOVES
//if (!do_after(user, strip_delay || item.strip_delay, source, interaction_key = REF(item)))
if (!do_after(user, (strip_delay || item.strip_delay) * (HAS_TRAIT(user, TRAIT_STICKY_FINGERS) ? THIEVING_GLOVES_STRIP_SLOWDOWN : NORMAL_STRIP_SLOWDOWN), source, interaction_key = REF(item)))
return FALSE
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index 64c7de25764..cc9d5820c91 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -60,12 +60,12 @@
var/can_message_change = FALSE
/// How long is the cooldown on the audio of the emote, if it has one?
var/audio_cooldown = 2 SECONDS
- //SKYRAT EDIT ADDITION BEGIN - EMOTES
+ //NOVA EDIT ADDITION BEGIN - EMOTES
var/sound_volume = 25 //Emote volume
var/list/allowed_species
/// Are silicons explicitely allowed to use this emote?
var/silicon_allowed = FALSE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/datum/emote/New()
switch(mob_type_allowed_typecache)
@@ -109,21 +109,21 @@
return
user.log_message(msg, LOG_EMOTE)
- // SKYRAT EDIT START - Better emotes - Original: var/dchatmsg = "[user] [msg]"
+ // NOVA EDIT START - Better emotes - Original: var/dchatmsg = "[user] [msg]"
var/space = should_have_space_before_emote(html_decode(msg)[1]) ? " " : ""
var/dchatmsg = "[user] [space][msg]"
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/tmp_sound = get_sound(user)
if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type))
TIMER_COOLDOWN_START(user, type, audio_cooldown)
- //SKYRAT EDIT CHANGE BEGIN
- //playsound(user, tmp_sound, 50, vary) - SKYRAT EDIT - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN
+ //playsound(user, tmp_sound, 50, vary) - NOVA EDIT - ORIGINAL
if(istype(src, /datum/emote/living/lewd))
play_lewd_sound(user, tmp_sound, sound_volume, vary, pref_to_check = /datum/preference/toggle/erp/sounds)
else
playsound(user, tmp_sound, sound_volume, vary)
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
var/user_turf = get_turf(user)
if (user.client)
@@ -131,19 +131,19 @@
if(!ghost.client || isnewplayer(ghost))
continue
if(get_chat_toggles(ghost.client) & CHAT_GHOSTSIGHT && !(ghost in viewers(user_turf, null)))
- if(pref_check_emote(ghost)) // SKYRAT EDIT ADDITION - Pref checked emotes
- ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg] ") // SKYRAT EDIT CHANGE - Indented
+ if(pref_check_emote(ghost)) // NOVA EDIT ADDITION - Pref checked emotes
+ ghost.show_message("[FOLLOW_LINK(ghost, user)] [dchatmsg] ") // NOVA EDIT CHANGE - Indented
if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE)) //emote is audible and visible
- user.audible_message(msg, deaf_message = "You see how [user] [space][msg] ", audible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // SKYRAT EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg] ", audible_message_flags = EMOTE_MESSAGE)
+ user.audible_message(msg, deaf_message = "You see how [user] [space][msg] ", audible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // NOVA EDIT - Better emotes - ORIGINAL: user.audible_message(msg, deaf_message = "You see how [user] [msg] ", audible_message_flags = EMOTE_MESSAGE)
else if(emote_type & EMOTE_VISIBLE) //emote is only visible
- user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // SKYRAT EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE)
+ user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE, separation = space, pref_to_check = pref_to_check) // NOVA EDIT - Better emotes - ORIGINAL: user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE)
if(emote_type & EMOTE_IMPORTANT)
for(var/mob/living/viewer in viewers())
if(viewer.is_blind() && !viewer.can_hear())
- if(pref_check_emote(viewer)) // SKYRAT EDIT ADDITION - Pref checked emotes
- to_chat(viewer, msg) // SKYRAT EDIT CHANGE - Indented
+ if(pref_check_emote(viewer)) // NOVA EDIT ADDITION - Pref checked emotes
+ to_chat(viewer, msg) // NOVA EDIT CHANGE - Indented
- // SKYRAT EDIT -- BEGIN -- ADDITION -- AI QOL - RELAY EMOTES OVER HOLOPADS
+ // NOVA EDIT -- BEGIN -- ADDITION -- AI QOL - RELAY EMOTES OVER HOLOPADS
var/obj/effect/overlay/holo_pad_hologram/hologram = GLOB.hologram_impersonators[user]
if(hologram)
if(emote_type & (EMOTE_AUDIBLE | EMOTE_VISIBLE))
@@ -155,7 +155,7 @@
if(viewer.is_blind() && !viewer.can_hear())
if(pref_check_emote(viewer))
to_chat(viewer, msg)
- // SKYRAT EDIT -- END
+ // NOVA EDIT -- END
/**
* For handling emote cooldown, return true to allow the emote to happen.
@@ -169,8 +169,8 @@
/datum/emote/proc/check_cooldown(mob/user, intentional)
if(!intentional)
return TRUE
- //SKYRAT EDIT CHANGE BEGIN - EMOTES - GLOBAL COOLDOWN
- //if(user.emotes_used && user.emotes_used[src] + cooldown > world.time) - SKYRAT EDIT - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN - EMOTES - GLOBAL COOLDOWN
+ //if(user.emotes_used && user.emotes_used[src] + cooldown > world.time) - NOVA EDIT - ORIGINAL
if(user.nextsoundemote > world.time)
var/datum/emote/default_emote = /datum/emote
if(cooldown > initial(default_emote.cooldown)) // only worry about longer-than-normal emotes
@@ -178,9 +178,9 @@
return FALSE
//if(!user.emotes_used)
// user.emotes_used = list()
- //user.emotes_used[src] = world.time - SKYRAT EDIT - ORIGINAL
+ //user.emotes_used[src] = world.time - NOVA EDIT - ORIGINAL
user.nextsoundemote = world.time + cooldown
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
return TRUE
/**
@@ -298,7 +298,7 @@
if(HAS_TRAIT(user, TRAIT_EMOTEMUTE))
return FALSE
- //SKYRAT EDIT BEGIN
+ //NOVA EDIT BEGIN
if(allowed_species)
var/check = FALSE
if(silicon_allowed && issilicon(user))
@@ -308,7 +308,7 @@
if(sender.dna.species.type in allowed_species)
check = TRUE
return check
- //SKYRAT EDIT END
+ //NOVA EDIT END
return TRUE
diff --git a/code/datums/ert.dm b/code/datums/ert.dm
index c33db7b2667..92930339467 100644
--- a/code/datums/ert.dm
+++ b/code/datums/ert.dm
@@ -16,7 +16,7 @@
var/spawn_admin = FALSE
/// If TRUE, we try and pick one of the most experienced players who volunteered to fill the leader slot
var/leader_experience = TRUE
- ///SKYRAT EDIT: Do we want to notify the players of this ERT?
+ ///NOVA EDIT: Do we want to notify the players of this ERT?
var/notify_players = TRUE
/// A custom map template to spawn the ERT at. If this is null or use_custom_shuttle is FALSE, the ERT will spawn at Centcom.
var/datum/map_template/ert_template
diff --git a/code/datums/greyscale/_greyscale_config.dm b/code/datums/greyscale/_greyscale_config.dm
index 9d3099d770b..c6973a5d983 100644
--- a/code/datums/greyscale/_greyscale_config.dm
+++ b/code/datums/greyscale/_greyscale_config.dm
@@ -57,21 +57,16 @@
if(!json_config)
stack_trace("Greyscale config object [DebugName()] is missing a json configuration, make sure `json_config` has been assigned a value.")
string_json_config = "[json_config]"
- /* SKYRAT EDIT - Added recognition for the Skyrat GAGS folder - ORIGINAL:
- if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1)
- stack_trace("All greyscale json configuration files should be located within 'code/datums/greyscale/json_configs/'")
- */ // ORIGINAL END - SKYART EDIT BEGIN:
- var/static/regex/skyrat_gags_regex = regex("(modular_skyrat/modules/GAGS/.*json_configs/)")
- if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1 && skyrat_gags_regex.Find(string_json_config) != 1)
- stack_trace("All greyscale json configuration files should be located within '/greyscale/json_configs/' or 'modular_skyrat/modules/GAGS/json_configs/'.")
- // SKYRAT EDIT END
+ var/static/regex/nova_gags_regex = regex(@"^modular_nova\/modules\/GAGS\/(?:[\w]+\/)*json_configs\/(?:[\w]+\/)*\w+\.json$") // NOVA EDIT ADDITION - Added recognition for the Nova GAGS folder
+ if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1 && nova_gags_regex.Find(string_json_config) != 1) // NOVA EDIT CHANGE - ORIGINAL: if(findtext(string_json_config, "code/datums/greyscale/json_configs/") != 1)
+ stack_trace("All greyscale json configuration files should be located within '/greyscale/json_configs/' or 'modular_nova/modules/GAGS/json_configs/'.") // NOVA EDIT CHANGE - ORIGINAL: stack_trace("All greyscale json configuration files should be located within 'code/datums/greyscale/json_configs/'")
if(!icon_file)
stack_trace("Greyscale config object [DebugName()] is missing an icon file, make sure `icon_file` has been assigned a value.")
string_icon_file = "[icon_file]"
if(!name)
stack_trace("Greyscale config object [DebugName()] is missing a name, make sure `name` has been assigned a value.")
-/datum/greyscale_config/Destroy(force, ...)
+/datum/greyscale_config/Destroy(force)
if(!force)
return QDEL_HINT_LETMELIVE
return ..()
diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm
index 5ff1fde7c27..a277ec50544 100644
--- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm
+++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm
@@ -35,7 +35,7 @@
name = "Held Sombrero Style (Held, Right)"
json_config = 'code/datums/greyscale/json_configs/sombrero_base_righthand.json'
-/* SKYRAT EDIT START - Beret-lliant (moved to modular_skyrat/modules/berets/code/datums/config_types)
+/* NOVA EDIT START - Beret-lliant (moved to modular_nova/modules/berets/code/datums/config_types)
/datum/greyscale_config/beret/worn
name = "Beret Worn"
name = "Beret (Worn)"
@@ -51,7 +51,7 @@
name = "Beret With Badge Worn"
name = "Badged Beret (Worn)"
json_config = 'code/datums/greyscale/json_configs/beret_badge_worn.json'
-SKYRAT EDIT END */
+NOVA EDIT END */
/datum/greyscale_config/beanie
name = "Beanie"
@@ -80,6 +80,15 @@ SKYRAT EDIT END */
name = "Party Hat (Worn)"
icon_file = 'icons/mob/clothing/head/costume.dmi'
+/datum/greyscale_config/santa_hat
+ name = "Santa Hat"
+ icon_file = 'icons/obj/clothing/head/costume.dmi'
+ json_config = 'code/datums/greyscale/json_configs/santa_hat.json'
+
+/datum/greyscale_config/santa_hat/worn
+ name = "Santa Hat (Worn)"
+ icon_file = 'icons/mob/clothing/head/costume.dmi'
+
//
// MASKS
//
@@ -354,6 +363,18 @@ SKYRAT EDIT END */
icon_file = 'icons/mob/clothing/under/shorts_pants_shirts.dmi'
json_config = 'code/datums/greyscale/json_configs/buttondown_skirt_worn.json'
+//
+// LABCOATS
+//
+
+/datum/greyscale_config/labcoat
+ name = "Labcoat"
+ icon_file = 'icons/obj/clothing/suits/labcoat.dmi'
+ json_config = 'code/datums/greyscale/json_configs/labcoat.json'
+
+/datum/greyscale_config/labcoat/worn
+ name = "Labcoat (Worn)"
+ icon_file = 'icons/mob/clothing/suits/labcoat.dmi'
//
// SUITS
diff --git a/code/datums/greyscale/json_configs/labcoat.json b/code/datums/greyscale/json_configs/labcoat.json
new file mode 100644
index 00000000000..f95b86893b0
--- /dev/null
+++ b/code/datums/greyscale/json_configs/labcoat.json
@@ -0,0 +1,54 @@
+{
+ "labcoat_job": [
+ {
+ "type": "icon_state",
+ "icon_state": "labcoat_job",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sash",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shoulder",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "back",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ],
+ "labcoat_job_t": [
+ {
+ "type": "icon_state",
+ "icon_state": "labcoat_job_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sash_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shoulder",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "back_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ]
+}
diff --git a/code/datums/greyscale/json_configs/labcoat_worn.json b/code/datums/greyscale/json_configs/labcoat_worn.json
new file mode 100644
index 00000000000..54abebcfa99
--- /dev/null
+++ b/code/datums/greyscale/json_configs/labcoat_worn.json
@@ -0,0 +1,54 @@
+{
+ "labcoat_job": [
+ {
+ "type": "icon_state",
+ "icon_state": "labcoat_job",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shoulder",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sash",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "back",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ],
+ "labcoat_job_t": [
+ {
+ "type": "icon_state",
+ "icon_state": "labcoat_job_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "shoulder_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "sash_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "back_t",
+ "blend_mode": "overlay",
+ "color_ids": [ 4 ]
+ }
+ ]
+}
diff --git a/code/datums/greyscale/json_configs/santa_hat.json b/code/datums/greyscale/json_configs/santa_hat.json
new file mode 100644
index 00000000000..dda130d59c7
--- /dev/null
+++ b/code/datums/greyscale/json_configs/santa_hat.json
@@ -0,0 +1,16 @@
+{
+ "santa_hat": [
+ {
+ "type": "icon_state",
+ "icon_state": "santa_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "santa_trim",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+}
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index b69b9f40015..aa091db5b01 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -19,8 +19,8 @@ GLOBAL_LIST_INIT(huds, list(
DATA_HUD_AI_DETECT = new/datum/atom_hud/ai_detector(),
DATA_HUD_FAN = new/datum/atom_hud/data/human/fan_hud(),
DATA_HUD_MALF_APC = new/datum/atom_hud/data/malf_apc(),
- DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), // SKYRAT EDIT ADDITION
- DATA_HUD_DNR = new/datum/atom_hud/data/human/dnr(), // SKYRAT EDIT ADDITION
+ DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), // NOVA EDIT ADDITION
+ DATA_HUD_DNR = new/datum/atom_hud/data/human/dnr(), // NOVA EDIT ADDITION
))
/datum/atom_hud
diff --git a/code/datums/json_database.dm b/code/datums/json_database.dm
new file mode 100644
index 00000000000..ea3ff354b48
--- /dev/null
+++ b/code/datums/json_database.dm
@@ -0,0 +1,128 @@
+/// Represents a json file being used as a database in the data/ folder.
+/// Changes made here will save back to the associated file, with recovery.
+/// Will defer writes until later if multiple happen in the same tick.
+/// Do not add an extra cache on top of this. This IS your cache.
+/datum/json_database
+ VAR_PRIVATE
+ filepath
+ backup_filepath
+
+ cached_data
+ save_queued = FALSE
+
+ static/existing_json_database = list()
+
+/datum/json_database/New(filepath)
+ if (IsAdminAdvancedProcCall())
+ to_chat(usr, "json_database creation, linking to [html_encode(filepath)], was blocked. ", confidential = TRUE)
+ return
+
+ ASSERT(isnull(existing_json_database[filepath]), "[filepath] already has an associated json_database. You must expose it somehow and use that instead of making a new one.")
+
+ existing_json_database[filepath] = TRUE
+
+ src.filepath = filepath
+ backup_filepath = "[filepath].savebac"
+
+ if (fexists(filepath))
+ cached_data = safe_json_decode(file2text(filepath))
+ if (isnull(cached_data))
+ var/scenario = "[filepath] existed, but did not have valid JSON"
+
+ if (fexists(backup_filepath))
+ load_backup(scenario)
+ else
+ stack_trace("[scenario]. No backup could be found.")
+ cached_data = list()
+ else
+ if (fexists(backup_filepath))
+ load_backup("[filepath] didn't exist")
+ else
+ cached_data = list()
+
+/datum/json_database/Destroy()
+ if (save_queued)
+ save()
+
+ existing_json_database -= filepath
+
+ return ..()
+
+/// Returns the cached data.
+/// Be careful on holding onto this data for too long, as it can mutate when other stuff changes it.
+/// Do not mutate it yourself.
+/datum/json_database/proc/get()
+ return cached_data
+
+/// Returns the data with the given key.
+/// For arrays, this is a number.
+/// Be careful on holding onto this data for too long, as it can mutate when other stuff changes it.
+/// Do not mutate it yourself.
+/datum/json_database/proc/get_key(key)
+ return cached_data[key]
+
+/// Sets the data at the key to the value, and queues a save.
+/datum/json_database/proc/set_key(key, value)
+ cached_data[key] = value
+ queue_save()
+
+/// Removes the data at the given item, and queues a save.
+/// For dictionaries, this can be the key.
+/// For arrays, this can be the value.
+/datum/json_database/proc/remove(item)
+ UNTYPED_LIST_REMOVE(cached_data, item)
+ queue_save()
+
+/// Inserts the data at the end of what is assumed to be an array, and queues a save.
+/datum/json_database/proc/insert(value)
+ UNTYPED_LIST_ADD(cached_data, value)
+ queue_save()
+
+/// Replaces the cache with the new data completely, and queues a save.
+/// Do not touch the new data after passing it in.
+/datum/json_database/proc/replace(list/new_data)
+ cached_data = new_data
+ queue_save()
+
+/datum/json_database/proc/queue_save()
+ PRIVATE_PROC(TRUE)
+
+ if (save_queued)
+ return
+
+ addtimer(CALLBACK(src, PROC_REF(save)), 0)
+
+/datum/json_database/proc/save()
+ PRIVATE_PROC(TRUE)
+
+ save_queued = FALSE
+
+ if (fexists(filepath))
+ rustg_file_write(file2text(filepath), backup_filepath)
+
+ rustg_file_write(json_encode(cached_data, JSON_PRETTY_PRINT), filepath)
+
+ ASSERT(!isnull(safe_json_decode(file2text(filepath))), "JSON written to [filepath] was not valid. Backup will be preserved.")
+
+ fdel(backup_filepath)
+
+/datum/json_database/proc/load_backup(scenario)
+ PRIVATE_PROC(TRUE)
+
+ var/cached_contents = file2text(backup_filepath)
+ var/list/backed_up_data = safe_json_decode(cached_contents)
+
+ if (isnull(backed_up_data))
+ stack_trace("[scenario]. Backup existed, but also did not have valid JSON.")
+ cached_data = list()
+ else
+ stack_trace("[scenario]. Backup existed and was used instead. The JSON file has been updated.")
+ cached_data = backed_up_data
+ rustg_file_write(cached_contents, filepath)
+
+/datum/json_database/vv_edit_var(var_name, var_value)
+ switch (var_name)
+ if (nameof(filepath), nameof(backup_filepath))
+ return FALSE
+ else
+ return ..()
diff --git a/code/datums/json_savefile.dm b/code/datums/json_savefile.dm
index 08f8cf2d616..dd2a6af0b98 100644
--- a/code/datums/json_savefile.dm
+++ b/code/datums/json_savefile.dm
@@ -57,7 +57,7 @@ GENERAL_PROTECT_DATUM(/datum/json_savefile)
/datum/json_savefile/proc/save()
if(path)
- rustg_file_write(json_encode(tree), path)
+ rustg_file_write(json_encode(tree, JSON_PRETTY_PRINT), path)
/datum/json_savefile/serialize_list(list/options, list/semvers)
SHOULD_CALL_PARENT(FALSE)
diff --git a/code/datums/keybinding/communication.dm b/code/datums/keybinding/communication.dm
index 92c8f3c4984..b1344c096b9 100644
--- a/code/datums/keybinding/communication.dm
+++ b/code/datums/keybinding/communication.dm
@@ -16,7 +16,7 @@
/datum/keybinding/client/communication/radio
//hotkey_keys = list("Y") // ORIGINAL
- hotkey_keys = list(";") // SKYRAT EDIT CHANGE - CUSTOMIZATION
+ hotkey_keys = list(";") // NOVA EDIT CHANGE - CUSTOMIZATION
name = RADIO_CHANNEL
full_name = "IC Radio (;)"
keybind_signal = COMSIG_KB_CLIENT_RADIO_DOWN
diff --git a/code/datums/keybinding/living.dm b/code/datums/keybinding/living.dm
index 84e3685f5f8..eb666f57028 100644
--- a/code/datums/keybinding/living.dm
+++ b/code/datums/keybinding/living.dm
@@ -22,7 +22,7 @@
/datum/keybinding/living/look_up
// hotkey_keys = list("L") // ORIGINAL
- hotkey_keys = list("P") //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ hotkey_keys = list("P") //NOVA EDIT CHANGE - CUSTOMIZATION
name = "look up"
full_name = "Look Up"
description = "Look up at the next z-level. Only works if directly below open space."
@@ -43,7 +43,7 @@
/datum/keybinding/living/look_down
// hotkey_keys = list(";") // ORIGINAL
- hotkey_keys = list("\[") //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ hotkey_keys = list("\[") //NOVA EDIT CHANGE - CUSTOMIZATION
name = "look down"
full_name = "Look Down"
description = "Look down at the previous z-level. Only works if directly above open space."
@@ -121,7 +121,7 @@
user_mob.set_combat_mode(FALSE, silent = FALSE)
/datum/keybinding/living/toggle_move_intent
- hotkey_keys = list("Alt") //SKYRAT EDIT CHANGE - C IS FOR COMBAT INDICATOR - ORIGINAL: hotkey_keys = list("C")
+ hotkey_keys = list("Alt") //NOVA EDIT CHANGE - C IS FOR COMBAT INDICATOR - ORIGINAL: hotkey_keys = list("C")
name = "toggle_move_intent"
full_name = "Hold to toggle move intent"
description = "Held down to cycle to the other move intent, release to cycle back"
diff --git a/code/datums/lazy_template.dm b/code/datums/lazy_template.dm
index e3006e13056..0a5e8e53314 100644
--- a/code/datums/lazy_template.dm
+++ b/code/datums/lazy_template.dm
@@ -18,7 +18,7 @@
reservations = list()
..()
-/datum/lazy_template/Destroy(force, ...)
+/datum/lazy_template/Destroy(force)
if(!force)
stack_trace("Something is trying to delete [type]")
return QDEL_HINT_LETMELIVE
diff --git a/code/datums/looping_sounds/music.dm b/code/datums/looping_sounds/music.dm
index 56723f5db49..ac76e236bc7 100644
--- a/code/datums/looping_sounds/music.dm
+++ b/code/datums/looping_sounds/music.dm
@@ -8,3 +8,4 @@
use_reverb = FALSE
direct = TRUE
sound_channel = CHANNEL_ELEVATOR
+
diff --git a/code/datums/looping_sounds/projectiles.dm b/code/datums/looping_sounds/projectiles.dm
new file mode 100644
index 00000000000..6bc9a466ea1
--- /dev/null
+++ b/code/datums/looping_sounds/projectiles.dm
@@ -0,0 +1,4 @@
+/datum/looping_sound/moon_parade
+ mid_sounds = list('sound/effects/moon_parade_soundloop.ogg' = 1)
+ mid_length = 0
+ volume = 20
diff --git a/code/datums/map_config.dm b/code/datums/map_config.dm
index 9535bcf8576..762658b462a 100644
--- a/code/datums/map_config.dm
+++ b/code/datums/map_config.dm
@@ -34,7 +34,7 @@
"cargo" = "cargo_skyrat",
"ferry" = "ferry_fancy",
"whiteship" = "whiteship_meta",
- "emergency" = "emergency_skyrat") //SKYRAT EDIT CHANGE
+ "emergency" = "emergency_skyrat") //NOVA EDIT CHANGE
/// Dictionary of job sub-typepath to template changes dictionary
var/job_changes = list()
diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm
index 754b8755545..123b66ea13c 100644
--- a/code/datums/mapgen/CaveGenerator.dm
+++ b/code/datums/mapgen/CaveGenerator.dm
@@ -88,10 +88,10 @@
string_gen = rustg_cnoise_generate("[initial_closed_chance]", "[smoothing_iterations]", "[birth_limit]", "[death_limit]", "[world.maxx]", "[world.maxy]") //Generate the raw CA data
for(var/turf/gen_turf as anything in turfs) //Go through all the turfs and generate them
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(istype(gen_turf, /turf/open/space/mirage))
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/closed = string_gen[world.maxx * (gen_turf.y - 1) + gen_turf.x] != "0"
var/turf/new_turf = pick(closed ? closed_turf_types : open_turf_types)
@@ -192,5 +192,5 @@
CHECK_TICK
var/message = "[name] terrain population finished in [(REALTIMEOFDAY - start_time)/10]s!"
- add_startup_message(message) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(world, span_boldannounce("[message]"))
+ add_startup_message(message) //NOVA EDIT CHANGE - ORIGINAL: to_chat(world, span_boldannounce("[message]"))
log_world(message)
diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm
index 9ba1a53d40c..da30104c9af 100644
--- a/code/datums/martial/boxing.dm
+++ b/code/datums/martial/boxing.dm
@@ -33,14 +33,14 @@
var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected))
var/armor_block = defender.run_armor_check(affecting, MELEE)
- // SKYRAT EDIT CHANGE
+ // NOVA EDIT CHANGE
var/sound/attack_sound
if(!active_arm.unarmed_attack_sound)
attack_sound = get_sfx("punch")
else
attack_sound = active_arm.unarmed_attack_sound
playsound(defender.loc, attack_sound, 25, TRUE, -1)
- //SKYRAT EDIT END
+ //NOVA EDIT END
defender.visible_message(span_danger("[attacker] [atk_verb]ed [defender]!"), \
span_userdanger("You're [atk_verb]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker)
diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm
index f4c89177ac3..ce2b2e6e2d3 100644
--- a/code/datums/martial/plasma_fist.dm
+++ b/code/datums/martial/plasma_fist.dm
@@ -98,7 +98,7 @@
human_attacker.underwear = "Nude"
human_attacker.undershirt = "Nude"
human_attacker.socks = "Nude"
- human_attacker.bra = "Nude" // SKYRAT EDIT ADDITION - Underwear and bra split
+ human_attacker.bra = "Nude" // NOVA EDIT ADDITION - Underwear and bra split
human_attacker.update_body()
var/turf/boomspot = get_turf(user)
diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm
index 53e661d39d8..396b902b73f 100644
--- a/code/datums/materials/_material.dm
+++ b/code/datums/materials/_material.dm
@@ -245,7 +245,7 @@ Simple datum which is instanced once per type and is used for every object of sa
*
* Arguments:
* - amount: The amount of the material to break down.
- * - breakdown_flags: Some flags dictating how exactly this material is being broken down.
*/
-/datum/material/proc/return_composition(amount=1, breakdown_flags=NONE)
- return list((src) = amount) // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break.
+/datum/material/proc/return_composition(amount = 1)
+ // Yes we need the parenthesis, without them BYOND stringifies src into "src" and things break.
+ return list((src) = amount)
diff --git a/code/datums/materials/alloys.dm b/code/datums/materials/alloys.dm
index af208fdc5a4..e878a7f495d 100644
--- a/code/datums/materials/alloys.dm
+++ b/code/datums/materials/alloys.dm
@@ -6,18 +6,14 @@
init_flags = NONE
/// The materials this alloy is made from weighted by their ratios.
var/list/composition = null
- /// Breakdown flags required to reduce this alloy to its component materials.
- var/req_breakdown_flags = BREAKDOWN_ALLOYS
-
-/datum/material/alloy/return_composition(amount=1, breakdown_flags)
- if(req_breakdown_flags & !(breakdown_flags & req_breakdown_flags))
- return ..()
+/datum/material/alloy/return_composition(amount = 1)
. = list()
+
var/list/cached_comp = composition
for(var/comp_mat in cached_comp)
var/datum/material/component_material = GET_MATERIAL_REF(comp_mat)
- var/list/component_composition = component_material.return_composition(cached_comp[comp_mat], breakdown_flags)
+ var/list/component_composition = component_material.return_composition(cached_comp[comp_mat])
for(var/comp_comp_mat in component_composition)
.[comp_comp_mat] += component_composition[comp_comp_mat] * amount
diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm
index 57312774776..0656d32006a 100644
--- a/code/datums/memory/_memory.dm
+++ b/code/datums/memory/_memory.dm
@@ -71,7 +71,7 @@
// This happens after everything's all set, remember this for New overrides
generate_memory_name()
-/datum/memory/Destroy(force, ...)
+/datum/memory/Destroy(force)
memorizer_mind = null
return ..()
diff --git a/code/datums/mergers/_merger.dm b/code/datums/mergers/_merger.dm
index 8014b6419fc..6816d415a89 100644
--- a/code/datums/mergers/_merger.dm
+++ b/code/datums/mergers/_merger.dm
@@ -28,7 +28,7 @@
src.attempt_merge_proc = attempt_merge_proc
Refresh()
-/datum/merger/Destroy(force, ...)
+/datum/merger/Destroy(force)
for(var/atom/thing as anything in members)
RemoveMember(thing)
return ..()
diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm
index deb55e92ecb..e33065651a3 100644
--- a/code/datums/mind/_mind.dm
+++ b/code/datums/mind/_mind.dm
@@ -501,13 +501,13 @@
log_admin("[key_name(usr)] tried and failed to give [current] an uplink.")
else
log_admin("[key_name(usr)] gave [current] an uplink.")
- //SKYRAT EDIT ADDITION BEGIN -- EXPLOITABLES
+ //NOVA EDIT ADDITION BEGIN -- EXPLOITABLES
if("toggle_exploitables")
has_exploitables_override = !has_exploitables_override //First we set the override to be the opposite of whatever it was apon execution, then we
handle_exploitables() // use ternaries to convert this into true/false for admin logs.
log_admin("[key_name(usr)] toggled [current]'s exploitables override to [(has_exploitables_override) ? "true" : "false"].")
message_admins("[key_name(usr)] toggled [current]'s exploitables override to [(has_exploitables_override) ? "true" : "false"].")
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else if (href_list["obj_announce"])
announce_objectives()
@@ -569,12 +569,12 @@
/// Sets us to the passed job datum, then greets them to their new job.
/// Use this one for when you're assigning this mind to a new job for the first time,
/// or for when someone's recieving a job they'd really want to be greeted to.
-/datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client, alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client)
+/datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client, alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/mind/proc/set_assigned_role_with_greeting(datum/job/new_role, client/incoming_client)
. = set_assigned_role(new_role)
if(assigned_role != new_role)
return
- var/intro_message = new_role.get_spawn_message(alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: var/intro_message = new_role.get_spawn_message()
+ var/intro_message = new_role.get_spawn_message(alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: var/intro_message = new_role.get_spawn_message()
if(incoming_client && intro_message)
to_chat(incoming_client, intro_message)
diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm
index f95b1992c0d..81a0a939a9c 100644
--- a/code/datums/mind/antag.dm
+++ b/code/datums/mind/antag.dm
@@ -25,7 +25,7 @@
antag_team.add_member(src)
INVOKE_ASYNC(A, TYPE_PROC_REF(/datum/antagonist, on_gain))
log_game("[key_name(src)] has gained antag datum [A.name]([A.type]).")
- handle_exploitables() //SKYRAT EDIT ADDITION - EXPLOITABLES MENU
+ handle_exploitables() //NOVA EDIT ADDITION - EXPLOITABLES MENU
return A
/datum/mind/proc/remove_antag_datum(datum_type)
diff --git a/code/datums/mocking/client.dm b/code/datums/mocking/client.dm
index 418f5cfb8db..dc1db213f34 100644
--- a/code/datums/mocking/client.dm
+++ b/code/datums/mocking/client.dm
@@ -39,7 +39,7 @@
GLOB.directory[ckey] = src
#endif
-/datum/client_interface/Destroy(force, ...)
+/datum/client_interface/Destroy(force)
GLOB.directory -= ckey
return ..()
diff --git a/code/datums/mood.dm b/code/datums/mood.dm
index 76f08641ecb..d8e7a1bbf9b 100644
--- a/code/datums/mood.dm
+++ b/code/datums/mood.dm
@@ -67,7 +67,7 @@
mob_parent = null
-/datum/mood/Destroy(force, ...)
+/datum/mood/Destroy(force)
STOP_PROCESSING(SSmood, src)
QDEL_LIST_ASSOC_VAL(mood_events)
return ..()
@@ -267,12 +267,12 @@
mood_screen_object.color = "#f15d36"
if (!conflicting_moodies.len) // theres no special icons, use the normal icon states
- //SKYRAT EDIT ADDITION BEGIN - ALEXITHYMIA
+ //NOVA EDIT ADDITION BEGIN - ALEXITHYMIA
if(HAS_TRAIT(mob_parent, TRAIT_MOOD_NOEXAMINE))
mood_screen_object.icon_state = "mood5"
mood_screen_object.color = "#4b96c4"
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
mood_screen_object.icon_state = "mood[mood_level]"
return
@@ -331,7 +331,7 @@
if(SANITY_INSANE to SANITY_CRAZY)
msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n"
*/
- //SKYRAT EDIT CHANGE BEGIN - ALEXITHYMIA
+ //NOVA EDIT CHANGE BEGIN - ALEXITHYMIA
if(!HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE))
switch(sanity)
if(SANITY_GREAT to INFINITY)
@@ -348,7 +348,7 @@
msg += "[span_boldwarning("AHAHAHAHAHAHAHAHAHAH!!")]\n"
else
msg += span_notice("I don't really know.")
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
msg += span_notice("My current mood: ") //Short term
//ORIGINAL
@@ -373,7 +373,7 @@
if(MOOD_LEVEL_HAPPY4)
msg += "[span_boldnicegreen("I love life!")]\n"
*/
- //SKYRAT EDIT CHANGE BEGIN - ALEXITHYMIA
+ //NOVA EDIT CHANGE BEGIN - ALEXITHYMIA
if(!HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE))
switch(mood_level)
if(MOOD_LEVEL_SAD4)
@@ -396,10 +396,10 @@
msg += "[span_boldnicegreen("I love life!")]\n"
else
msg += "[span_notice("No clue.")]\n"
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
msg += "[span_notice("Moodlets:")]\n"//All moodlets
//if(mood_events.len) //ORIGINAL
- if(mood_events.len && !HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) //SKYRAT EDIT CHANGE - ALEXITHYMIA
+ if(mood_events.len && !HAS_TRAIT(user, TRAIT_MOOD_NOEXAMINE)) //NOVA EDIT CHANGE - ALEXITHYMIA
for(var/category in mood_events)
var/datum/mood_event/event = mood_events[category]
switch(event.mood_change)
diff --git a/code/datums/mood_events/eldritch_painting_events.dm b/code/datums/mood_events/eldritch_painting_events.dm
new file mode 100644
index 00000000000..7df89104263
--- /dev/null
+++ b/code/datums/mood_events/eldritch_painting_events.dm
@@ -0,0 +1,48 @@
+// These mood events are related to /obj/structure/sign/painting/eldritch
+// Names are based on the subtype of painting they belong to
+
+// Mood applied for ripping the painting
+/datum/mood_event/eldritch_painting
+ description = "YOU, I SHOULD NOT HAVE DONE THAT!!!"
+ mood_change = -6
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/weeping
+ description = "HE IS HERE, AND HE WEEPS!"
+ mood_change = -3
+ timeout = 11 SECONDS
+
+/datum/mood_event/eldritch_painting/weeping_heretic
+ description = "Oh such arts! They truly inspire me!"
+ mood_change = 5
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/weeping_withdrawl
+ description = "My mind is clear from his influence."
+ mood_change = 1
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/desire_heretic
+ description = "A part gained, the manus takes and gives. What did it take from me?"
+ mood_change = -2
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/desire_examine
+ description = "A hunger kept at bay..."
+ mood_change = 3
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/heretic_vines
+ description = "Oh what a lovely flower!"
+ mood_change = 3
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/rust_examine
+ description = "The rusted climb can wait..."
+ mood_change = -2
+ timeout = 3 MINUTES
+
+/datum/mood_event/eldritch_painting/rust_heretic_examine
+ description = "I must hurry the rusted climb!"
+ mood_change = 6
+ timeout = 3 MINUTES
diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm
index e5f199b47ac..cc3af071eef 100644
--- a/code/datums/mood_events/generic_negative_events.dm
+++ b/code/datums/mood_events/generic_negative_events.dm
@@ -440,6 +440,16 @@
description = "I've been here too long! I want to go out and explore space!"
mood_change = -3
+/datum/mood_event/moon_insanity
+ description = "THE MOON JUDGES AND FINDS ME WANTING!!!"
+ mood_change = -3
+ timeout = 5 MINUTES
+
+/datum/mood_event/amulette_insanity
+ description = "I sEe THe LiGHt, It mUsT BE stOPPed"
+ mood_change = -6
+ timeout = 5 MINUTES
+
///Wizard cheesy grand finale - what everyone but the wizard gets
/datum/mood_event/madness_despair
description = "UNWORTHY, UNWORTHY, UNWORTHY!!!"
diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm
index 9126f0a090e..8c760e8c4f8 100644
--- a/code/datums/mood_events/generic_positive_events.dm
+++ b/code/datums/mood_events/generic_positive_events.dm
@@ -372,6 +372,11 @@
mood_change = 2
timeout = 5 MINUTES
+/datum/mood_event/moon_smile
+ description = "THE MOON SHOWS ME THE TRUTH AND ITS SMILE IS FACED TOWARDS ME!!!"
+ mood_change = 10
+ timeout = 2 MINUTES
+
///Wizard cheesy grand finale - what the wizard gets
/datum/mood_event/madness_elation
description = "Madness truly is the greatest of blessings..."
diff --git a/code/datums/mood_events/needs_events.dm b/code/datums/mood_events/needs_events.dm
index ceee687918e..dd710554d8d 100644
--- a/code/datums/mood_events/needs_events.dm
+++ b/code/datums/mood_events/needs_events.dm
@@ -76,3 +76,47 @@
description = "There's nothing like the feeling of a freshly laundered jumpsuit."
mood_change = 2
timeout = 10 MINUTES
+
+/datum/mood_event/surrounded_by_silicon
+ description = "I'm surrounded by perfect lifeforms!!"
+ mood_change = 8
+
+/datum/mood_event/around_many_silicon
+ description = "So many silicon lifeforms near me!"
+ mood_change = 4
+
+/datum/mood_event/around_silicon
+ description = "The silicon lifeforms near me are absolutely perfect."
+ mood_change = 2
+
+/datum/mood_event/around_organic
+ description = "The organics near me remind me of the inferiority of flesh."
+ mood_change = -2
+
+/datum/mood_event/around_many_organic
+ description = "So many disgusting organics!"
+ mood_change = -4
+
+/datum/mood_event/surrounded_by_organic
+ description = "I'm surrounded by disgusting organics!!"
+ mood_change = -8
+
+/datum/mood_event/completely_robotic
+ description = "I've abandoned my feeble flesh, my form is perfect!!"
+ mood_change = 8
+
+/datum/mood_event/very_robotic
+ description = "I'm more robot than organic!"
+ mood_change = 4
+
+/datum/mood_event/balanced_robotic
+ description = "I'm part machine, part organic."
+ mood_change = 0
+
+/datum/mood_event/very_organic
+ description = "I hate this feeble and weak flesh!"
+ mood_change = -4
+
+/datum/mood_event/completely_organic
+ description = "I'm completely organic, this is miserable!!"
+ mood_change = -8
diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm
index cc99917c746..b33fbdadbf1 100644
--- a/code/datums/mutations/_mutations.dm
+++ b/code/datums/mutations/_mutations.dm
@@ -95,10 +95,10 @@
/datum/mutation/human/proc/on_acquiring(mob/living/carbon/human/acquirer)
if(!acquirer || !istype(acquirer) || acquirer.stat == DEAD || (src in acquirer.dna.mutations))
return TRUE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(acquirer.has_borer())
to_chat(acquirer, span_warning("Something inside holds dearly to your humanity!"))
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(species_allowed && !species_allowed.Find(acquirer.dna.species.id))
return TRUE
if(health_req && acquirer.health < health_req)
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 0fdf2820d2f..92859902137 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -119,24 +119,24 @@
/datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(owner.dna.features["body_size"] < 1)
to_chat(owner, "You feel your body shrinking even further, but your organs aren't! Uh oh!")
owner.adjustBruteLoss(25)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
ADD_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION)
owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
/datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner)
if(..())
return
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(owner.dna.features["body_size"] < 1)
to_chat(owner, "You feel relief as your organs cease to strain against your insides.")
REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION)
owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
@@ -391,12 +391,12 @@
/datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(owner.dna.features["body_size"] > 1)
to_chat(owner, "You feel your body expanding even further, but it feels like your bones are expanding too much!")
owner.adjustBruteLoss(25) // take some DAMAGE
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
owner.update_transform(1.25)
owner.visible_message(span_danger("[owner] suddenly grows!"), span_notice("Everything around you seems to shrink.."))
@@ -404,12 +404,12 @@
/datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner)
if(..())
return
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(owner.dna.features["body_size"] > 1)
to_chat(owner, "You feel relief as your bones cease their growth spurt.")
REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION)
owner.update_transform(0.8)
owner.visible_message(span_danger("[owner] suddenly shrinks!"), span_notice("Everything around you seems to grow.."))
diff --git a/code/datums/mutations/chameleon.dm b/code/datums/mutations/chameleon.dm
index 4ec73f92a4b..b9b415efab6 100644
--- a/code/datums/mutations/chameleon.dm
+++ b/code/datums/mutations/chameleon.dm
@@ -12,20 +12,20 @@
/datum/mutation/human/chameleon/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
return
ADD_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_move))
RegisterSignal(owner, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_attack_hand))
/datum/mutation/human/chameleon/on_life(seconds_per_tick, times_fired)
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
owner.alpha = max(owner.alpha - (12.5 * (GET_MUTATION_POWER(src)) * seconds_per_tick), 0)
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
/**
* Resets the alpha of the host to the chameleon default if they move.
@@ -40,12 +40,12 @@
/datum/mutation/human/chameleon/proc/on_move(atom/movable/source, atom/old_loc, move_dir, forced, list/atom/old_locs)
SIGNAL_HANDLER
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
else
owner.alpha = 255
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
/**
* Resets the alpha of the host if they click on something nearby.
@@ -62,18 +62,18 @@
if(!proximity) //stops tk from breaking chameleon
return
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
if(HAS_TRAIT(owner, TRAIT_CHAMELEON_SKIN))
owner.alpha = CHAMELEON_MUTATION_DEFAULT_TRANSPARENCY
else
owner.alpha = 255
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
/datum/mutation/human/chameleon/on_losing(mob/living/carbon/human/owner)
if(..())
return
owner.alpha = 255
UnregisterSignal(owner, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_UNARMED_ATTACK))
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
REMOVE_TRAIT(owner, TRAIT_CHAMELEON_SKIN, GENETIC_MUTATION)
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm
index a76adac10ac..5530a3b8311 100644
--- a/code/datums/mutations/hulk.dm
+++ b/code/datums/mutations/hulk.dm
@@ -130,7 +130,7 @@
if(ishuman(possible_throwable))
var/mob/living/carbon/human/human_throwable = possible_throwable
//if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDEJUMPSUIT)) // ORIGINAL
- if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDETAIL)) // SKYRAT EDIT CHANGE
+ if(human_throwable.wear_suit && (human_throwable.wear_suit.flags_inv & HIDETAIL)) // NOVA EDIT CHANGE
to_chat(user, span_warning("You can't reach [human_throwable]'s tail through [human_throwable.p_their()] [human_throwable.wear_suit.name]!"))
return
diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm
index 69514ded90f..be2ee57b5f3 100644
--- a/code/datums/mutations/sight.dm
+++ b/code/datums/mutations/sight.dm
@@ -41,7 +41,7 @@
text_gain_indication = "You can see the heat rising off of your skin... "
text_lose_indication = "You can no longer see the heat rising off of your skin... "
instability = 25
- locked = TRUE //SKYRAT EDIT ADDITION
+ locked = TRUE //NOVA EDIT ADDITION
synchronizer_coeff = 1
power_coeff = 1
energy_coeff = 1
diff --git a/code/datums/mutations/telekinesis.dm b/code/datums/mutations/telekinesis.dm
index 956b266dd65..d5c719ece84 100644
--- a/code/datums/mutations/telekinesis.dm
+++ b/code/datums/mutations/telekinesis.dm
@@ -13,7 +13,7 @@
/datum/mutation/human/telekinesis/New(class_ = MUT_OTHER, timer, datum/mutation/human/copymut)
..()
if(!(type in visual_indicators))
- visual_indicators[type] = list(mutable_appearance('modular_skyrat/master_files/icons/effects/tele_effects.dmi', "telekinesishead", -MUTATIONS_LAYER)) //SKYRAT EDIT, Old icon location: "icons/effects/genetics.dmi"
+ visual_indicators[type] = list(mutable_appearance('modular_nova/master_files/icons/effects/tele_effects.dmi', "telekinesishead", -MUTATIONS_LAYER)) //NOVA EDIT, Old icon location: "icons/effects/genetics.dmi"
//visual_indicators[type] = list(mutable_appearance('icons/mob/effects/genetics.dmi', "telekinesishead", -MUTATIONS_LAYER)) //non Skyrat version
/datum/mutation/human/telekinesis/on_acquiring(mob/living/carbon/human/H)
diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm
index 38a67b1baa2..6289ea13f38 100644
--- a/code/datums/outfit.dm
+++ b/code/datums/outfit.dm
@@ -221,10 +221,10 @@
user.socks = initial(socks.name)
- // SKYRAT EDIT ADDITION START - Underwear and bra split
+ // NOVA EDIT ADDITION START - Underwear and bra split
if(bra)
user.bra = initial(bra.name)
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(accessory)
var/obj/item/clothing/under/U = user.w_uniform
@@ -342,7 +342,7 @@
item.add_fingerprint(user, ignoregloves = TRUE)
return TRUE
-//SKYRAT EDIT
+//NOVA EDIT
/**
* Copies the outfit from a human to itself.
**/
@@ -374,7 +374,7 @@
if(H.belt)
belt = H.belt.type
return TRUE
-// SKYRAT EDIT END
+// NOVA EDIT END
/// Return a list of all the types that are required to disguise as this outfit type
/datum/outfit/proc/get_chameleon_disguise_info()
@@ -416,7 +416,7 @@
for(var/skillpath in skillchips)
preload += skillpath
- preload -= typesof(/obj/item/clothing/under/color/random) // SKYRAT EDIT - Don't preload random jumpsuit spawners that delete themselves
+ preload -= typesof(/obj/item/clothing/under/color/random) // NOVA EDIT - Don't preload random jumpsuit spawners that delete themselves
return preload
diff --git a/code/datums/proximity_monitor/fields/projectile_dampener.dm b/code/datums/proximity_monitor/fields/projectile_dampener.dm
index 7f625d64524..705ac6bface 100644
--- a/code/datums/proximity_monitor/fields/projectile_dampener.dm
+++ b/code/datums/proximity_monitor/fields/projectile_dampener.dm
@@ -35,7 +35,6 @@
for(var/obj/projectile/projectile in tracked)
if(!(projectile in ranged) || !projectile.loc)
release_projectile(projectile)
- ..()
/datum/proximity_monitor/advanced/projectile_dampener/setup_edge_turf(turf/target)
. = ..()
diff --git a/code/datums/proximity_monitor/fields/timestop.dm b/code/datums/proximity_monitor/fields/timestop.dm
index 86ea41aee01..c48759c1deb 100644
--- a/code/datums/proximity_monitor/fields/timestop.dm
+++ b/code/datums/proximity_monitor/fields/timestop.dm
@@ -238,7 +238,7 @@
//you don't look quite right, is something the matter?
/datum/proximity_monitor/advanced/timestop/proc/into_the_negative_zone(atom/A)
- A.add_atom_colour(list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0), TEMPORARY_COLOUR_PRIORITY)
+ A.add_atom_colour(COLOR_MATRIX_INVERT, TEMPORARY_COLOUR_PRIORITY)
//let's put some colour back into your cheeks
/datum/proximity_monitor/advanced/timestop/proc/escape_the_negative_zone(atom/A)
diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm
index 873ffd95fbd..6fbb583628f 100644
--- a/code/datums/quirks/_quirk.dm
+++ b/code/datums/quirks/_quirk.dm
@@ -28,7 +28,7 @@
var/abstract_parent_type = /datum/quirk
/// The icon to show in the preferences menu.
/// This references a tgui icon, so it can be FontAwesome or a tgfont (with a tg- prefix).
- var/icon = "bug" //SKYRAT EDIT CHANGE
+ var/icon = "bug" //NOVA EDIT CHANGE
/// A list of items people can receive from mail who have this quirk enabled
/// The base weight for the each quirk's mail goodies list to be selected is 5
/// then the item selected is determined by pick(selected_quirk.mail_goodies)
@@ -204,7 +204,7 @@
/mob/living/proc/get_quirk_string(medical = FALSE, category = CAT_QUIRK_ALL, from_scan = FALSE)
var/list/dat = list()
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
// The health analyzer will first check if the target is a changeling, and if they are, load the quirks of the person they're disguising as.
var/target_quirks = quirks
@@ -212,9 +212,9 @@
if(target_changeling)
target_quirks = target_changeling.current_profile.quirks
- // SKYRAT EDIT END
+ // NOVA EDIT END
- for(var/datum/quirk/candidate as anything in target_quirks) // SKYRAT EDIT CHANGE - ORIGINAL : for(var/datum/quirk/candidate as anything in quirks)
+ for(var/datum/quirk/candidate as anything in target_quirks) // NOVA EDIT CHANGE - ORIGINAL : for(var/datum/quirk/candidate as anything in quirks)
if(from_scan & candidate.quirk_flags & QUIRK_HIDE_FROM_SCAN)
continue
switch(category)
diff --git a/code/datums/quirks/_quirk_constant_data.dm b/code/datums/quirks/_quirk_constant_data.dm
index 977c52a6837..1984acecec0 100644
--- a/code/datums/quirks/_quirk_constant_data.dm
+++ b/code/datums/quirks/_quirk_constant_data.dm
@@ -58,7 +58,7 @@ GLOBAL_LIST_INIT_TYPED(all_quirk_constant_data, /datum/quirk_constant_data, gene
/datum/quirk_constant_data/proc/is_customizable()
return LAZYLEN(customization_options) > 0
-/datum/quirk_constant_data/Destroy(force, ...)
+/datum/quirk_constant_data/Destroy(force)
var/error_message = "[src], a singleton quirk constant data instance, was destroyed! This should not happen!"
if (force)
error_message += " NOTE: This Destroy() was called with force == TRUE. This instance will be deleted and replaced with a new one."
diff --git a/code/datums/quirks/negative_quirks/claustrophobia.dm b/code/datums/quirks/negative_quirks/claustrophobia.dm
index 226c9b65ef8..99442f13ffe 100644
--- a/code/datums/quirks/negative_quirks/claustrophobia.dm
+++ b/code/datums/quirks/negative_quirks/claustrophobia.dm
@@ -1,6 +1,6 @@
/datum/quirk/claustrophobia
name = "Claustrophobia"
- desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe."
+ desc = "You are terrified of small spaces. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." // NOVA EDIT CHANGE - ORIGINAL: desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe."
icon = FA_ICON_BOX_OPEN
value = -4
medical_record_text = "Patient demonstrates a fear of tight spaces."
@@ -20,10 +20,12 @@
var/nick_spotted = FALSE
+/* NOVA EDIT REMOVAL START
for(var/mob/living/carbon/human/possible_claus in view(5, quirk_holder))
if(evaluate_jolly_levels(possible_claus))
nick_spotted = TRUE
break
+NOVA EDIT REMOVAL END */
if(!nick_spotted && isturf(quirk_holder.loc))
quirk_holder.clear_mood_event("claustrophobia")
diff --git a/code/datums/quirks/negative_quirks/cursed.dm b/code/datums/quirks/negative_quirks/cursed.dm
index 4b99ff850b8..638c8ae97a8 100644
--- a/code/datums/quirks/negative_quirks/cursed.dm
+++ b/code/datums/quirks/negative_quirks/cursed.dm
@@ -1,5 +1,5 @@
/*
-// SKYRAT EDIT REMOVAL
+// NOVA EDIT REMOVAL
/datum/quirk/cursed
name = "Cursed"
desc = "You are cursed with bad luck. You are much more likely to suffer from accidents and mishaps. When it rains, it pours."
@@ -14,4 +14,4 @@
/datum/quirk/cursed/add(client/client_source)
quirk_holder.AddComponent(/datum/component/omen/quirk)
*/
-// SKYRAT EDIT REMOVAL END
+// NOVA EDIT REMOVAL END
diff --git a/code/datums/quirks/neutral_quirks/colorist.dm b/code/datums/quirks/neutral_quirks/colorist.dm
index f82fd5bf6fe..2374ad63430 100644
--- a/code/datums/quirks/neutral_quirks/colorist.dm
+++ b/code/datums/quirks/neutral_quirks/colorist.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/quirk/item_quirk/colorist
name = "Colorist"
desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair."
@@ -10,4 +10,4 @@
/datum/quirk/item_quirk/colorist/add_unique(client/client_source)
give_item_to_holder(/obj/item/dyespray, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS))
*/
-//SKYRAT EDIT REMOVAL
+//NOVA EDIT REMOVAL
diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm
new file mode 100644
index 00000000000..573b70cf21b
--- /dev/null
+++ b/code/datums/quirks/neutral_quirks/transhumanist.dm
@@ -0,0 +1,174 @@
+#define MOOD_CATEGORY_TRANSHUMANIST_PEOPLE "transhumanist_people"
+#define MOOD_CATEGORY_TRANSHUMANIST_BODYPART "transhumanist_bodypart"
+// The number of silicons minus the number of organics determines the level
+#define TRANSHUMANIST_LEVEL_ECSTATIC 4
+#define TRANSHUMANIST_LEVEL_HAPPY 1
+#define TRANSHUMANIST_LEVEL_NEUTRAL 0
+#define TRANSHUMANIST_LEVEL_UNHAPPY -2
+#define TRANSHUMANIST_LEVEL_ANGRY -5
+
+#define BODYPART_SCORE_ORGANIC 1
+#define BODYPART_SCORE_SILICON 2
+#define BODYPART_SCORE_OTHER_BODYTYPES 3
+#define BODYPART_SCORE_OVERALL 4
+
+
+/datum/quirk/transhumanist
+ name = "Transhumanist"
+ desc = "You see silicon life as the perfect lifeform and despise organic flesh. You are happier around silicons, but get frustrated when around organics. You seek to replace your fleshy limbs with their silicon counterparts. You start with a robotic limb."
+ icon = FA_ICON_ROBOT
+ quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED
+ value = 0
+ gain_text = span_notice("You have a desire to ditch your feeble organic flesh and surround yourself with robots.")
+ lose_text = span_danger("Robots don't seem all that great anymore.")
+ medical_record_text = "Patient reports hating pathetic creatures of meat and bone."
+ mail_goodies = list(
+ /obj/item/stock_parts/cell/potato,
+ /obj/item/stack/cable_coil,
+ /obj/item/toy/talking/ai,
+ /obj/item/toy/figure/borg,
+ )
+ var/slot_string
+ var/obj/item/bodypart/old_limb
+
+/datum/quirk/transhumanist/add(client/client_source)
+ RegisterSignal(quirk_holder, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(calculate_bodypart_score))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_POST_REMOVE_LIMB, PROC_REF(calculate_bodypart_score))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_GAIN_ORGAN, PROC_REF(calculate_bodypart_score))
+ RegisterSignal(quirk_holder, COMSIG_CARBON_LOSE_ORGAN, PROC_REF(calculate_bodypart_score))
+ calculate_bodypart_score()
+
+/datum/quirk/transhumanist/remove()
+ UnregisterSignal(quirk_holder, list(COMSIG_CARBON_REMOVE_LIMB, COMSIG_CARBON_ATTACH_LIMB))
+
+/datum/quirk/transhumanist/proc/get_bodypart_score(mob/living/carbon/target, limbs_only = FALSE)
+ var/organic_bodytypes = 0
+ var/silicon_bodytypes = 0
+ var/other_bodytypes = FALSE
+ for(var/obj/item/bodypart/part as anything in target.bodyparts)
+ if(part.bodytype & BODYTYPE_ROBOTIC)
+ silicon_bodytypes += 1
+ else if(part.bodytype & BODYTYPE_ORGANIC)
+ organic_bodytypes += 0.1
+ else
+ other_bodytypes = TRUE
+
+ if(!limbs_only)
+ for(var/obj/item/organ/organ as anything in target.organs)
+ if(organ.organ_flags & ORGAN_ROBOTIC)
+ silicon_bodytypes += 0.25
+ else if(organ.organ_flags & ORGAN_ORGANIC)
+ organic_bodytypes += 0.02
+
+ return list(
+ BODYPART_SCORE_ORGANIC = organic_bodytypes,
+ BODYPART_SCORE_SILICON = silicon_bodytypes,
+ BODYPART_SCORE_OTHER_BODYTYPES = other_bodytypes,
+ BODYPART_SCORE_OVERALL = silicon_bodytypes - organic_bodytypes
+ )
+
+
+/datum/quirk/transhumanist/proc/calculate_bodypart_score()
+ SIGNAL_HANDLER
+ var/list/score = get_bodypart_score(quirk_holder)
+ var/organic_bodytypes = score[BODYPART_SCORE_ORGANIC]
+ var/silicon_bodytypes = score[BODYPART_SCORE_SILICON]
+ var/other_bodytypes = score[BODYPART_SCORE_OTHER_BODYTYPES]
+
+ if(!other_bodytypes)
+ if(organic_bodytypes <= 0.02)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/completely_robotic)
+ return
+ else if(silicon_bodytypes == 0)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/completely_organic)
+ return
+ else if(silicon_bodytypes == 0 && organic_bodytypes == 0)
+ quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART)
+ return
+
+ var/bodypart_score = score[BODYPART_SCORE_OVERALL]
+ switch(bodypart_score)
+ if(3 to INFINITY)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/very_robotic)
+ if(0 to 3)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/balanced_robotic)
+ if(-INFINITY to 0)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART, /datum/mood_event/very_organic)
+
+
+/datum/quirk/transhumanist/add_unique(client/client_source)
+ var/limb_type = GLOB.limb_choice_transhuman[client_source?.prefs?.read_preference(/datum/preference/choiced/prosthetic)]
+ if(isnull(limb_type)) //Client gone or they chose a random prosthetic
+ limb_type = GLOB.limb_choice_transhuman[pick(GLOB.limb_choice_transhuman)]
+
+ var/mob/living/carbon/human/human_holder = quirk_holder
+ var/obj/item/bodypart/new_part = new limb_type()
+
+ slot_string = "[new_part.plaintext_zone]"
+ old_limb = human_holder.return_and_replace_bodypart(new_part, special = TRUE)
+
+/datum/quirk/transhumanist/post_add()
+ if(slot_string)
+ to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a robot arm. You need to use a welding tool and cables to repair it, instead of sutures and regenerative meshes."))
+
+/datum/quirk/transhumanist/remove()
+ if(old_limb)
+ var/mob/living/carbon/human/human_holder = quirk_holder
+ human_holder.del_and_replace_bodypart(old_limb, special = TRUE)
+ old_limb = null
+ quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_BODYPART)
+ quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE)
+
+/datum/quirk/transhumanist/process(seconds_per_tick)
+ var/organics_nearby = 0
+ var/silicons_nearby = 0
+
+ // Only cares about things that are nearby
+ var/list/mobs = get_hearers_in_LOS(3, quirk_holder)
+
+ for(var/mob/living/target in mobs)
+ if(!isturf(target.loc) || target == quirk_holder || target.alpha <= 128 || target.invisibility > quirk_holder.see_invisible)
+ continue
+
+ if(iscarbon(target))
+ var/list/score = get_bodypart_score(target, limbs_only = TRUE)
+ // For an average human, they'll need 2 augmented limbs to not get counted as an organic nor a silicon.
+ // If some monstrosity has 20-30 organic limbs, they'll likely need more.
+ if(score[BODYPART_SCORE_OVERALL] < 1)
+ organics_nearby += 1
+ else if(score[BODYPART_SCORE_ORGANIC] == 0)
+ silicons_nearby += 1
+ else if(target.mob_biotypes & MOB_ORGANIC)
+ organics_nearby += 1
+ else if(target.mob_biotypes & MOB_ROBOTIC && target.stat != DEAD) // Dead silicons don't count, they're basically just machinery
+ silicons_nearby += 1
+
+ var/mood_result = silicons_nearby - organics_nearby
+
+ switch(mood_result)
+ if(TRANSHUMANIST_LEVEL_ECSTATIC to INFINITY)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/surrounded_by_silicon)
+ if(TRANSHUMANIST_LEVEL_HAPPY to TRANSHUMANIST_LEVEL_ECSTATIC)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_many_silicon)
+ if(TRANSHUMANIST_LEVEL_NEUTRAL + 0.01 to TRANSHUMANIST_LEVEL_HAPPY)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_silicon)
+ if(TRANSHUMANIST_LEVEL_NEUTRAL)
+ quirk_holder.clear_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE)
+ if(TRANSHUMANIST_LEVEL_UNHAPPY to TRANSHUMANIST_LEVEL_NEUTRAL - 0.01)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_organic)
+ if(TRANSHUMANIST_LEVEL_ANGRY to TRANSHUMANIST_LEVEL_UNHAPPY)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/around_many_organic)
+ if(-INFINITY to TRANSHUMANIST_LEVEL_ANGRY)
+ quirk_holder.add_mood_event(MOOD_CATEGORY_TRANSHUMANIST_PEOPLE, /datum/mood_event/surrounded_by_organic)
+
+#undef MOOD_CATEGORY_TRANSHUMANIST_PEOPLE
+#undef MOOD_CATEGORY_TRANSHUMANIST_BODYPART
+#undef TRANSHUMANIST_LEVEL_ECSTATIC
+#undef TRANSHUMANIST_LEVEL_HAPPY
+#undef TRANSHUMANIST_LEVEL_NEUTRAL
+#undef TRANSHUMANIST_LEVEL_UNHAPPY
+#undef TRANSHUMANIST_LEVEL_ANGRY
+#undef BODYPART_SCORE_ORGANIC
+#undef BODYPART_SCORE_SILICON
+#undef BODYPART_SCORE_OTHER_BODYTYPES
+#undef BODYPART_SCORE_OVERALL
diff --git a/code/datums/quirks/positive_quirks/cyborg_lover.dm b/code/datums/quirks/positive_quirks/cyborg_lover.dm
deleted file mode 100644
index 8c75ab143b6..00000000000
--- a/code/datums/quirks/positive_quirks/cyborg_lover.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/datum/quirk/cyborg_lover
- name = "Cyborg Lover"
- desc = "You find silicon life forms fascinating! You like inspecting and touching their hulls and robo-bodies, as well you like being touched by their manipulators."
- icon = FA_ICON_ROBOT
- value = 2
- gain_text = span_notice("You are fascinated by silicon life forms.")
- lose_text = span_danger("Cyborgs and other silicons aren't cool anymore.")
- medical_record_text = "Patient reports being fascinated by silicon life forms."
- mail_goodies = list(
- /obj/item/stock_parts/cell/potato,
- /obj/item/stack/cable_coil,
- /obj/item/toy/talking/ai,
- /obj/item/toy/figure/borg,
- )
-
-/datum/quirk/cyborg_lover/add(client/client_source)
- var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN]
- fan.show_to(quirk_holder)
-
-/datum/quirk/cyborg_lover/add_to_holder(mob/living/new_holder, quirk_transfer, client/client_source)
- . = ..()
- RegisterSignal(new_holder, COMSIG_MOB_PAT_BORG, PROC_REF(pat_cyborg), override = TRUE)
- RegisterSignal(new_holder, COMSIG_BORG_TOUCH_MOB, PROC_REF(touched_by_cyborg), override = TRUE)
- RegisterSignal(new_holder, COMSIG_BORG_HUG_MOB, PROC_REF(hugged_by_cyborg), override = TRUE)
-
-/datum/quirk/cyborg_lover/remove_from_current_holder(quirk_transfer)
- UnregisterSignal(quirk_holder, list(COMSIG_MOB_PAT_BORG, COMSIG_BORG_TOUCH_MOB, COMSIG_BORG_HUG_MOB))
- return ..()
-
-/datum/quirk/cyborg_lover/proc/pat_cyborg()
- SIGNAL_HANDLER
- quirk_holder.add_mood_event("pat_borg", /datum/mood_event/pat_borg)
-
-/datum/quirk/cyborg_lover/proc/touched_by_cyborg()
- SIGNAL_HANDLER
- quirk_holder.add_mood_event("borg_touch", /datum/mood_event/borg_touch)
-
-/datum/quirk/cyborg_lover/proc/hugged_by_cyborg(borghugitem, mob/living/silicon/robot/hugger)
- SIGNAL_HANDLER
- hugger.visible_message(
- span_notice("[hugger] hugs [quirk_holder] in a firm bear-hug! [quirk_holder] looks satisfied!"),
- span_notice("You hug [quirk_holder] firmly to make [quirk_holder.p_them()] feel better! [quirk_holder] looks satisfied!"),
- )
- quirk_holder.add_mood_event("borg_hug", /datum/mood_event/borg_hug)
- return COMSIG_BORG_HUG_HANDLED
diff --git a/code/datums/quirks/positive_quirks/empath.dm b/code/datums/quirks/positive_quirks/empath.dm
index 3379f8a97c4..24115e71eaa 100644
--- a/code/datums/quirks/positive_quirks/empath.dm
+++ b/code/datums/quirks/positive_quirks/empath.dm
@@ -2,7 +2,7 @@
name = "Empath"
desc = "Whether it's a sixth sense or careful study of body language, it only takes you a quick glance at someone to understand how they feel."
icon = FA_ICON_SMILE_BEAM
- value = 6 // SKYRAT EDIT CHANGE - Quirk Rebalance - Original: value = 8
+ value = 6 // NOVA EDIT CHANGE - Quirk Rebalance - Original: value = 8
mob_trait = TRAIT_EMPATH
gain_text = span_notice("You feel in tune with those around you.")
lose_text = span_danger("You feel isolated from others.")
diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm
index 3dbef8ecac5..83157352901 100644
--- a/code/datums/quirks/positive_quirks/spacer.dm
+++ b/code/datums/quirks/positive_quirks/spacer.dm
@@ -10,7 +10,7 @@
lose_text = span_danger("You feel homesick.")
icon = FA_ICON_USER_ASTRONAUT
value = 7
- quirk_flags = QUIRK_CHANGES_APPEARANCE //SKYRAT EDIT CHANGE - ORIGINAL: quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE
+ quirk_flags = QUIRK_CHANGES_APPEARANCE //NOVA EDIT CHANGE - ORIGINAL: quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE
medical_record_text = "Patient is well-adapted to non-terrestrial environments."
mail_goodies = list(
/obj/item/storage/pill_bottle/ondansetron,
diff --git a/code/datums/quirks/positive_quirks/spiritual.dm b/code/datums/quirks/positive_quirks/spiritual.dm
index b08fe8b60c6..ab6a96cc249 100644
--- a/code/datums/quirks/positive_quirks/spiritual.dm
+++ b/code/datums/quirks/positive_quirks/spiritual.dm
@@ -2,7 +2,7 @@
name = "Spiritual"
desc = "You hold a spiritual belief, whether in God, nature or the arcane rules of the universe. You gain comfort from the presence of holy people, and believe that your prayers are more special than others. Being in the chapel makes you happy."
icon = FA_ICON_BIBLE
- value = 2 /// SKYRAT EDIT - Quirk Rebalance - Original: value = 4
+ value = 2 /// NOVA EDIT - Quirk Rebalance - Original: value = 4
mob_trait = TRAIT_SPIRITUAL
gain_text = span_notice("You have faith in a higher power.")
lose_text = span_danger("You lose faith!")
diff --git a/code/datums/quirks/positive_quirks/tagger.dm b/code/datums/quirks/positive_quirks/tagger.dm
index 4b0f48a1ca8..c2640081a6d 100644
--- a/code/datums/quirks/positive_quirks/tagger.dm
+++ b/code/datums/quirks/positive_quirks/tagger.dm
@@ -1,10 +1,10 @@
/datum/quirk/item_quirk/tagger
name = "Tagger"
- desc = "You're an experienced artist. People will actually be impressed by your graffiti, and you can get twice as many uses out of drawing supplies."
+ desc = "You're an experienced artist. People will actually be impressed by your graffiti, and you can get twice as many uses out of drawing supplies in half the time."
icon = FA_ICON_SPRAY_CAN
value = 4
mob_trait = TRAIT_TAGGER
- gain_text = span_notice("You know how to tag walls efficiently.")
+ gain_text = span_notice("You know how to tag walls efficiently and quickly.")
lose_text = span_danger("You forget how to tag walls properly.")
medical_record_text = "Patient was recently seen for possible paint huffing incident."
mail_goodies = list(
diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm
index 7b43b7644ef..febd6374f7f 100644
--- a/code/datums/records/manifest.dm
+++ b/code/datums/records/manifest.dm
@@ -16,7 +16,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
if(readied_player.new_character)
log_manifest(readied_player.ckey,readied_player.new_character.mind,readied_player.new_character)
if(ishuman(readied_player.new_character))
- inject(readied_player.new_character, readied_player.client) // SKYRAT EDIT - RP Records - ORIGINAL: inject(readied_player.new_character)
+ inject(readied_player.new_character, readied_player.client) // NOVA EDIT - RP Records - ORIGINAL: inject(readied_player.new_character)
CHECK_TICK
/// Gets the current manifest.
@@ -38,7 +38,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
misc_list[++misc_list.len] = list(
"name" = name,
"rank" = rank,
- "trim" = trim, // SKYRAT EDIT ADDITION - Alt Titles
+ "trim" = trim, // NOVA EDIT ADDITION - Alt Titles
)
continue
for(var/department_type as anything in job.departments_list)
@@ -52,7 +52,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
var/list/entry = list(
"name" = name,
"rank" = rank,
- "trim" = trim, // SKYRAT EDIT ADDITION - Alt Titles
+ "trim" = trim, // NOVA EDIT ADDITION - Alt Titles
)
var/list/department_list = manifest_out[department.department_name]
if(istype(job, department.department_head))
@@ -99,7 +99,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
/// Injects a record into the manifest.
-/datum/manifest/proc/inject(mob/living/carbon/human/person, client/person_client) // SKYRAT EDIT - RP Records - ORIGINAL: /datum/manifest/proc/inject(mob/living/carbon/human/person)
+/datum/manifest/proc/inject(mob/living/carbon/human/person, client/person_client) // NOVA EDIT - RP Records - ORIGINAL: /datum/manifest/proc/inject(mob/living/carbon/human/person)
set waitfor = FALSE
if(!(person.mind?.assigned_role.job_flags & JOB_CREW_MANIFEST))
return
@@ -114,10 +114,10 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
var/datum/dna/record_dna = new()
person.dna.copy_dna(record_dna)
- // SKYRAT EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
+ // NOVA EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
// The alt job title, if user picked one, or the default
var/chosen_assignment = person_client?.prefs.alt_job_titles[assignment] || assignment
- // SKYRAT EDIT ADDITION END - ALTERNATIVE_JOB_TITLES
+ // NOVA EDIT ADDITION END - ALTERNATIVE_JOB_TITLES
var/datum/record/locked/lockfile = new(
age = person.age,
@@ -128,7 +128,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
gender = person_gender,
initial_rank = assignment,
name = person.real_name,
- rank = chosen_assignment, // SKYRAT EDIT - Alt job titles - ORIGINAL: rank = assignment,
+ rank = chosen_assignment, // NOVA EDIT - Alt job titles - ORIGINAL: rank = assignment,
species = record_dna.species.name,
trim = assignment,
// Locked specifics
@@ -145,7 +145,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
gender = person_gender,
initial_rank = assignment,
name = person.real_name,
- rank = chosen_assignment, // SKYRAT EDIT - Alt job titles - ORIGINAL: rank = assignment,
+ rank = chosen_assignment, // NOVA EDIT - Alt job titles - ORIGINAL: rank = assignment,
species = record_dna.species.name,
trim = assignment,
// Crew specific
@@ -155,13 +155,13 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new)
minor_disabilities = person.get_quirk_string(FALSE, CAT_QUIRK_MINOR_DISABILITY, from_scan = TRUE),
minor_disabilities_desc = person.get_quirk_string(TRUE, CAT_QUIRK_MINOR_DISABILITY),
quirk_notes = person.get_quirk_string(TRUE, CAT_QUIRK_NOTES),
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
background_information = person_client?.prefs.read_preference(/datum/preference/text/background) || "",
exploitable_information = person_client?.prefs.read_preference(/datum/preference/text/exploitable) || "",
past_general_records = person_client?.prefs.read_preference(/datum/preference/text/general) || "",
past_medical_records = person_client?.prefs.read_preference(/datum/preference/text/medical) || "",
past_security_records = person_client?.prefs.read_preference(/datum/preference/text/security) || "",
- // SKYRAT EDIT END
+ // NOVA EDIT END
)
return
diff --git a/code/datums/records/record.dm b/code/datums/records/record.dm
index 276865115e4..40f3ff06ed7 100644
--- a/code/datums/records/record.dm
+++ b/code/datums/records/record.dm
@@ -105,13 +105,13 @@
physical_status = PHYSICAL_ACTIVE,
mental_status = MENTAL_STABLE,
quirk_notes,
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
background_information = "",
exploitable_information = "",
past_general_records = "",
past_medical_records = "",
past_security_records = "",
- // SKYRAT EDIT END
+ // NOVA EDIT END
)
. = ..()
src.lock_ref = lock_ref
@@ -122,13 +122,13 @@
src.physical_status = physical_status
src.mental_status = mental_status
src.quirk_notes = quirk_notes
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
src.background_information = background_information
src.exploitable_information = exploitable_information
src.past_general_records = past_general_records
src.past_medical_records = past_medical_records
src.past_security_records = past_security_records
- // SKYRAT EDIT END
+ // NOVA EDIT END
GLOB.manifest.general += src
@@ -239,18 +239,18 @@
final_paper_text += "Species: [species] Fingerprint: [fingerprint] Wanted Status: [wanted_status] "
- //SKYRAT EDIT ADD - RP RECORDS
+ //NOVA EDIT ADD - RP RECORDS
if(past_general_records != "")
final_paper_text += "General Records: "
final_paper_text += " [past_general_records] "
- //SKYRAT EDIT ADD END
+ //NOVA EDIT ADD END
final_paper_text += "Security Data "
- //SKYRAT EDIT ADDITION START - RP RECORDS
+ //NOVA EDIT ADDITION START - RP RECORDS
if(past_security_records != "")
final_paper_text += "Security Records: "
final_paper_text += " [past_security_records] "
- //SKYRAT EDIT END
+ //NOVA EDIT END
final_paper_text += "Crimes: "
final_paper_text += {"
@@ -298,9 +298,9 @@
printed_paper.name = "SR-[print_count] '[name]'"
- /// SKYRAT EDIT ADD - TRUE
+ /// NOVA EDIT ADD - TRUE
printed_paper.add_raw_text(final_paper_text,TRUE)
- /// SKYRAT EDIT ADD END
+ /// NOVA EDIT ADD END
printed_paper.update_appearance()
return printed_paper
diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm
index a903d9444f4..406f4f46d0d 100644
--- a/code/datums/ruins/icemoon.dm
+++ b/code/datums/ruins/icemoon.dm
@@ -74,7 +74,7 @@
suffix = "icemoon_surface_smoking_room.dmm"
// above and below ground together
-/* SKYRAT EDIT REMOVAL - Mapping
+/* NOVA EDIT REMOVAL - Mapping
/datum/map_template/ruin/icemoon/mining_site
name = "Mining Site"
id = "miningsite"
@@ -90,7 +90,7 @@
suffix = "icemoon_underground_mining_site.dmm"
has_ceiling = FALSE
unpickable = TRUE
-*/ // SKYRAT EDIT REMOVAL End
+*/ // NOVA EDIT REMOVAL End
// below ground only
/datum/map_template/ruin/icemoon/underground
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index b3bc5a4dc18..be28f7b5713 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -52,10 +52,10 @@
description = "A race of unbreathing lizards live here, that run faster than a human can, worship a broken dead city, and are capable of reproducing by something involving tentacles? \
Probably best to stay clear."
prefix = "_maps/RandomRuins/LavaRuins/skyrat/" // SKYRAT ADDITION
- suffix = "lavaland_surface_ash_walker1_skyrat.dmm" // SKYRAT EDIT - ORIGINAL: lavaland_surface_ash_walker1.dmm
- cost = 1000 //SKYRAT EDIT: Original: 20
+ suffix = "lavaland_surface_ash_walker1_skyrat.dmm" // NOVA EDIT - ORIGINAL: lavaland_surface_ash_walker1.dmm
+ cost = 1000 //NOVA EDIT: Original: 20
allow_duplicates = FALSE
-//SKYRAT EDIT REMOVAL BEGIN - MAPPING
+//NOVA EDIT REMOVAL BEGIN - MAPPING
/*
/datum/map_template/ruin/lavaland/syndicate_base
name = "Syndicate Lava Base"
@@ -65,7 +65,7 @@
cost = 20
allow_duplicates = FALSE
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/map_template/ruin/lavaland/free_golem
name = "Free Golem Ship"
id = "golem-ship"
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index e95167cf83e..c89351ef926 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -179,7 +179,7 @@
/datum/map_template/ruin/space/spacehotel
id = "spacehotel"
- suffix = "spacehotel_skyrat.dmm" // SKYRAT EDIT CHANGE - ORIGINAL: suffix = "spacehotel.dmm"
+ suffix = "spacehotel_skyrat.dmm" // NOVA EDIT CHANGE - ORIGINAL: suffix = "spacehotel.dmm"
name = "The Twin-Nexus Hotel"
description = "An interstellar hotel, where the weary spaceman can rest their head and relax, assured that the residental staff will not murder them in their sleep. Probably."
@@ -283,16 +283,16 @@
name = "Gondoland"
description = "Just an ordinary rock- wait, what's that thing?"
-// SKYRAT EDIT CHANGE START -- Reworked whiteship ruin
-/* SKYRAT EDIT CHANGE -- ORIGINAL COMMENTED OUT
+// NOVA EDIT CHANGE START -- Reworked whiteship ruin
+/* NOVA EDIT CHANGE -- ORIGINAL COMMENTED OUT
/datum/map_template/ruin/space/whiteshipruin_box
id = "whiteshipruin_box"
suffix = "whiteshipruin_box.dmm"*/
-/datum/map_template/ruin/space/whiteshipruin_box_skyrat//Skyrat Edit
+/datum/map_template/ruin/space/whiteshipruin_box_skyrat//NOVA EDIT
id = "whiteshipruin_box_skyrat"
suffix = "whiteshipruin_box_skyrat.dmm"
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
name = "NT Medical Ship"
description = "An ancient ship, said to be among the first discovered derelicts near Space Station 13 that was still in working order. \
Aged and deprecated by time, this relic of a vessel is now broken beyond repair."
diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm
index 5e8553c69ee..38dccb62295 100644
--- a/code/datums/shuttles/emergency.dm
+++ b/code/datums/shuttles/emergency.dm
@@ -1,6 +1,6 @@
#define EMAG_LOCKED_SHUTTLE_COST (CARGO_CRATE_VALUE * 50)
-/datum/map_template/shuttle/emergency // SKYRAT EDIT OVERRIDE - OVERRIDEN IN ADVANCED_SHUTTLES - shuttles.dm
+/datum/map_template/shuttle/emergency // NOVA EDIT OVERRIDE - OVERRIDEN IN ADVANCED_SHUTTLES - shuttles.dm
port_id = "emergency"
name = "Base Shuttle Template (Emergency)"
///assoc list of shuttle events to add to this shuttle on spawn (typepath = weight)
@@ -130,7 +130,7 @@
credit_cost = EMAG_LOCKED_SHUTTLE_COST * 1.8
movement_force = list("KNOCKDOWN" = 3, "THROW" = 5)
occupancy_limit = "70"
- who_can_purchase = null //SKYRAT EDIT ADDITION
+ who_can_purchase = null //NOVA EDIT ADDITION
/datum/map_template/shuttle/emergency/luxury
suffix = "luxury"
diff --git a/code/datums/skills/fitness.dm b/code/datums/skills/fitness.dm
index 5e6e3a14c23..b000b7c5897 100644
--- a/code/datums/skills/fitness.dm
+++ b/code/datums/skills/fitness.dm
@@ -8,7 +8,7 @@
var/static/size_boost = list(0, 1/16, 1/8, 3/16, 2/8, 3/8, 4/8)
// skill_item_path - your mob sprite gets bigger to showoff so we don't get a special item
-/* SKYRAT EDIT REMOVAL START - NO SIZE INCREASE
+/* NOVA EDIT REMOVAL START - NO SIZE INCREASE
/datum/skill/fitness/level_gained(datum/mind/mind, new_level, old_level, silent)
. = ..()
var/old_gym_size = RESIZE_DEFAULT_SIZE + size_boost[old_level]
@@ -22,4 +22,4 @@
var/new_gym_size = RESIZE_DEFAULT_SIZE + size_boost[new_level]
mind.current.update_transform(new_gym_size / old_gym_size)
-SKYRAT EDIT REMOVAL END */
+NOVA EDIT REMOVAL END */
diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm
index a3b81d41873..02e12504576 100644
--- a/code/datums/sprite_accessories.dm
+++ b/code/datums/sprite_accessories.dm
@@ -1169,7 +1169,7 @@
-/* SKYRAT EDIT REMOVAL START - Underwear and bra split
+/* NOVA EDIT REMOVAL START - Underwear and bra split
//FEMALE UNDERWEAR
/datum/sprite_accessory/underwear/female_bikini
name = "Bikini"
@@ -1271,7 +1271,7 @@
icon_state = "female_kinky"
gender = FEMALE
use_static = TRUE
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
////////////////////////////
// Undershirt Definitions //
@@ -1467,7 +1467,7 @@
name = "Short-sleeved Shirt (White)"
icon_state = "whiteshortsleeve"
gender = NEUTER
-/* SKYRAT EDIT REMOVAL START - Underwear and bra split
+/* NOVA EDIT REMOVAL START - Underwear and bra split
/datum/sprite_accessory/undershirt/sports_bra
name = "Sports Bra"
icon_state = "sports_bra"
@@ -1477,7 +1477,7 @@
name = "Sports Bra (Alt)"
icon_state = "sports_bra_alt"
gender = NEUTER
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
/datum/sprite_accessory/undershirt/blueshirtsport
name = "Sports Shirt (Blue)"
icon_state = "blueshirtsport"
diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm
index 5c37fd7ede5..7b0ecf5b097 100644
--- a/code/datums/station_traits/negative_traits.dm
+++ b/code/datums/station_traits/negative_traits.dm
@@ -17,6 +17,30 @@
/datum/station_trait/distant_supply_lines/on_round_start()
SSeconomy.pack_price_modifier *= 1.2
+///A negative trait that stops mail from arriving (or the inverse if on holiday). It also enables a specific shuttle loan situation.
+/datum/station_trait/mail_blocked
+ name = "Postal workers strike"
+ trait_type = STATION_TRAIT_NEGATIVE
+ weight = 2
+ show_in_report = TRUE
+ report_message = "Due to an ongoing strike announced by the postal workers union, mail won't be delivered this shift."
+
+/datum/station_trait/mail_blocked/on_round_start()
+ //This is either a holiday or sunday... well then, let's flip the situation.
+ if(SSeconomy.mail_blocked)
+ name = "Postal system overtime"
+ report_message = "Despite being a day off, the postal system is working overtime today. Mail will be delivered this shift."
+ else
+ var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
+ our_event.unavailable_situations -= /datum/shuttle_loan_situation/mail_strike
+ SSeconomy.mail_blocked = !SSeconomy.mail_blocked
+
+/datum/station_trait/mail_blocked/hangover/revert()
+ var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
+ our_event.unavailable_situations |= /datum/shuttle_loan_situation/mail_strike
+ SSeconomy.mail_blocked = !SSeconomy.mail_blocked
+ return ..()
+
///A negative trait that reduces the amount of products available from vending machines throughout the station.
/datum/station_trait/vending_shortage
name = "Vending products shortage"
@@ -458,11 +482,11 @@
var/list/shielding = list()
/datum/station_trait/nebula/hostile/process(seconds_per_tick)
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(!storms_enabled)
get_shielding_level() // So shields still produce tritium
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
calculate_nebula_strength()
apply_nebula_effect(nebula_intensity - get_shielding_level())
@@ -528,7 +552,7 @@
threat_reduction = 30
dynamic_threat_id = "Radioactive Nebula"
- intensity_increment_time = 10 MINUTES // SKYRAT EDIT longer shield duration - ORIGINAL: intensity_increment_time = 5 MINUTES /
+ intensity_increment_time = 10 MINUTES // NOVA EDIT longer shield duration - ORIGINAL: intensity_increment_time = 5 MINUTES /
maximum_nebula_intensity = 1 HOURS + 40 MINUTES
nebula_layer = /atom/movable/screen/parallax_layer/random/space_gas/radioactive
@@ -629,7 +653,7 @@
new /obj/effect/pod_landingzone (get_safe_random_station_turf(), new /obj/structure/closet/supplypod/centcompod (), new /obj/machinery/nebula_shielding/emergency/radiation ())
/datum/station_trait/nebula/hostile/radiation/send_instructions()
- /* SKYRAT EDIT REMOVAL START - No more radiation storms on station
+ /* NOVA EDIT REMOVAL START - No more radiation storms on station
var/obj/machinery/nebula_shielding/shielder = /obj/machinery/nebula_shielding/radiation
var/obj/machinery/gravity_generator/main/innate_shielding = /obj/machinery/gravity_generator/main
//How long do we have untill the first shielding unit needs to be up?
@@ -648,12 +672,12 @@
You have [deadline] before the nebula enters the station. \
Every shielding unit will provide an additional [shielder_time] of protection, fully protecting the station with [max_shielders] shielding units.
"}
- SKYRAT EDIT REMOVAL END */
- // SKYRAT EDIT CHANGE START - ORIGINAL: See above
+ NOVA EDIT REMOVAL END */
+ // NOVA EDIT CHANGE START - ORIGINAL: See above
var/announcement = {"Your station has been constructed inside a radioactive nebula. \
Standard spacesuits will not protect against the nebula and using them is strongly discouraged.
"}
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
priority_announce(announcement, sound = 'sound/misc/notice1.ogg')
diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm
index f0b2c625537..d3eba73bdc1 100644
--- a/code/datums/station_traits/neutral_traits.dm
+++ b/code/datums/station_traits/neutral_traits.dm
@@ -411,7 +411,7 @@
name = "AI Triumvirate"
trait_type = STATION_TRAIT_NEUTRAL
show_in_report = TRUE
- weight = 0 // SKYRAT EDIT Original = 1
+ weight = 0 // NOVA EDIT Original = 1
report_message = "Your station has been instated with three Nanotrasen Artificial Intelligence models."
/datum/station_trait/triple_ai/New()
diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm
index b8f349a5e8f..7b3ed0a0b15 100644
--- a/code/datums/station_traits/positive_traits.dm
+++ b/code/datums/station_traits/positive_traits.dm
@@ -242,7 +242,7 @@
/datum/job/station_engineer = /obj/item/organ/internal/cyberimp/arm/toolset,
/datum/job/virologist = /obj/item/organ/internal/lungs/cybernetic/tier2,
/datum/job/warden = /obj/item/organ/internal/cyberimp/eyes/hud/security,
- // SKYRAT EDIT ADDITION START - MODULAR JOBS
+ // NOVA EDIT ADDITION START - MODULAR JOBS
/datum/job/blueshield = /obj/item/organ/internal/cyberimp/brain/anti_stun,
/datum/job/nanotrasen_consultant = /obj/item/organ/internal/heart/cybernetic/tier3,
/datum/job/barber = /obj/item/organ/internal/ears/cybernetic/whisper,
@@ -252,7 +252,7 @@
/datum/job/customs_agent = /obj/item/organ/internal/cyberimp/eyes/hud/security,
/datum/job/bouncer = /obj/item/organ/internal/cyberimp/arm/muscle,
/datum/job/engineering_guard = /obj/item/organ/internal/cyberimp/arm/flash,
- // SKYRAT EDIT END
+ // NOVA EDIT END
)
/datum/station_trait/cybernetic_revolution/New()
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 39d5c3a3754..fe8deeef337 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -380,7 +380,7 @@
/datum/status_effect/regenerative_core/on_apply()
ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT)
owner.adjustBruteLoss(-25)
- owner.adjustStaminaLoss(-40) //Skyrat edit. Removes stamina on usage of regen core.
+ owner.adjustStaminaLoss(-40) //NOVA EDIT. Removes stamina on usage of regen core.
owner.adjustFireLoss(-25)
owner.fully_heal(HEAL_CC_STATUS)
owner.bodytemperature = owner.get_body_temp_normal()
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index 18f99a91f89..a3c52f2e204 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -278,8 +278,8 @@
. = ..()
if(!.)
return
- owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // SKYRAT EDIT CHANGE - ORIGINAL: owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id))
- owner.throw_alert("stasis numbed", /atom/movable/screen/alert/numbed) //SKYRAT EDIT ADDITION - STASIS APPLIES NUMBED
+ owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // NOVA EDIT CHANGE - ORIGINAL: owner.add_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id))
+ owner.throw_alert("stasis numbed", /atom/movable/screen/alert/numbed) //NOVA EDIT ADDITION - STASIS APPLIES NUMBED
owner.add_filter("stasis_status_ripple", 2, list("type" = "ripple", "flags" = WAVE_BOUNDED, "radius" = 0, "size" = 2))
var/filter = owner.get_filter("stasis_status_ripple")
animate(filter, radius = 0, time = 0.2 SECONDS, size = 2, easing = JUMP_EASING, loop = -1, flags = ANIMATION_PARALLEL)
@@ -290,12 +290,12 @@
/datum/status_effect/grouped/stasis/tick(seconds_between_ticks)
update_time_of_death()
- if(owner.stat >= UNCONSCIOUS) //SKYRAT EDIT START - STASIS KEEPS SLEEP GOING
- owner.Sleeping(15 SECONDS) //SKYRAT EDIT END
+ if(owner.stat >= UNCONSCIOUS) //NOVA EDIT START - STASIS KEEPS SLEEP GOING
+ owner.Sleeping(15 SECONDS) //NOVA EDIT END
/datum/status_effect/grouped/stasis/on_remove()
- owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // SKYRAT EDIT CHANGE - ORIGINAL: owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id))
- owner.clear_alert("stasis numbed") //SKYRAT EDIT ADDITION - STASIS APPLIED NUMBED
+ owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS, TRAIT_NUMBED), TRAIT_STATUS_EFFECT(id)) // NOVA EDIT CHANGE - ORIGINAL: owner.remove_traits(list(TRAIT_IMMOBILIZED, TRAIT_HANDS_BLOCKED, TRAIT_STASIS), TRAIT_STATUS_EFFECT(id))
+ owner.clear_alert("stasis numbed") //NOVA EDIT ADDITION - STASIS APPLIED NUMBED
owner.remove_filter("stasis_status_ripple")
update_time_of_death()
if(iscarbon(owner))
diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm
index 061c008def8..40bffc21b80 100644
--- a/code/datums/status_effects/debuffs/drunk.dm
+++ b/code/datums/status_effects/debuffs/drunk.dm
@@ -1,4 +1,4 @@
-// SKYRAT EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS)
+// NOVA EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS)
// Defines for the ballmer peak.
#define BALLMER_PEAK_LOW_END 25.8 // Original 12.9
#define BALLMER_PEAK_HIGH_END 27.6 // Original 13.8
@@ -6,7 +6,7 @@
/// The threshld which determine if someone is tipsy vs drunk
#define TIPSY_THRESHOLD 21 // Original 6
-// SKYRAT EDIT CHANGE END (#21546 DRUNK EFFECTS)
+// NOVA EDIT CHANGE END (#21546 DRUNK EFFECTS)
/**
* The drunk status effect.
@@ -71,7 +71,7 @@
// Every tick, the drunk value decrases by
// 4% the current drunk_value + 0.01
// (until it reaches 0 and terminates)
- set_drunk_value(drunk_value - (0.0075 + drunk_value * 0.0075)) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: set_drunk_value(drunk_value - (0.01 + drunk_value * 0.04)
+ set_drunk_value(drunk_value - (0.0075 + drunk_value * 0.0075)) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: set_drunk_value(drunk_value - (0.01 + drunk_value * 0.04)
if(QDELETED(src))
return
@@ -146,7 +146,7 @@
if(drunk_value > BALLMER_PEAK_WINDOWS_ME) // by this point you're into windows ME territory
owner.say(pick_list_replacements(VISTA_FILE, "ballmer_windows_me_msg"), forced = "ballmer")
- // SKYRAT EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS)
+ // NOVA EDIT CHANGE BEGIN (#21546 DRUNK EFFECTS)
/* ORIGINAL
// Drunk slurring scales in intensity based on how drunk we are -at 16 you will likely not even notice it,
// but when we start to scale up you definitely will
@@ -201,7 +201,7 @@
if(iscarbon(owner))
var/mob/living/carbon/carbon_owner = owner
carbon_owner.vomit() // Vomiting clears toxloss - consider this a blessing
- // SKYRAT EDIT CHANGE END (#21546 DRUNK EFFECTS)
+ // NOVA EDIT CHANGE END (#21546 DRUNK EFFECTS)
// Over 81, we will gain constant toxloss
if(drunk_value >= 81)
@@ -221,7 +221,7 @@
owner.adjustToxLoss(2)
/datum/status_effect/inebriated/drunk/proc/attempt_to_blackout()
- /* SKYRAT EDIT REMOVAL - Blackout drunk begone
+ /* NOVA EDIT REMOVAL - Blackout drunk begone
var/mob/living/carbon/drunkard = owner
if(drunkard.has_trauma_type(/datum/brain_trauma/severe/split_personality/blackout))// prevent ping spamming
if(prob(10))
@@ -231,7 +231,7 @@
if(drunkard.gain_trauma(/datum/brain_trauma/severe/split_personality/blackout, TRAUMA_LIMIT_ABSOLUTE))
drunk_value -= 70 //So that the drunk personality can spice things up without being killed by liver failure
return
- */ // SKYRAT EDIT REMOVAL END
+ */ // NOVA EDIT REMOVAL END
if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(owner.z))// Don't put us in a deep sleep if the shuttle's here. QoL, mainly.
to_chat(owner, span_warning("You're so tired... but you can't miss that shuttle..."))
else
diff --git a/code/datums/votes/map_vote.dm b/code/datums/votes/map_vote.dm
index f65b06a1d8c..e30451c5d5e 100644
--- a/code/datums/votes/map_vote.dm
+++ b/code/datums/votes/map_vote.dm
@@ -13,7 +13,7 @@
var/list/maps = shuffle(global.config.maplist)
for(var/map in maps)
var/datum/map_config/possible_config = config.maplist[map]
- if(!possible_config.votable || (possible_config.map_name in SSpersistence.blocked_maps) || possible_config.map_name == SSmapping.config?.map_name) // SKYRAT EDIT - Can't vote for the current map
+ if(!possible_config.votable || (possible_config.map_name in SSpersistence.blocked_maps) || possible_config.map_name == SSmapping.config?.map_name) // NOVA EDIT - Can't vote for the current map
continue
default_choices += possible_config.map_name
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index 08c88cd65f1..0b300214fdc 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -60,7 +60,7 @@
/datum/weather/rad_storm/end()
if(..())
return
- priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert", ANNOUNCER_RADIATIONPASSED) //SKYRAT EDIT CHANGE
+ priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert", ANNOUNCER_RADIATIONPASSED) //NOVA EDIT CHANGE
status_alarm(FALSE)
/datum/weather/rad_storm/proc/do_mutate(mob/living/carbon/human/mutant)
diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm
index d930c496de6..b3ad0f0decc 100644
--- a/code/datums/world_topic.dm
+++ b/code/datums/world_topic.dm
@@ -163,7 +163,7 @@
/datum/world_topic/news_report/Run(list/input)
- priority_announce(input["message"], "Breaking Update From [input["message_sender"]]") //SKYRAT EDIT CHANGE
+ priority_announce(input["message"], "Breaking Update From [input["message_sender"]]") //NOVA EDIT CHANGE
/datum/world_topic/adminmsg
keyword = "adminmsg"
diff --git a/code/datums/wounds/_wound_static_data.dm b/code/datums/wounds/_wound_static_data.dm
index 7a59ea57413..f996bb258c7 100644
--- a/code/datums/wounds/_wound_static_data.dm
+++ b/code/datums/wounds/_wound_static_data.dm
@@ -185,7 +185,7 @@
return new wound_path_to_generate
-/datum/wound_pregen_data/Destroy(force, ...)
+/datum/wound_pregen_data/Destroy(force)
var/error_message = "[src], a singleton wound pregen data instance, was destroyed! This should not happen!"
if (force)
error_message += " NOTE: This Destroy() was called with force == TRUE. This instance will be deleted and replaced with a new one."
diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm
index 1df5ff689ff..97c511f518e 100644
--- a/code/datums/wounds/bones.dm
+++ b/code/datums/wounds/bones.dm
@@ -13,7 +13,7 @@
/datum/wound/blunt/bone
name = "Blunt (Bone) Wound"
- wound_flags = (ACCEPTS_GAUZE | SPLINT_OVERLAY) // SKYRAT EDIT: MEDICAL -- Makes bone wounds have a splint overlay
+ wound_flags = (ACCEPTS_GAUZE | SPLINT_OVERLAY) // NOVA EDIT: MEDICAL -- Makes bone wounds have a splint overlay
default_scar_file = BONE_SCAR_FILE
@@ -334,7 +334,7 @@
brain_trauma_group = BRAIN_TRAUMA_MILD
trauma_cycle_cooldown = 1.5 MINUTES
internal_bleeding_chance = 40
- wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // SKYRAT EDIT - MEDICAL (SPLINT_OVERLAY)
+ wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // NOVA EDIT - MEDICAL (SPLINT_OVERLAY)
regen_ticks_needed = 120 // ticks every 2 seconds, 240 seconds, so roughly 4 minutes default
simple_desc = "Patient's bone has cracked in the middle, drastically reducing limb functionality."
@@ -370,7 +370,7 @@
brain_trauma_group = BRAIN_TRAUMA_SEVERE
trauma_cycle_cooldown = 2.5 MINUTES
internal_bleeding_chance = 60
- wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // SKYRAT EDIT - MEDICAL (SPLINT_OVERLAY)
+ wound_flags = (ACCEPTS_GAUZE | MANGLES_INTERIOR | SPLINT_OVERLAY) // NOVA EDIT - MEDICAL (SPLINT_OVERLAY)
regen_ticks_needed = 240 // ticks every 2 seconds, 480 seconds, so roughly 8 minutes default
simple_desc = "Patient's bones have effectively shattered completely, causing total immobilization of the limb."
diff --git a/code/datums/wounds/scars/_scars.dm b/code/datums/wounds/scars/_scars.dm
index e650899be29..2fdd92b82d0 100644
--- a/code/datums/wounds/scars/_scars.dm
+++ b/code/datums/wounds/scars/_scars.dm
@@ -30,7 +30,7 @@
/// If false, we will only check to see if a limb has ALL our biostates, instead of just any.
var/check_any_biostates
-/datum/scar/Destroy(force, ...)
+/datum/scar/Destroy(force)
if(limb)
LAZYREMOVE(limb.scars, src)
if(victim)
diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm
index e7f56393a66..b5f63c41398 100644
--- a/code/game/area/areas/away_content.dm
+++ b/code/game/area/areas/away_content.dm
@@ -11,7 +11,7 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30"
has_gravity = STANDARD_GRAVITY
ambience_index = AMBIENCE_AWAY
sound_environment = SOUND_ENVIRONMENT_ROOM
- area_flags = NOTELEPORT|UNIQUE_AREA //SKYRAT EDIT CHANGE
+ area_flags = NOTELEPORT|UNIQUE_AREA //NOVA EDIT CHANGE
/area/awaymission/beach
name = "Beach"
diff --git a/code/game/area/areas/centcom.dm b/code/game/area/areas/centcom.dm
index f5ac4fac78e..ee79b5b8cc7 100644
--- a/code/game/area/areas/centcom.dm
+++ b/code/game/area/areas/centcom.dm
@@ -87,11 +87,11 @@
name = "Supplypod Loading Facility"
icon_state = "supplypod_loading"
var/loading_id = ""
- // SKYRAT EDIT START - Dynamic lights on CentCom
+ // NOVA EDIT START - Dynamic lights on CentCom
static_lighting = FALSE
base_lighting_color = COLOR_WHITE
base_lighting_alpha = 255
- // SKYRAT EDIT END
+ // NOVA EDIT END
/area/centcom/central_command_areas/supplypod/loading/Initialize(mapload)
. = ..()
diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm
index c16d65059ff..574ab51689b 100644
--- a/code/game/area/areas/ruins/lavaland.dm
+++ b/code/game/area/areas/ruins/lavaland.dm
@@ -92,10 +92,10 @@
//ash walker nest
/area/ruin/unpowered/ash_walkers
- //SKYRAT EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX
+ //NOVA EDIT ADDITION BEGIN - ASH WALKER MACHINES FIX
always_unpowered = FALSE
power_equip = TRUE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
ambient_buzz = 'sound/ambience/magma.ogg'
/area/ruin/unpowered/ratvar
diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm
index 990c4d803d9..90a0d8313b7 100644
--- a/code/game/area/areas/shuttles.dm
+++ b/code/game/area/areas/shuttles.dm
@@ -149,7 +149,7 @@
name = "Labor Camp Shuttle"
/area/shuttle/supply
- name = "NLV Consign" //SKYRAT EDIT CHANGE
+ name = "NLV Consign" //NOVA EDIT CHANGE
area_flags = NOTELEPORT
/area/shuttle/escape
diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm
index 92c2a6b8657..66ed2048665 100644
--- a/code/game/atom/_atom.dm
+++ b/code/game/atom/_atom.dm
@@ -133,6 +133,8 @@
/// How this atom should react to having its astar blocking checked
var/can_astar_pass = CANASTARPASS_DENSITY
+ ///whether ghosts can see screentips on it
+ var/ghost_screentips = FALSE
/**
* Top level of the destroy chain for most atoms
@@ -842,11 +844,11 @@
var/mob/user = client?.mob
if (isnull(user))
return
- ///SKYRAT EDIT ADDITION BEGIN
+ ///NOVA EDIT ADDITION BEGIN
// Face directions on combat mode. No procs, no typechecks, just a var for speed
if(user.face_mouse)
user.face_atom(src)
- ///SKYRAT EDIT ADDITION END
+ ///NOVA EDIT ADDITION END
// Screentips
var/datum/hud/active_hud = user.hud_used
@@ -866,7 +868,7 @@
var/extra_lines = 0
var/extra_context = ""
- if (isliving(user) || isovermind(user) || isaicamera(user))
+ if(isliving(user) || isovermind(user) || isaicamera(user) || (ghost_screentips && isobserver(user)))
var/obj/item/held_item = user.get_active_held_item()
if (flags_1 & HAS_CONTEXTUAL_SCREENTIPS_1 || held_item?.item_flags & ITEM_HAS_CONTEXTUAL_SCREENTIPS)
diff --git a/code/game/atom/atom_defense.dm b/code/game/atom/atom_defense.dm
index 409b5a9e40b..8b398313616 100644
--- a/code/game/atom/atom_defense.dm
+++ b/code/game/atom/atom_defense.dm
@@ -111,12 +111,12 @@
switch(damage_type)
if(BRUTE)
if(damage_amount)
- //SKYRAT EDIT ADDITION - CREDITS TO WHITEDREAM(valtos)
- playsound(src, pick('modular_skyrat/master_files/sound/effects/metalblock1.wav', 'modular_skyrat/master_files/sound/effects/metalblock2.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock3.wav', 'modular_skyrat/master_files/sound/effects/metalblock4.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock5.wav', 'modular_skyrat/master_files/sound/effects/metalblock6.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE)
- //SKYRAT EDIT END
+ //NOVA EDIT ADDITION - CREDITS TO WHITEDREAM(valtos)
+ playsound(src, pick('modular_nova/master_files/sound/effects/metalblock1.wav', 'modular_nova/master_files/sound/effects/metalblock2.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock3.wav', 'modular_nova/master_files/sound/effects/metalblock4.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock5.wav', 'modular_nova/master_files/sound/effects/metalblock6.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock7.wav', 'modular_nova/master_files/sound/effects/metalblock8.wav'), 50, TRUE)
+ //NOVA EDIT END
else
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
@@ -126,7 +126,7 @@
/atom/proc/hulk_damage()
return 150 //the damage hulks do on punches to this atom, is affected by melee armor
-/atom/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime
+/atom/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal
if(!uses_integrity)
CRASH("unimplemented /atom/proc/attack_generic()!")
user.do_attack_animation(src)
diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm
index a00f485391d..ada7074d773 100644
--- a/code/game/atom/atom_examine.dm
+++ b/code/game/atom/atom_examine.dm
@@ -13,7 +13,7 @@
/atom/proc/examine(mob/user)
var/examine_string = get_examine_string(user, thats = TRUE)
if(examine_string)
- . = list("[examine_string].", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE
+ . = list("[examine_string].", EXAMINE_SECTION_BREAK) // NOVA EDIT CHANGE
else
. = list()
@@ -22,19 +22,19 @@
. += desc
if(custom_materials)
- // SKYRAT EDIT ADDITION BEGIN - HR sections
+ // NOVA EDIT ADDITION BEGIN - HR sections
if(length(custom_materials) > 1)
- . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION
- //SKYRAT EDIT ADDITION END
+ . += EXAMINE_SECTION_BREAK //NOVA EDIT ADDITION
+ //NOVA EDIT ADDITION END
var/list/materials_list = list()
for(var/custom_material in custom_materials)
var/datum/material/current_material = GET_MATERIAL_REF(custom_material)
materials_list += "[current_material.name]"
. += "It is made out of [english_list(materials_list)] ."
- // SKYRAT EDIT ADDITION BEGIN - HR sections
+ // NOVA EDIT ADDITION BEGIN - HR sections
if(length(custom_materials) > 1)
- . += EXAMINE_SECTION_BREAK //SKYRAT EDIT ADDITION
- //SKYRAT EDIT ADDITION END
+ . += EXAMINE_SECTION_BREAK //NOVA EDIT ADDITION
+ //NOVA EDIT ADDITION END
if(reagents)
var/user_sees_reagents = user.can_see_reagents()
diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm
index ae9a5b3a18e..803a79110a1 100644
--- a/code/game/atom/atom_materials.dm
+++ b/code/game/atom/atom_materials.dm
@@ -36,15 +36,13 @@
* Arguments:
* - flags: A set of flags determining how exactly the materials are broken down.
*/
-/atom/proc/get_material_composition(breakdown_flags=NONE)
+/atom/proc/get_material_composition()
. = list()
- if(!(breakdown_flags & BREAKDOWN_INCLUDE_ALCHEMY) && HAS_TRAIT(src, TRAIT_MAT_TRANSMUTED))
- return
var/list/cached_materials = custom_materials
for(var/mat in cached_materials)
var/datum/material/material = GET_MATERIAL_REF(mat)
- var/list/material_comp = material.return_composition(cached_materials[mat], breakdown_flags)
+ var/list/material_comp = material.return_composition(cached_materials[mat])
for(var/comp_mat in material_comp)
.[comp_mat] += material_comp[comp_mat]
diff --git a/code/game/atom/atom_tool_acts.dm b/code/game/atom/atom_tool_acts.dm
index 078615dba75..fb02d674cde 100644
--- a/code/game/atom/atom_tool_acts.dm
+++ b/code/game/atom/atom_tool_acts.dm
@@ -62,7 +62,7 @@
act_result = is_left_clicking ? welder_act(user, tool) : welder_act_secondary(user, tool)
if(TOOL_ANALYZER)
act_result = is_left_clicking ? analyzer_act(user, tool) : analyzer_act_secondary(user, tool)
- // SKYRAT EDIT ADDITION START - SKYRAT TOOLS
+ // NOVA EDIT ADDITION START - SKYRAT TOOLS
if(TOOL_BILLOW)
act_result = is_left_clicking ? billow_act(user, tool) : billow_act_secondary(user, tool)
if(TOOL_TONG)
@@ -71,7 +71,7 @@
act_result = is_left_clicking ? hammer_act(user, tool) : hammer_act_secondary(user, tool)
if(TOOL_BLOWROD)
act_result = is_left_clicking ? blowrod_act(user, tool) : blowrod_act_secondary(user, tool)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
if(!act_result)
return NONE
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index eda26605859..7966417a9ee 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -98,8 +98,8 @@
/// The degree of pressure protection that mobs in list/contents have from the external environment, between 0 and 1
var/contents_pressure_protection = 0
- /// Whether a user will face atoms on entering them with a mouse. Despite being a mob variable, it is here for performances //SKYRAT EDIT ADDITION
- var/face_mouse = FALSE //SKYRAT EDIT ADDITION
+ /// Whether a user will face atoms on entering them with a mouse. Despite being a mob variable, it is here for performances //NOVA EDIT ADDITION
+ var/face_mouse = FALSE //NOVA EDIT ADDITION
/// The voice that this movable makes when speaking
var/voice
@@ -621,7 +621,7 @@
if(!direction)
direction = get_dir(src, newloc)
- if(set_dir_on_move && dir != direction && update_dir && !face_mouse) // SKYRAT EDIT - && !face_mouse
+ if(set_dir_on_move && dir != direction && update_dir && !face_mouse) // NOVA EDIT - && !face_mouse
setDir(direction)
var/is_multi_tile_object = is_multi_tile_object(src)
@@ -747,7 +747,7 @@
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
if(moving_diagonally == SECOND_DIAG_STEP)
- if(!. && set_dir_on_move && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse
+ if(!. && set_dir_on_move && update_dir && !face_mouse) // NOVA EDIT CHANGE - && !face_mouse
setDir(first_step_dir)
else if(!inertia_moving)
newtonian_move(direct)
@@ -787,7 +787,7 @@
last_move = direct
- if(set_dir_on_move && dir != direct && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse)
+ if(set_dir_on_move && dir != direct && update_dir && !face_mouse) // NOVA EDIT CHANGE - && !face_mouse)
setDir(direct)
if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc, direct, glide_size_override)) //movement failed due to buckled mob(s)
. = FALSE
@@ -1225,7 +1225,7 @@
if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return TRUE
- if(locate(/obj/structure/spacevine) in range(1, get_turf(src))) //SKYRAT EDIT: allow walking when vines are around
+ if(locate(/obj/structure/spacevine) in range(1, get_turf(src))) //NOVA EDIT: allow walking when vines are around
return TRUE
return FALSE
diff --git a/code/game/communications.dm b/code/game/communications.dm
index 41867376684..b2802899ec3 100644
--- a/code/game/communications.dm
+++ b/code/game/communications.dm
@@ -99,12 +99,12 @@ GLOBAL_LIST_INIT(radiochannels, list(
RADIO_CHANNEL_ENGINEERING = FREQ_ENGINEERING,
RADIO_CHANNEL_SECURITY = FREQ_SECURITY,
RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM,
- RADIO_CHANNEL_FACTION = FREQ_FACTION, //SKYRAT EDIT ADDITION - FACTION
- RADIO_CHANNEL_CYBERSUN = FREQ_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_CHANNEL_INTERDYNE = FREQ_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_CHANNEL_GUILD = FREQ_GUILD, //SKYRAT EDIT ADDITION - ASSAULT OPS
- RADIO_CHANNEL_TARKON = FREQ_TARKON, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_CHANNEL_SOLFED = FREQ_SOLFED, //SKYRAT EDIT ADDITION - SOLFED
+ RADIO_CHANNEL_FACTION = FREQ_FACTION, //NOVA EDIT ADDITION - FACTION
+ RADIO_CHANNEL_CYBERSUN = FREQ_CYBERSUN, //NOVA EDIT ADDITION - MAPPING
+ RADIO_CHANNEL_INTERDYNE = FREQ_INTERDYNE, //NOVA EDIT ADDITION - MAPPING
+ RADIO_CHANNEL_GUILD = FREQ_GUILD, //NOVA EDIT ADDITION - ASSAULT OPS
+ RADIO_CHANNEL_TARKON = FREQ_TARKON, //NOVA EDIT ADDITION - MAPPING
+ RADIO_CHANNEL_SOLFED = FREQ_SOLFED, //NOVA EDIT ADDITION - SOLFED
RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE,
RADIO_CHANNEL_UPLINK = FREQ_UPLINK,
RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY,
@@ -124,11 +124,11 @@ GLOBAL_LIST_INIT(reverseradiochannels, list(
"[FREQ_ENGINEERING]" = RADIO_CHANNEL_ENGINEERING,
"[FREQ_SECURITY]" = RADIO_CHANNEL_SECURITY,
"[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM,
- "[FREQ_FACTION]" = RADIO_CHANNEL_FACTION, //SKYRAT EDIT ADDITION - FACTION
- "[FREQ_CYBERSUN]" = RADIO_CHANNEL_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_INTERDYNE]" = RADIO_CHANNEL_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_TARKON]" = RADIO_CHANNEL_TARKON, //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_SOLFED]" = RADIO_CHANNEL_SOLFED, //SKYRAT EDIT ADDITION - SOLFED
+ "[FREQ_FACTION]" = RADIO_CHANNEL_FACTION, //NOVA EDIT ADDITION - FACTION
+ "[FREQ_CYBERSUN]" = RADIO_CHANNEL_CYBERSUN, //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_INTERDYNE]" = RADIO_CHANNEL_INTERDYNE, //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_TARKON]" = RADIO_CHANNEL_TARKON, //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_SOLFED]" = RADIO_CHANNEL_SOLFED, //NOVA EDIT ADDITION - SOLFED
"[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE,
"[FREQ_UPLINK]" = RADIO_CHANNEL_UPLINK,
"[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY,
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 0412aab33e9..a7d7a86a78c 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -18,7 +18,7 @@
/datum/atom_hud/data
/datum/atom_hud/data/human/medical
- hud_icons = list(STATUS_HUD, HEALTH_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR_HUD
+ hud_icons = list(STATUS_HUD, HEALTH_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR_HUD
/datum/atom_hud/data/human/medical/basic
@@ -47,7 +47,7 @@
hud_icons = list(ID_HUD)
/datum/atom_hud/data/human/security/advanced
- hud_icons = list(ID_HUD, IMPSEC_FIRST_HUD, IMPLOYAL_HUD, IMPSEC_SECOND_HUD, WANTED_HUD, PERMIT_HUD, DNR_HUD) //SKYRAT EDIT ADDITION - PERMIT_HUD, DNR_HUD
+ hud_icons = list(ID_HUD, IMPSEC_FIRST_HUD, IMPLOYAL_HUD, IMPSEC_SECOND_HUD, WANTED_HUD, PERMIT_HUD, DNR_HUD) //NOVA EDIT ADDITION - PERMIT_HUD, DNR_HUD
/datum/atom_hud/data/human/fan_hud
hud_icons = list(FAN_HUD)
@@ -279,14 +279,14 @@ Security HUDs! Basic mode shows only the job.
sechud_icon_state = "hudno_id"
holder.icon_state = sechud_icon_state
sec_hud_set_security_status()
- //SKYRAT EDIT START
+ //NOVA EDIT START
var/image/permit_holder = hud_list[PERMIT_HUD]
permit_holder.pixel_y = I.Height() - world.icon_size
var/permit_icon_state = wear_id?.get_gun_permit_iconstate()
if(!permit_icon_state)
permit_icon_state = "hudfan_no"
permit_holder.icon_state = permit_icon_state
- //SKYRAT EDIT END
+ //NOVA EDIT END
/mob/living/proc/sec_hud_set_implants()
var/image/holder
diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm
deleted file mode 100644
index 71d1ff1287e..00000000000
--- a/code/game/gamemodes/dynamic/dynamic.dm
+++ /dev/null
@@ -1,914 +0,0 @@
-#define FAKE_GREENSHIFT_FORM_CHANCE 15
-#define FAKE_REPORT_CHANCE 8
-#define PULSAR_REPORT_CHANCE 8
-#define REPORT_NEG_DIVERGENCE -15
-#define REPORT_POS_DIVERGENCE 15
-
-// Are HIGH_IMPACT_RULESETs allowed to stack?
-GLOBAL_VAR_INIT(dynamic_no_stacking, TRUE)
-// If enabled does not accept or execute any rulesets.
-GLOBAL_VAR_INIT(dynamic_forced_extended, FALSE)
-// How high threat is required for HIGH_IMPACT_RULESETs stacking.
-// This is independent of dynamic_no_stacking.
-GLOBAL_VAR_INIT(dynamic_stacking_limit, 90)
-// List of forced roundstart rulesets.
-GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset)
-// Forced threat level, setting this to zero or higher forces the roundstart threat to the value.
-GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1)
-/// Modify the threat level for station traits before dynamic can be Initialized. List(instance = threat_reduction)
-GLOBAL_LIST_EMPTY(dynamic_station_traits)
-/// Rulesets which have been forcibly enabled or disabled
-GLOBAL_LIST_EMPTY(dynamic_forced_rulesets)
-
-/datum/game_mode/dynamic
- // Threat logging vars
- /// The "threat cap", threat shouldn't normally go above this and is used in ruleset calculations
- var/threat_level = 0
-
- /// Set at the beginning of the round. Spent by the mode to "purchase" rules. Everything else goes in the postround budget.
- var/round_start_budget = 0
-
- /// Set at the beginning of the round. Spent by midrounds and latejoins.
- var/mid_round_budget = 0
-
- /// The initial round start budget for logging purposes, set once at the beginning of the round.
- var/initial_round_start_budget = 0
-
- /// Running information about the threat. Can store text or datum entries.
- var/list/threat_log = list()
- /// Threat log shown on the roundend report. Should only list player-made edits.
- var/list/roundend_threat_log = list()
- /// List of latejoin rules used for selecting the rules.
- var/list/latejoin_rules
- /// List of midround rules used for selecting the rules.
- var/list/midround_rules
- /** # Pop range per requirement.
- * If the value is five the range is:
- * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+
- * If it is six the range is:
- * 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+
- * If it is seven the range is:
- * 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+
- */
- var/pop_per_requirement = 6
- /// Number of players who were ready on roundstart.
- var/roundstart_pop_ready = 0
- /// List of candidates used on roundstart rulesets.
- var/list/candidates = list()
- /// Rules that are processed, rule_process is called on the rules in this list.
- var/list/current_rules = list()
- /// List of executed rulesets.
- var/list/executed_rules = list()
- /// If TRUE, the next player to latejoin will guarantee roll for a random latejoin antag
- /// (this does not guarantee they get said antag roll, depending on preferences and circumstances)
- var/forced_injection = FALSE
- /// Forced ruleset to be executed for the next latejoin.
- var/datum/dynamic_ruleset/latejoin/forced_latejoin_rule = null
- /// How many percent of the rounds are more peaceful.
- var/peaceful_percentage = 50
- /// If a high impact ruleset was executed. Only one will run at a time in most circumstances.
- var/high_impact_ruleset_executed = FALSE
- /// If a only ruleset has been executed.
- var/only_ruleset_executed = FALSE
- /// Dynamic configuration, loaded on pre_setup
- var/list/configuration = null
-
- /// When world.time is over this number the mode tries to inject a latejoin ruleset.
- var/latejoin_injection_cooldown = 0
-
- /// The minimum time the recurring latejoin ruleset timer is allowed to be.
- var/latejoin_delay_min = (5 MINUTES)
-
- /// The maximum time the recurring latejoin ruleset timer is allowed to be.
- var/latejoin_delay_max = (25 MINUTES)
-
- /// The low bound for the midround roll time splits.
- /// This number influences where to place midround rolls, making this smaller
- /// will make midround rolls more frequent, and vice versa.
- /// A midround will never be able to roll before this.
- var/midround_lower_bound = 10 MINUTES
-
- /// The upper bound for the midround roll time splits.
- /// This number influences where to place midround rolls, making this larger
- /// will make midround rolls less frequent, and vice versa.
- /// A midround will never be able to roll farther than this.
- var/midround_upper_bound = 100 MINUTES
-
- /// The distance between the chosen midround roll point (which is deterministic),
- /// and when it can actually roll.
- /// Basically, if this is set to 5 minutes, and a midround roll point is decided to be at 20 minutes,
- /// then it can roll anywhere between 15 and 25 minutes.
- var/midround_roll_distance = 3 MINUTES
-
- /// The amount of threat per midround roll.
- /// Basically, if this is set to 5, then for every 5 threat, one midround roll will be added.
- /// The equation this is used in rounds up, meaning that if this is set to 5, and you have 6
- /// threat, then you will get 2 midround rolls.
- var/threat_per_midround_roll = 7
-
- /// A number between -5 and +5.
- /// A negative value will give a more peaceful round and
- /// a positive value will give a round with higher threat.
- var/threat_curve_centre = 0
-
- /// A number between 0.5 and 4.
- /// Higher value will favour extreme rounds and
- /// lower value rounds closer to the average.
- var/threat_curve_width = 1.8
-
- /// A number between -5 and +5.
- /// Equivalent to threat_curve_centre, but for the budget split.
- /// A negative value will weigh towards midround rulesets, and a positive
- /// value will weight towards roundstart ones.
- var/roundstart_split_curve_centre = 1
-
- /// A number between 0.5 and 4.
- /// Equivalent to threat_curve_width, but for the budget split.
- /// Higher value will favour more variance in splits and
- /// lower value rounds closer to the average.
- var/roundstart_split_curve_width = 1.8
-
- /// The minimum amount of time for antag random events to be hijacked.
- var/random_event_hijack_minimum = 10 MINUTES
-
- /// The maximum amount of time for antag random events to be hijacked.
- var/random_event_hijack_maximum = 18 MINUTES
-
- /// What is the lower bound of when the roundstart annoucement is sent out?
- var/waittime_l = 600
-
- /// What is the higher bound of when the roundstart annoucement is sent out?
- var/waittime_h = 1800
-
- /// A number between 0 and 100. The maximum amount of threat allowed to generate.
- var/max_threat_level = 100
-
- /// The extra chance multiplier that a heavy impact midround ruleset will run next time.
- /// For example, if this is set to 50, then the next heavy roll will be about 50% more likely to happen.
- var/hijacked_random_event_injection_chance_modifier = 50
-
- /// Any midround before this point is guaranteed to be light
- var/midround_light_upper_bound = 25 MINUTES
-
- /// Any midround after this point is guaranteed to be heavy
- var/midround_heavy_lower_bound = 55 MINUTES
-
- /// If there are less than this many players readied, threat level will be lowered.
- /// This number should be kept fairly low, as there are other measures that population
- /// impacts Dynamic, such as the requirements variable on rulesets.
- var/low_pop_player_threshold = 20
-
- /// The maximum threat that can roll with *zero* players.
- /// As the number of players approaches `low_pop_player_threshold`, the maximum
- /// threat level will increase.
- /// For example, if `low_pop_maximum_threat` is 50, `low_pop_player_threshold` is 20,
- /// and the number of readied players is 10, then the highest threat that can roll is
- /// lerp(50, 100, 10 / 20), AKA 75.
- var/low_pop_maximum_threat = 40
-
- /// The chance for latejoins to roll when ready
- var/latejoin_roll_chance = 50
-
- // == EVERYTHING BELOW THIS POINT SHOULD NOT BE CONFIGURED ==
-
- /// A list of recorded "snapshots" of the round, stored in the dynamic.json log
- var/list/datum/dynamic_snapshot/snapshots
-
- /// The time when the last midround injection was attempted, whether or not it was successful
- var/last_midround_injection_attempt = 0
-
- /// Whether or not a random event has been hijacked this midround cycle
- var/random_event_hijacked = HIJACKED_NOTHING
-
- /// The timer ID for the cancellable midround rule injection
- var/midround_injection_timer_id
-
- /// The last drafted midround rulesets (without the current one included).
- /// Used for choosing different midround injections.
- var/list/current_midround_rulesets
-
- /// The amount of threat shown on the piece of paper.
- /// Can differ from the actual threat amount.
- var/shown_threat
-
- VAR_PRIVATE/next_midround_injection
-
-/datum/game_mode/dynamic/admin_panel()
- var/list/dat = list("Game Mode Panel Game Mode Panel ")
- dat += "Dynamic Mode \[VV\] \[Refresh\] "
- dat += "Threat Level: [threat_level] "
- dat += "Budgets (Roundstart/Midrounds): [initial_round_start_budget]/[threat_level - initial_round_start_budget] "
-
- dat += "Midround budget to spend: [mid_round_budget] \[Adjust\] \[View Log\] "
- dat += " "
- dat += "Parameters: centre = [threat_curve_centre] ; width = [threat_curve_width]. "
- dat += "Split parameters: centre = [roundstart_split_curve_centre] ; width = [roundstart_split_curve_width]. "
- dat += "On average, [clamp(peaceful_percentage, 1, 99)] % of the rounds are more peaceful. "
- dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"] "
- dat += "No stacking (only one round-ender): [GLOB.dynamic_no_stacking ? "On" : "Off"] "
- dat += "Stacking limit: [GLOB.dynamic_stacking_limit] \[Adjust\] "
- dat += " "
- dat += "\[Force Next Latejoin Ruleset\] "
- if (forced_latejoin_rule)
- dat += {"-> [forced_latejoin_rule.name] <- "}
- dat += "\[Execute Midround Ruleset\] "
- dat += " "
- dat += "Executed rulesets: "
- if (executed_rules.len > 0)
- dat += " "
- for (var/datum/dynamic_ruleset/DR in executed_rules)
- dat += "[DR.ruletype] - [DR.name] "
- else
- dat += "none. "
- dat += " Injection Timers: ([get_heavy_midround_injection_chance(dry_run = TRUE)]% heavy midround chance) "
- dat += "Latejoin: [DisplayTimeText(latejoin_injection_cooldown-world.time)] \[Now!\] "
-
- var/next_injection = next_midround_injection()
- if (next_injection == INFINITY)
- dat += "All midrounds have been exhausted."
- else
- dat += "Midround: [DisplayTimeText(next_injection - world.time)] \[Now!\] "
-
- usr << browse(dat.Join(), "window=gamemode_panel;size=500x500")
-
-/datum/game_mode/dynamic/Topic(href, href_list)
- if (..()) // Sanity, maybe ?
- return
- if(!check_rights(R_ADMIN))
- message_admins("[usr.key] has attempted to override the game mode panel!")
- log_admin("[key_name(usr)] tried to use the game mode panel without authorization.")
- return
- if (href_list["forced_extended"])
- GLOB.dynamic_forced_extended = !GLOB.dynamic_forced_extended
- else if (href_list["no_stacking"])
- GLOB.dynamic_no_stacking = !GLOB.dynamic_no_stacking
- else if (href_list["adjustthreat"])
- var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num
- if(!threatadd)
- return
- if(threatadd > 0)
- create_threat(threatadd, threat_log, "[worldtime2text()]: increased by [key_name(usr)]")
- else
- spend_midround_budget(-threatadd, threat_log, "[worldtime2text()]: decreased by [key_name(usr)]")
- else if (href_list["injectlate"])
- latejoin_injection_cooldown = 0
- forced_injection = TRUE
- message_admins("[key_name(usr)] forced a latejoin injection.")
- else if (href_list["injectmid"])
- forced_injection = TRUE
- message_admins("[key_name(usr)] forced a midround injection.")
- try_midround_roll()
- else if (href_list["threatlog"])
- show_threatlog(usr)
- else if (href_list["stacking_limit"])
- GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num
- else if(href_list["force_latejoin_rule"])
- var/added_rule = input(usr,"What ruleset do you want to force upon the next latejoiner? This will bypass threat level and population restrictions.", "Rigging Latejoin", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/latejoin))
- if (!added_rule)
- return
- forced_latejoin_rule = added_rule
- log_admin("[key_name(usr)] set [added_rule] to proc on the next latejoin.")
- message_admins("[key_name(usr)] set [added_rule] to proc on the next valid latejoin.")
- else if(href_list["clear_forced_latejoin"])
- forced_latejoin_rule = null
- log_admin("[key_name(usr)] cleared the forced latejoin ruleset.")
- message_admins("[key_name(usr)] cleared the forced latejoin ruleset.")
- else if(href_list["force_midround_rule"])
- var/added_rule = input(usr,"What ruleset do you want to force right now? This will bypass threat level and population restrictions.", "Execute Ruleset", null) as null|anything in sort_names(init_rulesets(/datum/dynamic_ruleset/midround))
- if (!added_rule)
- return
- log_admin("[key_name(usr)] executed the [added_rule] ruleset.")
- message_admins("[key_name(usr)] executed the [added_rule] ruleset.")
- picking_specific_rule(added_rule, TRUE)
- else if(href_list["cancelmidround"])
- admin_cancel_midround(usr, href_list["cancelmidround"])
- return
- else if (href_list["differentmidround"])
- admin_different_midround(usr, href_list["differentmidround"])
- return
-
- admin_panel() // Refreshes the window
-
-// Checks if there are HIGH_IMPACT_RULESETs and calls the rule's round_result() proc
-/datum/game_mode/dynamic/set_round_result()
- // If it got to this part, just pick one high impact ruleset if it exists
- for(var/datum/dynamic_ruleset/rule in executed_rules)
- if(rule.flags & HIGH_IMPACT_RULESET)
- rule.round_result()
- // One was set, so we're done here
- if(SSticker.news_report)
- return
-
- return ..()
-
-/datum/game_mode/dynamic/proc/send_intercept()
- if(SScommunications.block_command_report) //If we don't want the report to be printed just yet, we put it off until it's ready
- addtimer(CALLBACK(src, PROC_REF(send_intercept)), 10 SECONDS)
- return
-
- . = "Nanotrasen Department of Intelligence Threat Advisory, Spinward Sector, TCD [time2text(world.realtime, "DDD, MMM DD")], [CURRENT_STATION_YEAR]: "
- . += generate_advisory_level()
-
- var/min_threat = 100
- for(var/datum/dynamic_ruleset/ruleset as anything in init_rulesets(/datum/dynamic_ruleset))
- if(ruleset.weight <= 0 || ruleset.cost <= 0)
- continue
- min_threat = min(ruleset.cost, min_threat)
- var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time
-
- generate_station_goals(greenshift)
- . += generate_station_goal_report()
- . += generate_station_trait_report()
- if(length(SScommunications.command_report_footnotes))
- . += generate_report_footnote()
-
- print_command_report(., "[command_name()] Status Summary", announce=FALSE)
- if(greenshift)
- priority_announce("Thanks to the tireless efforts of our security and intelligence divisions, there are currently no credible threats to [station_name()]. All station construction projects have been authorized. Have a secure shift!", "Security Report", SSstation.announcer.get_rand_report_sound(), color_override = "green")
- else
- if(SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_BLUE)
- SSsecurity_level.set_level(SEC_LEVEL_BLUE, announce = FALSE)
- priority_announce("[SSsecurity_level.current_security_level.elevating_to_announcement]\n\nA summary has been copied and printed to all communications consoles.", "Security level elevated.", ANNOUNCER_INTERCEPT, color_override = SSsecurity_level.current_security_level.announcement_color)
-
-/// Generate the advisory level depending on the shown threat level.
-/datum/game_mode/dynamic/proc/generate_advisory_level()
- var/advisory_string = ""
- if (prob(PULSAR_REPORT_CHANCE))
- if(HAS_TRAIT(SSstation, STATION_TRAIT_BANANIUM_SHIPMENTS))
- advisory_string += "Advisory Level: Clown Planet "
- advisory_string += "Your sector's advisory level is Clown Planet! Our bike horns have picked up on a large bananium stash. Clowns show a large influx of clowns on your station. We highly advice you to slip any threats to keep Honkotrasen assets within the Banana Sector. The Department advises defending chemistry from any clowns that are trying to make baldium or space lube."
- return advisory_string
-
- advisory_string += "Advisory Level: Pulsar Star "
- advisory_string += "Your sector's advisory level is Pulsar Star. A large unknown electromagnetic field has stormed through nearby surveillance equipment. No surveillance data has been able to be obtained showing no credible threats to Nanotrasen assets within the Spinward Sector. The Department advises maintaining high alert against potential threats, regardless of a lack of information."
- return advisory_string
-
- switch(round(shown_threat))
- if(0)
- advisory_string += "Advisory Level: White Dwarf "
- advisory_string += "Your sector's advisory level is White Dwarf. Our surveillors have ruled out any and all potential risks known in our database, ruling out the loss of our assets in the Spinward Sector. We advise a lower level of security, alongside distributing ressources on potential profit."
- if(1 to 19)
- var/show_core_territory = (GLOB.current_living_antags.len > 0)
- if (prob(FAKE_GREENSHIFT_FORM_CHANCE))
- show_core_territory = !show_core_territory
-
- if (show_core_territory)
- advisory_string += "Advisory Level: Blue Star "
- advisory_string += "Your sector's advisory level is Blue Star. At this threat advisory, the risk of attacks on Nanotrasen assets within the sector is minor, but cannot be ruled out entirely. Remain vigilant."
- else
- advisory_string += "Advisory Level: Green Star "
- advisory_string += "Your sector's advisory level is Green Star. Surveillance information shows no credible threats to Nanotrasen assets within the Spinward Sector at this time. As always, the Department advises maintaining vigilance against potential threats, regardless of a lack of known threats."
- if(20 to 39)
- advisory_string += "Advisory Level: Yellow Star "
- advisory_string += "Your sector's advisory level is Yellow Star. Surveillance shows a credible risk of enemy attack against our assets in the Spinward Sector. We advise a heightened level of security, alongside maintaining vigilance against potential threats."
- if(40 to 65)
- advisory_string += "Advisory Level: Orange Star "
- advisory_string += "Your sector's advisory level is Orange Star. Upon reviewing your sector's intelligence, the Department has determined that the risk of enemy activity is moderate to severe. At this advisory, we recommend maintaining a higher degree of security and alertness, and vigilance against threats that may (or will) arise."
- if(66 to 79)
- advisory_string += "Advisory Level: Red Star "
- advisory_string += "Your sector's advisory level is Red Star. The Department of Intelligence has decrypted Cybersun communications suggesting a high likelihood of attacks on Nanotrasen assets within the Spinward Sector. Stations in the region are advised to remain highly vigilant for signs of enemy activity and to be on high alert."
- if(80 to 99)
- advisory_string += "Advisory Level: Black Orbit "
- advisory_string += "Your sector's advisory level is Black Orbit. Your sector's local comms network is currently undergoing a blackout, and we are therefore unable to accurately judge enemy movements within the region. However, information passed to us by GDI suggests a high amount of enemy activity in the sector, indicative of an impending attack. Remain on high alert, and as always, we advise remaining vigilant against any other potential threats."
- if(100)
- advisory_string += "Advisory Level: Midnight Sun "
- advisory_string += "Your sector's advisory level is Midnight Sun. Credible information passed to us by GDI suggests that the Syndicate is preparing to mount a major concerted offensive on Nanotrasen assets in the Spinward Sector to cripple our foothold there. All stations should remain on high alert and prepared to defend themselves."
-
- return advisory_string
-
-/datum/game_mode/dynamic/proc/show_threatlog(mob/admin)
- if(!SSticker.HasRoundStarted())
- tgui_alert(usr, "The round hasn't started yet!")
- return
-
- if(!check_rights(R_ADMIN))
- return
-
- var/list/out = list("Threat Log Threat Log Starting Threat: [threat_level] ")
-
- for(var/entry in threat_log)
- if(istext(entry))
- out += "[entry] "
-
- out += "Remaining threat/threat_level: [mid_round_budget]/[threat_level]"
-
- usr << browse(out.Join(), "window=threatlog;size=700x500")
-
-/// Generates the threat level using lorentz distribution and assigns peaceful_percentage.
-/datum/game_mode/dynamic/proc/generate_threat()
- // At lower pop levels we run a Liner Interpolation against the max threat based proportionally on the number
- // of players ready. This creates a balanced lorentz curve within a smaller range than 0 to max_threat_level.
- var/calculated_max_threat = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level
- log_dynamic("Calculated maximum threat level based on player count of [SSticker.totalPlayersReady]: [calculated_max_threat]")
-
- threat_level = lorentz_to_amount(threat_curve_centre, threat_curve_width, calculated_max_threat)
-
- for(var/datum/station_trait/station_trait in GLOB.dynamic_station_traits)
- threat_level = max(threat_level - GLOB.dynamic_station_traits[station_trait], 0)
- log_dynamic("Threat reduced by [GLOB.dynamic_station_traits[station_trait]]. Source: [type].")
-
- peaceful_percentage = (threat_level/max_threat_level)*100
-
-/// Generates the midround and roundstart budgets
-/datum/game_mode/dynamic/proc/generate_budgets()
- round_start_budget = lorentz_to_amount(roundstart_split_curve_centre, roundstart_split_curve_width, threat_level, 0.1)
- initial_round_start_budget = round_start_budget
- mid_round_budget = threat_level - round_start_budget
-
-/datum/game_mode/dynamic/proc/setup_parameters()
- log_dynamic("Dynamic mode parameters for the round:")
- log_dynamic("Centre is [threat_curve_centre], Width is [threat_curve_width], Forced extended is [GLOB.dynamic_forced_extended ? "Enabled" : "Disabled"], No stacking is [GLOB.dynamic_no_stacking ? "Enabled" : "Disabled"].")
- log_dynamic("Stacking limit is [GLOB.dynamic_stacking_limit].")
- if(GLOB.dynamic_forced_threat_level >= 0)
- threat_level = round(GLOB.dynamic_forced_threat_level, 0.1)
- else
- generate_threat()
- generate_budgets()
- set_cooldowns()
- log_dynamic("Dynamic Mode initialized with a Threat Level of... [threat_level]! ([round_start_budget] round start budget)")
- SSblackbox.record_feedback(
- "associative",
- "dynamic_threat",
- 1,
- list(
- "server_name" = CONFIG_GET(string/serversqlname),
- "forced_threat_level" = GLOB.dynamic_forced_threat_level,
- "threat_level" = threat_level,
- "max_threat" = (SSticker.totalPlayersReady < low_pop_player_threshold) ? LERP(low_pop_maximum_threat, max_threat_level, SSticker.totalPlayersReady / low_pop_player_threshold) : max_threat_level,
- "player_count" = SSticker.totalPlayersReady,
- "round_start_budget" = round_start_budget,
- "parameters" = list(
- "threat_curve_centre" = threat_curve_centre,
- "threat_curve_width" = threat_curve_width,
- "forced_extended" = GLOB.dynamic_forced_extended,
- "no_stacking" = GLOB.dynamic_no_stacking,
- "stacking_limit" = GLOB.dynamic_stacking_limit,
- ),
- ),
- )
- return TRUE
-
-/datum/game_mode/dynamic/proc/setup_shown_threat()
- if (prob(FAKE_REPORT_CHANCE))
- shown_threat = rand(1, 100)
- else
- shown_threat = clamp(threat_level + rand(REPORT_NEG_DIVERGENCE, REPORT_POS_DIVERGENCE), 0, 100)
-
-/datum/game_mode/dynamic/proc/set_cooldowns()
- var/latejoin_injection_cooldown_middle = 0.5*(latejoin_delay_max + latejoin_delay_min)
- latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time
-
-/datum/game_mode/dynamic/pre_setup()
- if(CONFIG_GET(flag/dynamic_config_enabled))
- var/json_file = file("[global.config.directory]/dynamic.json")
- if(fexists(json_file))
- configuration = json_decode(file2text(json_file))
- if(configuration["Dynamic"])
- for(var/variable in configuration["Dynamic"])
- if(!(variable in vars))
- stack_trace("Invalid dynamic configuration variable [variable] in game mode variable changes.")
- continue
- vars[variable] = configuration["Dynamic"][variable]
-
- configure_station_trait_costs()
- setup_parameters()
- setup_hijacking()
- setup_shown_threat()
- setup_rulesets()
-
- //We do this here instead of with the midround rulesets and such because these rules can hang refs
- //To new_player and such, and we want the datums to just free when the roundstart work is done
- var/list/roundstart_rules = init_rulesets(/datum/dynamic_ruleset/roundstart)
-
- SSjob.DivideOccupations(pure = TRUE, allow_all = TRUE)
- for(var/i in GLOB.new_player_list)
- var/mob/dead/new_player/player = i
- if(player.ready == PLAYER_READY_TO_PLAY && player.mind && player.check_preferences())
- if(is_unassigned_job(player.mind.assigned_role))
- var/list/job_data = list()
- var/job_prefs = player.client.prefs.job_preferences
- for(var/job in job_prefs)
- var/priority = job_prefs[job]
- job_data += "[job]: [SSjob.job_priority_level_to_string(priority)]"
- to_chat(player, span_danger("You were unable to qualify for any roundstart antagonist role this round because your job preferences presented a high chance of all of your selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled. Increase the number of roles set to medium or low priority to reduce the chances of this happening."))
- log_admin("[player.ckey] failed to qualify for any roundstart antagonist role because their job preferences presented a high chance of all of their selected jobs being unavailable, along with 'return to lobby if job is unavailable' enabled and has [player.client.prefs.be_special.len] antag preferences enabled. They will be unable to qualify for any roundstart antagonist role. These are their job preferences - [job_data.Join(" | ")]")
- else
- roundstart_pop_ready++
- candidates.Add(player)
- SSjob.ResetOccupations()
- log_dynamic("Listing [roundstart_rules.len] round start rulesets, and [candidates.len] players ready.")
- if (candidates.len <= 0)
- log_dynamic("[candidates.len] candidates.")
- return TRUE
-
- if(GLOB.dynamic_forced_roundstart_ruleset.len > 0)
- rigged_roundstart()
- else
- roundstart(roundstart_rules)
-
- log_dynamic("[round_start_budget] round start budget was left, donating it to midrounds.")
- threat_log += "[worldtime2text()]: [round_start_budget] round start budget was left, donating it to midrounds."
- mid_round_budget += round_start_budget
-
- var/starting_rulesets = ""
- for (var/datum/dynamic_ruleset/roundstart/DR in executed_rules)
- starting_rulesets += "[DR.name], "
- log_dynamic("Picked the following roundstart rules: [starting_rulesets]")
- candidates.Cut()
- return TRUE
-
-/datum/game_mode/dynamic/post_setup(report)
- for(var/datum/dynamic_ruleset/roundstart/rule in executed_rules)
- rule.candidates.Cut() // The rule should not use candidates at this point as they all are null.
- addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/game_mode/dynamic/, execute_roundstart_rule), rule), rule.delay)
-
- if (!CONFIG_GET(flag/no_intercept_report))
- addtimer(CALLBACK(src, PROC_REF(send_intercept)), rand(waittime_l, waittime_h))
-
- //SKYRAT EDIT START - DIVERGENCY/GOALS REPORT
- else
- addtimer(CALLBACK(src, PROC_REF(send_trait_report)), rand(waittime_l, waittime_h))
- //SKYRAT EDIT END
-
- ..()
-
-/// Initializes the internal ruleset variables
-/datum/game_mode/dynamic/proc/setup_rulesets()
- midround_rules = init_rulesets(/datum/dynamic_ruleset/midround)
- latejoin_rules = init_rulesets(/datum/dynamic_ruleset/latejoin)
-
-/// Returns a list of the provided rulesets.
-/// Configures their variables to match config.
-/datum/game_mode/dynamic/proc/init_rulesets(ruleset_subtype)
- var/list/rulesets = list()
-
- for (var/datum/dynamic_ruleset/ruleset_type as anything in subtypesof(ruleset_subtype))
- if (initial(ruleset_type.name) == "")
- continue
-
- if (initial(ruleset_type.weight) == 0)
- continue
-
- var/ruleset = new ruleset_type
- configure_ruleset(ruleset)
- rulesets += ruleset
-
- return rulesets
-
-/// A simple roundstart proc used when dynamic_forced_roundstart_ruleset has rules in it.
-/datum/game_mode/dynamic/proc/rigged_roundstart()
- message_admins("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
- log_dynamic("[GLOB.dynamic_forced_roundstart_ruleset.len] rulesets being forced. Will now attempt to draft players for them.")
- for (var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset)
- configure_ruleset(rule)
- message_admins("Drafting players for forced ruleset [rule.name].")
- log_dynamic("Drafting players for forced ruleset [rule.name].")
- rule.mode = src
- rule.acceptable(roundstart_pop_ready, threat_level) // Assigns some vars in the modes, running it here for consistency
- rule.candidates = candidates.Copy()
- rule.trim_candidates()
- rule.load_templates()
- if (rule.ready(roundstart_pop_ready, TRUE))
- var/cost = rule.cost
- var/scaled_times = 0
- if (rule.scaling_cost)
- scaled_times = round(max(round_start_budget - cost, 0) / rule.scaling_cost)
- cost += rule.scaling_cost * scaled_times
-
- spend_roundstart_budget(picking_roundstart_rule(rule, scaled_times, forced = TRUE))
-
-/datum/game_mode/dynamic/proc/roundstart(list/roundstart_rules)
- if (GLOB.dynamic_forced_extended)
- log_dynamic("Starting a round of forced extended.")
- return TRUE
- var/list/drafted_rules = list()
- for (var/datum/dynamic_ruleset/roundstart/rule in roundstart_rules)
- if (!rule.weight)
- continue
- if (rule.acceptable(roundstart_pop_ready, threat_level) && round_start_budget >= rule.cost) // If we got the population and threat required
- rule.candidates = candidates.Copy()
- rule.trim_candidates()
- rule.load_templates()
- if (rule.ready(roundstart_pop_ready) && rule.candidates.len > 0)
- drafted_rules[rule] = rule.weight
-
- var/list/rulesets_picked = list()
-
- // Kept in case a ruleset can't be initialized for whatever reason, we want to be able to only spend what we can use.
- var/round_start_budget_left = round_start_budget
-
- while (round_start_budget_left > 0)
- var/datum/dynamic_ruleset/roundstart/ruleset = pick_weight(drafted_rules)
- if (isnull(ruleset))
- log_dynamic("No more rules can be applied, stopping with [round_start_budget] left.")
- break
-
- var/cost = (ruleset in rulesets_picked) ? ruleset.scaling_cost : ruleset.cost
- if (cost == 0)
- stack_trace("[ruleset] cost 0, this is going to result in an infinite loop.")
- drafted_rules[ruleset] = null
- continue
-
- if (cost > round_start_budget_left)
- drafted_rules[ruleset] = null
- continue
-
- if (check_blocking(ruleset.blocking_rules, rulesets_picked))
- drafted_rules[ruleset] = null
- continue
-
- round_start_budget_left -= cost
-
- rulesets_picked[ruleset] += 1
-
- if (ruleset.flags & HIGH_IMPACT_RULESET)
- for (var/_other_ruleset in drafted_rules)
- var/datum/dynamic_ruleset/other_ruleset = _other_ruleset
- if (other_ruleset.flags & HIGH_IMPACT_RULESET)
- drafted_rules[other_ruleset] = null
-
- if (ruleset.flags & LONE_RULESET)
- drafted_rules[ruleset] = null
-
- for (var/ruleset in rulesets_picked)
- spend_roundstart_budget(picking_roundstart_rule(ruleset, rulesets_picked[ruleset] - 1))
-
- update_log()
-
-/// Initializes the round start ruleset provided to it. Returns how much threat to spend.
-/datum/game_mode/dynamic/proc/picking_roundstart_rule(datum/dynamic_ruleset/roundstart/ruleset, scaled_times = 0, forced = FALSE)
- log_dynamic("Picked a ruleset: [ruleset.name], scaled [scaled_times] times")
-
- ruleset.trim_candidates()
- var/added_threat = ruleset.scale_up(roundstart_pop_ready, scaled_times)
-
- if(ruleset.pre_execute(roundstart_pop_ready))
- threat_log += "[worldtime2text()]: Roundstart [ruleset.name] spent [ruleset.cost + added_threat]. [ruleset.scaling_cost ? "Scaled up [ruleset.scaled_times]/[scaled_times] times." : ""]"
- if(ruleset.flags & ONLY_RULESET)
- only_ruleset_executed = TRUE
- if(ruleset.flags & HIGH_IMPACT_RULESET)
- high_impact_ruleset_executed = TRUE
- executed_rules += ruleset
- return ruleset.cost + added_threat
- else
- stack_trace("The starting rule \"[ruleset.name]\" failed to pre_execute.")
- return 0
-
-/// Mainly here to facilitate delayed rulesets. All roundstart rulesets are executed with a timered callback to this proc.
-/datum/game_mode/dynamic/proc/execute_roundstart_rule(sent_rule)
- var/datum/dynamic_ruleset/rule = sent_rule
- if(rule.execute())
- if(rule.persistent)
- current_rules += rule
- new_snapshot(rule)
- rule.forget_startup()
- return TRUE
- rule.clean_up() // Refund threat, delete teams and so on.
- rule.forget_startup()
- executed_rules -= rule
- stack_trace("The starting rule \"[rule.name]\" failed to execute.")
- return FALSE
-
-/// An experimental proc to allow admins to call rules on the fly or have rules call other rules.
-/datum/game_mode/dynamic/proc/picking_specific_rule(ruletype, forced = FALSE, ignore_cost = FALSE)
- var/datum/dynamic_ruleset/midround/new_rule
- if(ispath(ruletype))
- new_rule = new ruletype() // You should only use it to call midround rules though.
- configure_ruleset(new_rule) // This makes sure the rule is set up properly.
- else if(istype(ruletype, /datum/dynamic_ruleset))
- new_rule = ruletype
- else
- return FALSE
-
- if(!new_rule)
- return FALSE
-
- if(!forced)
- if(only_ruleset_executed)
- return FALSE
- // Check if a blocking ruleset has been executed.
- else if(check_blocking(new_rule.blocking_rules, executed_rules))
- return FALSE
- // Check if the ruleset is high impact and if a high impact ruleset has been executed
- else if(new_rule.flags & HIGH_IMPACT_RULESET)
- if(threat_level < GLOB.dynamic_stacking_limit && GLOB.dynamic_no_stacking)
- if(high_impact_ruleset_executed)
- return FALSE
-
- var/population = GLOB.alive_player_list.len
- if((new_rule.acceptable(population, threat_level) && (ignore_cost || new_rule.cost <= mid_round_budget)) || forced)
- new_rule.trim_candidates()
- new_rule.load_templates()
- if (new_rule.ready(forced))
- if (!ignore_cost)
- spend_midround_budget(new_rule.cost, threat_log, "[worldtime2text()]: Forced rule [new_rule.name]")
- new_rule.pre_execute(population)
- if (new_rule.execute()) // This should never fail since ready() returned 1
- if(new_rule.flags & HIGH_IMPACT_RULESET)
- high_impact_ruleset_executed = TRUE
- else if(new_rule.flags & ONLY_RULESET)
- only_ruleset_executed = TRUE
- log_dynamic("Making a call to a specific ruleset...[new_rule.name]!")
- executed_rules += new_rule
- if (new_rule.persistent)
- current_rules += new_rule
- new_rule.forget_startup()
- return TRUE
- else if (forced)
- log_dynamic("The ruleset [new_rule.name] couldn't be executed due to lack of elligible players.")
- new_rule.forget_startup()
- return FALSE
-
-/datum/game_mode/dynamic/process()
- for (var/datum/dynamic_ruleset/rule in current_rules)
- if(rule.rule_process() == RULESET_STOP_PROCESSING) // If rule_process() returns 1 (RULESET_STOP_PROCESSING), stop processing.
- current_rules -= rule
-
- try_midround_roll()
-
-/// Removes type from the list
-/datum/game_mode/dynamic/proc/remove_from_list(list/type_list, type)
- for(var/I in type_list)
- if(istype(I, type))
- type_list -= I
- return type_list
-
-/// Checks if a type in blocking_list is in rule_list.
-/datum/game_mode/dynamic/proc/check_blocking(list/blocking_list, list/rule_list)
- if(blocking_list.len > 0)
- for(var/blocking in blocking_list)
- for(var/_executed in rule_list)
- var/datum/executed = _executed
- if(blocking == executed.type)
- log_dynamic("FAIL: check_blocking - [blocking] conflicts with [executed.type]")
- return TRUE
- return FALSE
-
-/datum/game_mode/dynamic/make_antag_chance(mob/living/carbon/human/newPlayer)
- if (GLOB.dynamic_forced_extended)
- return
- if(EMERGENCY_ESCAPED_OR_ENDGAMED) // No more rules after the shuttle has left
- return
-
- if (forced_latejoin_rule)
- log_dynamic("Forcing specific [forced_latejoin_rule.ruletype] ruleset [forced_latejoin_rule].")
- if(!handle_executing_latejoin(forced_latejoin_rule, newPlayer, forced = TRUE))
- message_admins("The forced latejoin ruleset [forced_latejoin_rule.name] couldn't be executed \
- as the most recent latejoin did not fulfill the ruleset's requirements.")
- forced_latejoin_rule = null
- return
-
- if(!forced_injection)
- if(latejoin_injection_cooldown >= world.time)
- return
- if(!prob(latejoin_roll_chance))
- return
-
- var/was_forced = forced_injection
- forced_injection = FALSE
- var/list/possible_latejoin_rules = list()
- for (var/datum/dynamic_ruleset/latejoin/rule in latejoin_rules)
- if(!rule.weight)
- continue
- if(mid_round_budget < rule.cost)
- continue
- if(!rule.acceptable(GLOB.alive_player_list.len, threat_level))
- continue
- possible_latejoin_rules[rule] = rule.get_weight()
-
- if(!length(possible_latejoin_rules))
- log_dynamic("FAIL: [newPlayer] was selected to roll for a latejoin ruleset, but there were no valid rulesets.")
- return
-
- log_dynamic("[newPlayer] was selected to roll for a latejoin ruleset from the following list: [english_list(possible_latejoin_rules)].")
- // You get one shot at becoming a latejoin antag, if it fails the next guy will try.
- var/datum/dynamic_ruleset/latejoin/picked_rule = pick_ruleset(possible_latejoin_rules, max_allowed_attempts = 1)
- if(isnull(picked_rule))
- log_dynamic("FAIL: No valid rulset was selected for [newPlayer]'s latejoin[was_forced ? "" : ", the next player will be checked instead"].")
- return
- if(was_forced)
- log_dynamic("Forcing random [picked_rule.ruletype] ruleset [picked_rule].")
- handle_executing_latejoin(picked_rule, newPlayer, forced = was_forced)
-
-/**
- * This proc handles the execution of a latejoin ruleset, including removing it from latejoin rulesets if not repeatable,
- * upping the injection cooldown, and starting a timer to execute the ruleset on delay.
- */
-/datum/game_mode/dynamic/proc/handle_executing_latejoin(datum/dynamic_ruleset/ruleset, mob/living/carbon/human/only_candidate, forced = FALSE)
- ruleset.candidates = list(only_candidate)
- ruleset.trim_candidates()
- ruleset.load_templates()
- if (!ruleset.ready(forced))
- log_dynamic("FAIL: [only_candidate] was selected to latejoin with the [ruleset] ruleset, \
- but the ruleset failed to execute[length(ruleset.candidates) ? "":" as they were not a valid candiate"].")
- return FALSE
- if (!ruleset.repeatable)
- latejoin_rules = remove_from_list(latejoin_rules, ruleset.type)
- addtimer(CALLBACK(src, PROC_REF(execute_midround_latejoin_rule), ruleset), ruleset.delay)
-
- if(!forced)
- var/latejoin_injection_cooldown_middle = 0.5 * (latejoin_delay_max + latejoin_delay_min)
- latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), latejoin_delay_min, latejoin_delay_max)) + world.time
- log_dynamic("A latejoin rulset triggered successfully, the next latejoin injection will happen at [latejoin_injection_cooldown] round time.")
-
- return TRUE
-
-/// Apply configurations to rule.
-/datum/game_mode/dynamic/proc/configure_ruleset(datum/dynamic_ruleset/ruleset)
- var/rule_conf = LAZYACCESSASSOC(configuration, ruleset.ruletype, ruleset.name)
- for(var/variable in rule_conf)
- if(!(variable in ruleset.vars))
- stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].")
- continue
- ruleset.vars[variable] = rule_conf[variable]
- if(CONFIG_GET(flag/protect_roles_from_antagonist))
- ruleset.restricted_roles |= ruleset.protected_roles
- if(CONFIG_GET(flag/protect_assistant_from_antagonist))
- ruleset.restricted_roles |= JOB_ASSISTANT
- // SKYRAT EDIT ADDITION
- for(var/datum/job/iterating_job as anything in subtypesof(/datum/job))
- if(!initial(iterating_job.antagonist_restricted))
- continue
- if(initial(iterating_job.restricted_antagonists))
- var/list/restricted_antagonists = initial(iterating_job.restricted_antagonists)
- if(!(ruleset.antag_flag in restricted_antagonists))
- continue
- ruleset.restricted_roles |= initial(iterating_job.title)
- else
- ruleset.restricted_roles |= initial(iterating_job.title)
- // SKYRAT EDIT END
-
-/// Get station traits and call for their config
-/datum/game_mode/dynamic/proc/configure_station_trait_costs()
- if(!CONFIG_GET(flag/dynamic_config_enabled))
- return
- for(var/datum/station_trait/station_trait as anything in GLOB.dynamic_station_traits)
- configure_station_trait(station_trait)
-
-/// Apply configuration for station trait costs
-/datum/game_mode/dynamic/proc/configure_station_trait(datum/station_trait/station_trait)
- var/list/station_trait_config = LAZYACCESSASSOC(configuration, "Station", station_trait.dynamic_threat_id)
- var/cost = station_trait_config["cost"]
-
- if(isnull(cost)) //0 is valid so check for null specifically
- return
-
- if(cost != GLOB.dynamic_station_traits[station_trait])
- log_dynamic("Config set [station_trait.dynamic_threat_id] cost from [station_trait.threat_reduction] to [cost]")
-
- GLOB.dynamic_station_traits[station_trait] = cost
-
-/// Refund threat, but no more than threat_level.
-/datum/game_mode/dynamic/proc/refund_threat(regain)
- mid_round_budget = min(threat_level, mid_round_budget + regain)
-
-/// Generate threat and increase the threat_level if it goes beyond, capped at 100
-/datum/game_mode/dynamic/proc/create_threat(gain, list/threat_log, reason)
- mid_round_budget = min(100, mid_round_budget + gain)
- if(mid_round_budget > threat_level)
- threat_level = mid_round_budget
- for(var/list/logs in threat_log)
- log_threat(gain, logs, reason)
-
-/datum/game_mode/dynamic/proc/log_threat(threat_change, list/threat_log, reason)
- var/gain_or_loss = "+"
- if(threat_change < 0)
- gain_or_loss = "-"
- threat_log += "Threat [gain_or_loss][abs(threat_change)] - [reason]."
-
-/// Expend round start threat, can't fall under 0.
-/datum/game_mode/dynamic/proc/spend_roundstart_budget(cost, list/threat_log, reason)
- round_start_budget = max(round_start_budget - cost,0)
- if (!isnull(threat_log))
- log_threat(-cost, threat_log, reason)
-
-/// Expend midround threat, can't fall under 0.
-/datum/game_mode/dynamic/proc/spend_midround_budget(cost, list/threat_log, reason)
- mid_round_budget = max(mid_round_budget - cost,0)
- if (!isnull(threat_log))
- log_threat(-cost, threat_log, reason)
-
-#define MAXIMUM_DYN_DISTANCE 5
-
-/**
- * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5
- * plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum
- * threat and then rounded to the nearest interval.
- * rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals.
- */
-/datum/game_mode/dynamic/proc/lorentz_to_amount(centre = 0, scale = 1.8, max_threat = 100, interval = 1)
- var/location = RANDOM_DECIMAL(-MAXIMUM_DYN_DISTANCE, MAXIMUM_DYN_DISTANCE) * rand()
- var/lorentz_result = LORENTZ_CUMULATIVE_DISTRIBUTION(centre, location, scale)
- var/std_threat = lorentz_result * max_threat
- ///Without these, the amount won't come close to hitting 0% or 100% of the max threat.
- var/lower_deviation = max(std_threat * (location-centre)/MAXIMUM_DYN_DISTANCE, 0)
- var/upper_deviation = max((max_threat - std_threat) * (centre-location)/MAXIMUM_DYN_DISTANCE, 0)
- return clamp(round(std_threat + upper_deviation - lower_deviation, interval), 0, 100)
-
-#undef MAXIMUM_DYN_DISTANCE
-
-#undef FAKE_REPORT_CHANCE
-#undef FAKE_GREENSHIFT_FORM_CHANCE
-#undef PULSAR_REPORT_CHANCE
-#undef REPORT_NEG_DIVERGENCE
-#undef REPORT_POS_DIVERGENCE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
deleted file mode 100644
index ee02bd8d80c..00000000000
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ /dev/null
@@ -1,947 +0,0 @@
-/// Probability the AI going malf will be accompanied by an ion storm announcement and some ion laws.
-#define MALF_ION_PROB 33
-/// The probability to replace an existing law with an ion law instead of adding a new ion law.
-#define REPLACE_LAW_WITH_ION_PROB 10
-
-/// Midround Rulesets
-/datum/dynamic_ruleset/midround // Can be drafted once in a while during a round
- ruletype = MIDROUND_RULESET
- var/midround_ruleset_style
- /// If the ruleset should be restricted from ghost roles.
- var/restrict_ghost_roles = TRUE
- /// What mob type the ruleset is restricted to.
- var/required_type = /mob/living/carbon/human
- var/list/living_players = list()
- var/list/living_antags = list()
- var/list/dead_players = list()
- var/list/list_observers = list()
-
- /// The minimum round time before this ruleset will show up
- var/minimum_round_time = 0
- /// Abstract root value
- var/abstract_type = /datum/dynamic_ruleset/midround
-
-/datum/dynamic_ruleset/midround/forget_startup()
- living_players = list()
- living_antags = list()
- dead_players = list()
- list_observers = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts
- weight = 0
- required_type = /mob/dead/observer
- abstract_type = /datum/dynamic_ruleset/midround/from_ghosts
- /// Whether the ruleset should call generate_ruleset_body or not.
- var/makeBody = TRUE
- /// The rule needs this many applicants to be properly executed.
- var/required_applicants = 1
-
-/datum/dynamic_ruleset/midround/from_ghosts/check_candidates()
- var/dead_count = dead_players.len + list_observers.len
- if (required_candidates <= dead_count)
- return TRUE
-
- log_dynamic("FAIL: [src], a from_ghosts ruleset, did not have enough dead candidates: [required_candidates] needed, [dead_count] found")
-
- return FALSE
-
-/datum/dynamic_ruleset/midround/trim_candidates()
- living_players = trim_list(GLOB.alive_player_list)
- living_antags = trim_list(GLOB.current_living_antags)
- dead_players = trim_list(GLOB.dead_player_list)
- list_observers = trim_list(GLOB.current_observers_list)
-
-/datum/dynamic_ruleset/midround/proc/trim_list(list/to_trim = list())
- var/list/trimmed_list = to_trim.Copy()
- for(var/mob/creature in trimmed_list)
- if (!istype(creature, required_type))
- trimmed_list.Remove(creature)
- continue
- if (isnull(creature.client)) // Are they connected?
- trimmed_list.Remove(creature)
- continue
- //SKYRAT EDIT ADDITION
- if(is_banned_from(creature.client.ckey, BAN_ANTAGONIST))
- trimmed_list.Remove(creature)
- continue
- if(!creature.client?.prefs?.read_preference(/datum/preference/toggle/be_antag))
- trimmed_list.Remove(creature)
- continue
- //SKYRAT EDIT END
- if(creature.client.get_remaining_days(minimum_required_age) > 0)
- trimmed_list.Remove(creature)
- continue
- if (!((antag_preference || antag_flag) in creature.client.prefs.be_special))
- trimmed_list.Remove(creature)
- continue
- if (is_banned_from(creature.ckey, list(antag_flag_override || antag_flag, ROLE_SYNDICATE)))
- trimmed_list.Remove(creature)
- continue
-
- if (isnull(creature.mind))
- continue
-
- if (restrict_ghost_roles && (creature.mind.assigned_role.title in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role?
- trimmed_list.Remove(creature)
- continue
- if (creature.mind.assigned_role.title in restricted_roles) // Does their job allow it?
- trimmed_list.Remove(creature)
- continue
- if (length(exclusive_roles) && !(creature.mind.assigned_role.title in exclusive_roles)) // Is the rule exclusive to their job?
- trimmed_list.Remove(creature)
- continue
- if(HAS_TRAIT(creature, TRAIT_MIND_TEMPORARILY_GONE)) // are they out of body?
- trimmed_list.Remove(creature)
- continue
- if(HAS_TRAIT(creature, TRAIT_TEMPORARY_BODY)) // are they an avatar?
- trimmed_list.Remove(creature)
- continue
- return trimmed_list
-
-// You can then for example prompt dead players in execute() to join as strike teams or whatever
-// Or autotator someone
-
-// IMPORTANT, since /datum/dynamic_ruleset/midround may accept candidates from both living, dead, and even antag players
-// subtype your midround with /from_ghosts or /from_living to get candidate checking. Or check yourself by subtyping from neither
-/datum/dynamic_ruleset/midround/ready(forced = FALSE)
- if (forced)
- return TRUE
-
- var/job_check = 0
- if (enemy_roles.len > 0)
- for (var/mob/M in GLOB.alive_player_list)
- if (M.stat == DEAD || !M.client)
- continue // Dead/disconnected players cannot count as opponents
- if (M.mind && (M.mind.assigned_role.title in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role.title in restricted_roles)))
- job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it
-
- var/threat = round(mode.threat_level/10)
- var/ruleset_forced = (GLOB.dynamic_forced_rulesets[type] || RULESET_NOT_FORCED) == RULESET_FORCE_ENABLED
- if (!ruleset_forced && job_check < required_enemies[threat])
- log_dynamic("FAIL: [src] is not ready, because there are not enough enemies: [required_enemies[threat]] needed, [job_check] found")
- return FALSE
-
- return TRUE
-
-/datum/dynamic_ruleset/midround/from_ghosts/execute()
- var/list/possible_candidates = list()
- possible_candidates.Add(dead_players)
- possible_candidates.Add(list_observers)
- send_applications(possible_candidates)
- if(assigned.len > 0)
- return TRUE
- else
- return FALSE
-
-/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset.
-/datum/dynamic_ruleset/midround/from_ghosts/proc/send_applications(list/possible_volunteers = list())
- if (possible_volunteers.len <= 0) // This shouldn't happen, as ready() should return FALSE if there is not a single valid candidate
- message_admins("Possible volunteers was 0. This shouldn't appear, because of ready(), unless you forced it!")
- mode.log_dynamic_and_announce("Polling [possible_volunteers.len] players to apply for the [name] ruleset.")
-
- candidates = poll_ghost_candidates("The mode is looking for volunteers to become [antag_flag] for [name]", antag_flag_override, antag_flag || antag_flag_override, poll_time = 300)
-
- if(!candidates || candidates.len <= 0)
- mode.log_dynamic_and_announce("The ruleset [name] received no applications.")
- mode.executed_rules -= src
- attempt_replacement()
- return
-
- mode.log_dynamic_and_announce("[candidates.len] players volunteered for [name].")
- review_applications()
-
-/// Here is where you can check if your ghost applicants are valid for the ruleset.
-/// Called by send_applications().
-/datum/dynamic_ruleset/midround/from_ghosts/proc/review_applications()
- if(candidates.len < required_applicants)
- mode.executed_rules -= src
- return
- for (var/i = 1, i <= required_candidates, i++)
- if(candidates.len <= 0)
- break
- var/mob/applicant = pick(candidates)
- candidates -= applicant
- if(!isobserver(applicant))
- if(applicant.stat == DEAD) // Not an observer? If they're dead, make them one.
- applicant = applicant.ghostize(FALSE)
- else // Not dead? Disregard them, pick a new applicant
- i--
- continue
- if(!applicant)
- i--
- continue
- assigned += applicant
- finish_applications()
-
-/// Here the accepted applications get generated bodies and their setup is finished.
-/// Called by review_applications()
-/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_applications()
- var/i = 0
- for(var/mob/applicant as anything in assigned)
- i++
- var/mob/new_character = applicant
- if(makeBody)
- new_character = generate_ruleset_body(applicant)
- finish_setup(new_character, i)
- notify_ghosts(
- "[applicant.name] has been picked for the ruleset [name]!",
- source = new_character,
- )
-
-/datum/dynamic_ruleset/midround/from_ghosts/proc/generate_ruleset_body(mob/applicant)
- var/mob/living/carbon/human/new_character = make_body(applicant)
- new_character.dna.remove_all_mutations()
- return new_character
-
-/datum/dynamic_ruleset/midround/from_ghosts/proc/finish_setup(mob/new_character, index)
- var/datum/antagonist/new_role = new antag_datum()
- setup_role(new_role)
- new_character.mind.add_antag_datum(new_role)
- new_character.mind.special_role = antag_flag
-
-/datum/dynamic_ruleset/midround/from_ghosts/proc/setup_role(datum/antagonist/new_role)
- return
-
-/// Fired when there are no valid candidates. Will spawn a sleeper agent or latejoin traitor.
-/datum/dynamic_ruleset/midround/from_ghosts/proc/attempt_replacement()
- var/datum/dynamic_ruleset/midround/from_living/autotraitor/sleeper_agent = new
-
- mode.configure_ruleset(sleeper_agent)
-
- if (!mode.picking_specific_rule(sleeper_agent))
- return
-
- mode.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator)
- return
-
-///subtype to handle checking players
-/datum/dynamic_ruleset/midround/from_living
- weight = 0
- abstract_type = /datum/dynamic_ruleset/midround/from_living
-
-/datum/dynamic_ruleset/midround/from_living/ready(forced)
- if(!check_candidates())
- return FALSE
- return ..()
-
-
-/// Midround Traitor Ruleset (From Living)
-/datum/dynamic_ruleset/midround/from_living/autotraitor
- name = "Syndicate Sleeper Agent"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/traitor/infiltrator/sleeper_agent
- antag_flag = ROLE_SLEEPER_AGENT
- antag_flag_override = ROLE_TRAITOR
- protected_roles = list(
- JOB_CAPTAIN,
- JOB_DETECTIVE,
- JOB_HEAD_OF_PERSONNEL,
- JOB_HEAD_OF_SECURITY,
- JOB_PRISONER,
- JOB_SECURITY_OFFICER,
- JOB_WARDEN,
- )
- restricted_roles = list(
- JOB_AI,
- JOB_CYBORG,
- ROLE_POSITRONIC_BRAIN,
- )
- required_candidates = 1
- weight = 35
- cost = 3
- requirements = list(3,3,3,3,3,3,3,3,3,3)
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_living/autotraitor/trim_candidates()
- ..()
- candidates = living_players
- for(var/mob/living/player in candidates)
- if(issilicon(player)) // Your assigned role doesn't change when you are turned into a silicon.
- candidates -= player
- else if(is_centcom_level(player.z))
- candidates -= player // We don't autotator people in CentCom
- else if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
- candidates -= player // We don't autotator people with roles already
-
-/datum/dynamic_ruleset/midround/from_living/autotraitor/execute()
- var/mob/M = pick(candidates)
- assigned += M
- candidates -= M
- var/datum/antagonist/traitor/infiltrator/sleeper_agent/newTraitor = new
- M.mind.add_antag_datum(newTraitor)
- message_admins("[ADMIN_LOOKUPFLW(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
- log_dynamic("[key_name(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
- return TRUE
-
-
-//////////////////////////////////////////////
-// //
-// Malfunctioning AI //
-// //
-//////////////////////////////////////////////
-
-/datum/dynamic_ruleset/midround/malf
- name = "Malfunctioning AI"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/malf_ai
- antag_flag = ROLE_MALF_MIDROUND
- antag_flag_override = ROLE_MALF
- enemy_roles = list(
- JOB_CHEMIST,
- JOB_CHIEF_ENGINEER,
- JOB_HEAD_OF_SECURITY,
- JOB_RESEARCH_DIRECTOR,
- JOB_SCIENTIST,
- JOB_SECURITY_OFFICER,
- JOB_WARDEN,
- )
- exclusive_roles = list(JOB_AI)
- required_enemies = list(4,4,4,4,4,4,2,2,2,0)
- required_candidates = 1
- minimum_players = 25
- weight = 2
- cost = 10
- required_type = /mob/living/silicon/ai
- blocking_rules = list(/datum/dynamic_ruleset/roundstart/malf_ai)
-
-/datum/dynamic_ruleset/midround/malf/trim_candidates()
- ..()
- candidates = living_players
- for(var/mob/living/player in candidates)
- if(!isAI(player))
- candidates -= player
- continue
-
- if(is_centcom_level(player.z))
- candidates -= player
- continue
-
- if(player.mind && (player.mind.special_role || player.mind.antag_datums?.len > 0))
- candidates -= player
-
-/datum/dynamic_ruleset/midround/malf/execute()
- if(!candidates || !candidates.len)
- return FALSE
- var/mob/living/silicon/ai/new_malf_ai = pick_n_take(candidates)
- assigned += new_malf_ai.mind
- var/datum/antagonist/malf_ai/malf_antag_datum = new
- new_malf_ai.mind.special_role = antag_flag
- new_malf_ai.mind.add_antag_datum(malf_antag_datum)
- if(prob(MALF_ION_PROB))
- priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", ANNOUNCER_IONSTORM)
- if(prob(REPLACE_LAW_WITH_ION_PROB))
- new_malf_ai.replace_random_law(generate_ion_law(), list(LAW_INHERENT, LAW_SUPPLIED, LAW_ION), LAW_ION)
- else
- new_malf_ai.add_ion_law(generate_ion_law())
- return TRUE
-
-/// Midround Wizard Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/wizard
- name = "Wizard"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/wizard
- antag_flag = ROLE_WIZARD_MIDROUND
- antag_flag_override = ROLE_WIZARD
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 1
- cost = 10
- requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED
- flags = HIGH_IMPACT_RULESET
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_WIZARDDEN)
-
-/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
- if(!check_candidates())
- return FALSE
- if(!length(GLOB.wizardstart))
- log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
- message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/wizard/finish_setup(mob/new_character, index)
- ..()
- new_character.forceMove(pick(GLOB.wizardstart))
-
-/// Midround Nuclear Operatives Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear
- name = "Nuclear Assault"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_flag = ROLE_OPERATIVE_MIDROUND
- antag_flag_override = ROLE_OPERATIVE
- antag_datum = /datum/antagonist/nukeop
- enemy_roles = list(
- JOB_AI,
- JOB_CYBORG,
- JOB_CAPTAIN,
- JOB_DETECTIVE,
- JOB_HEAD_OF_SECURITY,
- JOB_SECURITY_OFFICER,
- JOB_WARDEN,
- )
- required_enemies = list(3,3,3,3,3,2,1,1,0,0)
- required_candidates = 5
- weight = 5
- cost = 7
- minimum_round_time = 70 MINUTES
- requirements = REQUIREMENTS_VERY_HIGH_THREAT_NEEDED
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE)
- flags = HIGH_IMPACT_RULESET
-
- var/list/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
-
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear/acceptable(population=0, threat_level=0)
- if (locate(/datum/dynamic_ruleset/roundstart/nuclear) in mode.executed_rules)
- return FALSE // Unavailable if nuke ops were already sent at roundstart
- indice_pop = min(operative_cap.len, round(living_players.len/5)+1)
- required_candidates = operative_cap[indice_pop]
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
- if (!check_candidates())
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_applications()
- var/mob/leader = get_most_experienced(assigned, ROLE_NUCLEAR_OPERATIVE)
- if(leader)
- assigned.Remove(leader)
- assigned.Insert(1, leader)
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index)
- new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative))
- new_character.mind.special_role = ROLE_NUCLEAR_OPERATIVE
- if(index == 1)
- var/datum/antagonist/nukeop/leader/leader_antag_datum = new()
- new_character.mind.add_antag_datum(leader_antag_datum)
- return
- return ..()
-
-/// Midround Blob Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/blob
- name = "Blob"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/blob
- antag_flag = ROLE_BLOB
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- minimum_round_time = 35 MINUTES
- weight = 3
- cost = 8
- minimum_players = 25
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant)
- var/body = applicant.become_overmind()
- return body
-
-/// Midround Blob Infection Ruleset (From Living)
-/datum/dynamic_ruleset/midround/from_living/blob_infection
- name = "Blob Infection"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/blob/infection
- antag_flag = ROLE_BLOB_INFECTION
- antag_flag_override = ROLE_BLOB
- protected_roles = list(
- JOB_CAPTAIN,
- JOB_DETECTIVE,
- JOB_HEAD_OF_SECURITY,
- JOB_PRISONER,
- JOB_SECURITY_OFFICER,
- JOB_WARDEN,
- )
- restricted_roles = list(
- JOB_AI,
- JOB_CYBORG,
- ROLE_POSITRONIC_BRAIN,
- )
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- minimum_round_time = 35 MINUTES
- weight = 3
- cost = 10
- minimum_players = 25
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_living/blob_infection/trim_candidates()
- ..()
- candidates = living_players
- for(var/mob/living/player as anything in candidates)
- var/turf/player_turf = get_turf(player)
- if(!player_turf || !is_station_level(player_turf.z))
- candidates -= player
- continue
-
- if(player.mind && (player.mind.special_role || length(player.mind.antag_datums) > 0))
- candidates -= player
-
-/datum/dynamic_ruleset/midround/from_living/blob_infection/execute()
- if(!candidates || !candidates.len)
- return FALSE
- var/mob/living/carbon/human/blob_antag = pick_n_take(candidates)
- assigned += blob_antag.mind
- blob_antag.mind.special_role = antag_flag
- return ..()
-
-/// Midround Xenomorph Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/xenomorph
- name = "Alien Infestation"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/xeno
- antag_flag = ROLE_ALIEN
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- minimum_round_time = 40 MINUTES
- weight = 5
- cost = 10
- minimum_players = 25
- repeatable = TRUE
- var/list/vents = list()
-
-/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/forget_startup()
- vents = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute()
- // 50% chance of being incremented by one
- required_candidates += prob(50)
- var/list/vent_pumps = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/components/unary/vent_pump)
- for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent as anything in vent_pumps)
- if(QDELETED(temp_vent))
- continue
- if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
- var/datum/pipeline/temp_vent_parent = temp_vent.parents[1]
- if(!temp_vent_parent)
- continue // No parent vent
- // Stops Aliens getting stuck in small networks.
- // See: Security, Virology
- if(temp_vent_parent.other_atmos_machines.len > 20)
- vents += temp_vent
- if(!vents.len)
- return FALSE
- . = ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/generate_ruleset_body(mob/applicant)
- var/obj/vent = pick_n_take(vents)
- var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
- new_xeno.key = applicant.key
- new_xeno.move_into_vent(vent)
- message_admins("[ADMIN_LOOKUPFLW(new_xeno)] has been made into an alien by the midround ruleset.")
- log_dynamic("[key_name(new_xeno)] was spawned as an alien by the midround ruleset.")
- return new_xeno
-
-/// Midround Nightmare Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/nightmare
- name = "Nightmare"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/nightmare
- antag_flag = ROLE_NIGHTMARE
- antag_flag_override = ROLE_ALIEN
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 3
- cost = 5
- minimum_players = 15
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_ghosts/nightmare/acceptable(population = 0, threat_level = 0)
- var/turf/spawn_loc = find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE) //Checks if there's a single safe, dark tile on station.
- if(!spawn_loc)
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/nightmare/generate_ruleset_body(mob/applicant)
- var/datum/mind/player_mind = new /datum/mind(applicant.key)
- player_mind.active = TRUE
-
- var/mob/living/carbon/human/new_nightmare = new (find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = TRUE))
- player_mind.transfer_to(new_nightmare)
- player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare))
- player_mind.special_role = ROLE_NIGHTMARE
- player_mind.add_antag_datum(/datum/antagonist/nightmare)
- new_nightmare.set_species(/datum/species/shadow/nightmare)
-
- playsound(new_nightmare, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
- message_admins("[ADMIN_LOOKUPFLW(new_nightmare)] has been made into a Nightmare by the midround ruleset.")
- log_dynamic("[key_name(new_nightmare)] was spawned as a Nightmare by the midround ruleset.")
- return new_nightmare
-
-/// Midround Space Dragon Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/space_dragon
- name = "Space Dragon"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/space_dragon
- antag_flag = ROLE_SPACE_DRAGON
- antag_flag_override = ROLE_SPACE_DRAGON
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 4
- cost = 7
- minimum_players = 25
- repeatable = TRUE
- var/list/spawn_locs = list()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/forget_startup()
- spawn_locs = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/execute()
- for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list)
- spawn_locs += (C.loc)
- if(!spawn_locs.len)
- message_admins("No valid spawn locations found, aborting...")
- return MAP_ERROR
- . = ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_dragon/generate_ruleset_body(mob/applicant)
- var/datum/mind/player_mind = new /datum/mind(applicant.key)
- player_mind.active = TRUE
-
- var/mob/living/basic/space_dragon/S = new (pick(spawn_locs))
- player_mind.transfer_to(S)
- player_mind.add_antag_datum(/datum/antagonist/space_dragon)
-
- playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
- message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Space Dragon by the midround ruleset.")
- log_dynamic("[key_name(S)] was spawned as a Space Dragon by the midround ruleset.")
- priority_announce("A large organic energy flux has been recorded near of [station_name()], please stand-by.", "Lifesign Alert")
- return S
-
-/datum/dynamic_ruleset/midround/from_ghosts/abductors
- name = "Abductors"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/abductor
- antag_flag = ROLE_ABDUCTOR
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 2
- required_applicants = 2
- weight = 4
- cost = 7
- minimum_players = 25
- repeatable = TRUE
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_ABDUCTOR_SHIPS)
-
- var/datum/team/abductor_team/new_team
-
-/datum/dynamic_ruleset/midround/from_ghosts/abductors/forget_startup()
- new_team = null
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/abductors/finish_setup(mob/new_character, index)
- if (index == 1) // Our first guy is the scientist. We also initialize the team here as well since this should only happen once per pair of abductors.
- new_team = new
- if(new_team.team_number > ABDUCTOR_MAX_TEAMS)
- return MAP_ERROR
- var/datum/antagonist/abductor/scientist/new_role = new
- new_character.mind.add_antag_datum(new_role, new_team)
- else // Our second guy is the agent, team is already created, don't need to make another one.
- var/datum/antagonist/abductor/agent/new_role = new
- new_character.mind.add_antag_datum(new_role, new_team)
-
-/// Midround Space Ninja Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/space_ninja
- name = "Space Ninja"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/ninja
- antag_flag = ROLE_NINJA
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 4
- cost = 8
- minimum_players = 30
- repeatable = TRUE
- ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NINJA_HOLDING_FACILITY) // I mean, no one uses the nets anymore but whateva
-
- var/list/spawn_locs = list()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/forget_startup()
- spawn_locs = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/execute()
- for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list)
- if(!isturf(carp_spawn.loc))
- stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]")
- continue
- spawn_locs += carp_spawn.loc
- if(!spawn_locs.len)
- message_admins("No valid spawn locations found, aborting...")
- return MAP_ERROR
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/generate_ruleset_body(mob/applicant)
- var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs))
- ninja.key = applicant.key
- ninja.mind.add_antag_datum(/datum/antagonist/ninja)
-
- message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a Space Ninja by the midround ruleset.")
- log_dynamic("[key_name(ninja)] was spawned as a Space Ninja by the midround ruleset.")
- return ninja
-
-/// Midround Spiders Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/spiders
- name = "Spiders"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_flag = ROLE_SPIDER
- required_type = /mob/dead/observer
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 0
- weight = 3
- cost = 8
- minimum_players = 27
- repeatable = TRUE
- var/spawncount = 2
-
-/datum/dynamic_ruleset/midround/spiders/execute()
- create_midwife_eggs(spawncount)
- return ..()
-
-/// Midround Revenant Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/revenant
- name = "Revenant"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/revenant
- antag_flag = ROLE_REVENANT
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 4
- cost = 5
- minimum_players = 15
- repeatable = TRUE
- var/dead_mobs_required = 20
- var/need_extra_spawns_value = 15
- var/list/spawn_locs = list()
-
-/datum/dynamic_ruleset/midround/from_ghosts/revenant/forget_startup()
- spawn_locs = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/revenant/acceptable(population=0, threat_level=0)
- if(GLOB.dead_mob_list.len < dead_mobs_required)
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/revenant/execute()
- for(var/mob/living/corpse in GLOB.dead_mob_list) //look for any dead bodies
- var/turf/corpse_turf = get_turf(corpse)
- if(corpse_turf && is_station_level(corpse_turf.z))
- spawn_locs += corpse_turf
- if(!spawn_locs.len || spawn_locs.len < need_extra_spawns_value) //look for any morgue trays, crematoriums, ect if there weren't alot of dead bodies on the station to pick from
- for(var/obj/structure/bodycontainer/corpse_container in GLOB.bodycontainers)
- var/turf/container_turf = get_turf(corpse_container)
- if(container_turf && is_station_level(container_turf.z))
- spawn_locs += container_turf
- if(!spawn_locs.len) //If we can't find any valid spawnpoints, try the carp spawns
- for(var/obj/effect/landmark/carpspawn/carp_spawnpoint in GLOB.landmarks_list)
- if(isturf(carp_spawnpoint.loc))
- spawn_locs += carp_spawnpoint.loc
- if(!spawn_locs.len) //If we can't find THAT, then just give up and cry
- return FALSE
- . = ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/revenant/generate_ruleset_body(mob/applicant)
- var/mob/living/basic/revenant/revenant = new(pick(spawn_locs))
- revenant.key = applicant.key
- message_admins("[ADMIN_LOOKUPFLW(revenant)] has been made into a revenant by the midround ruleset.")
- log_game("[key_name(revenant)] was spawned as a revenant by the midround ruleset.")
- return revenant
-
-/// Midround Sentient Disease Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease
- name = "Sentient Disease"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_datum = /datum/antagonist/disease
- antag_flag = ROLE_SENTIENT_DISEASE
- required_candidates = 1
- minimum_players = 25
- weight = 4
- cost = 8
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant)
- var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center())
- virus.key = applicant.key
- INVOKE_ASYNC(virus, TYPE_PROC_REF(/mob/camera/disease, pick_name))
- message_admins("[ADMIN_LOOKUPFLW(virus)] has been made into a sentient disease by the midround ruleset.")
- log_game("[key_name(virus)] was spawned as a sentient disease by the midround ruleset.")
- return virus
-
-/// Midround Space Pirates Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/pirates
- name = "Space Pirates"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_flag = "Space Pirates"
- required_type = /mob/dead/observer
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 0
- weight = 3
- cost = 8
- minimum_players = 20
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/pirates/acceptable(population=0, threat_level=0)
- if (SSmapping.is_planetary() || GLOB.light_pirate_gangs.len == 0)
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/pirates/execute()
- send_pirate_threat(GLOB.light_pirate_gangs)
- return ..()
-
-/// Dangerous Space Pirates ruleset
-/datum/dynamic_ruleset/midround/dangerous_pirates
- name = "Dangerous Space Pirates"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_HEAVY
- antag_flag = "Space Pirates"
- required_type = /mob/dead/observer
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 0
- weight = 3
- cost = 8
- minimum_players = 25
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/dangerous_pirates/acceptable(population=0, threat_level=0)
- if (SSmapping.is_planetary() || GLOB.heavy_pirate_gangs.len == 0)
- return FALSE
- return ..()
-
-/datum/dynamic_ruleset/midround/dangerous_pirates/execute()
- send_pirate_threat(GLOB.heavy_pirate_gangs)
- return ..()
-
-/// Midround Obsessed Ruleset (From Living)
-/datum/dynamic_ruleset/midround/from_living/obsessed
- name = "Obsessed"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/obsessed
- antag_flag = ROLE_OBSESSED
- restricted_roles = list(
- JOB_AI,
- JOB_CYBORG,
- ROLE_POSITRONIC_BRAIN,
- )
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 4
- cost = 3 // Doesn't have the same impact on rounds as revenants, dragons, sentient disease (10) or syndicate infiltrators (5).
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_living/obsessed/trim_candidates()
- ..()
- candidates = living_players
- for(var/mob/living/carbon/human/candidate in candidates)
- if( \
- !candidate.get_organ_by_type(/obj/item/organ/internal/brain) \
- || candidate.mind.has_antag_datum(/datum/antagonist/obsessed) \
- || candidate.stat == DEAD \
- || !(ROLE_OBSESSED in candidate.client?.prefs?.be_special) \
- || !candidate.mind.assigned_role \
- )
- candidates -= candidate
-
-/datum/dynamic_ruleset/midround/from_living/obsessed/execute()
- var/mob/living/carbon/human/obsessed = pick_n_take(candidates)
- obsessed.gain_trauma(/datum/brain_trauma/special/obsessed)
- message_admins("[ADMIN_LOOKUPFLW(obsessed)] has been made Obsessed by the midround ruleset.")
- log_game("[key_name(obsessed)] was made Obsessed by the midround ruleset.")
- return TRUE
-
-/// Midround Space Changeling Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround
- name = "Space Changeling"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/changeling/space
- antag_flag = ROLE_CHANGELING_MIDROUND
- antag_flag_override = ROLE_CHANGELING
- required_type = /mob/dead/observer
- required_enemies = list(2,2,1,1,1,1,1,0,0,0)
- required_candidates = 1
- weight = 3
- cost = 7
- minimum_players = 15
- repeatable = TRUE
-
-/datum/dynamic_ruleset/midround/from_ghosts/changeling_midround/generate_ruleset_body(mob/applicant)
- var/body = generate_changeling_meteor(applicant)
- message_admins("[ADMIN_LOOKUPFLW(body)] has been made into a space changeling by the midround ruleset.")
- log_dynamic("[key_name(body)] was spawned as a space changeling by the midround ruleset.")
- return body
-
-/// Midround Paradox Clone Ruleset (From Ghosts)
-/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone
- name = "Paradox Clone"
- midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/paradox_clone
- antag_flag = ROLE_PARADOX_CLONE
- enemy_roles = list(
- JOB_CAPTAIN,
- JOB_DETECTIVE,
- JOB_HEAD_OF_SECURITY,
- JOB_SECURITY_OFFICER,
- JOB_WARDEN,
- )
- required_enemies = list(2, 2, 1, 1, 1, 1, 1, 0, 0, 0)
- required_candidates = 1
- weight = 4
- cost = 3
- repeatable = TRUE
- var/list/possible_spawns = list() ///places the antag can spawn
-
-/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/forget_startup()
- possible_spawns = list()
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/execute()
- possible_spawns += find_maintenance_spawn(atmos_sensitive = TRUE, require_darkness = FALSE)
- if(!possible_spawns.len)
- return MAP_ERROR
- return ..()
-
-/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/generate_ruleset_body(mob/applicant)
- var/datum/mind/player_mind = new /datum/mind(applicant.key)
- player_mind.active = TRUE
-
- var/mob/living/carbon/human/clone_victim = find_original()
- var/mob/living/carbon/human/clone = clone_victim.make_full_human_copy(pick(possible_spawns))
- player_mind.transfer_to(clone)
-
- var/datum/antagonist/paradox_clone/new_datum = player_mind.add_antag_datum(/datum/antagonist/paradox_clone)
- new_datum.original_ref = WEAKREF(clone_victim.mind)
- new_datum.setup_clone()
-
- playsound(clone, 'sound/weapons/zapbang.ogg', 30, TRUE)
- new /obj/item/storage/toolbox/mechanical(clone.loc) //so they dont get stuck in maints
-
- message_admins("[ADMIN_LOOKUPFLW(clone)] has been made into a Paradox Clone by the midround ruleset.")
- clone.log_message("was spawned as a Paradox Clone of [key_name(clone)] by the midround ruleset.", LOG_GAME)
-
- return clone
-
-/**
- * Trims through GLOB.player_list and finds a target
- * Returns a single human victim, if none is possible then returns null.
- */
-/datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/proc/find_original()
- var/list/possible_targets = list()
-
- for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(!player.client || !player.mind || player.stat)
- continue
- if(!(player.mind.assigned_role.job_flags & JOB_CREW_MEMBER))
- continue
- possible_targets += player
-
- if(possible_targets.len)
- return pick(possible_targets)
- return FALSE
-
-#undef MALF_ION_PROB
-#undef REPLACE_LAW_WITH_ION_PROB
diff --git a/code/game/gamemodes/dynamic/dynamic_simulations.dm b/code/game/gamemodes/dynamic/dynamic_simulations.dm
deleted file mode 100644
index 63da54becee..00000000000
--- a/code/game/gamemodes/dynamic/dynamic_simulations.dm
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifdef TESTING
-/datum/dynamic_simulation
- var/datum/game_mode/dynamic/gamemode
- var/datum/dynamic_simulation_config/config
- var/list/mock_candidates = list()
-
-/datum/dynamic_simulation/proc/initialize_gamemode(forced_threat)
- gamemode = new
-
- if (forced_threat)
- gamemode.create_threat(forced_threat)
- else
- gamemode.generate_threat()
-
- gamemode.generate_budgets()
- gamemode.set_cooldowns()
-
-/datum/dynamic_simulation/proc/create_candidates(players)
- GLOB.new_player_list.Cut()
-
- for (var/_ in 1 to players)
- var/mob/dead/new_player/mock_new_player = new
- mock_new_player.ready = PLAYER_READY_TO_PLAY
-
- var/datum/mind/mock_mind = new
- mock_new_player.mind = mock_mind
-
- var/datum/client_interface/mock_client = new
-
- var/datum/preferences/prefs = new
- var/list/be_special = list()
- for (var/special_role in GLOB.special_roles)
- be_special += special_role
-
- prefs.be_special = be_special
- mock_client.prefs = prefs
-
- mock_new_player.mock_client = mock_client
-
- mock_candidates += mock_new_player
-
-/datum/dynamic_simulation/proc/simulate(datum/dynamic_simulation_config/config)
- src.config = config
-
- initialize_gamemode(config.forced_threat_level)
- create_candidates(config.roundstart_players)
- gamemode.pre_setup()
-
- var/total_antags = 0
- for (var/_ruleset in gamemode.executed_rules)
- var/datum/dynamic_ruleset/ruleset = _ruleset
- total_antags += ruleset.assigned.len
-
- return list(
- "roundstart_players" = config.roundstart_players,
- "threat_level" = gamemode.threat_level,
- "snapshot" = list(
- "antag_percent" = total_antags / config.roundstart_players,
- "remaining_threat" = gamemode.mid_round_budget,
- "rulesets" = gamemode.executed_rules.Copy(),
- ),
- )
-
-/datum/dynamic_simulation_config
- /// How many players round start should there be?
- var/roundstart_players
-
- /// Optional, force this threat level instead of picking randomly through the lorentz distribution
- var/forced_threat_level
-
-/client/proc/run_dynamic_simulations()
- set name = "Run Dynamic Simulations"
- set category = "Debug"
-
- var/simulations = input(usr, "Enter number of simulations") as num
- var/roundstart_players = input(usr, "Enter number of round start players") as num
- var/forced_threat_level = input(usr, "Enter forced threat level, if you want one") as num | null
-
- SSticker.mode = new /datum/game_mode/dynamic
- message_admins("Running dynamic simulations...")
-
- var/list/outputs = list()
-
- var/datum/dynamic_simulation_config/dynamic_config = new
-
- if (roundstart_players)
- dynamic_config.roundstart_players = roundstart_players
-
- if (forced_threat_level)
- dynamic_config.forced_threat_level = forced_threat_level
-
- for (var/count in 1 to simulations)
- var/datum/dynamic_simulation/simulator = new
- var/output = simulator.simulate(dynamic_config)
- outputs += list(output)
-
- if (CHECK_TICK)
- log_world("[count]/[simulations]")
-
- message_admins("Writing file...")
- WRITE_FILE(file("[GLOB.log_directory]/dynamic_simulations.json"), json_encode(outputs))
- message_admins("Writing complete.")
-
-/proc/export_dynamic_json_of(ruleset_list)
- var/list/export = list()
-
- for (var/_ruleset in ruleset_list)
- var/datum/dynamic_ruleset/ruleset = _ruleset
- export[ruleset.name] = list(
- "repeatable_weight_decrease" = ruleset.repeatable_weight_decrease,
- "weight" = ruleset.weight,
- "cost" = ruleset.cost,
- "scaling_cost" = ruleset.scaling_cost,
- "antag_cap" = ruleset.antag_cap,
- "pop_per_requirement" = ruleset.pop_per_requirement,
- "requirements" = ruleset.requirements,
- "base_prob" = ruleset.base_prob,
- )
-
- return export
-
-#endif
diff --git a/code/game/gamemodes/dynamic/readme.md b/code/game/gamemodes/dynamic/readme.md
deleted file mode 100644
index d663e88a239..00000000000
--- a/code/game/gamemodes/dynamic/readme.md
+++ /dev/null
@@ -1,194 +0,0 @@
-# Dynamic Mode
-
-## Roundstart
-
-Dynamic rolls threat based on a special sauce formula:
-
-> [dynamic_curve_width][/datum/controller/global_vars/var/dynamic_curve_width] \* tan((3.1416 \* (rand() - 0.5) \* 57.2957795)) + [dynamic_curve_centre][/datum/controller/global_vars/var/dynamic_curve_centre]
-
-This threat is split into two separate budgets--`round_start_budget` and `mid_round_budget`. For example, a round with 50 threat might be split into a 30 roundstart budget, and a 20 midround budget. The roundstart budget is used to apply antagonists applied on readied players when the roundstarts (`/datum/dynamic_ruleset/roundstart`). The midround budget is used for two types of rulesets:
-- `/datum/dynamic_ruleset/midround` - Rulesets that apply to either existing alive players, or to ghosts. Think Blob or Space Ninja, which poll ghosts asking if they want to play as these roles.
-- `/datum/dynamic_ruleset/latejoin` - Rulesets that apply to the next player that joins. Think Syndicate Infiltrator, which converts a player just joining an existing round into traitor.
-
-This split is done with a similar method, known as the ["lorentz distribution"](https://en.wikipedia.org/wiki/Cauchy_distribution), exists to create a bell curve that ensures that while most rounds will have a threat level around ~50, chaotic and tame rounds still exist for variety.
-
-The process of creating these numbers occurs in `/datum/game_mode/dynamic/proc/generate_threat` (for creating the threat level) and `/datum/game_mode/dynamic/proc/generate_budgets` (for splitting the threat level into budgets).
-
-## Deciding roundstart threats
-In `/datum/game_mode/dynamic/proc/roundstart()` (called when no admin chooses the rulesets explicitly), Dynamic uses the available roundstart budget to pick threats. This is done through the following system:
-
-- All roundstart rulesets (remember, `/datum/dynamic_ruleset/roundstart`) are put into an associative list with their weight as the values (`drafted_rules`).
-- Until there is either no roundstart budget left, or until there is no ruleset we can choose from with the available threat, a `pickweight` is done based on the drafted_rules. If the same threat is picked twice, it will "scale up". The meaning of this depends on the ruleset itself, using the `scaled_times` variable; traitors for instance will create more the higher they scale.
- - If a ruleset is chosen with the `HIGH_IMPACT_RULESET` in its `flags`, then all other `HIGH_IMPACT_RULESET`s will be removed from `drafted_rules`. This is so that only one can ever be chosen.
- - If a ruleset has `LONE_RULESET` in its `flags`, then it will be removed from `drafted_rules`. This is to ensure it will only ever be picked once. An example of this in use is Wizard, to avoid creating multiple wizards.
-- After all roundstart threats are chosen, `/datum/dynamic_ruleset/proc/picking_roundstart_rule` is called for each, passing in the ruleset and the number of times it is scaled.
- - In this stage, `pre_execute` is called, which is the function that will determine what players get what antagonists. If this function returns FALSE for whatever reason (in the case of an error), then its threat is refunded.
-
-After this process is done, any leftover roundstart threat will be given to the existing midround budget (done in `/datum/game_mode/dynamic/pre_setup()`).
-
-## Deciding midround threats
-
-### Frequency
-
-The frequency of midround threats is based on the midround threat of the round. The number of midround threats that will roll is `threat_level` / `threat_per_midround_roll` (configurable), rounded up. For example, if `threat_per_midround_roll` is set to 5, then for every 5 threat, one midround roll will be added. If you have 6 threat, with this configuration, you will get 2 midround rolls.
-
-These midround roll points are then equidistantly spaced across the round, starting from `midround_lower_bound` (configurable) to `midround_upper_bound` (configurable), with a +/- of `midround_roll_distance` (configurable).
-
-For example, if:
-1. `midround_lower_bound` is `10 MINUTES`
-2. `midround_upper_bound` is `100 MINUTES`
-3. `midround_roll_distance` is `3 MINUTES`
-4. You have 5 midround rolls for the round
-
-...then those 5 midround rolls will be placed equidistantly (meaning equally apart) across the first 10-100 minutes of the round. Every individual roll will then be adjusted to either be 3 minutes earlier, or 3 minutes later.
-
-### Threat variety
-
-Threats are split between **heavy** rulesets and **light** rulesets. A heavy ruleset includes major threats like space dragons or blobs, while light rulesets are ones that don't often cause shuttle calls when rolled, such as revenants or traitors (sleeper agents).
-
-When a midround roll occurs, the decision to choose between light or heavy depends on the current round time. If it is less than `midround_light_upper_bound` (configurable), then it is guaranteed to be a light ruleset. If it is more than `midround_heavy_lower_bound`, then it is guaranteed to be a heavy ruleset. If it is any point in between, it will interpolate the value between those. This means that the longer the round goes on, the more likely you are to get a heavy ruleset.
-
-If no heavy ruleset can run, such as not having enough threat, then a light ruleset is guaranteed to run.
-
-## Rule Processing
-
-Calls [rule_process][/datum/dynamic_ruleset/proc/rule_process] on every rule which is in the current_rules list.
-Every sixty seconds, update_playercounts()
-Midround injection time is checked against world.time to see if an injection should happen.
-If midround injection time is lower than world.time, it updates playercounts again, then tries to inject and generates a new cooldown regardless of whether a rule is picked.
-
-## Latejoin
-
-make_antag_chance(newPlayer) -> (For each latespawn rule...)
--> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE)
-**If true, add to drafted rules
-**NOTE that acceptable uses threat_level not threat!
-**NOTE Latejoin timer is ONLY reset if at least one rule was drafted.
-**NOTE the new_player.dm AttemptLateSpawn() calls OnPostSetup for all roles (unless assigned role is MODE)
-
-(After collecting all draftble rules...)
--> picking_latejoin_ruleset(drafted_rules) -> spend threat -> ruleset.execute()
-
-## Midround
-
-process() -> (For each midround rule...
--> acceptable(living players, threat_level) -> trim_candidates() -> ready(forced=FALSE)
-(After collecting all draftble rules...)
--> picking_midround_ruleset(drafted_rules) -> spend threat -> ruleset.execute()
-
-## Forced
-
-For latejoin, it simply sets forced_latejoin_rule
-make_antag_chance(newPlayer) -> trim_candidates() -> ready(forced=TRUE) **NOTE no acceptable() call
-
-For midround, calls the below proc with forced = TRUE
-picking_specific_rule(ruletype,forced) -> forced OR acceptable(living_players, threat_level) -> trim_candidates() -> ready(forced) -> spend threat -> execute()
-**NOTE specific rule can be called by RS traitor->MR autotraitor w/ forced=FALSE
-**NOTE that due to short circuiting acceptable() need not be called if forced.
-
-## Ruleset
-
-acceptable(population,threat) just checks if enough threat_level for population indice.
-**NOTE that we currently only send threat_level as the second arg, not threat.
-ready(forced) checks if enough candidates and calls the map's map_ruleset(dynamic_ruleset) at the parent level
-
-trim_candidates() varies significantly according to the ruleset type
-Roundstart: All candidates are new_player mobs. Check them for standard stuff: connected, desire role, not banned, etc.
-**NOTE Roundstart deals with both candidates (trimmed list of valid players) and mode.candidates (everyone readied up). Don't confuse them!
-Latejoin: Only one candidate, the latejoiner. Standard checks.
-Midround: Instead of building a single list candidates, candidates contains four lists: living, dead, observing, and living antags. Standard checks in trim_list(list).
-
-Midround - Rulesets have additional types
-/from_ghosts: execute() -> send_applications() -> review_applications() -> finish_applications() -> finish_setup(mob/newcharacter, index) -> setup_role(role)
-**NOTE: execute() here adds dead players and observers to candidates list
-
-## Configuration and variables
-
-### Configuration
-Configuration can be done through a `config/dynamic.json` file. One is provided as example in the codebase. This config file, loaded in `/datum/game_mode/dynamic/pre_setup()`, directly overrides the values in the codebase, and so is perfect for making some rulesets harder/easier to get, turning them off completely, changing how much they cost, etc.
-
-The format of this file is:
-```json
-{
- "Dynamic": {
- /* Configuration in here will directly override `/datum/game_mode/dynamic` itself. */
- /* Keys are variable names, values are their new values. */
- },
-
- "Roundstart": {
- /* Configuration in here will apply to `/datum/dynamic_ruleset/roundstart` instances. */
- /* Keys are the ruleset names, values are another associative list with keys being variable names and values being new values. */
- "Wizard": {
- /* I, a head admin, have died to wizard, and so I made it cost a lot more threat than it does in the codebase. */
- "cost": 80
- }
- },
-
- "Midround": {
- /* Same as "Roundstart", but for `/datum/dynamic_ruleset/midround` instead. */
- },
-
- "Latejoin": {
- /* Same as "Roundstart", but for `/datum/dynamic_ruleset/latejoin` instead. */
- },
-
- "Station": {
- /* Special threat reductions for dangerous station traits. Traits are selected before dynamic, so traits will always */
- /* reduce threat even if there's no threat for it available. Only "cost" can be modified */
- }
-}
-```
-
-Note: Comments are not possible in this format, and are just in this document for the sake of readability.
-
-### Rulesets
-Rulesets have the following variables notable to developers and those interested in tuning.
-
-- `required_candidates` - The number of people that *must be willing* (in their preferences) to be an antagonist with this ruleset. If the candidates do not meet this requirement, then the ruleset will not bother to be drafted.
-- `antag_cap` - Judges the amount of antagonists to apply, for both solo and teams. Note that some antagonists (such as traitors, lings, heretics, etc) will add more based on how many times they've been scaled. Written as a linear equation--ceil(x/denominator) + offset, or as a fixed constant. If written as a linear equation, will be in the form of `list("denominator" = denominator, "offset" = offset)`.
- - Examples include:
- - Traitor: `antag_cap = list("denominator" = 24)`. This means that for every 24 players, 1 traitor will be added (assuming no scaling).
- - Nuclear Emergency: `antag_cap = list("denominator" = 18, "offset" = 1)`. For every 18 players, 1 nuke op will be added. Starts at 1, meaning at 30 players, 3 nuke ops will be created, rather than 2.
- - Revolution: `antag_cap = 3`. There will always be 3 rev-heads, no matter what.
-- `minimum_required_age` - The minimum age in order to apply for the ruleset.
-- `weight` - How likely this ruleset is to be picked. A higher weight results in a higher chance of drafting.
-- `cost` - The initial cost of the ruleset. This cost is taken from either the roundstart or midround budget, depending on the ruleset.
-- `scaling_cost` - Cost for every *additional* application of this ruleset.
- - Suppose traitors has a `cost` of 8, and a `scaling_cost` of 5. This means that buying 1 application of the traitor ruleset costs 8 threat, but buying two costs 13 (8 + 5). Buying it a third time is 18 (8 + 5 + 5), etc.
-- `pop_per_requirement` - The range of population each value in `requirements` represents. By default, this is 6.
- - If the value is five the range is 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+.
- - If it is six the range is 0-5, 6-11, 12-17, 18-23, 24-29, 30-35, 36-41, 42-47, 48-53, 54+.
- - If it is seven the range is 0-6, 7-13, 14-20, 21-27, 28-34, 35-41, 42-48, 49-55, 56-62, 63+.
-- `requirements` - A list that represents, per population range (see: `pop_per_requirement`), how much threat is required to *consider* this ruleset. This is independent of how much it'll actually cost. This uses *threat level*, not the budget--meaning if a round has 50 threat level, but only 10 points of round start threat, a ruleset with a requirement of 40 can still be picked if it can be bought.
- - Suppose wizard has a `requirements` of `list(90,90,70,40,30,20,10,10,10,10)`. This means that, at 0-5 and 6-11 players, A station must have 90 threat in order for a wizard to be possible. At 12-17, 70 threat is required instead, etc.
-- `restricted_roles` - A list of jobs that *can't* be drafted by this ruleset. For example, cyborgs cannot be changelings, and so are in the `restricted_roles`.
-- `protected_roles` - Serves the same purpose of `restricted_roles`, except it can be turned off through configuration (`protect_roles_from_antagonist`). For example, security officers *shouldn't* be made traitor, so they are in Traitor's `protected_roles`.
- - When considering putting a role in `protected_roles` or `restricted_roles`, the rule of thumb is if it is *technically infeasible* to support that job in that role. There's no *technical* reason a security officer can't be a traitor, and so they are simply in `protected_roles`. There *are* technical reasons a cyborg can't be a changeling, so they are in `restricted_roles` instead.
-
-This is not a complete list--search "configurable" in this README to learn more.
-
-### Dynamic
-
-The "Dynamic" key has the following configurable values:
-- `pop_per_requirement` - The default value of `pop_per_requirement` for any ruleset that does not explicitly set it. Defaults to 6.
-- `latejoin_delay_min`, `latejoin_delay_max` - The time range, in deciseconds (take your seconds, and multiply by 10), for a latejoin to attempt rolling. Once this timer is finished, a new one will be created within the same range.
- - Suppose you have a `latejoin_delay_min` of 600 (60 seconds, 1 minute) and a `latejoin_delay_max` of 1800 (180 seconds, 3 minutes). Once the round starts, a random number in this range will be picked--let's suppose 1.5 minutes. After 1.5 minutes, Dynamic will decide if a latejoin threat should be created (a probability of `/datum/game_mode/dynamic/proc/get_injection_chance()`). Regardless of its decision, a new timer will be started within the range of 1 to 3 minutes, repeatedly.
-- `threat_curve_centre` - A number between -5 and +5. A negative value will give a more peaceful round and a positive value will give a round with higher threat.
-- `threat_curve_width` - A number between 0.5 and 4. Higher value will favour extreme rounds and lower value rounds closer to the average.
-- `roundstart_split_curve_centre` - A number between -5 and +5. Equivalent to threat_curve_centre, but for the budget split. A negative value will weigh towards midround rulesets, and a positive value will weight towards roundstart ones.
-- `roundstart_split_curve_width` - A number between 0.5 and 4. Equivalent to threat_curve_width, but for the budget split. Higher value will favour more variance in splits and lower value rounds closer to the average.
-- `random_event_hijack_minimum` - The minimum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking))
-- `random_event_hijack_maximum` - The maximum amount of time for antag random events to be hijacked. (See [Random Event Hijacking](#random-event-hijacking))
-- `hijacked_random_event_injection_chance` - The amount of injection chance to give to Dynamic when a random event is hijacked. (See [Random Event Hijacking](#random-event-hijacking))
-- `max_threat_level` - Sets the maximum amount of threat that can be rolled. Defaults to 100. You should only use this to *lower* the maximum threat, as raising it higher will not do anything.
-
-## Random Event "Hijacking"
-Random events have the potential to be hijacked by Dynamic to keep the pace of midround injections, while also allowing greenshifts to contain some antagonists.
-
-`/datum/round_event_control/dynamic_should_hijack` is a variable to random events to allow Dynamic to hijack them, and defaults to FALSE. This is set to TRUE for random events that spawn antagonists.
-
-In `/datum/game_mode/dynamic/on_pre_random_event` (in `dynamic_hijacking.dm`), Dynamic hooks to random events. If the `dynamic_should_hijack` variable is TRUE, the following sequence of events occurs:
-
-![Flow chart to describe the chain of events for Dynamic 2021 to take](https://github.com/tgstation/documentation-assets/blob/main/dynamic/random_event_hijacking.png)
-
-`n` is a random value between `random_event_hijack_minimum` and `random_event_hijack_maximum`. Heavy injection chance, should it need to be raised, is increased by `hijacked_random_event_injection_chance_modifier`.
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
deleted file mode 100644
index 39dcb81920a..00000000000
--- a/code/game/gamemodes/game_mode.dm
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-/*
- * GAMEMODES (by Rastaf0)
- *
- * In the new mode system all special roles are fully supported.
- * You can have proper wizards/traitors/changelings/cultists during any mode.
- * Only two things really depends on gamemode:
- * 1. Starting roles, equipment and preparations
- * 2. Conditions of finishing the round.
- *
- */
-
-
-/datum/game_mode
-
-///Attempts to select players for special roles the mode might have.
-/datum/game_mode/proc/pre_setup()
- return TRUE
-
-///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things
-/datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report.
- if(!report)
- report = !CONFIG_GET(flag/no_intercept_report)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(display_roundstart_logout_report)), ROUNDSTART_LOGOUT_REPORT_TIME)
-
- if(CONFIG_GET(flag/reopen_roundstart_suicide_roles))
- var/delay = CONFIG_GET(number/reopen_roundstart_suicide_roles_delay)
- if(delay)
- delay = (delay SECONDS)
- else
- delay = (4 MINUTES) //default to 4 minutes if the delay isn't defined.
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reopen_roundstart_suicide_roles)), delay)
-
- if(SSdbcore.Connect())
- var/list/to_set = list()
- var/arguments = list()
- if(SSticker.mode)
- to_set += "game_mode = :game_mode"
- arguments["game_mode"] = SSticker.mode
- if(GLOB.revdata.originmastercommit)
- to_set += "commit_hash = :commit_hash"
- arguments["commit_hash"] = GLOB.revdata.originmastercommit
- if(to_set.len)
- arguments["round_id"] = GLOB.round_id
- var/datum/db_query/query_round_game_mode = SSdbcore.NewQuery(
- "UPDATE [format_table_name("round")] SET [to_set.Join(", ")] WHERE id = :round_id",
- arguments
- )
- query_round_game_mode.Execute()
- qdel(query_round_game_mode)
- return TRUE
-
-
-///Handles late-join antag assignments
-/datum/game_mode/proc/make_antag_chance(mob/living/carbon/human/character)
- return
-
-/// Checks if the round should be ending, called every ticker tick
-/datum/game_mode/proc/check_finished()
- if(!SSticker.setup_done)
- return FALSE
- if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME))
- return TRUE
- if(GLOB.station_was_nuked)
- return TRUE
- if(GLOB.revolutionary_win)
- return TRUE
- return FALSE
-
-/*
- * Generate a list of station goals available to purchase to report to the crew.
- *
- * Returns a formatted string all station goals that are available to the station.
- */
-/datum/game_mode/proc/generate_station_goal_report()
- if(!GLOB.station_goals.len)
- return
- . = "Special Orders for [station_name()]: "
- var/list/goal_reports = list()
- for(var/datum/station_goal/station_goal as anything in GLOB.station_goals)
- station_goal.on_report()
- goal_reports += station_goal.get_report()
-
- . += goal_reports.Join(" ")
- return
-
-/*
- * Generate a list of active station traits to report to the crew.
- *
- * Returns a formatted string of all station traits (that are shown) affecting the station.
- */
-/datum/game_mode/proc/generate_station_trait_report()
- var/trait_list_string = ""
- for(var/datum/station_trait/station_trait as anything in SSstation.station_traits)
- if(!station_trait.show_in_report)
- continue
- trait_list_string += "[station_trait.get_report()] "
- if(trait_list_string != "")
- return "Identified shift divergencies: " + trait_list_string
- return
-
-/datum/game_mode/proc/generate_report_footnote()
- var/footnote_pile = ""
-
- for(var/datum/command_footnote/footnote in SScommunications.command_report_footnotes)
- footnote_pile += "[footnote.message] "
- footnote_pile += "[footnote.signature] "
- footnote_pile += " "
-
- return "Additional Notes: " + footnote_pile
-
-/proc/reopen_roundstart_suicide_roles()
- var/include_command = CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_positions)
- var/list/reopened_jobs = list()
-
- for(var/mob/living/quitter in GLOB.suicided_mob_list)
- var/datum/job/job = SSjob.GetJob(quitter.job)
- if(!job || !(job.job_flags & JOB_REOPEN_ON_ROUNDSTART_LOSS))
- continue
- if(!include_command && job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
- continue
- job.current_positions = max(job.current_positions - 1, 0)
- reopened_jobs += quitter.job
-
- if(CONFIG_GET(flag/reopen_roundstart_suicide_roles_command_report))
- if(reopened_jobs.len)
- var/reopened_job_report_positions
- for(var/dead_dudes_job in reopened_jobs)
- reopened_job_report_positions = "[reopened_job_report_positions ? "[reopened_job_report_positions]\n":""][dead_dudes_job]"
-
- var/suicide_command_report = "[command_name()] Human Resources Board \
- Notice of Personnel Change \
- To personnel management staff aboard [station_name()]: \
- Our medical staff have detected a series of anomalies in the vital sensors \
- of some of the staff aboard your station. \
- Further investigation into the situation on our end resulted in us discovering \
- a series of rather... unforturnate decisions that were made on the part of said staff. \
- As such, we have taken the liberty to automatically reopen employment opportunities for the positions of the crew members \
- who have decided not to partake in our research. We will be forwarding their cases to our employment review board \
- to determine their eligibility for continued service with the company (and of course the \
- continued storage of cloning records within the central medical backup server.) \
- The following positions have been reopened on our behalf: \
- [reopened_job_report_positions] "
-
- print_command_report(suicide_command_report, "Central Command Personnel Update")
-
-//////////////////////////
-//Reports player logouts//
-//////////////////////////
-/proc/display_roundstart_logout_report()
- var/list/msg = list("[span_boldnotice("Roundstart logout report")]\n\n")
- for(var/i in GLOB.mob_living_list)
- var/mob/living/L = i
- var/mob/living/carbon/C = L
- if (istype(C) && !C.last_mind)
- continue // never had a client
-
- if(L.ckey && !GLOB.directory[L.ckey])
- msg += "[L.name] ([L.key]), the [L.job] (Disconnected )\n"
-
-
- if(L.ckey && L.client)
- var/failed = FALSE
- if(L.client.inactivity >= ROUNDSTART_LOGOUT_AFK_THRESHOLD) //Connected, but inactive (alt+tabbed or something)
- msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive )\n"
- failed = TRUE //AFK client
- if(!failed && L.stat)
- if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider
- msg += "[L.name] ([L.key]), the [L.job] ([span_boldannounce("Suicide")])\n"
- failed = TRUE //Disconnected client
- if(!failed && (L.stat == UNCONSCIOUS || L.stat == HARD_CRIT))
- msg += "[L.name] ([L.key]), the [L.job] (Dying)\n"
- failed = TRUE //Unconscious
- if(!failed && L.stat == DEAD)
- msg += "[L.name] ([L.key]), the [L.job] (Dead)\n"
- failed = TRUE //Dead
-
- continue //Happy connected client
- for(var/mob/dead/observer/D in GLOB.dead_mob_list)
- if(D.mind && D.mind.current == L)
- if(L.stat == DEAD)
- if(HAS_TRAIT(L, TRAIT_SUICIDED)) //Suicider
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Suicide")])\n"
- continue //Disconnected client
- else
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n"
- continue //Dead mob, ghost abandoned
- else
- if(D.can_reenter_corpse)
- continue //Adminghost, or cult/wizard ghost
- else
- msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] ([span_boldannounce("Ghosted")])\n"
- continue //Ghosted while alive
-
- var/concatenated_message = msg.Join()
- log_admin(concatenated_message)
- to_chat(GLOB.admins, concatenated_message)
-
-/datum/game_mode/proc/generate_station_goals(greenshift)
- var/goal_budget = greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)
- var/list/possible = subtypesof(/datum/station_goal)
- // Remove all goals that require space if space is not present
- if(SSmapping.is_planetary())
- for(var/datum/station_goal/goal as anything in possible)
- if(initial(goal.requires_space))
- possible -= goal
- var/goal_weights = 0
- while(possible.len && goal_weights < goal_budget)
- var/datum/station_goal/picked = pick_n_take(possible)
- goal_weights += initial(picked.weight)
- GLOB.station_goals += new picked
-
-//Set result and news report here
-/datum/game_mode/proc/set_round_result()
- SSticker.mode_result = "undefined"
- // Something nuked the station - it wasn't nuke ops (they set their own via their rulset)
- if(GLOB.station_was_nuked)
- SSticker.news_report = STATION_NUKED
- if(SSsupermatter_cascade.cascade_initiated)
- SSticker.news_report = SUPERMATTER_CASCADE
- // Only show this one if we have nothing better to show
- if(EMERGENCY_ESCAPED_OR_ENDGAMED && !SSticker.news_report)
- SSticker.news_report = SSshuttle.emergency?.is_hijacked() ? SHUTTLE_HIJACK : STATION_EVACUATED
-
-/// Mode specific admin panel.
-/datum/game_mode/proc/admin_panel()
- return
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 4a75abef9b1..ba0d7b931cd 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -1,5 +1,5 @@
GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list
-GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION
+GLOBAL_LIST_EMPTY(objectives) //NOVA EDIT ADDITION
/datum/objective
var/datum/mind/owner //The primary owner of the objective. !!SOMEWHAT DEPRECATED!! Prefer using 'team' for new code.
@@ -17,13 +17,13 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION
var/admin_grantable = FALSE
/datum/objective/New(text)
- GLOB.objectives += src //SKYRAT EDIT ADDITION
+ GLOB.objectives += src //NOVA EDIT ADDITION
if(text)
explanation_text = text
//Apparently objectives can be qdel'd. Learn a new thing every day
/datum/objective/Destroy()
- GLOB.objectives -= src //SKYRAT EDIT ADDITION
+ GLOB.objectives -= src //NOVA EDIT ADDITION
return ..()
/datum/objective/proc/get_owners() // Combine owner and team into a single list.
@@ -136,13 +136,13 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION
if(!HAS_TRAIT(SSstation, STATION_TRAIT_LATE_ARRIVALS) && istype(target_area, /area/shuttle/arrival))
return FALSE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(SSticker.IsRoundInProgress() && istype(target_area, /area/centcom/interlink))
return FALSE
if(!count_space_areas)
if(istype(target_area, /area/space) || istype(target_area, /area/ruin) || istype(target_area, /area/icemoon) || istype(target_area, /area/lavaland))
return FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
return TRUE
@@ -237,7 +237,7 @@ GLOBAL_LIST_EMPTY(objectives) //SKYRAT EDIT ADDITION
/datum/objective/assassinate/update_explanation_text()
..()
if(target?.current)
- explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] ONCE." //SKYRAT EDIT CHANGE
+ explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] ONCE." //NOVA EDIT CHANGE
else
explanation_text = "Free objective."
diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm
index 2240f220e48..cdb373f8712 100644
--- a/code/game/gamemodes/objective_items.dm
+++ b/code/game/gamemodes/objective_items.dm
@@ -312,15 +312,15 @@
/datum/objective_item/steal/hypo
//name = "the hypospray" // ORIGINAL
- name = "the Chief Medical Officer's hypospray" // SKYRAT EDIT CHANGE
+ name = "the Chief Medical Officer's hypospray" // NOVA EDIT CHANGE
//targetitem = /obj/item/reagent_containers/hypospray/cmo // ORIGINAL
- targetitem = /obj/item/hypospray/mkii/cmo // SKYRAT EDIT CHANGE
+ targetitem = /obj/item/hypospray/mkii/cmo // NOVA EDIT CHANGE
excludefromjob = list(JOB_CHIEF_MEDICAL_OFFICER)
item_owner = list(JOB_CHIEF_MEDICAL_OFFICER)
exists_on_map = TRUE
-/obj/item/hypospray/mkii/cmo/add_stealing_item_objective() // SKYRAT EDIT CHANGE
- return add_item_to_steal(src, /obj/item/hypospray/mkii/cmo) // SKYRAT EDIT CHANGE
+/obj/item/hypospray/mkii/cmo/add_stealing_item_objective() // NOVA EDIT CHANGE
+ return add_item_to_steal(src, /obj/item/hypospray/mkii/cmo) // NOVA EDIT CHANGE
/datum/objective_item/steal/nukedisc
name = "the nuclear authentication disk"
diff --git a/code/game/machinery/botlaunchpad.dm b/code/game/machinery/botlaunchpad.dm
index 5c0ba432d35..0744954257a 100644
--- a/code/game/machinery/botlaunchpad.dm
+++ b/code/game/machinery/botlaunchpad.dm
@@ -56,7 +56,7 @@
/obj/machinery/botpad/proc/recall(mob/living/user)
var/atom/our_bot = launched_bot?.resolve()
if(isnull(our_bot))
- user.balloon_alert(user, "no bots detected on the pad!")
+ user.balloon_alert(user, "no bots sent from the pad!")
return
user.balloon_alert(user, "bot sent back to pad")
if(isbasicbot(our_bot))
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 860c708ff59..f3008ca4ebc 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -6,7 +6,6 @@
use_power = ACTIVE_POWER_USE
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.02
layer = WALL_OBJ_LAYER
- plane = GAME_PLANE_UPPER
resistance_flags = FIRE_PROOF
damage_deflection = 12
armor_type = /datum/armor/machinery_camera
@@ -342,7 +341,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0)
return
// OTHER
- if(istype(attacking_item, /obj/item/modular_computer/pda))
+ if(istype(attacking_item, /obj/item/modular_computer))
var/itemname = ""
var/info = ""
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index f73a786865c..ec01c2365f8 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -8,8 +8,7 @@
/obj/machinery/camera/process()
// motion camera event loop
if(!isMotion())
- . = PROCESS_KILL
- return
+ return PROCESS_KILL
if(machine_stat & EMPED)
return
if (detectTime > 0)
diff --git a/code/game/machinery/camera/trackable.dm b/code/game/machinery/camera/trackable.dm
index 8aedd1b80a8..884f38f750b 100644
--- a/code/game/machinery/camera/trackable.dm
+++ b/code/game/machinery/camera/trackable.dm
@@ -26,7 +26,7 @@
tracking_holder = source
RegisterSignal(tracking_holder, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(cancel_target_tracking))
-/datum/trackable/Destroy(force, ...)
+/datum/trackable/Destroy(force)
tracking_holder = null
tracked_mob = null
STOP_PROCESSING(SSprocessing, src)
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 54640e6490b..8d3e4b3e661 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -9,7 +9,7 @@
var/obj/item/stock_parts/cell/charging = null
var/charge_rate = 250
-/* OVERWRITTEN IN modular_skyrat\modules\aesthetics\cells\cell.dm
+/* OVERWRITTEN IN modular_nova\modules\aesthetics\cells\cell.dm
/obj/machinery/cell_charger/update_overlays()
. = ..()
@@ -54,12 +54,12 @@
if(charging)
to_chat(user, span_warning("There is already a cell in the charger!"))
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/obj/item/stock_parts/cell/inserting_cell = W
if(inserting_cell.chargerate <= 0)
to_chat(user, span_warning("[inserting_cell] cannot be recharged!"))
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
else
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
if(!isarea(a))
diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm
index fd2ee08e181..a9954a71f12 100644
--- a/code/game/machinery/computer/_computer.dm
+++ b/code/game/machinery/computer/_computer.dm
@@ -135,11 +135,11 @@
/obj/machinery/computer/ui_interact(mob/user, datum/tgui/ui)
SHOULD_CALL_PARENT(TRUE)
- //SKYRAT EDIT ADDITON BEGIN - AESTHETICS
+ //NOVA EDIT ADDITON BEGIN - AESTHETICS
if(clicksound && world.time > next_clicksound && isliving(user))
next_clicksound = world.time + rand(50, 150)
playsound(src, get_sfx_skyrat(clicksound), clickvol)
- //SKYRAT EDIT END
+ //NOVA EDIT END
. = ..()
update_use_power(ACTIVE_POWER_USE)
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index d5a635a8ac1..0914d91739b 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -195,10 +195,10 @@
var/obj/machinery/new_machine = new circuit.build_path(loc)
new_machine.setDir(dir)
transfer_fingerprints_to(new_machine)
- // SKYRAT EDIT ADDITION BEGIN - Connecting Computers
+ // NOVA EDIT ADDITION BEGIN - Connecting Computers
for(var/obj/machinery/computer/selected in range(1,src))
selected.update_overlays()
- // SKYRAT EDIT ADDITION END - Connecting Computers
+ // NOVA EDIT ADDITION END - Connecting Computers
if(istype(new_machine, /obj/machinery/computer))
var/obj/machinery/computer/new_computer = new_machine
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index f32eff91c4e..8574ca15c42 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -5,13 +5,13 @@
#define STATE_CHANGING_STATUS "changing_status"
#define STATE_MAIN "main"
#define STATE_MESSAGES "messages"
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
GLOBAL_VAR_INIT(cops_arrived, FALSE)
#define EMERGENCY_RESPONSE_POLICE "WOOP WOOP THAT'S THE SOUND OF THE POLICE"
#define EMERGENCY_RESPONSE_ATMOS "DISCO INFERNO"
#define EMERGENCY_RESPONSE_EMT "AAAAAUGH, I'M DYING, I NEEEEEEEEEED A MEDIC BAG"
#define EMERGENCY_RESPONSE_EMAG "AYO THE PIZZA HERE"
-//SKYRAT EDIT END
+//NOVA EDIT END
// The communications computer
/obj/machinery/computer/communications
@@ -118,11 +118,11 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
return TRUE
return authenticated
-/// Skyrat Edit Start - Are we the AI?
+/// NOVA EDIT Start - Are we the AI?
/obj/machinery/computer/communications/proc/authenticated_as_ai_or_captain(mob/user)
if (isAI(user))
return TRUE
- return ACCESS_CAPTAIN in authorize_access //Skyrat Edit End
+ return ACCESS_CAPTAIN in authorize_access //NOVA EDIT End
/obj/machinery/computer/communications/attackby(obj/I, mob/user, params)
if(isidcard(I))
@@ -145,7 +145,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
caller_card.use_charge(user)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(summon_battlecruiser), caller_card.team), rand(20 SECONDS, 1 MINUTES))
playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE)
- priority_announce("Attention crew: deep-space sensors detect a Syndicate battlecruiser-class signature subspace rift forming near your station. Estimated time until arrival: three to five minutes.", "[command_name()] High-Priority Update") //SKYRAT EDIT ADDITION: announcement on battlecruiser call
+ priority_announce("Attention crew: deep-space sensors detect a Syndicate battlecruiser-class signature subspace rift forming near your station. Estimated time until arrival: three to five minutes.", "[command_name()] High-Priority Update") //NOVA EDIT ADDITION: announcement on battlecruiser call
return TRUE
if(obj_flags & EMAGGED)
@@ -215,7 +215,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
return
var/new_sec_level = SSsecurity_level.text_level_to_number(params["newSecurityLevel"])
- if (new_sec_level < SEC_LEVEL_GREEN || new_sec_level > SEC_LEVEL_AMBER) //SKYRAT EDIT CHANGE - ALERTS
+ if (new_sec_level < SEC_LEVEL_GREEN || new_sec_level > SEC_LEVEL_AMBER) //NOVA EDIT CHANGE - ALERTS
return
if (SSsecurity_level.get_current_level_as_number() == new_sec_level)
return
@@ -243,7 +243,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
return
make_announcement(usr)
if ("messageAssociates")
- if (!authenticated_as_ai_or_captain(usr)) //Skyrat edit | Allows AI and Captain to send messages
+ if (!authenticated_as_ai_or_captain(usr)) //NOVA EDIT | Allows AI and Captain to send messages
return
if (!COOLDOWN_FINISHED(src, important_action_cooldown))
return
@@ -404,7 +404,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
post_status("alert", "bluealert")
if(SEC_LEVEL_GREEN)
post_status("alert", "greenalert")
- // SKYRAT EDIT ADD START - Alert Levels
+ // NOVA EDIT ADD START - Alert Levels
if(SEC_LEVEL_VIOLET)
post_status("alert", "violetalert")
if(SEC_LEVEL_ORANGE)
@@ -413,7 +413,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
post_status("alert", "amberalert")
if(SEC_LEVEL_GAMMA)
post_status("alert", "gammaalert")
- // SKYRAT EDIT ADD END - Alert Levels
+ // NOVA EDIT ADD END - Alert Levels
else
post_status("alert", picture)
@@ -482,7 +482,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
SSjob.safe_code_requested = TRUE
SSjob.safe_code_timer_id = addtimer(CALLBACK(SSjob, TYPE_PROC_REF(/datum/controller/subsystem/job, send_spare_id_safe_code), pod_location), 120 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
minor_announce("Due to staff shortages, your station has been approved for delivery of access codes to secure the Captain's Spare ID. Delivery via drop pod at [get_area(pod_location)]. ETA 120 seconds.")
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if ("callThePolice")
if(!pre_911_check(usr))
return
@@ -521,7 +521,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
toggle_eng_override()
usr.log_message("enabled airlock engineering override.", LOG_GAME)
deadchat_broadcast(" enabled airlock engineering override at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/obj/machinery/computer/communications/proc/emergency_access_cooldown(mob/user)
if(toggle_uses == toggle_max_uses) //you have used up free uses already, do it one more time and start a cooldown
to_chat(user, span_warning("This was your last free use without cooldown, you will not be able to use this again for [DisplayTimeText(EMERGENCY_ACCESS_COOLDOWN)]."))
@@ -552,9 +552,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
if(SScommunications.soft_filtering)
payload["is_filtered"] = TRUE
- var/name_to_send = "[CONFIG_GET(string/cross_comms_name)]([station_name()])" //SKYRAT EDIT ADDITION
+ var/name_to_send = "[CONFIG_GET(string/cross_comms_name)]([station_name()])" //NOVA EDIT ADDITION
- send2otherserver(html_decode(name_to_send), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) //SKYRAT EDIT END
+ send2otherserver(html_decode(name_to_send), message, "Comms_Console", destination == "all" ? null : list(destination), additional_data = payload) //NOVA EDIT END
minor_announce(message, title = "Outgoing message to allied station")
usr.log_talk(message, LOG_SAY, tag = "message to the other server")
message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server\[s].")
@@ -603,7 +603,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
data["canSendToSectors"] = FALSE
data["canSetAlertLevel"] = FALSE
data["canToggleEmergencyAccess"] = FALSE
- data["canToggleEngineeringOverride"] = FALSE //SKYRAT EDIT - Engineering Override
+ data["canToggleEngineeringOverride"] = FALSE //NOVA EDIT - Engineering Override
data["importantActionReady"] = COOLDOWN_FINISHED(src, important_action_cooldown)
data["shuttleCalled"] = FALSE
data["shuttleLastCalled"] = FALSE
@@ -635,8 +635,8 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
if (authenticated_as_silicon_or_captain(user))
data["canToggleEmergencyAccess"] = TRUE
data["emergencyAccess"] = GLOB.emergency_access
- data["canToggleEngineeringOverride"] = TRUE //SKYRAT EDIT - Engineering Override Toggle
- data["engineeringOverride"] = GLOB.force_eng_override //SKYRAT EDIT - Engineering Override Toggle
+ data["canToggleEngineeringOverride"] = TRUE //NOVA EDIT - Engineering Override Toggle
+ data["engineeringOverride"] = GLOB.force_eng_override //NOVA EDIT - Engineering Override Toggle
data["alertLevelTick"] = alert_level_tick
data["canMakeAnnouncement"] = TRUE
data["canSetAlertLevel"] = issilicon(user) ? "NO_SWIPE_NEEDED" : "SWIPE_NEEDED"
@@ -644,7 +644,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
data["canMakeAnnouncement"] = TRUE
if (authenticated_as_ai_or_captain(user))
- data["canMessageAssociates"] = TRUE //Skyrat Edit | Allows AI to report to CC in the event of there being no command alive/to begin with
+ data["canMessageAssociates"] = TRUE //NOVA EDIT | Allows AI to report to CC in the event of there being no command alive/to begin with
if (SSshuttle.emergency.mode != SHUTTLE_IDLE && SSshuttle.emergency.mode != SHUTTLE_RECALL)
data["shuttleCalled"] = TRUE
@@ -931,7 +931,6 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
hacker.log_message("hacked a communications console, resulting in: [picked_option].", LOG_GAME, log_globally = TRUE)
switch(picked_option)
if(HACK_PIRATE) // Triggers pirates, which the crew may be able to pay off to prevent
- var/datum/game_mode/dynamic/dynamic = SSticker.mode
var/list/pirate_rulesets = list(
/datum/dynamic_ruleset/midround/pirates,
/datum/dynamic_ruleset/midround/dangerous_pirates,
@@ -940,7 +939,7 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
"Attention crew: sector monitoring reports a massive jump-trace from an enemy vessel destined for your system. Prepare for imminent hostile contact.",
"[command_name()] High-Priority Update",
)
- dynamic.picking_specific_rule(pick(pirate_rulesets), forced = TRUE, ignore_cost = TRUE)
+ SSdynamic.picking_specific_rule(pick(pirate_rulesets), forced = TRUE, ignore_cost = TRUE)
if(HACK_FUGITIVES) // Triggers fugitives, which can cause confusion / chaos as the crew decides which side help
priority_announce(
@@ -961,22 +960,20 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
continue
shake_camera(crew_member, 15, 1)
- var/datum/game_mode/dynamic/dynamic = SSticker.mode
- dynamic.unfavorable_situation()
+ SSdynamic.unfavorable_situation()
if(HACK_SLEEPER) // Trigger one or multiple sleeper agents with the crew (or for latejoining crew)
var/datum/dynamic_ruleset/midround/sleeper_agent_type = /datum/dynamic_ruleset/midround/from_living/autotraitor
- var/datum/game_mode/dynamic/dynamic = SSticker.mode
var/max_number_of_sleepers = clamp(round(length(GLOB.alive_player_list) / 20), 1, 3)
var/num_agents_created = 0
for(var/num_agents in 1 to rand(1, max_number_of_sleepers))
- if(!dynamic.picking_specific_rule(sleeper_agent_type, forced = TRUE, ignore_cost = TRUE))
+ if(!SSdynamic.picking_specific_rule(sleeper_agent_type, forced = TRUE, ignore_cost = TRUE))
break
num_agents_created++
if(num_agents_created <= 0)
// We failed to run any midround sleeper agents, so let's be patient and run latejoin traitor
- dynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator, forced = TRUE, ignore_cost = TRUE)
+ SSdynamic.picking_specific_rule(/datum/dynamic_ruleset/latejoin/infiltrator, forced = TRUE, ignore_cost = TRUE)
else
// We spawned some sleeper agents, nice - give them a report to kickstart the paranoia
@@ -1021,9 +1018,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE)
#undef STATE_MAIN
#undef STATE_MESSAGES
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
#undef EMERGENCY_RESPONSE_POLICE
#undef EMERGENCY_RESPONSE_ATMOS
#undef EMERGENCY_RESPONSE_EMT
#undef EMERGENCY_RESPONSE_EMAG
-//SKYRAT EDIT END
+//NOVA EDIT END
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index bc4a4ecabed..a2b5db099e9 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -44,7 +44,7 @@
. += create_table_notices(list(
"name",
"job",
- "is_robot", //SKYRAT EDIT ADDITION - Displaying robotic species Icon
+ "is_robot", //NOVA EDIT ADDITION - Displaying robotic species Icon
"life_status",
"suffocation",
"toxin",
@@ -65,7 +65,7 @@
var/list/entry = list()
entry["name"] = player_record["name"]
entry["job"] = player_record["assignment"]
- entry["is_robot"] = player_record["is_robot"] //SKYRAT EDIT ADDITION - Displaying robotic species Icon
+ entry["is_robot"] = player_record["is_robot"] //NOVA EDIT ADDITION - Displaying robotic species Icon
entry["life_status"] = player_record["life_status"]
entry["suffocation"] = player_record["oxydam"]
entry["toxin"] = player_record["toxdam"]
@@ -108,7 +108,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
JOB_SECURITY_OFFICER_SCIENCE = 15,
JOB_SECURITY_OFFICER_SUPPLY = 16,
*/
- JOB_CORRECTIONS_OFFICER = 13, // SKYRAT EDIT ADDITION
+ JOB_CORRECTIONS_OFFICER = 13, // NOVA EDIT ADDITION
JOB_DETECTIVE = 14,
// 20-29: Medbay
JOB_CHIEF_MEDICAL_OFFICER = 20,
@@ -117,25 +117,25 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
JOB_MEDICAL_DOCTOR = 23,
JOB_PARAMEDIC = 24,
JOB_CORONER = 25,
- JOB_ORDERLY = 26, // SKYRAT EDIT ADDITION
- JOB_PSYCHOLOGIST = 27, // SKYRAT EDIT - ORIGINAL: JOB_PSYCHOLOGIST = 71,
+ JOB_ORDERLY = 26, // NOVA EDIT ADDITION
+ JOB_PSYCHOLOGIST = 27, // NOVA EDIT - ORIGINAL: JOB_PSYCHOLOGIST = 71,
// 30-39: Science
JOB_RESEARCH_DIRECTOR = 30,
JOB_SCIENTIST = 31,
JOB_ROBOTICIST = 32,
JOB_GENETICIST = 33,
- JOB_SCIENCE_GUARD = 34, // SKYRAT EDIT ADDITION
+ JOB_SCIENCE_GUARD = 34, // NOVA EDIT ADDITION
// 40-49: Engineering
JOB_CHIEF_ENGINEER = 40,
JOB_STATION_ENGINEER = 41,
JOB_ATMOSPHERIC_TECHNICIAN = 42,
- JOB_ENGINEERING_GUARD = 43, // SKYRAT EDIT ADDITION
+ JOB_ENGINEERING_GUARD = 43, // NOVA EDIT ADDITION
// 50-59: Cargo
JOB_QUARTERMASTER = 50,
JOB_SHAFT_MINER = 51,
JOB_CARGO_TECHNICIAN = 52,
JOB_BITRUNNER = 53,
- JOB_CUSTOMS_AGENT = 54, // SKYRAT EDIT ADDITION
+ JOB_CUSTOMS_AGENT = 54, // NOVA EDIT ADDITION
// 60+: Civilian/other
JOB_HEAD_OF_PERSONNEL = 60,
JOB_BARTENDER = 61,
@@ -147,8 +147,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
JOB_MIME = 67,
JOB_JANITOR = 68,
JOB_LAWYER = 69,
- JOB_BARBER = 71, // SKYRAT EDIT ADDITION
- JOB_BOUNCER = 72, // SKYRAT EDIT ADDITION
+ JOB_BARBER = 71, // NOVA EDIT ADDITION
+ JOB_BOUNCER = 72, // NOVA EDIT ADDITION
// 200-239: Centcom
JOB_CENTCOM_ADMIRAL = 200,
JOB_CENTCOM = 201,
@@ -166,8 +166,8 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
JOB_ERT_CHAPLAIN = 225,
JOB_ERT_JANITOR = 226,
JOB_ERT_DEATHSQUAD = 227,
- JOB_NT_REP = 230, // SKYRAT EDIT ADDITION
- JOB_BLUESHIELD = 231, // SKYRAT EDIT ADDITION
+ JOB_NT_REP = 230, // NOVA EDIT ADDITION
+ JOB_BLUESHIELD = 231, // NOVA EDIT ADDITION
// ANYTHING ELSE = UNKNOWN_JOB_ID, Unknowns/custom jobs will appear after civilians, and before assistants
JOB_ASSISTANT = 999,
@@ -257,10 +257,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
if (jobs[trim_assignment] != null)
entry["ijob"] = jobs[trim_assignment]
- // SKYRAT EDIT BEGIN: Checking for robotic race
+ // NOVA EDIT BEGIN: Checking for robotic race
if (issynthetic(tracked_human))
entry["is_robot"] = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
// Binary living/dead status
// Current status
diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm
index c3510afce73..1fe999010b7 100644
--- a/code/game/machinery/computer/dna_console.dm
+++ b/code/game/machinery/computer/dna_console.dm
@@ -710,11 +710,11 @@
var/datum/mutation/human/matched_mutation = null
//Go through all sequences for matching gene, and set the mutation
for (var/M in subtypesof(/datum/mutation/human))
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/datum/mutation/human/iterating_mutation = M
if(initial(iterating_mutation.disabled))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/true_sequence = GET_SEQUENCE(M)
if (new_sequence == true_sequence)
matched_mutation = M
diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm
index 2ba9e00d9f5..75a5c980dfe 100644
--- a/code/game/machinery/computer/orders/order_computer/mining_order.dm
+++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm
@@ -71,11 +71,11 @@
if(istype(weapon, /obj/item/mining_voucher))
redeem_voucher(weapon, user)
return
- //SKYRAT EDIT ADDITON BEGIN - SEVA
+ //NOVA EDIT ADDITON BEGIN - SEVA
if(istype(weapon, /obj/item/suit_voucher))
redeem_suit_voucher(weapon, user)
return
- //SKYRAT EDIT ADDITON END
+ //NOVA EDIT ADDITON END
return ..()
/obj/machinery/computer/order_console/mining/update_icon_state()
diff --git a/code/game/machinery/computer/orders/order_items/order_datum.dm b/code/game/machinery/computer/orders/order_items/order_datum.dm
index e7bb3c35e56..13684fc742b 100644
--- a/code/game/machinery/computer/orders/order_items/order_datum.dm
+++ b/code/game/machinery/computer/orders/order_items/order_datum.dm
@@ -22,7 +22,7 @@
if(!desc)
desc = initial(item_path.desc)
-/datum/orderable_item/Destroy(force, ...)
+/datum/orderable_item/Destroy(force)
if(item_path)
qdel(item_path)
return ..()
diff --git a/code/game/machinery/computer/records/medical.dm b/code/game/machinery/computer/records/medical.dm
index 3b80f80888b..71eab88c113 100644
--- a/code/game/machinery/computer/records/medical.dm
+++ b/code/game/machinery/computer/records/medical.dm
@@ -65,10 +65,10 @@
quirk_notes = target.quirk_notes,
rank = target.rank,
species = target.species,
- // SKYRAT EDIT ADDITION START - Expanded records!
+ // NOVA EDIT ADDITION START - Expanded records!
past_medical_records = target.past_medical_records,
past_general_records = target.past_general_records,
- // SKYRAT EDIT END
+ // NOVA EDIT END
))
data["records"] = records
diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm
index 53a7ff9dc11..e30814f231a 100644
--- a/code/game/machinery/computer/records/security.dm
+++ b/code/game/machinery/computer/records/security.dm
@@ -129,10 +129,10 @@
rank = target.rank,
species = target.species,
wanted_status = target.wanted_status,
- // SKYRAT EDIT ADDITION - RP Records
+ // NOVA EDIT ADDITION - RP Records
past_general_records = target.past_general_records,
past_security_records = target.past_security_records,
- // SKYRAT EDIT END
+ // NOVA EDIT END
))
data["records"] = records
@@ -354,12 +354,12 @@
printable = wanted_poster
if("rapsheet")
- /// SKYRAT EDIT REMOVE - REMOVE CRIMES REQUIREMENT FOR PRINTING RECORDS
+ /// NOVA EDIT REMOVE - REMOVE CRIMES REQUIREMENT FOR PRINTING RECORDS
//var/list/crimes = target.crimes
//if(!length(crimes))
//balloon_alert(user, "no crimes")
//return FALSE
- /// SKYRAT EDIT REMOVE END
+ /// NOVA EDIT REMOVE END
var/obj/item/paper/rapsheet = target.get_rapsheet(input_alias, input_header, input_description)
printable = rapsheet
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 53fda80f4fa..54f461948bf 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -31,7 +31,7 @@
. = ..()
if(machine_stat & (NOPOWER|BROKEN))
return
- if(length(alert_control?.listener.alarms)) /// SKYRAT EDIT - Fixing master - Original: if(length(alert_control.listener.alarms))
+ if(length(alert_control?.listener.alarms)) /// NOVA EDIT - Fixing master - Original: if(length(alert_control.listener.alarms))
. += "alert:2"
/**
diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm
index de60d84dafd..66be2dc2450 100644
--- a/code/game/machinery/dance_machine.dm
+++ b/code/game/machinery/dance_machine.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL BEGIN - JUKEBOX - MOVED TO 'modular_skyrat/modules/jukebox/code/dance_machine.dm'
+/* NOVA EDIT REMOVAL BEGIN - JUKEBOX - MOVED TO 'modular_nova/modules/jukebox/code/dance_machine.dm'
/// Helper macro to check if the passed mob has jukebox sound preference enabled
#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox))
@@ -523,4 +523,4 @@
dance(to_dance)
#undef HAS_JUKEBOX_PREF
-*/ //SKYRAT EDIT REMOVAL END
+*/ //NOVA EDIT REMOVAL END
diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm
index 1cd8b3c7bf0..2d74abf1d99 100644
--- a/code/game/machinery/dish_drive.dm
+++ b/code/game/machinery/dish_drive.dm
@@ -10,7 +10,7 @@
circuit = /obj/item/circuitboard/machine/dish_drive
pass_flags = PASSTABLE
/// List of dishes the drive can hold
- var/list/collectable_items = list(/obj/item/trash/waffles, // SKYRAT EDIT CHANGE - non-static list
+ var/list/collectable_items = list(/obj/item/trash/waffles, // NOVA EDIT CHANGE - non-static list
/obj/item/trash/waffles,
/obj/item/broken_bottle,
/obj/item/kitchen/fork,
@@ -37,7 +37,7 @@
var/list/dish_drive_contents
/// Distance this is capable of sucking dishes up over. (2 + servo tier)
var/suck_distance = 0
- var/binrange = 7 //SKYRAT EDIT ADDITION - SEC_HAUL
+ var/binrange = 7 //NOVA EDIT ADDITION - SEC_HAUL
COOLDOWN_DECLARE(time_since_dishes)
@@ -152,7 +152,7 @@
if(manual)
visible_message(span_notice("[src] is empty!"))
return
- var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //SKYRAT EDIT CHANGE
+ var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //NOVA EDIT CHANGE
if(!bin)
if(manual)
visible_message(span_warning("[src] buzzes. There are no disposal bins in range!"))
diff --git a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
index e7551394131..8330bbe2f0c 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fly_organs.dm
@@ -52,7 +52,7 @@
message = fly_buZZ.Replace(message, "ZZZ")
message = replacetext(message, "s", "z")
message = replacetext(message, "S", "Z")
-//SKYRAT EDIT START: Adding russian version to autohiss
+//NOVA EDIT START: Adding russian version to autohiss
if(CONFIG_GET(flag/russian_text_formation))
var/static/regex/fly_buzz_ru = new("з+", "g")
var/static/regex/fly_buZZ_ru = new("З+", "g")
@@ -60,7 +60,7 @@
message = fly_buZZ_ru.Replace(message, "ЗЗЗ")
message = replacetext(message, "с", "з")
message = replacetext(message, "С", "З")
-//SKYRAT EDIT END: Adding russian version to autohiss
+//NOVA EDIT END: Adding russian version to autohiss
speech_args[SPEECH_MESSAGE] = message
/obj/item/organ/internal/tongue/fly/Initialize(mapload)
diff --git a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
index 57a26d36842..cb5347c8a51 100644
--- a/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
+++ b/code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
@@ -6,7 +6,7 @@
visual = TRUE
damage_multiplier = 2
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION
/*
/obj/item/organ/internal/ears/fox/on_insert(mob/living/carbon/human/ear_owner)
. = ..()
@@ -23,4 +23,4 @@
ear_owner.dna.species.mutant_bodyparts -= "ears"
ear_owner.update_body()
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 509e3347f84..981db3e064c 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -22,20 +22,20 @@
/// Someone, for the love of god, profile this. Is there a reason to cache mutable_appearance
/// if so, why are we JUST doing the airlocks when we can put this in mutable_appearance.dm for
/// everything
-/proc/get_airlock_overlay(icon_state, icon_file, atom/offset_spokesman, em_block, state_color = null) // SKYRAT EDIT - Airlock accent greyscale color support - Added `state_color = null`
+/proc/get_airlock_overlay(icon_state, icon_file, atom/offset_spokesman, em_block, state_color = null) // NOVA EDIT - Airlock accent greyscale color support - Added `state_color = null`
var/static/list/airlock_overlays = list()
- var/base_icon_key = "[icon_state][REF(icon_file)][state_color]" // SKYRAT EDIT - Airlock accent greyscale color support - ORIGINAL: var/base_icon_key = "[icon_state][REF(icon_file)]"
+ var/base_icon_key = "[icon_state][REF(icon_file)][state_color]" // NOVA EDIT - Airlock accent greyscale color support - ORIGINAL: var/base_icon_key = "[icon_state][REF(icon_file)]"
if(!(. = airlock_overlays[base_icon_key]))
- /* SKYRAT EDIT - Airlock accent greyscale color support - ORIGINAL:
+ /* NOVA EDIT - Airlock accent greyscale color support - ORIGINAL:
. = airlock_overlays[base_icon_key] = mutable_appearance(icon_file, icon_state)
- */ // SKYRAT EDIT START
+ */ // NOVA EDIT START
var/mutable_appearance/airlock_overlay = mutable_appearance(icon_file, icon_state)
if(state_color)
airlock_overlay.color = state_color
. = airlock_overlays[base_icon_key] = airlock_overlay
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(isnull(em_block))
return
@@ -54,7 +54,7 @@
// "Would this be better with a global var"
// Wires for the airlock are located in the datum folder, inside the wires datum folder.
-// SKYRAT EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// NOVA EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm
/*
#define AIRLOCK_FRAME_CLOSED "closed"
#define AIRLOCK_FRAME_CLOSING "closing"
@@ -82,7 +82,7 @@
#define DOOR_VISION_DISTANCE 11 ///The maximum distance a door will see out to
*/
-// SKYRAT EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// NOVA EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm
/obj/machinery/door/airlock
name = "Airlock"
@@ -526,7 +526,7 @@
if(AIRLOCK_DENY, AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG)
icon_state = "nonexistenticonstate" //MADNESS
-/* SKYRAT EDIT MOVED TO AIRLOCK.DM IN AESTHETICS MODULE
+/* NOVA EDIT MOVED TO AIRLOCK.DM IN AESTHETICS MODULE
/obj/machinery/door/airlock/update_overlays()
. = ..()
@@ -817,7 +817,7 @@
if(!istype(H.head, /obj/item/clothing/head/helmet))
H.visible_message(span_danger("[user] headbutts the airlock."), \
span_userdanger("You headbutt the airlock!"))
- //H.Paralyze(100) - SKYRAT EDIT REMOVAL - COMBAT
+ //H.Paralyze(100) - NOVA EDIT REMOVAL - COMBAT
H.StaminaKnockdown(10, TRUE, TRUE)
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
else
@@ -1284,7 +1284,7 @@
if(BYPASS_DOOR_CHECKS) // No power usage, special sound, get it open.
//playsound(src, 'sound/machines/airlockforced.ogg', 30, TRUE) - ORIGINAL
- playsound(src, forcedOpen, 30, TRUE) //SKYRAT EDIT CHANGE - AESTHETICS
+ playsound(src, forcedOpen, 30, TRUE) //NOVA EDIT CHANGE - AESTHETICS
return TRUE
else
@@ -2041,7 +2041,6 @@
if(prob(50))
radiate()
last_event = world.time
- ..()
/obj/machinery/door/airlock/uranium/proc/radiate()
radiation_pulse(
@@ -2482,7 +2481,7 @@
set_density(TRUE)
operating = FALSE
return TRUE
-// SKYRAT EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// NOVA EDIT REMOVAL START - moved to code/__DEFINES/~skyrat_defines/airlock.dm
/*
#undef AIRLOCK_SECURITY_NONE
#undef AIRLOCK_SECURITY_IRON
@@ -2509,4 +2508,4 @@
#undef AIRLOCK_FRAME_OPEN
#undef AIRLOCK_FRAME_OPENING
*/
-// SKYRAT EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// NOVA EDIT REMOVAL END - moved to code/__DEFINES/~skyrat_defines/airlock.dm
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 60a536c6038..2dfff746d37 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -1,11 +1,11 @@
//#define MAX_TIMER (15 MINUTES) //ORIGINAL
-#define MAX_TIMER (60 MINUTES) //SKYRAT EDIT CHANGE
+#define MAX_TIMER (60 MINUTES) //NOVA EDIT CHANGE
//#define PRESET_SHORT (2 MINUTES) //ORIGINAL
-#define PRESET_SHORT (5 MINUTES) //SKYRAT EDIT CHANGE
+#define PRESET_SHORT (5 MINUTES) //NOVA EDIT CHANGE
//#define PRESET_MEDIUM (3 MINUTES) //ORIGINAL
-#define PRESET_MEDIUM (10 MINUTES) //SKYRAT EDIT CHANGE
+#define PRESET_MEDIUM (10 MINUTES) //NOVA EDIT CHANGE
//#define PRESET_LONG (5 MINUTES) //ORIGINAL
-#define PRESET_LONG (15 MINUTES) //SKYRAT EDIT CHANGE
+#define PRESET_LONG (15 MINUTES) //NOVA EDIT CHANGE
/**
* Brig Door control displays.
@@ -72,7 +72,7 @@
if(!timing)
return PROCESS_KILL
- if(REALTIMEOFDAY - activation_time >= timer_duration) // SKYRAT EDIT CHANGE: original was world.time
+ if(REALTIMEOFDAY - activation_time >= timer_duration) // NOVA EDIT CHANGE: original was world.time
timer_end() // open doors, reset timer, clear status screen
update_content()
@@ -98,7 +98,7 @@
if(machine_stat & (NOPOWER|BROKEN))
return 0
- activation_time = REALTIMEOFDAY // SKYRAT EDIT CHANGE: original was world.time
+ activation_time = REALTIMEOFDAY // NOVA EDIT CHANGE: original was world.time
timing = TRUE
begin_processing()
@@ -171,7 +171,7 @@
* * seconds - return time in seconds it TRUE, else deciseconds.
*/
/obj/machinery/status_display/door_timer/proc/time_left(seconds = FALSE)
- . = max(0, timer_duration - (activation_time ? REALTIMEOFDAY - activation_time : 0)) // SKYRAT EDIT CHANGE: original was world.time
+ . = max(0, timer_duration - (activation_time ? REALTIMEOFDAY - activation_time : 0)) // NOVA EDIT CHANGE: original was world.time
if(seconds)
. /= 10
@@ -263,7 +263,7 @@
user.investigate_log("set cell [id]'s timer to [preset_time/10] seconds", INVESTIGATE_RECORDS)
user.log_message("set cell [id]'s timer to [preset_time/10] seconds", LOG_ATTACK)
if(timing)
- activation_time = REALTIMEOFDAY // SKYRAT EDIT CHANGE: original was world.time
+ activation_time = REALTIMEOFDAY // NOVA EDIT CHANGE: original was world.time
else
. = FALSE
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index db09a0db560..136de1ffd14 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -1,4 +1,4 @@
-// #define DOOR_CLOSE_WAIT 60 ///Default wait until doors autoclose // SKYRAT EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// #define DOOR_CLOSE_WAIT 60 ///Default wait until doors autoclose // NOVA EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm
/obj/machinery/door
name = "door"
desc = "It opens and closes."
@@ -381,12 +381,12 @@
if(glass)
playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE)
else if(damage_amount)
- //SKYRAT EDIT ADDITION - CREDITS TO WHITEDREAM(valtos)
- playsound(src, pick('modular_skyrat/master_files/sound/effects/metalblock1.wav', 'modular_skyrat/master_files/sound/effects/metalblock2.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock3.wav', 'modular_skyrat/master_files/sound/effects/metalblock4.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock5.wav', 'modular_skyrat/master_files/sound/effects/metalblock6.wav', \
- 'modular_skyrat/master_files/sound/effects/metalblock7.wav', 'modular_skyrat/master_files/sound/effects/metalblock8.wav'), 50, TRUE)
- //SKYRAT EDIT END
+ //NOVA EDIT ADDITION - CREDITS TO WHITEDREAM(valtos)
+ playsound(src, pick('modular_nova/master_files/sound/effects/metalblock1.wav', 'modular_nova/master_files/sound/effects/metalblock2.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock3.wav', 'modular_nova/master_files/sound/effects/metalblock4.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock5.wav', 'modular_nova/master_files/sound/effects/metalblock6.wav', \
+ 'modular_nova/master_files/sound/effects/metalblock7.wav', 'modular_nova/master_files/sound/effects/metalblock8.wav'), 50, TRUE)
+ //NOVA EDIT END
else
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
@@ -508,11 +508,11 @@
else if(ismonkey(future_pancake)) //For monkeys
future_pancake.emote("screech")
future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
- future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100)
+ future_pancake.StaminaKnockdown(20, TRUE, TRUE) // NOVA EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100)
else if(ishuman(future_pancake)) //For humans
future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
future_pancake.emote("scream")
- future_pancake.StaminaKnockdown(20, TRUE, TRUE) // SKYRAT EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100)
+ future_pancake.StaminaKnockdown(20, TRUE, TRUE) // NOVA EDIT CHANGE - AIRLOCKS - ORIGINAL: future_pancake.Paralyze(100)
else //for simple_animals & borgs
future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
var/turf/location = get_turf(src)
@@ -599,4 +599,4 @@
return ..()
return ..(0)
-// #undef DOOR_CLOSE_WAIT // SKYRAT EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm
+// #undef DOOR_CLOSE_WAIT // NOVA EDIT REMOVAL - moved to code/__DEFINES/~skyrat_defines/airlock.dm
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 3c64e8ec07c..8c6e5174a28 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -273,10 +273,10 @@
/obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf)
var/datum/gas_mixture/environment = checked_turf.return_air()
- var/pressure = environment?.return_pressure() //SKYRAT EDIT ADDITION - Micro optimisation
- if(environment?.temperature >= BODYTEMP_HEAT_DAMAGE_LIMIT || pressure > WARNING_HIGH_PRESSURE) //SKYRAT EDIT CHANGE - BETTER LOCKS
+ var/pressure = environment?.return_pressure() //NOVA EDIT ADDITION - Micro optimisation
+ if(environment?.temperature >= BODYTEMP_HEAT_DAMAGE_LIMIT || pressure > WARNING_HIGH_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS
return FIRELOCK_ALARM_TYPE_HOT
- if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //SKYRAT EDIT CHANGE - BETTER LOCKS
+ if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS
return FIRELOCK_ALARM_TYPE_COLD
return
@@ -746,7 +746,7 @@
/obj/machinery/door/firedoor/heavy
name = "heavy firelock"
- icon = 'icons/obj/doors/Doorfire.dmi' //SKYRAT EDIT - ICON OVERRIDEN IN AESTHETICS MODULE
+ icon = 'icons/obj/doors/Doorfire.dmi' //NOVA EDIT - ICON OVERRIDEN IN AESTHETICS MODULE
glass = FALSE
explosion_block = 2
assemblytype = /obj/structure/firelock_frame/heavy
@@ -761,7 +761,7 @@
/obj/structure/firelock_frame
name = "firelock frame"
desc = "A partially completed firelock."
- icon = 'icons/obj/doors/Doorfire.dmi' //SKYRAT EDIT - ICON OVERRIDEN IN AESTHETICS MODULE
+ icon = 'icons/obj/doors/Doorfire.dmi' //NOVA EDIT - ICON OVERRIDEN IN AESTHETICS MODULE
icon_state = "frame1"
base_icon_state = "frame"
anchored = FALSE
diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm
index 3b78d6bb0b1..1d428e7547e 100644
--- a/code/game/machinery/droneDispenser.dm
+++ b/code/game/machinery/droneDispenser.dm
@@ -56,8 +56,8 @@
/datum/component/material_container, \
list(/datum/material/iron, /datum/material/glass), \
SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, \
- MATCONTAINER_EXAMINE|BREAKDOWN_FLAGS_DRONE_DISPENSER, \
- allowed_items=/obj/item/stack \
+ MATCONTAINER_EXAMINE, \
+ allowed_items = /obj/item/stack \
)
materials.insert_amount_mat(starting_amount)
materials.precise_insertion = TRUE
@@ -152,7 +152,6 @@
. += span_warning("[recharging_text]")
/obj/machinery/drone_dispenser/process()
- ..()
if((machine_stat & (NOPOWER|BROKEN)) || !anchored)
return
diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm
index 1e2287a0492..1fc7c41e2e9 100644
--- a/code/game/machinery/embedded_controller/access_controller.dm
+++ b/code/game/machinery/embedded_controller/access_controller.dm
@@ -39,7 +39,7 @@
/obj/machinery/door_buttons/access_button
- icon = 'icons/obj/machines/wallmounts.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/wallmounts.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
icon_state = "access_button_standby"
base_icon_state = "access_button"
name = "access button"
diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm
index e16e9f61c24..0e5e7701696 100644
--- a/code/game/machinery/embedded_controller/airlock_controller.dm
+++ b/code/game/machinery/embedded_controller/airlock_controller.dm
@@ -6,7 +6,7 @@
#define AIRLOCK_STATE_OUTOPEN "outopen"
/obj/machinery/airlock_controller
- icon = 'icons/obj/machines/wallmounts.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/wallmounts.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
icon_state = "airlock_control_standby"
base_icon_state = "airlock_control"
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index b3b1615aded..cef15f43caa 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -187,7 +187,7 @@
set_light(l_color = LIGHT_COLOR_FLARE)
if(SEC_LEVEL_DELTA)
set_light(l_color = LIGHT_COLOR_INTENSE_RED)
- //SKYRAT EDIT ADDITION BEGIN - ADDITIONAL ALERT LEVELS
+ //NOVA EDIT ADDITION BEGIN - ADDITIONAL ALERT LEVELS
if(SEC_LEVEL_VIOLET)
set_light(l_color = COLOR_VIOLET)
if(SEC_LEVEL_ORANGE)
@@ -196,7 +196,7 @@
set_light(l_color = LIGHT_COLOR_DIM_YELLOW)
if(SEC_LEVEL_GAMMA)
set_light(l_color = COLOR_ASSEMBLY_PURPLE)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else
. += mutable_appearance(icon, "fire_offstation")
. += emissive_appearance(icon, "fire_level_e", src, alpha = src.alpha)
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index bc0d480af64..11726392619 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -548,15 +548,15 @@ Possible to do for anyone motivated enough:
if(AI)
AI.eyeobj.setLoc(get_turf(src)) //ensure the AI camera moves to the holopad
- hologram.Impersonation = AI //SKYRAT EDIT -- ADDITION -- Customization; puts the AI core as the impersonated mob so that the examine proc can be redirected
+ hologram.Impersonation = AI //NOVA EDIT -- ADDITION -- Customization; puts the AI core as the impersonated mob so that the examine proc can be redirected
else //make it like real life
hologram.Impersonation = user
- //Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. //SKYRAT EDIT -- Customization; Making holograms clickable/examinable
+ //Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. //NOVA EDIT -- Customization; Making holograms clickable/examinable
hologram.layer = FLY_LAYER //Above all the other objects/mobs. Or the vast majority of them.
SET_PLANE_EXPLICIT(hologram, ABOVE_GAME_PLANE, src)
hologram.set_anchored(TRUE)//So space wind cannot drag it.
//hologram.name = "[user.name] (Hologram)"//If someone decides to right click. // ORIGINAL
- hologram.name = user.name //SKYRAT EDIT -- Make the name exact, so that the double-emotes are less jarring in the chat
+ hologram.name = user.name //NOVA EDIT -- Make the name exact, so that the double-emotes are less jarring in the chat
set_holo(user, hologram)
set_holo(user, hologram)
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 238f0db3f19..0f34a498658 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -1,7 +1,7 @@
/// The light switch. Can have multiple per area.
/obj/machinery/light_switch
name = "light switch"
- icon = 'icons/obj/machines/wallmounts.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/wallmounts.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "light-nopower"
base_icon_state = "light"
desc = "Make dark."
diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm
index 12562c428ad..3b12e38a527 100644
--- a/code/game/machinery/medical_kiosk.dm
+++ b/code/game/machinery/medical_kiosk.dm
@@ -262,10 +262,10 @@
var/list/trauma_text = list()
for(var/t in patient.get_traumas())
var/datum/brain_trauma/trauma = t
- //SKYRAT EDIT: Scary Traits (Bimbo)
+ //NOVA EDIT: Scary Traits (Bimbo)
if(!trauma.display_scanner)
continue
- //SKYRAT EDIT: Scary Traits (Bimbo)
+ //NOVA EDIT: Scary Traits (Bimbo)
var/trauma_desc = ""
switch(trauma.resilience)
if(TRAUMA_RESILIENCE_SURGERY)
diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm
index b56e35b2389..5563000183c 100644
--- a/code/game/machinery/medipen_refiller.dm
+++ b/code/game/machinery/medipen_refiller.dm
@@ -76,7 +76,7 @@
return
add_overlay("active")
if(do_after(user, 2 SECONDS, src))
- medipen.reagents.maximum_volume = initial(medipen.reagents.maximum_volume)
+ medipen.used_up = FALSE
medipen.add_initial_reagents()
reagents.remove_reagent(allowed_pens[medipen.type], 10)
balloon_alert(user, "refilled")
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 11f4bb1dd55..6d272de65b3 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -133,6 +133,8 @@ DEFINE_BITFIELD(turret_flags, list(
if(!has_cover)
INVOKE_ASYNC(src, PROC_REF(popUp))
+ AddElement(/datum/element/hostile_machine)
+
/obj/machinery/porta_turret/proc/toggle_on(set_to)
var/current = on
if (!isnull(set_to))
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index 037b4692fc7..84597b29c50 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -103,12 +103,12 @@
if(!map_pad_link_id || !initMappedLink())
to_chat(user, span_warning("Target pad not found!"))
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/turf/my_turf = get_turf(src)
if(is_away_level(my_turf.z))
to_chat(user, "[src] cannot be used here! ")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(world.time < last_teleport + teleport_cooldown)
to_chat(user, span_warning("[src] is recharging power. Please wait [DisplayTimeText(last_teleport + teleport_cooldown - world.time)]."))
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 1a20bf90e18..f9747843d57 100755
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -13,8 +13,8 @@
var/finished_recharging = FALSE
var/static/list/allowed_devices = typecacheof(list(
- /obj/item/stock_parts/cell/microfusion, //SKYRAT EDIT ADDITION
- /obj/item/gun/microfusion, // SKYRAT EDIT ADDITION
+ /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION
+ /obj/item/gun/microfusion, // NOVA EDIT ADDITION
/obj/item/gun/energy,
/obj/item/melee/baton/security,
/obj/item/ammo_box/magazine/recharge,
@@ -100,7 +100,7 @@
to_chat(user, span_notice("Your gun has no external power connector."))
return TRUE
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if (istype(attacking_item, /obj/item/gun/microfusion))
var/obj/item/gun/microfusion/microfusion_gun = attacking_item
if(microfusion_gun.cell?.chargerate <= 0)
@@ -112,7 +112,7 @@
if(inserting_cell.chargerate <= 0)
to_chat(user, span_notice("[inserting_cell] cannot be recharged!"))
return TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
user.transferItemToLoc(attacking_item, src)
return TRUE
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index a17d9b845b0..f2f5b1b0fec 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -32,12 +32,18 @@
/datum/material/titanium,
/datum/material/bluespace
)
- materials = AddComponent(/datum/component/material_container, allowed_materials, INFINITY, MATCONTAINER_NO_INSERT|BREAKDOWN_FLAGS_RECYCLER)
+ materials = AddComponent(
+ /datum/component/material_container, \
+ allowed_materials, \
+ INFINITY, \
+ MATCONTAINER_NO_INSERT \
+ )
AddComponent(/datum/component/simple_rotation)
- AddComponent(/datum/component/butchering/recycler, \
- speed = 0.1 SECONDS, \
- effectiveness = amount_produced, \
- bonus_modifier = amount_produced/5, \
+ AddComponent(
+ /datum/component/butchering/recycler, \
+ speed = 0.1 SECONDS, \
+ effectiveness = amount_produced, \
+ bonus_modifier = amount_produced / 5, \
)
. = ..()
return INITIALIZE_HINT_LATELOAD
@@ -193,7 +199,7 @@
new wood.plank_type(loc, 1 + seed_modifier)
. = TRUE
else
- var/retrieved = materials.insert_item(weapon, multiplier = (amount_produced / 100), breakdown_flags = BREAKDOWN_FLAGS_RECYCLER)
+ var/retrieved = materials.insert_item(weapon, multiplier = (amount_produced / 100))
if(retrieved > 0) //item was salvaged i.e. deleted
materials.retrieve_all()
return TRUE
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index ea02d1ab78e..1d0f00517dd 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -200,7 +200,7 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments)
var/mob/living/L = usr
message = L.treat_message(message)["message"]
- minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = ANNOUNCER_DEPARTMENTAL) // SKYRAT EDIT CHANGE - Announcer Sounds
+ minor_announce(message, "[department] Announcement:", html_encode = FALSE, sound_override = ANNOUNCER_DEPARTMENTAL) // NOVA EDIT CHANGE - Announcer Sounds
GLOB.news_network.submit_article(message, department, "Station Announcements", null)
usr.log_talk(message, LOG_SAY, tag="station announcement from [src]")
message_admins("[ADMIN_LOOKUPFLW(usr)] has made a station announcement from [src] at [AREACOORD(usr)].")
diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm
index 4c1c8590157..6590ba17d64 100644
--- a/code/game/machinery/scan_gate.dm
+++ b/code/game/machinery/scan_gate.dm
@@ -16,7 +16,7 @@
#define SCANGATE_POD "pod"
#define SCANGATE_GOLEM "golem"
#define SCANGATE_ZOMBIE "zombie"
-//SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS
+//NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS
#define SCANGATE_MAMMAL "mammal"
#define SCANGATE_VOX "vox"
#define SCANGATE_AQUATIC "aquatic"
@@ -31,7 +31,7 @@
#define SCANGATE_SNAIL "snail"
#define SCANGATE_GENDER "Gender"
-//SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+//NOVA EDIT END - MORE SCANNER GATE OPTIONS
/obj/machinery/scanner_gate
name = "scanner gate"
@@ -61,7 +61,7 @@
var/light_fail = FALSE
///Does the scanner ignore light_pass and light_fail for sending signals?
var/ignore_signals = FALSE
- var/detect_gender = "male" //SKYRAT EDIT - MORE SCANNER GATE OPTIONS
+ var/detect_gender = "male" //NOVA EDIT - MORE SCANNER GATE OPTIONS
/obj/machinery/scanner_gate/Initialize(mapload)
@@ -175,7 +175,7 @@
scan_species = /datum/species/golem
if(SCANGATE_ZOMBIE)
scan_species = /datum/species/zombie
- //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS
if(SCANGATE_MAMMAL)
scan_species = /datum/species/mammal
if(SCANGATE_VOX)
@@ -200,7 +200,7 @@
scan_species = /datum/species/hemophage
if(SCANGATE_SNAIL)
scan_species = /datum/species/snail
- //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT END - MORE SCANNER GATE OPTIONS
if(is_species(H, scan_species))
beep = TRUE
if(detect_species == SCANGATE_ZOMBIE) //Can detect dormant zombies
@@ -218,14 +218,14 @@
beep = TRUE
if(H.nutrition >= detect_nutrition && detect_nutrition == NUTRITION_LEVEL_FAT)
beep = TRUE
- //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS
if(SCANGATE_GENDER)
if(ishuman(M))
var/mob/living/carbon/human/scanned_human = M
if((scanned_human.gender in list("male", "female"))) //funny thing: nb people will always get by the scan B)
if(scanned_human.gender == detect_gender)
beep = TRUE
- //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT END - MORE SCANNER GATE OPTIONS
if(reverse)
beep = !beep
@@ -273,7 +273,7 @@
data["disease_threshold"] = disease_threshold
data["target_species"] = detect_species
data["target_nutrition"] = detect_nutrition
- data["target_gender"] = detect_gender //SKYRAT EDIT - MORE SCANNER GATE OPTIONS
+ data["target_gender"] = detect_gender //NOVA EDIT - MORE SCANNER GATE OPTIONS
return data
/obj/machinery/scanner_gate/ui_act(action, params)
@@ -315,7 +315,7 @@
if("Obese")
detect_nutrition = NUTRITION_LEVEL_FAT
. = TRUE
- //SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS
if("set_target_gender")
var/new_gender = params["new_gender"]
var/gender_list = list(
@@ -329,7 +329,7 @@
if("Female")
detect_gender = "female"
. = TRUE
- //SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ //NOVA EDIT END - MORE SCANNER GATE OPTIONS
#undef SCANGATE_NONE
#undef SCANGATE_MINDSHIELD
@@ -349,7 +349,7 @@
#undef SCANGATE_POD
#undef SCANGATE_GOLEM
#undef SCANGATE_ZOMBIE
-//SKYRAT EDIT BEGIN - MORE SCANNER GATE OPTIONS
+//NOVA EDIT BEGIN - MORE SCANNER GATE OPTIONS
#undef SCANGATE_MAMMAL
#undef SCANGATE_VOX
#undef SCANGATE_AQUATIC
@@ -364,4 +364,4 @@
#undef SCANGATE_SNAIL
#undef SCANGATE_GENDER
-//SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+//NOVA EDIT END - MORE SCANNER GATE OPTIONS
diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm
index 249eff1cfbe..69bebfca69e 100644
--- a/code/game/machinery/sheetifier.dm
+++ b/code/game/machinery/sheetifier.dm
@@ -15,7 +15,7 @@
/datum/component/material_container, \
list(/datum/material/meat, /datum/material/hauntium), \
SHEET_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, \
- MATCONTAINER_EXAMINE|BREAKDOWN_FLAGS_SHEETIFIER, \
+ MATCONTAINER_EXAMINE, \
typesof(/datum/material/meat) + /datum/material/hauntium, list(/obj/item/food/meat, /obj/item/photo), \
container_signals = list(
COMSIG_MATCONTAINER_PRE_USER_INSERT = TYPE_PROC_REF(/obj/machinery/sheetifier, CanInsertMaterials),
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 91ce119d3df..7da1af14492 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -98,7 +98,6 @@
max_integrity = 20
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
/obj/structure/emergency_shield/cult/barrier
density = FALSE //toggled on right away by the parent rune
@@ -284,7 +283,7 @@
/obj/machinery/power/shieldwallgen
name = "shield wall generator"
desc = "A shield generator."
- icon ='icons/obj/machines/shield_generator.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon ='icons/obj/machines/shield_generator.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "shield_wall_gen"
base_icon_state = "shield_wall_gen"
anchored = FALSE
diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm
index 42a6c0d1948..daa474029f6 100644
--- a/code/game/machinery/sleepers.dm
+++ b/code/game/machinery/sleepers.dm
@@ -178,7 +178,6 @@
. += span_notice("Alt-click [src] to [state_open ? "close" : "open"] it.")
/obj/machinery/sleeper/process()
- ..()
use_power(idle_power_usage)
/obj/machinery/sleeper/nap_violation(mob/violator)
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 209b7101564..b0209713ea1 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -7,7 +7,7 @@
anchored = FALSE
density = TRUE
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN
- icon = 'icons/obj/pipes_n_cables/atmos.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/pipes_n_cables/atmos.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "sheater-off"
base_icon_state = "sheater"
name = "space heater"
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 24c0ac8bda5..fae7ee98d09 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -14,7 +14,7 @@
/obj/machinery/status_display
name = "status display"
desc = null
- icon = 'icons/obj/machines/status_display.dmi' //// SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/status_display.dmi' //// NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "frame"
verb_say = "beeps"
verb_ask = "beeps"
@@ -190,7 +190,7 @@
if(message1 == "" && message2 == "")
return
- . += emissive_appearance('modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi', "outline", src, alpha = src.alpha) // SKYRAT EDIT CHANGE - AESTHETICS
+ . += emissive_appearance('modular_nova/modules/aesthetics/status_display/icons/status_display.dmi', "outline", src, alpha = src.alpha) // NOVA EDIT CHANGE - AESTHETICS
// Timed process - performs nothing in the base class
/obj/machinery/status_display/process()
@@ -499,10 +499,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32)
"Red Alert" = "redalert",
"Blue Alert" = "bluealert",
"Green Alert" = "greenalert",
- "Violet Alert" = "violetalert", // SKYRAT EDIT ADD - Alert Levels
- "Orange Alert" = "orangealert", // SKYRAT EDIT ADD - Alert Levels
- "Amber Alert" = "amberalert", // SKYRAT EDIT ADD - Alert Levels
- "Gamma Alert" = "gammaalert", // SKYRAT EDIT ADD - Alert Levels
+ "Violet Alert" = "violetalert", // NOVA EDIT ADD - Alert Levels
+ "Orange Alert" = "orangealert", // NOVA EDIT ADD - Alert Levels
+ "Amber Alert" = "amberalert", // NOVA EDIT ADD - Alert Levels
+ "Gamma Alert" = "gammaalert", // NOVA EDIT ADD - Alert Levels
"Biohazard" = "biohazard",
"Lockdown" = "lockdown",
"Radiation" = "radiation",
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 8b6601dd471..c39f36f93cf 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -89,7 +89,7 @@
human.set_species(species_to_transform)
log_game("[human] ([key_name(human)]) was turned into a [initial(species_to_transform.name)] through [src].")
- */ //SKYRAT EDIT REMOVAL END
+ */ //NOVA EDIT REMOVAL END
//SKRYAT EDIT CHANGE BEGIN
to_chat(human, span_danger("Your limbs lose molecular cohesion as you teleport!"))
var/list/bodyparts_dismember = list()
@@ -106,7 +106,7 @@
bodyparts_dismember.Remove(BP) //GC optimisation
BP.dismember()
qdel(BP)
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
calibrated = FALSE
return
diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm
index 49d59b9bcf7..d6d5a8de9a5 100644
--- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm
+++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm
@@ -45,7 +45,7 @@
var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE)
- priority_announce("Massive bluespace translocation detected.", "Anomaly Alert", ANNOUNCER_TRANSLOCATION) //SKYRAT EDIT CHANGE - ANNOUNCER
+ priority_announce("Massive bluespace translocation detected.", "Anomaly Alert", ANNOUNCER_TRANSLOCATION) //NOVA EDIT CHANGE - ANNOUNCER
var/list/flashers = list()
for(var/mob/living/carbon/C in viewers(TO, null))
diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm
index 2d9b8ec71b4..9aea9dfea6a 100644
--- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm
+++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm
@@ -8,7 +8,7 @@
/// Range of effect, if left alone anomaly will convert a 2(range)+1 squared area.
var/range = 3
/// List of turfs this anomaly will try to transform before relocating
- var/list/turf/target_turfs = new()
+ var/list/turf/target_turfs = list()
/// Current anomaly 'theme', dictates what tiles to create.
var/datum/dimension_theme/theme
/// Effect displaying on the anomaly to represent the theme.
@@ -38,7 +38,7 @@
var/turf/affected_turf = target_turfs[1]
new /obj/effect/temp_visual/transmute_tile_flash(affected_turf)
theme.apply_theme(affected_turf)
- target_turfs.Remove(affected_turf)
+ target_turfs -= affected_turf
/**
* Prepare a new area for transformation into a new theme.
@@ -50,11 +50,10 @@
theme = new new_theme_path()
apply_theme_icon()
- target_turfs = new()
- var/list/turfs = spiral_range_turfs(range, src)
- for (var/turf/turf in turfs)
+ target_turfs = list()
+ for (var/turf/turf as anything in spiral_range_turfs(range, src))
if (theme.can_convert(turf))
- target_turfs.Add(turf)
+ target_turfs += turf
/**
* Applies an overlay icon based on the current theme.
diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm
index b0f69b99b47..16408ea9ce6 100644
--- a/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm
+++ b/code/game/objects/effects/anomalies/anomalies_dimensional_themes.dm
@@ -3,6 +3,8 @@
* Datum which describes a theme and replaces turfs and objects in specified locations to match that theme
*/
/datum/dimension_theme
+ /// Human readable name of the theme
+ var/name = "Unnamed Theme"
/// An icon to display to represent the theme
var/icon/icon
/// Icon state to use to represent the theme
@@ -16,11 +18,16 @@
/// Typepath of turf to replace walls with.
var/turf/replace_walls = /turf/closed/wall/material
/// List of weighted lists for object replacement. Key is an original typepath, value is a weighted list of typepaths to replace it with.
- var/list/replace_objs = list(\
- /obj/structure/chair = list(/obj/structure/chair/greyscale = 1), \
- /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1), \
- /obj/structure/table = list(/obj/structure/table/greyscale = 1), \
- /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),)
+ var/list/replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/greyscale = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 1),
+ /obj/structure/table = list(/obj/structure/table/greyscale = 1),
+ /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),
+ )
+ /// List of random spawns to place in completely open turfs
+ var/list/random_spawns
+ /// Prob of placing a random spawn in a completely open turf
+ var/random_spawn_chance = 0
/// Typepath of full-size windows which will replace existing ones
/// These need to be separate from replace_objs because we don't want to replace dir windows with full ones and they share typepath
var/obj/structure/window/replace_window
@@ -38,15 +45,33 @@
* Arguments
* * affected_turf - Turf to transform.
*/
-/datum/dimension_theme/proc/apply_theme(turf/affected_turf)
+/datum/dimension_theme/proc/apply_theme(turf/affected_turf, skip_sound = FALSE)
if (!replace_turf(affected_turf))
return
- playsound(affected_turf, sound, 100, TRUE)
+ if (!skip_sound)
+ playsound(affected_turf, sound, 100, TRUE)
for (var/obj/object in affected_turf)
replace_object(object)
+ if (length(random_spawns) && prob(random_spawn_chance) && !affected_turf.is_blocked_turf(exclude_mobs = TRUE))
+ var/random_spawn_picked = pick(random_spawns)
+ new random_spawn_picked(affected_turf)
if (material)
apply_materials(affected_turf)
+/**
+ * Applies the transformation to a list of turfs, ensuring a sound is only played every few turfs to reduce noice spam
+ *
+ * Arguments
+ * * list/turf/all_turfs - List of turfs to transform.
+ */
+/datum/dimension_theme/proc/apply_theme_to_list_of_turfs(list/turf/all_turfs)
+ var/every_nth_turf = 0
+ for (var/turf/turf as anything in all_turfs)
+ if(can_convert(turf))
+ apply_theme(turf, skip_sound = (every_nth_turf % 7 != 0))
+ every_nth_turf++
+ CHECK_TICK
+
/**
* Returns true if you actually can transform the provided turf.
*
@@ -75,6 +100,8 @@
* * affected_turf - Turf to transform.
*/
/datum/dimension_theme/proc/replace_turf(turf/affected_turf)
+ PROTECTED_PROC(TRUE)
+
if (isfloorturf(affected_turf))
if (isindestructiblefloor(affected_turf))
return FALSE
@@ -96,6 +123,8 @@
* * affected_floor - Floor turf to transform.
*/
/datum/dimension_theme/proc/transform_floor(turf/open/floor/affected_floor)
+ PROTECTED_PROC(TRUE)
+
if (replace_floors.len == 0)
return FALSE
affected_floor.replace_floor(pick_weight(replace_floors), flags = CHANGETURF_INHERIT_AIR)
@@ -108,6 +137,8 @@
* * object - Object to replace.
*/
/datum/dimension_theme/proc/replace_object(obj/object)
+ PROTECTED_PROC(TRUE)
+
if (istype(object, /obj/structure/window))
transform_window(object)
return
@@ -117,6 +148,8 @@
return
var/obj/new_object = new replace_path(object.loc)
new_object.setDir(object.dir)
+ if(istype(object, /obj/machinery/door/airlock))
+ new_object.name = object.name
qdel(object)
/**
@@ -126,10 +159,11 @@
* * object - Object to transform.
*/
/datum/dimension_theme/proc/get_replacement_object_typepath(obj/object)
+ PROTECTED_PROC(TRUE)
+
for (var/type in replace_objs)
if (istype(object, type))
return pick_weight(replace_objs[type])
- return
/**
* Replaces a window with a different window and recolours it.
@@ -139,6 +173,8 @@
* * object - Object to transform.
*/
/datum/dimension_theme/proc/transform_window(obj/structure/window/window)
+ PROTECTED_PROC(TRUE)
+
if (!window.fulltile)
return
if (!replace_window)
@@ -164,10 +200,10 @@
* * object - Object to transform.
*/
/datum/dimension_theme/proc/permit_replace_material(obj/object)
- for (var/type in PERMITTED_MATERIAL_REPLACE_TYPES)
- if (istype(object, type))
- return TRUE
- return FALSE
+ PROTECTED_PROC(TRUE)
+
+ return is_type_in_list(object, PERMITTED_MATERIAL_REPLACE_TYPES)
+
/**
* Applies a new custom material to the contents of a provided turf.
@@ -176,6 +212,8 @@
* * affected_turf - Turf to transform.
*/
/datum/dimension_theme/proc/apply_materials(turf/affected_turf)
+ PROTECTED_PROC(TRUE)
+
var/list/custom_materials = list(GET_MATERIAL_REF(material) = SHEET_MATERIAL_AMOUNT)
if (istype(affected_turf, /turf/open/floor/material) || istype(affected_turf, /turf/closed/wall/material))
@@ -191,79 +229,110 @@
/////////////////////
/datum/dimension_theme/gold
+ name = "Gold"
icon = 'icons/obj/stack_objects.dmi'
icon_state = "sheet-gold_2"
material = /datum/material/gold
/datum/dimension_theme/plasma
+ name = "Plasma"
icon = 'icons/obj/clothing/masks.dmi'
icon_state = "gas_alt"
material = /datum/material/plasma
/datum/dimension_theme/clown
+ name = "Clown"
icon = 'icons/obj/clothing/masks.dmi'
icon_state = "clown"
material = /datum/material/bananium
sound = 'sound/items/bikehorn.ogg'
/datum/dimension_theme/radioactive
+ name = "Radioactive"
icon = 'icons/obj/ore.dmi'
icon_state = "Uranium ore"
material = /datum/material/uranium
sound = 'sound/items/welder.ogg'
/datum/dimension_theme/meat
+ name = "Meat"
icon = 'icons/obj/food/meat.dmi'
icon_state = "meat"
material = /datum/material/meat
sound = 'sound/items/eatfood.ogg'
/datum/dimension_theme/pizza
+ name = "Pizza"
icon = 'icons/obj/food/pizza.dmi'
icon_state = "pizzamargherita"
material = /datum/material/pizza
sound = 'sound/items/eatfood.ogg'
/datum/dimension_theme/natural
+ name = "Natural"
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "map_flower"
window_colour = "#00f7ff"
replace_floors = list(/turf/open/floor/grass = 1)
replace_walls = /turf/closed/wall/mineral/wood/nonmetal
- replace_objs = list(\
- /obj/structure/chair = list(/obj/structure/chair/wood = 3, /obj/structure/chair/wood/wings = 1), \
- /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \
- /obj/structure/table = list(/obj/structure/table/wood = 5, /obj/structure/table/wood/fancy = 1),)
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/wood = 3, /obj/structure/chair/wood/wings = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1),
+ /obj/structure/table = list(/obj/structure/table/wood = 5, /obj/structure/table/wood/fancy = 1),
+ )
/datum/dimension_theme/bamboo
+ name = "Bamboo"
icon = 'icons/obj/service/hydroponics/harvest.dmi'
icon_state = "bamboo"
replace_floors = list(/turf/open/floor/bamboo = 1)
replace_walls = /turf/closed/wall/mineral/bamboo
replace_window = /obj/structure/window/paperframe
- replace_objs = list(\
- /obj/structure/chair = list(/obj/structure/chair/stool/bamboo = 1), \
- /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \
- /obj/structure/table = list(/obj/structure/table/wood = 1),)
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/stool/bamboo = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1),
+ /obj/structure/table = list(/obj/structure/table/wood = 1),
+ )
/datum/dimension_theme/icebox
- icon = 'icons/obj/clothing/shoes.dmi'
- icon_state = "iceboots"
+ name = "Winter"
+ icon = 'icons/obj/clothing/head/costume.dmi'
+ icon_state = "snowman_h"
window_colour = "#00f7ff"
material = /datum/material/snow
replace_floors = list(/turf/open/floor/fake_snow = 10, /turf/open/floor/fakeice/slippery = 1)
replace_walls = /turf/closed/wall/mineral/snow
+ random_spawns = list(
+ /obj/structure/flora/grass/both/style_random,
+ /obj/structure/flora/grass/brown/style_random,
+ /obj/structure/flora/grass/green/style_random,
+ )
+ random_spawn_chance = 8
+
+/datum/dimension_theme/icebox/winter_cabin
+ name = "Winter Cabin"
+ icon = 'icons/obj/clothing/shoes.dmi'
+ icon_state = "iceboots"
+ replace_walls = /turf/closed/wall/mineral/wood
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/wood = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1),
+ /obj/structure/table = list(/obj/structure/table/wood = 1),
+ )
/datum/dimension_theme/lavaland
+ name = "Lavaland"
icon = 'icons/obj/stack_objects.dmi'
icon_state = "goliath_hide"
window_colour = "#860000"
replace_floors = list(/turf/open/floor/fakebasalt = 5, /turf/open/floor/fakepit = 1)
replace_walls = /turf/closed/wall/mineral/cult
- replace_objs = list(\
- /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1))
+ replace_objs = list(/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1))
+ random_spawns = list(/mob/living/basic/mining/goldgrub)
+ random_spawn_chance = 1
/datum/dimension_theme/space
+ name = "Space"
icon = 'icons/effects/effects.dmi'
icon_state = "blessed"
window_colour = "#000000"
@@ -273,6 +342,7 @@
replace_objs = list(/obj/machinery/door/airlock = list(/obj/machinery/door/airlock/external/glass/ruin = 1))
/datum/dimension_theme/glass
+ name = "Glass"
icon = 'icons/obj/debris.dmi'
icon_state = "small"
material = /datum/material/glass
@@ -280,6 +350,7 @@
sound = SFX_SHATTER
/datum/dimension_theme/fancy
+ name = "Fancy"
icon = 'icons/obj/clothing/head/costume.dmi'
icon_state = "fancycrown"
replace_walls = /turf/closed/wall/mineral/wood/nonmetal
@@ -299,15 +370,18 @@
/turf/open/floor/carpet/royalblue,)
/datum/dimension_theme/fancy/New()
+ . = ..()
replace_floors = list(pick(FANCY_CARPETS) = 1)
- replace_objs = list(\
- /obj/structure/chair = list(/obj/structure/chair/comfy = 1), \
- /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1), \
- /obj/structure/table/wood = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1),)
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/comfy = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1, /obj/machinery/door/airlock/wood/glass = 1),
+ /obj/structure/table/wood = list(pick(subtypesof(/obj/structure/table/wood/fancy)) = 1),
+ )
#undef FANCY_CARPETS
/datum/dimension_theme/disco
+ name = "Disco"
icon = 'icons/obj/lighting.dmi'
icon_state = "lbulb"
material = /datum/material/glass
@@ -320,3 +394,40 @@
var/turf/open/floor/light/disco_floor = affected_floor
disco_floor.currentcolor = pick(disco_floor.coloredlights)
disco_floor.update_appearance()
+
+/datum/dimension_theme/jungle
+ name = "Jungle"
+ icon = 'icons/obj/tiles.dmi'
+ icon_state = "tile_grass"
+ sound = SFX_CRUNCHY_BUSH_WHACK
+ replace_floors = list(/turf/open/floor/grass = 1)
+ replace_walls = /turf/closed/wall/mineral/wood
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/wood = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/wood = 1),
+ /obj/structure/table = list(/obj/structure/table/wood = 1),
+ )
+ random_spawns = list(
+ /mob/living/carbon/human/species/monkey,
+ /obj/structure/flora/bush/ferny/style_random,
+ /obj/structure/flora/bush/grassy/style_random,
+ /obj/structure/flora/bush/leavy/style_random,
+ /obj/structure/flora/tree/palm/style_random,
+ /obj/structure/flora/bush/sparsegrass/style_random,
+ /obj/structure/flora/bush/sunny/style_random,
+ )
+ random_spawn_chance = 20
+
+/datum/dimension_theme/ayylmao
+ name = "Alien"
+ icon = 'icons/obj/antags/abductor.dmi'
+ icon_state = "sheet-abductor"
+ material = /datum/material/alloy/alien
+ replace_walls = /turf/closed/wall/mineral/abductor
+ replace_floors = list(/turf/open/floor/mineral/abductor = 1)
+ replace_objs = list(
+ /obj/structure/chair = list(/obj/structure/chair/greyscale = 9, /obj/structure/bed/abductor = 1),
+ /obj/machinery/door/airlock = list(/obj/machinery/door/airlock/material = 1, /obj/machinery/door/airlock/material/glass = 2),
+ /obj/structure/table = list(/obj/structure/table/greyscale = 9, /obj/structure/table/abductor = 1),
+ /obj/structure/toilet = list(/obj/structure/toilet/greyscale = 1),
+ )
diff --git a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm
index a219b2f5492..3e6d84d809a 100644
--- a/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm
+++ b/code/game/objects/effects/anomalies/anomalies_ectoplasm.dm
@@ -180,7 +180,7 @@
candidate_list += GLOB.current_observers_list
candidate_list += GLOB.dead_player_list
- var/list/candidates = poll_candidates("Would you like to participate in a spooky ghost swarm? (Warning: you will not be able to return to your body!)", ROLE_SENTIENCE, FALSE, 10 SECONDS, group = candidate_list)
+ var/list/candidates = SSpolling.poll_candidates("Would you like to participate in a spooky ghost swarm? (Warning: you will not be able to return to your body!)", check_jobban = ROLE_SENTIENCE, poll_time = 10 SECONDS, group = candidate_list, pic_source = src, role_name_text = "ghost swarm")
for(var/mob/dead/observer/candidate_ghost as anything in candidates)
var/mob/living/basic/ghost/swarm/new_ghost = new(get_turf(src))
ghosts_spawned += new_ghost
diff --git a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm
index d3ee84181ed..87221eeec9f 100644
--- a/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm
+++ b/code/game/objects/effects/anomalies/anomalies_pyroclastic.dm
@@ -39,7 +39,7 @@
var/datum/action/innate/slime/reproduce/repro_action = new
repro_action.Grant(pyro)
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a pyroclastic anomaly slime?", ROLE_SENTIENCE, null, 10 SECONDS, pyro, POLL_IGNORE_PYROSLIME)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a pyroclastic anomaly slime?", check_jobban = ROLE_SENTIENCE, poll_time = 10 SECONDS, target_mob = pyro, ignore_category = POLL_IGNORE_PYROSLIME, pic_source = pyro, role_name_text = "pyroclastic anomaly slime")
if(!LAZYLEN(candidates))
return
diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm
index da7c4701230..9c114a6dc69 100644
--- a/code/game/objects/effects/bump_teleporter.dm
+++ b/code/game/objects/effects/bump_teleporter.dm
@@ -29,7 +29,7 @@
/obj/effect/bump_teleporter/singularity_pull()
return
-/* SKYRAT EDIT REMOVAL - MOVED TO BLACK_MESA
+/* NOVA EDIT REMOVAL - MOVED TO BLACK_MESA
/obj/effect/bump_teleporter/Bumped(atom/movable/bumper)
if(!validate_setup(bumper))
return
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index d329de34a5f..b195f115d46 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -128,7 +128,7 @@
. = ..()
if(!.)
return
- //AddComponent(/datum/component/rot, 0, 5 MINUTES, 0.7) skyrat edit
+ //AddComponent(/datum/component/rot, 0, 5 MINUTES, 0.7) NOVA EDIT
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
return FALSE
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index daaddb00ce0..8a80692f1a9 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -129,7 +129,6 @@
desc = "Somebody should remove that."
gender = NEUTER
layer = WALL_OBJ_LAYER
- plane = GAME_PLANE_UPPER
icon_state = "cobweb1"
resistance_flags = FLAMMABLE
beauty = -100
diff --git a/code/game/objects/effects/decals/turfdecal/markings.dm b/code/game/objects/effects/decals/turfdecal/markings.dm
index 237ea9eb4ff..f852cb04b5f 100644
--- a/code/game/objects/effects/decals/turfdecal/markings.dm
+++ b/code/game/objects/effects/decals/turfdecal/markings.dm
@@ -244,7 +244,7 @@
icon_state = "siding_plain_end"
/obj/effect/turf_decal/siding/red
- color = "#486091" //SKYRAT EDIT CHANGE
+ color = "#486091" //NOVA EDIT CHANGE
/obj/effect/turf_decal/siding/red/corner
icon_state = "siding_plain_corner"
diff --git a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
index ec307a87d98..3e02261d610 100644
--- a/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
+++ b/code/game/objects/effects/decals/turfdecal/tilecoloring.dm
@@ -83,7 +83,7 @@ TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/yellow)
/obj/effect/turf_decal/tile/red
name = "red tile decal"
- color = "#486091" // SKYRAT EDIT CHANGE
+ color = "#486091" // NOVA EDIT CHANGE
TILE_DECAL_SUBTYPE_HELPER(/obj/effect/turf_decal/tile/red)
@@ -260,7 +260,7 @@ TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/white)
/// Red trimlines
/obj/effect/turf_decal/trimline/red
- color = "#486091" //SKYRAT EDIT CHANGE
+ color = "#486091" //NOVA EDIT CHANGE
TRIMLINE_SUBTYPE_HELPER(/obj/effect/turf_decal/trimline/red)
diff --git a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
index 9a13e68c1b1..efb5b1fbb91 100644
--- a/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/fluid_spread/effects_foam.dm
@@ -17,7 +17,6 @@
anchored = TRUE
density = FALSE
layer = EDGED_TURF_LAYER
- plane = GAME_PLANE_UPPER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
animate_movement = NO_STEPS
/// The types of turfs that this foam cannot spread to.
@@ -298,7 +297,6 @@
opacity = TRUE // changed in New()
anchored = TRUE
layer = EDGED_TURF_LAYER
- plane = GAME_PLANE_UPPER
resistance_flags = FIRE_PROOF | ACID_PROOF
name = "foamed metal"
desc = "A lightweight foamed metal wall that can be used as base to construct a wall."
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index f6151a3cbf6..88c4203c350 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -68,10 +68,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
/obj/effect/landmark/start/prisoner
name = "Prisoner"
icon_state = "Prisoner"
- //SKYRAT EDIT: Start - Makes latejoin prisoners spawn in the prison instead of on the interlink.
+ //NOVA EDIT: Start - Makes latejoin prisoners spawn in the prison instead of on the interlink.
jobspawn_override = TRUE
delete_after_roundstart = FALSE
- //SKYRAT EDIT: End - Makes latejoin prisoners spawn in the prison instead of on the interlink.
+ //NOVA EDIT: End - Makes latejoin prisoners spawn in the prison instead of on the interlink.
/obj/effect/landmark/start/prisoner/after_round_start()
return
@@ -211,10 +211,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
/obj/effect/landmark/start/cyborg
name = "Cyborg"
icon_state = "Cyborg"
- //SKYRAT EDIT: Start - Makes latejoin cyborgs spawn in the station instead of on the interlink.
+ //NOVA EDIT: Start - Makes latejoin cyborgs spawn in the station instead of on the interlink.
jobspawn_override = TRUE
delete_after_roundstart = FALSE
- //SKYRAT EDIT: End - Makes latejoin cyborgs spawn in the station instead of on the interlink.
+ //NOVA EDIT: End - Makes latejoin cyborgs spawn in the station instead of on the interlink.
/obj/effect/landmark/start/ai
name = "AI"
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index 5a23ff32b09..2b8abcb1728 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -38,6 +38,11 @@
moveToNullspace()
return QDEL_HINT_QUEUE
+/obj/effect/spawner/forceMove(atom/destination)
+ if(destination && QDELETED(src)) // throw a warning if we try to forceMove a qdeleted spawner to somewhere other than nullspace
+ stack_trace("Warning: something tried to forceMove() a qdeleted [src]([type]) to non-null destination [destination]([destination.type])!")
+ return ..()
+
/obj/effect/list_container
name = "list container"
diff --git a/code/game/objects/effects/spawners/random/ai_module.dm b/code/game/objects/effects/spawners/random/ai_module.dm
index 1ca7a05f2e9..f87febfa011 100644
--- a/code/game/objects/effects/spawners/random/ai_module.dm
+++ b/code/game/objects/effects/spawners/random/ai_module.dm
@@ -38,8 +38,8 @@
/obj/item/ai_module/supplied/protect_station,
/obj/item/ai_module/supplied/quarantine,
/obj/item/ai_module/remove,
- /obj/item/ai_module/core/full/dagothbot, // SKYRAT EDIT - EDITION
- /obj/item/ai_module/core/full/texas, // SKYRAT EDIT - EDITION
+ /obj/item/ai_module/core/full/dagothbot, // NOVA EDIT - EDITION
+ /obj/item/ai_module/core/full/texas, // NOVA EDIT - EDITION
)
/obj/effect/spawner/random/aimodule/harmful
diff --git a/code/game/objects/effects/spawners/random/contraband.dm b/code/game/objects/effects/spawners/random/contraband.dm
index f5bf0f452a3..ca5acbdbe67 100644
--- a/code/game/objects/effects/spawners/random/contraband.dm
+++ b/code/game/objects/effects/spawners/random/contraband.dm
@@ -141,3 +141,59 @@
/obj/item/restraints/legcuffs/beartrap/prearmed = 5, //not really a landmine, but still a good threat
/obj/effect/mine/shrapnel = 5,
)
+
+/obj/effect/spawner/random/contraband/grenades
+ name = "grenades spawner"
+ loot = list(
+ /obj/item/grenade/chem_grenade/metalfoam,
+ /obj/item/grenade/chem_grenade/cleaner,
+ /obj/effect/spawner/random/entertainment/colorful_grenades,
+ /obj/item/grenade/smokebomb,
+ /obj/item/grenade/chem_grenade/antiweed,
+ /obj/item/grenade/spawnergrenade/syndiesoap,
+ /obj/effect/spawner/random/contraband/grenades/dangerous,
+ )
+
+/obj/effect/spawner/random/contraband/grenades/dangerous
+ name = "dangerous grenades spawner"
+ loot = list(
+ /obj/item/grenade/flashbang = 3,
+ /obj/item/grenade/chem_grenade/teargas = 2,
+ /obj/item/grenade/iedcasing/spawned = 2,
+ /obj/item/grenade/empgrenade = 2,
+ /obj/item/grenade/antigravity = 2,
+ /obj/effect/spawner/random/contraband/grenades/cluster = 1,
+ /obj/effect/spawner/random/contraband/grenades/lethal = 1,
+ )
+
+/obj/effect/spawner/random/contraband/grenades/cluster
+ name = "clusterbusters spawner"
+ loot = list(
+ /obj/item/grenade/clusterbuster/smoke = 4,
+ /obj/item/grenade/clusterbuster/metalfoam = 4,
+ /obj/item/grenade/clusterbuster/cleaner = 4,
+ /obj/item/grenade/clusterbuster = 3,
+ /obj/item/grenade/clusterbuster/teargas = 3,
+ /obj/item/grenade/clusterbuster/antiweed = 3,
+ /obj/item/grenade/clusterbuster/soap = 2,
+ /obj/item/grenade/clusterbuster/emp = 1,
+ /obj/item/grenade/clusterbuster/spawner_spesscarp = 1,
+ /obj/item/grenade/clusterbuster/facid = 1,
+ /obj/item/grenade/clusterbuster/inferno = 1,
+ /obj/item/grenade/clusterbuster/clf3 = 1,
+ )
+
+/obj/effect/spawner/random/contraband/grenades/lethal
+ name = "lethal grenades spawner"
+ loot = list(
+ /obj/item/grenade/chem_grenade/incendiary = 3,
+ /obj/item/grenade/chem_grenade/facid = 3,
+ /obj/item/grenade/chem_grenade/ez_clean = 3,
+ /obj/item/grenade/chem_grenade/clf3 = 2,
+ /obj/item/grenade/gluon = 2,
+ /obj/item/grenade/chem_grenade/holy = 2,
+ /obj/item/grenade/spawnergrenade/spesscarp = 1,
+ /obj/item/grenade/spawnergrenade/cat = 1,
+ /obj/item/grenade/frag = 1,
+ /obj/item/grenade/chem_grenade/bioterrorfoam = 1,
+ )
diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm
index 1c635f07a5a..0a61cd1ab1f 100644
--- a/code/game/objects/effects/spawners/random/entertainment.dm
+++ b/code/game/objects/effects/spawners/random/entertainment.dm
@@ -281,3 +281,12 @@
/obj/item/toy/plush/ratplush = 2,
/obj/item/toy/plush/narplush = 2,
)
+
+/obj/effect/spawner/random/entertainment/colorful_grenades
+ name = "colorful/glitter grenades spawner"
+ loot = list(
+ /obj/item/grenade/chem_grenade/glitter/pink,
+ /obj/item/grenade/chem_grenade/glitter/blue,
+ /obj/item/grenade/chem_grenade/glitter/white,
+ /obj/item/grenade/chem_grenade/colorful
+ )
diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm
index b2639b2df68..192914b6e3d 100644
--- a/code/game/objects/effects/spawners/random/food_or_drink.dm
+++ b/code/game/objects/effects/spawners/random/food_or_drink.dm
@@ -323,3 +323,17 @@
/obj/item/food/donut/jelly/slimejelly/matcha = 2,
/obj/item/food/donut/jelly/slimejelly/trumpet = 2,
)
+
+/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage
+ name = "any snack or beverage spawner"
+ icon_state = "slime_jelly_donut"
+ loot = list(
+ /obj/effect/spawner/random/food_or_drink/snack = 6,
+ /obj/effect/spawner/random/food_or_drink/refreshing_beverage = 6,
+ /obj/effect/spawner/random/food_or_drink/donuts = 5,
+ /obj/effect/spawner/random/food_or_drink/donkpockets_single = 5,
+ /obj/effect/spawner/random/food_or_drink/booze = 4,
+ /obj/effect/spawner/random/food_or_drink/snack/lizard = 4,
+ /obj/effect/spawner/random/food_or_drink/jelly_donuts = 3,
+ /obj/effect/spawner/random/food_or_drink/slime_jelly_donuts = 1,
+ )
diff --git a/code/game/objects/effects/spawners/random/medical.dm b/code/game/objects/effects/spawners/random/medical.dm
index ccbc109254a..b0f7a4aeaf5 100644
--- a/code/game/objects/effects/spawners/random/medical.dm
+++ b/code/game/objects/effects/spawners/random/medical.dm
@@ -70,7 +70,7 @@
icon_state = "xeno_egg"
loot = list(
/obj/effect/decal/remains/xeno = 49,
- /obj/item/clothing/mask/facehugger/toy = 1, // SKYRAT EDIT - They should be handled by dynamic - ORIGIGNAL: /obj/effect/spawner/xeno_egg_delivery = 1,
+ /obj/item/clothing/mask/facehugger/toy = 1, // NOVA EDIT - They should be handled by dynamic - ORIGIGNAL: /obj/effect/spawner/xeno_egg_delivery = 1,
)
/obj/effect/spawner/random/medical/surgery_tool
diff --git a/code/game/objects/effects/spiderwebs.dm b/code/game/objects/effects/spiderwebs.dm
index 9a3d6c9c8e3..5023f9bd825 100644
--- a/code/game/objects/effects/spiderwebs.dm
+++ b/code/game/objects/effects/spiderwebs.dm
@@ -114,7 +114,7 @@
opacity = TRUE
density = TRUE
max_integrity = 90
- plane = GAME_PLANE_UPPER
+ layer = ABOVE_MOB_LAYER
resistance_flags = FIRE_PROOF | FREEZE_PROOF
/obj/structure/spider/solid/Initialize(mapload)
@@ -130,7 +130,7 @@
opacity = TRUE
max_integrity = 60
alpha = 200
- plane = GAME_PLANE_UPPER
+ layer = ABOVE_MOB_LAYER
resistance_flags = FIRE_PROOF | FREEZE_PROOF
/obj/structure/spider/passage/Initialize(mapload)
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index 5b9f5a5a06b..05ecfeec2ba 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -21,7 +21,6 @@
if(SOUTH)
target_pixel_y = -16
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
if(EAST)
target_pixel_x = 16
if(WEST)
@@ -36,12 +35,10 @@
target_pixel_x = 16
target_pixel_y = -16
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
if(SOUTHWEST)
target_pixel_x = -16
target_pixel_y = -16
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
animate(src, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = duration)
/obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter
@@ -270,8 +267,8 @@
/obj/effect/temp_visual/telekinesis
name = "telekinetic force"
//icon_state = "empdisable" //Non-Skyrat version
- icon_state = "telekinesis_throw" //Skyrat edit, was "empdisable"
- icon = 'modular_skyrat/master_files/icons/effects/tele_effects.dmi' //Skyrat Addition
+ icon_state = "telekinesis_throw" //NOVA EDIT, was "empdisable"
+ icon = 'modular_nova/master_files/icons/effects/tele_effects.dmi' //Skyrat Addition
duration = 5
/obj/effect/temp_visual/emp
diff --git a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
index 1e8577bbd3a..81c854f2c3e 100644
--- a/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
+++ b/code/game/objects/effects/temporary_visuals/projectiles/projectile_effects.dm
@@ -3,7 +3,6 @@
icon = 'icons/obj/weapons/guns/projectiles.dmi'
icon_state = "nothing"
layer = HITSCAN_PROJECTILE_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
anchored = TRUE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
appearance_flags = LONG_GLIDE
diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
index 0d5b7bf1463..9669b4ed290 100644
--- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm
+++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm
@@ -3,7 +3,6 @@
icon_state = "nothing"
anchored = TRUE
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
///time, in deciseconds, that this object will exist
var/duration = 10
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 4a8ad3f4cad..a71c479811f 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -217,10 +217,10 @@
var/override_notes = FALSE
/// Used if we want to have a custom verb text for throwing. "John Spaceman flicks the ciggerate" for example.
var/throw_verb
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
/// Does this use the advanced reskinning setup?
var/uses_advanced_reskins = FALSE
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/// A lazylist used for applying fantasy values, contains the actual modification applied to a variable.
var/list/fantasy_modifications = null
@@ -371,7 +371,7 @@
return
if(greyscale_config_worn)
worn_icon = SSgreyscale.GetColoredIconByType(greyscale_config_worn, greyscale_colors)
- // SKYRAT EDIT ADD START
+ // NOVA EDIT ADD START
if(greyscale_config_worn_digi)
worn_icon_digi = SSgreyscale.GetColoredIconByType(greyscale_config_worn_digi, greyscale_colors)
if(greyscale_config_worn_muzzled)
@@ -390,7 +390,7 @@
worn_icon_taur_paw = SSgreyscale.GetColoredIconByType(greyscale_config_worn_taur_paw, greyscale_colors)
if(greyscale_config_worn_taur_hoof)
worn_icon_taur_hoof = SSgreyscale.GetColoredIconByType(greyscale_config_worn_taur_hoof, greyscale_colors)
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
if(greyscale_config_inhand_left)
lefthand_file = SSgreyscale.GetColoredIconByType(greyscale_config_inhand_left, greyscale_colors)
if(greyscale_config_inhand_right)
@@ -1189,13 +1189,13 @@
return !HAS_TRAIT(src, TRAIT_NODROP) && !(item_flags & ABSTRACT)
/obj/item/proc/doStrip(mob/stripper, mob/owner)
- //SKYRAT EDIT CHANGE BEGIN - THIEVING GLOVES - ORIGINAL: return owner.dropItemToGround(src)
+ //NOVA EDIT CHANGE BEGIN - THIEVING GLOVES - ORIGINAL: return owner.dropItemToGround(src)
if (!owner.dropItemToGround(src))
return FALSE
if (HAS_TRAIT(stripper, TRAIT_STICKY_FINGERS))
stripper.put_in_hands(src)
return TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
@@ -1409,7 +1409,7 @@
if(SEND_SIGNAL(src, COMSIG_ITEM_OFFER_TAKEN, offerer, taker) & COMPONENT_OFFER_INTERRUPT)
return TRUE
-/// SKYRAT EDIT ADDITION START
+/// NOVA EDIT ADDITION START
/obj/item/reskin_obj(mob/M)
if(!uses_advanced_reskins)
return ..()
@@ -1475,7 +1475,7 @@
/obj/item/proc/post_reskin(mob/our_mob)
return
-/// SKYRAT EDIT ADDITION END
+/// NOVA EDIT ADDITION END
/// Special stuff you want to do when an outfit equips this item.
/obj/item/proc/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot)
@@ -1734,3 +1734,6 @@
if (!isnull(tool_behaviour))
return list(tool_behaviour)
return null
+
+/obj/item/animate_atom_living(mob/living/owner)
+ new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner)
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index a7a17de8814..eaa28431978 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -327,7 +327,6 @@
/datum/asset/spritesheet/decals
name = "floor_decals"
- cross_round_cachable = TRUE
/// The floor icon used for blend_preview_floor()
var/preview_floor_icon = 'icons/turf/floors.dmi'
@@ -395,7 +394,7 @@
list("Neutral", "#D4D4D432"),
list("Dark", "#0e0f0f"),
list("Bar Burgundy", "#79150082"),
- list("Sec Blue", "#486091"), // SKYRAT EDIT CHANGE
+ list("Sec Blue", "#486091"), // NOVA EDIT CHANGE
list("Cargo Brown", "#A46106"),
list("Engi Yellow", "#EFB341"),
list("Service Green", "#9FED58"),
diff --git a/code/game/objects/items/binoculars.dm b/code/game/objects/items/binoculars.dm
index 47b36843d01..5557d457d4a 100644
--- a/code/game/objects/items/binoculars.dm
+++ b/code/game/objects/items/binoculars.dm
@@ -9,46 +9,21 @@
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
- var/mob/listeningTo
- var/zoom_out_amt = 5.5
- var/zoom_amt = 10
/obj/item/binoculars/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, force_unwielded=8, force_wielded=12, wield_callback = CALLBACK(src, PROC_REF(on_wield)), unwield_callback = CALLBACK(src, PROC_REF(on_unwield)))
-
-/obj/item/binoculars/Destroy()
- listeningTo = null
- return ..()
+ AddComponent(/datum/component/scope, range_modifier = 4, zoom_method = ZOOM_METHOD_WIELD)
/obj/item/binoculars/proc/on_wield(obj/item/source, mob/user)
- RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_walk))
- RegisterSignal(user, COMSIG_ATOM_DIR_CHANGE, PROC_REF(rotate))
- listeningTo = user
user.visible_message(span_notice("[user] holds [src] up to [user.p_their()] eyes."), span_notice("You hold [src] up to your eyes."))
inhand_icon_state = "binoculars_wielded"
user.regenerate_icons()
- user.client.view_size.zoomOut(zoom_out_amt, zoom_amt, user.dir)
-
-/obj/item/binoculars/proc/rotate(atom/thing, old_dir, new_dir)
- SIGNAL_HANDLER
-
- if(ismob(thing))
- var/mob/lad = thing
- lad.regenerate_icons()
- lad.client.view_size.zoomOut(zoom_out_amt, zoom_amt, new_dir)
-
-/obj/item/binoculars/proc/on_walk()
- SIGNAL_HANDLER
-
- attack_self(listeningTo) //Yes I have sinned, why do you ask?
+ //Have you ever tried running with binocs on? It takes some willpower not to stop as things appear way too close than they're.
+ user.add_movespeed_modifier(/datum/movespeed_modifier/binocs_wielded)
/obj/item/binoculars/proc/on_unwield(obj/item/source, mob/user)
- if(listeningTo)
- UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
- UnregisterSignal(user, COMSIG_ATOM_DIR_CHANGE)
- listeningTo = null
user.visible_message(span_notice("[user] lowers [src]."), span_notice("You lower [src]."))
inhand_icon_state = "binoculars"
user.regenerate_icons()
- user.client.view_size.zoomIn()
+ user.remove_movespeed_modifier(/datum/movespeed_modifier/binocs_wielded)
diff --git a/code/game/objects/items/botpad_remote.dm b/code/game/objects/items/botpad_remote.dm
index eb8cf8bb905..ff77b088063 100644
--- a/code/game/objects/items/botpad_remote.dm
+++ b/code/game/objects/items/botpad_remote.dm
@@ -52,7 +52,7 @@
if(connected_botpad.panel_open)
user?.balloon_alert(user, "close the panel!")
return
- if(!(locate(/mob/living/simple_animal/bot) in get_turf(connected_botpad)))
+ if(!(locate(/mob/living) in get_turf(connected_botpad)))
user?.balloon_alert(user, "no bots detected on the pad!")
return
connected_botpad.launch(user)
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 195895c44c3..d67b773b5a8 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -92,7 +92,7 @@
var/holopay_name = "holographic pay stand"
/// Registered owner's age.
- var/registered_age = 18 //SKYRAT EDIT - ORIGINAL (13)
+ var/registered_age = 18 //NOVA EDIT - ORIGINAL (13)
/// The job name registered on the card (for example: Assistant).
var/assignment
@@ -419,7 +419,7 @@
if(Adjacent(user))
var/minor
if(registered_name && registered_age && registered_age < AGE_MINOR)
- minor = " [registered_age] " //SKYRAT EDIT CHANGE
+ minor = " [registered_age] " //NOVA EDIT CHANGE
user.visible_message(span_notice("[user] shows you: [icon2html(src, viewers(user))] [src.name][minor]."), span_notice("You show \the [src.name][minor]."))
add_fingerprint(user)
@@ -569,11 +569,11 @@
if (money_added)
to_chat(user, span_notice("You stuff the contents into the card! They disappear in a puff of bluespace smoke, adding [money_added] worth of credits to the linked account."))
return
- /// SKYRAT EDIT BEGINS - Trim Tokens - Proc defined in modular_skyrat/modules/trim_tokens/code/cards_id.dm
+ /// NOVA EDIT BEGINS - Trim Tokens - Proc defined in modular_nova/modules/trim_tokens/code/cards_id.dm
else if(istype(W, /obj/item/trim_token))
apply_token(W, user)
return
- /// SKYRAT EDIT ENDS
+ /// NOVA EDIT ENDS
else
return ..()
@@ -1005,7 +1005,7 @@
if(istype(old_loc, /obj/item/storage/wallet))
UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
- if(istype(old_loc, /obj/item/modular_computer/pda))
+ if(istype(old_loc, /obj/item/modular_computer))
UnregisterSignal(old_loc, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
//New loc
@@ -1013,7 +1013,7 @@
RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status))
RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status))
- if(istype(loc, /obj/item/modular_computer/pda))
+ if(istype(loc, /obj/item/modular_computer))
RegisterSignal(loc, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status))
RegisterSignal(loc, COMSIG_ITEM_DROPPED, PROC_REF(remove_intern_status))
@@ -1345,7 +1345,7 @@
desc = "A highly advanced chameleon ID card. Touch this card on another ID card or player to choose which accesses to copy. \
Has special magnetic properties which force it to the front of wallets."
trim = /datum/id_trim/chameleon
- wildcard_slots = WILDCARD_LIMIT_CHAMELEON_PLUS // SKYRAT EDIT - Original WILDCARD_LIMIT_CHAMELEON
+ wildcard_slots = WILDCARD_LIMIT_CHAMELEON_PLUS // NOVA EDIT - Original WILDCARD_LIMIT_CHAMELEON
actions_types = list(/datum/action/item_action/chameleon/change/id, /datum/action/item_action/chameleon/change/id_trim)
/// Have we set a custom name and job assignment, or will we use what we're given when we chameleon change?
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index e9378d505f3..ee78b11c720 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -43,10 +43,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/match/proc/matchignite()
if(lit || burnt)
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/turf/my_turf = get_turf(src)
my_turf.pollute_turf(/datum/pollutant/sulphur, 5)
- //SKYRAT EDIT END
+ //NOVA EDIT END
playsound(src, 'sound/items/match_strike.ogg', 15, TRUE)
lit = TRUE
icon_state = "match_lit"
@@ -173,7 +173,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/// When choking, what is the maximum amount of time we COULD choke for
var/choke_time_max = 30 SECONDS // I am mean
- var/pollution_type = /datum/pollutant/smoke //SKYRAT EDIT ADDITION /// What type of pollution does this produce on smoking, changed to weed pollution sometimes
+ var/pollution_type = /datum/pollutant/smoke //NOVA EDIT ADDITION /// What type of pollution does this produce on smoking, changed to weed pollution sometimes
/obj/item/clothing/mask/cigarette/Initialize(mapload)
@@ -294,12 +294,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
e.start(src)
qdel(src)
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
// Setting the puffed pollutant to cannabis if we're smoking the space drugs reagent(obtained from cannabis)
if(reagents.has_reagent(/datum/reagent/drug/space_drugs))
pollution_type = /datum/pollutant/smoke/cannabis
// allowing reagents to react after being lit
- //SKYRAT EDIT END
+ //NOVA EDIT END
reagents.flags &= ~(NO_REACT)
reagents.handle_reactions()
@@ -379,10 +379,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
extinguish()
return
- // SKYRAT EDIT ADDITION START - Pollution
+ // NOVA EDIT ADDITION START - Pollution
var/turf/location = get_turf(src)
location.pollute_turf(pollution_type, 5, POLLUTION_PASSIVE_EMITTER_CAP)
- // SKYRAT EDIT END
+ // NOVA EDIT END
smoketime -= seconds_per_tick * (1 SECONDS)
if(smoketime <= 0)
@@ -847,7 +847,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
span_notice("You hear a quiet click, as [user] shuts off [src] without even looking at what [user.p_theyre()] doing. Wow."),
span_notice("You quietly shut off [src] without even looking at what you're doing. Wow.")
)
- playsound(src, 'modular_skyrat/master_files/sound/items/zippo_close.ogg', 50, TRUE) // SKYRAT EDIT ADDITION
+ playsound(src, 'modular_nova/master_files/sound/items/zippo_close.ogg', 50, TRUE) // NOVA EDIT ADDITION
else
user.visible_message(
span_notice("[user] quietly shuts off [src]."),
@@ -861,7 +861,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
span_notice("Without even breaking stride, [user] flips open and lights [src] in one smooth movement."),
span_notice("Without even breaking stride, you flip open and light [src] in one smooth movement.")
)
- playsound(src, 'modular_skyrat/master_files/sound/items/zippo_open.ogg', 50, TRUE) // SKYRAT EDIT ADDITION
+ playsound(src, 'modular_nova/master_files/sound/items/zippo_open.ogg', 50, TRUE) // NOVA EDIT ADDITION
return
var/hand_protected = FALSE
@@ -1053,12 +1053,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
name = "\improper E-Cigarette"
desc = "A classy and highly sophisticated electronic cigarette, for classy and dignified gentlemen. A warning label reads \"Warning: Do not fill with flammable materials.\""//<<< i'd vape to that.
icon = 'icons/obj/clothing/masks.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi' //SKYRAT EDIT: ADDITION
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask.dmi' //NOVA EDIT: ADDITION
icon_state = "vape"
worn_icon_state = "vape_worn"
greyscale_config = /datum/greyscale_config/vape
greyscale_config_worn = /datum/greyscale_config/vape/worn
- greyscale_config_worn_muzzled = /datum/greyscale_config/vape/worn/muzzled //SKYRAT EDIT ADDITION
+ greyscale_config_worn_muzzled = /datum/greyscale_config/vape/worn/muzzled //NOVA EDIT ADDITION
greyscale_colors = "#2e2e2e"
inhand_icon_state = null
w_class = WEIGHT_CLASS_TINY
@@ -1208,11 +1208,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
//Time to start puffing those fat vapes, yo.
COOLDOWN_START(src, drag_cooldown, dragtime)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
//open flame removed because vapes are a closed system, they won't light anything on fire
var/turf/my_turf = get_turf(src)
my_turf.pollute_turf(/datum/pollutant/smoke/vape, 5, POLLUTION_PASSIVE_EMITTER_CAP)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(obj_flags & EMAGGED)
var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/puff = new
diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
index 0645ad04165..906f2ec2f95 100644
--- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm
@@ -283,7 +283,7 @@
/obj/item/circuitboard/machine/turbine_compressor
name = "Turbine - Inlet Compressor"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
- build_path = /obj/machinery/power/turbine/inlet_compressor/constructed
+ build_path = /obj/machinery/power/turbine/inlet_compressor
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/iron = 5)
@@ -291,7 +291,7 @@
/obj/item/circuitboard/machine/turbine_rotor
name = "Turbine - Core Rotor"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
- build_path = /obj/machinery/power/turbine/core_rotor/constructed
+ build_path = /obj/machinery/power/turbine/core_rotor
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/iron = 5)
@@ -299,7 +299,7 @@
/obj/item/circuitboard/machine/turbine_stator
name = "Turbine - Turbine Outlet"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
- build_path = /obj/machinery/power/turbine/turbine_outlet/constructed
+ build_path = /obj/machinery/power/turbine/turbine_outlet
req_components = list(
/obj/item/stack/cable_coil = 5,
/obj/item/stack/sheet/iron = 5)
@@ -656,17 +656,17 @@
/obj/machinery/vending/robotics = "Robotech Deluxe",
/obj/machinery/vending/engineering = "Robco Tool Maker",
/obj/machinery/vending/sovietsoda = "BODA",
- /obj/machinery/vending/security = "Armadyne Peacekeeper Equipment Vendor", //SKYRAT EDIT CHANGE - SEC_HUAL - ORIGINAL: /obj/machinery/vending/security = "SecTech",
+ /obj/machinery/vending/security = "Armadyne Peacekeeper Equipment Vendor", //NOVA EDIT CHANGE - SEC_HUAL - ORIGINAL: /obj/machinery/vending/security = "SecTech",
/obj/machinery/vending/modularpc = "Deluxe Silicate Selections",
/obj/machinery/vending/tool = "YouTool",
/obj/machinery/vending/custom = "Custom Vendor",
- /obj/machinery/vending/dorms = "LustWish", //SKYRAT EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend"
- /obj/machinery/vending/access/command = "Command Outfitting Station", //SKYRAT EDIT ADDITION
- /obj/machinery/vending/barbervend = "Fab-O-Vend", //SKYRAT EDIT ADDITION
- /obj/machinery/vending/imported = "NT Sustenance Supplier", //SKYRAT EDIT ADDITION
- /obj/machinery/vending/imported/yangyu = "Fudobenda", //SKYRAT EDIT ADDITION
- /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //SKYRAT EDIT ADDITION
- /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies",) //SKYRAT EDIT ADDITION
+ /obj/machinery/vending/dorms = "LustWish", //NOVA EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend"
+ /obj/machinery/vending/access/command = "Command Outfitting Station", //NOVA EDIT ADDITION
+ /obj/machinery/vending/barbervend = "Fab-O-Vend", //NOVA EDIT ADDITION
+ /obj/machinery/vending/imported = "NT Sustenance Supplier", //NOVA EDIT ADDITION
+ /obj/machinery/vending/imported/yangyu = "Fudobenda", //NOVA EDIT ADDITION
+ /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //NOVA EDIT ADDITION
+ /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies",) //NOVA EDIT ADDITION
/obj/item/circuitboard/machine/vendor/screwdriver_act(mob/living/user, obj/item/tool)
var/static/list/display_vending_names_paths
diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm
index b865d9c4579..68b523932b7 100644
--- a/code/game/objects/items/cosmetics.dm
+++ b/code/game/objects/items/cosmetics.dm
@@ -6,7 +6,7 @@
gender = PLURAL
name = "red lipstick"
desc = "A generic brand of lipstick."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi' //SKYRAT EDIT CHANGE - ORIGINAL: icon = 'icons/obj/cosmetic.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi' //NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/obj/cosmetic.dmi'
icon_state = "lipstick"
inhand_icon_state = "lipstick"
w_class = WEIGHT_CLASS_TINY
@@ -182,7 +182,7 @@
span_notice("You wipe off [target]'s lipstick."))
target.update_lips(null)
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 5ba709ef324..3090842b65a 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -14,6 +14,7 @@
#define AVAILABLE_SPRAYCAN_SPACE 8 // enough to fill one radial menu page
+#define DRAW_TIME 5 SECONDS
#define INFINITE_CHARGES -1
/*
@@ -504,11 +505,13 @@
audible_message(span_notice("You hear spraying."))
playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5)
- var/wait_time = 50
+ var/wait_time = DRAW_TIME
if(paint_mode == PAINT_LARGE_HORIZONTAL)
wait_time *= 3
+ if(istagger)
+ wait_time *= 0.5
- if(!instant && !do_after(user, 50, target = target))
+ if(!instant && !do_after(user, wait_time, target = target))
return
if(!use_charges(user, cost))
@@ -762,6 +765,30 @@
/datum/component/slapcrafting,\
slapcraft_recipes = slapcraft_recipe_list,\
)
+ register_context()
+ register_item_context()
+
+/obj/item/toy/crayon/spraycan/add_context(atom/source, list/context, obj/item/held_item, mob/living/user)
+ . = ..()
+
+ if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS))
+ return .
+
+ if(has_cap)
+ context[SCREENTIP_CONTEXT_ALT_LMB] = "Toggle cap"
+
+ return CONTEXTUAL_SCREENTIP_SET
+
+/obj/item/toy/crayon/spraycan/add_item_context(datum/source, list/context, atom/target, mob/living/user)
+ . = ..()
+
+ if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS))
+ return .
+
+ context[SCREENTIP_CONTEXT_LMB] = "Paint"
+ context[SCREENTIP_CONTEXT_RMB] = "Copy color"
+
+ return CONTEXTUAL_SCREENTIP_SET
/obj/item/toy/crayon/spraycan/isValidSurface(surface)
return (isfloorturf(surface) || iswallturf(surface))
@@ -1040,3 +1067,4 @@
#undef PAINT_LARGE_HORIZONTAL_ICON
#undef INFINITE_CHARGES
+#undef DRAW_TIME
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index bfcb42a94b2..269e6ac43f1 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -578,12 +578,12 @@
do_cancel()
/obj/item/shockpaddles/proc/do_help(mob/living/carbon/H, mob/living/user)
- var/target_synthetic = (H.mob_biotypes & MOB_ROBOTIC) // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL
+ var/target_synthetic = (H.mob_biotypes & MOB_ROBOTIC) // NOVA EDIT ADDITION BEGIN - SYNTH REVIVAL
if (target_synthetic)
to_chat(user, span_boldwarning("[H] is a synthetic lifeform! This defibrillator probably isn't calibrated to revive [H.p_them()] properly and could have some serious consequences! \
[span_warning("You might want to [span_blue("surgically revive [H.p_them()]")]...")]"))
balloon_alert(user, "target is synthetic!") // immediately grabs their attention even if they dont see chat
- // SKYRAT EDIT ADDITION END - SYNTH REVIVAL
+ // NOVA EDIT ADDITION END - SYNTH REVIVAL
user.visible_message(span_warning("[user] begins to place [src] on [H]'s chest."), span_warning("You begin to place [src] on [H]'s chest..."))
busy = TRUE
update_appearance()
@@ -630,10 +630,10 @@
fail_reason = "Patient's brain is missing. Further attempts futile."
if (DEFIB_FAIL_BLACKLISTED)
fail_reason = "Patient has been blacklisted from revival. Further attempts futile."
- //SKYRAT EDIT ADDITION - DNR TRAIT
+ //NOVA EDIT ADDITION - DNR TRAIT
if (DEFIB_FAIL_DNR)
fail_reason = "Patient has been flagged as Do Not Resuscitate. Further attempts futile."
- //SKYRAT EDIT ADDITION END - DNR TRAIT
+ //NOVA EDIT ADDITION END - DNR TRAIT
if(fail_reason)
user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - [fail_reason]"))
@@ -663,14 +663,14 @@
H.revive()
H.emote("gasp")
H.set_jitter_if_lower(200 SECONDS)
- to_chat(H, "[CONFIG_GET(string/blackoutpolicy)] ") //SKYRAT EDIT ADDITION
+ to_chat(H, "[CONFIG_GET(string/blackoutpolicy)] ") //NOVA EDIT ADDITION
SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK)
if(HAS_MIND_TRAIT(user, TRAIT_MORBID))
user.add_mood_event("morbid_saved_life", /datum/mood_event/morbid_saved_life)
else
user.add_mood_event("saved_life", /datum/mood_event/saved_life)
log_combat(user, H, "revived", defib)
- // SKYRAT EDIT ADDITION BEGIN - SYNTH REVIVAL
+ // NOVA EDIT ADDITION BEGIN - SYNTH REVIVAL
if (target_synthetic)
user.visible_message(span_boldwarning("[src] fire a powerful jolt of electricity into [H]'s vulnerable circuitry!"))
to_chat(H, span_userdanger("[user]'s defibrillator fires a powerful jolt of electricity into your vulnerable circuitry, overloading it!"))
@@ -685,7 +685,7 @@
var/datum/brain_trauma/trauma = brain_organ.gain_trauma_type(SYNTH_DEFIBBED_TRAUMA_SEVERITY, TRAUMA_LIMIT_BASIC)
if (!QDELETED(trauma))
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_synth_defib_trauma), brain_organ, trauma), SYNTH_DEFIBBED_TRAUMA_DURATION)
- // SKYRAT EDIT ADDITION END - SYNTH REVIVAL
+ // NOVA EDIT ADDITION END - SYNTH REVIVAL
do_success()
return
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 75623ed57e8..e5507473fae 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -140,9 +140,6 @@
/obj/effect/dummy/chameleon/attack_animal(mob/user, list/modifiers)
master.disrupt()
-/obj/effect/dummy/chameleon/attack_slime(mob/user, list/modifiers)
- master.disrupt()
-
/obj/effect/dummy/chameleon/attack_alien(mob/user, list/modifiers)
master.disrupt()
diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm
index 7a2efbcec7e..e8ce6fe57a4 100644
--- a/code/game/objects/items/devices/desynchronizer.dm
+++ b/code/game/objects/items/devices/desynchronizer.dm
@@ -1,4 +1,4 @@
-/obj/item/desynchronizer //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
+/obj/item/desynchronizer //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
name = "desynchronizer"
desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active."
icon = 'icons/obj/devices/syndie_gadget.dmi'
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index d0a94da0cac..f7c9b4eda7d 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -529,7 +529,7 @@
randomize_fuel = FALSE
trash_type = /obj/item/trash/candle
can_be_extinguished = TRUE
- var/scented_type //SKYRAT EDIT ADDITION /// Pollutant type for scented candles
+ var/scented_type //NOVA EDIT ADDITION /// Pollutant type for scented candles
/// The current wax level, used for drawing the correct icon
var/current_wax_level = 1
/// The previous wax level, remembered so we only have to make 3 update_appearance calls total as opposed to every tick
@@ -690,8 +690,8 @@
light_system = MOVABLE_LIGHT
/obj/item/flashlight/emp
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT
- special_desc = "This flashlight is equipped with a miniature EMP generator." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "This flashlight is equipped with a miniature EMP generator." //NOVA EDIT
var/emp_max_charges = 4
var/emp_cur_charges = 4
var/charge_timer = 0
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 8103fb491cb..a661c2877d3 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -1,5 +1,5 @@
-/obj/item/gps //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
+/obj/item/gps //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
name = "global positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
icon = 'icons/obj/devices/tracker.dmi'
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index a9046145168..e3b1c2430c2 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -262,18 +262,18 @@
//catpeople: make any felinid near the target to face the target, chance for felinids to pounce at the light, stepping to the target
for(var/mob/living/carbon/human/target_felinid in view(1, targloc))
- if(!isfeline(target_felinid) || target_felinid.stat == DEAD || target_felinid.is_blind() || target_felinid.incapacitated()) // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(H)
+ if(!isfeline(target_felinid) || target_felinid.stat == DEAD || target_felinid.is_blind() || target_felinid.incapacitated()) // NOVA EDIT - FELINE TRAITS. Was: isfelinid(H)
continue
if(target_felinid.body_position == STANDING_UP)
target_felinid.setDir(get_dir(target_felinid, targloc)) // kitty always looks at the light
- //SKYRAT EDIT REMOVAL BEGIN (removes forced felinid movement from laserpointers, also fixes the longstanding windoor negation glitch)
+ //NOVA EDIT REMOVAL BEGIN (removes forced felinid movement from laserpointers, also fixes the longstanding windoor negation glitch)
/* if(prob(effectchance * diode.rating))
target_felinid.visible_message(span_warning("[target_felinid] makes a grab for the light!"), span_userdanger("LIGHT!"))
target_felinid.Move(targloc)
log_combat(user, target_felinid, "moved with a laser pointer", src)
else
- SKYRAT EDIT REMOVAL END */
- target_felinid.visible_message(span_notice("[target_felinid] looks briefly distracted by the light."), span_warning("You're briefly tempted by the shiny light...")) //SKYRAT EDIT CHANGE : indent this block if re-enabling above
+ NOVA EDIT REMOVAL END */
+ target_felinid.visible_message(span_notice("[target_felinid] looks briefly distracted by the light."), span_warning("You're briefly tempted by the shiny light...")) //NOVA EDIT CHANGE : indent this block if re-enabling above
else
target_felinid.visible_message(span_notice("[target_felinid] stares at the light."), span_warning("You stare at the light..."))
//The pointer is shining, change its sprite to show
@@ -292,9 +292,9 @@
laser.pixel_y = target.pixel_y + rand(-5,5)
if(outmsg)
- user.visible_message(span_danger("[user] points [src] at [target]!"), outmsg) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(user, outmsg)
+ user.visible_message(span_danger("[user] points [src] at [target]!"), outmsg) //NOVA EDIT CHANGE - ORIGINAL: to_chat(user, outmsg)
else
- user.visible_message(span_notice("[user] points [src] at [target]."), span_notice("You point [src] at [target].")) //SKYRAT EDIT CHANGE - ORIGINAL: to_chat(user, span_info("You point [src] at [target]."))
+ user.visible_message(span_notice("[user] points [src] at [target]."), span_notice("You point [src] at [target].")) //NOVA EDIT CHANGE - ORIGINAL: to_chat(user, span_info("You point [src] at [target]."))
//we have successfully shone our pointer, reduce our battery depending on whether we have an extra lens or not
energy -= crystal_lens ? 2 : 1
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 66a8f29ed1d..c845c12b2e4 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -10,7 +10,7 @@
-/obj/item/multitool //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
+/obj/item/multitool //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
icon = 'icons/obj/devices/tool.dmi'
@@ -67,8 +67,8 @@
// Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby.
/obj/item/multitool/ai_detect
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A special sensor embedded stealthily into this device can detect and warn of nearby silicon activity and camera vision range." // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A special sensor embedded stealthily into this device can detect and warn of nearby silicon activity and camera vision range." // NOVA EDIT
actions_types = list(/datum/action/item_action/toggle_multitool)
var/detect_state = PROXIMITY_NONE
var/rangealert = 8 //Glows red when inside
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index c2af9c33821..861dd46109a 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -7,12 +7,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING,
RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY,
RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM,
- RADIO_CHANNEL_FACTION = RADIO_TOKEN_FACTION, //SKYRAT EDIT ADDITION - Faction
- RADIO_CHANNEL_CYBERSUN = RADIO_TOKEN_CYBERSUN, //SKYRAT EDIT ADDITION - Mapping
- RADIO_CHANNEL_INTERDYNE = RADIO_TOKEN_INTERDYNE, //SKYRAT EDIT ADDITION - Mapping
- RADIO_CHANNEL_GUILD = RADIO_TOKEN_GUILD, //SKYRAT EDIT ADDITION - Mapping
- RADIO_CHANNEL_TARKON = RADIO_TOKEN_TARKON, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_CHANNEL_SOLFED = RADIO_TOKEN_SOLFED, //SKYRAT EDIT ADDITION - SOLFED
+ RADIO_CHANNEL_FACTION = RADIO_TOKEN_FACTION, //NOVA EDIT ADDITION - Faction
+ RADIO_CHANNEL_CYBERSUN = RADIO_TOKEN_CYBERSUN, //NOVA EDIT ADDITION - Mapping
+ RADIO_CHANNEL_INTERDYNE = RADIO_TOKEN_INTERDYNE, //NOVA EDIT ADDITION - Mapping
+ RADIO_CHANNEL_GUILD = RADIO_TOKEN_GUILD, //NOVA EDIT ADDITION - Mapping
+ RADIO_CHANNEL_TARKON = RADIO_TOKEN_TARKON, //NOVA EDIT ADDITION - MAPPING
+ RADIO_CHANNEL_SOLFED = RADIO_TOKEN_SOLFED, //NOVA EDIT ADDITION - SOLFED
RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE,
RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY,
RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE,
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 3375a4d16d1..7a79688e5b5 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -320,7 +320,7 @@
var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods)
// Independent radios, on the CentCom frequency, reach all independent radios
- if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //SKYRAT EDIT CHANGE - FACTION, MAPPING, SOLFED
+ if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //NOVA EDIT CHANGE - FACTION, MAPPING, SOLFED
signal.data["compression"] = 0
signal.transmission_method = TRANSMISSION_SUPERSPACE
signal.levels = list(0)
diff --git a/code/game/objects/items/devices/scanners/gas_analyzer.dm b/code/game/objects/items/devices/scanners/gas_analyzer.dm
index fb4a37e6075..76958126f27 100644
--- a/code/game/objects/items/devices/scanners/gas_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/gas_analyzer.dm
@@ -21,6 +21,7 @@
var/cooldown_time = 250
var/barometer_accuracy // 0 is the best accuracy.
var/list/last_gasmix_data
+ var/ranged_scan_distance = 1
/obj/item/analyzer/Initialize(mapload)
. = ..()
@@ -131,17 +132,24 @@
return list("gasmixes" = last_gasmix_data)
/obj/item/analyzer/attack_self(mob/user, modifiers)
- if(user.stat != CONSCIOUS || !user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again
+ if(user.stat != CONSCIOUS || !user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again
return
atmos_scan(user=user, target=get_turf(src), silent=FALSE)
on_analyze(source=src, target=get_turf(src))
/obj/item/analyzer/attack_self_secondary(mob/user, modifiers)
- if(user.stat != CONSCIOUS || !user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again
+ if(user.stat != CONSCIOUS || !user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again
return
ui_interact(user)
+/obj/item/analyzer/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ if(!can_see(user, target, ranged_scan_distance))
+ return
+ . |= AFTERATTACK_PROCESSED_ITEM
+ atmos_scan(user, (target.return_analyzable_air() ? target : get_turf(target)))
+
/// Called when our analyzer is used on something
/obj/item/analyzer/proc/on_analyze(datum/source, atom/target)
SIGNAL_HANDLER
@@ -217,10 +225,4 @@
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.2, /datum/material/gold = SMALL_MATERIAL_AMOUNT*3, /datum/material/bluespace=SMALL_MATERIAL_AMOUNT*2)
grind_results = list(/datum/reagent/mercury = 5, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
-
-/obj/item/analyzer/ranged/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- . = ..()
- if(!can_see(user, target, 15))
- return
- . |= AFTERATTACK_PROCESSED_ITEM
- atmos_scan(user, (target.return_analyzable_air() ? target : get_turf(target)))
+ ranged_scan_distance = 15
diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm
index e38cc2bc43e..207a8b96533 100644
--- a/code/game/objects/items/devices/scanners/health_analyzer.dm
+++ b/code/game/objects/items/devices/scanners/health_analyzer.dm
@@ -44,7 +44,7 @@
return BRUTELOSS
/obj/item/healthanalyzer/attack_self(mob/user)
- if(!user.can_read(src)) //SKYRAT EDIT: Blind People Can Analyze Again
+ if(!user.can_read(src)) //NOVA EDIT: Blind People Can Analyze Again
return
scanmode = (scanmode + 1) % SCANMODE_COUNT
@@ -57,7 +57,7 @@
/obj/item/healthanalyzer/interact_with_atom(atom/interacting_with, mob/living/user)
if(!isliving(interacting_with))
return NONE
- if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again- ORIGINAL: if(!user.can_read(src) || user.is_blind())
+ if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again- ORIGINAL: if(!user.can_read(src) || user.is_blind())
return ITEM_INTERACT_BLOCKING
var/mob/living/M = interacting_with
@@ -95,7 +95,7 @@
/obj/item/healthanalyzer/interact_with_atom_secondary(atom/interacting_with, mob/living/user)
if(!isliving(interacting_with))
return NONE
- if(!user.can_read(src)) // SKYRAT EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(!user.can_read(src) || user.is_blind())
+ if(!user.can_read(src)) // NOVA EDIT CHANGE - Blind people can analyze again - ORIGINAL: if(!user.can_read(src) || user.is_blind())
return ITEM_INTERACT_BLOCKING
chemscan(user, interacting_with)
@@ -180,16 +180,16 @@
if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes
render_list += "Subject lacks a brain. \n"
- var/death_consequences_status_text // SKYRAT EDIT ADDITION: Death consequences quirk
+ var/death_consequences_status_text // NOVA EDIT ADDITION: Death consequences quirk
if(iscarbon(target))
var/mob/living/carbon/carbontarget = target
if(LAZYLEN(carbontarget.get_traumas()))
var/list/trauma_text = list()
for(var/datum/brain_trauma/trauma in carbontarget.get_traumas())
- //SKYRAT EDIT: Scary Traits (Bimbo)
+ //NOVA EDIT: Scary Traits (Bimbo)
if(!trauma.display_scanner)
continue
- //SKYRAT EDIT: Scary Traits (Bimbo)
+ //NOVA EDIT: Scary Traits (Bimbo)
var/trauma_desc = ""
switch(trauma.resilience)
if(TRAUMA_RESILIENCE_SURGERY)
@@ -202,11 +202,11 @@
trauma_desc += "permanent "
trauma_desc += trauma.scan_desc
trauma_text += trauma_desc
- // SKYRAT EDIT ADDITION START: Death Consequences Quirk
+ // NOVA EDIT ADDITION START: Death Consequences Quirk
if (istype(trauma, /datum/brain_trauma/severe/death_consequences))
var/datum/brain_trauma/severe/death_consequences/consequences_trauma = trauma
death_consequences_status_text = consequences_trauma.get_health_analyzer_link_text(user)
- // SKYRAT EDIT ADDITION END: Death Consequences Quirk
+ // NOVA EDIT ADDITION END: Death Consequences Quirk
render_list += "Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)]. \n"
if(carbontarget.quirks.len)
render_list += "Subject Major Disabilities: [carbontarget.get_quirk_string(FALSE, CAT_QUIRK_MAJOR_DISABILITY, from_scan = TRUE)]. \n"
@@ -404,15 +404,15 @@
render_list += "[cyberimp_detect] \n"
// we handled the last so we don't need handholding
- // SKYRAT EDIT ADDITION - Mutant stuff
+ // NOVA EDIT ADDITION - Mutant stuff
if(target.GetComponent(/datum/component/mutant_infection))
render_list += span_userdanger("UNKNOWN PROTO-VIRAL INFECTION DETECTED. ISOLATE IMMEDIATELY.")
- // SKYRAT EDIT END
+ // NOVA EDIT END
- // SKYRAT EDIT ADDITION - DEATH CONSEQUENCES QUIRK
+ // NOVA EDIT ADDITION - DEATH CONSEQUENCES QUIRK
if(death_consequences_status_text)
render_list += death_consequences_status_text
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(tochat)
to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO)
@@ -594,7 +594,7 @@
/obj/item/healthanalyzer/simple/interact_with_atom(atom/interacting_with, mob/living/user)
if(!isliving(interacting_with))
return NONE
- if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL: if(!user.can_read(src) || user.is_blind())
+ if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL: if(!user.can_read(src) || user.is_blind())
return ITEM_INTERACT_BLOCKING
add_fingerprint(user)
diff --git a/code/game/objects/items/devices/scanners/slime_scanner.dm b/code/game/objects/items/devices/scanners/slime_scanner.dm
index ab360c6fc0d..92f681649c4 100644
--- a/code/game/objects/items/devices/scanners/slime_scanner.dm
+++ b/code/game/objects/items/devices/scanners/slime_scanner.dm
@@ -16,7 +16,7 @@
/obj/item/slime_scanner/interact_with_atom(atom/interacting_with, mob/living/user)
if(!isliving(interacting_with))
return NONE
- if(!user.can_read(src)) //SKYRAT EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL : if(!user.can_read(src) || user.is_blind())
+ if(!user.can_read(src)) //NOVA EDIT CHANGE - Blind People Can Analyze Again - ORIGINAL : if(!user.can_read(src) || user.is_blind())
return ITEM_INTERACT_BLOCKING
if (!isslime(interacting_with))
to_chat(user, span_warning("This device can only scan slimes!"))
@@ -27,12 +27,12 @@
/proc/slime_scan(mob/living/simple_animal/slime/scanned_slime, mob/living/user)
var/to_render = "Slime scan results: \
- \n[span_notice("[scanned_slime.slime_type.colour] [scanned_slime.is_adult ? "adult" : "baby"] slime")]\
- \nNutrition: [scanned_slime.nutrition]/[scanned_slime.get_max_nutrition()]"
+ \n[span_notice("[scanned_slime.slime_type.colour] [scanned_slime.life_stage] slime")]\
+ \nNutrition: [scanned_slime.nutrition]/[scanned_slime.max_nutrition]"
- if (scanned_slime.nutrition < scanned_slime.get_starve_nutrition())
+ if (scanned_slime.nutrition < scanned_slime.starve_nutrition)
to_render += "\n[span_warning("Warning: slime is starving!")]"
- else if (scanned_slime.nutrition < scanned_slime.get_hunger_nutrition())
+ else if (scanned_slime.nutrition < scanned_slime.hunger_nutrition)
to_render += "\n[span_warning("Warning: slime is hungry")]"
to_render += "\nElectric charge strength: [scanned_slime.powerlevel]\nHealth: [round(scanned_slime.health/scanned_slime.maxHealth,0.01)*100]%"
diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm
index b034c954811..c9f1ae0fd9d 100644
--- a/code/game/objects/items/devices/scanners/t_scanner.dm
+++ b/code/game/objects/items/devices/scanners/t_scanner.dm
@@ -35,8 +35,7 @@
/obj/item/t_scanner/process()
if(!on)
- STOP_PROCESSING(SSobj, src)
- return null
+ return PROCESS_KILL
scan()
/obj/item/t_scanner/proc/scan()
diff --git a/code/game/objects/items/devices/swapper.dm b/code/game/objects/items/devices/swapper.dm
index ed0f632b381..e2aa385ce93 100644
--- a/code/game/objects/items/devices/swapper.dm
+++ b/code/game/objects/items/devices/swapper.dm
@@ -45,12 +45,12 @@
if(world.time < next_use)
to_chat(user, span_warning("[src] is still recharging."))
return
- //SKYRAT EDIT BEGIN
+ //NOVA EDIT BEGIN
var/turf/my_turf = get_turf(src)
if(is_away_level(my_turf.z))
to_chat(user, "[src] cannot be used here! ")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(QDELETED(linked_swapper))
to_chat(user, span_warning("[src] is not linked with another swapper."))
return
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index 789f6250441..8fe83e2e380 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -107,6 +107,12 @@
icon_state = "de6"
microwave_riggable = FALSE // You can't melt wood in the microwave
+/obj/item/dice/d6/bone
+ name = "bone die"
+ desc = "A die carved from a creature's bone. Dried blood marks the indented pits."
+ icon_state = "db6"
+ microwave_riggable = FALSE // You can't melt bone in the microwave
+
/obj/item/dice/d6/space
name = "space cube"
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
@@ -425,7 +431,7 @@
var/mob/living/carbon/human/human_servant = new(drop_location())
do_smoke(0, holder = src, location = drop_location())
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [user.real_name]'s Servant?", ROLE_WIZARD, ROLE_WIZARD, 5 SECONDS, human_servant)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [user.real_name]'s Servant?", check_jobban = ROLE_WIZARD, role = ROLE_WIZARD, poll_time = 5 SECONDS, target_mob = human_servant, pic_source = user, role_name_text = "dice servant")
if(LAZYLEN(candidates))
var/mob/dead/observer/candidate = pick(candidates)
message_admins("[ADMIN_LOOKUPFLW(candidate)] was spawned as Dice Servant")
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index 0dcb621a80f..04b95f1049b 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -23,15 +23,15 @@
light_on = FALSE
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
- block_chance = 45 //SKYRAT EDIT - Lowered ORIGINAL:75
+ block_chance = 45 //NOVA EDIT - Lowered ORIGINAL:75
block_sound = 'sound/weapons/block_blade.ogg'
max_integrity = 200
armor_type = /datum/armor/item_dualsaber
resistance_flags = FIRE_PROOF
wound_bonus = -10
bare_wound_bonus = 20
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // Skyrat edit
- special_desc = "A double bladed energy sword employed by the Syndicate in raids" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // NOVA EDIT
+ special_desc = "A double bladed energy sword employed by the Syndicate in raids" // NOVA EDIT
item_flags = NO_BLOOD_ON_ITEM
var/w_class_on = WEIGHT_CLASS_BULKY
var/saber_color = "green"
@@ -173,7 +173,7 @@
set_light_color(pick(COLOR_SOFT_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER))
open_flame()
else
- STOP_PROCESSING(SSobj, src)
+ return PROCESS_KILL
/obj/item/dualsaber/IsReflect()
if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(block_chance))
diff --git a/code/game/objects/items/dyespray.dm b/code/game/objects/items/dyespray.dm
index 6852ac7b0e1..16944d3e386 100644
--- a/code/game/objects/items/dyespray.dm
+++ b/code/game/objects/items/dyespray.dm
@@ -1,11 +1,11 @@
/obj/item/dyespray
name = "hair dye spray"
- desc = "A spray to dye hair as well as giving it any gradient you'd like." // SKYRAT EDIT - Making the dyespray change hair color
+ desc = "A spray to dye hair as well as giving it any gradient you'd like." // NOVA EDIT - Making the dyespray change hair color
w_class = WEIGHT_CLASS_TINY
icon = 'icons/obj/cosmetic.dmi'
icon_state = "dyespray"
- var/uses = 40 //SKYRAT EDIT ADDITION
+ var/uses = 40 //NOVA EDIT ADDITION
/obj/item/dyespray/attack_self(mob/user)
dye(user, user)
@@ -20,13 +20,13 @@
* Arguments:
* * target - The mob who we will apply the gradient and gradient color to.
*/
-/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR (modular_skyrat\master_files\code\game\objects\items\dyekit.dm)
+/* NOVA EDIT REMOVAL - MOVED TO MODULAR (modular_nova\master_files\code\game\objects\items\dyekit.dm)
/obj/item/dyespray/proc/dye(mob/target, mob/user)
if(!ishuman(target))
return
- if(!uses) //SKYRAT EDIT ADDITION
- return //SKYRAT EDIT ADDITION
+ if(!uses) //NOVA EDIT ADDITION
+ return //NOVA EDIT ADDITION
var/mob/living/carbon/human/human_target = target
var/beard_or_hair = tgui_alert(user, "What do you want to dye?", "Character Preference", list("Hair", "Facial Hair"))
diff --git a/code/game/objects/items/emags.dm b/code/game/objects/items/emags.dm
index 141e242fc03..f1d66b875c3 100644
--- a/code/game/objects/items/emags.dm
+++ b/code/game/objects/items/emags.dm
@@ -12,8 +12,8 @@
name = "cryptographic sequencer" //SKYRAT COMMENT: Everyone knows what an emag is, both IC and OOC, they even make toy lookalikes.
icon_state = "emag"
item_flags = NO_MAT_REDEMPTION | NOBLUDGEON
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION
- special_desc = "An specially modified ID card used to break machinery and disable safeties. Notoriously used by Syndicate agents." // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION
+ special_desc = "An specially modified ID card used to break machinery and disable safeties. Notoriously used by Syndicate agents." // NOVA EDIT
slot_flags = ITEM_SLOT_ID
worn_icon_state = "emag"
var/prox_check = TRUE //If the emag requires you to be in range
@@ -36,13 +36,13 @@
icon_state = "hack_o_lantern"
/obj/item/card/emagfake
- desc = "It's a card with a magnetic strip attached to some circuitry." //SKYRAT EDIT CHANGE
+ desc = "It's a card with a magnetic strip attached to some circuitry." //NOVA EDIT CHANGE
name = "cryptographic sequencer"
icon_state = "emag"
slot_flags = ITEM_SLOT_ID
worn_icon_state = "emag"
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // SKYRAT EDIT ADDITION - It's a toy, we're not hiding it.
- special_desc = "Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." // SKYRAT EDIT ADDITION
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // NOVA EDIT ADDITION - It's a toy, we're not hiding it.
+ special_desc = "Closer inspection shows that this card is a poorly made replica, with a \"DonkCo\" logo stamped on the back." // NOVA EDIT ADDITION
/obj/item/card/emagfake/attack_self(mob/user) //for assistants with balls of plasteel
if(Adjacent(user))
@@ -85,11 +85,11 @@
* DOORMAG
*/
/obj/item/card/emag/doorjack
- desc = "This dated-looking ID card has been obviously and illegally modified with extra circuitry. Resembles the infamous \"emag\"." //SKYRAT EDIT CHANGE
+ desc = "This dated-looking ID card has been obviously and illegally modified with extra circuitry. Resembles the infamous \"emag\"." //NOVA EDIT CHANGE
name = "modified ID card"
icon_state = "doorjack"
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION
- special_desc = "Identifies commonly as a \"doorjack\", this illegally modified ID card can disrupt airlock electronics. Has a self recharging cell. Used often by Syndicate agents." // SKYRAT EDIT ADDITION
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION
+ special_desc = "Identifies commonly as a \"doorjack\", this illegally modified ID card can disrupt airlock electronics. Has a self recharging cell. Used often by Syndicate agents." // NOVA EDIT ADDITION
worn_icon_state = "doorjack"
var/type_whitelist //List of types
var/charges = 3
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index b571688f1a8..0645b2a0108 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -1,7 +1,7 @@
/obj/item/extinguisher
name = "fire extinguisher"
desc = "A traditional red fire extinguisher."
- icon = 'icons/obj/tools.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/tools.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "fire_extinguisher0"
worn_icon_state = "fire_extinguisher"
inhand_icon_state = "fire_extinguisher"
diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm
index 35f76ab89a1..b7896c64381 100644
--- a/code/game/objects/items/flamethrower.dm
+++ b/code/game/objects/items/flamethrower.dm
@@ -52,8 +52,7 @@
/obj/item/flamethrower/process()
if(!lit || !igniter)
- STOP_PROCESSING(SSobj, src)
- return null
+ return PROCESS_KILL
var/turf/location = loc
if(ismob(location))
var/mob/M = location
diff --git a/code/game/objects/items/food/frozen.dm b/code/game/objects/items/food/frozen.dm
index 8951165aa80..0bd0cd3a606 100644
--- a/code/game/objects/items/food/frozen.dm
+++ b/code/game/objects/items/food/frozen.dm
@@ -434,3 +434,16 @@
foodtypes = DAIRY | SUGAR
venue_value = FOOD_PRICE_NORMAL
crafting_complexity = FOOD_COMPLEXITY_3
+
+/obj/item/food/popsicle/meatsicle
+ name = "Meatsicle"
+ desc = "A horrific abomination of raw meat, glazed with sugar on a stick, then frozen."
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/fat = 2,
+ /datum/reagent/consumable/nutriment/protein = 2,
+ /datum/reagent/consumable/sugar = 4,
+ )
+ overlay_state = "meatsicle"
+ foodtypes = RAW | MEAT | SUGAR
+ crafting_complexity = FOOD_COMPLEXITY_4
diff --git a/code/game/objects/items/food/lizard.dm b/code/game/objects/items/food/lizard.dm
index 2954b52a9fd..5f7092c64db 100644
--- a/code/game/objects/items/food/lizard.dm
+++ b/code/game/objects/items/food/lizard.dm
@@ -839,3 +839,109 @@
tastes = list("peanut butter" = 1, "banana" = 1, "rootbread" = 2)
foodtypes = FRUIT | NUTS
crafting_complexity = FOOD_COMPLEXITY_3
+
+/obj/item/food/burger/plain/korta
+ name = "plain rootburger"
+ desc = "A simple patty in a rootdough bun."
+ icon_state = "kortaburger"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2,
+ /datum/reagent/consumable/nutriment/protein = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ )
+ foodtypes = NUTS | MEAT
+ crafting_complexity = FOOD_COMPLEXITY_3 //Gotta make the dough, +1
+
+/obj/item/food/burger/rat/korta
+ name = "rat rootburger"
+ desc = "Pretty much what you'd expect... Just in a rootdough bun."
+ icon_state = "ratburger"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/consumable/nutriment/protein = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 2,
+ )
+ tastes = list("dead rat" = 4, "bun" = 2)
+ foodtypes = NUTS | MEAT | GORE
+ crafting_complexity = FOOD_COMPLEXITY_3
+
+/obj/item/food/burger/rootguffin
+ name = "root-guffin"
+ desc = "A cheap and greasy lizard-friendly imitation of an eggs benedict."
+ icon_state = "rootguffin"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2,
+ /datum/reagent/consumable/eggyolk = 3,
+ /datum/reagent/consumable/nutriment/protein = 7,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ )
+ tastes = list("muffin" = 2, "bacon" = 3)
+ foodtypes = NUTS | MEAT | BREAKFAST
+ venue_value = FOOD_PRICE_NORMAL
+ crafting_complexity = FOOD_COMPLEXITY_4
+
+/obj/item/food/burger/rootrib
+ name = "rootrib"
+ desc = "An elusive rib shaped burger with limited availablity across the galaxy. Now meeting subhuman requirements."
+ icon_state = "rootrib"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2,
+ /datum/reagent/consumable/nutriment/protein = 7,
+ /datum/reagent/consumable/nutriment/vitamin = 4,
+ /datum/reagent/consumable/bbqsauce = 1,
+ )
+ tastes = list("bun" = 2, "pork patty" = 4)
+ foodtypes = NUTS | MEAT
+ venue_value = FOOD_PRICE_NORMAL
+ crafting_complexity = FOOD_COMPLEXITY_4
+
+/obj/item/food/burger/rootchicken
+ name = "chicken rootwich"
+ desc = "A delicious chicken sandwich, in a soft rootbread roll."
+ icon_state = "rootchicken"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/consumable/mayonnaise = 3,
+ /datum/reagent/consumable/nutriment/protein = 7,
+ /datum/reagent/consumable/nutriment/vitamin = 1,
+ /datum/reagent/consumable/nutriment/fat/oil = 2,
+ )
+ tastes = list("bun" = 2, "chicken" = 4, "God's covenant" = 1)
+ foodtypes = NUTS | MEAT | FRIED
+ venue_value = FOOD_PRICE_NORMAL
+ crafting_complexity = FOOD_COMPLEXITY_4
+
+/obj/item/food/burger/rootfish
+ name = "Fish rootwich"
+ desc = "Lightly battered fish, sandwiched in a rootroll."
+ icon_state = "rootfish"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/consumable/nutriment/protein = 6,
+ /datum/reagent/consumable/nutriment/vitamin = 4,
+ )
+ tastes = list("bun" = 4, "fish" = 4)
+ foodtypes = NUTS | SEAFOOD
+ venue_value = FOOD_PRICE_EXOTIC
+ crafting_complexity = FOOD_COMPLEXITY_3
+
+/obj/item/food/burger/sloppyroot
+ name = "sssloppy moe"
+ desc = "Ground meat mixed with onions and barbeque sssauce, sssloppily plopped onto a rootroll. Delicious, but guaranteed to get your hands dirty."
+ icon_state = "sloppyroot"
+ icon = 'icons/obj/food/lizard.dmi'
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 10,
+ /datum/reagent/consumable/nutriment/protein = 8,
+ /datum/reagent/consumable/nutriment/vitamin = 6,
+ )
+ tastes = list("juicy meat" = 4, "BBQ sauce" = 3, "onions" = 2, "bun" = 2)
+ foodtypes = NUTS | MEAT | VEGETABLES
+ venue_value = FOOD_PRICE_NORMAL
+ crafting_complexity = FOOD_COMPLEXITY_4
diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm
index 205fca79708..b928a460abb 100644
--- a/code/game/objects/items/food/meatdish.dm
+++ b/code/game/objects/items/food/meatdish.dm
@@ -939,6 +939,39 @@
venue_value = FOOD_PRICE_NORMAL
crafting_complexity = FOOD_COMPLEXITY_5
+/obj/item/food/korta_wellington
+ name = "Kotra wellington"
+ desc = "A luxurious log of beef, covered in a fine mushroom duxelle and pancetta ham, then bound in korta pastry."
+ icon = 'icons/obj/food/meat.dmi'
+ icon_state = "korta_wellington"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment/protein = 21,
+ /datum/reagent/consumable/nutriment/vitamin = 6,
+ )
+ tastes = list("beef" = 3, "mushrooms" = 1, "pancetta" = 1)
+ foodtypes = MEAT | VEGETABLES | NUTS
+ w_class = WEIGHT_CLASS_NORMAL
+ venue_value = FOOD_PRICE_EXOTIC
+ crafting_complexity = FOOD_COMPLEXITY_5
+
+/obj/item/food/korta_wellington/make_processable()
+ AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/korta_wellington_slice, 3, 3 SECONDS, table_required = TRUE, screentip_verb = "Cut")
+
+/obj/item/food/korta_wellington_slice
+ name = "korta wellington slice"
+ desc = "A slice of korta & beef wellington, topped with a rich gravy. Simply delicious."
+ icon = 'icons/obj/food/meat.dmi'
+ icon_state = "korta_wellington_slice"
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment/protein = 7,
+ /datum/reagent/consumable/nutriment/vitamin = 2,
+ )
+ tastes = list("beef" = 3, "mushrooms" = 1, "pancetta" = 1)
+ foodtypes = MEAT | VEGETABLES | NUTS
+ w_class = WEIGHT_CLASS_SMALL
+ venue_value = FOOD_PRICE_NORMAL
+ crafting_complexity = FOOD_COMPLEXITY_5
+
/obj/item/food/roast_dinner
name = "roast dinner"
desc = "A luxuriously roasted chicken, accompanied by cabbage, parsnip, potatoes, peas, stuffing and a small boat of gravy."
diff --git a/code/game/objects/items/food/sweets.dm b/code/game/objects/items/food/sweets.dm
index 98f9417811a..5c638077d16 100644
--- a/code/game/objects/items/food/sweets.dm
+++ b/code/game/objects/items/food/sweets.dm
@@ -232,7 +232,6 @@
metabolization_amount = REAGENTS_METABOLISM
/obj/item/food/bubblegum/bubblegum/process()
- . = ..()
if(iscarbon(loc))
hallucinate(loc)
diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm
index 30e73dfe5ef..42dc891b7e5 100644
--- a/code/game/objects/items/grenades/emgrenade.dm
+++ b/code/game/objects/items/grenades/emgrenade.dm
@@ -1,4 +1,4 @@
-/obj/item/grenade/empgrenade//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/grenade/empgrenade//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "classic EMP grenade"
desc = "It is designed to wreak havoc on electronic systems."
icon_state = "emp"
diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm
index 9b44b2ed4a2..8fa6aae5783 100644
--- a/code/game/objects/items/grenades/plastic.dm
+++ b/code/game/objects/items/grenades/plastic.dm
@@ -119,9 +119,12 @@
message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_VERBOSEJMP(target)] with [det_time] second fuse")
user.log_message("planted [name] on [target.name] with a [det_time] second fuse.", LOG_ATTACK)
+ var/icon/target_icon = icon(bomb_target.icon, bomb_target.icon_state)
+ target_icon.Blend(icon(icon, icon_state), ICON_OVERLAY)
+ var/image/bomb_target_image = image(target_icon)
notify_ghosts(
"[user] has planted \a [src] on [target] with a [det_time] second fuse!",
- source = bomb_target,
+ source = bomb_target_image,
header = "Explosive Planted",
notify_flags = NOTIFY_CATEGORY_NOFLASH,
)
diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm
index 9f5f94d048b..b4835a0d565 100644
--- a/code/game/objects/items/holosign_creator.dm
+++ b/code/game/objects/items/holosign_creator.dm
@@ -66,15 +66,19 @@
return .
if(target_turf.is_blocked_turf(TRUE)) //don't try to sneak dense stuff on our tile during the wait.
return .
- target_holosign = new holosign_type(get_turf(target), src)
- target_holosign.add_hiddenprint(user)
- if(color)
- target_holosign.color = color
+ target_holosign = create_holosign(target, user)
return .
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
return
+/obj/item/holosign_creator/proc/create_holosign(atom/target, mob/user)
+ var/atom/new_holosign = new holosign_type(get_turf(target), src)
+ new_holosign.add_hiddenprint(user)
+ if(color)
+ new_holosign.color = color
+ return new_holosign
+
/obj/item/holosign_creator/attack_self(mob/user)
if(LAZYLEN(signs))
for(var/obj/structure/holosign/hologram as anything in signs)
@@ -126,6 +130,49 @@
holosign_type = /obj/structure/holosign/barrier/atmos
creation_time = 0
max_signs = 6
+ /// Clearview holograms don't catch clicks and are more transparent
+ var/clearview = FALSE
+ /// Timer for auto-turning off clearview
+ var/clearview_timer
+
+/obj/item/holosign_creator/atmos/Initialize(mapload)
+ . = ..()
+ register_context()
+
+/obj/item/holosign_creator/atmos/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+ if(LAZYLEN(signs))
+ context[SCREENTIP_CONTEXT_RMB] = "[clearview ? "Turn off" : "Temporarily activate"] clearview"
+ return CONTEXTUAL_SCREENTIP_SET
+
+/obj/item/holosign_creator/atmos/create_holosign(atom/target, mob/user)
+ var/obj/structure/holosign/barrier/atmos/new_holosign = new holosign_type(get_turf(target), src)
+ new_holosign.add_hiddenprint(user)
+ if(color)
+ new_holosign.color = color
+ if(clearview)
+ new_holosign.clearview_transparency()
+ return new_holosign
+
+/obj/item/holosign_creator/atmos/attack_self_secondary(mob/user, modifiers)
+ if(clearview)
+ reset_hologram_transparency()
+ balloon_alert(user, "turned off clearview")
+ return
+ if(LAZYLEN(signs))
+ for(var/obj/structure/holosign/barrier/atmos/hologram as anything in signs)
+ hologram.clearview_transparency()
+ clearview = TRUE
+ balloon_alert(user, "turned on clearview")
+ clearview_timer = addtimer(CALLBACK(src, PROC_REF(reset_hologram_transparency)), 40 SECONDS, TIMER_STOPPABLE)
+ return ..()
+
+/obj/item/holosign_creator/atmos/proc/reset_hologram_transparency()
+ if(LAZYLEN(signs))
+ for(var/obj/structure/holosign/barrier/atmos/hologram as anything in signs)
+ hologram.reset_transparency()
+ clearview = FALSE
+ deltimer(clearview_timer)
/obj/item/holosign_creator/medical
name = "\improper PENLITE barrier projector"
diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm
index 1fa61c27510..7185695cb2a 100644
--- a/code/game/objects/items/implants/implant_freedom.dm
+++ b/code/game/objects/items/implants/implant_freedom.dm
@@ -43,10 +43,10 @@
return dat
/obj/item/implanter/freedom
- name = "implanter" // Skyrat edit , was implanter (freedom)
+ name = "implanter" // NOVA EDIT , was implanter (freedom)
imp_type = /obj/item/implant/freedom
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter used for a freedom implant" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter used for a freedom implant" // NOVA EDIT
/obj/item/implantcase/freedom
name = "implant case - 'Freedom'"
diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm
index 5f06071cd5c..da83974c237 100644
--- a/code/game/objects/items/implants/implant_misc.dm
+++ b/code/game/objects/items/implants/implant_misc.dm
@@ -26,10 +26,10 @@
qdel(src)
/obj/item/implanter/emp
- name = "implanter" // Skyrat edit, was implanter (EMP)
+ name = "implanter" // NOVA EDIT, was implanter (EMP)
imp_type = /obj/item/implant/emp
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter used for a EMP implant" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter used for a EMP implant" // NOVA EDIT
/obj/item/implant/radio
name = "internal radio implant"
@@ -88,8 +88,8 @@
imp_type = /obj/item/implant/radio
/obj/item/implanter/radio/syndicate
- name = "implanter" // Skyrat edit , was originally implanter (internal syndicate radio)
+ name = "implanter" // NOVA EDIT , was originally implanter (internal syndicate radio)
imp_type = /obj/item/implant/radio/syndicate
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter used for a internal radio implant" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter used for a internal radio implant" // NOVA EDIT
diff --git a/code/game/objects/items/implants/implant_stealth.dm b/code/game/objects/items/implants/implant_stealth.dm
index 101cc4a807d..fe7e342f08d 100644
--- a/code/game/objects/items/implants/implant_stealth.dm
+++ b/code/game/objects/items/implants/implant_stealth.dm
@@ -4,10 +4,10 @@
actions_types = list(/datum/action/item_action/agent_box)
/obj/item/implanter/stealth
- name = "implanter" // Skyrat edit , was originaly implanter (stealth)
+ name = "implanter" // NOVA EDIT , was originaly implanter (stealth)
imp_type = /obj/item/implant/stealth
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter used for a stealth implant" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter used for a stealth implant" // NOVA EDIT
//Box Object
diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm
index e3ba30b4705..76f6b2547f7 100644
--- a/code/game/objects/items/implants/implant_storage.dm
+++ b/code/game/objects/items/implants/implant_storage.dm
@@ -40,7 +40,7 @@
return ..()
/obj/item/implanter/storage
- name = "implanter" // Skyrat edit , original was implanter (storage)
+ name = "implanter" // NOVA EDIT , original was implanter (storage)
imp_type = /obj/item/implant/storage
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter used for a storage implant" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter used for a storage implant" // NOVA EDIT
diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm
index 56a16f3058c..b209f1eccff 100644
--- a/code/game/objects/items/implants/implantcase.dm
+++ b/code/game/objects/items/implants/implantcase.dm
@@ -1,7 +1,7 @@
/**
* Item used to store implants. Can be renamed with a pen. Implants are moved between those and implanters when a mob uses an implanter on a case.
*/
-/obj/item/implantcase//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/implantcase//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "implant case"
desc = "A glass case containing an implant."
icon = 'icons/obj/medical/syringe.dmi'
diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm
index d44b42d7a9f..c03e519f0f4 100644
--- a/code/game/objects/items/implants/implanter.dm
+++ b/code/game/objects/items/implants/implanter.dm
@@ -1,7 +1,7 @@
/**
* Players can use this item to put obj/item/implant's in living mobs. Can be renamed with a pen.
*/
-/obj/item/implanter//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/implanter//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "implanter"
desc = "A sterile automatic implant injector."
icon = 'icons/obj/medical/syringe.dmi'
diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm
index 6a1b662f64e..ab899c3f048 100644
--- a/code/game/objects/items/implants/implantpad.dm
+++ b/code/game/objects/items/implants/implantpad.dm
@@ -1,4 +1,4 @@
-/obj/item/implantpad//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/implantpad//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "implant pad"
desc = "Used to modify implants."
icon = 'icons/obj/devices/tool.dmi'
diff --git a/code/game/objects/items/implants/implantuplink.dm b/code/game/objects/items/implants/implantuplink.dm
index 3631ddc94ae..278c97ed6c9 100644
--- a/code/game/objects/items/implants/implantuplink.dm
+++ b/code/game/objects/items/implants/implantuplink.dm
@@ -16,7 +16,7 @@
if(!uplink_flag)
uplink_flag = src.uplink_flag
src.uplink_handler = uplink_handler
- RegisterSignal(src, COMSIG_COMPONENT_REMOVING, PROC_REF(_component_removal))
+ RegisterSignal(src, COMSIG_COMPONENT_REMOVING, PROC_REF(on_component_removing))
/obj/item/implant/uplink/implant(mob/living/carbon/target, mob/user, silent, force)
. = ..()
@@ -34,26 +34,30 @@
* generally by admin verbs or var editing. Implant does nothing without
* the component, so delete itself.
*/
-/obj/item/implant/uplink/proc/_component_removal(datum/source, datum/component/component)
+/obj/item/implant/uplink/proc/on_component_removing(datum/source, datum/component/component)
SIGNAL_HANDLER
+
+ if (QDELING(src))
+ return
+
if(istype(component, /datum/component/uplink))
qdel(src)
/obj/item/implanter/uplink
- name = "implanter" // Skyrat edit , original was implanter (uplink)
+ name = "implanter" // NOVA EDIT , original was implanter (uplink)
imp_type = /obj/item/implant/uplink
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter for an uplink" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter for an uplink" // NOVA EDIT
/obj/item/implanter/uplink/Initialize(mapload, uplink_handler)
imp = new imp_type(src, uplink_handler)
return ..()
/obj/item/implanter/uplink/precharged
- name = "implanter" // Skyrat edit , original was implanter (precharged uplink)
+ name = "implanter" // NOVA EDIT , original was implanter (precharged uplink)
imp_type = /obj/item/implant/uplink/precharged
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A Syndicate implanter for a precharged uplink" // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A Syndicate implanter for a precharged uplink" // NOVA EDIT
/obj/item/implant/uplink/precharged
starting_tc = TELECRYSTALS_PRELOADED_IMPLANT
diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm
index f6ed89a870f..35c73a8cb95 100644
--- a/code/game/objects/items/inducer.dm
+++ b/code/game/objects/items/inducer.dm
@@ -172,12 +172,19 @@
return
. += "inducer-[cell ? "bat" : "nobat"]"
+/obj/item/inducer/empty
+ cell_type = null
+ opened = TRUE
+
+/obj/item/inducer/orderable
+ cell_type = /obj/item/stock_parts/cell/inducer_supply
+ opened = FALSE
+
/obj/item/inducer/sci
icon_state = "inducer-sci"
inhand_icon_state = "inducer-sci"
desc = "A tool for inductively charging internal power cells. This one has a science color scheme, and is less potent than its engineering counterpart."
cell_type = null
- powertransfer = 500
opened = TRUE
/obj/item/inducer/sci/Initialize(mapload)
diff --git a/code/game/objects/items/kirby_plants/kirbyplants.dm b/code/game/objects/items/kirby_plants/kirbyplants.dm
index 74a0c8637e8..e06db9abda0 100644
--- a/code/game/objects/items/kirby_plants/kirbyplants.dm
+++ b/code/game/objects/items/kirby_plants/kirbyplants.dm
@@ -2,12 +2,11 @@
/obj/item/kirbyplants
name = "potted plant"
//icon = 'icons/obj/fluff/flora/plants.dmi' // ORIGINAL
- icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' // SKYRAT EDIT CHANGE
+ icon = 'modular_nova/modules/aesthetics/plants/plants.dmi' // NOVA EDIT CHANGE
icon_state = "plant-01"
base_icon_state = "plant-01"
desc = "A little bit of nature contained in a pot."
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
w_class = WEIGHT_CLASS_HUGE
force = 10
throwforce = 13
@@ -23,7 +22,7 @@
var/custom_plant_name = FALSE
var/list/static/random_plant_states
/// Maximum icon state number - KEEP THIS UP TO DATE
- var/random_state_cap = 43 // SKYRAT EDIT ADDITION
+ var/random_state_cap = 43 // NOVA EDIT ADDITION
/obj/item/kirbyplants/Initialize(mapload)
. = ..()
@@ -77,14 +76,14 @@
/obj/item/kirbyplants/proc/generate_states()
random_plant_states = list()
- for(var/i in 1 to random_state_cap) //SKYRAT EDIT CHANGE - ORIGINAL: for(var/i in 1 to 24)
+ for(var/i in 1 to random_state_cap) //NOVA EDIT CHANGE - ORIGINAL: for(var/i in 1 to 24)
var/number
if(i < 10)
number = "0[i]"
else
number = "[i]"
random_plant_states += "plant-[number]"
- random_plant_states += list("applebush", "monkeyplant") //SKYRAT EDIT CHANGE - ORIGINAL:random_plant_states += "applebush"
+ random_plant_states += list("applebush", "monkeyplant") //NOVA EDIT CHANGE - ORIGINAL:random_plant_states += "applebush"
/obj/item/kirbyplants/random
icon = 'icons/obj/fluff/flora/_flora.dmi'
@@ -93,7 +92,7 @@
/obj/item/kirbyplants/random/Initialize(mapload)
. = ..()
//icon = 'icons/obj/flora/plants.dmi' // ORIGINAL
- icon = 'modular_skyrat/modules/aesthetics/plants/plants.dmi' //SKYRAT EDIT CHANGE
+ icon = 'modular_nova/modules/aesthetics/plants/plants.dmi' //NOVA EDIT CHANGE
randomize_base_icon_state()
//Handles randomizing the icon during initialize()
@@ -128,13 +127,13 @@
base_icon_state = "plant-[rand(26, 29)]"
update_appearance(UPDATE_ICON)
-//SKYRAT EDIT ADDITION START
+//NOVA EDIT ADDITION START
/obj/item/kirbyplants/monkey
name = "monkey plant"
desc = "Something that seems to have been made by the Nanotrasen science division, one might call it an abomination. It's heads seem... alive."
icon_state = "monkeyplant"
trimmable = FALSE
-//SKYRAT EDIT ADDITION END
+//NOVA EDIT ADDITION END
/obj/item/kirbyplants/photosynthetic
name = "photosynthetic potted plant"
diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm
index d058f96a40c..eb0730c1101 100644
--- a/code/game/objects/items/mail.dm
+++ b/code/game/objects/items/mail.dm
@@ -64,8 +64,8 @@
ACCOUNT_SRV = COLOR_PALE_GREEN_GRAY,
ACCOUNT_CAR = COLOR_BEIGE,
ACCOUNT_SEC = COLOR_PALE_RED_GRAY,
- ACCOUNT_CMD = COLOR_BLUE_GRAY, // SKYRAT EDIT ADDITION
- ACCOUNT_CCM = COLOR_DARK_MODERATE_LIME_GREEN, // SKYRAT EDIT ADDITION
+ ACCOUNT_CMD = COLOR_BLUE_GRAY, // NOVA EDIT ADDITION
+ ACCOUNT_CCM = COLOR_DARK_MODERATE_LIME_GREEN, // NOVA EDIT ADDITION
)
// Icons
@@ -154,14 +154,18 @@
/obj/item/mail/examine_more(mob/user)
. = ..()
- var/list/msg = list(span_notice("You notice the postmarking on the front of the mail... "))
+ if(!postmarked)
+ . += span_info("This mail has no postmarking of any sort...")
+ else
+ . += span_notice("You notice the postmarking on the front of the mail... ")
var/datum/mind/recipient = recipient_ref.resolve()
if(recipient)
- msg += "\t[span_info("Certified NT mail for [recipient].")]"
+ . += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].")
+ else if(postmarked)
+ . += span_info("Certified mail for [GLOB.station_name].")
else
- msg += "\t[span_info("Certified mail for [GLOB.station_name].")]"
- msg += "\t[span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")]"
- return msg
+ . += span_info("This is a dead letter mail with no recipient.")
+ . += span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")
/// Accepts a mind to initialize goodies for a piece of mail.
/obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient)
@@ -251,6 +255,8 @@
lid_x = -26
lid_y = 2
paint_jobs = null
+ ///if it'll show the nt mark on the crate
+ var/postmarked = TRUE
/obj/structure/closet/crate/mail/update_icon_state()
. = ..()
@@ -261,6 +267,11 @@
else
icon_state = "[base_icon_state]sealed"
+/obj/structure/closet/crate/mail/update_overlays()
+ . = ..()
+ if(postmarked)
+ . += "mail_nt"
+
/// Fills this mail crate with N pieces of mail, where N is the lower of the amount var passed, and the maximum capacity of this crate. If N is larger than the number of alive human players, the excess will be junkmail.
/obj/structure/closet/crate/mail/proc/populate(amount)
var/mail_count = min(amount, storage_capacity)
@@ -306,6 +317,19 @@
. = ..()
populate(INFINITY)
+///Used in the mail strike shuttle loan event
+/obj/structure/closet/crate/mail/full/mail_strike
+ desc = "A post crate from somewhere else. It has no NT logo on it."
+ postmarked = FALSE
+
+/obj/structure/closet/crate/mail/full/mail_strike/populate(amount)
+ var/strike_mail_to_spawn = rand(1, storage_capacity-1)
+ for(var/i in 1 to strike_mail_to_spawn)
+ if(prob(95))
+ new /obj/item/mail/mail_strike(src)
+ else
+ new /obj/item/mail/traitor/mail_strike(src)
+ return ..(storage_capacity - strike_mail_to_spawn)
/// Opened mail crate
/obj/structure/closet/crate/mail/preopen
@@ -383,7 +407,8 @@
playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE)
for(var/obj/item/stuff as anything in contents) // Mail and envelope actually can have more than 1 item.
if(user.put_in_hands(stuff) && armed)
- log_bomber(user, "opened armed mail made by [made_by_cached_name] ([made_by_cached_ckey]), activating", stuff)
+ var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular"
+ log_bomber(user, "opened armed mail made by [whomst], activating", stuff)
INVOKE_ASYNC(stuff, TYPE_PROC_REF(/obj/item, attack_self), user)
qdel(src)
return TRUE
@@ -414,6 +439,55 @@
after_unwrap(user)
return TRUE
+///Generic mail used in the mail strike shuttle loan event
+/obj/item/mail/mail_strike
+ name = "dead mail"
+ desc = "An unmarked parcel of unknown origins, effectively undeliverable."
+ postmarked = FALSE
+ generic_goodies = list(
+ /obj/effect/spawner/random/entertainment/money_medium = 2,
+ /obj/effect/spawner/random/contraband = 2,
+ /obj/effect/spawner/random/entertainment/money_large = 1,
+ /obj/effect/spawner/random/entertainment/coin = 1,
+ /obj/effect/spawner/random/food_or_drink/any_snack_or_beverage = 1,
+ /obj/effect/spawner/random/entertainment/drugs = 1,
+ /obj/effect/spawner/random/contraband/grenades = 1,
+ )
+
+/obj/item/mail/mail_strike/Initialize(mapload)
+ if(prob(35))
+ stamped = FALSE
+ if(prob(35))
+ name = "dead envelope"
+ icon_state = "mail_large"
+ goodie_count = 2
+ stamp_max = 2
+ stamp_offset_y = 5
+ . = ..()
+ color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
+ for(var/goodie in 1 to goodie_count)
+ var/target_good = pick_weight(generic_goodies)
+ new target_good(src)
+
+///Also found in the mail strike shuttle loan. It contains a random grenade that'll be triggered when unwrapped
+/obj/item/mail/traitor/mail_strike
+ name = "dead mail"
+ desc = "An unmarked parcel of unknown origins, effectively undeliverable."
+ postmarked = FALSE
+
+/obj/item/mail/traitor/mail_strike/Initialize(mapload)
+ if(prob(35))
+ stamped = FALSE
+ if(prob(35))
+ name = "dead envelope"
+ icon_state = "mail_large"
+ goodie_count = 2
+ stamp_max = 2
+ stamp_offset_y = 5
+ . = ..()
+ color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
+ new /obj/effect/spawner/random/contraband/grenades/dangerous(src)
+
/obj/item/storage/mail_counterfeit_device
name = "GLA-2 mail counterfeit device"
desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs."
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index 01f66c0e4dd..c5602d38687 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -26,7 +26,7 @@
/// The length of the knockdown applied to the user on clumsy_check()
var/clumsy_knockdown_time = 18 SECONDS
/// How much stamina damage we deal on a successful hit against a living, non-cyborg mob.
- var/stamina_damage = 35 // SKYRAT EDIT - Less Stamina Damage (Original: 55)
+ var/stamina_damage = 35 // NOVA EDIT - Less Stamina Damage (Original: 55)
/// Chance of causing force_say() when stunning a human mob
var/force_say_chance = 33
/// Can we stun cyborgs?
@@ -388,7 +388,7 @@
force = 5
cooldown = 2.5 SECONDS
force_say_chance = 80 //very high force say chance because it's funny
- stamina_damage = 115 // SKYRAT EDIT: Original 85
+ stamina_damage = 115 // NOVA EDIT: Original 85
clumsy_knockdown_time = 24 SECONDS
affect_cyborg = TRUE
on_stun_sound = 'sound/effects/contractorbatonhit.ogg'
@@ -419,7 +419,7 @@
armor_type = /datum/armor/baton_security
throwforce = 7
force_say_chance = 50
- stamina_damage = 35 // SKYRAT EDIT - 4 baton crit now (Original: 60)
+ stamina_damage = 35 // NOVA EDIT - 4 baton crit now (Original: 60)
knockdown_time = 5 SECONDS
clumsy_knockdown_time = 15 SECONDS
cooldown = 2.5 SECONDS
@@ -597,7 +597,7 @@
*/
/obj/item/melee/baton/security/additional_effects_non_cyborg(mob/living/target, mob/living/user)
target.set_jitter_if_lower(40 SECONDS)
- // target.set_confusion_if_lower(10 SECONDS) // SKYRAT EDIT REMOVAL
+ // target.set_confusion_if_lower(10 SECONDS) // NOVA EDIT REMOVAL
target.set_stutter_if_lower(16 SECONDS)
SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK)
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index d07f05169e8..9882f515d0d 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -29,7 +29,7 @@
/// The heat given off when active.
var/active_heat = 3500
- // SKYRAT EDIT ADD START
+ // NOVA EDIT ADD START
/// The sound played when the item is turned on
var/enable_sound = 'sound/weapons/saberon.ogg'
@@ -37,7 +37,7 @@
/// The sound played when the item is turned off
var/disable_sound = 'sound/weapons/saberoff.ogg'
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
/datum/armor/melee_energy
fire = 100
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index a1e25bf0d12..0f30507a905 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -53,7 +53,7 @@
//very imprecise
/obj/item/melee/sabre
- name = "officer's sabre" //SKYRAT EDIT - Buffed in modular_skyrat/modules/modular_weapons/code/melee.dm
+ name = "officer's sabre" //NOVA EDIT - Buffed in modular_nova/modules/modular_weapons/code/melee.dm
desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease."
icon = 'icons/obj/weapons/sword.dmi'
icon_state = "sabre"
diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm
index 8874b9337db..9528894232d 100644
--- a/code/game/objects/items/mop.dm
+++ b/code/game/objects/items/mop.dm
@@ -16,7 +16,7 @@
resistance_flags = FLAMMABLE
var/mopcount = 0
///Maximum volume of reagents it can hold.
- var/max_reagent_volume = 50 // SKYRAT EDIT - ORIGINAL: 15
+ var/max_reagent_volume = 50 // NOVA EDIT - ORIGINAL: 15
var/mopspeed = 1.5 SECONDS
force_string = "robust... against germs"
var/insertable = TRUE
@@ -74,9 +74,9 @@
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
/obj/item/mop/advanced
- desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this! Due to the self-wetting technology, it proves very inefficient for cleaning up spills." //SKYRAT EDIT
+ desc = "The most advanced tool in a custodian's arsenal, complete with a condenser for self-wetting! Just think of all the viscera you will clean up with this! Due to the self-wetting technology, it proves very inefficient for cleaning up spills." //NOVA EDIT
name = "advanced mop"
- max_reagent_volume = 100 // SKYRAT EDIT - ORIGINAL: 10
+ max_reagent_volume = 100 // NOVA EDIT - ORIGINAL: 10
icon_state = "advmop"
inhand_icon_state = "advmop"
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm
index 86c548ea4de..6a5d1280a60 100644
--- a/code/game/objects/items/pet_carrier.dm
+++ b/code/game/objects/items/pet_carrier.dm
@@ -86,7 +86,7 @@
if(target.mob_size > max_occupant_weight)
if(ishuman(target))
var/mob/living/carbon/human/H = target
- if(isfeline(H)) // SKYRAT EDIT - FELINE TRAITS. Was: isfelinid(H)
+ if(isfeline(H)) // NOVA EDIT - FELINE TRAITS. Was: isfelinid(H)
to_chat(user, span_warning("You'd need a lot of catnip and treats, plus maybe a laser pointer, for that to work."))
else
to_chat(user, span_warning("Humans, generally, do not fit into pet carriers."))
diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm
index 21619310d35..9af1041779e 100644
--- a/code/game/objects/items/rcd/RPD.dm
+++ b/code/game/objects/items/rcd/RPD.dm
@@ -9,6 +9,8 @@
#define DESTROY_MODE (1<<2)
#define REPROGRAM_MODE (1<<3)
+#define PIPE_LAYER(num) (1<<(num-1))
+
///Sound to make when we use the item to build/destroy something
#define RPD_USE_SOUND 'sound/items/deconstruct.ogg'
@@ -198,8 +200,10 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
var/transit_build_speed = 0.5 SECONDS
///Category currently active (Atmos, disposal, transit)
var/category = ATMOS_CATEGORY
- ///Piping layer we are going to spawn the atmos device in
- var/piping_layer = PIPING_LAYER_DEFAULT
+ ///All pipe layers we are going to spawn the atmos devices in
+ var/pipe_layers = PIPE_LAYER(3)
+ ///Are we laying multiple layers per click
+ var/multi_layer = FALSE
///Layer for disposal ducts
var/ducting_layer = DUCT_LAYER_DEFAULT
///Stores the current device to spawn
@@ -255,6 +259,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
UnregisterSignal(user, COMSIG_MOUSE_SCROLL_ON)
return ..()
+/obj/item/pipe_dispenser/proc/get_active_pipe_layers()
+ var/list/layer_nums = list()
+ for(var/pipe_layer_number in 1 to 5)
+ if(PIPE_LAYER(pipe_layer_number) & pipe_layers)
+ layer_nums += pipe_layer_number
+ return layer_nums
+
/obj/item/pipe_dispenser/cyborg_unequip(mob/user)
UnregisterSignal(user, COMSIG_MOUSE_SCROLL_ON)
return ..()
@@ -267,7 +278,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
if(target.pipe_color && target.piping_layer)
paint_color = GLOB.pipe_color_name[target.pipe_color]
- piping_layer = target.piping_layer
+ pipe_layers = PIPE_LAYER(target.piping_layer)
balloon_alert(user, "color/layer copied")
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -304,7 +315,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
/obj/item/pipe_dispenser/ui_data(mob/user)
var/list/data = list(
"category" = category,
- "piping_layer" = piping_layer,
+ "multi_layer" = multi_layer,
+ "pipe_layers" = pipe_layers,
"ducting_layer" = ducting_layer,
"categories" = list(),
"selected_recipe" = recipe.name,
@@ -365,9 +377,25 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
recipe = first_transit
p_dir = NORTH
playeffect = FALSE
- if("piping_layer")
- piping_layer = text2num(params["piping_layer"])
+ if("pipe_layers")
+ var/selected_layers = text2num(params["pipe_layers"])
+ var/valid_layer = FALSE
+ for(var/pipe_layer_number in 1 to 5)
+ if(!(PIPE_LAYER(pipe_layer_number) & selected_layers))
+ continue
+ valid_layer = TRUE
+ if(!valid_layer)
+ return
+ if(multi_layer)
+ if(pipe_layers != selected_layers)
+ pipe_layers ^= selected_layers
+ else
+ pipe_layers = selected_layers
playeffect = FALSE
+ if("toggle_multi_layer")
+ if(multi_layer)
+ pipe_layers = PIPE_LAYER(max(get_active_pipe_layers()))
+ multi_layer = !multi_layer
if("ducting_layer")
ducting_layer = text2num(params["ducting_layer"])
playeffect = FALSE
@@ -410,9 +438,9 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
var/atom/attack_target = atom_to_attack
//So that changing the menu settings doesn't affect the pipes already being built.
- var/queued_p_type = recipe.id
- var/queued_p_dir = p_dir
- var/queued_p_flipped = p_flipped
+ var/queued_pipe_type = recipe.id
+ var/queued_pipe_dir = p_dir
+ var/queued_pipe_flipped = p_flipped
//Unwrench pipe before we build one over/paint it, but only if we're not already running a do_after on it already to prevent a potential runtime.
if((mode & DESTROY_MODE) && (upgrade_flags & RPD_UPGRADE_UNWRENCH) && istype(attack_target, /obj/machinery/atmospherics) && !(DOING_INTERACTION_WITH_TARGET(user, attack_target)))
@@ -420,13 +448,10 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(!isatom(attack_target)) //can return null, FALSE if do_after() fails see /obj/machinery/atmospherics/wrench_act()
return TRUE
- //make sure what we're clicking is valid for the current category
- var/static/list/make_pipe_whitelist
- if(!make_pipe_whitelist)
- make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe, /obj/structure/window, /obj/structure/grille))
- if(istype(attack_target, /obj/machinery/atmospherics) && mode & BUILD_MODE)
+ if(istype(attack_target, /obj/machinery/atmospherics) && (mode & BUILD_MODE))
attack_target = get_turf(attack_target)
- var/can_make_pipe = (isturf(attack_target) || is_type_in_typecache(attack_target, make_pipe_whitelist))
+
+ var/can_make_pipe = check_can_make_pipe(attack_target)
. = TRUE
@@ -507,46 +532,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
if(mode & BUILD_MODE)
switch(category) //if we've gotten this var, the target is valid
if(ATMOS_CATEGORY) //Making pipes
- if(!can_make_pipe)
+ if(!do_pipe_build(attack_target, user, params))
return ..()
- playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE)
- if (recipe.type == /datum/pipe_info/meter)
- if(do_after(user, atmos_build_speed, target = attack_target))
- playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE)
- var/obj/item/pipe_meter/new_meter = new /obj/item/pipe_meter(get_turf(attack_target))
- new_meter.setAttachLayer(piping_layer)
- if(mode & WRENCH_MODE)
- new_meter.wrench_act(user, src)
- else
- if(recipe.all_layers == FALSE && (piping_layer == 1 || piping_layer == 5))
- balloon_alert(user, "can't build on this layer!")
- return ..()
- if(do_after(user, atmos_build_speed, target = attack_target))
- if(recipe.all_layers == FALSE && (piping_layer == 1 || piping_layer == 5))//double check to stop cheaters (and to not waste time waiting for something that can't be placed)
- balloon_alert(user, "can't build on this layer!")
- return ..()
- playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE)
- var/obj/machinery/atmospherics/path = queued_p_type
- var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe
- var/obj/item/pipe/pipe_type = new pipe_item_type(
- get_turf(attack_target),
- queued_p_type,
- queued_p_dir,
- null,
- GLOB.pipe_paint_colors[paint_color],
- ispath(queued_p_type, /obj/machinery/atmospherics/pipe/smart) ? p_init_dir : null,
- )
- if(queued_p_flipped && istype(pipe_type, /obj/item/pipe/trinary/flippable))
- var/obj/item/pipe/trinary/flippable/new_flippable_pipe = pipe_type
- new_flippable_pipe.flipped = queued_p_flipped
-
- pipe_type.update()
- pipe_type.add_fingerprint(usr)
- pipe_type.set_piping_layer(piping_layer)
- if(ispath(queued_p_type, /obj/machinery/atmospherics) && !ispath(queued_p_type, /obj/machinery/atmospherics/pipe/color_adapter))
- pipe_type.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
- if(mode & WRENCH_MODE)
- pipe_type.wrench_act(user, src)
if(DISPOSALS_CATEGORY) //Making disposals pipes
if(!can_make_pipe)
@@ -557,7 +544,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
return
playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE)
if(do_after(user, disposal_build_speed, target = attack_target))
- var/obj/structure/disposalconstruct/new_disposals_segment = new (attack_target, queued_p_type, queued_p_dir, queued_p_flipped)
+ var/obj/structure/disposalconstruct/new_disposals_segment = new (attack_target, queued_pipe_type, queued_pipe_dir, queued_pipe_flipped)
if(!new_disposals_segment.can_place())
balloon_alert(user, "not enough room!")
@@ -588,18 +575,18 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE)
if(do_after(user, transit_build_speed, target = attack_target))
playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE)
- if(queued_p_type == /obj/structure/c_transit_tube_pod)
+ if(queued_pipe_type == /obj/structure/c_transit_tube_pod)
var/obj/structure/c_transit_tube_pod/pod = new /obj/structure/c_transit_tube_pod(attack_target)
pod.add_fingerprint(usr)
if(mode & WRENCH_MODE)
pod.wrench_act(user, src)
else
- var/obj/structure/c_transit_tube/tube = new queued_p_type(attack_target)
- tube.setDir(queued_p_dir)
+ var/obj/structure/c_transit_tube/tube = new queued_pipe_type(attack_target)
+ tube.setDir(queued_pipe_dir)
- if(queued_p_flipped)
- tube.setDir(turn(queued_p_dir, 45 + ROTATION_FLIP))
+ if(queued_pipe_flipped)
+ tube.setDir(turn(queued_pipe_dir, 45 + ROTATION_FLIP))
tube.AfterRotation(user, ROTATION_FLIP)
tube.add_fingerprint(usr)
@@ -609,6 +596,67 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
else
return ..()
+/obj/item/pipe_dispenser/proc/check_can_make_pipe(atom/target_of_attack)
+ //make sure what we're clicking is valid for the current category
+ var/static/list/make_pipe_whitelist = typecacheof(list(/obj/structure/lattice, /obj/structure/girder, /obj/item/pipe, /obj/structure/window, /obj/structure/grille))
+ var/can_we_make_pipe = (isturf(target_of_attack) || is_type_in_typecache(target_of_attack, make_pipe_whitelist))
+ return can_we_make_pipe
+
+/obj/item/pipe_dispenser/proc/do_pipe_build(atom/atom_to_target, mob/user, params)
+ //So that changing the menu settings doesn't affect the pipes already being built.
+ var/queued_pipe_type = recipe.id
+ var/queued_pipe_dir = p_dir
+ var/queued_pipe_flipped = p_flipped
+
+ var/can_make_pipe = check_can_make_pipe(atom_to_target)
+ var/list/pipe_layer_numbers = get_active_pipe_layers()
+ var/continued_build = FALSE
+ for(var/pipe_layer_num in 1 to length(pipe_layer_numbers))
+ var/layer_to_build = pipe_layer_numbers[pipe_layer_num]
+ if(layer_to_build != pipe_layer_numbers[1])
+ continued_build = TRUE
+ if(!layer_to_build)
+ return FALSE
+ if(!can_make_pipe)
+ return FALSE
+ playsound(get_turf(src), 'sound/machines/click.ogg', 50, vary = TRUE)
+ if(!continued_build && !do_after(user, atmos_build_speed, target = atom_to_target))
+ return FALSE
+ if(!recipe.all_layers && (layer_to_build == 1 || layer_to_build == 5))
+ balloon_alert(user, "can't build on layer [layer_to_build]!")
+ if(multi_layer)
+ continue
+ return FALSE
+ playsound(get_turf(src), RPD_USE_SOUND, 50, TRUE)
+ if(recipe.type == /datum/pipe_info/meter)
+ var/obj/item/pipe_meter/new_meter = new /obj/item/pipe_meter(get_turf(atom_to_target))
+ new_meter.setAttachLayer(layer_to_build)
+ if(mode & WRENCH_MODE)
+ new_meter.wrench_act(user, src)
+ else
+ var/obj/machinery/atmospherics/path = queued_pipe_type
+ var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe
+ var/obj/item/pipe/pipe_type = new pipe_item_type(
+ get_turf(atom_to_target),
+ queued_pipe_type,
+ queued_pipe_dir,
+ null,
+ GLOB.pipe_paint_colors[paint_color],
+ ispath(queued_pipe_type, /obj/machinery/atmospherics/pipe/smart) ? p_init_dir : null,
+ )
+ if(queued_pipe_flipped && istype(pipe_type, /obj/item/pipe/trinary/flippable))
+ var/obj/item/pipe/trinary/flippable/new_flippable_pipe = pipe_type
+ new_flippable_pipe.flipped = queued_pipe_flipped
+
+ pipe_type.update()
+ pipe_type.add_fingerprint(usr)
+ pipe_type.set_piping_layer(layer_to_build)
+ if(ispath(queued_pipe_type, /obj/machinery/atmospherics) && !ispath(queued_pipe_type, /obj/machinery/atmospherics/pipe/color_adapter))
+ pipe_type.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
+ if(mode & WRENCH_MODE)
+ pipe_type.wrench_act(user, src)
+ return TRUE
+
/obj/item/pipe_dispenser/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/rpd_upgrade))
install_upgrade(item, user)
@@ -630,19 +678,22 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
///Changes the piping layer when the mousewheel is scrolled up or down.
/obj/item/pipe_dispenser/proc/mouse_wheeled(mob/source_mob, atom/A, delta_x, delta_y, params)
SIGNAL_HANDLER
+ if(multi_layer)
+ balloon_alert(source_mob, "turn off multi layer!")
+ return
if(source_mob.incapacitated(IGNORE_RESTRAINTS|IGNORE_STASIS))
return
if(source_mob.get_active_held_item() != src)
return
if(delta_y < 0)
- piping_layer = min(PIPING_LAYER_MAX, piping_layer + 1)
+ pipe_layers = min(PIPE_LAYER(5), pipe_layers << 1)
else if(delta_y > 0)
- piping_layer = max(PIPING_LAYER_MIN, piping_layer - 1)
+ pipe_layers = max(PIPE_LAYER(1), pipe_layers >> 1)
else //mice with side-scrolling wheels are apparently a thing and fuck this up
return
SStgui.update_uis(src)
- to_chat(source_mob, span_notice("You set the layer to [piping_layer]."))
+ balloon_alert(source_mob, "set pipe layer to [get_active_pipe_layers()[1]]")
/obj/item/rpd_upgrade
@@ -666,4 +717,6 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
#undef WRENCH_MODE
#undef REPROGRAM_MODE
+#undef PIPE_LAYER
+
#undef RPD_USE_SOUND
diff --git a/code/game/objects/items/rcd/RPLD.dm b/code/game/objects/items/rcd/RPLD.dm
index c2184bcacf9..0dd78d6a348 100644
--- a/code/game/objects/items/rcd/RPLD.dm
+++ b/code/game/objects/items/rcd/RPLD.dm
@@ -64,13 +64,13 @@
/obj/machinery/plumbing/pill_press = 20,
/obj/machinery/iv_drip/plumbing = 20
),
- // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here
+ // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here
//category 4 liquids
"Liquids" = list(
/obj/structure/drain = 5,
),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
)
/obj/item/construction/plumbing/Initialize(mapload)
@@ -335,7 +335,7 @@
/obj/machinery/plumbing/tank = 20,
/obj/machinery/plumbing/acclimator = 10,
),
- // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here
+ // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here
//category 4 liquids
"Liquids" = list(
@@ -343,7 +343,7 @@
/obj/machinery/plumbing/floor_pump/input = 20,
/obj/machinery/plumbing/floor_pump/output = 20,
),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
)
/obj/item/construction/plumbing/research/Initialize(mapload)
@@ -385,13 +385,13 @@
/obj/machinery/plumbing/tank = 20,
/obj/machinery/plumbing/acclimator = 10,
),
- // SKYRAT EDIT ADDITION START - static list so we have no choice but to skyrat edit these here
+ // NOVA EDIT ADDITION START - static list so we have no choice but to NOVA EDIT these here
//category 4 liquids
"Liquids" = list(
/obj/structure/drain = 5,
),
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
)
/obj/item/construction/plumbing/service/Initialize(mapload)
diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm
index e68a1b8c883..2f2d0b4b80e 100644
--- a/code/game/objects/items/religion.dm
+++ b/code/game/objects/items/religion.dm
@@ -225,7 +225,7 @@
/obj/item/banner/command/Initialize(mapload)
. = ..()
- job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //SKYRAT EDIT ADDITION
+ job_loyalties = DEPARTMENT_BITFLAG_COMMAND | DEPARTMENT_BITFLAG_CENTRAL_COMMAND //NOVA EDIT ADDITION
/obj/item/banner/command/mundane
inspiration_available = FALSE
diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm
index ee3583d5ee6..7ebd87408f6 100644
--- a/code/game/objects/items/robot/items/generic.dm
+++ b/code/game/objects/items/robot/items/generic.dm
@@ -9,21 +9,6 @@
#define HARM_ALARM_NO_SAFETY_COOLDOWN (60 SECONDS)
#define HARM_ALARM_SAFETY_COOLDOWN (20 SECONDS)
-/datum/mood_event/borg_touch
- description = "Being touched by those manipulators is nice."
- mood_change = 2
- timeout = 2 MINUTES
-
-/datum/mood_event/borg_hug
- description = "Those robo-hugs were really nice!"
- mood_change = 4
- timeout = 3 MINUTES
-
-/datum/mood_event/pat_borg
- description = "There is something really special about touching my robotic friends!"
- mood_change = 4
- timeout = 1 MINUTES
-
/obj/item/borg
icon = 'icons/mob/silicon/robot_items.dmi'
@@ -126,12 +111,11 @@
span_notice("You playfully boop [attacked_mob] on the head!"),
)
user.do_attack_animation(attacked_mob, ATTACK_EFFECT_BOOP)
- SEND_SIGNAL(attacked_mob, COMSIG_BORG_TOUCH_MOB)
playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1)
else if(ishuman(attacked_mob))
if(user.body_position == LYING_DOWN)
user.visible_message(
- span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"),
+ span_notice("[user] shakes [attacked_mob] trying to get [attacked_mob.p_them()] up!"),
span_notice("You shake [attacked_mob] trying to get [attacked_mob.p_them()] up!"),
)
else
@@ -139,7 +123,6 @@
span_notice("[user] hugs [attacked_mob] to make [attacked_mob.p_them()] feel better!"),
span_notice("You hug [attacked_mob] to make [attacked_mob.p_them()] feel better!"),
)
- SEND_SIGNAL(attacked_mob, COMSIG_BORG_TOUCH_MOB)
if(attacked_mob.resting)
attacked_mob.set_resting(FALSE, TRUE)
else
@@ -160,7 +143,6 @@
user.visible_message(span_warning("[user] bops [attacked_mob] on the head!"),
span_warning("You bop [attacked_mob] on the head!"),
)
- SEND_SIGNAL(attacked_mob, COMSIG_BORG_TOUCH_MOB)
user.do_attack_animation(attacked_mob, ATTACK_EFFECT_PUNCH)
else
if(!(SEND_SIGNAL(attacked_mob, COMSIG_BORG_HUG_MOB, user) & COMSIG_BORG_HUG_HANDLED))
diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm
index f91e6275f82..552ea514601 100644
--- a/code/game/objects/items/robot/items/hypo.dm
+++ b/code/game/objects/items/robot/items/hypo.dm
@@ -8,7 +8,7 @@
/datum/reagent/medicine/salglu_solution,\
/datum/reagent/medicine/spaceacillin,\
/datum/reagent/medicine/lidocaine\
- ) //SKYRAT EDIT line 10 added Lidocaine
+ ) //NOVA EDIT line 10 added Lidocaine
#define EXPANDED_MEDICAL_REAGENTS list(\
/datum/reagent/medicine/haloperidol,\
/datum/reagent/medicine/inacusiate,\
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 2af72f17a35..2dcaf1b413e 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -551,14 +551,14 @@
if(robot.hasExpanded)
to_chat(usr, span_warning("This unit already has an expand module installed!"))
return FALSE
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
if(robot.model.model_select_icon == "nomod")
to_chat(usr, span_warning("Default models cannot take expand or shrink upgrades."))
return FALSE
if((TRAIT_R_WIDE in robot.model.model_features) || (TRAIT_R_TALL in robot.model.model_features))
to_chat(usr, span_warning("This unit's chassis cannot be enlarged any further."))
return FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
ADD_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src))
var/prev_lockcharge = robot.lockcharge
@@ -576,7 +576,7 @@
robot.set_anchored(FALSE)
REMOVE_TRAIT(robot, TRAIT_NO_TRANSFORM, REF(src))
robot.hasExpanded = TRUE
- robot.update_transform(1.5) // SKYRAT EDIT CHANGE - ORIGINAL: robot.update_transform(2)
+ robot.update_transform(1.5) // NOVA EDIT CHANGE - ORIGINAL: robot.update_transform(2)
/obj/item/borg/upgrade/expand/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
@@ -584,9 +584,9 @@
if (R.hasExpanded)
R.hasExpanded = FALSE
//R.update_transform(0.5) // Original
- R.update_transform(0.8) // SKYRAT EDIT CHANGE
+ R.update_transform(0.8) // NOVA EDIT CHANGE
-/obj/item/borg/upgrade/rped//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/borg/upgrade/rped//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "engineering cyborg RPED"
desc = "A rapid part exchange device for the engineering cyborg."
icon = 'icons/obj/storage/storage.dmi'
diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm
index 410cddd1fc0..c5d9038a6bd 100644
--- a/code/game/objects/items/spear.dm
+++ b/code/game/objects/items/spear.dm
@@ -230,12 +230,12 @@
throwforce = 22
armour_penetration = 15 //Enhanced armor piercing
custom_materials = list(/datum/material/bone = HALF_SHEET_MATERIAL_AMOUNT * 7)
- force_unwielded = 8 // SKYRAT EDIT CHANGE - ORIGINAL: 12
- force_wielded = 16 // SKYRAT EDIT CHANGE - ORIGINAL: 20
+ force_unwielded = 8 // NOVA EDIT CHANGE - ORIGINAL: 12
+ force_wielded = 16 // NOVA EDIT CHANGE - ORIGINAL: 20
- //SKYRAT EDIT ADDITION BEGIN - increases bone spear range to 2
+ //NOVA EDIT ADDITION BEGIN - increases bone spear range to 2
reach = 2
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/obj/item/spear/bonespear/add_headpike_component()
var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/headpikebone)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 309d23aac9f..4228866506a 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -328,7 +328,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \
new/datum/stack_recipe("mortar", /obj/item/reagent_containers/cup/mortar, 3, check_density = FALSE, category = CAT_CHEMISTRY), \
new/datum/stack_recipe("firebrand", /obj/item/match/firebrand, 2, time = 10 SECONDS, check_density = FALSE, category = CAT_TOOLS), \
- new/datum/stack_recipe("bonfire", /obj/structure/bonfire/player_made, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), /* SKYRAT EDIT - Pollution - ORIGINAL: /obj/structure/bonfire */ \
+ new/datum/stack_recipe("bonfire", /obj/structure/bonfire/player_made, 10, time = 6 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), /* NOVA EDIT - Pollution - ORIGINAL: /obj/structure/bonfire */ \
new/datum/stack_recipe("easel", /obj/structure/easel, 5, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \
new/datum/stack_recipe("noticeboard", /obj/item/wallframe/noticeboard, 1, time = 1 SECONDS, one_per_turf = FALSE, on_solid_ground = FALSE, check_density = FALSE, category = CAT_FURNITURE), \
new/datum/stack_recipe("test tube rack", /obj/item/storage/test_tube_rack, 1, time = 1 SECONDS, check_density = FALSE, category = CAT_CHEMISTRY), \
@@ -769,7 +769,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
// Sinew slapcrafting will mostly-sinew recipes, and bones will have mostly-bones recipes.
var/static/list/slapcraft_recipe_list = list(\
/datum/crafting_recipe/bonedagger, /datum/crafting_recipe/bonespear, /datum/crafting_recipe/boneaxe,\
- /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers
+ /datum/crafting_recipe/bonearmor, /datum/crafting_recipe/skullhelm, /datum/crafting_recipe/bracers,
+ /datum/crafting_recipe/ash_recipe/bone_greaves,
)
AddComponent(
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 67b260dcf09..90861953426 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -1134,7 +1134,7 @@
singular_name = "floor tile"
desc = "The ground you walk on."
//throwforce = 10 //ORIGINAL
- throwforce = 6 //SKYRAT EDIT CHANGE
+ throwforce = 6 //NOVA EDIT CHANGE
icon_state = "material_tile"
turf_type = /turf/open/floor/material
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm
index 15247e3051d..a87d2f308a1 100644
--- a/code/game/objects/items/stacks/wrap.dm
+++ b/code/game/objects/items/stacks/wrap.dm
@@ -83,7 +83,7 @@
parcel.base_icon_state = "deliverypackage5"
parcel.update_icon()
user.forceMove(parcel)
- parcel.contains_mobs = TRUE // SKYRAT EDIT - CARGO BORGS
+ parcel.contains_mobs = TRUE // NOVA EDIT - CARGO BORGS
parcel.add_fingerprint(user)
return OXYLOSS
else
@@ -110,10 +110,10 @@
return
if(target.anchored)
return
- // SKYRAT EDIT START - Cargo borgs
+ // NOVA EDIT START - Cargo borgs
if(!amount)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(isitem(target))
. |= AFTERATTACK_PROCESSED_ITEM
@@ -156,12 +156,12 @@
closet.forceMove(parcel)
parcel.add_fingerprint(user)
closet.add_fingerprint(user)
- // SKYRAT EDIT START - CARGO BORGS
+ // NOVA EDIT START - CARGO BORGS
for(var/item in closet.get_all_contents())
if(istype(item, /mob))
parcel.contains_mobs = TRUE
break
- // SKYRAT EDIT END
+ // NOVA EDIT END
else
balloon_alert(user, "not enough paper!")
return
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index a67788f2725..372be881257 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -383,7 +383,7 @@
/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
. = ..()
- AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // SKYRAT EDIT - Ghosts can't see smuggler's satchels
+ AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // NOVA EDIT - Ghosts can't see smuggler's satchels
atom_storage.max_total_storage = 15
atom_storage.set_holdable(cant_hold_list = list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks)
@@ -590,7 +590,7 @@
new /obj/item/surgicaldrill(src)
new /obj/item/cautery(src)
new /obj/item/surgical_drapes(src)
- new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) //SKYRAT EDIT ADDITION
+ new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) //NOVA EDIT ADDITION
new /obj/item/clothing/mask/surgical(src)
new /obj/item/blood_filter(src)
@@ -643,13 +643,13 @@
unzip_duration = 0.5 SECONDS
unzip_sfx = 'sound/items/zip_up.ogg'
-//SKYRAT EDIT CHANGE START - It's just a black duffel.
+//NOVA EDIT CHANGE START - It's just a black duffel.
/obj/item/storage/backpack/duffelbag/syndie
name = "tactical duffel bag"
desc = "A large duffel bag for holding extra tactical supplies."
special_desc_requirement = EXAMINE_CHECK_SYNDICATE
special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials, and features an oiled plastitanium zipper for maximum speed tactical zipping."
-//SKYRAT EDIT CHANGE END
+//NOVA EDIT CHANGE END
/obj/item/storage/backpack/duffelbag/syndie/hitman
desc = "A large duffel bag for holding extra things. There is a Nanotrasen logo on the back."
@@ -674,11 +674,11 @@
/obj/item/storage/backpack/duffelbag/syndie/surgery
name = "surgery duffel bag"
- desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools." //SKYRAT EDIT CHANGE, to match the security surgery bag
+ desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools." //NOVA EDIT CHANGE, to match the security surgery bag
icon_state = "duffel-syndiemed"
inhand_icon_state = "duffel-syndiemed"
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION
- special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // SKYRAT EDIT ADDITION
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION
+ special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // NOVA EDIT ADDITION
/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/scalpel/advanced(src)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 01f075597c4..bc331db0775 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -95,18 +95,18 @@
SSwardrobe.provide_type(/obj/item/multitool, src)
SSwardrobe.provide_type(/obj/item/stack/cable_coil, src)
SSwardrobe.provide_type(/obj/item/extinguisher/mini, src)
- SSwardrobe.provide_type(/obj/item/analyzer/ranged, src) //SKYRAT EDIT - Ranged Analyzer for CE - ORIGINAL: SSwardrobe.provide_type(/obj/item/analyzer, src)
+ SSwardrobe.provide_type(/obj/item/analyzer/ranged, src) //NOVA EDIT - Ranged Analyzer for CE - ORIGINAL: SSwardrobe.provide_type(/obj/item/analyzer, src)
//much roomier now that we've managed to remove two tools
/obj/item/storage/belt/utility/chief/full/get_types_to_preload()
var/list/to_preload = list() //Yes this is a pain. Yes this is the point
to_preload += /obj/item/screwdriver/power
to_preload += /obj/item/crowbar/power
- to_preload += /obj/item/weldingtool/electric // SKYRAT EDIT - Electric welder
+ to_preload += /obj/item/weldingtool/electric // NOVA EDIT - Electric welder
to_preload += /obj/item/multitool
to_preload += /obj/item/stack/cable_coil
to_preload += /obj/item/extinguisher/mini
- to_preload += /obj/item/analyzer/ranged // SKYRAT EDIT - Ranged Analyzer for CE
+ to_preload += /obj/item/analyzer/ranged // NOVA EDIT - Ranged Analyzer for CE
return to_preload
/obj/item/storage/belt/utility/full/PopulateContents()
@@ -135,7 +135,7 @@
/obj/item/storage/belt/utility/full/powertools/PopulateContents()
new /obj/item/screwdriver/power(src)
new /obj/item/crowbar/power(src)
- new /obj/item/weldingtool/electric(src) // SKYRAT EDIT - original: new /obj/item/weldingtool/experimental(src)
+ new /obj/item/weldingtool/electric(src) // NOVA EDIT - original: new /obj/item/weldingtool/experimental(src)
new /obj/item/multitool(src)
new /obj/item/holosign_creator/atmos(src)
new /obj/item/extinguisher/mini(src)
@@ -225,7 +225,7 @@
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown, //SKYRAT EDIT ADDITION - adds surgery gowns to belts
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown, //NOVA EDIT ADDITION - adds surgery gowns to belts
/obj/item/construction/plumbing,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
@@ -235,7 +235,7 @@
/obj/item/healthanalyzer,
/obj/item/hemostat,
/obj/item/holosign_creator/medical,
- /obj/item/hypospray/mkii, //SKYRAT EDIT ADDITION - HYPOSPRAYS
+ /obj/item/hypospray/mkii, //NOVA EDIT ADDITION - HYPOSPRAYS
/obj/item/implant,
/obj/item/implantcase,
/obj/item/implanter,
@@ -248,7 +248,7 @@
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/cup/bottle,
- /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS
+ /obj/item/reagent_containers/cup/vial, //NOVA EDIT ADDITION - HYPOSPRAYS
/obj/item/reagent_containers/cup/tube,
/obj/item/reagent_containers/hypospray,
/obj/item/reagent_containers/medigel,
@@ -267,8 +267,8 @@
/obj/item/surgical_drapes, //for true paramedics
/obj/item/surgicaldrill,
/obj/item/tank/internals/emergency_oxygen,
- /obj/item/weaponcell/medical, //SKYRAT EDIT MEDIGUNS
- /obj/item/handheld_soulcatcher, // SKYRAT EDIT SOULCATCHERS
+ /obj/item/weaponcell/medical, //NOVA EDIT MEDIGUNS
+ /obj/item/handheld_soulcatcher, // NOVA EDIT SOULCATCHERS
/obj/item/wrench/medical,
))
@@ -334,7 +334,7 @@
inhand_icon_state = "security"//Could likely use a better one.
worn_icon_state = "security"
content_overlays = TRUE
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
uses_advanced_reskins = TRUE
unique_reskin = list(
"Basic Security" = list(
@@ -344,13 +344,13 @@
RESKIN_WORN_ICON_STATE = "security"
),
"Peacekeeper" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/belts.dmi',
RESKIN_ICON_STATE = "peacekeeperbelt",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/belt.dmi',
RESKIN_WORN_ICON_STATE = "peacekeeperbelt"
)
)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/obj/item/storage/belt/security/Initialize(mapload)
. = ..()
@@ -365,7 +365,7 @@
/obj/item/flashlight/seclite,
/obj/item/food/donut,
/obj/item/grenade,
- /obj/item/gun, //SKYRAT EDIT ADDITION
+ /obj/item/gun, //NOVA EDIT ADDITION
/obj/item/holosign_creator/security,
/obj/item/knife/combat,
/obj/item/melee/baton,
@@ -373,7 +373,7 @@
/obj/item/reagent_containers/spray/pepper,
/obj/item/restraints/handcuffs,
/obj/item/restraints/legcuffs/bola,
- /obj/item/stock_parts/cell/microfusion, //SKYRAT EDIT ADDITION
+ /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION
))
/obj/item/storage/belt/security/full/PopulateContents()
@@ -674,7 +674,7 @@
/obj/item/storage/belt/wands/full/PopulateContents()
new /obj/item/gun/magic/wand/death(src)
new /obj/item/gun/magic/wand/resurrection(src)
- new /obj/item/gun/magic/wand/fireball(src) //SKYRAT EDIT - Trades polymorph for second fireball
+ new /obj/item/gun/magic/wand/fireball(src) //NOVA EDIT - Trades polymorph for second fireball
new /obj/item/gun/magic/wand/teleport(src)
new /obj/item/gun/magic/wand/door(src)
new /obj/item/gun/magic/wand/fireball(src)
@@ -705,12 +705,12 @@
/obj/item/key/janitor,
/obj/item/lightreplacer,
/obj/item/melee/flyswatter,
- /obj/item/mop, //SKYRAT EDIT - For when you're lazy to use soap
- /obj/item/mop/advanced, //SKYRAT EDIT For when you're lazy to use a bucket
+ /obj/item/mop, //NOVA EDIT - For when you're lazy to use soap
+ /obj/item/mop/advanced, //NOVA EDIT For when you're lazy to use a bucket
/obj/item/paint/paint_remover,
/obj/item/plunger,
/obj/item/pushbroom,
- /obj/item/reagent_containers/cup/bucket, //SKYRAT EDIT - Bucket
+ /obj/item/reagent_containers/cup/bucket, //NOVA EDIT - Bucket
/obj/item/reagent_containers/spray,
/obj/item/soap,
/obj/item/wirebrush,
diff --git a/code/game/objects/items/storage/boxes/clothes_boxes.dm b/code/game/objects/items/storage/boxes/clothes_boxes.dm
index 0fe4210e249..4c18ef4f6df 100644
--- a/code/game/objects/items/storage/boxes/clothes_boxes.dm
+++ b/code/game/objects/items/storage/boxes/clothes_boxes.dm
@@ -104,11 +104,11 @@
new /obj/item/storage/box/papersack/meat(src)
/obj/item/storage/box/hero/mothpioneer
- name = "Mothic Fleet Pioneer - 2100's."
+ name = "Mothic Fleet Pioneer - 2429."
desc = "Some claim that the fleet engineers are directly responsible for most modern advancements in spacefaring designs. Although the exact details of their past contributions are somewhat fuzzy, their ingenuity remains unmatched and unquestioned to this day."
/obj/item/storage/box/hero/mothpioneer/PopulateContents()
- new /obj/item/clothing/head/mothcap(src)
+ new /obj/item/clothing/head/mothcap/original(src)
new /obj/item/clothing/suit/mothcoat/original(src)
new /obj/item/crowbar(src)
new /obj/item/flashlight/lantern(src)
diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm
index 335ccbe7185..b77d52ab3b9 100644
--- a/code/game/objects/items/storage/boxes/job_boxes.dm
+++ b/code/game/objects/items/storage/boxes/job_boxes.dm
@@ -29,7 +29,7 @@
return
if(!isnull(mask_type))
new mask_type(src)
- //SKYRAT EDIT ADDITION START - VOX INTERNALS - Honestly I dont know if this has a function any more with wardrobe_removal(), but TG still uses the plasmaman one so better safe than sorry
+ //NOVA EDIT ADDITION START - VOX INTERNALS - Honestly I dont know if this has a function any more with wardrobe_removal(), but TG still uses the plasmaman one so better safe than sorry
if(!isplasmaman(loc))
if(isvox(loc))
new /obj/item/tank/internals/nitrogen/belt/emergency(src)
@@ -37,7 +37,7 @@
new internal_type(src)
else
new /obj/item/tank/internals/plasmaman/belt(src)
- //SKYRAT EDIT ADDITION END - VOX INTERNALS
+ //NOVA EDIT ADDITION END - VOX INTERNALS
if(!isnull(medipen_type))
new medipen_type(src)
@@ -52,23 +52,23 @@
if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels))
new /obj/item/climbing_hook/emergency(src)
- new /obj/item/oxygen_candle(src) //SKYRAT EDIT ADDITION
+ new /obj/item/oxygen_candle(src) //NOVA EDIT ADDITION
/obj/item/storage/box/survival/radio/PopulateContents()
..() // we want the survival stuff too.
new /obj/item/radio/off(src)
/obj/item/storage/box/survival/proc/wardrobe_removal()
- if(!isplasmaman(loc) && !isvox(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one //SKYRAT EDIT: && !isvox(loc)
+ if(!isplasmaman(loc) && !isvox(loc)) //We need to specially fill the box with plasmaman gear, since it's intended for one //NOVA EDIT: && !isvox(loc)
return
var/obj/item/mask = locate(mask_type) in src
var/obj/item/internals = locate(internal_type) in src
- //SKYRAT EDIT ADDITION START - VOX INTERNALS - Vox mimic the above and below behavior, removing the redundant mask/internals; they dont mimic the plasma breathing though
+ //NOVA EDIT ADDITION START - VOX INTERNALS - Vox mimic the above and below behavior, removing the redundant mask/internals; they dont mimic the plasma breathing though
if(!isvox(loc))
new /obj/item/tank/internals/plasmaman/belt(src)
else
new /obj/item/tank/internals/nitrogen/belt/emergency(src)
- //SKYRAT EDIT ADDITION END - VOX INTERNALS
+ //NOVA EDIT ADDITION END - VOX INTERNALS
qdel(mask) // Get rid of the items that shouldn't be
qdel(internals)
diff --git a/code/game/objects/items/storage/boxes/medical_boxes.dm b/code/game/objects/items/storage/boxes/medical_boxes.dm
index ff4b232454c..c70fffc1f6e 100644
--- a/code/game/objects/items/storage/boxes/medical_boxes.dm
+++ b/code/game/objects/items/storage/boxes/medical_boxes.dm
@@ -133,7 +133,7 @@
/obj/item/storage/box/bandages
name = "box of bandages"
desc = "A box of DeForest brand gel bandages designed to treat blunt-force trauma."
- icon = 'icons/obj/storage/box.dmi' // SKYRAT EDIT CHANGE
+ icon = 'icons/obj/storage/box.dmi' // NOVA EDIT CHANGE
icon_state = "brutebox"
base_icon_state = "brutebox"
inhand_icon_state = "brutebox"
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 5aeeff5128b..61d96c1ff34 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -213,7 +213,7 @@
balloon_alert(user, "ooh, free coupon")
var/obj/item/coupon/attached_coupon = new
user.put_in_hands(attached_coupon)
- attached_coupon.generate(rigged_omen)
+ attached_coupon.generate(rigged_omen ? COUPON_OMEN : null)
attached_coupon = null
spawn_coupon = FALSE
name = "discarded cigarette packet"
@@ -506,7 +506,7 @@
spawn_type = /obj/item/food/pickle
spawn_count = 10
contents_tag = "pickle"
- foldable_result = null
+ foldable_result = /obj/item/reagent_containers/cup/beaker/large
custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT)
open_status = FANCY_CONTAINER_ALWAYS_OPEN
has_open_closed_states = FALSE
diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm
index e9ff2f28ce1..437902ef75e 100644
--- a/code/game/objects/items/storage/garment.dm
+++ b/code/game/objects/items/storage/garment.dm
@@ -76,7 +76,7 @@
new /obj/item/clothing/shoes/laceup(src)
/obj/item/storage/bag/garment/hos/PopulateContents()
- //new /obj/item/clothing/under/rank/security/head_of_security/skirt(src) SKYRAT EDIT REMOVAL - Blue Sec
+ //new /obj/item/clothing/under/rank/security/head_of_security/skirt(src) NOVA EDIT REMOVAL - Blue Sec
new /obj/item/clothing/under/rank/security/head_of_security/alt(src)
new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src)
new /obj/item/clothing/under/rank/security/head_of_security/grey(src)
@@ -89,19 +89,20 @@
new /obj/item/clothing/suit/armor/vest/leather(src)
new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src)
new /obj/item/clothing/glasses/hud/security/sunglasses/gars/giga(src)
+ new /obj/item/clothing/head/hats/hos/beret(src)
new /obj/item/clothing/head/hats/hos/cap(src)
new /obj/item/clothing/mask/gas/sechailer/swat(src)
new /obj/item/clothing/neck/cloak/hos(src)
/obj/item/storage/bag/garment/warden/PopulateContents()
new /obj/item/clothing/suit/armor/vest/warden(src)
- //new /obj/item/clothing/head/hats/warden(src) SKYRAT EDIT REMOVAL
- //new /obj/item/clothing/head/hats/warden/drill(src) SKYRAT EDIT REMOVAL
+ //new /obj/item/clothing/head/hats/warden(src) NOVA EDIT REMOVAL
+ //new /obj/item/clothing/head/hats/warden/drill(src) NOVA EDIT REMOVAL
new /obj/item/clothing/head/beret/sec/navywarden(src)
- //new /obj/item/clothing/suit/armor/vest/warden/alt(src) SKYRAT EDIT REMOVAL
+ //new /obj/item/clothing/suit/armor/vest/warden/alt(src) NOVA EDIT REMOVAL
new /obj/item/clothing/under/rank/security/warden/formal(src)
new /obj/item/clothing/suit/jacket/warden/blue(src) //SKYRAT ADDITION - FORMAL COAT
- //new /obj/item/clothing/under/rank/security/warden/skirt(src) SKYRAT EDIT REMOVAL
+ //new /obj/item/clothing/under/rank/security/warden/skirt(src) NOVA EDIT REMOVAL
new /obj/item/clothing/gloves/krav_maga/sec(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/clothing/mask/gas/sechailer(src)
@@ -113,7 +114,7 @@
new /obj/item/clothing/under/rank/rnd/research_director/alt/skirt(src)
new /obj/item/clothing/under/rank/rnd/research_director/turtleneck(src)
new /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt(src)
- new /obj/item/clothing/suit/toggle/labcoat/skyrat/rd(src) //SKYRAT EDIT ADDITION
+ new /obj/item/clothing/suit/toggle/labcoat/skyrat/rd(src) //NOVA EDIT ADDITION
new /obj/item/clothing/suit/hooded/wintercoat/science/rd(src)
new /obj/item/clothing/head/beret/science/rd(src)
new /obj/item/clothing/gloves/color/black(src)
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index 9154e0ef3ed..35b321d892f 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -253,11 +253,11 @@
ADD_TRAIT(src, TRAIT_NO_MISSING_ITEM_ERROR, TRAIT_GENERIC)
ADD_TRAIT(src, TRAIT_NO_MANIFEST_CONTENTS_ERROR, TRAIT_GENERIC)
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(istype(buyer_account, /datum/bank_account/department))
department_purchase = TRUE
department_account = buyer_account
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/item/storage/lockbox/order/attackby(obj/item/W, mob/user, params)
var/obj/item/card/id/id_card = W.GetID()
@@ -267,7 +267,7 @@
if(iscarbon(user))
add_fingerprint(user)
- if((id_card.registered_account != buyer_account) && !(department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) //SKYRAT EDIT
+ if((id_card.registered_account != buyer_account) && !(department_purchase && (id_card.registered_account?.account_job?.paycheck_department) == (department_account.department_id))) //NOVA EDIT
balloon_alert(user, "incorrect bank account!")
return
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index b6872a113f0..97d6305eacc 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -162,14 +162,14 @@
new_cable_three.set_cable_color(pickedcolor)
/obj/item/storage/toolbox/syndicate
- name = "tactical toolbox" //SKYRAT EDIT
+ name = "tactical toolbox" //NOVA EDIT
icon_state = "syndicate"
inhand_icon_state = "toolbox_syndi"
force = 15
throwforce = 18
material_flags = NONE
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
- special_desc = "A toolbox manufactured by the Syndicate containing extra tactical tools. Made of more robust materials than the average toolbox." // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT
+ special_desc = "A toolbox manufactured by the Syndicate containing extra tactical tools. Made of more robust materials than the average toolbox." // NOVA EDIT
/obj/item/storage/toolbox/syndicate/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index cba35c8b95c..345fe7e0ae4 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -39,7 +39,7 @@
)))
if(KIT_RECON)
new /obj/item/clothing/glasses/thermal/xray(src) // ~8 tc?
-// new /obj/item/storage/briefcase/launchpad(src) //6 tc // SKYRAT EDIT REMOVAL
+// new /obj/item/storage/briefcase/launchpad(src) //6 tc // NOVA EDIT REMOVAL
new /obj/item/binoculars(src) // 2 tc?
new /obj/item/encryptionkey/syndicate(src) // 2 tc
new /obj/item/storage/box/syndie_kit/space(src) //4 tc
@@ -276,63 +276,6 @@
new /obj/item/implanter/freedom(src) // 5 tc
new /obj/item/stack/telecrystal(src) //The failsafe/self destruct isn't an item we can physically include in the kit, but 1 TC is technically enough to buy the equivalent.
-/obj/item/storage/box/syndicate/contract_kit //SKYRAT EDIT - CHANGED IN MODULAR FOLDER
- name = "Contract Kit"
- desc = "Supplied to Syndicate contractors."
- icon_state = "syndiebox"
- illustration = "writing_syndie"
-
-/obj/item/storage/box/syndicate/contractor_loadout //SKYRAT EDIT - CHANGED IN MODULAR FOLDER
- name = "Standard Loadout"
- desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform."
- icon_state = "syndiebox"
- illustration = "writing_syndie"
-
-/obj/item/paper/contractor_guide //SKYRAT EDIT - CHANGED IN MODULAR FOLDER
- name = "Contractor Guide"
-
-/obj/item/paper/contractor_guide/Initialize(mapload) //SKYRAT EDIT - CHANGED IN MODULAR FOLDER
- default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,
- this kit will provide you contracts to take on for TC payments.
-
- Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the
- Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed
- to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
-
- Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your
- targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.
-
- The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,
- with two Rep being provided each time you complete a contract.
-
- Using the tablet
-
- Open the Syndicate Contract Uplink program.
- Here, you can accept a contract, and redeem your TC payments from completed contracts.
- The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the
- other number regardless of if they were alive or dead.
- Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
- inside the pod.
-
-
- Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it
- unavailable to take on again.
- The tablet can also be recharged at any cell charger.
- Extracting
-
- Make sure both yourself and your target are at the dropoff.
- Call the extraction, and stand back from the drop point.
- If it fails, make sure your target is inside, and there's a free space for the pod to land.
- Grab your target, and drag them into the pod.
-
- Ransoms
- We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back
- from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever
- ID card you have equipped, on top of the TC payment we give.
-
- Good luck agent. You can burn this document with the supplied lighter.
"}
- return ..()
-
/obj/item/storage/box/syndie_kit
name = "box"
desc = "A sleek, sturdy box."
@@ -821,6 +764,63 @@
/obj/item/food/grown/apple = 1,
), src)
+/obj/item/storage/box/syndicate/contract_kit
+ name = "Contract Kit"
+ desc = "Supplied to Syndicate contractors."
+ icon_state = "syndiebox"
+ illustration = "writing_syndie"
+
+/obj/item/storage/box/syndicate/contract_kit/PopulateContents()
+ new /obj/item/modular_computer/pda/contractor(src) // SKYRAT EDIT CHANGE - ORIGINAL : /obj/item/modular_computer/pda/syndicate_contract_uplink(src)
+ new /obj/item/storage/box/syndicate/contractor_loadout(src)
+ new /obj/item/melee/baton/telescopic/contractor_baton(src)
+
+ // All about 4 TC or less - some nukeops only items, but fit nicely to the theme.
+ var/static/list/item_list = list(
+ /obj/item/storage/backpack/duffelbag/syndie/x4,
+ /obj/item/storage/box/syndie_kit/throwing_weapons,
+ /obj/item/gun/syringe/syndicate,
+ /obj/item/pen/edagger,
+ /obj/item/pen/sleepy,
+ /obj/item/flashlight/emp,
+ /obj/item/reagent_containers/syringe/mulligan,
+ /obj/item/clothing/shoes/chameleon/noslip,
+ /obj/item/storage/medkit/tactical,
+ /obj/item/encryptionkey/syndicate,
+ /obj/item/clothing/glasses/thermal/syndi,
+ /obj/item/slimepotion/slime/sentience/nuclear,
+ /obj/item/storage/box/syndie_kit/imp_radio,
+ ///obj/item/storage/box/syndie_kit/imp_uplink, // SKYRAT EDIT REMOVAL
+ ///obj/item/clothing/gloves/krav_maga/combatglovesplus, // SKYRAT EDIT REMOVAL
+ /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot,
+ /obj/item/reagent_containers/hypospray/medipen/stimulants,
+ /obj/item/storage/box/syndie_kit/imp_freedom,
+ /obj/item/toy/eightball/haunted,
+ )
+ for(var/i in 1 to 3)
+ var/selected_item = pick_n_take(item_list + modular_item_list) // NOVA EDIT CHANGE - ORIGINAL : var/selected_item = pick_n_take(item_list)
+ new selected_item(src)
+
+ // Paper guide is always last.
+ new /obj/item/paper/contractor_guide(src)
+
+/obj/item/storage/box/syndicate/contractor_loadout
+ name = "Standard Loadout"
+ desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform."
+ icon_state = "syndiebox"
+ illustration = "writing_syndie"
+
+/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents()
+ /* SKYRAT EDIT REMOVAL BEGIN - Contractors get MODSuits instead, see contractor modular for overrides
+ new /obj/item/clothing/head/helmet/space/syndicate/contract(src)
+ new /obj/item/clothing/suit/space/syndicate/contract(src)
+ SKYRAT EDIT REMOVAL END */
+ new /obj/item/clothing/under/chameleon(src)
+ new /obj/item/clothing/mask/chameleon(src)
+ new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
+ new /obj/item/card/id/advanced/chameleon(src)
+ new /obj/item/lighter(src)
+
#undef KIT_RECON
#undef KIT_BLOODY_SPAI
#undef KIT_STEALTHY
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 17412698e64..f83c199a049 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -19,10 +19,10 @@
/obj/item/holochip,
/obj/item/card,
/obj/item/clothing/mask/cigarette,
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
/obj/item/condom_pack,
/obj/item/gbp_punchcard,
- // SKYRAT EDIT END
+ // NOVA EDIT END
/obj/item/coupon,
/obj/item/flashlight/pen,
/obj/item/folder/biscuit,
diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm
index 680698e3318..958fb9fef05 100644
--- a/code/game/objects/items/surgery_tray.dm
+++ b/code/game/objects/items/surgery_tray.dm
@@ -12,7 +12,7 @@
/obj/item/cautery,
/obj/item/circular_saw,
/obj/item/clothing/mask/surgical,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown, // SKYRAT EDIT ADDITION
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // NOVA EDIT ADDITION
/obj/item/hemostat,
/obj/item/razor,
/obj/item/reagent_containers/medigel,
@@ -197,7 +197,7 @@
new /obj/item/cautery(src)
new /obj/item/circular_saw(src)
new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) // SKYRAT EDIT ADDITION
+ new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) // NOVA EDIT ADDITION
new /obj/item/hemostat(src)
new /obj/item/razor/surgery(src)
new /obj/item/retractor(src)
@@ -219,7 +219,7 @@
new /obj/item/cautery/cruel(src)
new /obj/item/circular_saw(src)
new /obj/item/clothing/mask/surgical(src)
- new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src) // SKYRAT EDIT ADDITION
+ new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src) // NOVA EDIT ADDITION
new /obj/item/hemostat/cruel(src)
new /obj/item/razor/surgery(src)
new /obj/item/retractor/cruel(src)
diff --git a/code/game/objects/items/syndie_spraycan.dm b/code/game/objects/items/syndie_spraycan.dm
index deab6229a28..02a576a2cb9 100644
--- a/code/game/objects/items/syndie_spraycan.dm
+++ b/code/game/objects/items/syndie_spraycan.dm
@@ -1,3 +1,5 @@
+#define SYNDIE_DRAW_TIME 3 SECONDS
+
// Extending the existing spraycan item was more trouble than it was worth, I don't want or need this to be able to draw arbitrary shapes.
/obj/item/traitor_spraycan
name = "seditious spraycan"
@@ -79,7 +81,12 @@
/obj/item/traitor_spraycan/proc/try_draw_step(start_output, mob/living/user, atom/target)
drawing_rune = TRUE
user.balloon_alert(user, "[start_output]")
- if (!do_after(user, 3 SECONDS, target))
+ var/wait_time = SYNDIE_DRAW_TIME
+
+ if(HAS_TRAIT(user, TRAIT_TAGGER))
+ wait_time *= 0.5
+
+ if(!do_after(user, wait_time, target))
user.balloon_alert(user, "interrupted!")
drawing_rune = FALSE
return FALSE
@@ -220,6 +227,7 @@
return ..()
+#undef SYNDIE_DRAW_TIME
#undef RUNE_STAGE_COLOURED
#undef RUNE_STAGE_COMPLETE
#undef RUNE_STAGE_OUTLINE
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index 5317afe4a78..6442a28238c 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -168,12 +168,12 @@
/obj/item/hand_tele/attack_self(mob/user)
if (!can_teleport_notifies(user))
return
- //SKYRAT EDIT BEGIN
+ //NOVA EDIT BEGIN
var/turf/my_turf = get_turf(src)
if(is_away_level(my_turf.z))
to_chat(user, "[src] cannot be used here! ")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/list/locations = list()
for(var/obj/machinery/computer/teleporter/computer as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/teleporter))
var/atom/target = computer.target_ref?.resolve()
diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm
index 8f357e05139..e695dedbca3 100644
--- a/code/game/objects/items/theft_tools.dm
+++ b/code/game/objects/items/theft_tools.dm
@@ -157,13 +157,10 @@
inhand_icon_state = null //touching it dusts you, so no need for an inhand icon.
pulseicon = "supermatter_sliver_pulse"
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
-
/obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes
return
-
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes
return FALSE
@@ -192,11 +189,11 @@
var/mob/living/victim = hit_atom
if(victim.incorporeal_move || victim.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions
return ..()
- if(throwingdatum?.thrower)
- var/mob/user = throwingdatum.thrower
- log_combat(throwingdatum?.thrower, hit_atom, "consumed", src)
- message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)], thrown by [key_name_admin(user)].")
- investigate_log("has consumed [key_name(victim)], thrown by [key_name(user)]", INVESTIGATE_ENGINE)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(thrower)
+ log_combat(thrower, hit_atom, "consumed", src)
+ message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)], thrown by [key_name_admin(thrower)].")
+ investigate_log("has consumed [key_name(victim)], thrown by [key_name(thrower)]", INVESTIGATE_ENGINE)
else
message_admins("[src] has consumed [key_name_admin(victim)] [ADMIN_JMP(src)] via throw impact.")
investigate_log("has consumed [key_name(victim)] via throw impact.", INVESTIGATE_ENGINE)
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index e09beadd5af..6ac0969abb9 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -30,8 +30,8 @@
heat = 3800
tool_behaviour = TOOL_WELDER
toolspeed = 1
- //wound_bonus = 10 //SKYRAT EDIT REMOVAL
- //bare_wound_bonus = 15 //SKYRAT EDIT REMOVAL
+ //wound_bonus = 10 //NOVA EDIT REMOVAL
+ //bare_wound_bonus = 15 //NOVA EDIT REMOVAL
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*0.7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.3)
/// Whether the welding tool is on or off.
var/welding = FALSE
@@ -151,12 +151,12 @@
if(user == attacked_humanoid)
user.visible_message(span_notice("[user] starts to fix some of the dents on [attacked_humanoid]'s [affecting.name]."),
span_notice("You start fixing some of the dents on [attacked_humanoid == user ? "your" : "[attacked_humanoid]'s"] [affecting.name]."))
- if(!do_after(user, self_delay, attacked_humanoid)) // SKYRAT EDIT CHANGE - ORIGINAL: if(!do_after(user, 5 SECONDS, attacked_humanoid))
+ if(!do_after(user, self_delay, attacked_humanoid)) // NOVA EDIT CHANGE - ORIGINAL: if(!do_after(user, 5 SECONDS, attacked_humanoid))
return ITEM_INTERACT_BLOCKING
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(!do_after(user, other_delay, attacked_humanoid))
return ITEM_INTERACT_BLOCKING
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
item_heal_robotic(attacked_humanoid, user, 15, 0)
return ITEM_INTERACT_SUCCESS
diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm
index dad9763bd3d..14c51faf080 100644
--- a/code/game/objects/items/tools/wirecutters.dm
+++ b/code/game/objects/items/tools/wirecutters.dm
@@ -63,7 +63,7 @@
playsound(loc, usesound, 50, TRUE, -1)
return BRUTELOSS
-/obj/item/wirecutters/abductor//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/wirecutters/abductor//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "alien wirecutters"
desc = "Extremely sharp wirecutters, made out of a silvery-green metal."
icon = 'icons/obj/antags/abductor.dmi'
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 18d65f2d8b6..c91f6eb6c44 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -135,7 +135,8 @@
return ..()
/obj/item/toy/balloon/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
- if(ismonkey(throwingdatum.thrower) && istype(AM, /obj/item/ammo_casing/foam_dart))
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(ismonkey(thrower) && istype(AM, /obj/item/ammo_casing/foam_dart))
pop_balloon(monkey_pop = TRUE)
else
return ..()
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index c83fefb2fce..059f78b80c9 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -161,7 +161,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/obj/item/claymore/highlander/process()
if(ishuman(loc))
var/mob/living/carbon/human/holder = loc
- SET_PLANE_EXPLICIT(holder, GAME_PLANE_UPPER_FOV_HIDDEN, src) //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS)
+ layer = ABOVE_ALL_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS)
ADD_TRAIT(holder, TRAIT_NOBLOOD, HIGHLANDER_TRAIT) //AND WE WON'T BLEED OUT LIKE COWARDS
else
if(!(flags_1 & ADMIN_SPAWNED_1))
@@ -285,7 +285,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
return INITIALIZE_HINT_QDEL
/obj/item/claymore/highlander/robot/process()
- SET_PLANE_IMPLICIT(loc, GAME_PLANE_UPPER_FOV_HIDDEN)
+ layer = ABOVE_ALL_MOB_LAYER
/obj/item/katana
name = "katana"
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 2a6db83d9d4..c556f6d28d6 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -98,12 +98,6 @@
var/amt = max(0, ((force - (move_resist * MOVE_FORCE_CRUSH_RATIO)) / (move_resist * MOVE_FORCE_CRUSH_RATIO)) * 10)
take_damage(amt, BRUTE)
-/obj/attack_slime(mob/living/simple_animal/slime/user, list/modifiers)
- if(!user.is_adult)
- return
- if(attack_generic(user, rand(10, 15), BRUTE, MELEE, 1))
- log_combat(user, src, "attacked")
-
/obj/singularity_act()
SSexplosions.high_mov_atom += src
if(src && !QDELETED(src))
@@ -118,7 +112,7 @@
. = ..()
if((resistance_flags & UNACIDABLE) || (acid_volume <= 0) || (acidpwr <= 0))
return FALSE
- if(QDELETED(src)) //skyrat edit: fix createanddestroy
+ if(QDELETED(src)) //NOVA EDIT: fix createanddestroy
return FALSE
AddComponent(/datum/component/acid, acidpwr, acid_volume, custom_acid_overlay || GLOB.acid_overlay)
return TRUE
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index cdc2b2bd5ec..1943f0aa398 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -66,3 +66,6 @@
take_damage(power * 2.5e-4, BURN, "energy")
power -= power * 5e-4 //walls take a lot out of ya
. = ..()
+
+/obj/structure/animate_atom_living(mob/living/owner)
+ new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner)
diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm
index e637ecc274e..886d0b9bcba 100644
--- a/code/game/objects/structures/aliens.dm
+++ b/code/game/objects/structures/aliens.dm
@@ -338,7 +338,6 @@
integrity_failure = 0.05
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
layer = MOB_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
/// Ref to the hugger within.
var/obj/item/clothing/mask/facehugger/child
///Proximity monitor associated with this atom, needed for proximity checks.
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index a6a1131a1b9..9fd8da19391 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -109,20 +109,18 @@
/obj/structure/chair/proc/handle_layer()
if(has_buckled_mobs() && dir == NORTH)
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER_FOV_HIDDEN)
else
layer = OBJ_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
/obj/structure/chair/post_buckle_mob(mob/living/M)
. = ..()
handle_layer()
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(HAS_TRAIT(M, TRAIT_OVERSIZED))
visible_message(span_warning("[src] buckles under the weight of [M] causing it to break!"))
- playsound(src, 'modular_skyrat/modules/oversized/sound/chair_break.ogg', 70, TRUE)
+ playsound(src, 'modular_nova/modules/oversized/sound/chair_break.ogg', 70, TRUE)
deconstruct()
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/structure/chair/post_unbuckle_mob()
. = ..()
handle_layer()
@@ -184,7 +182,6 @@
/obj/structure/chair/comfy/proc/gen_armrest()
armrest = GetArmrest()
armrest.layer = ABOVE_MOB_LAYER
- SET_PLANE_EXPLICIT(armrest, GAME_PLANE_UPPER, src)
update_armrest()
/obj/structure/chair/comfy/proc/GetArmrest()
diff --git a/code/game/objects/structures/beds_chairs/pew.dm b/code/game/objects/structures/beds_chairs/pew.dm
index 21bf0fbf09c..6388247e8c4 100644
--- a/code/game/objects/structures/beds_chairs/pew.dm
+++ b/code/game/objects/structures/beds_chairs/pew.dm
@@ -33,10 +33,8 @@
/obj/structure/chair/pew/left/proc/gen_armrest()
leftpewarmrest = GetLeftPewArmrest()
leftpewarmrest.layer = ABOVE_MOB_LAYER
- SET_PLANE_EXPLICIT(leftpewarmrest, GAME_PLANE_UPPER, src)
update_leftpewarmrest()
-
/obj/structure/chair/pew/left/proc/GetLeftPewArmrest()
return mutable_appearance('icons/obj/chairs_wide.dmi', "pewend_left_armrest")
@@ -76,7 +74,6 @@
/obj/structure/chair/pew/right/proc/gen_armrest()
rightpewarmrest = GetRightPewArmrest()
rightpewarmrest.layer = ABOVE_MOB_LAYER
- SET_PLANE_EXPLICIT(rightpewarmrest, GAME_PLANE_UPPER, src)
update_rightpewarmrest()
/obj/structure/chair/pew/right/proc/GetRightPewArmrest()
diff --git a/code/game/objects/structures/beds_chairs/sofa.dm b/code/game/objects/structures/beds_chairs/sofa.dm
index 076f95f4dc9..bf9a221929b 100644
--- a/code/game/objects/structures/beds_chairs/sofa.dm
+++ b/code/game/objects/structures/beds_chairs/sofa.dm
@@ -36,7 +36,6 @@ path/corner/color_name {\
/obj/structure/chair/sofa/proc/gen_armrest()
armrest = mutable_appearance(initial(icon), "[icon_state]_armrest", ABOVE_MOB_LAYER)
- SET_PLANE_EXPLICIT(armrest, GAME_PLANE_UPPER, src)
update_armrest()
/obj/structure/chair/sofa/electrify_self(obj/item/assembly/shock_kit/input_shock_kit, mob/user, list/overlays_from_child_procs)
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 8517a321ceb..c440976b409 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -86,7 +86,6 @@ LINEN BINS
/obj/item/bedsheet/proc/coverup(mob/living/sleeper)
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
pixel_x = 0
pixel_y = 0
balloon_alert(sleeper, "covered")
diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
index 063200b486b..f0d1eaa0cc8 100644
--- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
+++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm
@@ -50,16 +50,15 @@
if(!.)
return FALSE
- alerted = null
+ LAZYINITLIST(alerted)
var/do_alert = (COOLDOWN_FINISHED(src, alert_cooldown) && (locate(/mob/living) in contents))
if(!do_alert)
-
return TRUE
+
+ alerted.Cut() // just in case we runtimed and the list didn't get cleared in after_open
// Cache the list before we open the box.
- alerted = viewers(7, src)
- // There are no mobs to alert? clear the list & prevent further action after opening the box
- if(!(locate(/mob/living) in alerted))
- alerted = null
+ for(var/mob/living/alerted_mob in viewers(7, src))
+ alerted += alerted_mob
return TRUE
@@ -77,6 +76,7 @@
alerted_mob.face_atom(src)
alerted_mob.do_alert_animation()
+ alerted.Cut()
playsound(loc, 'sound/machines/chime.ogg', 50, FALSE, -5)
/// Does the MGS ! animation
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 4e56395330b..795d8ccc452 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -67,10 +67,10 @@
new /obj/item/watertank/janitor(src)
new /obj/item/storage/belt/janitor(src)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
new /obj/item/air_refresher(src)
new /obj/item/air_refresher(src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/structure/closet/lawcloset
name = "legal closet"
@@ -299,7 +299,7 @@
/obj/item/clothing/suit/toggle/labcoat/science = 3,
/obj/item/clothing/shoes/sneakers/white = 3,
/obj/item/radio/headset/headset_sci = 2,
- /obj/item/clothing/mask/gas/alt = 3) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas = 3)
+ /obj/item/clothing/mask/gas/alt = 3) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas = 3)
generate_items_inside(items_inside,src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index e74873bfaef..473fedfa10a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -18,10 +18,10 @@
new /obj/item/etherealballdeployer(src)
new /obj/item/roulette_wheel_beacon(src)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
new /obj/item/storage/fancy/candle_box(src)
new /obj/item/storage/fancy/candle_box(src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/structure/closet/secure_closet/bar/all_access
req_access = null
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 679e31f9295..88e8fe8d2d0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -18,17 +18,17 @@
new /obj/item/extinguisher/advanced(src)
new /obj/item/storage/photo_album/ce(src)
new /obj/item/storage/box/skillchips/engineering(src)
- new /obj/item/storage/box/gas_miner_beacons(src) // SKYRAT EDIT ADDITION
- new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION
- new /obj/item/circuitboard/machine/rodstopper(src) //SKYRAT EDIT ADDITION
- new /obj/item/card/id/departmental_budget/eng(src) //SKYRAT EDIT ADDITION
+ new /obj/item/storage/box/gas_miner_beacons(src) // NOVA EDIT ADDITION
+ new /obj/item/construction/plumbing/engineering(src) //NOVA EDIT ADDITION
+ new /obj/item/circuitboard/machine/rodstopper(src) //NOVA EDIT ADDITION
+ new /obj/item/card/id/departmental_budget/eng(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/engineering_chief/populate_contents_immediate()
. = ..()
// Traitor steal objective
new /obj/item/areaeditor/blueprints(src)
- new /obj/item/pipe_dispenser/bluespace(src) // SKYRAT EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src)
+ new /obj/item/pipe_dispenser/bluespace(src) // NOVA EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -79,7 +79,7 @@
new /obj/item/clothing/glasses/meson/engine(src)
new /obj/item/storage/box/emptysandbags(src)
new /obj/item/storage/bag/construction(src)
- new /obj/item/construction/plumbing/engineering(src) //SKYRAT EDIT ADDITION
+ new /obj/item/construction/plumbing/engineering(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/atmospherics
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 5f2c694ed21..b227eb1c6fc 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -86,7 +86,7 @@
new /obj/item/defibrillator/compact/loaded(src)
new /obj/item/healthanalyzer/advanced(src)
new /obj/item/assembly/flash/handheld(src)
- new /obj/item/storage/briefcase/medicalgunset/cmo(src) //SKYRAT EDIT ADDITION MEDIGUNS
+ new /obj/item/storage/briefcase/medicalgunset/cmo(src) //NOVA EDIT ADDITION MEDIGUNS
new /obj/item/autosurgeon/medical_hud(src)
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
@@ -95,14 +95,14 @@
new /obj/item/circuitboard/machine/techfab/department/medical(src)
new /obj/item/storage/photo_album/cmo(src)
new /obj/item/storage/lockbox/medal/med(src)
- new /obj/item/card/id/departmental_budget/med(src) //SKYRAT EDIT ADDITION
+ new /obj/item/card/id/departmental_budget/med(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/chief_medical/populate_contents_immediate()
. = ..()
// Traitor steal objective
//new /obj/item/reagent_containers/hypospray/cmo(src) - ORIGINAL
- new /obj/item/storage/hypospraykit/cmo(src) //SKYRAT EDIT ADDITION - New Hyposprays
+ new /obj/item/storage/hypospraykit/cmo(src) //NOVA EDIT ADDITION - New Hyposprays
/obj/structure/closet/secure_closet/animal
name = "animal control locker"
@@ -127,8 +127,8 @@
new /obj/item/storage/box/pillbottles(src)
new /obj/item/storage/box/medigels(src)
new /obj/item/storage/box/medigels(src)
- new /obj/item/storage/box/hypospray(src) //SKYRAT EDIT ADDITION - HYPOSPRAYS
- new /obj/item/storage/box/hypospray(src) //SKYRAT EDIT ADDITION - HYPOSPRAYS
+ new /obj/item/storage/box/hypospray(src) //NOVA EDIT ADDITION - HYPOSPRAYS
+ new /obj/item/storage/box/hypospray(src) //NOVA EDIT ADDITION - HYPOSPRAYS
new /obj/item/ph_booklet(src)
new /obj/item/reagent_containers/dropper(src)
new /obj/item/reagent_containers/cup/bottle/acidic_buffer(src) //hopefully they get the hint
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 7bfcd40d34b..002d3d7dca2 100755
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -18,7 +18,7 @@
new /obj/item/circuitboard/machine/techfab/department/science(src)
new /obj/item/storage/photo_album/rd(src)
new /obj/item/storage/box/skillchips/science(src)
- new /obj/item/card/id/departmental_budget/sci(src) //SKYRAT EDIT ADDITION
+ new /obj/item/card/id/departmental_budget/sci(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/research_director/populate_contents_immediate()
. = ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 6d58bce0b32..01529951587 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -20,7 +20,7 @@
new /obj/item/gun/energy/e_gun(src)
new /obj/item/door_remote/captain(src)
new /obj/item/storage/photo_album/captain(src)
- new /obj/item/card/id/departmental_budget(src) //SKYRAT EDIT ADDITION
+ new /obj/item/card/id/departmental_budget(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/hop
name = "head of personnel's locker"
@@ -45,7 +45,7 @@
new /obj/item/circuitboard/machine/techfab/department/service(src)
new /obj/item/storage/photo_album/hop(src)
new /obj/item/storage/lockbox/medal/hop(src)
- new /obj/item/card/id/departmental_budget/srv(src) //SKYRAT EDIT ADDITION
+ new /obj/item/card/id/departmental_budget/srv(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/hos
name = "head of security's locker"
@@ -57,6 +57,7 @@
new /obj/item/computer_disk/command/hos(src)
new /obj/item/radio/headset/heads/hos(src)
+ new /obj/item/radio/headset/heads/hos/alt(src)
new /obj/item/storage/bag/garment/hos(src)
new /obj/item/storage/lockbox/medal/sec(src)
new /obj/item/megaphone/sec(src)
@@ -67,7 +68,7 @@
new /obj/item/storage/belt/security/full(src)
new /obj/item/circuitboard/machine/techfab/department/security(src)
new /obj/item/storage/photo_album/hos(src)
- new /obj/item/card/id/departmental_budget/sec(src) //SKYRAT EDIT ADDITION
+ new /obj/item/card/id/departmental_budget/sec(src) //NOVA EDIT ADDITION
/obj/structure/closet/secure_closet/hos/populate_contents_immediate()
. = ..()
@@ -103,13 +104,13 @@
/obj/structure/closet/secure_closet/security/PopulateContents()
..()
new /obj/item/clothing/suit/armor/vest/alt/sec(src)
- new /obj/item/clothing/head/security_cap(src) //SKYRAT EDIT ADDITION
+ new /obj/item/clothing/head/security_cap(src) //NOVA EDIT ADDITION
new /obj/item/clothing/head/helmet/sec(src)
new /obj/item/radio/headset/headset_sec(src)
new /obj/item/radio/headset/headset_sec/alt(src)
new /obj/item/clothing/glasses/hud/security/sunglasses(src)
new /obj/item/flashlight/seclite(src)
- new /obj/item/clothing/gloves/tackler/security(src) // SKYRAT EDIT CHANGE - Gives Them The Blue Ones - ORIGINAL: new /obj/item/clothing/gloves/tackler(src)
+ new /obj/item/clothing/gloves/tackler/security(src) // NOVA EDIT CHANGE - Gives Them The Blue Ones - ORIGINAL: new /obj/item/clothing/gloves/tackler(src)
/obj/structure/closet/secure_closet/security/sec
@@ -117,7 +118,7 @@
..()
new /obj/item/storage/belt/security/full(src)
-// SKYRAT EDIT CHANGE -- GOOFSEC DEP GUARDS
+// NOVA EDIT CHANGE -- GOOFSEC DEP GUARDS
/obj/structure/closet/secure_closet/security/cargo
name = "\proper customs agent's locker"
req_access = list(ACCESS_BRIG_ENTRANCE, ACCESS_CARGO)
@@ -161,7 +162,7 @@
new /obj/item/restraints/handcuffs/cable/blue(src)
new /obj/item/storage/bag/garment/orderly(src)
new /obj/item/assembly/flash/handheld(src)
-// SKYRAT EDIT CHANGE END -- GOOFSEC DEP GUARDS
+// NOVA EDIT CHANGE END -- GOOFSEC DEP GUARDS
/obj/structure/closet/secure_closet/detective
name = "\improper detective's cabinet"
@@ -182,7 +183,7 @@
new /obj/item/holosign_creator/security(src)
new /obj/item/reagent_containers/spray/pepper(src)
new /obj/item/clothing/suit/armor/vest/det_suit(src)
- new /obj/item/toy/crayon/white(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/storage/belt/holster/detective/full(src)
+ new /obj/item/toy/crayon/white(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/storage/belt/holster/detective/full(src)
new /obj/item/pinpointer/crew(src)
new /obj/item/binoculars(src)
new /obj/item/storage/box/rxglasses/spyglasskit(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 7367e04e6f5..e28e0508021 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -33,13 +33,13 @@
/obj/structure/closet/emcloset/PopulateContents()
..()
- new /obj/item/storage/box/emergency_spacesuit(src) // SKYRAT EDIT ADD
+ new /obj/item/storage/box/emergency_spacesuit(src) // NOVA EDIT ADD
if (prob(40))
new /obj/item/storage/toolbox/emergency(src)
//switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10, "nothing" = 4))) // ORIGINAL
- switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10))) // SKYRAT EDIT CHANGE
+ switch (pick_weight(list("small" = 35, "aid" = 30, "tank" = 20, "both" = 10))) // NOVA EDIT CHANGE
if ("small")
new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/tank/internals/emergency_oxygen(src)
@@ -59,13 +59,13 @@
new /obj/item/tank/internals/emergency_oxygen(src)
new /obj/item/clothing/mask/breath(src)
- // SKYRAT EDIT REMOVAL START
+ // NOVA EDIT REMOVAL START
/*
if ("nothing")
// doot
pass()
*/
- // SKYRAT EDIT REMOVAL END
+ // NOVA EDIT REMOVAL END
/*
* Fire Closet
@@ -78,16 +78,16 @@
/obj/structure/closet/firecloset/PopulateContents()
..()
new /obj/item/clothing/suit/utility/fire/firefighter(src)
- new /obj/item/clothing/mask/gas/alt(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas/alt(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
new /obj/item/clothing/head/utility/hardhat/red(src)
new /obj/item/crowbar/large/emergency(src)
- new /obj/item/storage/inflatable(src) //SKYRAT EDIT ADDITION - INFLATABLES
+ new /obj/item/storage/inflatable(src) //NOVA EDIT ADDITION - INFLATABLES
/obj/structure/closet/firecloset/full/PopulateContents()
new /obj/item/clothing/suit/utility/fire/firefighter(src)
- new /obj/item/clothing/mask/gas/alt(src) //SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas/alt(src) //NOVA EDIT CHANGE - ORIGINAL: /obj/item/clothing/mask/gas(src)
new /obj/item/flashlight(src)
new /obj/item/tank/internals/oxygen/red(src)
new /obj/item/extinguisher(src)
diff --git a/code/game/objects/structures/deployable_turret.dm b/code/game/objects/structures/deployable_turret.dm
index 0e810526bdc..ac4b35678c9 100644
--- a/code/game/objects/structures/deployable_turret.dm
+++ b/code/game/objects/structures/deployable_turret.dm
@@ -12,7 +12,6 @@
max_integrity = 100
buckle_lying = 0
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
var/view_range = 2.5
var/cooldown = 0
/// The projectile that the turret fires
@@ -101,7 +100,6 @@
M.put_in_hands(TC)
M.pixel_y = 14
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
setDir(SOUTH)
playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE)
set_anchored(TRUE)
@@ -136,43 +134,34 @@
switch(dir)
if(NORTH)
layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
user.pixel_x = 0
user.pixel_y = -14
if(NORTHEAST)
layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
user.pixel_x = -8
user.pixel_y = -4
if(EAST)
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
user.pixel_x = -14
user.pixel_y = 0
if(SOUTHEAST)
layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
user.pixel_x = -8
user.pixel_y = 4
if(SOUTH)
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
- plane = GAME_PLANE_UPPER
user.pixel_x = 0
user.pixel_y = 14
if(SOUTHWEST)
layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
user.pixel_x = 8
user.pixel_y = 4
if(WEST)
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
user.pixel_x = 14
user.pixel_y = 0
if(NORTHWEST)
layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
user.pixel_x = 8
user.pixel_y = -4
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 13ab18fdb0e..1858fd1ef5e 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -103,8 +103,8 @@
/obj/structure/displaycase/proc/trigger_alarm()
if(!alert)
return
- //var/area/alarmed = get_area(src) SKYRAT EDIT REMOVAL
- //alarmed.burglaralert(src) SKYRAT EDIT REMOVAL
+ //var/area/alarmed = get_area(src) NOVA EDIT REMOVAL
+ //alarmed.burglaralert(src) NOVA EDIT REMOVAL
alarm_manager.send_alarm(ALARM_BURGLAR)
addtimer(CALLBACK(alarm_manager, TYPE_PROC_REF(/datum/alarm_handler, clear_alarm), ALARM_BURGLAR), 1 MINUTES)
@@ -317,7 +317,7 @@
//The lab cage and captain's display case do not spawn with electronics, which is why req_access is needed.
/obj/structure/displaycase/captain
start_showpiece_type = /obj/item/gun/energy/laser/captain
- req_access = list(ACCESS_CAPTAIN) //SKYRAT EDIT CHANGE - ORIGINAL: req_access = list(ACCESS_CENT_SPECOPS) //this was intentional, presumably to make it slightly harder for caps to grab their gun roundstart
+ req_access = list(ACCESS_CAPTAIN) //NOVA EDIT CHANGE - ORIGINAL: req_access = list(ACCESS_CENT_SPECOPS) //this was intentional, presumably to make it slightly harder for caps to grab their gun roundstart
/obj/structure/displaycase/labcage
name = "lab cage"
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 9232a992a5b..9108216f271 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -1,6 +1,6 @@
-//THIS FILE HAS BEEN EDITED BY SKYRAT EDIT
+//THIS FILE HAS BEEN EDITED BY NOVA EDIT
-/obj/structure/dresser//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/dresser//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "dresser"
desc = "A nicely-crafted wooden dresser. It's filled with lots of undies."
icon = 'icons/obj/fluff/general.dmi'
@@ -36,7 +36,7 @@
to_chat(dressing_human, span_warning("You are not capable of wearing underwear."))
return
- var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Underwear Color", "Bra", "Bra Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")) //SKYRAT EDIT ADDITION - Colorable Undershirt/Socks/Bra
+ var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Underwear Color", "Bra", "Bra Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")) //NOVA EDIT ADDITION - Colorable Undershirt/Socks/Bra
if(isnull(choice))
return
@@ -59,7 +59,7 @@
var/new_socks = tgui_input_list(user, "Select your socks", "Changing", GLOB.socks_list)
if(new_socks)
dressing_human.socks = new_socks
- //SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks/Bras
+ //NOVA EDIT ADDITION BEGIN - Colorable Undershirt/Socks/Bras
if("Undershirt Color")
var/new_undershirt_color = input(dressing_human, "Choose your undershirt color", "Undershirt Color", dressing_human.undershirt_color) as color|null
if(new_undershirt_color)
@@ -79,7 +79,7 @@
if(new_bra_color)
dressing_human.bra_color = sanitize_hexcolor(new_bra_color)
- //SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks/Bras
+ //NOVA EDIT ADDITION END - Colorable Undershirt/Socks/Bras
add_fingerprint(dressing_human)
dressing_human.update_body()
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 71166a840df..2cb67a8cafb 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -17,7 +17,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29)
if(building)
opened = TRUE
//icon_state = "extinguisher_empty" ORIGINAL
- icon_state = "extinguisher_empty_open" //SKYRAT EDIT CHANGE - AESTHETICS
+ icon_state = "extinguisher_empty_open" //NOVA EDIT CHANGE - AESTHETICS
else
stored_extinguisher = new /obj/item/extinguisher(src)
update_appearance(UPDATE_ICON)
@@ -107,6 +107,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29)
if(!opened)
opened = 1
playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3)
+ update_appearance(UPDATE_ICON)
else
toggle_cabinet(user)
@@ -140,7 +141,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29)
opened = !opened
update_appearance(UPDATE_ICON)
-/* SKYRAT EDIT REMOVAL BEGIN - AESTHETICS - MOVED TO MODULAR.
+/* NOVA EDIT REMOVAL BEGIN - AESTHETICS - MOVED TO MODULAR.
/obj/structure/extinguisher_cabinet/update_icon_state()
icon_state = "extinguisher"
diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm
index 97a9ce8bd4d..19cdab1e6a4 100644
--- a/code/game/objects/structures/fireplace.dm
+++ b/code/game/objects/structures/fireplace.dm
@@ -1,6 +1,6 @@
-#define LOG_BURN_TIMER 5000 //SKYRAT EDIT original: #define LOG_BURN_TIMER 150
+#define LOG_BURN_TIMER 5000 //NOVA EDIT original: #define LOG_BURN_TIMER 150
#define PAPER_BURN_TIMER 5
-#define MAXIMUM_BURN_TIMER 100000 //SKYRAT EDIT original: #define MAXIMUM_BURN_TIMER 3000
+#define MAXIMUM_BURN_TIMER 100000 //NOVA EDIT original: #define MAXIMUM_BURN_TIMER 3000
/obj/structure/fireplace
name = "fireplace"
@@ -95,15 +95,15 @@
return
switch(burn_time_remaining())
- if(0 to 19999) //SKYRAT EDIT original: if(0 to 500)
+ if(0 to 19999) //NOVA EDIT original: if(0 to 500)
. += "fireplace_fire0"
- if(20000 to 39999) //SKYRAT EDIT original: if(500 to 1000)
+ if(20000 to 39999) //NOVA EDIT original: if(500 to 1000)
. += "fireplace_fire1"
- if(40000 to 59999) //SKYRAT EDIT original: if(1000 to 1500)
+ if(40000 to 59999) //NOVA EDIT original: if(1000 to 1500)
. += "fireplace_fire2"
- if(60000 to 79999) //SKYRAT EDIT original: if(1500 to 2000)
+ if(60000 to 79999) //NOVA EDIT original: if(1500 to 2000)
. += "fireplace_fire3"
- if(80000 to MAXIMUM_BURN_TIMER) //SKYRAT EDIT original: if(2000 to MAXIMUM_BURN_TIMER)
+ if(80000 to MAXIMUM_BURN_TIMER) //NOVA EDIT original: if(2000 to MAXIMUM_BURN_TIMER)
. += "fireplace_fire4"
. += "fireplace_glow"
@@ -113,15 +113,15 @@
return
switch(burn_time_remaining())
- if(0 to 19999) //SKYRAT EDIT original: if(0 to 500)
+ if(0 to 19999) //NOVA EDIT original: if(0 to 500)
set_light(1)
- if(20000 to 39999) //SKYRAT EDIT original: if(500 to 1000)
+ if(20000 to 39999) //NOVA EDIT original: if(500 to 1000)
set_light(2)
- if(40000 to 59999) //SKYRAT EDIT original: if(1000 to 1500)
+ if(40000 to 59999) //NOVA EDIT original: if(1000 to 1500)
set_light(3)
- if(60000 to 79999) //SKYRAT EDIT original: if(1500 to 2000)
+ if(60000 to 79999) //NOVA EDIT original: if(1500 to 2000)
set_light(4)
- if(80000 to MAXIMUM_BURN_TIMER) //SKYRAT EDIT original: if(2000 to MAXIMUM_BURN_TIMER)
+ if(80000 to MAXIMUM_BURN_TIMER) //NOVA EDIT original: if(2000 to MAXIMUM_BURN_TIMER)
set_light(6)
/obj/structure/fireplace/process(seconds_per_tick)
diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm
index 57207cf7aba..a38659aaefe 100644
--- a/code/game/objects/structures/fluff.dm
+++ b/code/game/objects/structures/fluff.dm
@@ -74,7 +74,7 @@
density = TRUE
deconstructible = FALSE
layer = EDGED_TURF_LAYER
- plane = GAME_PLANE_UPPER
+
/**
* A variety of statue in disrepair; parts are broken off and a gemstone is missing
*/
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index ca019c05c12..bc56b3838ca 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -42,7 +42,6 @@
buckle_lying = 0
buckle_prevents_pull = TRUE
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
/// The sound the guillotine makes when it successfully cuts off a head
var/drop_sound = 'sound/weapons/guillotine.ogg'
/// The current state of the blade
diff --git a/code/game/objects/structures/gym/weight_machine.dm b/code/game/objects/structures/gym/weight_machine.dm
index a7426e2f465..055c9788c95 100644
--- a/code/game/objects/structures/gym/weight_machine.dm
+++ b/code/game/objects/structures/gym/weight_machine.dm
@@ -152,7 +152,6 @@
end_workout()
return FALSE
var/mutable_appearance/workout = mutable_appearance(icon, "[base_icon_state]-o", ABOVE_MOB_LAYER)
- SET_PLANE_EXPLICIT(workout, GAME_PLANE_UPPER, src)
flick_overlay_view(workout, 0.8 SECONDS)
flick("[base_icon_state]-u", src)
var/mob/living/user = buckled_mobs[1]
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index bd20ef405fc..a3d09340d87 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -24,7 +24,7 @@
var/turf/our_turf = get_turf(src)
if(use_vis_overlay)
alpha = 0
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE_UPPER, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
if(source_projector)
projector = source_projector
LAZYADD(projector.signs, src)
@@ -111,6 +111,20 @@
rad_insulation = RAD_LIGHT_INSULATION
resistance_flags = FIRE_PROOF | FREEZE_PROOF
+/obj/structure/holosign/barrier/atmos/proc/clearview_transparency()
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ alpha = 25
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+ var/turf/our_turf = get_turf(src)
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir)
+
+/obj/structure/holosign/barrier/atmos/proc/reset_transparency()
+ mouse_opacity = initial(mouse_opacity)
+ alpha = initial(alpha)
+ SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
+ var/turf/our_turf = get_turf(src)
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA)
+
/obj/structure/holosign/barrier/atmos/sturdy
name = "sturdy holofirelock"
max_integrity = 150
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index fd4daaeaa18..0f11779ead2 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -1,6 +1,6 @@
#define MEATSPIKE_IRONROD_REQUIREMENT 4
-/obj/structure/kitchenspike_frame//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/kitchenspike_frame//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "meatspike frame"
icon = 'icons/obj/service/kitchen.dmi'
icon_state = "spikeframe"
@@ -64,7 +64,7 @@
return
balloon_alert(user, "[MEATSPIKE_IRONROD_REQUIREMENT] rods needed!")
-/obj/structure/kitchenspike//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/kitchenspike//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "meat spike"
icon = 'icons/obj/service/kitchen.dmi'
icon_state = "spike"
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index 9b7b5590018..ef6ea9d433e 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -224,17 +224,6 @@
use(user, going_up = FALSE)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-/obj/structure/ladder/attack_slime(mob/user, list/modifiers)
- use(user)
- return TRUE
-
-/obj/structure/ladder/attack_slime_secondary(mob/user, list/modifiers)
- . = ..()
- if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
- return
- use(user, going_up = FALSE)
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-
/obj/structure/ladder/attackby(obj/item/item, mob/user, params)
use(user)
return TRUE
diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm
index 4fc14ada0b2..a4cc8a99ed1 100644
--- a/code/game/objects/structures/mannequin.dm
+++ b/code/game/objects/structures/mannequin.dm
@@ -109,11 +109,11 @@
var/datum/sprite_accessory/socks/socks = GLOB.socks_list[socks_name]
if(socks)
. += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER)
- //SKYRAT EDIT ADDITION BEGIN - Underwear and Bra split
+ //NOVA EDIT ADDITION BEGIN - Underwear and Bra split
var/datum/sprite_accessory/bra/bra = GLOB.bra_list[bra_name]
if(bra)
. += mutable_appearance(bra.icon, bra.icon_state, -BODY_LAYER)
- //SKYRAT EDIT END
+ //NOVA EDIT END
for(var/slot_flag in worn_items)
var/obj/item/worn_item = worn_items[slot_flag]
@@ -168,7 +168,7 @@
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
- var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Bra", "Undershirt","Socks")) //SKYRAT EDIT ADDITION - Underwear and Bra split
+ var/choice = tgui_input_list(user, "Underwear, Bra, Undershirt, or Socks?", "Changing", list("Underwear", "Bra", "Undershirt","Socks")) //NOVA EDIT ADDITION - Underwear and Bra split
if(!Adjacent(user))
return
switch(choice)
@@ -184,12 +184,12 @@
var/new_socks = tgui_input_list(user, "Select the mannequin's socks", "Changing", GLOB.socks_list)
if(new_socks)
socks_name = new_socks
- //SKYRAT EDIT ADDITION BEGIN - Underwear and Bra split
+ //NOVA EDIT ADDITION BEGIN - Underwear and Bra split
if("Bra")
var/new_bra = tgui_input_list(user, "Select the mannequin's bra", "Changing", GLOB.bra_list)
if(new_bra)
bra_name = new_bra
- //SKYRAT EDIT END
+ //NOVA EDIT END
update_appearance()
/obj/structure/mannequin/wood
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index f8392159078..51ec52e4584 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -79,7 +79,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28)
/obj/structure/mirror/attack_hand(mob/living/carbon/human/user)
. = ..()
- if(. || !ishuman(user) || broken || !istype(src, /obj/structure/mirror/magic)) // SKYRAT EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken)
+ if(. || !ishuman(user) || broken || !istype(src, /obj/structure/mirror/magic)) // NOVA EDIT CHANGE - MUNDANE MIRRORS DON'T LET YOU CHANGE - ORIGINAL: if(. || !ishuman(user) || broken)
return TRUE
if(!istype(src, /obj/structure/mirror/magic) && !user.can_perform_action(src, FORBID_TELEKINESIS_REACH))
@@ -357,7 +357,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28)
user.set_facial_haircolor(sanitize_hexcolor(new_face_color), update = FALSE)
user.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
user.update_body_parts()
- user.update_mutant_bodyparts(force_update = TRUE) /// SKYRAT EDIT ADDITION - Mirrors are no longer scared of colored ears
+ user.update_mutant_bodyparts(force_update = TRUE) /// NOVA EDIT ADDITION - Mirrors are no longer scared of colored ears
/obj/structure/mirror/magic/attack_hand(mob/living/carbon/human/user)
. = ..()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 1935d6ba417..f31eae55dd8 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -425,10 +425,10 @@ GLOBAL_LIST_EMPTY(crematoriums)
qdel(M)
for(var/obj/O in conts) //conts defined above, ignores crematorium and tray
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(istype(O, /obj/item/goldeneye_key))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(istype(O, /obj/effect/dummy/phased_mob)) //they're not physical, don't burn em.
continue
qdel(O)
diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm
index 54896c2e414..a752faba40c 100644
--- a/code/game/objects/structures/petrified_statue.dm
+++ b/code/game/objects/structures/petrified_statue.dm
@@ -91,8 +91,24 @@
visible_message(span_danger(destruction_message))
qdel(src)
+/obj/structure/statue/petrified/animate_atom_living(mob/living/owner)
+ if(isnull(petrified_mob))
+ return ..()
+ var/mob/living/basic/statue/new_statue = new(drop_location())
+ new_statue.name = "statue of [petrified_mob.name]"
+ if(owner)
+ new_statue.befriend(owner)
+ new_statue.icon = icon
+ new_statue.icon_state = icon_state
+ new_statue.copy_overlays(src, TRUE)
+ new_statue.atom_colours = atom_colours.Copy()
+ petrified_mob.mind?.transfer_to(new_statue)
+ to_chat(new_statue, span_userdanger("You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! [owner ? "Do not harm [owner], your creator" : ""]."))
+ forceMove(new_statue)
+
/mob/proc/petrify(statue_timer)
+ return
/mob/living/carbon/human/petrify(statue_timer, save_brain, colorlist)
if(!isturf(loc))
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 6ac313883df..f4834ecf48a 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -36,7 +36,7 @@
/obj/structure/plasticflaps/proc/gen_overlay()
var/turf/our_turf = get_turf(src)
- SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE_UPPER, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
+ SSvis_overlays.add_vis_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, MUTATE_PLANE(GAME_PLANE, our_turf), dir, add_appearance_flags = RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
/obj/structure/plasticflaps/examine(mob/user)
. = ..()
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index fb69570eea5..3604bd06c63 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -9,7 +9,6 @@
anchored = TRUE
pass_flags_self = LETPASSTHROW|PASSSTRUCTURE
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
/// armor is a little bit less than a grille. max_integrity about half that of a grille.
armor_type = /datum/armor/structure_railing
max_integrity = 25
@@ -164,7 +163,6 @@
icon = 'icons/obj/structures.dmi'
icon_state = "wooden_railing"
item_deconstruct = /obj/item/stack/sheet/mineral/wood
- plane = GAME_PLANE_FOV_HIDDEN
layer = ABOVE_MOB_LAYER
/obj/structure/railing/wooden_fence/Initialize(mapload)
diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm
index ce3d8414398..7b86a17e9dc 100644
--- a/code/game/objects/structures/shower.dm
+++ b/code/game/objects/structures/shower.dm
@@ -120,12 +120,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
return TRUE
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
/obj/machinery/shower/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
if(do_after(user, 3 SECONDS, src))
reagents.remove_any(reagents.total_volume)
balloon_alert(user, "reservoir emptied")
-//SKYRAT EDIT END
+//NOVA EDIT END
/obj/machinery/shower/analyzer_act(mob/living/user, obj/item/tool)
. = ..()
@@ -204,7 +204,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
return
var/mutable_appearance/water_falling = mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER)
water_falling.color = mix_color_from_reagents(reagents.reagent_list)
- SET_PLANE_EXPLICIT(water_falling, GAME_PLANE_UPPER, src)
switch(dir)
if(NORTH)
water_falling.pixel_y += pixel_shift
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index c3ec9b166f9..0bcfb36579a 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -723,7 +723,7 @@
* Surgery Tables
*/
-/obj/structure/table/optable//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/table/optable//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "operating table"
desc = "Used for advanced medical procedures."
icon = 'icons/obj/medical/surgery_table.dmi'
@@ -802,11 +802,11 @@
if(potential_patient.body_position == LYING_DOWN && potential_patient.loc == loc)
patient = potential_patient
- chill_out(patient) // SKYRAT EDIT - Operation Table Numbing
+ chill_out(patient) // NOVA EDIT - Operation Table Numbing
return
- if(!isnull(patient)) // SKYRAT EDIT - Operation Table Numbing
- thaw_them(patient) // SKYRAT EDIT - Operation Table Numbing
+ if(!isnull(patient)) // NOVA EDIT - Operation Table Numbing
+ thaw_them(patient) // NOVA EDIT - Operation Table Numbing
// Find another lying mob as a replacement.
for (var/mob/living/carbon/replacement_patient in loc.contents)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 531df729957..b343cd85f50 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -760,12 +760,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16))
open = !open
if(open)
layer = SIGN_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
set_density(FALSE)
set_opacity(FALSE)
else
layer = WALL_OBJ_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
set_density(TRUE)
if(opaque_closed)
set_opacity(TRUE)
@@ -878,7 +876,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sink/kitchen, (-16))
/obj/structure/curtain/cloth/fancy/mechanical/proc/close()
icon_state = "[icon_type]-closed"
layer = WALL_OBJ_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
set_density(TRUE)
open = FALSE
if(opaque_closed)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 678a9a25314..c10eedeec5e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -108,7 +108,7 @@
/obj/structure/window/singularity_pull(S, current_size)
..()
- if(anchored && current_size >= STAGE_FIVE) //SKYRAT EDIT CHANGE
+ if(anchored && current_size >= STAGE_FIVE) //NOVA EDIT CHANGE
set_anchored(FALSE)
if(current_size >= STAGE_FIVE)
deconstruct(FALSE)
@@ -185,7 +185,7 @@
/obj/structure/window/attack_paw(mob/user, list/modifiers)
return attack_hand(user, modifiers)
-/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime
+/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal
if(!can_be_reached(user))
return
return ..()
diff --git a/code/game/say.dm b/code/game/say.dm
index c0e9d4ff8ef..3799b5ed432 100644
--- a/code/game/say.dm
+++ b/code/game/say.dm
@@ -15,12 +15,12 @@ GLOBAL_LIST_INIT(freqtospan, list(
"[FREQ_SYNDICATE]" = "syndradio",
"[FREQ_UPLINK]" = "syndradio", // this probably shouldnt appear ingame
"[FREQ_CENTCOM]" = "centcomradio",
- "[FREQ_FACTION]" = "suppradio", //SKYRAT EDIT ADDITIION - FACTION
- "[FREQ_CYBERSUN]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_INTERDYNE]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_GUILD]" = "syndradio", //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_TARKON]" = "engradio", //SKYRAT EDIT ADDITION - MAPPING
- "[FREQ_SOLFED]" = "medradio", //SKYRAT EDIT ADDITION - SOLFED
+ "[FREQ_FACTION]" = "suppradio", //NOVA EDIT ADDITIION - FACTION
+ "[FREQ_CYBERSUN]" = "syndradio", //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_INTERDYNE]" = "syndradio", //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_GUILD]" = "syndradio", //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_TARKON]" = "engradio", //NOVA EDIT ADDITION - MAPPING
+ "[FREQ_SOLFED]" = "medradio", //NOVA EDIT ADDITION - SOLFED
"[FREQ_CTF_RED]" = "redteamradio",
"[FREQ_CTF_BLUE]" = "blueteamradio",
"[FREQ_CTF_GREEN]" = "greenteamradio",
diff --git a/code/game/sound.dm b/code/game/sound.dm
index f1b5dd0406f..52127f8ea1f 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -150,8 +150,8 @@
sound_to_use.environment = A.sound_environment
if(use_reverb && sound_to_use.environment != SOUND_ENVIRONMENT_NONE) //We have reverb, reset our echo setting
- sound_to_use.echo[3] = -1300 //Room setting, 0 means normal reverb //SKYRAT EDIT CHANGE
- sound_to_use.echo[4] = -1300 //RoomHF setting, 0 means normal reverb. //SKYRAT EDIT CHANGE
+ sound_to_use.echo[3] = -1300 //Room setting, 0 means normal reverb //NOVA EDIT CHANGE
+ sound_to_use.echo[4] = -1300 //RoomHF setting, 0 means normal reverb. //NOVA EDIT CHANGE
SEND_SOUND(src, sound_to_use)
@@ -183,7 +183,7 @@
/proc/get_sfx(soundin)
if(istext(soundin))
- soundin = get_sfx_skyrat(soundin) //SKYRAT EDIT ADDITION - This overrides the default sound effects too, so use it to modularly change a sound effect output.
+ soundin = get_sfx_skyrat(soundin) //NOVA EDIT ADDITION - This overrides the default sound effects too, so use it to modularly change a sound effect output.
switch(soundin)
if(SFX_SHATTER)
soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg')
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 1253d156a2c..2c2d5712b46 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -76,11 +76,11 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
var/old_lighting_corner_NW = lighting_corner_NW
var/old_directional_opacity = directional_opacity
var/old_dynamic_lumcount = dynamic_lumcount
- //SKYRAT EDIT CHANGE
+ //NOVA EDIT CHANGE
var/obj/effect/abstract/liquid_turf/old_liquids = liquids
if(lgroup)
lgroup.remove_from_group(src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/old_rcd_memory = rcd_memory
var/old_explosion_throw_details = explosion_throw_details
var/old_opacity = opacity
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
else if(ispath(old_type, /turf/open/space))
for(var/turf/open/space/space_tile in RANGE_TURFS(1, src))
space_tile.enable_starlight()
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(old_liquids)
if(new_turf.liquids)
var/liquid_cache = new_turf.liquids //Need to cache and re-set some vars due to the cleaning on Destroy(), and turf references
@@ -201,7 +201,7 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
old_liquids.remove_turf(src)
else
qdel(old_liquids, TRUE)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(old_opacity != opacity && SSticker)
GLOB.cameranet.bareMajorChunkChange(src)
@@ -224,17 +224,17 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
var/datum/gas_mixture/stashed_air = new()
stashed_air.copy_from(air)
var/stashed_state = excited
- var/datum/pollution/stashed_pollution = pollution //SKYRAT EDIT ADDITION
+ var/datum/pollution/stashed_pollution = pollution //NOVA EDIT ADDITION
var/datum/excited_group/stashed_group = excited_group
. = ..() //If path == type this will return us, don't bank on making a new type
if (!.) // changeturf failed or didn't do anything
return
var/turf/open/new_turf = .
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(stashed_pollution)
new_turf.pollution = stashed_pollution
stashed_pollution.handle_overlay()
- //SKYRAT EDIT END
+ //NOVA EDIT END
new_turf.air.copy_from(stashed_air)
new_turf.excited = stashed_state
new_turf.excited_group = stashed_group
@@ -246,10 +246,10 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if(stashed_group.should_display || SSair.display_all_groups)
stashed_group.display_turf(new_turf)
else
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(pollution)
qdel(pollution)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(excited || excited_group)
SSair.remove_from_active(src) //Clean up wall excitement, and refresh excited groups
if(ispath(path, /turf/closed) || ispath(path, /turf/cordon))
diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm
index b8c386ecf10..d68fbe51b3e 100644
--- a/code/game/turfs/closed/indestructible.dm
+++ b/code/game/turfs/closed/indestructible.dm
@@ -67,12 +67,12 @@
desc = null
icon = 'icons/blanks/blank_title.png'
icon_state = ""
- pixel_x = 0 // SKYRAT EDIT - Re-centering the title screen - ORIGINAL: pixel_x = -64
+ pixel_x = 0 // NOVA EDIT - Re-centering the title screen - ORIGINAL: pixel_x = -64
plane = SPLASHSCREEN_PLANE
bullet_bounce_sound = null
INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/turf/closed/indestructible/splashscreen/Initialize(mapload)
. = ..()
SStitle.splash_turf = src
@@ -88,10 +88,10 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
pixel_x = 0
else if(width == 608) // 608x480 is widescreen
pixel_x = -64
- // SKYRAT EDIT START - Wider widescreen
+ // NOVA EDIT START - Wider widescreen
else if(width == 672) // Skyrat's widescreen is slightly wider than /tg/'s, so we need to accomodate that too.
pixel_x = -96
- // SKYRAT EDIT END
+ // NOVA EDIT END
/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value)
. = ..()
@@ -104,7 +104,7 @@ INITIALIZE_IMMEDIATE(/turf/closed/indestructible/splashscreen)
/turf/closed/indestructible/splashscreen/examine()
desc = pick(strings(SPLASH_FILE, "splashes"))
return ..()
-SKYRAT EDIT REMOVAL END */
+NOVA EDIT REMOVAL END */
/turf/closed/indestructible/start_area
name = null
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index 173033c01c9..8da806bcb82 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -4,15 +4,19 @@
/turf/closed/mineral //wall piece
name = "rock"
- icon = MAP_SWITCH('modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi', 'icons/turf/mining.dmi') // SKYRAT EDIT CHANGE
+ icon = MAP_SWITCH('modular_nova/modules/liquids/icons/turf/smoothrocks.dmi', 'icons/turf/mining.dmi') // NOVA EDIT CHANGE
icon_state = "rock"
+ smoothing_groups = SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS
+ canSmoothWith = SMOOTH_GROUP_MINERAL_WALLS
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
baseturfs = /turf/open/misc/asteroid/airless
initial_gas_mix = AIRLESS_ATMOS
opacity = TRUE
density = TRUE
+ // We're a BIG wall, larger then 32x32, so we need to be on the game plane
+ // Otherwise we'll draw under shit in weird ways
+ plane = GAME_PLANE
layer = EDGED_TURF_LAYER
- plane = WALL_PLANE_UPPER
base_icon_state = "smoothrocks"
// This is static
@@ -21,7 +25,7 @@
transform = MAP_SWITCH(TRANSLATE_MATRIX(-4, -4), matrix())
temperature = TCMB
- color = "#677" //SKYRAT EDIT ADDITION
+ color = "#677" //NOVA EDIT ADDITION
var/turf/open/floor/plating/turf_type = /turf/open/misc/asteroid/airless
var/obj/item/stack/ore/mineralType = null
@@ -37,14 +41,15 @@
/turf/closed/mineral/Initialize(mapload)
- var/static/list/smoothing_groups = SMOOTH_GROUP_CLOSED_TURFS + SMOOTH_GROUP_MINERAL_WALLS
- var/static/list/canSmoothWith = SMOOTH_GROUP_MINERAL_WALLS
-
- // The cost of the list() being in the type def is very large for something as common as minerals
- src.smoothing_groups = smoothing_groups
- src.canSmoothWith = canSmoothWith
-
- return ..()
+ . = ..()
+ // Mineral turfs are big, so they need to be on the game plane at a high layer
+ // But they're also turfs, so we need to cut them out from the light mask plane
+ // So we draw them as if they were on the game plane, and then overlay a copy onto
+ // The wall plane (so emissives/light masks behave)
+ // I am so sorry
+ var/static/mutable_appearance/wall_overlay = mutable_appearance('icons/turf/mining.dmi', "rock", appearance_flags = RESET_TRANSFORM)
+ wall_overlay.plane = MUTATE_PLANE(WALL_PLANE, src)
+ overlays += wall_overlay
// Inlined version of the bump click element. way faster this way, the element's nice but it's too much overhead
/turf/closed/mineral/Bumped(atom/movable/bumped_atom)
@@ -231,13 +236,13 @@
var/path = pick(spawn_chance_list)
if(ispath(path, /turf))
var/stored_flags = 0
- var/stored_color = color //SKYRAT EDIT ADDITION
+ var/stored_color = color //NOVA EDIT ADDITION
if(turf_flags & NO_RUINS)
stored_flags |= NO_RUINS
var/turf/T = ChangeTurf(path,null,CHANGETURF_IGNORE_AIR)
T.flags_1 |= stored_flags
- T.color = stored_color //SKYRAT EDIT ADDITION
+ T.color = stored_color //NOVA EDIT ADDITION
if(ismineralturf(T))
var/turf/closed/mineral/M = T
M.turf_type = src.turf_type
@@ -689,7 +694,6 @@
/turf/closed/mineral/gibtonite/proc/explosive_reaction(mob/user = null)
if(stage == GIBTONITE_UNSTRUCK)
activated_overlay = mutable_appearance('icons/turf/smoothrocks_overlays.dmi', "rock_Gibtonite_inactive", ON_EDGED_TURF_LAYER) //shows in gaps between pulses if there are any
- SET_PLANE(activated_overlay, WALL_PLANE_UPPER, src)
add_overlay(activated_overlay)
name = "gibtonite deposit"
desc = "An active gibtonite reserve. Run!"
diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm
index 39e19f45a07..3172e5a9e56 100644
--- a/code/game/turfs/closed/wall/reinf_walls.dm
+++ b/code/game/turfs/closed/wall/reinf_walls.dm
@@ -201,10 +201,10 @@
// We don't react to smoothing changing here because this else exists only to "revert" intact changes
/turf/closed/wall/r_wall/update_icon_state()
if(d_state != INTACT)
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' // SKYRAT EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_states.dmi'
+ icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' // NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_states.dmi'
icon_state = "[base_decon_state]-[d_state]"
else
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi' // SKYRAT EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_wall.dmi'
+ icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi' // NOVA EDIT CHANGE - ORIGINAL: icon = 'icons/turf/walls/reinforced_wall.dmi'
icon_state = "[base_icon_state]-[smoothing_junction]"
return ..()
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index f8d411acee4..2cc6d32bc03 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -1,4 +1,3 @@
-#define MAX_DENT_DECALS 15
#define LEANING_OFFSET 11
/turf/closed/wall
@@ -387,5 +386,4 @@
. = ..()
SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src)
-#undef MAX_DENT_DECALS
#undef LEANING_OFFSET
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 6b83427a7b2..e049c2c393f 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -302,13 +302,13 @@
// Stops sliding
slide_distance = 0
- // SKYRAT EDIT START - Akula species
+ // NOVA EDIT START - Akula species
if(HAS_TRAIT(slipper, TRAIT_SLIPPERY))
if(!(lube & SLIDE_ICE))
lube |= SLIDE
slide_distance = rand(SLIPPERY_MIN, SLIPPERY_MAX)
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/obj/buckled_obj
if(slipper.buckled)
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 69060ac8568..7c7c321f0e2 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -68,7 +68,7 @@
// But that's rare, and I'm ok with that, quartering our light source count is useful
var/mutable_appearance/light_mask = mutable_appearance(mask_icon, mask_state, LIGHTING_MASK_LAYER, src, LIGHTING_PLANE)
light_mask.blend_mode = BLEND_MULTIPLY
- light_mask.color = list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0)
+ light_mask.color = COLOR_MATRIX_INVERT
. += light_mask
/// Refreshes this lava turf's lighting
diff --git a/code/game/turfs/open/sand.dm b/code/game/turfs/open/sand.dm
index c821b9d4516..cfcd4dccfb1 100644
--- a/code/game/turfs/open/sand.dm
+++ b/code/game/turfs/open/sand.dm
@@ -53,6 +53,7 @@
name = "dirt"
desc = "Upon closer examination, it's still dirt."
icon = 'icons/turf/floors.dmi'
+ damaged_dmi = 'icons/turf/damaged.dmi'
icon_state = "sand"
base_icon_state = "sand"
bullet_bounce_sound = null
@@ -66,6 +67,9 @@
. = ..()
icon_state = "sand_damaged"
+/turf/open/misc/sandy_dirt/broken_states()
+ return list("sand_damaged")
+
/turf/open/misc/ironsand
gender = PLURAL
name = "iron sand"
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 2bee06e7c49..8f29bb2e2c2 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -600,7 +600,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
. = ..()
if((acidpwr <= 0) || (acid_volume <= 0))
return FALSE
- if(QDELETED(src)) //skyrat edit: fix createanddestroy
+ if(QDELETED(src)) //NOVA EDIT: fix createanddestroy
return FALSE
AddComponent(/datum/component/acid, acidpwr, acid_volume, GLOB.acid_overlay)
@@ -618,7 +618,7 @@ GLOBAL_LIST_EMPTY(station_turfs)
AddElement(/datum/element/rust)
/turf/handle_fall(mob/faller)
- SEND_SIGNAL(src, COMSIG_TURF_MOB_FALL, faller) //SKYRAT EDIT ADDITION
+ SEND_SIGNAL(src, COMSIG_TURF_MOB_FALL, faller) //NOVA EDIT ADDITION
if(has_gravity(src))
playsound(src, SFX_BODYFALL, 50, TRUE)
faller.drop_all_held_items()
diff --git a/code/game/world.dm b/code/game/world.dm
index 43e01895575..e1a7a8ccab3 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -348,7 +348,7 @@ GLOBAL_VAR(restart_counter)
auxcleanup()
. = ..()
-/* SKYRAT EDIT REMOVAL - OVERRIDEN
+/* NOVA EDIT REMOVAL - OVERRIDEN
/world/proc/update_status()
var/list/features = list()
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index fd3806c6a9e..73a2d9fa693 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -32,7 +32,7 @@
if(GLOB.admin_datums[ckey] || GLOB.deadmins[ckey])
admin = TRUE
- /* SKYRAT EDIT REMOVAL START - We have the panic bunker on 24/7, this just makes our method unusable.
+ /* NOVA EDIT REMOVAL START - We have the panic bunker on 24/7, this just makes our method unusable.
if(!real_bans_only && !admin && CONFIG_GET(flag/panic_bunker) && !CONFIG_GET(flag/panic_bunker_interview))
var/datum/db_query/query_client_in_db = SSdbcore.NewQuery(
"SELECT 1 FROM [format_table_name("player")] WHERE ckey = :ckey",
@@ -52,7 +52,7 @@
return list("reason"="panicbunker", "desc" = "Sorry but the server is currently not accepting connections from never before seen players")
qdel(query_client_in_db)
- */ // SKYRAT EDIT REMOVAL END
+ */ // NOVA EDIT REMOVAL END
//Whitelist
if(!real_bans_only && !C && CONFIG_GET(flag/usewhitelist))
@@ -107,17 +107,17 @@
addclientmessage(ckey,span_adminnotice("Admin [ckey] has been allowed to bypass a matching non-admin ban on [i["key"]] [i["ip"]]-[i["computerid"]]."))
continue
var/expires = "This is a permanent ban."
- var/global_ban = "This is a global ban from all of our servers." //SKYRAT EDIT ADDITION - MULTISERVER
+ var/global_ban = "This is a global ban from all of our servers." //NOVA EDIT ADDITION - MULTISERVER
if(i["expiration_time"])
expires = " The ban is for [DisplayTimeText(text2num(i["duration"]) MINUTES)] and expires on [i["expiration_time"]] (server time)."
- if(!text2num(i["global_ban"])) //SKYRAT EDIT ADDITION - MULTISERVER
- global_ban = "This is a single-server ban, and only applies to [i["server_name"]]." //SKYRAT EDIT ADDITION - MULTISERVER
- var/desc = /* SKYRAT EDIT CHANGE - MULTISERVER */ {"You, or another user of this computer or connection ([i["key"]]) is banned from playing here.
+ if(!text2num(i["global_ban"])) //NOVA EDIT ADDITION - MULTISERVER
+ global_ban = "This is a single-server ban, and only applies to [i["server_name"]]." //NOVA EDIT ADDITION - MULTISERVER
+ var/desc = /* NOVA EDIT CHANGE - MULTISERVER */ {"You, or another user of this computer or connection ([i["key"]]) is banned from playing here.
The ban reason is: [i["reason"]]
This ban (BanID #[i["id"]]) was applied by [i["admin_key"]] on [i["bantime"]] during round ID [i["round_id"]].
[global_ban]
[expires]"}
- log_suspicious_login("Failed Login: [ckey] [computer_id] [address] - Banned (#[i["id"]]) [text2num(i["global_ban"]) ? "globally" : "locally"]") //SKYRAT EDIT CHANGE - MULTISERVER
+ log_suspicious_login("Failed Login: [ckey] [computer_id] [address] - Banned (#[i["id"]]) [text2num(i["global_ban"]) ? "globally" : "locally"]") //NOVA EDIT CHANGE - MULTISERVER
return list("reason"="Banned","desc"="[desc]")
if (admin)
if (GLOB.directory[ckey])
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index a1f083f6139..99aa63325ad 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -31,8 +31,7 @@
dat += " "
if(SSticker.IsRoundInProgress())
dat += "(Game Mode Panel) "
- if(istype(SSticker.mode, /datum/game_mode/dynamic))
- dat += "(Manage Dynamic Rulesets) "
+ dat += "(Manage Dynamic Rulesets) "
dat += {"
Create Object
@@ -147,9 +146,6 @@
user << browse(dat, "window=dyn_mode_options;size=900x650")
/datum/admins/proc/dynamic_ruleset_manager(mob/user)
- if (SSticker.current_state > GAME_STATE_PREGAME && !istype(SSticker.mode, /datum/game_mode/dynamic))
- return // Not running dynamic
-
var/dat = "Dynamic Ruleset Management \
Change these options to forcibly enable or disable dynamic rulesets. \
Disabled rulesets will never run, even if they would otherwise be valid. \
@@ -172,11 +168,10 @@
user << browse(dat, "window=dyn_mode_options;size=900x650")
return
- var/datum/game_mode/dynamic/current_mode = SSticker.mode
var/pop_count = length(GLOB.alive_player_list)
- var/threat_level = current_mode.threat_level
- dat += dynamic_ruleset_category_during_round_display("Latejoin", current_mode.latejoin_rules, pop_count, threat_level)
- dat += dynamic_ruleset_category_during_round_display("Midround", current_mode.midround_rules, pop_count, threat_level)
+ var/threat_level = SSdynamic.threat_level
+ dat += dynamic_ruleset_category_during_round_display("Latejoin", SSdynamic.latejoin_rules, pop_count, threat_level)
+ dat += dynamic_ruleset_category_during_round_display("Midround", SSdynamic.midround_rules, pop_count, threat_level)
user << browse(dat, "window=dyn_mode_options;size=900x650")
/datum/admins/proc/dynamic_ruleset_category_pre_start_display(title, list/rules)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 930861bd5b2..4a497df0d30 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -22,10 +22,10 @@ GLOBAL_PROTECT(admin_verbs_default)
/client/proc/stop_sounds,
/client/proc/tag_datum_mapview,
- /client/proc/addbunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/
- /client/proc/cmd_loud_admin_say, /*admin-only chat except its annoying - SKYRAT EDIT ADDITION - ADMIN*/
- /client/proc/remove_liquid, /*SKYRAT EDIT ADDITION*/
- /client/proc/revokebunkerbypass, /*SKYRAT EDIT ADDITION - PANICBUNKER*/
+ /client/proc/addbunkerbypass, /*NOVA EDIT ADDITION - PANICBUNKER*/
+ /client/proc/cmd_loud_admin_say, /*admin-only chat except its annoying - NOVA EDIT ADDITION - ADMIN*/
+ /client/proc/remove_liquid, /*NOVA EDIT ADDITION*/
+ /client/proc/revokebunkerbypass, /*NOVA EDIT ADDITION - PANICBUNKER*/
)
GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
GLOBAL_PROTECT(admin_verbs_admin)
@@ -102,13 +102,13 @@ GLOBAL_PROTECT(admin_verbs_admin)
/client/proc/cmd_admin_law_panel,
/client/proc/log_viewer_new,
/client/proc/player_ticket_history,
- /datum/admins/proc/toggleaooc, /*Toggle Antag OOC - SKYRAT EDIT ADDITION*/
- /datum/admins/proc/toggledchat, /*SKYRAT EDIT ADDITION*/
- /datum/admins/proc/togglesooc, /*Toggle Security OOC - SKYRAT EDIT ADDITION*/
- /client/proc/admin_open_event_spawners_menu, /*EVENTS - SKYRAT EDIT ADDITION*/
- /client/proc/request_help, /*SKYRAT EDIT ADDITION*/
- /client/proc/view_opfors, /*OPFOR - SKYRAT EDIT ADDITION*/
- /client/proc/lorecaster_story_manager, /* SKYRAT EDIT ADDITION */
+ /datum/admins/proc/toggleaooc, /*Toggle Antag OOC - NOVA EDIT ADDITION*/
+ /datum/admins/proc/toggledchat, /*NOVA EDIT ADDITION*/
+ /datum/admins/proc/togglesooc, /*Toggle Security OOC - NOVA EDIT ADDITION*/
+ /client/proc/admin_open_event_spawners_menu, /*EVENTS - NOVA EDIT ADDITION*/
+ /client/proc/request_help, /*NOVA EDIT ADDITION*/
+ /client/proc/view_opfors, /*OPFOR - NOVA EDIT ADDITION*/
+ /client/proc/lorecaster_story_manager, /* NOVA EDIT ADDITION */
)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel, /client/proc/library_control))
GLOBAL_PROTECT(admin_verbs_ban)
@@ -144,20 +144,20 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/summon_ert,
/client/proc/toggle_nuke,
/client/proc/toggle_random_events,
- /client/proc/admin_change_title_screen, /*SKYRAT EDIT ADDITION*/
- /client/proc/change_title_screen_html, /*SKYRAT EDIT ADDITION*/
- /client/proc/change_title_screen_notice, /*SKYRAT EDIT ADDITION*/
- /client/proc/fix_say, /*SKYRAT EDIT ADDITION*/
- /client/proc/one_click_antag, /*ONE CLICK ANTAG - SKYRAT EDIT ADDITION*/
- /client/proc/request_more_opfor, /*SKYRAT EDIT ADDITION*/
- /client/proc/spawn_liquid, /*SKYRAT EDIT ADDITION*/
- /client/proc/spawn_mob_spawner, /*SKYRAT EDIT ADDITION*/
- /client/proc/spawn_pollution, /*SKYRAT EDIT ADDITION*/
- /client/proc/spawn_sunbeam, /*SKYRAT EDIT ADDITION*/
- /client/proc/intensity_credits_panel, /*SKYRAT EDIT ADDITION*/
- /client/proc/toggle_bsa, /*SKYRAT EDIT ADDITION*/
- /client/proc/try_stop_delam, /*SKYRAT EDIT ADDITION*/
- /client/proc/toggle_delam_suppression, /*SKYRAT EDIT ADDITION*/
+ /client/proc/admin_change_title_screen, /*NOVA EDIT ADDITION*/
+ /client/proc/change_title_screen_html, /*NOVA EDIT ADDITION*/
+ /client/proc/change_title_screen_notice, /*NOVA EDIT ADDITION*/
+ /client/proc/fix_say, /*NOVA EDIT ADDITION*/
+ /client/proc/one_click_antag, /*ONE CLICK ANTAG - NOVA EDIT ADDITION*/
+ /client/proc/request_more_opfor, /*NOVA EDIT ADDITION*/
+ /client/proc/spawn_liquid, /*NOVA EDIT ADDITION*/
+ /client/proc/spawn_mob_spawner, /*NOVA EDIT ADDITION*/
+ /client/proc/spawn_pollution, /*NOVA EDIT ADDITION*/
+ /client/proc/spawn_sunbeam, /*NOVA EDIT ADDITION*/
+ /client/proc/intensity_credits_panel, /*NOVA EDIT ADDITION*/
+ /client/proc/toggle_bsa, /*NOVA EDIT ADDITION*/
+ /client/proc/try_stop_delam, /*NOVA EDIT ADDITION*/
+ /client/proc/toggle_delam_suppression, /*NOVA EDIT ADDITION*/
))
GLOBAL_PROTECT(admin_verbs_fun)
GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character, /datum/admins/proc/beaker_panel))
@@ -195,7 +195,6 @@ GLOBAL_PROTECT(admin_verbs_debug)
return list(
#ifdef TESTING /* Keep these at the top to not make the list look fugly */
/client/proc/check_missing_sprites,
- /client/proc/run_dynamic_simulations,
#endif
/proc/machine_upgrade,
/datum/admins/proc/create_or_modify_area,
@@ -232,6 +231,7 @@ GLOBAL_PROTECT(admin_verbs_debug)
/client/proc/get_dynex_range, /*debug verbs for dynex explosions.*/
/client/proc/jump_to_ruin,
/client/proc/load_circuit,
+ /client/proc/map_export,
/client/proc/map_template_load,
/client/proc/map_template_upload,
/client/proc/modify_goals,
@@ -260,9 +260,9 @@ GLOBAL_PROTECT(admin_verbs_debug)
/client/proc/GeneratePipeSpritesheet,
/client/proc/view_runtimes,
- /client/proc/reload_interactions, /*SKYRAT EDIT ADDITION*/
- /client/proc/test_area_spawner, /*AUTOMAPPER - SKYRAT EDIT ADDITION*/
- /client/proc/toggle_liquid_debug, /*SKYRAT EDIT ADDITION*/
+ /client/proc/reload_interactions, /*NOVA EDIT ADDITION*/
+ /client/proc/test_area_spawner, /*AUTOMAPPER - NOVA EDIT ADDITION*/
+ /client/proc/toggle_liquid_debug, /*NOVA EDIT ADDITION*/
/datum/admins/proc/delay, /*FLUFFY FRONTIER ADDITION - EVENTMAKER QOL*/
/datum/admins/proc/end_round, /*FLUFFY FRONTIER ADDITION - EVENTMAKER QOL*/
@@ -270,13 +270,13 @@ GLOBAL_PROTECT(admin_verbs_debug)
)
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, GLOBAL_PROC_REF(release)))
GLOBAL_PROTECT(admin_verbs_possess)
-/// SKYRAT EDIT BEGIN - Player Rank Manager - ORIGINAL: GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions))
+/// NOVA EDIT BEGIN - Player Rank Manager - ORIGINAL: GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions))
GLOBAL_LIST_INIT(admin_verbs_permissions, list(
/client/proc/edit_admin_permissions,
/client/proc/manage_player_ranks,
/client/proc/migrate_player_ranks,
))
-/// SKYRAT EDIT END
+/// NOVA EDIT END
GLOBAL_PROTECT(admin_verbs_permissions)
GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/poll_panel))
GLOBAL_PROTECT(admin_verbs_poll)
diff --git a/code/modules/admin/antag_panel.dm b/code/modules/admin/antag_panel.dm
index b8f6737b155..78601deeb02 100644
--- a/code/modules/admin/antag_panel.dm
+++ b/code/modules/admin/antag_panel.dm
@@ -72,7 +72,7 @@ GLOBAL_VAR(antag_prototypes)
if (R.emagged)
common_commands += "Unemag slaved cyborgs "
break
- common_commands += "Toggle exploitables override " //SKYRAT EDIT ADDITION -- EXPLOITABLES
+ common_commands += "Toggle exploitables override " //NOVA EDIT ADDITION -- EXPLOITABLES
return common_commands
/datum/mind/proc/get_special_statuses()
diff --git a/code/modules/admin/check_antagonists.dm b/code/modules/admin/check_antagonists.dm
index 770d1b9c637..0069ce27ced 100644
--- a/code/modules/admin/check_antagonists.dm
+++ b/code/modules/admin/check_antagonists.dm
@@ -95,8 +95,7 @@
tgui_alert(usr, "The game hasn't started yet!")
return
var/list/dat = list("Round Status Round Status ")
- if(istype(SSticker.mode, /datum/game_mode/dynamic)) // Currently only used by dynamic. If more start using this, find a better way.
- dat += "Game Mode Panel "
+ dat += "Game Mode Panel "
dat += "Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time)] "
dat += "Emergency shuttle "
if(EMERGENCY_IDLE_OR_RECALLED)
@@ -181,7 +180,7 @@
dat += build_antag_listing()
- dat += SSopposing_force.get_check_antag_listing() //SKYRAT EDIT ADDITION
+ dat += SSopposing_force.get_check_antag_listing() //NOVA EDIT ADDITION
dat += ""
usr << browse(dat.Join(), "window=roundstatus;size=500x500")
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index c23b37e14f1..6eef8e8f7d1 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -28,10 +28,10 @@
human.dna.species.randomize_active_underwear_only(human)
// Needs to be called towards the end to update all the UIs just set above
human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE)
- // SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ // NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
human.dna.species.mutant_bodyparts = human.dna.mutant_bodyparts.Copy()
human.dna.species.body_markings = human.dna.body_markings.Copy()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
// Snowflake for Ethereals
human.updatehealth()
human.updateappearance(mutcolor_update = TRUE)
diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm
index 979e51bd5a1..91d4c5161fa 100644
--- a/code/modules/admin/fun_balloon.dm
+++ b/code/modules/admin/fun_balloon.dm
@@ -88,7 +88,7 @@
bodies += possessable
var/question = "Would you like to be [group_name]?"
- var/list/candidates = poll_candidates_for_mobs(question, ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, bodies, POLL_IGNORE_SHUTTLE_DENIZENS)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mobs(question, check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, poll_time = 10 SECONDS, mobs = bodies, ignore_category = POLL_IGNORE_SHUTTLE_DENIZENS, pic_source = src, role_name_text = "sentience fun balloon")
while(LAZYLEN(candidates) && LAZYLEN(bodies))
var/mob/dead/observer/C = pick_n_take(candidates)
var/mob/living/body = pick_n_take(bodies)
diff --git a/code/modules/admin/greyscale_modify_menu.dm b/code/modules/admin/greyscale_modify_menu.dm
index fd2db6d1ed3..084c5e0272c 100644
--- a/code/modules/admin/greyscale_modify_menu.dm
+++ b/code/modules/admin/greyscale_modify_menu.dm
@@ -305,7 +305,7 @@ This is highly likely to cause massive amounts of lag as every object in the gam
CHECK_TICK
var/image/layer = image(step["step"])
var/image/result = image(step["result"])
- // SKYRAT EDIT BEGIN - Bringing back the GAGS coloring menu
+ // NOVA EDIT BEGIN - Bringing back the GAGS coloring menu
steps += list(
list(
"layer"=icon2html(layer, user, dir=sprite_dir, sourceonly=TRUE),
@@ -313,7 +313,7 @@ This is highly likely to cause massive amounts of lag as every object in the gam
"config_name"=step["config_name"]
)
)
- // SKYRAT EDIT END
+ // NOVA EDIT END
sprite_data["time_spent"] = TICK_DELTA_TO_MS(time_spent)
sprite_data["finished"] = icon2html(finished, user, dir=sprite_dir, sourceonly=TRUE)
diff --git a/code/modules/admin/smites/imaginary_friend_special.dm b/code/modules/admin/smites/imaginary_friend_special.dm
index e95f8c52cb1..5b2bc6ba805 100644
--- a/code/modules/admin/smites/imaginary_friend_special.dm
+++ b/code/modules/admin/smites/imaginary_friend_special.dm
@@ -57,11 +57,12 @@
if (isnull(how_many) || how_many < 1)
return FALSE
- var/list/volunteers = poll_ghost_candidates(
+ var/list/volunteers = SSpolling.poll_ghost_candidates(
question = "Do you want to play as an imaginary friend?",
- jobban_type = ROLE_PAI,
+ check_jobban = ROLE_PAI,
poll_time = 10 SECONDS,
ignore_category = POLL_IGNORE_IMAGINARYFRIEND,
+ role_name_text = "imaginary friend",
)
var/volunteer_count = length(volunteers)
if (volunteer_count == 0)
diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm
index e5b3756cfd4..e6e4c95d376 100644
--- a/code/modules/admin/sql_ban_system.dm
+++ b/code/modules/admin/sql_ban_system.dm
@@ -49,14 +49,14 @@
"player_ckey" = player_ckey,
"must_apply_to_admins" = !!(GLOB.admin_datums[player_ckey] || GLOB.deadmins[player_ckey]),
)
- // SKYRAT EDIT ADDITION BEGIN - MULTISERVER
+ // NOVA EDIT ADDITION BEGIN - MULTISERVER
var/ssqlname = CONFIG_GET(string/serversqlname)
var/server_check
if(CONFIG_GET(flag/respect_global_bans))
server_check = "(server_name = '[ssqlname]' OR global_ban = '1')"
else
server_check = "server_name = '[ssqlname]'"
- // SKYRAT EDIT ADDITION END - MULTISERVER
+ // NOVA EDIT ADDITION END - MULTISERVER
var/sql_roles
if(islist(roles))
var/list/sql_roles_list = list()
@@ -68,7 +68,7 @@
values["role"] = roles
sql_roles = ":role"
- var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
SELECT 1
FROM [format_table_name("ban")]
WHERE
@@ -99,13 +99,13 @@
/proc/is_banned_from_with_details(player_ckey, player_ip, player_cid, role)
if(!player_ckey && !player_ip && !player_cid)
return
- var/ssqlname = CONFIG_GET(string/serversqlname) // SKYRAT EDIT ADDITION BEGIN - MULTISERVER
+ var/ssqlname = CONFIG_GET(string/serversqlname) // NOVA EDIT ADDITION BEGIN - MULTISERVER
var/server_check
if(CONFIG_GET(flag/respect_global_bans))
server_check = "(server_name = '[ssqlname]' OR global_ban = '1')"
else
- server_check = "server_name = '[ssqlname]'" // SKYRAT EDIT ADDITION END - MULTISERVER
- var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ server_check = "server_name = '[ssqlname]'" // NOVA EDIT ADDITION END - MULTISERVER
+ var/datum/db_query/query_check_ban = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
SELECT
id,
bantime,
@@ -176,16 +176,16 @@
var/is_admin = FALSE
if(GLOB.admin_datums[ckey] || GLOB.deadmins[ckey])
is_admin = TRUE
- // SKYRAT EDIT ADDITION BEGIN - MULTISERVER
+ // NOVA EDIT ADDITION BEGIN - MULTISERVER
var/ssqlname = CONFIG_GET(string/serversqlname)
var/server_check
if(CONFIG_GET(flag/respect_global_bans))
server_check = "(server_name = '[ssqlname]' OR global_ban = '1')"
else
server_check = "server_name = '[ssqlname]'"
- // SKYRAT EDIT ADDITION END - MULTISERVER
+ // NOVA EDIT ADDITION END - MULTISERVER
var/datum/db_query/query_build_ban_cache = SSdbcore.NewQuery(
- "SELECT role, applies_to_admins FROM [format_table_name("ban")] WHERE ckey = :ckey AND unbanned_datetime IS NULL AND (expiration_time IS NULL OR expiration_time > NOW()) AND [server_check]", //skyrat edit
+ "SELECT role, applies_to_admins FROM [format_table_name("ban")] WHERE ckey = :ckey AND unbanned_datetime IS NULL AND (expiration_time IS NULL OR expiration_time > NOW()) AND [server_check]", //NOVA EDIT
list("ckey" = ckey)
)
var/query_successful = query_build_ban_cache.warn_execute()
@@ -207,7 +207,7 @@
return ban_cache
-/datum/admins/proc/ban_panel(player_key, player_ip, player_cid, role, duration = 1440, applies_to_admins, reason, edit_id, page, admin_key, global_ban = TRUE) // SKYRAT EDIT CHANGE - MULTISERVER
+/datum/admins/proc/ban_panel(player_key, player_ip, player_cid, role, duration = 1440, applies_to_admins, reason, edit_id, page, admin_key, global_ban = TRUE) // NOVA EDIT CHANGE - MULTISERVER
if (duration == BAN_PANEL_PERMANENT)
duration = null
@@ -316,7 +316,7 @@
"}
if(edit_id)
- output += /* SKYRAT EDIT CHANGE - MULTISERVER */{"Mirror edits to matching bans
+ output += /* NOVA EDIT CHANGE - MULTISERVER */{"Mirror edits to matching bans
@@ -431,8 +431,8 @@
ROLE_SYNDICATE,
ROLE_TRAITOR,
ROLE_WIZARD,
- ROLE_BORER, //SKYRAT EDIT
- ROLE_ASSAULT_OPERATIVE, //SKYRAT EDIT
+ ROLE_BORER, //NOVA EDIT
+ ROLE_ASSAULT_OPERATIVE, //NOVA EDIT
),
"Skyrat Ban Options" = list(
BAN_PACIFICATION,
@@ -445,7 +445,7 @@
BAN_ANTAGONIST,
BAN_OPFOR,
BAN_LOOC, //SKYRAT ADDITION - LOOC muting again
- ),//SKYRAT EDIT ADDITION - EXTRA_BANS
+ ),//NOVA EDIT ADDITION - EXTRA_BANS
)
for(var/department in long_job_lists)
output += "[tgui_fancy ? " " : ""][department] "
@@ -479,7 +479,7 @@
var/player_cid
var/use_last_connection = FALSE
var/applies_to_admins = FALSE
- var/global_ban = FALSE // SKYRAT EDIT ADDITION - MULTISERVER
+ var/global_ban = FALSE // NOVA EDIT ADDITION - MULTISERVER
var/duration
var/interval
var/severity
@@ -490,7 +490,7 @@
var/old_ip
var/old_cid
var/old_applies
- var/old_globalban // SKYRAT EDIT ADDITION - MULTISERVER
+ var/old_globalban // NOVA EDIT ADDITION - MULTISERVER
var/page
var/admin_key
var/list/changes = list()
@@ -521,11 +521,11 @@
error_state += "Use last connection was ticked, but neither IP nor CID was."
if(href_list["applyadmins"])
applies_to_admins = TRUE
- switch(href_list["radioservban"]) // SKYRAT EDIT ADDITION BEGIN - MULTISERVER
+ switch(href_list["radioservban"]) // NOVA EDIT ADDITION BEGIN - MULTISERVER
if("local")
global_ban = FALSE
if("global")
- global_ban = TRUE // SKYRAT EDIT ADDITION END - MULTISERVER
+ global_ban = TRUE // NOVA EDIT ADDITION END - MULTISERVER
switch(href_list["radioduration"])
if("permanent")
duration = null
@@ -548,13 +548,13 @@
old_key = href_list["oldkey"]
old_ip = href_list["oldip"]
old_cid = href_list["oldcid"]
- old_globalban = href_list["old_globalban"] // SKYRAT EDIT ADDITION - MULTISERVER
+ old_globalban = href_list["old_globalban"] // NOVA EDIT ADDITION - MULTISERVER
page = href_list["page"]
admin_key = href_list["adminkey"]
if(player_key != old_key)
changes += list("Key" = "[old_key] to [player_key]")
- if(global_ban != old_globalban) // SKYRAT EDIT ADDITION - MULTISERVER
- changes += list("Ban Location" = "[old_globalban] to [global_ban]") // SKYRAT EDIT ADDITION - MULTISERVER
+ if(global_ban != old_globalban) // NOVA EDIT ADDITION - MULTISERVER
+ changes += list("Ban Location" = "[old_globalban] to [global_ban]") // NOVA EDIT ADDITION - MULTISERVER
if(player_ip != old_ip)
changes += list("IP" = "[old_ip] to [player_ip]")
if(player_cid != old_cid)
@@ -593,11 +593,11 @@
to_chat(usr, span_danger("Ban not [edit_id ? "edited" : "created"] because the following errors were present:\n[error_state.Join("\n")]"), confidential = TRUE)
return
if(edit_id)
- edit_ban(edit_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, global_ban, mirror_edit, old_key, old_ip, old_cid, old_applies, page, admin_key, changes, roles_to_ban[1] == "Server") // SKYRAT EDIT CHANGE - MULTISERVER
+ edit_ban(edit_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, global_ban, mirror_edit, old_key, old_ip, old_cid, old_applies, page, admin_key, changes, roles_to_ban[1] == "Server") // NOVA EDIT CHANGE - MULTISERVER
else
- create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, global_ban, roles_to_ban) // SKYRAT EDIT CHANGE - MULTISERVER
+ create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, global_ban, roles_to_ban) // NOVA EDIT CHANGE - MULTISERVER
-/datum/admins/proc/create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, global_ban, list/roles_to_ban) // SKYRAT EDIT CHANGE - MULTISERVER
+/datum/admins/proc/create_ban(player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, severity, reason, global_ban, list/roles_to_ban) // NOVA EDIT CHANGE - MULTISERVER
if(!check_rights(R_BAN))
return
if(!SSdbcore.Connect())
@@ -661,12 +661,12 @@
var/sql_ban = list()
for(var/role in roles_to_ban)
sql_ban += list(list(
- "server_name" = CONFIG_GET(string/serversqlname),// SKYRAT EDIT CHANGE - MULTISERVER
+ "server_name" = CONFIG_GET(string/serversqlname),// NOVA EDIT CHANGE - MULTISERVER
"server_ip" = world.internet_address || 0,
"server_port" = world.port,
"round_id" = GLOB.round_id,
"role" = role,
- "global_ban" = global_ban, // SKYRAT EDIT CHANGE - MULTISERVER
+ "global_ban" = global_ban, // NOVA EDIT CHANGE - MULTISERVER
"expiration_time" = duration,
"applies_to_admins" = applies_to_admins,
"reason" = reason,
@@ -682,7 +682,7 @@
if(!SSdbcore.MassInsert(format_table_name("ban"), sql_ban, warn = TRUE, special_columns = special_columns))
return
var/target = ban_target_string(player_key, player_ip, player_cid)
- var/msg = "has created a [global_ban ? "global" : "local"] [isnull(duration) ? "permanent" : "temporary [time_message]"] [applies_to_admins ? "admin " : ""][is_server_ban ? "server ban" : "role ban from [roles_to_ban.len] roles"] for [target]." // SKYRAT EDIT CHANGE - MULTISERVER
+ var/msg = "has created a [global_ban ? "global" : "local"] [isnull(duration) ? "permanent" : "temporary [time_message]"] [applies_to_admins ? "admin " : ""][is_server_ban ? "server ban" : "role ban from [roles_to_ban.len] roles"] for [target]." // NOVA EDIT CHANGE - MULTISERVER
log_admin_private("[kn] [msg][is_server_ban ? "" : " Roles: [roles_to_ban.Join(", ")]"] Reason: [reason]")
message_admins("[kna] [msg][is_server_ban ? "" : " Roles: [roles_to_ban.Join("\n")]"]\nReason: [reason]")
if(applies_to_admins)
@@ -695,15 +695,15 @@
notify_all_banned_players(player_ckey, player_ip, player_cid, player_ban_notification, other_ban_notification, is_server_ban, applies_to_admins)
- // SKYRAT EDIT ADDITION BEGIN - EXTRA_BANS
+ // NOVA EDIT ADDITION BEGIN - EXTRA_BANS
if(BAN_PACIFICATION in roles_to_ban)
var/client/C = GLOB.directory[player_ckey]
if(ismob(C.mob))
ADD_TRAIT(C.mob, TRAIT_PACIFISM, ROUNDSTART_TRAIT)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
- //var/datum/admin_help/linked_ahelp_ticket = admin_ticket_log(player_ckey, "[kna] [msg]") // SKYRAT EDIT ORIGINAL
- var/datum/admin_help/linked_ahelp_ticket = admin_ticket_log(player_ckey, "[kna] [msg]", FALSE) // SKYRAT EDIT -- Player ticket viewing
+ //var/datum/admin_help/linked_ahelp_ticket = admin_ticket_log(player_ckey, "[kna] [msg]") // NOVA EDIT ORIGINAL
+ var/datum/admin_help/linked_ahelp_ticket = admin_ticket_log(player_ckey, "[kna] [msg]", FALSE) // NOVA EDIT -- Player ticket viewing
if(is_server_ban && linked_ahelp_ticket)
linked_ahelp_ticket.Resolve()
@@ -938,7 +938,7 @@
notify_all_banned_players(ckey(player_key), player_ip, player_cid, banned_player_message, banned_other_message, kick_banned_players, applies_to_admins)
unban_panel(player_key, admin_key, player_ip, player_cid, page)
-/datum/admins/proc/edit_ban(ban_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, global_ban, mirror_edit, old_key, old_ip, old_cid, old_applies, admin_key, page, list/changes, is_server_ban) // SKYRAT EDIT CHANGE - MULTISERVER
+/datum/admins/proc/edit_ban(ban_id, player_key, ip_check, player_ip, cid_check, player_cid, use_last_connection, applies_to_admins, duration, interval, reason, global_ban, mirror_edit, old_key, old_ip, old_cid, old_applies, admin_key, page, list/changes, is_server_ban) // NOVA EDIT CHANGE - MULTISERVER
if(!check_rights(R_BAN))
return
if(!SSdbcore.Connect())
@@ -999,7 +999,7 @@
"ip" = player_ip || null,
"cid" = player_cid || null,
"change_message" = change_message,
- "global_ban" = global_ban // SKYRAT EDIT ADDITION - MULTISERVER
+ "global_ban" = global_ban // NOVA EDIT ADDITION - MULTISERVER
)
var/where
if(text2num(mirror_edit))
@@ -1018,7 +1018,7 @@
where = "id = :ban_id"
arguments["ban_id"] = ban_id
- var/datum/db_query/query_edit_ban = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_edit_ban = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
UPDATE [format_table_name("ban")]
SET
expiration_time = IF(:duration IS NULL, NULL, bantime + INTERVAL :duration [interval]),
diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm
index 28de1f0aa02..90db2709529 100644
--- a/code/modules/admin/sql_message_system.dm
+++ b/code/modules/admin/sql_message_system.dm
@@ -79,7 +79,7 @@
"target_ckey" = target_ckey,
"admin_ckey" = admin_ckey,
"text" = text,
- "server_name" = CONFIG_GET(string/serversqlname), // SKYRAT EDIT ADDITION - MULTISERVER
+ "server_name" = CONFIG_GET(string/serversqlname), // NOVA EDIT ADDITION - MULTISERVER
"server" = server,
"internet_address" = world.internet_address || "0",
"port" = "[world.port]",
@@ -401,7 +401,7 @@
else
output += "
Filter offline clients "
output += ruler
- var/datum/db_query/query_get_type_messages = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_get_type_messages = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
SELECT
id,
IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey),
@@ -433,10 +433,10 @@
var/text = query_get_type_messages.item[5]
var/timestamp = query_get_type_messages.item[6]
var/server = query_get_type_messages.item[7]
- var/editor_key = query_get_type_messages.item[9] // SKYRAT EDIT CHANGE BEGIN - MULTISERVER
+ var/editor_key = query_get_type_messages.item[9] // NOVA EDIT CHANGE BEGIN - MULTISERVER
var/expire_timestamp = query_get_type_messages.item[10]
var/playtime = query_get_type_messages.item[11]
- var/round_id = query_get_type_messages.item[12] // SKYRAT EDIT CHANGE END - MULTISERVER
+ var/round_id = query_get_type_messages.item[12] // NOVA EDIT CHANGE END - MULTISERVER
output += "
"
if(type == "watchlist entry")
output += "[t_key] | "
@@ -455,7 +455,7 @@
qdel(query_get_type_messages)
if(target_ckey)
var/target_key
- var/datum/db_query/query_get_messages = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_get_messages = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
SELECT
type,
secret,
@@ -497,13 +497,13 @@
var/text = query_get_messages.item[5]
var/timestamp = query_get_messages.item[6]
var/server = query_get_messages.item[7]
- var/editor_key = query_get_messages.item[9] // SKYRAT EDIT CHANGE BEGIN - MULTISERVER
+ var/editor_key = query_get_messages.item[9] // NOVA EDIT CHANGE BEGIN - MULTISERVER
var/age = text2num(query_get_messages.item[10])
target_key = query_get_messages.item[11]
var/expire_timestamp = query_get_messages.item[12]
var/severity = query_get_messages.item[13]
var/playtime = query_get_messages.item[14]
- var/round_id = query_get_messages.item[15] // SKYRAT EDIT CHANGE END - MULTISERVER
+ var/round_id = query_get_messages.item[15] // NOVA EDIT CHANGE END - MULTISERVER
var/alphatext = ""
var/nsd = CONFIG_GET(number/note_stale_days)
var/nfd = CONFIG_GET(number/note_fresh_days)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 311c0ce14be..107add17d9a 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -48,7 +48,7 @@
return
cmd_show_exp_panel(M.client)
-// SKYRAT EDIT BEGIN -- ONE CLICK ANTAG
+// NOVA EDIT BEGIN -- ONE CLICK ANTAG
else if(href_list["makeAntag"])
message_admins("[key_name_admin(usr)] is attempting to make [href_list["makeAntag"]]")
@@ -56,7 +56,7 @@
if(!check_rights(R_ADMIN))
return
- if (!SSticker.mode)
+ if(!SSticker.HasRoundStarted())
to_chat(usr, "Not until the round starts! ", confidential = TRUE)
return
@@ -78,10 +78,12 @@
opt = input("How Many", ROLE_OPERATIVE, 3) as num|null
if(ROLE_BROTHER)
opt = input("How Many", ROLE_BROTHER, 2) as num|null
+ if(ROLE_DRIFTING_CONTRACTOR)
+ opt = input("How Many", ROLE_DRIFTING_CONTRACTOR, 2) as num|null
if(src.make_antag(href_list["makeAntag"], opt))
message_admins("[key_name_admin(usr)] created '[href_list["makeAntag"]]' with a parameter of '[opt]'.")
else message_admins("[key_name_admin(usr)] FAILED to create '[href_list["makeAntag"]]' with a parameter of '[opt]'.")
-// SKYRAT EDIT END -- ONE CLICK ANTAG
+// NOVA EDIT END -- ONE CLICK ANTAG
else if(href_list["editrightsbrowser"])
edit_admin_permissions(0)
@@ -104,7 +106,7 @@
else if(href_list["gamemode_panel"])
if(!check_rights(R_ADMIN))
return
- SSticker.mode.admin_panel()
+ SSdynamic.admin_panel()
else if(href_list["call_shuttle"])
if(!check_rights(R_ADMIN))
@@ -435,7 +437,7 @@
else if(href_list["f_dynamic_roundstart"])
if(!check_rights(R_ADMIN))
return
- if(SSticker?.mode)
+ if(SSticker.HasRoundStarted())
return tgui_alert(usr, "The game has already started.")
var/roundstart_rules = list()
for (var/rule in subtypesof(/datum/dynamic_ruleset/roundstart))
@@ -502,7 +504,7 @@
if(!check_rights(R_ADMIN))
return
- if(SSticker?.mode)
+ if(SSticker.HasRoundStarted())
return tgui_alert(usr, "The game has already started.")
dynamic_mode_options(usr)
@@ -536,7 +538,7 @@
if(!check_rights(R_ADMIN))
return
- if(SSticker?.mode)
+ if(SSticker.HasRoundStarted())
return tgui_alert(usr, "The game has already started.")
var/new_value = input(usr, "Enter the forced threat level for dynamic mode.", "Forced threat level") as num
@@ -594,13 +596,13 @@
if(tgui_alert(usr, "Send [key_name(M)] to Prison?", "Message", list("Yes", "No")) != "Yes")
return
- /// SKYRAT EDIT START - Immersion-friendly Admin Prison
+ /// NOVA EDIT START - Immersion-friendly Admin Prison
var/datum/effect_system/spark_spread/quantum/sparks = new
sparks.set_up(10, 1, M)
sparks.attach(M.loc)
sparks.start()
M.forceMove(pick(GLOB.prisonwarp))
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
to_chat(M, span_adminnotice("You have been sent to Prison!"), confidential = TRUE)
@@ -1841,8 +1843,7 @@
if(!check_rights(R_ADMIN))
return
- var/datum/game_mode/dynamic/dynamic = SSticker.mode
- if(!dynamic.picking_specific_rule(/datum/dynamic_ruleset/midround/from_living/opfor_candidate, forced = TRUE, ignore_cost = TRUE))
+ if(!SSdynamic.picking_specific_rule(/datum/dynamic_ruleset/midround/from_living/opfor_candidate, forced = TRUE, ignore_cost = TRUE))
message_admins("An OPFOR candidate could not be selected.")
// SKYRAT ADDITION END
diff --git a/code/modules/admin/verbs/adminevents.dm b/code/modules/admin/verbs/adminevents.dm
index 26219353cce..a22bae5fd97 100644
--- a/code/modules/admin/verbs/adminevents.dm
+++ b/code/modules/admin/verbs/adminevents.dm
@@ -227,7 +227,7 @@
priority_announce(
text = "Emergency Shuttle uplink failure, shuttle disabled until further notice.",
title = "Uplink Failure",
- sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
+ sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
sender_override = "Emergency Shuttle Uplink Alert",
color_override = "grey",
)
@@ -259,7 +259,7 @@
priority_announce(
text = "Emergency Shuttle uplink reestablished, shuttle enabled.",
title = "Uplink Restored",
- sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
+ sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
sender_override = "Emergency Shuttle Uplink Alert",
color_override = "green",
)
diff --git a/code/modules/admin/verbs/admingame.dm b/code/modules/admin/verbs/admingame.dm
index a3124c6ee41..dec27b64ebe 100644
--- a/code/modules/admin/verbs/admingame.dm
+++ b/code/modules/admin/verbs/admingame.dm
@@ -32,7 +32,7 @@
if(M.client)
body += " \[First Seen: [M.client.player_join_date]\]\[Byond account registered on: [M.client.account_join_date]\]"
- // SKYRAT EDIT ADDITION START - Player Ranks
+ // NOVA EDIT ADDITION START - Player Ranks
var/list/player_ranks = list()
if(SSplayer_ranks.is_donator(M.client, admin_bypass = FALSE))
@@ -45,7 +45,7 @@
player_ranks += "Veteran"
body += "Player Ranks: [length(player_ranks) ? player_ranks.Join(", ") : "None"]"
- // SKYRAT EDIT END
+ // NOVA EDIT END
body += "CentCom Galactic Ban DB: "
if(CONFIG_GET(string/centcom_ban_db))
body += "Search "
@@ -307,7 +307,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!record_found && (new_character.mind.assigned_role.job_flags & JOB_CREW_MEMBER))
//Power to the user!
if(tgui_alert(new_character,"Warning: No data core entry detected. Would you like to announce the arrival of this character by adding them to various databases, such as medical records?",,list("No","Yes")) == "Yes")
- GLOB.manifest.inject(new_character, src) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: GLOB.manifest.inject(new_character)
+ GLOB.manifest.inject(new_character, src) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: GLOB.manifest.inject(new_character)
if(tgui_alert(new_character,"Would you like an active AI to announce this character?",,list("No","Yes")) == "Yes")
announce_arrival(new_character, new_character.mind.assigned_role.title)
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index c73f3669f5a..d949ff83c0a 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -103,18 +103,18 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
var/datum/admin_help/AH = I
if(AH.initiator)
var/obj/effect/statclick/updated = AH.statclick.update()
- L[++L.len] = list("[AH.handler ? "H-[AH.handler]" : ""]#[AH.id]. [AH.initiator_key_name]:", "[updated.name]", REF(AH)) //SKYRAT EDIT CHANGE - ADMIN
+ L[++L.len] = list("[AH.handler ? "H-[AH.handler]" : ""]#[AH.id]. [AH.initiator_key_name]:", "[updated.name]", REF(AH)) //NOVA EDIT CHANGE - ADMIN
else
++num_disconnected
if(num_disconnected)
L[++L.len] = list("Disconnected:", "[astatclick.update("[num_disconnected]")]", null, REF(astatclick))
L[++L.len] = list("Closed Tickets:", "[cstatclick.update("[closed_tickets.len]")]", null, REF(cstatclick))
L[++L.len] = list("Resolved Tickets:", "[rstatclick.update("[resolved_tickets.len]")]", null, REF(rstatclick))
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(LAZYLEN(SSopposing_force.submitted_applications))
for(var/datum/opposing_force/opposing_force as anything in SSopposing_force.submitted_applications)
L[++L.len] = list("[opposing_force.handling_admin ? "H-[opposing_force.handling_admin]. " : ""]OPFOR:", "[opposing_force.stat_button.update(" [opposing_force.ckey] ")]", null, REF(opposing_force.stat_button))
- //SKYRAT EDIT END
+ //NOVA EDIT END
return L
//Reassociate still open ticket if one exists
@@ -214,24 +214,24 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
* * msg_raw - The first message of this admin_help: used for the initial title of the ticket
* * is_bwoink - Boolean operator, TRUE if this ticket was started by an admin PM
*/
-/datum/admin_help/New(msg_raw, client/C, is_bwoink, client/admin_C, urgent = FALSE) //SKYRAT EDIT CHANGE
+/datum/admin_help/New(msg_raw, client/C, is_bwoink, client/admin_C, urgent = FALSE) //NOVA EDIT CHANGE
//clean the input msg
var/msg = sanitize(copytext_char(msg_raw, 1, MAX_MESSAGE_LEN))
if(!msg || !C || !C.mob)
qdel(src)
return
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(admin_C && is_bwoink)
handler = "[admin_C.ckey]"
- //SKYRAT EDIT END
+ //NOVA EDIT END
id = ++ticket_counter
opened_at = world.time
name = copytext_char(msg, 1, 100)
- full_text = msg //SKYRAT EDIT ADDITION - Adminhelps into mentorhelps converting.
+ full_text = msg //NOVA EDIT ADDITION - Adminhelps into mentorhelps converting.
initiator = C
initiator_ckey = initiator.ckey
@@ -248,7 +248,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
ticket_interactions = list()
player_interactions = list()
- addtimer(CALLBACK(src, PROC_REF(add_to_ping_ss), 2 MINUTES)) //SKYRAT EDIT ADDITION - Ticket Ping | this is not responsible for the notification itself, but only for adding the ticket to the list of those to notify.
+ addtimer(CALLBACK(src, PROC_REF(add_to_ping_ss), 2 MINUTES)) //NOVA EDIT ADDITION - Ticket Ping | this is not responsible for the notification itself, but only for adding the ticket to the list of those to notify.
if(is_bwoink)
AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()] ", player_message = "[key_name_admin(usr, include_name = FALSE)] PM'd [LinkedReplyName()] ")
message_admins("Ticket [TicketHref("#[id]")] created ")
@@ -494,12 +494,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/datum/admin_help/proc/Close(key_name = key_name_admin(usr), silent = FALSE)
if(state != AHELP_ACTIVE)
return
- //SKYRAT EDIT ADDITION BEGIN - ADMIN
+ //NOVA EDIT ADDITION BEGIN - ADMIN
if(handler && handler != usr.ckey)
var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No"))
if(!response || response == "No")
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
RemoveActive()
state = AHELP_CLOSED
GLOB.ahelp_tickets.ListInsert(src)
@@ -515,12 +515,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/datum/admin_help/proc/Resolve(key_name = key_name_admin(usr), silent = FALSE)
if(state != AHELP_ACTIVE)
return
- //SKYRAT EDIT ADDITION BEGIN - ADMIN
+ //NOVA EDIT ADDITION BEGIN - ADMIN
if(handler && handler != usr.ckey)
var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No"))
if(!response || response == "No")
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
RemoveActive()
state = AHELP_RESOLVED
GLOB.ahelp_tickets.ListInsert(src)
@@ -540,12 +540,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/datum/admin_help/proc/Reject(key_name = key_name_admin(usr))
if(state != AHELP_ACTIVE)
return
- //SKYRAT EDIT ADDITION BEGIN - ADMIN
+ //NOVA EDIT ADDITION BEGIN - ADMIN
if(handler && handler != usr.ckey)
var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No"))
if(!response || response == "No")
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(initiator)
initiator.giveadminhelpverb()
@@ -567,12 +567,12 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/datum/admin_help/proc/ICIssue(key_name = key_name_admin(usr))
if(state != AHELP_ACTIVE)
return
- //SKYRAT EDIT ADDITION BEGIN - ADMIN
+ //NOVA EDIT ADDITION BEGIN - ADMIN
if(handler && handler != usr.ckey)
var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No"))
if(!response || response == "No")
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
var/msg = "- AdminHelp marked as IC issue! - "
msg += "Your issue has been determined by an administrator to be an in character issue and does NOT require administrator intervention at this time. For further resolution you should pursue options that are in character. "
@@ -672,10 +672,10 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
if("reject")
Reject()
if("reply")
- // SKYRAT EDIT START - ADMIN HANDLE
+ // NOVA EDIT START - ADMIN HANDLE
if(handle_issue())
usr?.client.cmd_ahelp_reply(initiator)
- // SKYRAT EDIT END
+ // NOVA EDIT END
if("icissue")
ICIssue()
if("close")
@@ -684,7 +684,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
Resolve()
if("reopen")
Reopen()
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if("handle_issue")
handle_issue()
if("pingmute")
@@ -695,7 +695,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
log_admin_private(msg)
if("convert")
convert_to_mentorhelp()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/datum/admin_help/proc/player_ticket_panel()
var/list/dat = list("Player Ticket ")
@@ -834,7 +834,7 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new)
user_client.current_ticket.MessageNoRecipient(message, urgent)
return
- new /datum/admin_help(message, user_client, FALSE, null, urgent) // SKYRAT EDIT - Handling tickets - ORIGINAL: new /datum/admin_help(message, user_client, FALSE, urgent)
+ new /datum/admin_help(message, user_client, FALSE, null, urgent) // NOVA EDIT - Handling tickets - ORIGINAL: new /datum/admin_help(message, user_client, FALSE, urgent)
/client/verb/no_tgui_adminhelp(message as message)
set name = "NoTguiAdminhelp"
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 529cf4d8a77..ef1fb7b2aa3 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -395,7 +395,7 @@
var/already_logged = FALSE
// Full boinks will always be done to players, so we are not guarenteed that they won't have a ticket
if(!recipient_ticket)
- new /datum/admin_help(send_message, recipient, TRUE, src) // SKYRAT EDIT - Handling tickets - ORIGINAL: new /datum/admin_help(send_message, recipient, TRUE)
+ new /datum/admin_help(send_message, recipient, TRUE, src) // NOVA EDIT - Handling tickets - ORIGINAL: new /datum/admin_help(send_message, recipient, TRUE)
already_logged = TRUE
// This action mutates our existing cached ticket information, so we recache
ticket = current_ticket
@@ -435,11 +435,11 @@
SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg'))
return TRUE
- //SKYRAT EDIT ADDITION BEGIN - ADMIN
+ //NOVA EDIT ADDITION BEGIN - ADMIN
// Basically, if we realized that we shouldn't've been handling the ticket, let's bail. Otherwise, we just change who's handling it.
if(ticket && our_holder && !ticket.handle_issue())
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
// Ok if we're here, either this message is for an admin, or someone somehow figured out how to send a new message as a player
// First case well, first
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index ad7a89a228d..f4cc840ced1 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -24,7 +24,7 @@
mob.log_talk(msg, LOG_ASAY)
msg = keywords_lookup(msg)
- send_asay_to_other_server(ckey, msg) //SKYRAT EDIT ADDITION
+ send_asay_to_other_server(ckey, msg) //NOVA EDIT ADDITION
var/asay_color = prefs.read_preference(/datum/preference/color/asay_color)
var/custom_asay_color = (CONFIG_GET(flag/allow_admin_asaycolor) && asay_color) ? "" : ""
msg = "[span_adminsay("[span_prefix("ADMIN:")] [key_name(usr, 1)] [ADMIN_FLW(mob)]: [custom_asay_color][msg]")] [custom_asay_color ? " ":null]"
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 15bb756cb3d..7d6ab6e2548 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -167,9 +167,9 @@
id.update_icon()
if(worn)
- if(istype(worn, /obj/item/modular_computer/pda))
- var/obj/item/modular_computer/pda/PDA = worn
- PDA.InsertID(id, H)
+ if(istype(worn, /obj/item/modular_computer))
+ var/obj/item/modular_computer/worn_computer = worn
+ worn_computer.InsertID(id, H)
else if(istype(worn, /obj/item/storage/wallet))
var/obj/item/storage/wallet/W = worn
diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm
index 7db4c7cccc5..8823acb7ef7 100644
--- a/code/modules/admin/verbs/ert.dm
+++ b/code/modules/admin/verbs/ert.dm
@@ -89,7 +89,7 @@
"leader_experience" = list("desc" = "Pick an experienced leader", "type" = "boolean", "value" = "[(ertemplate.leader_experience ? "Yes" : "No")]"),
"random_names" = list("desc" = "Randomize names", "type" = "boolean", "value" = "[(ertemplate.random_names ? "Yes" : "No")]"),
"spawn_admin" = list("desc" = "Spawn yourself as briefing officer", "type" = "boolean", "value" = "[(ertemplate.spawn_admin ? "Yes" : "No")]"),
- "notify_players" = list("desc" = "Notify players that you have sent an ERT", "type" = "boolean", "value" = "[(ertemplate.notify_players ? "Yes" : "No")]"), //SKYRAT EDIT ADDITION
+ "notify_players" = list("desc" = "Notify players that you have sent an ERT", "type" = "boolean", "value" = "[(ertemplate.notify_players ? "Yes" : "No")]"), //NOVA EDIT ADDITION
"use_custom_shuttle" = list("desc" = "Use the ERT's custom shuttle (if it has one)", "type" = "boolean", "value" = "[(ertemplate.use_custom_shuttle ? "Yes" : "No")]"),
)
)
@@ -117,13 +117,13 @@
ertemplate.leader_experience = prefs["leader_experience"]["value"] == "Yes"
ertemplate.random_names = prefs["random_names"]["value"] == "Yes"
ertemplate.spawn_admin = prefs["spawn_admin"]["value"] == "Yes"
- ertemplate.notify_players = prefs["notify_players"]["value"] == "Yes" //SKYRAT EDIT ADDITION
+ ertemplate.notify_players = prefs["notify_players"]["value"] == "Yes" //NOVA EDIT ADDITION
ertemplate.use_custom_shuttle = prefs["use_custom_shuttle"]["value"] == "Yes"
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
var/index = 0
- var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", "deathsquad")
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", pic_source = /obj/item/card/id/advanced/centcom/ert, role_name_text = "emergency response team")
var/teamSpawned = FALSE
// This list will take priority over spawnpoints if not empty
@@ -253,10 +253,10 @@
if (teamSpawned)
message_admins("[ertemplate.polldesc] has spawned with the mission: [ertemplate.mission]")
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(ertemplate.notify_players)
priority_announce("Central command has responded to your request for a CODE [uppertext(ertemplate.code)] Emergency Response Team and have confirmed one to be enroute.", "ERT Request", ANNOUNCER_ERTYES)
- //SKYRAT EDIT END
+ //NOVA EDIT END
//Open the Armory doors
if(ertemplate.opendoors)
for(var/obj/machinery/door/poddoor/ert/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor/ert))
diff --git a/code/modules/admin/verbs/fix_air.dm b/code/modules/admin/verbs/fix_air.dm
index fb4a342c3d4..f122f0d0746 100644
--- a/code/modules/admin/verbs/fix_air.dm
+++ b/code/modules/admin/verbs/fix_air.dm
@@ -19,5 +19,5 @@
F.copy_air(GM)
F.update_visuals()
- if(F.pollution) //SKYRAT EDIT ADDITION
+ if(F.pollution) //NOVA EDIT ADDITION
qdel(F.pollution)
diff --git a/code/modules/admin/verbs/highlander_datum.dm b/code/modules/admin/verbs/highlander_datum.dm
index b32ac2d962d..ad8f75bca82 100644
--- a/code/modules/admin/verbs/highlander_datum.dm
+++ b/code/modules/admin/verbs/highlander_datum.dm
@@ -38,7 +38,7 @@ GLOBAL_DATUM(highlander_controller, /datum/highlander_controller)
robot.make_scottish()
addtimer(CALLBACK(SSshuttle.emergency, TYPE_PROC_REF(/obj/docking_port/mobile/emergency, request), null, 1), 50)
-/datum/highlander_controller/Destroy(force, ...)
+/datum/highlander_controller/Destroy(force)
. = ..()
UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED)
diff --git a/code/modules/admin/verbs/lua/lua_editor.dm b/code/modules/admin/verbs/lua/lua_editor.dm
index ea052509779..03f6e07cac0 100644
--- a/code/modules/admin/verbs/lua/lua_editor.dm
+++ b/code/modules/admin/verbs/lua/lua_editor.dm
@@ -29,7 +29,7 @@
ui.set_autoupdate(FALSE)
ui.open()
-/datum/lua_editor/Destroy(force, ...)
+/datum/lua_editor/Destroy(force)
. = ..()
if(current_state)
LAZYREMOVEASSOC(SSlua.editors, text_ref(current_state), src)
diff --git a/code/modules/admin/verbs/map_export.dm b/code/modules/admin/verbs/map_export.dm
new file mode 100644
index 00000000000..88e80414235
--- /dev/null
+++ b/code/modules/admin/verbs/map_export.dm
@@ -0,0 +1,298 @@
+/client/proc/map_export()
+ set category = "Debug"
+ set name = "Map Export"
+ set desc = "Select a part of the map by coordinates and download it."
+
+ var/z_level = tgui_input_number(usr, "Export Which Z-Level?", "Map Exporter", usr.z || 2)
+ var/start_x = tgui_input_number(usr, "Start X?", "Map Exporter", usr.x || 1, world.maxx, 1)
+ var/start_y = tgui_input_number(usr, "Start Y?", "Map Exporter", usr.y || 1, world.maxy, 1)
+ var/end_x = tgui_input_number(usr, "End X?", "Map Exporter", usr.x || 1, world.maxx, 1)
+ var/end_y = tgui_input_number(usr, "End Y?", "Map Exporter", usr.y || 1, world.maxy, 1)
+ var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss")
+ var/file_name = sanitize_filename(tgui_input_text(usr, "Filename?", "Map Exporter", "exported_map_[date]"))
+ var/confirm = tgui_alert(usr, "Are you sure you want to do this? This will cause extreme lag!", "Map Exporter", list("Yes", "No"))
+
+ if(confirm != "Yes" || !check_rights(R_DEBUG))
+ return
+
+ var/map_text = write_map(start_x, start_y, z_level, end_x, end_y, z_level)
+ log_admin("Build Mode: [key_name(usr)] is exporting the map area from ([start_x], [start_y], [z_level]) through ([end_x], [end_y], [z_level])")
+ send_exported_map(usr, file_name, map_text)
+
+/**
+ * A procedure for saving DMM text to a file and then sending it to the user.
+ * Arguments:
+ * * user - a user which get map
+ * * name - name of file + .dmm
+ * * map - text with DMM format
+ */
+/proc/send_exported_map(user, name, map)
+ var/file_path = "data/[name].dmm"
+ rustg_file_write(map, file_path)
+ DIRECT_OUTPUT(user, ftp(file_path, "[name].dmm"))
+ var/file_to_delete = file(file_path)
+ fdel(file_to_delete)
+
+/proc/sanitize_filename(text)
+ return hashtag_newlines_and_tabs(text, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
+
+/proc/hashtag_newlines_and_tabs(text, list/repl_chars = list("\n"="#","\t"="#"))
+ for(var/char in repl_chars)
+ var/index = findtext(text, char)
+ while(index)
+ text = copytext(text, 1, index) + repl_chars[char] + copytext(text, index + length(char))
+ index = findtext(text, char, index + length(char))
+ return text
+
+/**
+ * A procedure for saving non-standard properties of an object.
+ * For example, saving ore into a silo, and further spavn by coordinates of metal stacks objects
+ */
+/obj/proc/on_object_saved()
+ return null
+
+// Save resources in silo
+/obj/machinery/ore_silo/on_object_saved()
+ var/data
+ var/datum/component/material_container/material_holder = GetComponent(/datum/component/material_container)
+ for(var/each in material_holder.materials)
+ var/amount = material_holder.materials[each] / 100
+ var/datum/material/material_datum = each
+ while(amount > 0)
+ var/amount_in_stack = max(1, min(50, amount))
+ amount -= amount_in_stack
+ data += "[data ? ",\n" : ""][material_datum.sheet_type]{\n\tamount = [amount_in_stack]\n\t}"
+ return data
+
+/**Map exporter
+* Inputting a list of turfs into convert_map_to_tgm() will output a string
+* with the turfs and their objects / areas on said turf into the TGM mapping format
+* for .dmm files. This file can then be opened in the map editor or imported
+* back into the game.
+* ============================
+* This has been made semi-modular so you should be able to use these functions
+* elsewhere in code if you ever need to get a file in the .dmm format
+**/
+/atom/proc/get_save_vars()
+ return list(
+ NAMEOF(src, color),
+ NAMEOF(src, dir),
+ NAMEOF(src, icon),
+ NAMEOF(src, icon_state),
+ NAMEOF(src, name),
+ NAMEOF(src, pixel_x),
+ NAMEOF(src, pixel_y),
+ )
+
+/obj/get_save_vars()
+ return ..() + NAMEOF(src, req_access)
+
+/obj/item/stack/get_save_vars()
+ return ..() + NAMEOF(src, amount)
+
+/obj/docking_port/get_save_vars()
+ return ..() + list(
+ NAMEOF(src, dheight),
+ NAMEOF(src, dwidth),
+ NAMEOF(src, height),
+ NAMEOF(src, shuttle_id),
+ NAMEOF(src, width),
+ )
+/obj/docking_port/stationary/get_save_vars()
+ return ..() + NAMEOF(src, roundstart_template)
+
+/obj/machinery/atmospherics/get_save_vars()
+ return ..() + list(
+ NAMEOF(src, piping_layer),
+ NAMEOF(src, pipe_color),
+ )
+
+/obj/item/pipe/get_save_vars()
+ return ..() + list(
+ NAMEOF(src, piping_layer),
+ NAMEOF(src, pipe_color),
+ )
+
+GLOBAL_LIST_INIT(save_file_chars, list(
+ "a","b","c","d","e",
+ "f","g","h","i","j",
+ "k","l","m","n","o",
+ "p","q","r","s","t",
+ "u","v","w","x","y",
+ "z","A","B","C","D",
+ "E","F","G","H","I",
+ "J","K","L","M","N",
+ "O","P","Q","R","S",
+ "T","U","V","W","X",
+ "Y","Z",
+))
+
+/proc/to_list_string(list/future_string)
+ . = "list("
+ var/first_entry = TRUE
+ for(var/item in future_string)
+ if(!first_entry)
+ . += ", "
+ if(future_string[item])
+ . += hashtag_newlines_and_tabs("[item] = [future_string[item]]", list("{"="", "}"="", "\""="", ";"="", ","=""))
+ else
+ . += hashtag_newlines_and_tabs("[item]", list("{"="", "}"="", "\""="", ";"="", ","=""))
+ first_entry = FALSE
+ . += ")"
+
+/**
+ *Procedure for converting a coordinate-selected part of the map into text for the .dmi format
+ */
+/proc/write_map(
+ minx,
+ miny,
+ minz,
+ maxx,
+ maxy,
+ maxz,
+ save_flag = ALL,
+ shuttle_area_flag = SAVE_SHUTTLEAREA_DONTCARE,
+ list/obj_blacklist = list(),
+)
+
+ var/width = maxx - minx
+ var/height = maxy - miny
+ var/depth = maxz - minz
+
+ //Step 0: Calculate the amount of letters we need (26 ^ n > turf count)
+ var/turfs_needed = width * height
+ var/layers = FLOOR(log(GLOB.save_file_chars.len, turfs_needed) + 0.999,1)
+
+ //Step 1: Run through the area and generate file data
+ var/list/header_chars = list() //The characters of the header
+ var/list/header_dat = list() //The data of the header, lines up with chars
+ var/header = "" //The actual header in text
+ var/contents = "" //The contents in text (bit at the end)
+ var/index = 1
+ for(var/z in 0 to depth)
+ for(var/x in 0 to width)
+ contents += "\n([x + 1],1,[z + 1]) = {\"\n"
+ for(var/y in height to 0 step -1)
+ CHECK_TICK
+ //====Get turfs Data====
+ var/turf/place = locate((minx + x), (miny + y), (minz + z))
+ var/area/location
+ var/list/objects
+ var/area/place_area = get_area(place)
+ //If there is nothing there, save as a noop (For odd shapes)
+ if(!place)
+ place = /turf/template_noop
+ location = /area/template_noop
+ objects = list()
+ //Ignore things in space, must be a space turf
+ else if(istype(place, /turf/open/space) && !(save_flag & SAVE_SPACE))
+ place = /turf/template_noop
+ location = /area/template_noop
+ //Stuff to add
+ else
+ location = place_area.type
+ objects = place
+ place = place.type
+ //====Saving shuttles only / non shuttles only====
+ var/is_shuttle_area = istype(location, /area/shuttle)
+ if((is_shuttle_area && shuttle_area_flag == SAVE_SHUTTLEAREA_IGNORE) || (!is_shuttle_area && shuttle_area_flag == SAVE_SHUTTLEAREA_ONLY))
+ place = /turf/template_noop
+ location = /area/template_noop
+ objects = list()
+ //====For toggling not saving areas and turfs====
+ if(!(save_flag & SAVE_AREAS))
+ location = /area/template_noop
+ if(!(save_flag & SAVE_TURFS))
+ place = /turf/template_noop
+ //====Generate Header Character====
+ var/header_char = calculate_tgm_header_index(index, layers) //The characters of the header
+ var/current_header = "(\n" //The actual stuff inside the header
+ //Add objects to the header file
+ var/empty = TRUE
+ //====SAVING OBJECTS====
+ if(save_flag & SAVE_OBJECTS)
+ for(var/obj/thing in objects)
+ CHECK_TICK
+ if(thing.type in obj_blacklist)
+ continue
+ var/metadata = generate_tgm_metadata(thing)
+ current_header += "[empty ? "" : ",\n"][thing.type][metadata]"
+ empty = FALSE
+ //====SAVING SPECIAL DATA====
+ //This is what causes lockers and machines to save stuff inside of them
+ if(save_flag & SAVE_OBJECT_PROPERTIES)
+ var/custom_data = thing.on_object_saved()
+ current_header += "[custom_data ? ",\n[custom_data]" : ""]"
+ //====SAVING MOBS====
+ if(save_flag & SAVE_MOBS)
+ for(var/mob/living/thing in objects)
+ CHECK_TICK
+ if(istype(thing, /mob/living/carbon)) //Ignore people, but not animals
+ continue
+ var/metadata = generate_tgm_metadata(thing)
+ current_header += "[empty ? "" : ",\n"][thing.type][metadata]"
+ empty = FALSE
+ current_header += "[empty ? "" : ",\n"][place],\n[location])\n"
+ //====Fill the contents file====
+ //Compression is done here
+ var/position_of_header = header_dat.Find(current_header)
+ if(position_of_header)
+ //If the header has already been saved, change the character to the other saved header
+ header_char = header_chars[position_of_header]
+ else
+ header += "\"[header_char]\" = [current_header]"
+ header_chars += header_char
+ header_dat += current_header
+ index ++
+ contents += "[header_char]\n"
+ contents += "\"}"
+ return "//[DMM2TGM_MESSAGE]\n[header][contents]"
+
+//vars_to_save = list() to save all vars
+/proc/generate_tgm_metadata(atom/object)
+ var/dat = ""
+ var/data_to_add = list()
+ var/list/vars_to_save = object.get_save_vars()
+ if(!vars_to_save)
+ return
+ for(var/variable in object.vars)
+ CHECK_TICK
+ if(!(variable in vars_to_save))
+ continue
+ var/value = object.vars[variable]
+ if(!value)
+ continue
+ if(value == initial(object.vars[variable]) || !issaved(object.vars[variable]))
+ continue
+ if(variable == "icon_state" && object.smoothing_flags)
+ continue
+ var/symbol = ""
+ if(istext(value))
+ symbol = "\""
+ value = hashtag_newlines_and_tabs(value, list("{"="", "}"="", "\""="", ";"="", ","=""))
+ else if(islist(value))
+ value = to_list_string(value)
+ else if(isicon(value) || isfile(value))
+ symbol = "'"
+ else if(!(isnum(value) || ispath(value)))
+ continue
+ //Prevent symbols from being because otherwise you can name something [";},/obj/item/gun/energy/laser/instakill{name="da epic gun] and spawn yourself an instakill gun.
+ data_to_add += "[variable] = [symbol][value][symbol]"
+ //Process data to add
+ var/first = TRUE
+ for(var/data in data_to_add)
+ dat += "[first ? "" : ";\n"]\t[data]"
+ first = FALSE
+ if(dat)
+ dat = "{\n[dat]\n\t}"
+ return dat
+
+/proc/calculate_tgm_header_index(index, layers)
+ var/output = ""
+ for(var/i in 1 to layers)
+ CHECK_TICK
+ var/length = GLOB.save_file_chars.len
+ var/calculated = FLOOR((index-1) / (length ** (i - 1)), 1)
+ calculated = (calculated % length) + 1
+ output = "[GLOB.save_file_chars[calculated]][output]"
+ return output
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index 8f4206ca905..b7b3ae49494 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -289,7 +289,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
message_admins("[key] used 'Disable all communication verbs', killing all communication methods.")
else
message_admins("[key] used 'Disable all communication verbs', restoring all communication methods.")
-/* SKYRAT EDIT: lol, lmao, fuck icon bugs from byond
+/* NOVA EDIT: lol, lmao, fuck icon bugs from byond
//This generates the icon states for job starting location landmarks.
/client/proc/create_mapping_job_icons()
set name = "Generate job landmarks icons"
@@ -317,7 +317,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
final.Insert(icon('icons/hud/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]")
fcopy(final, "icons/mob/landmarks.dmi")
*/
-// SKYRAT EDIT BEGIN: THIS SHIT WAS BROKEN due to an issue with byond and how icons cache
+// NOVA EDIT BEGIN: THIS SHIT WAS BROKEN due to an issue with byond and how icons cache
//This generates the icon states for job starting location landmarks.
/client/proc/create_mapping_job_icons()
set name = "Generate job landmarks icons"
@@ -349,7 +349,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE)
final.Insert(icon('icons/hud/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]")
fcopy(final, "icons/mob/landmarks.dmi")
to_chat(world, "Done generating landmarks.dmi.")
-// SKYRAT EDIT END
+// NOVA EDIT END
/client/proc/debug_z_levels()
set name = "Debug Z-Levels"
set category = "Mapping"
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index 6e26fb9754a..d49c7715462 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -405,7 +405,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
var/list/candidates = list()
if (prefs["offerghosts"]["value"] == "Yes")
- candidates = poll_ghost_candidates(replacetext(prefs["ghostpoll"]["value"], "%TYPE%", initial(pathToSpawn.name)), ROLE_TRAITOR)
+ candidates = SSpolling.poll_ghost_candidates(replacetext(prefs["ghostpoll"]["value"], "%TYPE%", initial(pathToSpawn.name)), check_jobban = ROLE_TRAITOR, pic_source = pathToSpawn, role_name_text = "portal storm")
if (prefs["playersonly"]["value"] == "Yes" && length(candidates) < prefs["minplayers"]["value"])
message_admins("Not enough players signed up to create a portal storm, the minimum was [prefs["minplayers"]["value"]] and the number of signups [length(candidates)]")
@@ -565,7 +565,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
if(teamsize <= 0)
return FALSE
- candidates = poll_ghost_candidates("Do you wish to be considered for a Nanotrasen emergency response drone?", "Drone")
+ candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a Nanotrasen emergency response drone?", check_jobban = ROLE_DRONE, pic_source = /mob/living/basic/drone/classic, role_name_text = "nanotrasen emergency response drone")
if(length(candidates) == 0)
return FALSE
diff --git a/code/modules/admin/verbs/server.dm b/code/modules/admin/verbs/server.dm
index d93008996bc..98ddf0b3421 100644
--- a/code/modules/admin/verbs/server.dm
+++ b/code/modules/admin/verbs/server.dm
@@ -133,7 +133,7 @@
set desc = "Prevent the server from restarting"
set name = "Delay Round End"
- if(!check_rights(R_ADMIN)) // SKYRAT EDIT - Admins can delay the round end - ORIGINAL: if(!check_rights(R_SERVER))
+ if(!check_rights(R_ADMIN)) // NOVA EDIT - Admins can delay the round end - ORIGINAL: if(!check_rights(R_SERVER))
return
if(SSticker.delay_end)
diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm
index d7050c0467b..d95eadbe7a4 100644
--- a/code/modules/admin/verbs/shuttlepanel.dm
+++ b/code/modules/admin/verbs/shuttlepanel.dm
@@ -11,14 +11,14 @@
/obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user)
var/list/options = list()
- options += "-----COMPATABLE DOCKS:" //SKYRAT EDIT ADDITION
+ options += "-----COMPATABLE DOCKS:" //NOVA EDIT ADDITION
for(var/port in SSshuttle.stationary_docking_ports)
if (istype(port, /obj/docking_port/stationary/transit))
continue // please don't do this
var/obj/docking_port/stationary/S = port
if (canDock(S) == SHUTTLE_CAN_DOCK)
options[S.name || S.shuttle_id] = S
- //SKYRAT EDIT ADDITION START
+ //NOVA EDIT ADDITION START
options += "-----INCOMPATABLE DOCKS:" //I WILL CRASH THIS SHIP WITH NO SURVIVORS!
for(var/port in SSshuttle.stationary_docking_ports)
if (istype(port, /obj/docking_port/stationary/transit))
@@ -26,7 +26,7 @@
var/obj/docking_port/stationary/S = port
if(!(canDock(S) == SHUTTLE_CAN_DOCK))
options[S.name || S.shuttle_id] = S
- //SKYRAT EDIT END
+ //NOVA EDIT END
options += "--------"
options += "Infinite Transit"
@@ -55,8 +55,8 @@
else
if(options[selection])
- request(options[selection], TRUE) //SKYRAT EDIT CHANGE
- message_admins("[user.ckey] has admin FORCED [name || shuttle_id] to dock at [options[selection]], this is ignoring all safety measures.") //SKYRAT EDIT ADDITION
+ request(options[selection], TRUE) //NOVA EDIT CHANGE
+ message_admins("[user.ckey] has admin FORCED [name || shuttle_id] to dock at [options[selection]], this is ignoring all safety measures.") //NOVA EDIT ADDITION
/obj/docking_port/mobile/emergency/admin_fly_shuttle(mob/user)
return // use the existing verbs for this
diff --git a/code/modules/admin/view_variables/admin_delete.dm b/code/modules/admin/view_variables/admin_delete.dm
index fe6e3380787..6d0e3df08b7 100644
--- a/code/modules/admin/view_variables/admin_delete.dm
+++ b/code/modules/admin/view_variables/admin_delete.dm
@@ -2,9 +2,9 @@
var/atom/A = D
var/coords = ""
var/jmp_coords = ""
- var/turf/T // SKYRAT EDIT -- Bluespace sparks on admin delete
+ var/turf/T // NOVA EDIT -- Bluespace sparks on admin delete
if(istype(A))
- T = get_turf(A) // SKYRAT EDIT, orginal: var/turf/T = get_turf(A)
+ T = get_turf(A) // NOVA EDIT, orginal: var/turf/T = get_turf(A)
if(T)
var/atom/a_loc = A.loc
var/is_turf = isturf(a_loc)
@@ -18,14 +18,14 @@
message_admins("[key_name_admin(usr)] deleted [D] [jmp_coords]")
BLACKBOX_LOG_ADMIN_VERB("Delete")
if(isturf(D))
- T = D // SKYRAT EDIT, orginal: var/turf/T = D
+ T = D // NOVA EDIT, orginal: var/turf/T = D
T.ScrapeAway()
else
vv_update_display(D, "deleted", VV_MSG_DELETED)
qdel(D)
if(!QDELETED(D))
vv_update_display(D, "deleted", "")
- // Skyrat edit addition start -- optional bluespace sparks on delete
+ // NOVA EDIT addition start -- optional bluespace sparks on delete
if(T && prefs.read_preference(/datum/preference/toggle/admin/delete_sparks))
playsound(T, 'sound/magic/Repulse.ogg', 100, 1)
var/datum/effect_system/spark_spread/quantum/sparks = new
diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm
index 5ea6d237a6a..ea1278901f3 100644
--- a/code/modules/admin/view_variables/color_matrix_editor.dm
+++ b/code/modules/admin/view_variables/color_matrix_editor.dm
@@ -12,7 +12,7 @@
else if(istext(_target?.color))
current_color = color_hex2color_matrix(_target.color)
else
- current_color = color_matrix_identity()
+ current_color = COLOR_MATRIX_IDENTITY
var/mutable_appearance/view = image('icons/misc/colortest.dmi', "colors")
if(_target)
@@ -27,7 +27,7 @@
proxy_view.color = current_color
proxy_view.display_to(owner.mob)
-/datum/color_matrix_editor/Destroy(force, ...)
+/datum/color_matrix_editor/Destroy(force)
QDEL_NULL(proxy_view)
return ..()
diff --git a/code/modules/admin/view_variables/get_variables.dm b/code/modules/admin/view_variables/get_variables.dm
index c59391371df..d493831da67 100644
--- a/code/modules/admin/view_variables/get_variables.dm
+++ b/code/modules/admin/view_variables/get_variables.dm
@@ -338,7 +338,7 @@
if(VV_COLOR_MATRIX)
.["value"] = open_color_matrix_editor()
- if(.["value"] == color_matrix_identity()) //identity is equivalent to null
+ if(.["value"] == COLOR_MATRIX_IDENTITY) //identity is equivalent to null
.["class"] = null
if(VV_INFINITY)
diff --git a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm
index 872bd27d627..fa5fde1f20e 100644
--- a/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm
+++ b/code/modules/admin/view_variables/nobody_wants_to_learn_matrix_math.dm
@@ -15,7 +15,7 @@
src.target = target
testing_matrix = matrix(target.transform)
-/datum/nobody_wants_to_learn_matrix_math/Destroy(force, ...)
+/datum/nobody_wants_to_learn_matrix_math/Destroy(force)
QDEL_NULL(testing_matrix)
return ..()
diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm
index e8d6a685ae4..cbcd8b0ea11 100644
--- a/code/modules/antagonists/_common/antag_datum.dm
+++ b/code/modules/antagonists/_common/antag_datum.dm
@@ -293,7 +293,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/replace_banned_player()
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [name]?", "[name]", job_rank, 5 SECONDS, owner.current)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a [name]?", check_jobban = "[name]", role = job_rank, poll_time = 5 SECONDS, target_mob = owner.current, pic_source = owner.current, role_name_text = name)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
@@ -332,9 +332,9 @@ GLOBAL_LIST_EMPTY(antagonists)
antag_hud.hide_from(current)
qdel(src)
- // SKYRAT EDIT START
+ // NOVA EDIT START
owner?.handle_exploitables() //Inefficient here, but on_removal() is called in multiple locations
- // SKYRAT EDIT END
+ // NOVA EDIT END
/**
* Proc that sends fluff or instructional messages to the player when they are given this antag datum.
@@ -343,7 +343,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/greet()
if(!silent)
to_chat(owner.current, span_big("You are \the [src]."))
- to_chat(owner.current, span_infoplain(span_doyourjobidiot("Remember that being an antagonist does not exclude you from the server rules regarding RP standards."))) //SKYRAT EDIT - RP REMINDER
+ to_chat(owner.current, span_infoplain(span_doyourjobidiot("Remember that being an antagonist does not exclude you from the server rules regarding RP standards."))) //NOVA EDIT - RP REMINDER
/**
* Proc that sends fluff or instructional messages to the player when they lose this antag datum.
@@ -463,6 +463,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/proc/render_preview_outfit(datum/outfit/outfit, mob/living/carbon/human/dummy)
dummy = dummy || new /mob/living/carbon/human/dummy/consistent
dummy.equipOutfit(outfit, visualsOnly = TRUE)
+ dummy.wear_suit?.update_greyscale()
var/icon = getFlatIcon(dummy)
// We don't want to qdel the dummy right away, since its items haven't initialized yet.
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 4b432b6b6f1..6ff809b59cb 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -55,7 +55,7 @@
/obj/item/antag_spawner/contract/proc/poll_for_student(mob/living/carbon/human/teacher, apprentice_school)
balloon_alert(teacher, "contacting apprentice...")
polling = TRUE
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a wizard's [apprentice_school] apprentice?", ROLE_WIZARD, ROLE_WIZARD, 15 SECONDS, src)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a wizard's [apprentice_school] apprentice?", check_jobban = ROLE_WIZARD, role = ROLE_WIZARD, poll_time = 15 SECONDS, target_mob = src, pic_source = teacher, role_name_text = "wizard apprentice")
polling = FALSE
if(!LAZYLEN(candidates))
to_chat(teacher, span_warning("Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later."))
@@ -134,7 +134,7 @@
return
to_chat(user, span_notice("You activate [src] and wait for confirmation."))
- var/list/nuke_candidates = poll_ghost_candidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
+ var/list/nuke_candidates = SSpolling.poll_ghost_candidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", check_jobban = ROLE_OPERATIVE, role = ROLE_OPERATIVE, poll_time = 15 SECONDS, ignore_category = POLL_IGNORE_SYNDICATE, pic_source = src, role_name_text = "syndicate [borg_to_spawn ? "[borg_to_spawn] cyborg":"operative"]")
if(LAZYLEN(nuke_candidates))
if(QDELETED(src) || !check_usability(user))
return
@@ -252,7 +252,7 @@
return
if(used)
return
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, ROLE_ALIEN, 5 SECONDS, src)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a [initial(demon_type.name)]?", check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, poll_time = 5 SECONDS, target_mob = src, pic_source = src, role_name_text = initial(demon_type.name))
if(LAZYLEN(candidates))
if(used || QDELETED(src))
return
@@ -332,7 +332,7 @@
return
to_chat(user, span_notice("You activate [src] and wait for confirmation."))
- var/list/baddie_candidates = poll_ghost_candidates("Do you want to play as a [role_to_play]?", poll_role_check, poll_role_check, 10 SECONDS, poll_ignore_category)
+ var/list/baddie_candidates = SSpolling.poll_ghost_candidates("Do you want to play as a [role_to_play]?", check_jobban = poll_role_check, role = poll_role_check, poll_time = 10 SECONDS, ignore_category = poll_ignore_category, pic_source = src, role_name_text = role_to_play)
if(!LAZYLEN(baddie_candidates))
to_chat(user, span_warning(fail_text))
return
diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm
index 902456d909b..29f94b040ec 100644
--- a/code/modules/antagonists/_common/antag_team.dm
+++ b/code/modules/antagonists/_common/antag_team.dm
@@ -26,7 +26,7 @@ GLOBAL_LIST_EMPTY(antagonist_teams)
else
add_member(starting_members)
-/datum/team/Destroy(force, ...)
+/datum/team/Destroy(force)
GLOB.antagonist_teams -= src
members = null
objectives = null
diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm
index 074b9519101..3179b050e0f 100644
--- a/code/modules/antagonists/abductor/abductor.dm
+++ b/code/modules/antagonists/abductor/abductor.dm
@@ -160,7 +160,7 @@
..()
team_number = team_count++
name = "Mothership [pick(GLOB.greek_letters)]" //TODO Ensure unique and actual alieny names
- //add_objective(new /datum/objective/experiment) //SKYRAT EDIT REMOVAL
+ //add_objective(new /datum/objective/experiment) //NOVA EDIT REMOVAL
/datum/team/abductor_team/roundend_report()
var/list/result = list()
diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm
index b596802b414..f51aaa4cc01 100644
--- a/code/modules/antagonists/ashwalker/ashwalker.dm
+++ b/code/modules/antagonists/ashwalker/ashwalker.dm
@@ -27,7 +27,7 @@
/datum/antagonist/ashwalker/on_gain()
. = ..()
RegisterSignal(owner.current, COMSIG_MOB_EXAMINATE, PROC_REF(on_examinate))
- //owner.teach_crafting_recipe(/datum/crafting_recipe/skeleton_key) //SKYRAT EDIT REMOVAL - ASH RITUALS
+ //owner.teach_crafting_recipe(/datum/crafting_recipe/skeleton_key) //NOVA EDIT REMOVAL - ASH RITUALS
/datum/antagonist/ashwalker/on_removal()
. = ..()
diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm
index e58f54f2c65..7a84fc183c4 100644
--- a/code/modules/antagonists/brainwashing/brainwashing.dm
+++ b/code/modules/antagonists/brainwashing/brainwashing.dm
@@ -33,7 +33,7 @@
roundend_category = "brainwashed victims"
show_in_antagpanel = TRUE
antag_hud_name = "brainwashed"
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
show_name_in_check_antagonists = TRUE
count_against_dynamic_roll_chance = FALSE
ui_name = "AntagInfoBrainwashed"
diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm
index 08d4887a364..aea42ec2dd8 100644
--- a/code/modules/antagonists/brother/brother.dm
+++ b/code/modules/antagonists/brother/brother.dm
@@ -101,10 +101,10 @@
brother1.dna.features["ethcolor"] = GLOB.color_list_ethereal["Faint Red"]
brother1.set_species(/datum/species/ethereal)
- brother2.dna.features["mcolor"] = "#E5CD99" // SKYRAT EDIT ADDITION - Customization
- brother2.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: brother2.dna.features["moth_antennae"] = "Plain"
- brother2.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: brother2.dna.features["moth_markings"] = "None"
- brother2.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Plain)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: brother2.dna.features["moth_wings"] = "Plain"
+ brother2.dna.features["mcolor"] = "#E5CD99" // NOVA EDIT ADDITION - Customization
+ brother2.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: brother2.dna.features["moth_antennae"] = "Plain"
+ brother2.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: brother2.dna.features["moth_markings"] = "None"
+ brother2.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Plain)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: brother2.dna.features["moth_wings"] = "Plain"
brother2.set_species(/datum/species/moth)
var/icon/brother1_icon = render_preview_outfit(/datum/outfit/job/quartermaster, brother1)
diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm
index 4f8e63746f6..81075f397c8 100644
--- a/code/modules/antagonists/changeling/changeling.dm
+++ b/code/modules/antagonists/changeling/changeling.dm
@@ -29,7 +29,7 @@
/// The original profile of this changeling.
var/datum/changeling_profile/first_profile = null
/// How many DNA strands the changeling can store for transformation.
- var/dna_max = 8 // SKYRAT EDIT - ORIGINAL: 6
+ var/dna_max = 8 // NOVA EDIT - ORIGINAL: 6
/// The amount of DNA gained. Includes DNA sting.
var/absorbed_count = 0
/// The amount of DMA gained using absorb, not DNA sting. Start with one (your original DNA)
@@ -47,9 +47,9 @@
/// Changeling name, what other lings see over the hivemind when talking.
var/changelingID = "Changeling"
/// The number of genetics points (to buy powers) this ling currently has.
- var/genetic_points = 15 // SKYRAT EDIT - ORIGINAL: 10
+ var/genetic_points = 15 // NOVA EDIT - ORIGINAL: 10
/// The max number of genetics points (to buy powers) this ling can have..
- var/total_genetic_points = 15 // SKYRAT EDIT - ORIGINAL: 10
+ var/total_genetic_points = 15 // NOVA EDIT - ORIGINAL: 10
/// List of all powers we start with.
var/list/innate_powers = list()
/// Associated list of all powers we have evolved / bought from the emporium. [path] = [instance of path]
@@ -85,7 +85,7 @@
var/static/list/slot2type = list(
"head" = /obj/item/clothing/head/changeling,
"wear_mask" = /obj/item/clothing/mask/changeling,
- "wear_neck" = /obj/item/changeling, // SKYRAT EDIT
+ "wear_neck" = /obj/item/changeling, // NOVA EDIT
"back" = /obj/item/changeling,
"wear_suit" = /obj/item/clothing/suit/changeling,
"w_uniform" = /obj/item/clothing/under/changeling,
@@ -101,9 +101,9 @@
/// A list of all memories we've stolen through absorbs.
var/list/stolen_memories = list()
- var/true_form_death //SKYRAT EDIT ADDITION: The time that the horror form died.
+ var/true_form_death //NOVA EDIT ADDITION: The time that the horror form died.
- // SKYRAT EDIT START
+ // NOVA EDIT START
var/datum/changeling_profile/current_profile = null
var/list/mimicable_quirks_list = list(
"Bad Touch",
@@ -125,7 +125,7 @@
"Webbing aspect (Emotes)",
"Friendly",
)
- // SKYRAT EDIT END
+ // NOVA EDIT END
/datum/antagonist/changeling/New()
. = ..()
@@ -551,7 +551,7 @@
new_profile.undershirt = target.undershirt
new_profile.socks = target.socks
- // SKYRAT EDIT START
+ // NOVA EDIT START
new_profile.bra = target.bra
new_profile.underwear_color = target.underwear_color
@@ -569,7 +569,7 @@
new_profile.age = target.age
for(var/datum/quirk/target_quirk in target.quirks)
LAZYADD(new_profile.quirks, new target_quirk.type)
- //SKYRAT EDIT END
+ //NOVA EDIT END
//THE FLUFFY FRONTIER EDIT ADDITION BEGIN - Blooper
new_profile.blooper_id = target.blooper_id
@@ -595,7 +595,7 @@
// Grab the target's sechut icon.
new_profile.id_icon = target.wear_id?.get_sechud_job_icon_state()
- var/list/slots = list("head", "wear_mask", "wear_neck", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") // SKYRAT EDIT
+ var/list/slots = list("head", "wear_mask", "wear_neck", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store") // NOVA EDIT
for(var/slot in slots)
if(!(slot in target.vars))
continue
@@ -612,13 +612,13 @@
new_profile.worn_icon_state_list[slot] = clothing_item.worn_icon_state
new_profile.exists_list[slot] = 1
- // SKYRAT EDIT START
+ // NOVA EDIT START
new_profile.worn_icon_digi_list[slot] = clothing_item.worn_icon_digi
new_profile.worn_icon_monkey_list[slot] = clothing_item.worn_icon_monkey
new_profile.worn_icon_teshari_list[slot] = clothing_item.worn_icon_teshari
new_profile.worn_icon_vox_list[slot] = clothing_item.worn_icon_vox
new_profile.supports_variations_flags_list[slot] = clothing_item.supports_variations_flags
- // SKYRAT EDIT END
+ // NOVA EDIT END
new_profile.voice = target.voice
new_profile.voice_filter = target.voice_filter
@@ -637,7 +637,7 @@
if(!first_profile)
first_profile = new_profile
- current_profile = first_profile // SKYRAT EDIT
+ current_profile = first_profile // NOVA EDIT
stored_profiles += new_profile
absorbed_count++
@@ -788,7 +788,7 @@
var/static/list/slot2slot = list(
"head" = ITEM_SLOT_HEAD,
"wear_mask" = ITEM_SLOT_MASK,
- "wear_neck" = ITEM_SLOT_NECK, // SKYRAT EDIT
+ "wear_neck" = ITEM_SLOT_NECK, // NOVA EDIT
"back" = ITEM_SLOT_BACK,
"wear_suit" = ITEM_SLOT_OCLOTHING,
"w_uniform" = ITEM_SLOT_ICLOTHING,
@@ -807,7 +807,7 @@
user.undershirt = chosen_profile.undershirt
user.socks = chosen_profile.socks
- // SKYRAT EDIT START
+ // NOVA EDIT START
user.bra = chosen_profile.bra
user.underwear_color = chosen_profile.underwear_color
@@ -841,7 +841,7 @@
user.add_quirk(target_quirk.type)
break
- // SKYRAT EDIT END
+ // NOVA EDIT END
user.voice = chosen_profile.voice
user.voice_filter = chosen_profile.voice_filter
@@ -850,7 +850,7 @@
for(var/obj/item/bodypart/limb as anything in user.bodyparts)
limb.update_limb(is_creating = TRUE)
- user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE) // SKYRAT EDIT
+ user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE) // NOVA EDIT
user.domutcheck()
// Get rid of any scars from previous Changeling-ing
@@ -923,13 +923,13 @@
new_flesh_item.worn_icon = chosen_profile.worn_icon_list[slot]
new_flesh_item.worn_icon_state = chosen_profile.worn_icon_state_list[slot]
- // SKYRAT EDIT START
+ // NOVA EDIT START
new_flesh_item.worn_icon_digi = chosen_profile.worn_icon_digi_list[slot]
new_flesh_item.worn_icon_monkey = chosen_profile.worn_icon_monkey_list[slot]
new_flesh_item.worn_icon_teshari = chosen_profile.worn_icon_teshari_list[slot]
new_flesh_item.worn_icon_vox = chosen_profile.worn_icon_vox_list[slot]
new_flesh_item.supports_variations_flags = chosen_profile.supports_variations_flags_list[slot]
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(istype(new_flesh_item, /obj/item/changeling/id) && chosen_profile.id_icon)
var/obj/item/changeling/id/flesh_id = new_flesh_item
@@ -948,13 +948,13 @@
user.regenerate_icons()
user.name = user.get_visible_name()
current_profile = chosen_profile
- // SKYRAT EDIT START
+ // NOVA EDIT START
chosen_dna.transfer_identity(user, TRUE)
user.updateappearance(mutcolor_update = TRUE, eyeorgancolor_update = TRUE)
user.regenerate_icons()
user.name = user.get_visible_name()
current_profile = chosen_profile
- // SKYRAT EDIT END
+ // NOVA EDIT END
//THE FLUFFY FRONTIER EDIT ADDITION BEGIN - Blooper
user.blooper = null
user.blooper_id = chosen_profile.blooper_id
@@ -1042,7 +1042,7 @@
new_profile.profile_snapshot = profile_snapshot
new_profile.id_icon = id_icon
- // SKYRAT EDIT START
+ // NOVA EDIT START
new_profile.underwear_color = underwear_color
new_profile.undershirt_color = undershirt_color
new_profile.socks_color = socks_color
@@ -1064,7 +1064,7 @@
new_profile.laugh_type = laugh_type
new_profile.age = age
new_profile.quirks = quirks.Copy()
- // SKYRAT EDIT END
+ // NOVA EDIT END
new_profile.voice = voice
new_profile.voice_filter = voice_filter
@@ -1072,13 +1072,13 @@
/datum/antagonist/changeling/roundend_report()
var/list/parts = list()
- // SKYRAT EDIT REMOVAL START
+ // NOVA EDIT REMOVAL START
/*
var/changeling_win = TRUE
if(!owner.current)
changeling_win = FALSE
*/
- // SKYRAT EDIT REMOVAL END
+ // NOVA EDIT REMOVAL END
parts += printplayer(owner)
parts += "Genomes Extracted: [absorbed_count] "
@@ -1086,24 +1086,24 @@
if(objectives.len)
var/count = 1
for(var/datum/objective/objective in objectives)
- // SKYRAT EDIT START - No greentext
+ // NOVA EDIT START - No greentext
/*
if(!objective.check_completion())
changeling_win = FALSE
parts += "Objective #[count] : [objective.explanation_text] [objective.get_roundend_success_suffix()]"
*/
parts += "Objective #[count] : [objective.explanation_text]"
- // SKYRAT EDIT END - No greentext
+ // NOVA EDIT END - No greentext
count++
- // SKYRAT EDIT REMOVAL START - No greentext
+ // NOVA EDIT REMOVAL START - No greentext
/*
if(changeling_win)
parts += span_greentext("The changeling was successful!")
else
parts += span_redtext("The changeling has failed.")
*/
- // SKYRAT EDIT REMOVAL END - No greentext
+ // NOVA EDIT REMOVAL END - No greentext
return parts.Join(" ")
diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm
index 3dd50f36807..34c64012cd4 100644
--- a/code/modules/antagonists/changeling/powers/adrenaline.dm
+++ b/code/modules/antagonists/changeling/powers/adrenaline.dm
@@ -13,7 +13,7 @@
..()
to_chat(user, span_notice("Energy rushes through us."))
user.SetKnockdown(0)
- user.setStaminaLoss(0) //SKYRAT EDIT ADDITION
+ user.setStaminaLoss(0) //NOVA EDIT ADDITION
user.set_resting(FALSE)
user.reagents.add_reagent(/datum/reagent/medicine/changelingadrenaline, 4) //20 seconds
user.reagents.add_reagent(/datum/reagent/medicine/changelinghaste, 3) //6 seconds, for a really quick burst of speed
diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm
index 9fe7613cc4c..b05bb38ae31 100644
--- a/code/modules/antagonists/changeling/powers/panacea.dm
+++ b/code/modules/antagonists/changeling/powers/panacea.dm
@@ -12,14 +12,14 @@
to_chat(user, span_notice("We cleanse impurities from our form."))
..()
var/list/bad_organs = list(
- user.get_organ_by_type(/obj/item/organ/internal/empowered_borer_egg), // SKYRAT EDIT ADDITION
+ user.get_organ_by_type(/obj/item/organ/internal/empowered_borer_egg), // NOVA EDIT ADDITION
user.get_organ_by_type(/obj/item/organ/internal/body_egg),
user.get_organ_by_type(/obj/item/organ/internal/legion_tumour),
user.get_organ_by_type(/obj/item/organ/internal/zombie_infection),
)
- try_to_mutant_cure(user) //SKYRAT EDIT ADDITION
+ try_to_mutant_cure(user) //NOVA EDIT ADDITION
for(var/o in bad_organs)
var/obj/item/organ/O = o
@@ -31,11 +31,11 @@
var/mob/living/carbon/C = user
C.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 0)
O.forceMove(get_turf(user))
- //Skyrat Edit Start: Cortical Borer
+ //NOVA EDIT Start: Cortical Borer
var/mob/living/basic/cortical_borer/cb_inside = user.has_borer()
if(cb_inside)
cb_inside.leave_host()
- //Skyrat Edit Stop: Cortical Borer
+ //NOVA EDIT Stop: Cortical Borer
user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10)
user.reagents.add_reagent(/datum/reagent/medicine/pen_acid, 20)
user.reagents.add_reagent(/datum/reagent/medicine/antihol, 10)
diff --git a/code/modules/antagonists/changeling/powers/spiders.dm b/code/modules/antagonists/changeling/powers/spiders.dm
index 1e140fab7f9..4c83bd07811 100644
--- a/code/modules/antagonists/changeling/powers/spiders.dm
+++ b/code/modules/antagonists/changeling/powers/spiders.dm
@@ -1,4 +1,4 @@
-//SKYRAT EDIT REMOVAL BEGIN: Removes Spread Infestation due to NRP usage and abuse by changelings
+//NOVA EDIT REMOVAL BEGIN: Removes Spread Infestation due to NRP usage and abuse by changelings
/*
/datum/action/changeling/spiders
name = "Spread Infestation"
@@ -15,4 +15,4 @@
new /obj/effect/mob_spawn/ghost_role/spider/bloody(user.loc)
return TRUE
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index f8c1bfc5160..918ed0d4398 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -47,10 +47,10 @@
return
if(!isturf(user.loc))
return
- var/mob/living/carbon/human/to_check = target // SKYRAT EDIT START - STINGS DO NOT AFFECT ROBOTIC ENTITIES
+ var/mob/living/carbon/human/to_check = target // NOVA EDIT START - STINGS DO NOT AFFECT ROBOTIC ENTITIES
if(to_check.mob_biotypes & MOB_ROBOTIC)
to_chat(user, "Our sting would have no effect on robotic entities ")
- return // SKYRAT EDIT END
+ return // NOVA EDIT END
if(!length(get_path_to(user, target, max_distance = changeling.sting_range, simulated_only = FALSE)))
return // no path within the sting's range is found. what a weird place to use the pathfinding system
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling))
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 27a87bee6c2..d3321c93e37 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -413,14 +413,14 @@
target.color = rgb(0, 128, 0)
animate(target, color = old_color, time = 1 SECONDS, easing = EASE_IN)
- // SKYRAT EDIT START
+ // NOVA EDIT START
if(IS_CLOCK(target))
to_chat(user, span_warning("Some force greater than you intervenes! [target] is protected by the heretic Ratvar!"))
to_chat(target, span_warning("You are protected by your faith to Ratvar!"))
var/old_color = target.color
target.color = rgb(190, 135, 0)
animate(target, color = old_color, time = 1 SECONDS, easing = EASE_IN)
- // SKYRAT EDIT END
+ // NOVA EDIT END
else if(target.can_block_magic())
to_chat(user, span_warning("The spell had no effect!"))
diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm
index 86557d2d529..00bdc960644 100644
--- a/code/modules/antagonists/cult/cult_comms.dm
+++ b/code/modules/antagonists/cult/cult_comms.dm
@@ -127,7 +127,7 @@
if(B.current && B.current != Nominee && !B.current.incapacitated())
SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg')
asked_cultists += B.current
- var/list/yes_voters = poll_candidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists)
+ var/list/yes_voters = SSpolling.poll_candidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 30 SECONDS, group = asked_cultists, pic_source = Nominee, role_name_text = "cult master")
if(QDELETED(Nominee) || Nominee.incapacitated())
team.cult_vote_called = FALSE
for(var/datum/mind/B in team.members)
diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm
index 944aa45e377..3ac831b1948 100644
--- a/code/modules/antagonists/cult/cult_items.dm
+++ b/code/modules/antagonists/cult/cult_items.dm
@@ -305,7 +305,7 @@ Striking a noncultist, however, will tear their flesh."}
armor_type = /datum/armor/cultrobes_hardened
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/hardened
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
- flags_inv = HIDEGLOVES | HIDEJUMPSUIT | HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEGLOVES | HIDEJUMPSUIT | HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
resistance_flags = NONE
@@ -1023,8 +1023,7 @@ Striking a noncultist, however, will tear their flesh."}
return FALSE
/obj/item/shield/mirror/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- var/turf/T = get_turf(hit_atom)
- var/datum/thrownthing/D = throwingdatum
+ var/turf/impact_turf = get_turf(hit_atom)
if(isliving(hit_atom))
var/mob/living/target = hit_atom
@@ -1037,13 +1036,14 @@ Striking a noncultist, however, will tear their flesh."}
return
if(!..())
target.Paralyze(30)
- if(D?.thrower)
- for(var/mob/living/Next in orange(2, T))
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(thrower)
+ for(var/mob/living/Next in orange(2, impact_turf))
if(!Next.density || IS_CULTIST(Next))
continue
- throw_at(Next, 3, 1, D.thrower)
+ throw_at(Next, 3, 1, thrower)
return
- throw_at(D.thrower, 7, 1, null)
+ throw_at(thrower, 7, 1, null)
else
..()
diff --git a/code/modules/antagonists/cult/cult_objectives.dm b/code/modules/antagonists/cult/cult_objectives.dm
index 8a4bf74dec8..7da5d095661 100644
--- a/code/modules/antagonists/cult/cult_objectives.dm
+++ b/code/modules/antagonists/cult/cult_objectives.dm
@@ -20,19 +20,19 @@
var/datum/team/cult/cult = team
var/list/target_candidates = list()
for(var/mob/living/carbon/human/player in GLOB.player_list)
- // SKYRAT EDIT ADDITION START - Players in the interlink can't be obsession targets
+ // NOVA EDIT ADDITION START - Players in the interlink can't be obsession targets
if(SSticker.IsRoundInProgress() && istype(get_area(player), /area/centcom/interlink))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD)
target_candidates += player.mind
if(target_candidates.len == 0)
message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.")
for(var/mob/living/carbon/human/player in GLOB.player_list)
- // SKYRAT EDIT ADDITION START - Players in the interlink can't be obsession targets
+ // NOVA EDIT ADDITION START - Players in the interlink can't be obsession targets
if(SSticker.IsRoundInProgress() && istype(get_area(player), /area/centcom/interlink))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
target_candidates += player.mind
list_clear_nulls(target_candidates)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 286fe4973dd..c445e73e90e 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -694,7 +694,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
if(!mob_to_revive.client || mob_to_revive.client.is_afk())
set waitfor = FALSE
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [mob_to_revive.real_name], an inactive blood cultist?", ROLE_CULTIST, ROLE_CULTIST, 5 SECONDS, mob_to_revive)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a [mob_to_revive.real_name], an inactive blood cultist?", check_jobban = ROLE_CULTIST, role = ROLE_CULTIST, poll_time = 5 SECONDS, target_mob = mob_to_revive, pic_source = mob_to_revive)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.")
diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm
index 17cf0ce86d3..1b73918ba62 100644
--- a/code/modules/antagonists/heretic/heretic_antag.dm
+++ b/code/modules/antagonists/heretic/heretic_antag.dm
@@ -33,7 +33,7 @@
/// The path our heretic has chosen. Mostly used for flavor.
var/heretic_path = PATH_START
/// A sum of how many knowledge points this heretic CURRENTLY has. Used to research.
- var/knowledge_points = 2 //SKYRAT EDIT - ORIGINAL 1
+ var/knowledge_points = 2 //NOVA EDIT - ORIGINAL 1
/// The time between gaining influence passively. The heretic gain +1 knowledge points every this duration of time.
var/passive_gain_timer = 20 MINUTES
/// Assoc list of [typepath] = [knowledge instance]. A list of all knowledge this heretic's reserached.
@@ -65,7 +65,9 @@
PATH_BLADE = "label", // my favorite color is label
PATH_COSMIC = "purple",
PATH_LOCK = "yellow",
+ PATH_MOON = "blue",
)
+
var/static/list/path_to_rune_color = list(
PATH_START = COLOR_LIME,
PATH_RUST = COLOR_CARGO_BROWN,
@@ -75,6 +77,7 @@
PATH_BLADE = COLOR_SILVER,
PATH_COSMIC = COLOR_PURPLE,
PATH_LOCK = COLOR_YELLOW,
+ PATH_MOON = COLOR_BLUE_LIGHT,
)
/datum/antagonist/heretic/Destroy()
@@ -473,7 +476,7 @@
/datum/antagonist/heretic/roundend_report()
var/list/parts = list()
- //var/succeeded = TRUE // SKYRAT EDIT REMOVAL
+ //var/succeeded = TRUE // NOVA EDIT REMOVAL
parts += printplayer(owner)
parts += "Sacrifices Made: [total_sacrifices]"
@@ -481,17 +484,17 @@
if(length(objectives))
var/count = 1
for(var/datum/objective/objective as anything in objectives)
- // SKYRAT EDIT START - No greentext
+ // NOVA EDIT START - No greentext
/*
if(!objective.check_completion())
succeeded = FALSE
parts += "Objective #[count] : [objective.explanation_text] [objective.get_roundend_success_suffix()]"
*/
parts += "Objective #[count] : [objective.explanation_text]"
- // SKYRAT EDIT END - No greentext
+ // NOVA EDIT END - No greentext
count++
- // SKYRAT EDIT START - No greentext
+ // NOVA EDIT START - No greentext
/*
if(ascended)
parts += span_greentext(span_big("THE HERETIC ASCENDED!"))
@@ -502,7 +505,7 @@
else
parts += span_redtext("The heretic has failed.")
*/
- // SKYRAT EDIT END - No greentext
+ // NOVA EDIT END - No greentext
parts += "Knowledge Researched: "
diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm
index b0d2878b455..cb9f3b75ccc 100644
--- a/code/modules/antagonists/heretic/heretic_knowledge.dm
+++ b/code/modules/antagonists/heretic/heretic_knowledge.dm
@@ -116,7 +116,7 @@
return TRUE
/**
- * Parses specific items into a more reaadble form.
+ * Parses specific items into a more readble form.
* Can be overriden by knoweldge subtypes.
*/
/datum/heretic_knowledge/proc/parse_required_item(atom/item_path, number_of_things)
@@ -126,7 +126,6 @@
if(ispath(item_path, /mob/living))
return "carcass[number_of_things > 1 ? "es" : ""] of any kind"
return "[initial(item_path.name)]\s"
-
/**
* Called whenever the knowledge's associated ritual is completed successfully.
*
@@ -144,6 +143,7 @@
/datum/heretic_knowledge/proc/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
if(!length(result_atoms))
return FALSE
+
for(var/result in result_atoms)
new result(loc)
return TRUE
@@ -181,7 +181,6 @@
continue
how_much_to_use = min(required_atoms[requirement], sac_stack.amount)
break
-
sac_stack.use(how_much_to_use)
continue
@@ -226,7 +225,7 @@
/// A list of weakrefs to all items we've created.
var/list/datum/weakref/created_items
-/datum/heretic_knowledge/limited_amount/Destroy(force, ...)
+/datum/heretic_knowledge/limited_amount/Destroy(force)
LAZYCLEARLIST(created_items)
return ..()
@@ -537,7 +536,7 @@
animate(summoned, 10 SECONDS, alpha = 155)
message_admins("A [summoned.name] is being summoned by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(summoned)].")
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [summoned.name]?", ROLE_HERETIC, FALSE, 10 SECONDS, summoned, poll_ignore_define)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a [summoned.name]?", check_jobban = ROLE_HERETIC, poll_time = 10 SECONDS, target_mob = summoned, ignore_category = poll_ignore_define, pic_source = summoned, role_name_text = summoned.name)
if(!LAZYLEN(candidates))
loc.balloon_alert(user, "ritual failed, no ghosts!")
animate(summoned, 0.5 SECONDS, alpha = 0)
diff --git a/code/modules/antagonists/heretic/heretic_living_heart.dm b/code/modules/antagonists/heretic/heretic_living_heart.dm
index 1766cb4cd76..b616d300097 100644
--- a/code/modules/antagonists/heretic/heretic_living_heart.dm
+++ b/code/modules/antagonists/heretic/heretic_living_heart.dm
@@ -19,7 +19,7 @@
action = new(src)
action.Grant(organ_parent.owner)
-/datum/component/living_heart/Destroy(force, silent)
+/datum/component/living_heart/Destroy(force)
QDEL_NULL(action)
return ..()
diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm
index 74a851e7fb7..b5b7dcc58c4 100644
--- a/code/modules/antagonists/heretic/influences.dm
+++ b/code/modules/antagonists/heretic/influences.dm
@@ -21,7 +21,7 @@
/// List of minds with the ability to see influences
var/list/datum/mind/tracked_heretics = list()
-/datum/reality_smash_tracker/Destroy(force, ...)
+/datum/reality_smash_tracker/Destroy(force)
if(GLOB.reality_smash_track == src)
stack_trace("[type] was deleted. Heretics may no longer access any influences. Fix it, or call coder support.")
message_admins("The [type] was deleted. Heretics may no longer access any influences. Fix it, or call coder support.")
@@ -94,10 +94,10 @@
tracked_heretics |= heretic
// If our heretic's on station, generate some new influences
- //SKYRAT EDIT START
+ //NOVA EDIT START
var/area/heretic_area = get_area(heretic.current)
if(ishuman(heretic.current) && (!(is_centcom_level(heretic.current.z)) || istype(heretic_area, /area/centcom/interlink)) || istype(heretic_area, /area/shuttle/arrival))
- //SKYRAT EDIT END
+ //NOVA EDIT END
generate_new_influences()
add_to_smashes(heretic)
diff --git a/code/modules/antagonists/heretic/items/eldritch_painting.dm b/code/modules/antagonists/heretic/items/eldritch_painting.dm
new file mode 100644
index 00000000000..1104f5187e0
--- /dev/null
+++ b/code/modules/antagonists/heretic/items/eldritch_painting.dm
@@ -0,0 +1,243 @@
+// The basic eldritch painting
+/obj/item/wallframe/painting/eldritch
+ name = "The debug and a coder who slept"
+ icon = 'icons/obj/signs.dmi'
+ resistance_flags = FLAMMABLE
+ flags_1 = NONE
+ icon_state = "frame-empty"
+ result_path = /obj/structure/sign/painting/eldritch
+ pixel_shift = 30
+
+/obj/structure/sign/painting/eldritch
+ name = "The debug and a coder who slept"
+ icon = 'icons/obj/signs.dmi'
+ icon_state = "frame-empty"
+ custom_materials = list(/datum/material/wood =SHEET_MATERIAL_AMOUNT)
+ resistance_flags = FLAMMABLE
+ buildable_sign = FALSE
+ // The list of canvas types accepted by this frame, set to zero here
+ accepted_canvas_types = list()
+ // Set to false since we don't want this to persist
+ persistence_id = FALSE
+ /// The trauma the painting applies
+ var/applied_trauma = /datum/brain_trauma/severe/pacifism
+ /// The text that shows up when you cross the paintings path
+ var/text_to_display = "I should not be seeing this..."
+ /// The range of the paintings effect
+ var/range = 7
+
+/obj/structure/sign/painting/eldritch/Initialize(mapload, dir, building)
+ . = ..()
+ var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(apply_trauma))
+ AddComponent(/datum/component/connect_range, tracked = src, connections = connections, range = range, works_in_containers = FALSE)
+
+/obj/structure/sign/painting/eldritch/proc/apply_trauma(datum/source, mob/living/carbon/viewer)
+ if (!isliving(viewer) || !can_see(viewer, src, range))
+ return
+ if (!viewer.mind || !viewer.mob_mood || viewer.stat != CONSCIOUS || viewer.is_blind())
+ return
+ // Certain paintings have no applied trauma, so we shouldnt do further effects if they don't
+ if(!applied_trauma)
+ return
+ if (viewer.has_trauma_type(applied_trauma))
+ return
+ if(IS_HERETIC(viewer))
+ return
+ if(viewer.can_block_magic(MAGIC_RESISTANCE))
+ return
+ to_chat(viewer, span_notice(text_to_display))
+ viewer.gain_trauma(applied_trauma, TRAUMA_RESILIENCE_SURGERY)
+ viewer.emote("scream")
+ to_chat(viewer, span_warning("As you gaze upon the painting your mind rends to its truth!"))
+
+/obj/structure/sign/painting/eldritch/wirecutter_act(mob/living/user, obj/item/I)
+ if(!user.can_block_magic(MAGIC_RESISTANCE))
+ user.add_mood_event("ripped_eldritch_painting", /datum/mood_event/eldritch_painting)
+ to_chat(user, span_notice("Laughter echoes through your mind...."))
+ qdel(src)
+
+// On examine eldritch paintings give a trait so their effects can not be spammed
+/obj/structure/sign/painting/eldritch/examine(mob/living/carbon/user)
+ . = ..()
+ if(HAS_TRAIT(user, TRAIT_ELDRITCH_PAINTING_EXAMINE))
+ return
+
+ ADD_TRAIT(user, TRAIT_ELDRITCH_PAINTING_EXAMINE, REF(src))
+ addtimer(TRAIT_CALLBACK_REMOVE(user, TRAIT_ELDRITCH_PAINTING_EXAMINE, REF(src)), 3 MINUTES)
+ examine_effects(user)
+
+/obj/structure/sign/painting/eldritch/proc/examine_effects(mob/living/carbon/examiner)
+ if(IS_HERETIC(examiner))
+ to_chat(examiner, span_notice("Oh, what arts!"))
+ else
+ to_chat(examiner, span_notice("Kinda strange painting."))
+
+// The sister and He Who Wept eldritch painting
+/obj/item/wallframe/painting/eldritch/weeping
+ name = "The sister and He Who Wept"
+ desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN."
+ icon_state = "eldritch_painting_weeping"
+ result_path = /obj/structure/sign/painting/eldritch/weeping
+
+/obj/structure/sign/painting/eldritch/weeping
+ name = "The sister and He Who Wept"
+ desc = "A beautiful artwork depicting a fair lady and HIM, HE WEEPS, I WILL SEE HIM AGAIN. Destroyable with wirecutters."
+ icon_state = "eldritch_painting_weeping"
+ applied_trauma = /datum/brain_trauma/severe/weeping
+ text_to_display = "Oh what arts! She is so fair, and he...HE WEEPS!!!"
+
+/obj/structure/sign/painting/eldritch/weeping/examine_effects(mob/living/carbon/examiner)
+ if(!IS_HERETIC(examiner))
+ to_chat(examiner, span_notice("Respite, for now...."))
+ examiner.mob_mood.mood_events.Remove("eldritch_weeping")
+ examiner.add_mood_event("weeping_withdrawl", /datum/mood_event/eldritch_painting/weeping_withdrawl)
+ return
+
+ to_chat(examiner, span_notice("Oh, what arts! Just gazing upon it clears your mind."))
+ examiner.remove_status_effect(/datum/status_effect/hallucination)
+ examiner.add_mood_event("heretic_eldritch_painting", /datum/mood_event/eldritch_painting/weeping_heretic)
+
+// The First Desire painting, using a lot of the painting/eldritch framework
+/obj/item/wallframe/painting/eldritch/desire
+ name = "The First Desire"
+ desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth."
+ icon_state = "eldritch_painting_desire"
+ result_path = /obj/structure/sign/painting/eldritch/desire
+
+/obj/structure/sign/painting/eldritch/desire
+ name = "The First Desire"
+ desc = "A painting depicting a platter of flesh, just looking at it makes your stomach knot and mouth froth. Destroyable with wirecutters."
+ icon_state = "eldritch_painting_desire"
+ applied_trauma = /datum/brain_trauma/severe/flesh_desire
+ text_to_display = "What an artwork, just looking at it makes me hunger...."
+
+// The special examine interaction for this painting
+/obj/structure/sign/painting/eldritch/desire/examine_effects(mob/living/carbon/examiner)
+ if(!IS_HERETIC(examiner))
+ // Gives them some nutrition
+ examiner.adjust_nutrition(50)
+ to_chat(examiner, warning("You feel a searing pain in your stomach!"))
+ examiner.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5)
+ to_chat(examiner, span_notice("You feel less hungry, but more empty somehow?"))
+ examiner.add_mood_event("respite_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_examine)
+ return
+
+ // A list made of the organs and bodyparts the heretic can get
+ var/static/list/random_bodypart_or_organ = list(
+ /obj/item/organ/internal/brain,
+ /obj/item/organ/internal/lungs,
+ /obj/item/organ/internal/eyes,
+ /obj/item/organ/internal/ears,
+ /obj/item/organ/internal/heart,
+ /obj/item/organ/internal/liver,
+ /obj/item/organ/internal/stomach,
+ /obj/item/organ/internal/appendix,
+ /obj/item/bodypart/arm/left,
+ /obj/item/bodypart/arm/right,
+ /obj/item/bodypart/leg/left,
+ /obj/item/bodypart/leg/right
+ )
+ var/organ_or_bodypart_to_spawn = pick(random_bodypart_or_organ)
+ new organ_or_bodypart_to_spawn(drop_location())
+ to_chat(examiner, span_notice("A piece of flesh crawls out of the painting and flops onto the floor."))
+ // Adds a negative mood event to our heretic
+ examiner.add_mood_event("heretic_eldritch_hunger", /datum/mood_event/eldritch_painting/desire_heretic)
+
+// Great chaparral over rolling hills, this one doesn't have the sensor type
+/obj/item/wallframe/painting/eldritch/vines
+ name = "Great chaparral over rolling hills"
+ desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame."
+ icon_state = "eldritch_painting_vines"
+ result_path = /obj/structure/sign/painting/eldritch/vines
+
+/obj/structure/sign/painting/eldritch/vines
+ name = "Great chaparral over rolling hills"
+ desc = "A painting depicting a massive thicket, it seems to be attempting to crawl through the frame. Destroyable with wirecutters."
+ icon_state = "eldritch_painting_vines"
+ applied_trauma = null
+ // A static list of 5 pretty strong mutations, simple to expand for any admins
+ var/list/mutations = list(
+ /datum/spacevine_mutation/hardened,
+ /datum/spacevine_mutation/toxicity,
+ /datum/spacevine_mutation/thorns,
+ /datum/spacevine_mutation/fire_proof,
+ /datum/spacevine_mutation/aggressive_spread,
+ )
+ // Poppy and harebell are used in heretic rituals
+ var/list/items_to_spawn = list(
+ /obj/item/food/grown/poppy,
+ /obj/item/food/grown/harebell,
+ )
+
+/obj/structure/sign/painting/eldritch/vines/Initialize(mapload, dir, building)
+ . = ..()
+ new /datum/spacevine_controller(get_turf(src), mutations, 0, 10)
+
+/obj/structure/sign/painting/eldritch/vines/examine_effects(mob/living/carbon/examiner)
+ . = ..()
+ if(!IS_HERETIC(examiner))
+ new /datum/spacevine_controller(get_turf(examiner), mutations, 0, 10)
+ to_chat(examiner, span_notice("The thicket crawls through the frame, and you suddenly find vines beneath you..."))
+ return
+
+ var/item_to_spawn = pick(items_to_spawn)
+ to_chat(examiner, span_notice("You picture yourself in the thicket picking flowers.."))
+ new item_to_spawn(examiner.drop_location())
+ examiner.add_mood_event("heretic_vines", /datum/mood_event/eldritch_painting/heretic_vines)
+
+
+// Lady out of gates, gives a brain trauma causing the person to scratch themselves
+/obj/item/wallframe/painting/eldritch/beauty
+ name = "Lady out of gates"
+ desc = "A painting depicting a perfect lady, and I must be perfect like her..."
+ icon_state = "eldritch_painting_beauty"
+ result_path = /obj/structure/sign/painting/eldritch/beauty
+
+/obj/structure/sign/painting/eldritch/beauty
+ name = "Lady out of gates"
+ desc = "A painting depicting a perfect lady, and I must be perfect like her. Destroyable with wirecutters."
+ icon_state = "eldritch_painting_beauty"
+ applied_trauma = /datum/brain_trauma/severe/eldritch_beauty
+ text_to_display = "Her flesh glows in the pale light, and mine can too...If it wasnt for these imperfections...."
+ // Set to mutadone by default to remove mutations
+ var/list/reagents_to_add = list(/datum/reagent/medicine/mutadone)
+
+// The special examine interaction for this painting
+/obj/structure/sign/painting/eldritch/beauty/examine_effects(mob/living/carbon/examiner)
+ . = ..()
+ if(!examiner.has_dna())
+ return
+
+ if(!IS_HERETIC(examiner))
+ to_chat(examiner, "You feel changed, more perfect....")
+ examiner.easy_random_mutate(NEGATIVE + MINOR_NEGATIVE)
+ return
+
+ to_chat(examiner, "Your imperfections shed and you are restored.")
+ examiner.reagents.add_reagent(reagents_to_add, 5)
+
+// Climb over the rusted mountain, gives a brain trauma causing the person to randomly rust tiles beneath them
+/obj/item/wallframe/painting/eldritch/rust
+ name = "Climb over the rusted mountain"
+ desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling."
+ icon_state = "eldritch_painting_rust"
+ result_path = /obj/structure/sign/painting/eldritch/rust
+
+/obj/structure/sign/painting/eldritch/rust
+ name = "Climb over the rusted mountain"
+ desc = "A painting depicting something climbing a mountain of rust, it gives you an eerie feeling. Destroyable with wirecutters."
+ icon_state = "eldritch_painting_rust"
+ applied_trauma = /datum/brain_trauma/severe/rusting
+ text_to_display = "It climbs, and I will aid it...The rust calls and I shall answer..."
+
+// The special examine interaction for this painting
+/obj/structure/sign/painting/eldritch/rust/examine_effects(mob/living/carbon/examiner)
+ . = ..()
+
+ if(!IS_HERETIC(examiner))
+ to_chat(examiner, "It can wait...")
+ examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_examine)
+ return
+
+ to_chat(examiner, "You see the climber, and are inspired by it!")
+ examiner.add_mood_event("rusted_examine", /datum/mood_event/eldritch_painting/rust_heretic_examine)
diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm
index 8eb08a76427..81f9b4bc80a 100644
--- a/code/modules/antagonists/heretic/items/heretic_blades.dm
+++ b/code/modules/antagonists/heretic/items/heretic_blades.dm
@@ -145,3 +145,12 @@
after_use_message = "The Stewards hear your call..."
tool_behaviour = TOOL_CROWBAR
toolspeed = 1.3
+
+// Path of Moon's blade
+/obj/item/melee/sickly_blade/moon
+ name = "\improper moon blade"
+ desc = "A blade of iron, reflecting the truth of the earth: All join the troupe one day. \
+ A troupe bringing joy, carving smiles on their faces if they want one or not."
+ icon_state = "moon_blade"
+ inhand_icon_state = "moon_blade"
+ after_use_message = "The Moon hears your call..."
diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm
index fff184bdfb6..44e387cf970 100644
--- a/code/modules/antagonists/heretic/items/heretic_necks.dm
+++ b/code/modules/antagonists/heretic/items/heretic_necks.dm
@@ -50,3 +50,36 @@
icon = 'icons/obj/antags/eldritch.dmi'
icon_state = "eye_medalion"
w_class = WEIGHT_CLASS_SMALL
+
+
+// The amulette conversion tool used by moon heretics
+/obj/item/clothing/neck/heretic_focus/moon_amulette
+ name = "Moonlight Amulette"
+ desc = "A piece of the mind, the sight and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy."
+ icon = 'icons/obj/antags/eldritch.dmi'
+ icon_state = "moon_amulette"
+ w_class = WEIGHT_CLASS_SMALL
+ // How much damage does this item do to the targets sanity?
+ var/sanity_damage = 20
+
+/obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params)
+ var/mob/living/carbon/human/hit = target
+ if(!IS_HERETIC(user))
+ user.balloon_alert(user, "you feel a presence watching you")
+ user.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity)
+ user.mob_mood.set_sanity(user.mob_mood.sanity - 50)
+ return
+ if(hit.can_block_magic())
+ return
+ if(!hit.mob_mood)
+ return
+ if(hit.mob_mood.sanity_level < SANITY_LEVEL_CRAZY)
+ user.balloon_alert(user, "their mind is too strong!")
+ hit.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity)
+ hit.mob_mood.set_sanity(hit.mob_mood.sanity - sanity_damage)
+ else
+ user.balloon_alert(user, "their mind bends to see the truth!")
+ hit.apply_status_effect(/datum/status_effect/moon_converted)
+ user.log_message("made [target] insane.", LOG_GAME)
+ hit.log_message("was driven insane by [user]")
+ . = ..()
diff --git a/code/modules/antagonists/heretic/items/unfathomable_curio.dm b/code/modules/antagonists/heretic/items/unfathomable_curio.dm
new file mode 100644
index 00000000000..4fa86427d27
--- /dev/null
+++ b/code/modules/antagonists/heretic/items/unfathomable_curio.dm
@@ -0,0 +1,78 @@
+//Item for knock/moon heretic sidepath, it can block 5 hits of damage, acts as storage and if the heretic is examined the examiner suffers brain damage and blindness
+
+/obj/item/storage/belt/unfathomable_curio
+ name = "Unfathomable Curio"
+ desc = "It. It looks backs. It looks past. It looks in. It sees. It hides. It opens."
+ icon_state = "unfathomable_curio"
+ worn_icon_state = "unfathomable_curio"
+ content_overlays = FALSE
+ drop_sound = 'sound/items/handling/toolbelt_drop.ogg'
+ pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg'
+ //Vars used for the shield component
+ var/heretic_shield_icon = "unfathomable_shield"
+ var/max_charges = 1
+ var/recharge_start_delay = 60 SECONDS
+ var/charge_increment_delay = 60 SECONDS
+ var/charge_recovery = 1
+
+/obj/item/storage/belt/unfathomable_curio/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+ atom_storage.max_total_storage = 21
+ atom_storage.set_holdable(list(
+ /obj/item/ammo_box/strilka310/lionhunter,
+ /obj/item/bodypart, // Bodyparts are often used in rituals.
+ /obj/item/clothing/neck/eldritch_amulet,
+ /obj/item/clothing/neck/heretic_focus,
+ /obj/item/codex_cicatrix,
+ /obj/item/eldritch_potion,
+ /obj/item/food/grown/poppy, // Used to regain a Living Heart.
+ /obj/item/food/grown/harebell, // Used to reroll targets
+ /obj/item/melee/rune_carver,
+ /obj/item/melee/sickly_blade,
+ /obj/item/organ, // Organs are also often used in rituals.
+ /obj/item/reagent_containers/cup/beaker/eldritch,
+ /obj/item/stack/sheet/glass, // Glass is often used by moon heretics
+ ))
+
+ AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \
+ charge_recovery = charge_recovery, shield_icon = heretic_shield_icon, run_hit_callback = CALLBACK(src, PROC_REF(shield_damaged)))
+
+
+/obj/item/storage/belt/unfathomable_curio/equipped(mob/user, slot, initial)
+ . = ..()
+ if(!(slot & slot_flags))
+ return
+
+ if(!IS_HERETIC(user))
+ to_chat(user, span_warning("The curio wraps around you, and you feel the beating of something dark inside it..."))
+
+
+// Our on hit effect
+/obj/item/storage/belt/unfathomable_curio/proc/shield_damaged(mob/living/carbon/wearer, attack_text, new_current_charges)
+ var/list/brain_traumas = list(
+ /datum/brain_trauma/severe/mute,
+ /datum/brain_trauma/severe/flesh_desire,
+ /datum/brain_trauma/severe/eldritch_beauty,
+ /datum/brain_trauma/severe/paralysis,
+ /datum/brain_trauma/severe/monophobia
+ )
+ wearer.visible_message(span_danger("[wearer]'s veil makes [attack_text] miss, but the force behind the blow causes it to disperse!"))
+ if(IS_HERETIC(wearer))
+ return
+
+ to_chat(wearer, span_warning("Laughter echoes in your mind...."))
+ wearer.adjustOrganLoss(ORGAN_SLOT_BRAIN, 40)
+ wearer.dropItemToGround(src, TRUE)
+ wearer.gain_trauma(pick(brain_traumas) ,TRAUMA_RESILIENCE_ABSOLUTE)
+
+/obj/item/storage/belt/unfathomable_curio/examine(mob/living/carbon/user)
+ . = ..()
+ if(IS_HERETIC(user))
+ return
+
+ user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 160)
+ user.adjust_temp_blindness(5 SECONDS)
+ . += span_notice("It. It looked. IT WRAPS ITSELF AROUND ME.")
+
+
diff --git a/code/modules/antagonists/heretic/knife_effect.dm b/code/modules/antagonists/heretic/knife_effect.dm
index b1a02fb6800..0bf5a5a4b8c 100644
--- a/code/modules/antagonists/heretic/knife_effect.dm
+++ b/code/modules/antagonists/heretic/knife_effect.dm
@@ -3,7 +3,7 @@
name = "knife"
icon = 'icons/obj/service/kitchen.dmi'
icon_state = "knife"
- plane = GAME_PLANE_FOV_HIDDEN
+ layer = LOW_MOB_LAYER
/// The color the knife glows around it.
var/glow_color = "#ececff"
diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
index 1859035a85c..a7a07056114 100644
--- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm
@@ -30,7 +30,7 @@
name = "Nightwatcher's Secret"
desc = "Opens up the Path of Ash to you. \
Allows you to transmute a match and a knife into an Ashen Blade. \
- You can only create five at a time." //SKYRAT EDIT two to five
+ You can only create five at a time." //NOVA EDIT two to five
gain_text = "The City Guard know their watch. If you ask them at night, they may tell you about the ashy lantern."
next_knowledge = list(/datum/heretic_knowledge/ashen_grasp)
required_atoms = list(
diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
index 0d61bcc7b46..64b7ce3785f 100644
--- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm
@@ -35,7 +35,7 @@
name = "Principle of Hunger"
desc = "Opens up the Path of Flesh to you. \
Allows you to transmute a knife and a pool of blood into a Bloody Blade. \
- You can only create twenty at a time." //SKYRAT EDIT three to twenty
+ You can only create twenty at a time." //NOVA EDIT three to twenty
gain_text = "Hundreds of us starved, but not me... I found strength in my greed."
next_knowledge = list(/datum/heretic_knowledge/limited_amount/flesh_grasp)
required_atoms = list(
@@ -169,7 +169,7 @@
if(!soon_to_be_ghoul.mind || !soon_to_be_ghoul.client)
message_admins("[ADMIN_LOOKUPFLW(user)] is creating a voiceless dead of a body with no player.")
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as a [soon_to_be_ghoul.real_name], a voiceless dead?", ROLE_HERETIC, ROLE_HERETIC, 5 SECONDS, soon_to_be_ghoul)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a [soon_to_be_ghoul.real_name], a voiceless dead?", check_jobban = ROLE_HERETIC, role = ROLE_HERETIC, poll_time = 5 SECONDS, target_mob = soon_to_be_ghoul, pic_source = soon_to_be_ghoul, role_name_text = "voiceless dead")
if(!LAZYLEN(candidates))
loc.balloon_alert(user, "ritual failed, no ghosts!")
return FALSE
diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm
index 6c6df4c6567..c4589028fda 100644
--- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm
@@ -6,8 +6,7 @@
* A Steward's Secret
* Grasp of Lock
* > Sidepaths:
- * Ashen Eyes
- * Codex Cicatrix
+ * Mindgate
* Key Keeper’s Burden
*
* Concierge's Rite
@@ -15,8 +14,10 @@
* Ritual of Knowledge
* Burglar's Finesse
* > Sidepaths:
+ * Opening Blast
* Apetra Vulnera
- * Opening Blast
+ * Unfathomable Curio
+ * Unsealed arts
*
* Opening Blade
* Caretaker’s Last Refuge
@@ -48,7 +49,6 @@
next_knowledge = list(
/datum/heretic_knowledge/key_ring,
/datum/heretic_knowledge/medallion,
- /datum/heretic_knowledge/codex_cicatrix,
)
cost = 1
route = PATH_LOCK
@@ -147,6 +147,9 @@
/datum/heretic_knowledge/spell/apetra_vulnera,
/datum/heretic_knowledge/spell/opening_blast,
/datum/heretic_knowledge/blade_upgrade/flesh/lock,
+ /datum/heretic_knowledge/unfathomable_curio,
+ /datum/heretic_knowledge/curse/paralysis,
+ /datum/heretic_knowledge/painting,
)
spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse
cost = 2
diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
new file mode 100644
index 00000000000..79fdb515c97
--- /dev/null
+++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm
@@ -0,0 +1,269 @@
+/**
+ * # The path of Moon.
+ *
+ * Goes as follows:
+ *
+ * Moonlight Troupe
+ * Grasp of Lunacy
+ * Smile of the moon
+ * > Sidepaths:
+ * Mind Gate
+ * Ashen Eyes
+ *
+ * Mark of Moon
+ * Ritual of Knowledge
+ * Lunar Parade
+ * Moonlight Amulette
+ * > Sidepaths:
+ * Curse of Paralasys
+ * Unfathomable Curio
+ * Unsealed Arts
+ *
+ * Moonlight blade
+ * Ringleaders Rise
+ * > Sidepaths:
+ * Ashen Ritual
+ *
+ * Last Act
+ */
+/datum/heretic_knowledge/limited_amount/starting/base_moon
+ name = "Moonlight Troupe"
+ desc = "Opens up the Path of Moon to you. \
+ Allows you to transmute 2 sheets of iron and a knife into an Lunar Blade. \
+ You can only create two at a time."
+ gain_text = "Under the light of the moon the laughter echoes."
+ next_knowledge = list(/datum/heretic_knowledge/moon_grasp)
+ required_atoms = list(
+ /obj/item/knife = 1,
+ /obj/item/stack/sheet/iron = 2,
+ )
+ result_atoms = list(/obj/item/melee/sickly_blade/moon)
+ route = PATH_MOON
+
+/datum/heretic_knowledge/base_moon/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
+ add_traits(user ,TRAIT_EMPATH, REF(src))
+
+/datum/heretic_knowledge/moon_grasp
+ name = "Grasp of Lunacy"
+ desc = "Your Mansus Grasp will cause them to hallucinate everyone as lunar mass, \
+ and hides your identity for a short dur ation."
+ gain_text = "The troupe on the side of the moon showed me truth, and I took it."
+ next_knowledge = list(/datum/heretic_knowledge/spell/moon_smile)
+ cost = 1
+ route = PATH_MOON
+
+/datum/heretic_knowledge/moon_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
+ RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
+
+/datum/heretic_knowledge/moon_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
+ UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
+
+/datum/heretic_knowledge/moon_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target)
+ SIGNAL_HANDLER
+ source.apply_status_effect(/datum/status_effect/moon_grasp_hide)
+
+ if(!iscarbon(target))
+ return
+ var/mob/living/carbon/carbon_target = target
+ to_chat(carbon_target, span_danger("You hear echoing laughter from above"))
+ carbon_target.cause_hallucination(/datum/hallucination/delusion/preset/moon, "delusion/preset/moon hallucination caused by mansus grasp")
+ carbon_target.mob_mood.set_sanity(carbon_target.mob_mood.sanity-20)
+
+/datum/heretic_knowledge/spell/moon_smile
+ name = "Smile of the moon"
+ desc = "Grants you Smile of the moon, a ranged spell muting, blinding and deafening the target for a\
+ duration based on their sanity."
+ gain_text = "The moon smiles upon us all and those who see its true side can bring its joy."
+ next_knowledge = list(
+ /datum/heretic_knowledge/mark/moon_mark,
+ /datum/heretic_knowledge/medallion,
+ /datum/heretic_knowledge/spell/mind_gate,
+ )
+ spell_to_add = /datum/action/cooldown/spell/pointed/moon_smile
+ cost = 1
+ route = PATH_MOON
+
+/datum/heretic_knowledge/mark/moon_mark
+ name = "Mark of Moon"
+ desc = "Your Mansus Grasp now applies the Mark of Moon. The mark is triggered from an attack with your Moon Blade. \
+ When triggered, the victim is confused, and when the mark is applied they are pacified \
+ until attacked."
+ gain_text = "The troupe on the moon would dance all day long \
+ and in that dance the moon would smile upon us \
+ but when the night came its smile would dull forced to gaze on the earth."
+ next_knowledge = list(/datum/heretic_knowledge/knowledge_ritual/moon)
+ route = PATH_MOON
+ mark_type = /datum/status_effect/eldritch/moon
+
+/datum/heretic_knowledge/mark/moon_mark/trigger_mark(mob/living/source, mob/living/target)
+ . = ..()
+ if(!.)
+ return
+
+ // Also refunds 75% of charge!
+ var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in source.actions
+ if(grasp)
+ grasp.next_use_time = min(round(grasp.next_use_time - grasp.cooldown_time * 0.75, 0), 0)
+ grasp.build_all_button_icons()
+
+/datum/heretic_knowledge/knowledge_ritual/moon
+ next_knowledge = list(/datum/heretic_knowledge/spell/moon_parade)
+ route = PATH_MOON
+
+/datum/heretic_knowledge/spell/moon_parade
+ name = "Lunar Parade"
+ desc = "Grants you Lunar Parade, a spell that - after a short charge - sends a carnival forward \
+ when hitting someone they are forced to join the parade and suffer hallucinations."
+ gain_text = "The music like a reflection of the soul compelled them, like moths to a flame they followed"
+ next_knowledge = list(
+ /datum/heretic_knowledge/moon_amulette,
+ /datum/heretic_knowledge/reroll_targets,
+ /datum/heretic_knowledge/unfathomable_curio,
+ /datum/heretic_knowledge/curse/paralysis,
+ /datum/heretic_knowledge/painting,
+ )
+ spell_to_add = /datum/action/cooldown/spell/pointed/projectile/moon_parade
+ cost = 1
+ route = PATH_MOON
+
+
+/datum/heretic_knowledge/moon_amulette
+ name = "Moonlight Amulette"
+ desc = "Allows you to transmute 2 sheets of glass, a pair of eyes, a brain and a tie \
+ if the item is used on someone with low sanity they go berserk attacking everyone \
+ , if their sanity isnt low enough it decreases their mood."
+ gain_text = "At the head of the parade he stood, the moon condensed into one mass, a reflection of the soul."
+ next_knowledge = list(/datum/heretic_knowledge/blade_upgrade/moon)
+ required_atoms = list(
+ /obj/item/organ/internal/eyes = 1,
+ /obj/item/organ/internal/brain = 1,
+ /obj/item/stack/sheet/glass = 2,
+ /obj/item/clothing/neck/tie = 1,
+ )
+ result_atoms = list(/obj/item/clothing/neck/heretic_focus/moon_amulette)
+ cost = 1
+ route = PATH_MOON
+
+/datum/heretic_knowledge/blade_upgrade/moon
+ name = "Moonlight Blade"
+ desc = "Your blade now deals brain damage, causes random hallucinations and does sanity damage."
+ gain_text = "His wit was sharp as a blade, cutting through the lie to bring us joy."
+ next_knowledge = list(/datum/heretic_knowledge/spell/moon_ringleader)
+ cost = 1
+ route = PATH_MOON
+
+/datum/heretic_knowledge/blade_upgrade/moon/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade)
+ if(source == target)
+ return
+
+ target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10, 100)
+ target.cause_hallucination( \
+ get_random_valid_hallucination_subtype(/datum/hallucination/body), \
+ "upgraded path of moon blades", \
+ )
+ target.emote(pick("giggle", "laugh"))
+ target.mob_mood.set_sanity(target.mob_mood.sanity - 10)
+
+/datum/heretic_knowledge/spell/moon_ringleader
+ name = "Ringleaders Rise"
+ desc = "Grants you Ringleaders Rise, an aoe spell that deals more brain damage the lower the sanity of everyone in the AoE,\
+ causes hallucinations with those who have less sanity getting more. \
+ If their sanity is low enough turns them insane, the spell then halves their sanity."
+ gain_text = "I grabbed his hand and we rose, those who saw the truth rose with us. \
+ The ringleader pointed up and the dim light of truth illuminated us further."
+ next_knowledge = list(
+ /datum/heretic_knowledge/ultimate/moon_final,
+ /datum/heretic_knowledge/summon/ashy,
+ )
+ spell_to_add = /datum/action/cooldown/spell/aoe/moon_ringleader
+ cost = 1
+ route = PATH_MOON
+
+/datum/heretic_knowledge/ultimate/moon_final
+ name = "The Last Act"
+ desc = "The ascension ritual of the Path of Moon. \
+ Bring 3 corpses with more than 50 brain damage to a transmutation rune to complete the ritual. \
+ When completed, you become a harbinger of madness gaining and aura of passive sanity decrease \
+ , confusion increase and if their sanity is low enough brain damage and blindness. \
+ 1/5th of the crew will turn into acolytes and follow your command, they will all recieve moonlight amulettes."
+ gain_text = "We dived down towards the crowd, his soul splitting off in search of greater venture \
+ for where the Ringleader had started the parade, I shall continue it unto the suns demise \
+ WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!"
+ route = PATH_MOON
+
+/datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice)
+
+ var/brain_damage = sacrifice.get_organ_loss(ORGAN_SLOT_BRAIN)
+ // Checks if our target has enough brain damage
+ if(brain_damage < 50)
+ return FALSE
+
+ return ..()
+
+/datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc)
+ . = ..()
+ priority_announce("[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \
+ The truth shall finally devour the lie! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES)
+
+ user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user)
+ ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src))
+
+ RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life))
+
+ // Roughly 1/5th of the station will rise up as lunatics to the heretic
+ for (var/mob/living/carbon/human/crewmate as anything in GLOB.human_list)
+ // How many lunatics we have
+ var/amount_of_lunatics = 0
+ if(isnull(crewmate.mind))
+ continue
+ if(crewmate.stat == DEAD | UNCONSCIOUS)
+ continue
+ if(!is_station_level(crewmate))
+ continue
+ // Heretics, lunatics and monsters shouldn't become lunatics because they either have a master or have a mansus grasp
+ if(IS_HERETIC_OR_MONSTER(crewmate))
+ to_chat(crewmate, span_boldwarning("[user]'s rise is influencing those who are weak willed. Their minds shall rend." ))
+ continue
+ // Mindshielded and anti-magic folks are immune against this effect because this is a magical mind effect
+ if(HAS_TRAIT(crewmate, TRAIT_MINDSHIELD) || crewmate.can_block_magic(MAGIC_RESISTANCE))
+ to_chat(crewmate, span_boldwarning("You feel shielded from something." ))
+ continue
+ if(amount_of_lunatics > length(GLOB.human_list) * 0.2)
+ to_chat(crewmate, span_boldwarning("You feel uneasy, as if for a brief moment something was gazing at you." ))
+ continue
+ var/datum/antagonist/lunatic/lunatic = crewmate.mind.add_antag_datum(/datum/antagonist/lunatic)
+ lunatic.set_master(user.mind, user)
+ var/obj/item/clothing/neck/heretic_focus/moon_amulette/moon_amulette = new
+ crewmate.put_in_active_hand(moon_amulette)
+ crewmate.emote("laugh")
+
+/datum/heretic_knowledge/ultimate/moon_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired)
+ SIGNAL_HANDLER
+
+ visible_hallucination_pulse(
+ center = get_turf(source),
+ radius = 7,
+ hallucination_duration = 60 SECONDS
+ )
+
+ for(var/mob/living/carbon/carbon_view in view(5, source))
+ var/carbon_sanity = carbon_view.mob_mood.sanity
+ if(carbon_view.stat == DEAD | UNCONSCIOUS)
+ continue
+ if(IS_HERETIC_OR_MONSTER(carbon_view))
+ continue
+ carbon_view.adjust_confusion(2 SECONDS)
+ carbon_view.mob_mood.set_sanity(carbon_sanity - 5)
+ if(carbon_sanity < 30)
+ if(SPT_PROB(20, seconds_per_tick))
+ to_chat(carbon_view, span_warning("you feel your mind beginning to rend!"))
+ carbon_view.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
+ if(carbon_sanity < 10)
+ if(SPT_PROB(20, seconds_per_tick))
+ to_chat(carbon_view, span_warning("it echoes through you!"))
+ visible_hallucination_pulse(
+ center = get_turf(carbon_view),
+ radius = 7,
+ hallucination_duration = 50 SECONDS
+ )
+ carbon_view.adjust_temp_blindness(5 SECONDS)
diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
index 3bf980eb466..6817dc9de44 100644
--- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm
@@ -345,7 +345,7 @@
rusted_turfs += centre
START_PROCESSING(SSprocessing, src)
-/datum/rust_spread/Destroy(force, ...)
+/datum/rust_spread/Destroy(force)
centre = null
edge_turfs.Cut()
rusted_turfs.Cut()
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
index e2887d73757..b66ec468e71 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
@@ -27,7 +27,7 @@
/// An assoc list of [ref] to [timers] - a list of all the timers of people in the shadow realm currently
var/list/return_timers
-/datum/heretic_knowledge/hunt_and_sacrifice/Destroy(force, ...)
+/datum/heretic_knowledge/hunt_and_sacrifice/Destroy(force)
heretic_mind = null
LAZYCLEARLIST(target_blacklist)
return ..()
diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
new file mode 100644
index 00000000000..0f0a79c5b5b
--- /dev/null
+++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm
@@ -0,0 +1,100 @@
+// Sidepaths for knowledge between Knock and Moon.
+
+/datum/heretic_knowledge/spell/mind_gate
+ name = "Mind Gate"
+ desc = "Grants you Mind Gate, a spell \
+ which deals you 20 brain damage but the target suffers a hallucination,\
+ is left confused for 10 seconds, suffers oxygen loss and brain damage."
+ gain_text = "My mind swings open like a gate, and its insight will let me percieve the truth."
+ next_knowledge = list(
+ /datum/heretic_knowledge/key_ring,
+ /datum/heretic_knowledge/spell/moon_smile,
+ )
+ spell_to_add = /datum/action/cooldown/spell/pointed/mind_gate
+ cost = 1
+ route = PATH_SIDE
+
+/datum/heretic_knowledge/unfathomable_curio
+ name = "Unfathomable Curio"
+ desc = "Allows you to transmute 3 rods, a brain and a belt into an Unfathomable Curio\
+ , a belt that can hold blades and items for rituals. Whilst worn will also \
+ veil you, allowing you to take 5 hits without suffering damage, this veil will recharge very slowly \
+ outside of combat. When examined the examiner will suffer brain damage and blindness."
+ gain_text = "The mansus holds many a curio, some are not meant for the mortal eye."
+ next_knowledge = list(
+ /datum/heretic_knowledge/spell/burglar_finesse,
+ /datum/heretic_knowledge/spell/moon_parade,
+ )
+ required_atoms = list(
+ /obj/item/organ/internal/brain = 1,
+ /obj/item/stack/rods = 3,
+ /obj/item/storage/belt = 1,
+ )
+ result_atoms = list(/obj/item/storage/belt/unfathomable_curio)
+ cost = 1
+ route = PATH_SIDE
+
+/datum/heretic_knowledge/painting
+ name = "Unsealed Arts"
+ desc = "Allows you to transmute a canvas and an additional item to create a piece of art, these paintings \
+ have different effects depending on the additional item added. Possible paintings: \
+ The sister and He Who Wept: Eyes. When a non-heretic looks at the painting they will begin to hallucinate everyone as heretics. \
+ The First Desire: Any bodypart. Increases the hunger of non-heretics, when examined drops an organ or body part at your feet. \
+ Great chaparral over rolling hills: Any grown food. Spreads kudzu when placed, when examined grants a flower. \
+ Lady out of gates: Gloves. Causes non-heretics to scratch themselves, when examined removes all your mutations. \
+ Climb over the rusted mountain: Trash. Causes non-heretics to rust the floor they walk on. \
+ These effects are mitigated for a few minutes when a non-heretic suffering an effect examines the painting that caused the effect."
+ gain_text = "A wind of inspiration blows through me, past the walls and past the gate inspirations lie, yet to be depicted. \
+ They yearn for mortal eyes again, and I shall grant that wish."
+ next_knowledge = list(
+ /datum/heretic_knowledge/spell/burglar_finesse,
+ /datum/heretic_knowledge/spell/moon_parade,
+ )
+ required_atoms = list(/obj/item/canvas = 1)
+ result_atoms = list(/obj/item/canvas)
+ cost = 1
+ route = PATH_SIDE
+
+/datum/heretic_knowledge/painting/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc)
+ if(locate(/obj/item/organ/internal/eyes) in atoms)
+ src.result_atoms = list(/obj/item/wallframe/painting/eldritch/weeping)
+ src.required_atoms = list(
+ /obj/item/canvas = 1,
+ /obj/item/organ/internal/eyes = 1,
+ )
+ return TRUE
+
+ if(locate(/obj/item/bodypart) in atoms)
+ src.result_atoms = list(/obj/item/wallframe/painting/eldritch/desire)
+ src.required_atoms = list(
+ /obj/item/canvas = 1,
+ /obj/item/bodypart = 1,
+ )
+ return TRUE
+
+ if(locate(/obj/item/food/grown) in atoms)
+ src.result_atoms = list(/obj/item/wallframe/painting/eldritch/vines)
+ src.required_atoms = list(
+ /obj/item/canvas = 1,
+ /obj/item/food/grown = 1,
+ )
+ return TRUE
+
+ if(locate(/obj/item/clothing/gloves) in atoms)
+ src.result_atoms = list(/obj/item/wallframe/painting/eldritch/beauty)
+ src.required_atoms = list(
+ /obj/item/canvas = 1,
+ /obj/item/clothing/gloves = 1,
+ )
+ return TRUE
+
+ if(locate(/obj/item/trash) in atoms)
+ src.result_atoms = list(/obj/item/wallframe/painting/eldritch/rust)
+ src.required_atoms = list(
+ /obj/item/canvas = 1,
+ /obj/item/trash = 1,
+ )
+ return TRUE
+
+ user.balloon_alert(user, "no additional atom present!")
+ return FALSE
diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm
index 6c39bd9ca00..fb063a730c1 100644
--- a/code/modules/antagonists/heretic/knowledge/void_lore.dm
+++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm
@@ -30,7 +30,7 @@
name = "Glimmer of Winter"
desc = "Opens up the Path of Void to you. \
Allows you to transmute a knife in sub-zero temperatures into a Void Blade. \
- You can only create five at a time." //SKYRAT EDIT two to five
+ You can only create five at a time." //NOVA EDIT two to five
gain_text = "I feel a shimmer in the air, the air around me gets colder. \
I start to realize the emptiness of existence. Something's watching me."
next_knowledge = list(/datum/heretic_knowledge/void_grasp)
diff --git a/code/modules/antagonists/heretic/magic/lunatic_track.dm b/code/modules/antagonists/heretic/magic/lunatic_track.dm
new file mode 100644
index 00000000000..dac3e7233b0
--- /dev/null
+++ b/code/modules/antagonists/heretic/magic/lunatic_track.dm
@@ -0,0 +1,91 @@
+/datum/action/cooldown/lunatic_track
+ name = "Moonlight Echo"
+ desc = "Track your ringleader."
+ check_flags = AB_CHECK_CONSCIOUS
+ background_icon_state = "bg_heretic"
+ button_icon_state = "moon_smile"
+ ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
+ cooldown_time = 4 SECONDS
+
+/datum/action/cooldown/lunatic_track/Grant(mob/granted)
+ if(!IS_LUNATIC(granted))
+ return
+ return ..()
+
+/datum/action/cooldown/lunatic_track/Activate(atom/target)
+ var/datum/antagonist/lunatic/lunatic_datum = IS_LUNATIC(owner)
+ var/mob/living/carbon/human/ascended_heretic = lunatic_datum.ascended_body
+ if(!(ascended_heretic))
+ owner.balloon_alert(owner, "what cruel fate, your master is gone...")
+ StartCooldown(1 SECONDS)
+ return FALSE
+ playsound(owner, 'sound/effects/singlebeat.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE)
+ owner.balloon_alert(owner, get_balloon_message(ascended_heretic))
+
+ if(ascended_heretic.stat == DEAD)
+ to_chat(owner, span_hierophant("[ascended_heretic] is dead. Weep for the lie has struck out."))
+
+ StartCooldown()
+ return TRUE
+
+
+/// Gets the balloon message for the heretic we are tracking.
+/datum/action/cooldown/lunatic_track/proc/get_balloon_message(mob/living/carbon/human/tracked_mob)
+ var/balloon_message = generate_balloon_message(tracked_mob)
+ if(tracked_mob.stat == DEAD)
+ balloon_message = "they're dead, " + balloon_message
+
+ return balloon_message
+
+/// Create the text for the balloon message
+/datum/action/cooldown/lunatic_track/proc/generate_balloon_message(mob/living/carbon/human/tracked_mob)
+ var/balloon_message = "error text!"
+ var/turf/their_turf = get_turf(tracked_mob)
+ var/turf/our_turf = get_turf(owner)
+ var/their_z = their_turf?.z
+ var/our_z = our_turf?.z
+
+ var/dist = get_dist(our_turf, their_turf)
+ var/dir = get_dir(our_turf, their_turf)
+
+ switch(dist)
+ if(0 to 15)
+ balloon_message = "very near, [dir2text(dir)]!"
+ if(16 to 31)
+ balloon_message = "near, [dir2text(dir)]!"
+ if(32 to 127)
+ balloon_message = "far, [dir2text(dir)]!"
+ else
+ balloon_message = "very far!"
+
+ // Early returns here if we don't need to tell them the z-levels
+ if(our_z == their_z)
+ return balloon_message
+
+ if(is_mining_level(their_z))
+ balloon_message = "on lavaland!"
+ return balloon_message
+
+ if(is_away_level(their_z) || is_secret_level(their_z))
+ balloon_message = "beyond the gateway!"
+ return balloon_message
+
+ // We already checked if they are on lavaland or gateway, so if they arent there or on the station we can early return
+ if(!is_station_level(their_z))
+ balloon_message = "on another plane!"
+ return balloon_message
+
+ // They must be on station because we have checked every other z-level, and since we arent on station we should go there
+ if(!is_station_level(our_z))
+ balloon_message = "on station!"
+ return balloon_message
+
+ if(our_z > their_z)
+ balloon_message = "below you!"
+ return balloon_message
+
+ if(our_z < their_z)
+ balloon_message = "above you!"
+ return balloon_message
+
+ return balloon_message
diff --git a/code/modules/antagonists/heretic/magic/madness_touch.dm b/code/modules/antagonists/heretic/magic/madness_touch.dm
index 06db9f2464e..a5d075f3a14 100644
--- a/code/modules/antagonists/heretic/magic/madness_touch.dm
+++ b/code/modules/antagonists/heretic/magic/madness_touch.dm
@@ -1,7 +1,7 @@
-// Currently unused.
+// Currently unused
/datum/action/cooldown/spell/touch/mad_touch
name = "Touch of Madness"
- desc = "A touch spell that drains your enemy's sanity."
+ desc = "A touch spell that drains your enemy's sanity and knocks them down."
background_icon_state = "bg_heretic"
overlay_icon_state = "bg_heretic_border"
button_icon = 'icons/mob/actions/actions_ecult.dmi'
diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm
index dce84b93053..4ba6aceb200 100644
--- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm
+++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm
@@ -21,7 +21,7 @@
return TRUE // This baby can hit anything
/datum/action/cooldown/spell/touch/mansus_grasp/can_cast_spell(feedback = TRUE)
- return ..() && !!IS_HERETIC(owner)
+ return ..() && (!!IS_HERETIC(owner) || !!IS_LUNATIC(owner))
/datum/action/cooldown/spell/touch/mansus_grasp/on_antimagic_triggered(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster)
victim.visible_message(
diff --git a/code/modules/antagonists/heretic/magic/mind_gate.dm b/code/modules/antagonists/heretic/magic/mind_gate.dm
new file mode 100644
index 00000000000..eaf9e08b969
--- /dev/null
+++ b/code/modules/antagonists/heretic/magic/mind_gate.dm
@@ -0,0 +1,39 @@
+/datum/action/cooldown/spell/pointed/mind_gate
+ name = "Mind Gate"
+ desc = "Deals you 20 brain damage and the target suffers a hallucination, \
+ is left confused for 10 seconds, and suffers oxygen loss and brain damage."
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_heretic_border"
+ button_icon = 'icons/mob/actions/actions_ecult.dmi'
+ button_icon_state = "mind_gate"
+
+ sound = 'sound/magic/curse.ogg'
+ school = SCHOOL_FORBIDDEN
+ cooldown_time = 20 SECONDS
+
+ invocation = "Op' 'oY 'Mi'd"
+ invocation_type = INVOCATION_WHISPER
+ spell_requirements = NONE
+ cast_range = 6
+
+ active_msg = "You prepare to open your mind..."
+
+/datum/action/cooldown/spell/pointed/mind_gate/can_cast_spell(feedback = TRUE)
+ return ..() && isliving(owner)
+
+/datum/action/cooldown/spell/pointed/mind_gate/is_valid_target(atom/cast_on)
+ return ..() && ishuman(cast_on)
+
+/datum/action/cooldown/spell/pointed/mind_gate/cast(mob/living/carbon/human/cast_on, mob/living/carbon/human/owner)
+ . = ..()
+ if(cast_on.can_block_magic(antimagic_flags))
+ to_chat(cast_on, span_notice("Your mind feels closed."))
+ to_chat(owner, span_warning("Their mind doesn't swing open, but neither does yours."))
+ return FALSE
+
+ cast_on.adjust_confusion(10 SECONDS)
+ cast_on.adjustOxyLoss(30)
+ cast_on.cause_hallucination(get_random_valid_hallucination_subtype(/datum/hallucination/body), "Mind gate, cast by [owner]")
+ cast_on.cause_hallucination(/datum/hallucination/delusion/preset/heretic/gate, "Caused by mindgate")
+ cast_on.adjustOrganLoss(ORGAN_SLOT_BRAIN, 30)
+ owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20, 140)
diff --git a/code/modules/antagonists/heretic/magic/moon_parade.dm b/code/modules/antagonists/heretic/magic/moon_parade.dm
new file mode 100644
index 00000000000..e24ca3f276c
--- /dev/null
+++ b/code/modules/antagonists/heretic/magic/moon_parade.dm
@@ -0,0 +1,100 @@
+/datum/action/cooldown/spell/pointed/projectile/moon_parade
+ name = "Lunar parade"
+ desc = "This unleashes the parade towards a target."
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_heretic_border"
+ button_icon = 'icons/mob/actions/actions_ecult.dmi'
+ button_icon_state = "moon_parade"
+ ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
+
+ sound = 'sound/magic/cosmic_energy.ogg'
+ school = SCHOOL_FORBIDDEN
+ cooldown_time = 30 SECONDS
+
+ invocation = "L'N'R P'RAD"
+ invocation_type = INVOCATION_SHOUT
+ spell_requirements = NONE
+
+ active_msg = "You prepare to make them join the parade!"
+ deactive_msg = "You stop the music and halt the parade... for now."
+ cast_range = 12
+ projectile_type = /obj/projectile/moon_parade
+
+
+/obj/projectile/moon_parade
+ name = "Lunar parade"
+ icon_state = "lunar_parade"
+ damage = 0
+ damage_type = BURN
+ speed = 1
+ range = 75
+ ricochets_max = 40
+ ricochet_chance = 500
+ ricochet_incidence_leeway = 0
+ pixel_speed_multiplier = 0.2
+ projectile_piercing = PASSMOB|PASSVEHICLE
+ ///looping sound datum for our projectile.
+ var/datum/looping_sound/moon_parade/soundloop
+ // A list of the people we hit
+ var/list/mobs_hit = list()
+
+/obj/projectile/moon_parade/Initialize(mapload)
+ . = ..()
+ soundloop = new(src, TRUE)
+
+/obj/projectile/moon_parade/prehit_pierce(atom/A)
+ . = ..()
+
+ var/mob/living/caster = firer
+ var/mob/living/victim = A
+
+ if(caster == victim)
+ return PROJECTILE_PIERCE_PHASE
+
+ if(!caster.mind)
+ return PROJECTILE_PIERCE_HIT
+
+ var/datum/antagonist/heretic_monster/monster = victim.mind?.has_antag_datum(/datum/antagonist/heretic_monster)
+ if(monster?.master == caster.mind)
+ return PROJECTILE_PIERCE_PHASE
+
+ var/datum/antagonist/lunatic/lunatic = victim.mind?.has_antag_datum(/datum/antagonist/lunatic)
+ if(lunatic?.ascended_heretic == caster.mind)
+ return PROJECTILE_PIERCE_PHASE
+
+ // Anti-magic destroys the projectile for consistency and counterplay
+ if(victim.can_block_magic(MAGIC_RESISTANCE))
+ visible_message(span_warning("The parade hits [victim] and a sudden wave of clarity comes over you!"))
+ return PROJECTILE_DELETE_WITHOUT_HITTING
+
+
+/obj/projectile/moon_parade/on_hit(atom/target, blocked = 0, pierce_hit)
+ . = ..()
+ var/mob/living/victim = target
+
+ RegisterSignal(victim, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(moon_block_move), override=TRUE)
+
+ victim.AddComponent(/datum/component/leash, src, distance = 1)
+ victim.balloon_alert(victim,"you feel unable to move away from the parade!")
+ victim.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
+ victim.cause_hallucination(/datum/hallucination/delusion/preset/moon, "delusion/preset/moon hallucination caused by lunar parade")
+
+ //Lowers sanity
+ victim.mob_mood.set_sanity(victim.mob_mood.sanity - 20)
+
+ // Uses weakref to prevent qdeleting them
+ mobs_hit |= WEAKREF(victim)
+
+/obj/projectile/moon_parade/Destroy()
+ for(var/datum/weakref/mob_ref in mobs_hit)
+ var/mob/living/real_mob = mob_ref.resolve()
+ UnregisterSignal(real_mob, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE)
+ mobs_hit.Cut()
+ soundloop.stop()
+ return ..()
+
+// Blocks movement in order to make it appear like the character is transfixed to the projectile and wandering after it
+// Coded this way because its a simple way to hold the illusion compared to other methods
+/obj/projectile/moon_parade/proc/moon_block_move(datum/source)
+ SIGNAL_HANDLER
+ return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE
diff --git a/code/modules/antagonists/heretic/magic/moon_ringleader.dm b/code/modules/antagonists/heretic/magic/moon_ringleader.dm
new file mode 100644
index 00000000000..29f61188a19
--- /dev/null
+++ b/code/modules/antagonists/heretic/magic/moon_ringleader.dm
@@ -0,0 +1,63 @@
+/datum/action/cooldown/spell/aoe/moon_ringleader
+ name = "Ringleaders Rise"
+ desc = "Big AoE spell that deals more brain damage the lower the sanity of everyone in the AoE and it also causes hallucinations with those who have less sanity getting more. \
+ If their sanity is low enough they snap and go insane, the spell then halves their sanity."
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_heretic_border"
+ button_icon = 'icons/mob/actions/actions_ecult.dmi'
+ button_icon_state = "moon_ringleader"
+ sound = 'sound/effects/moon_parade.ogg'
+
+ school = SCHOOL_FORBIDDEN
+ cooldown_time = 1 MINUTES
+
+ invocation = "R''S 'E"
+ invocation_type = INVOCATION_SHOUT
+ spell_requirements = NONE
+
+ aoe_radius = 5
+ /// Effect for when the spell triggers
+ var/obj/effect/moon_effect = /obj/effect/temp_visual/moon_ringleader
+
+/datum/action/cooldown/spell/aoe/moon_ringleader/cast(mob/living/caster)
+ new moon_effect(get_turf(caster))
+ return ..()
+
+/datum/action/cooldown/spell/aoe/moon_ringleader/get_things_to_cast_on(atom/center, radius_override)
+ var/list/stuff = list()
+ var/list/o_range = orange(center, radius_override || aoe_radius) - list(owner, center)
+ for(var/mob/living/carbon/nearby_mob in o_range)
+ if(nearby_mob.stat == DEAD)
+ continue
+ if(!nearby_mob.mob_mood)
+ continue
+ if(IS_HERETIC_OR_MONSTER(nearby_mob))
+ continue
+ if(nearby_mob.can_block_magic(antimagic_flags))
+ continue
+
+ stuff += nearby_mob
+
+ return stuff
+
+/datum/action/cooldown/spell/aoe/moon_ringleader/cast_on_thing_in_aoe(mob/living/carbon/victim, mob/living/caster)
+ var/victim_sanity = victim.mob_mood.sanity
+
+ victim.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100 - victim_sanity, 160)
+ repeat_string((120 - victim_sanity) / 10,victim.cause_hallucination(get_random_valid_hallucination_subtype(/datum/hallucination/body),"ringleaders rise"))
+ if(victim_sanity < 15)
+ victim.apply_status_effect(/datum/status_effect/moon_converted)
+ caster.log_message("made [victim] insane.", LOG_GAME)
+ victim.log_message("was driven insane by [caster]")
+ victim.mob_mood.set_sanity(victim_sanity * 0.5)
+
+/obj/effect/temp_visual/moon_ringleader
+ icon = 'icons/effects/eldritch.dmi'
+ icon_state = "ring_leader_effect"
+ alpha = 180
+ duration = 6
+
+/obj/effect/temp_visual/moon_ringleader/Initialize(mapload)
+ . = ..()
+ transform = transform.Scale(10)
+
diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm
new file mode 100644
index 00000000000..75aba2c2ced
--- /dev/null
+++ b/code/modules/antagonists/heretic/magic/moon_smile.dm
@@ -0,0 +1,49 @@
+/datum/action/cooldown/spell/pointed/moon_smile
+ name = "Smile of the moon"
+ desc = "Lets you turn the gaze of the moon on someone \
+ temporarily blinding, muting, deafening and confusing a single target."
+ background_icon_state = "bg_heretic"
+ overlay_icon_state = "bg_heretic_border"
+ button_icon = 'icons/mob/actions/actions_ecult.dmi'
+ button_icon_state = "moon_smile"
+ ranged_mousepointer = 'icons/effects/mouse_pointers/moon_target.dmi'
+
+ sound = 'sound/magic/blind.ogg'
+ school = SCHOOL_FORBIDDEN
+ cooldown_time = 20 SECONDS
+
+ invocation = "Mo'N S'M'LE"
+ invocation_type = INVOCATION_SHOUT
+ spell_requirements = NONE
+ cast_range = 6
+
+ active_msg = "You prepare to let them see the true face..."
+
+/datum/action/cooldown/spell/pointed/moon_smile/can_cast_spell(feedback = TRUE)
+ return ..() && isliving(owner)
+
+/datum/action/cooldown/spell/pointed/moon_smile/is_valid_target(atom/cast_on)
+ return ..() && ishuman(cast_on)
+
+/datum/action/cooldown/spell/pointed/moon_smile/cast(mob/living/carbon/human/cast_on)
+ . = ..()
+ /// The duration of these effects are based on sanity, mainly for flavor but also to make it a weaker alpha strike
+ var/moon_smile_duration = (150 - cast_on.mob_mood.sanity) / 10
+ if(cast_on.can_block_magic(antimagic_flags))
+ to_chat(cast_on, span_notice("The moon turns, its smile no longer set on you."))
+ to_chat(owner, span_warning("The moon does not smile upon them."))
+ return FALSE
+
+ playsound(cast_on, 'sound/hallucinations/i_see_you1.ogg', 50, 1)
+ to_chat(cast_on, span_warning("Your eyes cry out in pain, your ears bleed and your lips seal! THE MOON SMILES UPON YOU!"))
+ cast_on.adjust_temp_blindness(moon_smile_duration SECONDS)
+ cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS)
+
+ var/obj/item/organ/internal/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS)
+ ears?.adjustEarDamage(0, moon_smile_duration)
+
+ cast_on.adjust_silence(moon_smile_duration SECONDS)
+ cast_on.add_mood_event("moon_smile", /datum/mood_event/moon_smile)
+ //Lowers sanity
+ cast_on.mob_mood.set_sanity(cast_on.mob_mood.sanity - 20)
+ return TRUE
diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm
index a3f16a2aeaf..350ca0f29c1 100644
--- a/code/modules/antagonists/heretic/magic/void_phase.dm
+++ b/code/modules/antagonists/heretic/magic/void_phase.dm
@@ -1,6 +1,6 @@
/datum/action/cooldown/spell/pointed/void_phase
name = "Void Phase"
- desc = "Let's you blink to your pointed destination, causes 3x3 aoe damage bubble \
+ desc = "Lets you blink to your pointed destination, causes 3x3 aoe damage bubble \
around your pointed destination and your current location. \
It has a minimum range of 3 tiles and a maximum range of 9 tiles."
background_icon_state = "bg_heretic"
diff --git a/code/modules/antagonists/heretic/moon_lunatic.dm b/code/modules/antagonists/heretic/moon_lunatic.dm
new file mode 100644
index 00000000000..e4824073ce8
--- /dev/null
+++ b/code/modules/antagonists/heretic/moon_lunatic.dm
@@ -0,0 +1,49 @@
+// A type of antagonist created by the moon ascension
+/datum/antagonist/lunatic
+ name = "\improper Lunatic"
+ hijack_speed = 0
+ antagpanel_category = ANTAG_GROUP_HORRORS
+ show_in_antagpanel = FALSE
+ suicide_cry = "PRAISE THE RINGLEADER!!"
+ antag_moodlet = /datum/mood_event/heretics/lunatic
+ can_assign_self_objectives = FALSE
+ hardcore_random_bonus = FALSE
+ // The mind of the ascended heretic who created us
+ var/datum/mind/ascended_heretic
+ // The body of the ascended heretic who created us
+ var/mob/living/carbon/human/ascended_body
+
+/// Runs when the moon heretic creates us, used to give the lunatic a master
+/datum/antagonist/lunatic/proc/set_master(datum/mind/heretic_master, mob/living/carbon/human/heretic_body)
+ src.ascended_heretic = heretic_master
+ src.ascended_body = heretic_body
+
+ var/datum/objective/lunatic_obj = new()
+ lunatic_obj.explanation_text = "Assist your master [heretic_master]."
+
+ to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!"))
+
+/datum/antagonist/lunatic/greet()
+ owner.current.playsound_local(get_turf(owner.current), 'sound/effects/moon_parade.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
+ return ..()
+
+/datum/antagonist/lunatic/apply_innate_effects(mob/living/mob_override)
+ var/mob/living/our_mob = mob_override || owner.current
+ handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
+ our_mob.faction |= FACTION_HERETIC
+
+ var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track()
+ var/datum/action/cooldown/spell/touch/mansus_grasp/mad_touch = new /datum/action/cooldown/spell/touch/mansus_grasp()
+ mad_touch.Grant(our_mob)
+ moon_track.Grant(our_mob)
+
+/datum/antagonist/lunatic/remove_innate_effects(mob/living/mob_override)
+ var/mob/living/our_mob = mob_override || owner.current
+ handle_clown_mutation(our_mob, removing = FALSE)
+ our_mob.faction -= FACTION_HERETIC
+
+// Mood event given to moon acolytes
+/datum/mood_event/heretics/lunatic
+ description = "THE TRUTH REVEALED, THE LIE SLAIN."
+ mood_change = 10
+
diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm
index 4a5941fe55c..607f485ff64 100644
--- a/code/modules/antagonists/heretic/status_effects/buffs.dm
+++ b/code/modules/antagonists/heretic/status_effects/buffs.dm
@@ -237,6 +237,7 @@
addtimer(CALLBACK(src, PROC_REF(create_blade)), blade_recharge_time)
+
/datum/status_effect/caretaker_refuge
id = "Caretaker’s Last Refuge"
status_type = STATUS_EFFECT_REFRESH
@@ -292,3 +293,22 @@
/datum/status_effect/caretaker_refuge/proc/prevent_cuff(datum/source, mob/attemptee)
SIGNAL_HANDLER
return COMSIG_CARBON_CUFF_PREVENT
+
+// Path Of Moon status effect which hides the identity of the heretic
+/datum/status_effect/moon_grasp_hide
+ id = "Moon Grasp Hide Identity"
+ status_type = STATUS_EFFECT_REFRESH
+ duration = 15 SECONDS
+ alert_type = /atom/movable/screen/alert/status_effect/moon_grasp_hide
+
+/datum/status_effect/moon_grasp_hide/on_apply()
+ owner.add_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), id)
+ return TRUE
+
+/datum/status_effect/moon_grasp_hide/on_remove()
+ owner.remove_traits(list(TRAIT_UNKNOWN, TRAIT_SILENT_FOOTSTEPS), id)
+
+/atom/movable/screen/alert/status_effect/moon_grasp_hide
+ name = "Blessing of The Moon"
+ desc = "The Moon clouds their vision, as the sun always has yours."
+ icon_state = "moon_hide"
diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm
index c286c7b5092..7fffc4a5706 100644
--- a/code/modules/antagonists/heretic/status_effects/debuffs.dm
+++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm
@@ -214,3 +214,82 @@
/datum/status_effect/heretic_lastresort/on_remove()
REMOVE_TRAIT(owner, TRAIT_IGNORESLOWDOWN, TRAIT_STATUS_EFFECT(id))
owner.AdjustUnconscious(20 SECONDS, ignore_canstun = TRUE)
+
+
+
+/// Used by moon heretics to make people mad
+/datum/status_effect/moon_converted
+ id = "moon converted"
+ alert_type = /atom/movable/screen/alert/status_effect/moon_converted
+ duration = -1
+ status_type = STATUS_EFFECT_REPLACE
+ ///used to track damage
+ var/damage_sustained = 0
+ ///overlay used to indicate that someone is marked
+ var/mutable_appearance/moon_insanity_overlay
+ /// icon file for the overlay
+ var/effect_icon = 'icons/effects/eldritch.dmi'
+ /// icon state for the overlay
+ var/effect_icon_state = "moon_insanity_overlay"
+
+/atom/movable/screen/alert/status_effect/moon_converted
+ name = "Moon Converted"
+ desc = "THEY LIE, THEY ALL LIE!!! SLAY THEM!!! BURN THEM!!! MAKE THEM SEE THE TRUTH!!!"
+ icon_state = "lastresort"
+
+/datum/status_effect/moon_converted/on_creation()
+ . = ..()
+ moon_insanity_overlay = mutable_appearance(effect_icon, effect_icon_state, ABOVE_MOB_LAYER)
+
+/datum/status_effect/moon_converted/Destroy()
+ QDEL_NULL(moon_insanity_overlay)
+ return ..()
+
+/datum/status_effect/moon_converted/on_apply()
+ RegisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
+ // Heals them so people who are in crit can have this affect applied on them and still be of some use for the heretic
+ owner.adjustBruteLoss( -150 + owner.mob_mood.sanity)
+ owner.adjustFireLoss(-150 + owner.mob_mood.sanity)
+
+ to_chat(owner, span_warning(("THE MOON SHOWS YOU THE TRUTH AND THE LIARS WISH TO COVER IT, SLAY THEM ALL!!!")))
+ owner.balloon_alert(owner, "they lie..THEY ALL LIE!!!")
+ owner.AdjustUnconscious(7 SECONDS, ignore_canstun = FALSE)
+ ADD_TRAIT(owner, TRAIT_MUTE, REF(src))
+ RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(update_owner_overlay))
+ owner.update_appearance(UPDATE_OVERLAYS)
+ owner.cause_hallucination(/datum/hallucination/delusion/preset/moon, "[id] status effect", duration = duration, affects_us = FALSE, affects_others = TRUE)
+ return TRUE
+
+/datum/status_effect/moon_converted/proc/on_damaged(datum/source, damage, damagetype)
+ SIGNAL_HANDLER
+
+ // Stamina damage is funky so we will ignore it
+ if(damagetype == STAMINA)
+ return
+
+ damage_sustained += damage
+
+ if (damage_sustained < 75)
+ return
+ qdel(src)
+
+/datum/status_effect/moon_converted/proc/update_owner_overlay(atom/source, list/overlays)
+ SIGNAL_HANDLER
+ overlays += moon_insanity_overlay
+
+/datum/status_effect/moon_converted/on_remove()
+ // Span warning and unconscious so they realize they aren't evil anymore
+ to_chat(owner, span_warning("Your mind is cleared from the effect of the manus, your alligiences are as they were before"))
+ REMOVE_TRAIT(owner, TRAIT_MUTE, REF(src))
+ owner.AdjustUnconscious(5 SECONDS, ignore_canstun = FALSE)
+ owner.log_message("[owner] is no longer insane.", LOG_GAME)
+ UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS)
+ UnregisterSignal(owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
+ owner.update_appearance(UPDATE_OVERLAYS)
+ return ..()
+
+
+/atom/movable/screen/alert/status_effect/moon_converted
+ name = "Moon Converted"
+ desc = "They LIE, SLAY ALL OF THE THEM!!! THE LIARS OF THE SUN MUST FALL!!!"
+ icon_state = "moon_insanity"
diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm
index 4cdc29288c4..c8d2a04e64a 100644
--- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm
+++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm
@@ -260,3 +260,48 @@
/datum/status_effect/eldritch/lock/on_remove()
REMOVE_TRAIT(owner, TRAIT_ALWAYS_NO_ACCESS, STATUS_EFFECT_TRAIT)
return ..()
+
+// MARK OF MOON
+
+/datum/status_effect/eldritch/moon
+ effect_icon_state = "emark8"
+ ///Used for checking if the pacifism effect should end early
+ var/damage_sustained = 0
+
+/datum/status_effect/eldritch/moon/on_apply()
+ . = ..()
+ ADD_TRAIT(owner, TRAIT_PACIFISM, id)
+ owner.emote(pick("giggle", "laugh"))
+ owner.balloon_alert(owner, "you feel unable to hurt a soul!")
+ RegisterSignal (owner, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_damaged))
+ return TRUE
+
+/// Checks for damage so the heretic can't just attack them with another weapon whilst they are unable to fight back
+/datum/status_effect/eldritch/moon/proc/on_damaged(datum/source, damage, damagetype)
+ SIGNAL_HANDLER
+
+ // The grasp itself deals stamina damage so we will ignore it
+ if(damagetype == STAMINA)
+ return
+
+ damage_sustained += damage
+
+ if(damage_sustained < 15)
+ return
+
+ // Removes the trait in here since we don't wanna destroy the mark before its detonated or allow detonation triggers with other weapons
+ REMOVE_TRAIT(owner, TRAIT_PACIFISM, id)
+ owner.balloon_alert(owner, "you feel able to once again strike!")
+
+/datum/status_effect/eldritch/moon/on_effect()
+ owner.adjust_confusion(30 SECONDS)
+ owner.emote(pick("giggle", "laugh"))
+ owner.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity)
+ return ..()
+
+/datum/status_effect/eldritch/moon/on_remove()
+ . = ..()
+ UnregisterSignal (owner, COMSIG_MOB_APPLY_DAMAGE)
+
+ // Incase the trait was not removed earlier
+ REMOVE_TRAIT(owner, TRAIT_PACIFISM, id)
diff --git a/code/modules/antagonists/heretic/structures/lock_final.dm b/code/modules/antagonists/heretic/structures/lock_final.dm
index c8232062931..8cb6c06f3cb 100644
--- a/code/modules/antagonists/heretic/structures/lock_final.dm
+++ b/code/modules/antagonists/heretic/structures/lock_final.dm
@@ -37,7 +37,7 @@
/// Ask ghosts if they want to make some noise
/obj/structure/lock_tear/proc/poll_ghosts()
- var/list/candidates = poll_ghost_candidates("Would you like to be a random eldritch monster attacking the crew?", ROLE_SENTIENCE, ROLE_SENTIENCE, 10 SECONDS, POLL_IGNORE_HERETIC_MONSTER)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Would you like to be a random eldritch monster attacking the crew?", check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_HERETIC_MONSTER, pic_source = src, role_name_text = "eldritch monster")
while(LAZYLEN(candidates))
var/mob/dead/observer/candidate = pick_n_take(candidates)
ghost_to_monster(candidate, should_ask = FALSE)
diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm
index f625e809432..31c252eacf1 100644
--- a/code/modules/antagonists/heretic/transmutation_rune.dm
+++ b/code/modules/antagonists/heretic/transmutation_rune.dm
@@ -116,7 +116,6 @@
if(length(banned_atom_types))
if(nearby_atom.type in banned_atom_types)
continue
-
// This item is a valid type. Add it to our selected atoms list.
selected_atoms |= nearby_atom
// If it's a stack, we gotta see if it has more than one inside,
@@ -178,6 +177,7 @@
// - If the ritual was success (Returned TRUE), proceede to clean up the atoms involved in the ritual. The result has already been spawned by this point.
// - If the ritual failed for some reason (Returned FALSE), likely due to no ghosts taking a role or an error, we shouldn't clean up anything, and reset.
var/ritual_result = ritual.on_finished_recipe(user, selected_atoms, loc)
+
if(ritual_result)
ritual.cleanup_atoms(selected_atoms)
diff --git a/code/modules/antagonists/hypnotized/hypnotized.dm b/code/modules/antagonists/hypnotized/hypnotized.dm
index 2ee17b671aa..4f1f49aa3be 100644
--- a/code/modules/antagonists/hypnotized/hypnotized.dm
+++ b/code/modules/antagonists/hypnotized/hypnotized.dm
@@ -6,7 +6,7 @@
antag_hud_name = "brainwashed"
ui_name = "AntagInfoBrainwashed"
show_in_antagpanel = TRUE
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
show_name_in_check_antagonists = TRUE
count_against_dynamic_roll_chance = FALSE
diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm
index 778df3c7311..f53f21344bc 100644
--- a/code/modules/antagonists/malf_ai/malf_ai.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai.dm
@@ -33,12 +33,12 @@
owner.special_role = job_rank
if(give_objectives)
forge_ai_objectives()
- // SKYRAT EDIT START - Moving voice changing to Malf only
+ // NOVA EDIT START - Moving voice changing to Malf only
#ifdef AI_VOX
var/mob/living/silicon/ai/malf_ai = owner.current
malf_ai.vox_voices += VOX_MIL
#endif
- // SKYRAT EDIT END
+ // NOVA EDIT END
employer = pick(GLOB.ai_employers)
if(!employer)
@@ -60,12 +60,12 @@
var/mob/living/silicon/ai/malf_ai = owner.current
malf_ai.set_zeroth_law("")
malf_ai.remove_malf_abilities()
- // SKYRAT EDIT START - Moving voice changing to Malf only
+ // NOVA EDIT START - Moving voice changing to Malf only
#ifdef AI_VOX
malf_ai.vox_voices -= VOX_MIL
malf_ai.vox_type = VOX_NORMAL
#endif
- // SKYRAT EDIT END
+ // NOVA EDIT END
QDEL_NULL(malf_ai.malf_picker)
owner.special_role = null
@@ -96,7 +96,7 @@
/// Generates a special objective and adds it to the objective list.
/datum/antagonist/malf_ai/proc/forge_special_objective()
- var/special_pick = rand(3,4) // SKYRAT EDIT - REMOVING PURGE/BLOCK
+ var/special_pick = rand(3,4) // NOVA EDIT - REMOVING PURGE/BLOCK
switch(special_pick)
if(1)
var/datum/objective/block/block_objective = new
@@ -247,7 +247,7 @@
/datum/antagonist/malf_ai/roundend_report()
var/list/result = list()
- //var/malf_ai_won = TRUE // SKYRAT EDIT REMOVAL
+ //var/malf_ai_won = TRUE // NOVA EDIT REMOVAL
result += printplayer(owner)
@@ -255,19 +255,19 @@
if(objectives.len) //If the traitor had no objectives, don't need to process this.
var/count = 1
for(var/datum/objective/objective in objectives)
- // SKYRAT EDIT START - No greentext
+ // NOVA EDIT START - No greentext
/*
if(!objective.check_completion())
malf_ai_won = FALSE
objectives_text += "Objective #[count] : [objective.explanation_text] [objective.get_roundend_success_suffix()]"
*/
objectives_text += "Objective #[count] : [objective.explanation_text]"
- // SKYRAT EDIT END - No greentext
+ // NOVA EDIT END - No greentext
count++
result += objectives_text
- // SKYRAT EDIT REMOVAL START
+ // NOVA EDIT REMOVAL START
/*
var/special_role_text = lowertext(name)
diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
index 1a93a1f4af6..aa14cb411c4 100644
--- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm
@@ -619,7 +619,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/// Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting.
/datum/ai_module/utility/place_cyborg_transformer
name = "Robotic Factory (Removes Shunting)"
- description = "Build a machine anywhere, using expensive nanomachines, that will slowly create loyal cyborgs for you." // Skyrat edit
+ description = "Build a machine anywhere, using expensive nanomachines, that will slowly create loyal cyborgs for you." // NOVA EDIT
cost = 100
power_type = /datum/action/innate/ai/place_transformer
unlock_text = span_notice("You make contact with Space Amazon and request a robotics factory for delivery.")
@@ -627,7 +627,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/datum/action/innate/ai/place_transformer
name = "Place Robotics Factory"
- desc = "Places a machine that creates cyborgs efficiently. Conveyor belts included!" // Skyrat edit
+ desc = "Places a machine that creates cyborgs efficiently. Conveyor belts included!" // NOVA EDIT
button_icon_state = "robotic_factory"
uses = 1
auto_use_uses = FALSE //So we can attempt multiple times
@@ -650,7 +650,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
active = FALSE
return
var/turf/T = get_turf(owner_AI.eyeobj)
- var/obj/machinery/transformer_rp/conveyor = new(T) //SKYRAT EDIT CHANGE - SILLICONQOL - ORIGINAL: var/obj/machinery/transformer/conveyor = new(T)
+ var/obj/machinery/transformer_rp/conveyor = new(T) //NOVA EDIT CHANGE - SILLICONQOL - ORIGINAL: var/obj/machinery/transformer/conveyor = new(T)
conveyor.master_ai = owner
playsound(T, 'sound/effects/phasein.ogg', 100, TRUE)
if(owner_AI.can_shunt) //prevent repeated messages
@@ -891,7 +891,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
/datum/ai_module/upgrade/mecha_domination
name = "Unlock Mech Domination"
description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. \
- Once uploaded to the mech, it is impossible to leave. Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \
+ Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \
Upgrade is done immediately upon purchase."
cost = 30
upgrade = TRUE
diff --git a/code/modules/antagonists/nightmare/nightmare_organs.dm b/code/modules/antagonists/nightmare/nightmare_organs.dm
index ce5ff427a21..50bfd8e1619 100644
--- a/code/modules/antagonists/nightmare/nightmare_organs.dm
+++ b/code/modules/antagonists/nightmare/nightmare_organs.dm
@@ -9,6 +9,7 @@
desc = "A fleshy growth that was dug out of the skull of a Nightmare."
icon = 'icons/obj/medical/organs/organs.dmi'
icon_state = "brain-x-d"
+ applied_status = /datum/status_effect/shadow_regeneration/nightmare
///Our associated shadow jaunt spell, for all nightmares
var/datum/action/cooldown/spell/jaunt/shadow_walk/our_jaunt
///Our associated terrorize spell, for antagonist nightmares
@@ -16,6 +17,7 @@
/obj/item/organ/internal/brain/shadow/nightmare/on_insert(mob/living/carbon/brain_owner)
. = ..()
+
if(brain_owner.dna.species.id != SPECIES_NIGHTMARE)
brain_owner.set_species(/datum/species/shadow/nightmare)
visible_message(span_warning("[brain_owner] thrashes as [src] takes root in [brain_owner.p_their()] body!"))
@@ -27,19 +29,32 @@
terrorize_spell = new(src)
terrorize_spell.Grant(brain_owner)
- RegisterSignal(brain_owner, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(dodge_bullets))
-
/obj/item/organ/internal/brain/shadow/nightmare/on_remove(mob/living/carbon/brain_owner)
. = ..()
QDEL_NULL(our_jaunt)
QDEL_NULL(terrorize_spell)
- UnregisterSignal(brain_owner, COMSIG_ATOM_PRE_BULLET_ACT)
-/obj/item/organ/internal/brain/shadow/nightmare/proc/dodge_bullets(mob/living/carbon/human/source, obj/projectile/hitting_projectile, def_zone)
+/atom/movable/screen/alert/status_effect/shadow_regeneration/nightmare
+ name = "Lightless Domain"
+ desc = "Bathed in soothing darkness you will slowly regenerate, even past the point of death. \
+ Heightened reflexes will allow you to dodge projectile weapons."
+
+/datum/status_effect/shadow_regeneration/nightmare
+ alert_type = /atom/movable/screen/alert/status_effect/shadow_regeneration/nightmare
+
+/datum/status_effect/shadow_regeneration/nightmare/on_apply()
+ . = ..()
+ if (!.)
+ return FALSE
+ RegisterSignal(owner, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(dodge_bullets))
+ return TRUE
+
+/datum/status_effect/shadow_regeneration/nightmare/on_remove()
+ UnregisterSignal(owner, COMSIG_ATOM_PRE_BULLET_ACT)
+ return ..()
+
+/datum/status_effect/shadow_regeneration/nightmare/proc/dodge_bullets(mob/living/carbon/human/source, obj/projectile/hitting_projectile, def_zone)
SIGNAL_HANDLER
- var/turf/dodge_turf = source.loc
- if(!istype(dodge_turf) || dodge_turf.get_lumcount() >= SHADOW_SPECIES_LIGHT_THRESHOLD)
- return NONE
source.visible_message(
span_danger("[source] dances in the shadows, evading [hitting_projectile]!"),
span_danger("You evade [hitting_projectile] with the cover of darkness!"),
diff --git a/code/modules/antagonists/ninja/energy_katana.dm b/code/modules/antagonists/ninja/energy_katana.dm
index 296ef455153..dadd07bf947 100644
--- a/code/modules/antagonists/ninja/energy_katana.dm
+++ b/code/modules/antagonists/ninja/energy_katana.dm
@@ -69,7 +69,7 @@
/datum/action/innate/dash/ninja
current_charges = 3
max_charges = 3
- charge_rate = 350 //SKYRAT EDIT CHANGE - ORIGINAL: 200
+ charge_rate = 350 //NOVA EDIT CHANGE - ORIGINAL: 200
beam_length = 1 SECONDS
recharge_sound = null
diff --git a/code/modules/antagonists/ninja/ninjaDrainAct.dm b/code/modules/antagonists/ninja/ninjaDrainAct.dm
index ac5b960e3f0..eeb590a21a9 100644
--- a/code/modules/antagonists/ninja/ninjaDrainAct.dm
+++ b/code/modules/antagonists/ninja/ninjaDrainAct.dm
@@ -290,12 +290,12 @@
return COMPONENT_CANCEL_ATTACK_CHAIN
/mob/living/silicon/robot/proc/ninjadrain_charge(mob/living/carbon/human/ninja, obj/item/mod/module/hacker/hacking_module)
- //SKYRAT EDIT: ADDITION START
+ //NOVA EDIT: ADDITION START
var/list/modelselected = list()
modelselected["Assault"] = "/obj/item/robot_model/ninja"
modelselected["Medical"] = "/obj/item/robot_model/ninja/ninja_medical"
modelselected["Saboteur"] = "/obj/item/robot_model/ninja_saboteur"
- //SKYRAT EDIT: ADDITION END
+ //NOVA EDIT: ADDITION END
if(!do_after(ninja, 6 SECONDS, target = src))
return
spark_system.start()
@@ -306,11 +306,11 @@
UnlinkSelf()
ionpulse = TRUE
laws = new /datum/ai_laws/ninja_override()
- //SKYRAT EDIT CHANGE BEGIN - Role Selection
- //model.transform_to(pick(/obj/item/robot_model/syndicate, /obj/item/robot_model/syndicate_medical, /obj/item/robot_model/saboteur)) - SKYRAT EDIT - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN - Role Selection
+ //model.transform_to(pick(/obj/item/robot_model/syndicate, /obj/item/robot_model/syndicate_medical, /obj/item/robot_model/saboteur)) - NOVA EDIT - ORIGINAL
var/choice = input(src,"What role do you wish to become?","Select Role") in sort_list(modelselected)
model.transform_to(modelselected[choice])
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja)
diff --git a/code/modules/antagonists/ninja/outfit.dm b/code/modules/antagonists/ninja/outfit.dm
index 9b81dd75f05..b2c912fc3f1 100644
--- a/code/modules/antagonists/ninja/outfit.dm
+++ b/code/modules/antagonists/ninja/outfit.dm
@@ -10,7 +10,7 @@
internals_slot = ITEM_SLOT_RPOCKET
belt = /obj/item/energy_katana
back = /obj/item/mod/control/pre_equipped/ninja
- //implants = list(/obj/item/implant/explosive) SKYRAT EDIT REMOVAL
+ //implants = list(/obj/item/implant/explosive) NOVA EDIT REMOVAL
/datum/outfit/ninja/post_equip(mob/living/carbon/human/ninja)
var/obj/item/grenade/c4/ninja/charge = ninja.l_store
diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
index 0c4422c6213..ccf06fa974b 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclear_bomb/_nuclear_bomb.dm
@@ -520,11 +520,11 @@ GLOBAL_VAR(station_nuke_source)
safety = TRUE
update_appearance()
sound_to_playing_players('sound/machines/alarm.ogg')
- sound_to_playing_players('modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg') // SKYRAT EDIT ADDITION
+ sound_to_playing_players('modular_nova/modules/alerts/sound/misc/delta_countdown.ogg') // NOVA EDIT ADDITION
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NUKE_DEVICE_DETONATING, src)
- if(SSticker?.mode)
+ if(SSticker.HasRoundStarted())
SSticker.roundend_check_paused = TRUE
addtimer(CALLBACK(src, PROC_REF(actually_explode)), 10 SECONDS)
return TRUE
diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
index da72e41ef51..9d05efdc757 100644
--- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm
+++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm
@@ -12,10 +12,10 @@
msg += "\"01000001 01001001\"."
if(TRACK_INFILTRATOR)
msg += "\"vasvygengbefuvc\"."
- /// SKYRAT EDIT BEGIN
+ /// NOVA EDIT BEGIN
if(TRACK_GOLDENEYE)
msg += "\"goldeneye_key\"."
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
else
msg = "Its tracking indicator is blank."
. += msg
@@ -53,10 +53,10 @@
target = apc
if(TRACK_INFILTRATOR)
target = SSshuttle.getShuttle("syndicate")
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(TRACK_GOLDENEYE)
target = SSgoldeneye.goldeneye_keys[1] // Track the first goldeneye key in existence.
- // SKYRAT EDIT END
+ // NOVA EDIT END
..()
/obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode)
diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm
index 7690ab19efd..68fe9b24778 100644
--- a/code/modules/antagonists/nukeop/nukeop.dm
+++ b/code/modules/antagonists/nukeop/nukeop.dm
@@ -569,12 +569,14 @@
var/tc_to_spawn = tgui_input_number(admin, "How much TC to spawn with?", "TC", 0, 100)
- var/list/nuke_candidates = poll_ghost_candidates(
+ var/list/nuke_candidates = SSpolling.poll_ghost_candidates(
"Do you want to play as an emergency syndicate reinforcement?",
- ROLE_OPERATIVE,
- ROLE_OPERATIVE,
- 30 SECONDS,
- POLL_IGNORE_SYNDICATE,
+ check_jobban = ROLE_OPERATIVE,
+ role = ROLE_OPERATIVE,
+ poll_time = 30 SECONDS,
+ ignore_category = POLL_IGNORE_SYNDICATE,
+ pic_source = /obj/structure/sign/poster/contraband/gorlex_recruitment,
+ role_name_text = "syndicate reinforcement",
)
nuke_candidates -= admin // may be easy to fat-finger say yes. so just don't
diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm
index 92b3140d47b..a866ef4c2fc 100644
--- a/code/modules/antagonists/obsessed/obsessed.dm
+++ b/code/modules/antagonists/obsessed/obsessed.dm
@@ -1,8 +1,9 @@
/datum/antagonist/obsessed
name = "Obsessed"
show_in_antagpanel = TRUE
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
job_rank = ROLE_OBSESSED
+ show_to_ghosts = TRUE
antag_hud_name = "obsessed"
show_name_in_check_antagonists = TRUE
roundend_category = "obsessed"
diff --git a/code/modules/antagonists/pirate/pirate_event.dm b/code/modules/antagonists/pirate/pirate_event.dm
index fd1dcc84034..bcee6f15675 100644
--- a/code/modules/antagonists/pirate/pirate_event.dm
+++ b/code/modules/antagonists/pirate/pirate_event.dm
@@ -66,7 +66,7 @@
if(chosen_gang.paid_off)
return
- var/list/candidates = poll_ghost_candidates("Do you wish to be considered for a pirate crew of [chosen_gang.name]?", ROLE_TRAITOR)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a pirate crew of [chosen_gang.name]?", check_jobban = ROLE_TRAITOR, pic_source = /obj/item/claymore/cutlass, role_name_text = "pirate crew")
shuffle_inplace(candidates)
var/template_key = "pirate_[chosen_gang.ship_template_id]"
diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
index 7521ff15549..cd1ad0b02c0 100644
--- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
+++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
@@ -18,18 +18,17 @@
update_appearance()
/obj/machinery/shuttle_scrambler/process()
- if(active)
- if(is_station_level(z))
- var/datum/bank_account/account = SSeconomy.get_dep_account(ACCOUNT_CAR)
- if(account)
- var/siphoned = min(account.account_balance,siphon_per_tick)
- account.adjust_money(-siphoned)
- credits_stored += siphoned
- interrupt_research()
- else
- return
- else
- STOP_PROCESSING(SSobj,src)
+ if(!active)
+ return PROCESS_KILL
+
+ if(!is_station_level(z))
+ return
+
+ var/datum/bank_account/account = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ var/siphoned = min(account.account_balance,siphon_per_tick)
+ account.adjust_money(-siphoned)
+ credits_stored += siphoned
+ interrupt_research()
///Turns on the siphoning, and its various side effects
/obj/machinery/shuttle_scrambler/proc/toggle_on(mob/user)
diff --git a/code/modules/antagonists/revenant/haunted_item.dm b/code/modules/antagonists/revenant/haunted_item.dm
index d035e2694d9..30116d6802b 100644
--- a/code/modules/antagonists/revenant/haunted_item.dm
+++ b/code/modules/antagonists/revenant/haunted_item.dm
@@ -65,7 +65,7 @@
src.types_which_dispell_us = types_which_dispell_us || default_dispell_types
src.despawn_message = despawn_message
-/datum/component/haunted_item/Destroy(force, silent)
+/datum/component/haunted_item/Destroy(force)
var/obj/item/haunted_item = parent
// Handle these two specifically in Destroy() instead of clear_haunting(),
// because we want to make sure they always get dealt with no matter how the component is removed
diff --git a/code/modules/antagonists/separatist/separatist.dm b/code/modules/antagonists/separatist/separatist.dm
index 6830cba8aef..932a3d577e1 100644
--- a/code/modules/antagonists/separatist/separatist.dm
+++ b/code/modules/antagonists/separatist/separatist.dm
@@ -14,7 +14,7 @@
src.potential_recruits = potential_recruits
src.department = department
-/datum/team/nation/Destroy(force, ...)
+/datum/team/nation/Destroy(force)
department = null
UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED)
. = ..()
diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm
index 730042b57b1..a2bec8ae761 100644
--- a/code/modules/antagonists/space_ninja/space_ninja.dm
+++ b/code/modules/antagonists/space_ninja/space_ninja.dm
@@ -73,7 +73,7 @@
doorobjective.doors_required = rand(15,40)
doorobjective.explanation_text = "Use your gloves to doorjack [doorobjective.doors_required] airlocks on the station."
objectives += doorobjective
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(length(get_crewmember_minds()) >= BOMB_POP_REQUIREMENT)
//Explosive plant, the bomb will register its completion on priming
var/datum/objective/plant_explosive/bombobjective = new /datum/objective/plant_explosive()
@@ -86,12 +86,12 @@
if(bombobjective.detonation_location)
bombobjective.explanation_text = "Detonate your starter bomb in [bombobjective.detonation_location]. Note that the bomb will not work anywhere else!"
objectives += bombobjective
- //SKYRAT EDIT END
+ //NOVA EDIT END
//Security Scramble, set to complete upon using your gloves on a security console
var/datum/objective/securityobjective = new /datum/objective/security_scramble()
objectives += securityobjective
- /* SKYRAT EDIT REMOVAL
+ /* NOVA EDIT REMOVAL
//Message of Terror, set to complete upon using your gloves a communication console
var/datum/objective/communicationobjective = new /datum/objective/terror_message()
objectives += communicationobjective
diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
new file mode 100644
index 00000000000..47a3c704194
--- /dev/null
+++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm
@@ -0,0 +1,72 @@
+///Spawns a contractor partner to a spawning user, with a given key to assign to the new player.
+/proc/spawn_contractor_partner(mob/living/user, key)
+ var/mob/living/carbon/human/partner = new()
+ var/datum/outfit/contractor_partner/partner_outfit = new()
+
+ partner_outfit.equip(partner)
+
+ var/obj/structure/closet/supplypod/arrival_pod = new(null, STYLE_SYNDICATE)
+ arrival_pod.explosionSize = list(0,0,0,1)
+ arrival_pod.bluespace = TRUE
+
+ var/turf/free_location = find_obstruction_free_location(2, user)
+
+ // We really want to send them - if we can't find a nice location just land it on top of them.
+ if (!free_location)
+ free_location = get_turf(user)
+
+ partner.forceMove(arrival_pod)
+ partner.ckey = key
+
+ /// We give a reference to the mind that'll be the support unit
+ var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.make_contractor_support() // NOVA EDIT CHANGE - ORIGINAL: var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.add_antag_datum(/datum/antagonist/traitor/contractor_support)
+
+ to_chat(partner, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]")
+ to_chat(partner, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]")
+
+ new /obj/effect/pod_landingzone(free_location, arrival_pod)
+ return new_datum
+
+/// Support unit gets it's own very basic antag datum for admin logging.
+/datum/antagonist/traitor/contractor_support
+ name = "Contractor Support Unit"
+ show_in_roundend = FALSE
+ give_objectives = TRUE
+ give_uplink = FALSE
+
+/datum/antagonist/traitor/contractor_support/forge_traitor_objectives()
+ var/datum/objective/generic_objective = new
+ generic_objective.name = "Follow Contractor's Orders"
+ generic_objective.explanation_text = "Follow your orders. Assist agents in this mission area."
+ generic_objective.completed = TRUE
+ objectives += generic_objective
+
+/datum/antagonist/traitor/contractor_support/forge_ending_objective()
+ return
+
+/datum/outfit/contractor_partner
+ name = "Contractor Support Unit"
+
+ uniform = /obj/item/clothing/under/chameleon
+ suit = /obj/item/clothing/suit/chameleon
+ back = /obj/item/storage/backpack
+ belt = /obj/item/modular_computer/pda/chameleon
+ mask = /obj/item/clothing/mask/cigarette/syndicate
+ shoes = /obj/item/clothing/shoes/chameleon/noslip
+ ears = /obj/item/radio/headset/chameleon
+ id = /obj/item/card/id/advanced/chameleon
+ r_hand = /obj/item/storage/toolbox/syndicate
+ id_trim = /datum/id_trim/chameleon/operative
+
+ backpack_contents = list(
+ /obj/item/storage/box/survival,
+ /obj/item/implanter/uplink,
+ /obj/item/clothing/mask/chameleon,
+ /obj/item/storage/fancy/cigarettes/cigpack_syndicate,
+ /obj/item/lighter,
+ )
+
+/datum/outfit/contractor_partner/post_equip(mob/living/carbon/human/H, visualsOnly)
+ . = ..()
+ var/obj/item/clothing/mask/cigarette/syndicate/cig = H.get_item_by_slot(ITEM_SLOT_MASK)
+ cig.light()
diff --git a/code/modules/antagonists/traitor/contractor/contractor_hub.dm b/code/modules/antagonists/traitor/contractor/contractor_hub.dm
new file mode 100644
index 00000000000..6fd5ac87435
--- /dev/null
+++ b/code/modules/antagonists/traitor/contractor/contractor_hub.dm
@@ -0,0 +1,69 @@
+/datum/contractor_hub
+ ///The current contract in progress, and can be null if no contract is in progress.
+ var/datum/syndicate_contract/current_contract
+ ///List of all available syndicate contracts that can be taken.
+ var/list/datum/syndicate_contract/assigned_contracts = list()
+
+ ///Reference to a contractor teammate, if one has been purchased.
+ var/datum/antagonist/traitor/contractor_support/contractor_teammate
+
+ ///List of all people currently used as targets, to not roll doubles.
+ var/list/assigned_targets = list()
+
+ ///Amount of contracts that have already been completed, for flavor in the UI & round-end logs.
+ var/contracts_completed = 0
+ ///How much TC has been paid out, for flavor in the UI & round-end logs.
+ var/contract_TC_payed_out = 0
+ ///How much TC we can cash out currently. Used when redeeming TC and for round-end logs.
+ var/contract_TC_to_redeem = 0
+
+/datum/contractor_hub/proc/create_contracts(datum/mind/owner)
+ // 6 initial contracts
+ var/list/to_generate = list(
+ CONTRACT_PAYOUT_LARGE,
+ CONTRACT_PAYOUT_MEDIUM,
+ CONTRACT_PAYOUT_MEDIUM, //NOVA EDIT CHANGE - ORIGINAL: CONTRACT_PAYOUT_SMALL
+ CONTRACT_PAYOUT_SMALL,
+ CONTRACT_PAYOUT_SMALL,
+ CONTRACT_PAYOUT_SMALL
+ )
+
+ //What the fuck
+ if(length(to_generate) > length(GLOB.manifest.locked))
+ to_generate.Cut(1, length(GLOB.manifest.locked))
+
+ // We don't want the sum of all the payouts to be under this amount
+ var/lowest_TC_threshold = 30
+
+ var/total = 0
+ var/lowest_paying_sum = 0
+ var/datum/syndicate_contract/lowest_paying_contract
+
+ // Randomise order, so we don't have contracts always in payout order.
+ to_generate = shuffle(to_generate)
+
+ // Support contract generation happening multiple times
+ var/start_index = 1
+ if (assigned_contracts.len != 0)
+ start_index = assigned_contracts.len + 1
+
+ // Generate contracts, and find the lowest paying.
+ for(var/i in 1 to to_generate.len)
+ var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[i])
+ var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus
+
+ assigned_targets.Add(contract_to_add.contract.target)
+
+ if (!lowest_paying_contract || (contract_payout_total < lowest_paying_sum))
+ lowest_paying_sum = contract_payout_total
+ lowest_paying_contract = contract_to_add
+
+ total += contract_payout_total
+ contract_to_add.id = start_index
+ assigned_contracts.Add(contract_to_add)
+
+ start_index++
+
+ // If the threshold for TC payouts isn't reached, boost the lowest paying contract
+ if (total < lowest_TC_threshold)
+ lowest_paying_contract.contract.payout_bonus += (lowest_TC_threshold - total)
diff --git a/code/modules/antagonists/traitor/contractor/contractor_items.dm b/code/modules/antagonists/traitor/contractor/contractor_items.dm
new file mode 100644
index 00000000000..90c495358f2
--- /dev/null
+++ b/code/modules/antagonists/traitor/contractor/contractor_items.dm
@@ -0,0 +1,53 @@
+/obj/item/pinpointer/crew/contractor
+ name = "contractor pinpointer"
+ desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate."
+ icon_state = "pinpointer_syndicate"
+ worn_icon_state = "pinpointer_black"
+ minimum_range = 25
+ has_owner = TRUE
+ ignore_suit_sensor_level = TRUE
+
+/obj/item/storage/box/contractor/fulton_extraction
+ name = "Fulton Extraction Kit"
+ icon_state = "syndiebox"
+ illustration = "writing_syndie"
+
+/obj/item/storage/box/contractor/fulton_extraction/PopulateContents()
+ new /obj/item/extraction_pack/syndicate(src)
+ new /obj/item/fulton_core(src)
+
+/obj/item/paper/contractor_guide
+ name = "Contractor Guide"
+ default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,\
+ this kit will provide you contracts to take on for TC payments.\
+ Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the\
+ Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed\
+ to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
\
+ Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your\
+ targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.
\
+ The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,\
+ with two Rep being provided each time you complete a contract.
\
+ Using the tablet \
+ \
+ Open the Syndicate Contract Uplink program. \
+ Here, you can accept a contract, and redeem your TC payments from completed contracts. \
+ The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the\
+ other number regardless of if they were alive or dead. \
+ Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them\
+ inside the pod. \
+ \
+ Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it\
+ unavailable to take on again.
\
+ The tablet can also be recharged at any cell charger.
\
+ Extracting \
+ \
+ Make sure both yourself and your target are at the dropoff. \
+ Call the extraction, and stand back from the drop point. \
+ If it fails, make sure your target is inside, and there's a free space for the pod to land. \
+ Grab your target, and drag them into the pod. \
+ \
+ Ransoms \
+ We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back\
+ from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever\
+ ID card you have equipped, on top of the TC payment we give.
\
+ Good luck agent. You can burn this document with the supplied lighter.
"}
diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm
new file mode 100644
index 00000000000..775841e977f
--- /dev/null
+++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm
@@ -0,0 +1,289 @@
+// NOVA EDIT ADDITION - DEFINES
+#define RANSOM_LOWER 75 // TG: 18
+#define RANSOM_UPPER 150 // TG: 45
+#define CONTRACTOR_RANSOM_CUT 0.35
+// NOVA EDIT ADDITION END
+
+/datum/syndicate_contract
+ ///The 'id' of this particular contract. Used to keep track of statuses from TGUI.
+ var/id
+ ///The current status of the contract. Starts off by default.
+ var/status = CONTRACT_STATUS_INACTIVE
+ ///The related Objective datum for the contract, holding the target and such.
+ var/datum/objective/contract/contract
+ ///The job position of the target.
+ var/target_rank
+ ///How much we will pay out upon completion. This is not the TC completion, it's typically credits.
+ var/ransom = 0
+ ///The level of payout, which affects the TC we get paid on completion.
+ var/payout_type
+ ///Flavortext wanted message for the person we're after.
+ var/wanted_message
+ ///List of everything found on the victim at the time of contracting, used to return their stuff afterwards.
+ var/list/victim_belongings = list()
+
+/datum/syndicate_contract/New(contract_owner, blacklist, type=CONTRACT_PAYOUT_SMALL)
+ contract = new(src)
+ contract.owner = contract_owner
+ payout_type = type
+
+ generate(blacklist)
+
+/datum/syndicate_contract/proc/generate(blacklist)
+ contract.find_target(null, blacklist)
+
+ var/datum/record/crew/record
+ if (contract.target)
+ record = find_record(contract.target.name)
+
+ if (record)
+ target_rank = record.rank
+ else
+ target_rank = "Unknown"
+
+ if (payout_type == CONTRACT_PAYOUT_LARGE)
+ contract.payout_bonus = rand(9,13)
+ else if (payout_type == CONTRACT_PAYOUT_MEDIUM)
+ contract.payout_bonus = rand(6,8)
+ else
+ contract.payout_bonus = rand(2,4)
+
+ contract.payout = rand(0, 2)
+ contract.generate_dropoff()
+
+ ransom = 100 * rand(RANSOM_LOWER, RANSOM_UPPER) // NOVA EDIT CHANGE - ORIGINAL: ransom = 100 * rand(18, 45)
+
+ var/base = pick_list(WANTED_FILE, "basemessage")
+ var/verb_string = pick_list(WANTED_FILE, "verb")
+ var/noun = pick_list_weighted(WANTED_FILE, "noun")
+ var/location = pick_list_weighted(WANTED_FILE, "location")
+ wanted_message = "[base] [verb_string] [noun] [location]."
+
+/datum/syndicate_contract/proc/handle_extraction(mob/living/user)
+ if (contract.target && contract.dropoff_check(user, contract.target.current))
+
+ var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff)
+
+ if (free_location)
+ // We've got a valid location, launch.
+ launch_extraction_pod(free_location)
+ return TRUE
+
+ return FALSE
+
+// Launch the pod to collect our victim.
+/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf)
+ var/obj/structure/closet/supplypod/extractionpod/empty_pod = new()
+
+ RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, PROC_REF(enter_check))
+
+ empty_pod.stay_after_drop = TRUE
+ empty_pod.reversing = TRUE
+ empty_pod.explosionSize = list(0,0,0,1)
+ empty_pod.leavingSound = 'sound/effects/podwoosh.ogg'
+
+ new /obj/effect/pod_landingzone(empty_pod_turf, empty_pod)
+
+/datum/syndicate_contract/proc/enter_check(datum/source, sent_mob)
+ SIGNAL_HANDLER
+
+ if(!istype(source, /obj/structure/closet/supplypod/extractionpod))
+ return
+ if(!isliving(sent_mob))
+ return
+ var/mob/living/person_sent = sent_mob
+ var/datum/opposing_force/opfor_data = contract.owner.opposing_force // NOVA EDIT CHANGE - ORIGINAL: var/datum/antagonist/traitor/traitor_data = contract.owner.has_antag_datum(/datum/antagonist/traitor)
+ if(person_sent == contract.target.current)
+ opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem += contract.payout
+ opfor_data.contractor_hub.contracts_completed++ // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contracts_completed++
+ if(person_sent.stat != DEAD)
+ opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem += contract.payout_bonus
+ status = CONTRACT_STATUS_COMPLETE
+ if(opfor_data.contractor_hub.current_contract == src) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract == src)
+ opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null
+ opfor_data.contractor_hub.contract_rep += 2 // NOVA EDIT ADDITION
+ else
+ status = CONTRACT_STATUS_ABORTED // Sending a target that wasn't even yours is as good as just aborting it
+ if(opfor_data.contractor_hub.current_contract == src) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract == src)
+ opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null
+
+ if(iscarbon(person_sent))
+ for(var/obj/item/person_contents in person_sent.gather_belongings())
+ if(ishuman(person_sent))
+ var/mob/living/carbon/human/human_sent = person_sent
+ if(person_contents == human_sent.w_uniform)
+ continue //So all they're left with are shoes and uniform.
+ if(person_contents == human_sent.shoes)
+ continue
+ person_sent.transferItemToLoc(person_contents)
+ victim_belongings.Add(WEAKREF(person_contents))
+
+ var/obj/structure/closet/supplypod/extractionpod/pod = source
+ // Handle the pod returning
+ pod.startExitSequence(pod)
+
+ if(ishuman(person_sent))
+ var/mob/living/carbon/human/target = person_sent
+ // After we remove items, at least give them what they need to live.
+ target.dna.species.give_important_for_life(target)
+
+ //we'll start the effects in a few seconds since it takes a moment for the pod to leave.
+ addtimer(CALLBACK(src, PROC_REF(handle_victim_experience), person_sent), 3 SECONDS)
+
+ // This is slightly delayed because of the sleep calls above to handle the narrative.
+ // We don't want to tell the station instantly.
+ var/points_to_check
+ var/datum/bank_account/cargo_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ if(cargo_account)
+ points_to_check = cargo_account.account_balance
+ if(points_to_check >= ransom)
+ cargo_account.adjust_money(-ransom)
+ else
+ cargo_account.adjust_money(-points_to_check)
+ priority_announce(
+ text = "One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \
+ As is policy we've taken a portion of the station's funds to offset the overall cost.",
+ sender_override = "Nanotrasen Asset Protection")
+
+ addtimer(CALLBACK(src, PROC_REF(finish_enter)), 3 SECONDS)
+
+/datum/syndicate_contract/proc/finish_enter()
+ // Pay contractor their portion of ransom
+ if(status != CONTRACT_STATUS_COMPLETE)
+ return
+ var/obj/item/card/id/contractor_id = contract.owner.current?.get_idcard(TRUE)
+ if(!contractor_id?.registered_account.account_id) // NOVA EDIT CHANGE - ORIGINAL: if(!contractor_id || !contractor_id.registered_account)
+ to_chat(contract.owner.current, span_notice("A briefcase appears at your feet!")) // NOVA EDIT ADDITION
+ var/obj/item/storage/briefcase/secure/case = new(get_turf(contract.owner.current)) // NOVA EDIT ADDITION
+ for(var/i in 1 to (round((ransom * CONTRACTOR_RANSOM_CUT) / 1000))) // NOVA EDIT ADDITION - Gets slightly less/more but whatever
+ new /obj/item/stack/spacecash/c1000(case) // NOVA EDIT ADDITION
+ // NOVA EDIT CHANGE - END
+ return
+ contractor_id.registered_account.adjust_money(ransom * 0.35)
+ contractor_id.registered_account.bank_card_talk("We've processed the ransom, agent. \
+ Here's your cut - your balance is now [contractor_id.registered_account.account_balance] cr.", TRUE)
+
+#define VICTIM_EXPERIENCE_START 0
+#define VICTIM_EXPERIENCE_FIRST_HIT 1
+#define VICTIM_EXPERIENCE_SECOND_HIT 2
+#define VICTIM_EXPERIENCE_THIRD_HIT 3
+#define VICTIM_EXPERIENCE_LAST_HIT 4
+
+/**
+ * handle_victim_experience
+ *
+ * Handles the effects given to victims upon being contracted.
+ * We heal them up and cause them immersive effects, just for fun.
+ * Args:
+ * victim - The person we're harassing
+ * level - The current stage of harassement they are facing. This increases by itself, looping until finished.
+ */
+/datum/syndicate_contract/proc/handle_victim_experience(mob/living/victim, level = VICTIM_EXPERIENCE_START)
+ // Ship 'em back - dead or alive, 4 minutes wait.
+ // Even if they weren't the target, we're still treating them the same.
+ if(!level)
+ addtimer(CALLBACK(src, PROC_REF(return_victim), victim), (60 * 10) * 4)
+ if(victim.stat == DEAD)
+ return
+
+ var/time_until_next
+ switch(level)
+ if(VICTIM_EXPERIENCE_START)
+ // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a
+ // method of healing them, consequence free, to a reasonable amount of health.
+ victim.reagents.add_reagent(/datum/reagent/medicine/omnizine, amount = 20)
+ victim.flash_act()
+ victim.adjust_confusion(1 SECONDS)
+ victim.adjust_eye_blur(5 SECONDS)
+ to_chat(victim, span_warning("You feel strange..."))
+ time_until_next = 6 SECONDS
+ if(VICTIM_EXPERIENCE_FIRST_HIT)
+ to_chat(victim, span_warning("That pod did something to you..."))
+ victim.adjust_dizzy(3.5 SECONDS)
+ time_until_next = 6.5 SECONDS
+ if(VICTIM_EXPERIENCE_SECOND_HIT)
+ to_chat(victim, span_warning("Your head pounds... It feels like it's going to burst out your skull!"))
+ victim.flash_act()
+ victim.adjust_confusion(2 SECONDS)
+ victim.adjust_eye_blur(3 SECONDS)
+ time_until_next = 3 SECONDS
+ if(VICTIM_EXPERIENCE_THIRD_HIT)
+ to_chat(victim, span_warning("Your head pounds..."))
+ time_until_next = 10 SECONDS
+ if(VICTIM_EXPERIENCE_LAST_HIT)
+ victim.flash_act()
+ victim.Unconscious(200)
+ to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Your mind held many valuable secrets - \
+ we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \
+ so it's only a matter of time before we ship you back...\" "))
+ victim.adjust_eye_blur(10 SECONDS)
+ victim.adjust_dizzy(1.5 SECONDS)
+ victim.adjust_confusion(2 SECONDS)
+
+ level++ //move onto the next level.
+ if(time_until_next)
+ addtimer(CALLBACK(src, PROC_REF(handle_victim_experience), victim, level), time_until_next)
+
+#undef VICTIM_EXPERIENCE_START
+#undef VICTIM_EXPERIENCE_FIRST_HIT
+#undef VICTIM_EXPERIENCE_SECOND_HIT
+#undef VICTIM_EXPERIENCE_THIRD_HIT
+#undef VICTIM_EXPERIENCE_LAST_HIT
+
+// We're returning the victim
+/datum/syndicate_contract/proc/return_victim(mob/living/victim)
+ var/list/possible_drop_loc = list()
+
+ for(var/turf/possible_drop in contract.dropoff.contents)
+ if(!isspaceturf(possible_drop) && !isclosedturf(possible_drop))
+ if(!possible_drop.is_blocked_turf())
+ possible_drop_loc.Add(possible_drop)
+
+ if(!possible_drop_loc.len)
+ to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \
+ be able to handle our pod... You will die here instead.\""))
+ if(iscarbon(victim))
+ var/mob/living/carbon/carbon_victim = victim
+ if(carbon_victim.can_heartattack())
+ carbon_victim.set_heartattack(TRUE)
+ return
+
+ var/pod_rand_loc = rand(1, possible_drop_loc.len)
+ var/obj/structure/closet/supplypod/return_pod = new()
+ return_pod.bluespace = TRUE
+ return_pod.explosionSize = list(0,0,0,0)
+ return_pod.style = STYLE_SYNDICATE
+
+ do_sparks(8, FALSE, victim)
+ victim.visible_message(span_notice("[victim] vanishes..."))
+
+ for(var/datum/weakref/belonging_ref in victim_belongings)
+ var/obj/item/belonging = belonging_ref.resolve()
+ if(!belonging)
+ continue
+ if(ishuman(victim))
+ var/mob/living/carbon/human/human_victim = victim
+ //So all they're left with are shoes and uniform.
+ if(belonging == human_victim.w_uniform)
+ continue
+ if(belonging == human_victim.shoes)
+ continue
+ belonging.forceMove(return_pod)
+
+ for(var/obj/item/W in victim_belongings)
+ W.forceMove(return_pod)
+
+ victim.forceMove(return_pod)
+
+ victim.flash_act()
+ victim.adjust_eye_blur(3 SECONDS)
+ victim.adjust_dizzy(3.5 SECONDS)
+ victim.adjust_confusion(2 SECONDS)
+
+ new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod)
+
+// SKYRAT EDIT - DEFINES
+#undef RANSOM_LOWER
+#undef RANSOM_UPPER
+#undef CONTRACTOR_RANSOM_CUT
+// SKYRAT EDIT END
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index f453fba3a16..4b5332140d7 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -17,6 +17,10 @@
can_assign_self_objectives = TRUE
default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets."
hardcore_random_bonus = TRUE
+
+ ///The flag of uplink that this traitor is supposed to have.
+ var/uplink_flag_given = UPLINK_TRAITORS
+
var/give_objectives = TRUE
/// Whether to give secondary objectives to the traitor, which aren't necessary but can be completed for a progression and TC boost.
var/give_secondary_objectives = TRUE
@@ -53,6 +57,7 @@
// There will still be a timelock on uplink items
name = "\improper Infiltrator"
//give_secondary_objectives = FALSE //FLUFFY FRONTIER REMOVAL - Трейторы всё же должны иметь побочки.
+ uplink_flag_given = UPLINK_TRAITORS | UPLINK_INFILTRATORS
/datum/antagonist/traitor/infiltrator/sleeper_agent
name = "\improper Syndicate Sleeper Agent"
@@ -75,6 +80,7 @@
uplink.uplink_handler = uplink_handler
else
uplink_handler = uplink.uplink_handler
+ uplink_handler.uplink_flag = uplink_flag_given
uplink_handler.primary_objectives = objectives
uplink_handler.has_progression = TRUE
SStraitor.register_uplink_handler(uplink_handler)
@@ -351,6 +357,8 @@
result += objectives_text
if(uplink_handler)
+ if (uplink_handler.contractor_hub)
+ result += contractor_round_end()
result += " The traitor had a total of [DISPLAY_PROGRESSION(uplink_handler.progression_points)] Reputation and [uplink_handler.telecrystals] Unused Telecrystals."
var/special_role_text = lowertext(name)
@@ -363,6 +371,23 @@
return result.Join(" ")
+///Tells how many contracts have been completed.
+/datum/antagonist/traitor/proc/contractor_round_end()
+ var/completed_contracts = uplink_handler.contractor_hub.contracts_completed
+ var/tc_total = uplink_handler.contractor_hub.contract_TC_payed_out + uplink_handler.contractor_hub.contract_TC_to_redeem
+
+ var/datum/antagonist/traitor/contractor_support/contractor_support_unit = uplink_handler.contractor_hub.contractor_teammate
+
+ if(completed_contracts <= 0)
+ return
+ var/plural_check = "contract"
+ if (completed_contracts > 1)
+ plural_check = "contracts"
+ var/sent_data = "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of [span_greentext("[tc_total] TC")]! "
+ if(contractor_support_unit)
+ sent_data += "[contractor_support_unit.owner.key] played [contractor_support_unit.owner.current.name] , their contractor support unit. "
+ return sent_data
+
/datum/antagonist/traitor/roundend_report_footer()
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
var/responses = jointext(GLOB.syndicate_code_response, ", ")
diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm
index d74b586efae..732230f9248 100644
--- a/code/modules/antagonists/traitor/objectives/kidnapping.dm
+++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm
@@ -227,7 +227,7 @@
if(sent_mob.mind)
ADD_TRAIT(sent_mob.mind, TRAIT_HAS_BEEN_KIDNAPPED, TRAIT_GENERIC)
- for(var/obj/item/belonging in gather_belongings(sent_mob))
+ for(var/obj/item/belonging in sent_mob.gather_belongings())
if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET))
continue
@@ -298,7 +298,7 @@
do_sparks(8, FALSE, sent_mob)
sent_mob.visible_message(span_notice("[sent_mob] vanishes!"))
- for(var/obj/item/belonging in gather_belongings(sent_mob))
+ for(var/obj/item/belonging in sent_mob.gather_belongings())
if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET))
continue
sent_mob.dropItemToGround(belonging) // No souvenirs, except shoes and t-shirts
@@ -317,10 +317,3 @@
sent_mob.dna.species.give_important_for_life(sent_mob) // so plasmamen do not get left for dead
new /obj/effect/pod_landingzone(pick(possible_turfs), return_pod)
-
-/// Returns a list of things that the provided mob has which we would rather that they do not have
-/datum/traitor_objective/target_player/kidnapping/proc/gather_belongings(mob/living/carbon/human/kidnapee)
- var/list/belongings = kidnapee.get_all_gear()
- for (var/obj/item/implant/storage/internal_bag in kidnapee.implants)
- belongings += internal_bag.contents
- return belongings
diff --git a/code/modules/antagonists/traitor/traitor_objective.dm b/code/modules/antagonists/traitor/traitor_objective.dm
index 6fa5c0d8dbf..d60820c3fce 100644
--- a/code/modules/antagonists/traitor/traitor_objective.dm
+++ b/code/modules/antagonists/traitor/traitor_objective.dm
@@ -134,7 +134,7 @@
maximum_progression
)
-/datum/traitor_objective/Destroy(force, ...)
+/datum/traitor_objective/Destroy(force)
handler = null
return ..()
diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm
index 06ce9667035..aa26b360a75 100644
--- a/code/modules/antagonists/traitor/uplink_handler.dm
+++ b/code/modules/antagonists/traitor/uplink_handler.dm
@@ -52,12 +52,14 @@
var/datum/callback/can_replace_objectives
/// Callback which performs that operation
var/datum/callback/replace_objectives
+ ///Reference to a contractor hub that the infiltrator can run, if they purchase it.
+ var/datum/contractor_hub/contractor_hub
/datum/uplink_handler/New()
. = ..()
maximum_potential_objectives = CONFIG_GET(number/maximum_potential_objectives)
-/datum/uplink_handler/Destroy(force, ...)
+/datum/uplink_handler/Destroy(force)
can_replace_objectives = null
replace_objectives = null
return ..()
@@ -73,6 +75,8 @@
/// Checks for uplink flags as well as items restricted to roles and species
/datum/uplink_handler/proc/check_if_restricted(datum/uplink_item/to_purchase)
+ if(!to_purchase.can_be_bought(src))
+ return FALSE
if((to_purchase in extra_purchasable))
return TRUE
if(!(to_purchase.purchasable_from & uplink_flag))
@@ -99,7 +103,7 @@
return FALSE
var/current_stock = item_stock[to_purchase.stock_key]
- var/stock = current_stock != null? current_stock : INFINITY
+ var/stock = current_stock != null ? current_stock : INFINITY
if(telecrystals < to_purchase.cost || stock <= 0 || not_enough_reputation(to_purchase))
return FALSE
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index 4783daffb8b..44d00f3c170 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -60,6 +60,7 @@
spawn_amt_left--
if(spawn_amt_left <= 0)
qdel(src)
+ return PROCESS_KILL
/obj/effect/rend/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/nullrod))
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
index 9b01b42410a..20f65281f96 100644
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ b/code/modules/antagonists/wizard/equipment/soulstone.dm
@@ -188,11 +188,11 @@
if(HAS_TRAIT(M, TRAIT_NO_SOUL))
to_chat(user, span_warning("This body does not possess a soul to capture."))
return
- // SKYRAT EDIT START
+ // NOVA EDIT START
if(!do_after(user, 5 SECONDS, M))
to_chat(user, span_warning("You must stand still to capture their soul!"))
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
log_combat(user, M, "captured [M.name]'s soul", src)
capture_soul(M, user)
@@ -503,7 +503,7 @@
SM.Grant(newstruct)
newstruct.key = target.key
var/atom/movable/screen/alert/bloodsense/BS
- if(newstruct.mind && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker?.mode)
+ if(newstruct.mind && ((stoner && IS_CULTIST(stoner)) || cultoverride) && SSticker.HasRoundStarted())
newstruct.mind.add_antag_datum(/datum/antagonist/cult/construct)
if(IS_CULTIST(stoner) || cultoverride)
to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs. ")
diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm
index c31bb4ce2ce..fe5f69fd9fa 100644
--- a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm
+++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm
@@ -21,8 +21,7 @@
/datum/spellbook_entry/summon/guns/can_be_purchased()
// Summon Guns requires 98 threat.
- var/datum/game_mode/dynamic/mode = SSticker.mode
- if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS)
+ if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS)
return FALSE
// Also must be config enabled
return !CONFIG_GET(flag/no_summon_guns)
@@ -39,8 +38,7 @@
/datum/spellbook_entry/summon/magic/can_be_purchased()
// Summon Magic requires 98 threat.
- var/datum/game_mode/dynamic/mode = SSticker.mode
- if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS)
+ if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS)
return FALSE
// Also must be config enabled
return !CONFIG_GET(flag/no_summon_magic)
@@ -60,8 +58,7 @@
/datum/spellbook_entry/summon/events/can_be_purchased()
// Summon Events requires 98 threat.
- var/datum/game_mode/dynamic/mode = SSticker.mode
- if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS)
+ if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS)
return FALSE
// Also, must be config enabled
return !CONFIG_GET(flag/no_summon_events)
@@ -138,8 +135,7 @@
return ..()
/datum/spellbook_entry/summon/specific_spell/can_be_purchased()
- var/datum/game_mode/dynamic/mode = SSticker.mode
- if(mode.threat_level < MINIMUM_THREAT_FOR_RITUALS)
+ if(SSdynamic.threat_level < MINIMUM_THREAT_FOR_RITUALS)
return FALSE
if(GLOB.mass_teaching)
return FALSE
diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
index 94b6254d459..a951a5daf42 100644
--- a/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/finales/armageddon.dm
@@ -51,8 +51,7 @@
if (DOOM_METEORS)
var/datum/dynamic_ruleset/roundstart/meteor/meteors = new()
meteors.meteordelay = 0
- var/datum/game_mode/dynamic/mode = SSticker.mode
- mode.execute_roundstart_rule(meteors) // Meteors will continue until morale is crushed.
+ SSdynamic.execute_roundstart_rule(meteors) // Meteors will continue until morale is crushed.
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", ANNOUNCER_METEORS)
#undef DOOM_SINGULARITY
diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm b/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm
index b92ae4d2f20..7dc514f2e18 100644
--- a/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/finales/grand_ritual_finale.dm
@@ -71,7 +71,7 @@
name = "\improper Wizard Prank Victim"
roundend_category = "wizard prank victims"
show_in_antagpanel = FALSE
- antagpanel_category = "Other"
+ antagpanel_category = ANTAG_GROUP_CREW
show_name_in_check_antagonists = TRUE
count_against_dynamic_roll_chance = FALSE
silent = TRUE
diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm b/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm
index b2e3329261f..98eb56fadac 100644
--- a/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/finales/midas.dm
@@ -39,8 +39,4 @@
addtimer(CALLBACK(src, PROC_REF(transform_area), turfs_to_transform["[iterator]"]), (5 SECONDS) * iterator)
/datum/grand_finale/midas/proc/transform_area(list/turfs)
- for (var/turf/transform_turf as anything in turfs)
- if (!chosen_theme.can_convert(transform_turf))
- continue
- chosen_theme.apply_theme(transform_turf)
- CHECK_TICK
+ chosen_theme.apply_theme_to_list_of_turfs(turfs)
diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm
index 950390a7227..54e8d0fed5c 100644
--- a/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm
+++ b/code/modules/antagonists/wizard/grand_ritual/grand_side_effect.dm
@@ -74,8 +74,7 @@
addtimer(CALLBACK(src, PROC_REF(staggered_transform), theme, range_turfs), (0.5 SECONDS) * iterator)
/datum/grand_side_effect/transmogrify_area/proc/staggered_transform(datum/dimension_theme/theme, list/transform_turfs)
- for (var/turf/target_turf as anything in transform_turfs)
- theme.apply_theme(target_turf)
+ theme.apply_theme_to_list_of_turfs(transform_turfs)
/// Minimum number of anomalies to create
#define MIN_ANOMALIES_CREATED 1
diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm
index 717f4335969..2158104b6ee 100644
--- a/code/modules/art/statues.dm
+++ b/code/modules/art/statues.dm
@@ -569,7 +569,7 @@ Moving interrupts
content_ma.pixel_y = 0
content_ma.alpha = 255
- var/static/list/plane_whitelist = list(FLOAT_PLANE, GAME_PLANE, GAME_PLANE_UPPER, GAME_PLANE_FOV_HIDDEN, GAME_PLANE_UPPER, GAME_PLANE_UPPER_FOV_HIDDEN, FLOOR_PLANE)
+ var/static/list/plane_whitelist = list(FLOAT_PLANE, GAME_PLANE, FLOOR_PLANE)
/// Ideally we'd have knowledge what we're removing but i'd have to be done on target appearance retrieval
var/list/overlays_to_remove = list()
diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm
index e4518155153..6bb12f327ea 100644
--- a/code/modules/assembly/health.dm
+++ b/code/modules/assembly/health.dm
@@ -46,25 +46,30 @@
to_chat(user, span_notice("You toggle [src] to \"detect critical state\" mode."))
/obj/item/assembly/health/process()
+ //not ready yet
if(!scanning || !secured)
return
- var/atom/A = src
+ //look for a mob in either our location or in the connected holder
+ var/atom/object = src
if(connected?.holder)
- A = connected.holder
- for(A, A && !ismob(A), A=A.loc);
- // like get_turf(), but for mobs.
- var/mob/living/M = A
+ object = connected.holder
+ while(!ismob(object))
+ object = object.loc
+ if(isnull(object)) //we went too far
+ return
- if(M)
- health_scan = M.health
- if(health_scan <= alarm_health)
- pulse()
- audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep* ")
- playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
- toggle_scan()
+ //only do the pulse if we are within alarm thresholds
+ var/mob/living/target_mob = object
+ health_scan = target_mob.health
+ if(health_scan > alarm_health)
return
- return
+
+ //do the pulse & the scan
+ pulse()
+ audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep* ")
+ playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE)
+ toggle_scan()
/obj/item/assembly/health/proc/toggle_scan()
if(!secured)
diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm
index c5a23c105d8..02607062111 100644
--- a/code/modules/asset_cache/asset_list.dm
+++ b/code/modules/asset_cache/asset_list.dm
@@ -26,6 +26,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
/// Whether or not this asset can be cached across rounds of the same commit under the `CACHE_ASSETS` config.
/// This is not a *guarantee* the asset will be cached. Not all asset subtypes respect this field, and the
/// config can, of course, be disabled.
+ /// Disable this if your asset can change between rounds on the same exact version of the code.
var/cross_round_cachable = FALSE
/datum/asset/New()
@@ -133,6 +134,7 @@ GLOBAL_LIST_EMPTY(asset_datums)
/datum/asset/spritesheet
_abstract = /datum/asset/spritesheet
+ cross_round_cachable = TRUE
var/name
/// List of arguments to pass into queuedInsert
/// Exists so we can queue icon insertion, mostly for stuff like preferences
@@ -145,6 +147,9 @@ GLOBAL_LIST_EMPTY(asset_datums)
/// If this asset should be fully loaded on new
/// Defaults to false so we can process this stuff nicely
var/load_immediately = FALSE
+ VAR_PRIVATE
+ // Kept in state so that the result is the same, even when the files are created, for this run
+ should_refresh = null
/datum/asset/spritesheet/proc/should_load_immediately()
#ifdef DO_NOT_DEFER_ASSETS
@@ -158,12 +163,9 @@ GLOBAL_LIST_EMPTY(asset_datums)
if (..())
return TRUE
- // Static so that the result is the same, even when the files are created, for this run
- var/static/should_refresh = null
-
if (isnull(should_refresh))
// `fexists` seems to always fail on static-time
- should_refresh = !fexists("[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css")
+ should_refresh = !fexists(css_cache_filename()) || !fexists(data_cache_filename())
return should_refresh
@@ -294,8 +296,17 @@ GLOBAL_LIST_EMPTY(asset_datums)
return out.Join("\n")
+/datum/asset/spritesheet/proc/css_cache_filename()
+ return "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css"
+
+/datum/asset/spritesheet/proc/data_cache_filename()
+ return "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].json"
+
/datum/asset/spritesheet/proc/read_from_cache()
- var/replaced_css = file2text("[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css")
+ return read_css_from_cache() && read_data_from_cache()
+
+/datum/asset/spritesheet/proc/read_css_from_cache()
+ var/replaced_css = file2text(css_cache_filename())
var/regex/find_background_urls = regex(@"background:url\('%(.+?)%'\)", "g")
while (find_background_urls.Find(replaced_css))
@@ -317,6 +328,14 @@ GLOBAL_LIST_EMPTY(asset_datums)
return TRUE
+/datum/asset/spritesheet/proc/read_data_from_cache()
+ var/json = json_decode(file2text(data_cache_filename()))
+
+ if (islist(json["sprites"]))
+ sprites = json["sprites"]
+
+ return TRUE
+
/datum/asset/spritesheet/proc/send_from_cache(client/client)
if (isnull(cached_spritesheets_needed))
stack_trace("cached_spritesheets_needed was null when sending assets from [type] from cache")
@@ -332,6 +351,10 @@ GLOBAL_LIST_EMPTY(asset_datums)
return SSassets.transport.get_asset_url(asset)
/datum/asset/spritesheet/proc/write_to_cache()
+ write_css_to_cache()
+ write_data_to_cache()
+
+/datum/asset/spritesheet/proc/write_css_to_cache()
for (var/size_id in sizes)
fcopy(SSassets.cache["[name]_[size_id].png"].resource, "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name]_[size_id].png")
@@ -339,7 +362,12 @@ GLOBAL_LIST_EMPTY(asset_datums)
var/mock_css = generate_css()
generating_cache = FALSE
- rustg_file_write(mock_css, "[ASSET_CROSS_ROUND_CACHE_DIRECTORY]/spritesheet.[name].css")
+ rustg_file_write(mock_css, css_cache_filename())
+
+/datum/asset/spritesheet/proc/write_data_to_cache()
+ rustg_file_write(json_encode(list(
+ "sprites" = sprites,
+ )), data_cache_filename())
/datum/asset/spritesheet/proc/get_cached_url_mappings()
var/list/mappings = list()
@@ -366,6 +394,9 @@ GLOBAL_LIST_EMPTY(asset_datums)
I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving)
if (!I || !length(icon_states(I))) // that direction or state doesn't exist
return
+
+ var/start_usage = world.tick_usage
+
//any sprite modifications we want to do (aka, coloring a greyscaled asset)
I = ModifyInserted(I)
var/size_id = "[I.Width()]x[I.Height()]"
@@ -393,6 +424,8 @@ GLOBAL_LIST_EMPTY(asset_datums)
sizes[size_id] = size = list(1, I, null)
sprites[sprite_name] = list(size_id, 0)
+ SSblackbox.record_feedback("tally", "spritesheet_queued_insert_time", TICK_USAGE_TO_MS(start_usage), name)
+
/**
* A simple proc handing the Icon for you to modify before it gets turned into an asset.
*
diff --git a/code/modules/asset_cache/assets/emojipedia.dm b/code/modules/asset_cache/assets/emojipedia.dm
index 2197f1bff22..200e3770ff4 100644
--- a/code/modules/asset_cache/assets/emojipedia.dm
+++ b/code/modules/asset_cache/assets/emojipedia.dm
@@ -1,7 +1,5 @@
/datum/asset/spritesheet/emojipedia
name = "emojipedia"
- cross_round_cachable = TRUE // The Emoji DMI is static and doesn't change without a commit mis-match.
/datum/asset/spritesheet/emojipedia/create_spritesheets()
InsertAll("", EMOJI_SET)
-
diff --git a/code/modules/asset_cache/assets/paper.dm b/code/modules/asset_cache/assets/paper.dm
index 8653cff0dd1..be7c9cad98b 100644
--- a/code/modules/asset_cache/assets/paper.dm
+++ b/code/modules/asset_cache/assets/paper.dm
@@ -3,19 +3,19 @@
assets = list(
// SKYRAT ADDITION: START - Donator stamp icons
- "stamp-cat_blue" = 'modular_skyrat/master_files/icons/stamp_icons/cat_blue.png',
- "stamp-paw_blue" = 'modular_skyrat/master_files/icons/stamp_icons/paw_blue.png',
- "stamp-cat_red" = 'modular_skyrat/master_files/icons/stamp_icons/cat_red.png',
- "stamp-paw_red" = 'modular_skyrat/master_files/icons/stamp_icons/paw_red.png',
- "stamp-cat_orange" = 'modular_skyrat/master_files/icons/stamp_icons/cat_orange.png',
- "stamp-paw_orange" = 'modular_skyrat/master_files/icons/stamp_icons/paw_orange.png',
- "stamp-cat_green" = 'modular_skyrat/master_files/icons/stamp_icons/cat_green.png',
- "stamp-paw_green" = 'modular_skyrat/master_files/icons/stamp_icons/paw_green.png',
+ "stamp-cat_blue" = 'modular_nova/master_files/icons/stamp_icons/cat_blue.png',
+ "stamp-paw_blue" = 'modular_nova/master_files/icons/stamp_icons/paw_blue.png',
+ "stamp-cat_red" = 'modular_nova/master_files/icons/stamp_icons/cat_red.png',
+ "stamp-paw_red" = 'modular_nova/master_files/icons/stamp_icons/paw_red.png',
+ "stamp-cat_orange" = 'modular_nova/master_files/icons/stamp_icons/cat_orange.png',
+ "stamp-paw_orange" = 'modular_nova/master_files/icons/stamp_icons/paw_orange.png',
+ "stamp-cat_green" = 'modular_nova/master_files/icons/stamp_icons/cat_green.png',
+ "stamp-paw_green" = 'modular_nova/master_files/icons/stamp_icons/paw_green.png',
// SKYRAT ADDITION: END - Donator stamp icons
// SKYRAT ADDITION: START - Other stamp icons
- "stamp-nri" = 'modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png',
- "stamp-solfed" = 'modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png',
+ "stamp-nri" = 'modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png',
+ "stamp-solfed" = 'modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png',
// SKYRAT ADDITION: END - Other stamp icons
"stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png',
diff --git a/code/modules/asset_cache/assets/tutorial_advisors.dm b/code/modules/asset_cache/assets/tutorial_advisors.dm
deleted file mode 100644
index da80e8904d3..00000000000
--- a/code/modules/asset_cache/assets/tutorial_advisors.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/asset/simple/tutorial_advisors
- assets = list(
- "chem_help_advisor.gif" = 'icons/ui_icons/advisors/chem_help_advisor.gif',
- )
diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm
index 4145ae7fa76..2e4e3aa0e5e 100644
--- a/code/modules/atmospherics/environmental/LINDA_fire.dm
+++ b/code/modules/atmospherics/environmental/LINDA_fire.dm
@@ -21,10 +21,10 @@
* is handled by the hotspot itself, specifically perform_exposure().
*/
/turf/open/hotspot_expose(exposed_temperature, exposed_volume, soh)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(liquids && !liquids.fire_state && liquids.check_fire(TRUE))
SSliquids.processing_fire[src] = TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
//If the air doesn't exist we just return false
var/list/air_gases = air?.gases
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 0556d085adf..688f1d63021 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -134,7 +134,7 @@
src.atmos_adjacent_turfs = atmos_adjacent_turfs
SEND_SIGNAL(src, COMSIG_TURF_CALCULATED_ADJACENT_ATMOS)
- update_adjacent_pollutants() //SKYRAT EDIT ADDITION //Atmos adjacency could unlock/block adjacent pollutants, this is dirty flags anyway so its fine having it here
+ update_adjacent_pollutants() //NOVA EDIT ADDITION //Atmos adjacency could unlock/block adjacent pollutants, this is dirty flags anyway so its fine having it here
/**
* returns a list of adjacent turfs that can share air with this one.
@@ -199,7 +199,7 @@
SSair.remove_from_active(src)
else
SSair.add_to_active(src)
- liquid_update_turf() //SKYRAT EDIT ADDITION
+ liquid_update_turf() //NOVA EDIT ADDITION
/atom/movable/proc/move_update_air(turf/target_turf)
if(isturf(target_turf))
diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm
index 8dfe81c7b27..fe6806c9b58 100644
--- a/code/modules/atmospherics/machinery/atmosmachinery.dm
+++ b/code/modules/atmospherics/machinery/atmosmachinery.dm
@@ -398,6 +398,9 @@
var/datum/gas_mixture/gas_mix = all_gas_mixes[gas_mix_number]
if(!gas_mix.total_moles())
empty_mixes++
+ if(!nodes[gas_mix_number] || (istype(nodes[gas_mix_number], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(gas_mix_number)))
+ var/pressure_delta = all_gas_mixes[gas_mix_number].return_pressure() - env_air.return_pressure()
+ internal_pressure = internal_pressure > pressure_delta ? internal_pressure : pressure_delta
if(empty_mixes == device_type)
empty_pipe = TRUE
if(!int_air.total_moles())
@@ -629,6 +632,13 @@
src.pipe_color = uppertext(pipe_colour)
update_name()
+/// Return TRUE if there is device connected to portables_connector
+/obj/machinery/atmospherics/proc/portable_device_connected(node)
+ var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = nodes[node]
+ if(portable_devices_connector.connected_device)
+ return TRUE
+ return FALSE
+
#undef PIPE_VISIBLE_LEVEL
#undef PIPE_HIDDEN_LEVEL
#undef VENT_SOUND_DELAY
diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm
index 9e1f4f0de21..1aae85d2a14 100644
--- a/code/modules/atmospherics/machinery/components/components_base.dm
+++ b/code/modules/atmospherics/machinery/components/components_base.dm
@@ -105,6 +105,10 @@
. = ..()
update_parents()
+/obj/machinery/atmospherics/components/on_deconstruction()
+ relocate_airs()
+ return ..()
+
/obj/machinery/atmospherics/components/rebuild_pipes()
. = ..()
if(update_parents_after_rebuild)
@@ -172,31 +176,6 @@
/obj/machinery/atmospherics/components/replace_pipenet(datum/pipeline/Old, datum/pipeline/New)
parents[parents.Find(Old)] = New
-/obj/machinery/atmospherics/components/unsafe_pressure_release(mob/user, pressures)
- . = ..()
-
- var/turf/current_turf = get_turf(src)
- if(!current_turf)
- return
- //Remove the gas from airs and assume it
- var/datum/gas_mixture/environment = current_turf.return_air()
- var/lost = null
- var/times_lost = 0
- for(var/i in 1 to device_type)
- var/datum/gas_mixture/air = airs[i]
- lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION)
- times_lost++
- var/shared_loss = lost/times_lost
-
- var/datum/gas_mixture/to_release
- for(var/i in 1 to device_type)
- var/datum/gas_mixture/air = airs[i]
- if(!to_release)
- to_release = air.remove(shared_loss)
- continue
- to_release.merge(air.remove(shared_loss))
- current_turf.assume_air(to_release)
-
// Helpers
/**
@@ -245,6 +224,69 @@
/obj/machinery/atmospherics/components/return_analyzable_air()
return airs
+/**
+ * Handles machinery deconstruction and unsafe pressure release
+ */
+/obj/machinery/atmospherics/components/proc/crowbar_deconstruction_act(mob/living/user, obj/item/tool, internal_pressure = 0)
+ if(!panel_open)
+ balloon_alert(user, "open panel!")
+ return ITEM_INTERACT_SUCCESS
+
+ var/unsafe_wrenching = FALSE
+ var/filled_pipe = FALSE
+ var/datum/gas_mixture/environment_air = loc.return_air()
+
+ for(var/i in 1 to device_type)
+ var/datum/gas_mixture/inside_air = airs[i]
+ if(inside_air.total_moles() > 0 || internal_pressure)
+ filled_pipe = TRUE
+ if(!nodes[i] || (istype(nodes[i], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(i)))
+ internal_pressure = internal_pressure > airs[i].return_pressure() ? internal_pressure : airs[i].return_pressure()
+
+ if(!filled_pipe)
+ default_deconstruction_crowbar(tool)
+ return ITEM_INTERACT_SUCCESS
+
+ to_chat(user, span_notice("You begin to unfasten \the [src]..."))
+
+ internal_pressure -= environment_air.return_pressure()
+
+ if(internal_pressure > 2 * ONE_ATMOSPHERE)
+ to_chat(user, span_warning("As you begin deconstructing \the [src] a gush of air blows in your face... maybe you should reconsider?"))
+ unsafe_wrenching = TRUE
+
+ if(!do_after(user, 2 SECONDS, src))
+ return
+ if(unsafe_wrenching)
+ unsafe_pressure_release(user, internal_pressure)
+ tool.play_tool_sound(src, 50)
+ deconstruct(TRUE)
+ return ITEM_INTERACT_SUCCESS
+
+/obj/machinery/atmospherics/components/default_change_direction_wrench(mob/user, obj/item/I)
+ . = ..()
+ if(!.)
+ return FALSE
+ set_init_directions()
+ for(var/i in 1 to device_type)
+ var/obj/machinery/atmospherics/node = nodes[i]
+ if(node)
+ if(src in node.nodes)
+ node.disconnect(src)
+ nodes[i] = null
+ if(parents[i])
+ nullify_pipenet(parents[i])
+ for(var/i in 1 to device_type)
+ var/obj/machinery/atmospherics/node = nodes[i]
+ atmos_init()
+ node = nodes[i]
+ if(node)
+ node.atmos_init()
+ node.add_member(src)
+ update_parents()
+ SSair.add_to_rebuild_queue(src)
+ return TRUE
+
/**
* Disconnects all nodes from ourselves, remove us from the node's nodes.
* Nullify our parent pipenet
@@ -286,3 +328,21 @@
/obj/machinery/atmospherics/components/update_layer()
layer = initial(layer) + (piping_layer - PIPING_LAYER_DEFAULT) * PIPING_LAYER_LCHANGE + (GLOB.pipe_colors_ordered[pipe_color] * 0.001)
+
+/**
+ * Handles air relocation to the pipenet/environment
+ */
+/obj/machinery/atmospherics/components/proc/relocate_airs(datum/gas_mixture/to_release)
+ var/turf/local_turf = get_turf(src)
+ for(var/i in 1 to device_type)
+ var/datum/gas_mixture/air = airs[i]
+ if(!nodes[i] || (istype(nodes[i], /obj/machinery/atmospherics/components/unary/portables_connector) && !portable_device_connected(i)))
+ if(!to_release)
+ to_release = air
+ continue
+ to_release.merge(air)
+ continue
+ var/datum/gas_mixture/parents_air = parents[i].air
+ parents_air.merge(air)
+ if(to_release)
+ local_turf.assume_air(to_release)
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
index 2d7db14ef07..6d3d5d31a16 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm
@@ -199,3 +199,18 @@
QDEL_NULL(soundloop)
machine_parts = null
return..()
+
+/obj/machinery/atmospherics/components/unary/hypertorus/core/on_deconstruction()
+ var/turf/local_turf = get_turf(loc)
+ var/datum/gas_mixture/to_release = moderator_internal || internal_fusion
+ if(to_release == moderator_internal)
+ to_release.merge(internal_fusion)
+ if(to_release)
+ local_turf.assume_air(to_release)
+ return ..()
+
+/obj/machinery/atmospherics/components/unary/hypertorus/core/crowbar_deconstruction_act(mob/living/user, obj/item/tool, internal_pressure = 0)
+ internal_pressure = max(internal_fusion.return_pressure(), moderator_internal.return_pressure())
+ if(internal_pressure)
+ say("WARNING - Core can contain hazardous gases, deconstruct with caution!")
+ return ..(user, tool, internal_pressure)
diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
index 96423f9f770..86f2e3dddf5 100644
--- a/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
+++ b/code/modules/atmospherics/machinery/components/fusion/hfr_parts.dm
@@ -40,8 +40,6 @@
return
if(default_change_direction_wrench(user, I))
return
- if(default_deconstruction_crowbar(I))
- return
return ..()
/obj/machinery/atmospherics/components/unary/hypertorus/welder_act(mob/living/user, obj/item/tool)
@@ -55,22 +53,8 @@
cracked = FALSE
update_appearance()
-/obj/machinery/atmospherics/components/unary/hypertorus/default_change_direction_wrench(mob/user, obj/item/I)
- . = ..()
- if(.)
- set_init_directions()
- var/obj/machinery/atmospherics/node = nodes[1]
- if(node)
- node.disconnect(src)
- nodes[1] = null
- if(parents[1])
- nullify_pipenet(parents[1])
- atmos_init()
- node = nodes[1]
- if(node)
- node.atmos_init()
- node.add_member(src)
- SSair.add_to_rebuild_queue(src)
+/obj/machinery/atmospherics/components/unary/hypertorus/crowbar_act(mob/living/user, obj/item/tool)
+ return crowbar_deconstruction_act(user, tool)
/obj/machinery/atmospherics/components/unary/hypertorus/update_icon_state()
if(panel_open)
@@ -207,6 +191,7 @@
ui.open()
else
to_chat(user, span_notice("Activate the machine first by using a multitool on the interface."))
+ ui.close()
/obj/machinery/hypertorus/interface/proc/gas_list_to_gasid_list(list/gas_list)
var/list/gasid_list = list()
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
index 8ba5002a0a6..c781e988f7f 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/atmos_machines_recipes.dm
@@ -124,7 +124,7 @@ GLOBAL_LIST_INIT(gas_recipe_meta, gas_recipes_list())
min_temp = 10
max_temp = 20
energy_release = 3500000
- requirements = list(/datum/gas/plasma = 450, /datum/gas/bz = 15) //SKYRAT EDIT CHANGE, ORIGINAL: requirements = list(/datum/gas/plasma = 450)
+ requirements = list(/datum/gas/plasma = 450, /datum/gas/bz = 15) //NOVA EDIT CHANGE, ORIGINAL: requirements = list(/datum/gas/plasma = 450)
products = list(/obj/item/stack/sheet/mineral/plasma = 1)
/datum/gas_recipe/crystallizer/crystal_cell
diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
index b71dc05d776..a005caf86b9 100644
--- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
+++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm
@@ -10,7 +10,6 @@
name = "crystallizer"
desc = "Used to crystallize or solidify gases."
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
density = TRUE
max_integrity = 300
armor_type = /datum/armor/binary_crystallizer
@@ -41,6 +40,12 @@
internal = new
register_context()
+/obj/machinery/atmospherics/components/binary/crystallizer/on_deconstruction()
+ var/turf/local_turf = get_turf(loc)
+ if(internal.total_moles())
+ local_turf.assume_air(internal)
+ return ..()
+
/obj/machinery/atmospherics/components/binary/crystallizer/add_context(atom/source, list/context, obj/item/held_item, mob/user)
. = ..()
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]"
@@ -59,42 +64,10 @@
return
if(default_change_direction_wrench(user, I))
return
- if(default_deconstruction_crowbar(I))
- return
return ..()
-/obj/machinery/atmospherics/components/binary/crystallizer/default_change_direction_wrench(mob/user, obj/item/I)
- . = ..()
- if(!.)
- return FALSE
- set_init_directions()
- var/obj/machinery/atmospherics/node1 = nodes[1]
- var/obj/machinery/atmospherics/node2 = nodes[2]
- if(node1)
- if(src in node1.nodes) //Only if it's actually connected. On-pipe version would is one-sided.
- node1.disconnect(src)
- nodes[1] = null
- if(node2)
- if(src in node2.nodes) //Only if it's actually connected. On-pipe version would is one-sided.
- node2.disconnect(src)
- nodes[2] = null
-
- if(parents[1])
- nullify_pipenet(parents[1])
- if(parents[2])
- nullify_pipenet(parents[2])
-
- atmos_init()
- node1 = nodes[1]
- if(node1)
- node1.atmos_init()
- node1.add_member(src)
- node2 = nodes[2]
- if(node2)
- node2.atmos_init()
- node2.add_member(src)
- SSair.add_to_rebuild_queue(src)
- return TRUE
+/obj/machinery/atmospherics/components/binary/crystallizer/crowbar_act(mob/living/user, obj/item/tool)
+ return crowbar_deconstruction_act(user, tool, internal.return_pressure())
/obj/machinery/atmospherics/components/binary/crystallizer/update_overlays()
. = ..()
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
index 3d3c4d9c05a..269e0943004 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/bluespace_sender.dm
@@ -49,10 +49,6 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
register_context()
/obj/machinery/atmospherics/components/unary/bluespace_sender/Destroy()
- if(bluespace_network.total_moles())
- var/turf/local_turf = get_turf(src)
- local_turf.assume_air(bluespace_network)
-
GLOB.bluespace_senders -= src
return ..()
@@ -75,6 +71,11 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
context[SCREENTIP_CONTEXT_RMB] = "[anchored ? "Unan" : "An"]chor"
return CONTEXTUAL_SCREENTIP_SET
+/obj/machinery/atmospherics/components/unary/bluespace_sender/is_connectable()
+ if(!anchored)
+ return FALSE
+ . = ..()
+
/obj/machinery/atmospherics/components/unary/bluespace_sender/update_icon_state()
if(panel_open)
icon_state = "[base_icon_state]_open"
@@ -101,6 +102,12 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
bluespace_network.temperature = T20C
update_parents()
+/obj/machinery/atmospherics/components/unary/bluespace_sender/relocate_airs()
+ if(bluespace_network.total_moles() > 0)
+ airs[1].merge(bluespace_network)
+ airs[1].garbage_collect()
+ return ..()
+
/obj/machinery/atmospherics/components/unary/bluespace_sender/screwdriver_act(mob/living/user, obj/item/tool)
if(on)
balloon_alert(user, "turn off!")
@@ -108,17 +115,13 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
if(!anchored)
balloon_alert(user, "anchor!")
return ITEM_INTERACT_SUCCESS
- if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]", tool))
- change_pipe_connection(panel_open)
+ if(default_deconstruction_screwdriver(user, "[base_icon_state]_open", "[base_icon_state]_off", tool))
return ITEM_INTERACT_SUCCESS
/obj/machinery/atmospherics/components/unary/bluespace_sender/crowbar_act(mob/living/user, obj/item/tool)
- default_deconstruction_crowbar(tool, custom_deconstruct = bluespace_network.total_moles() > 0 ? TRUE : FALSE)
- say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!")
- if(!do_after(user, 3 SECONDS, src))
- return
- tool.play_tool_sound(src, 50)
- deconstruct(TRUE)
+ if(panel_open && bluespace_network.total_moles() > 0 && !nodes[1])
+ say("WARNING - Bluespace network can contain hazardous gases, deconstruct with caution!")
+ return crowbar_deconstruction_act(user, tool)
/obj/machinery/atmospherics/components/unary/bluespace_sender/multitool_act(mob/living/user, obj/item/item)
var/obj/item/multitool/multitool = item
@@ -134,6 +137,7 @@ GLOBAL_LIST_EMPTY_TYPED(bluespace_senders, /obj/machinery/atmospherics/component
balloon_alert(user, "open panel!")
return
if(default_unfasten_wrench(user, tool))
+ change_pipe_connection(!anchored)
return ITEM_INTERACT_SUCCESS
return
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 22c0f509d16..a603116d7e8 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -17,7 +17,6 @@
// and will crop the head off.
icon_state = "mask_bg"
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
pixel_y = 22
appearance_flags = KEEP_TOGETHER
@@ -72,7 +71,7 @@
density = TRUE
max_integrity = 350
armor_type = /datum/armor/unary_cryo_cell
- layer = MOB_LAYER - 0.2 //SKYRAT EDIT - Fixing the opacity of cryo cells - ORIGINAL: layer = MOB_LAYER
+ layer = MOB_LAYER - 0.2 //NOVA EDIT - Fixing the opacity of cryo cells - ORIGINAL: layer = MOB_LAYER
state_open = FALSE
circuit = /obj/item/circuitboard/machine/cryo_tube
occupant_typecache = list(/mob/living/carbon, /mob/living/simple_animal)
@@ -457,9 +456,45 @@
/obj/machinery/cryo_cell/crowbar_act(mob/living/user, obj/item/tool)
if(on || state_open)
return FALSE
- if(default_pry_open(tool) || default_deconstruction_crowbar(tool))
+ if(!panel_open)
+ balloon_alert(user, "open panel!")
return ITEM_INTERACT_SUCCESS
+ var/unsafe_wrenching = FALSE
+ var/filled_pipe = FALSE
+ var/datum/gas_mixture/environment_air = loc.return_air()
+ var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1]
+ var/obj/machinery/atmospherics/node = internal_connector.gas_connector.nodes[1]
+ var/internal_pressure = 0
+
+ if(istype(node, /obj/machinery/atmospherics/components/unary/portables_connector))
+ var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = node
+ internal_pressure = !portable_devices_connector.connected_device ? 1 : 0
+
+ if(inside_air.total_moles() > 0)
+ filled_pipe = TRUE
+ if(!node || internal_pressure > 0)
+ internal_pressure = inside_air.return_pressure() - environment_air.return_pressure()
+
+ if(!filled_pipe)
+ default_deconstruction_crowbar(tool)
+ return ITEM_INTERACT_SUCCESS
+
+ to_chat(user, span_notice("You begin to unfasten \the [src]..."))
+
+ if(internal_pressure > 2 * ONE_ATMOSPHERE)
+ to_chat(user, span_warning("As you begin deconstructing \the [src] a gush of air blows in your face... maybe you should reconsider?"))
+ unsafe_wrenching = TRUE
+
+ if(!do_after(user, 2 SECONDS, src))
+ return
+ if(unsafe_wrenching)
+ internal_connector.gas_connector.unsafe_pressure_release(user, internal_pressure)
+
+ tool.play_tool_sound(src, 50)
+ deconstruct(TRUE)
+ return ITEM_INTERACT_SUCCESS
+
/obj/machinery/cryo_cell/wrench_act(mob/living/user, obj/item/tool)
if(on || occupant || state_open)
return FALSE
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm
index 49103c7729e..b1e2567f82f 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm
@@ -75,6 +75,7 @@
*/
/datum/gas_machine_connector/proc/deconstruct_connected_machine()
SIGNAL_HANDLER
+ relocate_airs()
disconnect_connector()
SSair.stop_processing_machine(connected_machine)
unregister_from_machine()
@@ -106,4 +107,23 @@
if(node)
node.atmos_init()
node.add_member(gas_connector)
+ gas_connector.update_parents()
SSair.add_to_rebuild_queue(gas_connector)
+
+/**
+ * Handles air relocation to the pipe network/environment
+ */
+/datum/gas_machine_connector/proc/relocate_airs(mob/user)
+ var/turf/local_turf = get_turf(connected_machine)
+ var/datum/gas_mixture/inside_air = gas_connector.airs[1]
+ if(inside_air.total_moles() > 0)
+ if(!gas_connector.nodes[1])
+ local_turf.assume_air(inside_air)
+ return
+ var/datum/gas_mixture/parents_air = gas_connector.parents[1].air
+ if(istype(gas_connector.nodes[1], /obj/machinery/atmospherics/components/unary/portables_connector))
+ var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = gas_connector.nodes[1]
+ if(!portable_devices_connector.connected_device)
+ local_turf.assume_air(inside_air)
+ return
+ parents_air.merge(inside_air)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 2a3ac2bb082..5067dcddae2 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -63,7 +63,7 @@
return CONTEXTUAL_SCREENTIP_SET
/obj/machinery/atmospherics/components/unary/thermomachine/is_connectable()
- if(!anchored || panel_open)
+ if(!anchored)
return FALSE
. = ..()
@@ -78,7 +78,6 @@
if(check_pipe_on_turf())
set_anchored(FALSE)
set_panel_open(TRUE)
- change_pipe_connection(TRUE)
icon_state = "thermo-open"
balloon_alert(user, "the port is already in use!")
@@ -208,14 +207,14 @@
balloon_alert(user, "anchor!")
return ITEM_INTERACT_SUCCESS
if(default_deconstruction_screwdriver(user, "thermo-open", "thermo-0", tool))
- change_pipe_connection(panel_open)
+ update_appearance()
return ITEM_INTERACT_SUCCESS
/obj/machinery/atmospherics/components/unary/thermomachine/wrench_act(mob/living/user, obj/item/tool)
return default_change_direction_wrench(user, tool)
/obj/machinery/atmospherics/components/unary/thermomachine/crowbar_act(mob/living/user, obj/item/tool)
- return default_deconstruction_crowbar(tool)
+ return crowbar_deconstruction_act(user, tool)
/obj/machinery/atmospherics/components/unary/thermomachine/multitool_act(mob/living/user, obj/item/multitool/multitool)
if(!panel_open)
@@ -226,13 +225,6 @@
update_appearance()
return ITEM_INTERACT_SUCCESS
-/obj/machinery/atmospherics/components/unary/thermomachine/default_change_direction_wrench(mob/user, obj/item/I)
- if(!..())
- return FALSE
- set_init_directions()
- update_appearance()
- return TRUE
-
/obj/machinery/atmospherics/components/unary/thermomachine/multitool_act_secondary(mob/living/user, obj/item/tool)
if(!panel_open)
balloon_alert(user, "open panel!")
@@ -257,6 +249,7 @@
visible_message(span_warning("A pipe is hogging the port, remove the obstruction or change the machine piping layer."))
return ITEM_INTERACT_SUCCESS
if(default_unfasten_wrench(user, tool))
+ change_pipe_connection(!anchored)
return ITEM_INTERACT_SUCCESS
return
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
index 051299950bc..0b8b27a87f8 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm
@@ -268,11 +268,11 @@
environment.garbage_collect()
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(isopenturf(tile))
var/turf/open/floor_turf = tile
floor_turf.pollution?.scrub_amount(1)
- // SKYRAT EDIT END
+ // NOVA EDIT END
//Remix the resulting gases
air_contents.merge(filtered_out)
diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm
index d86531b5429..b90bafca8e6 100644
--- a/code/modules/atmospherics/machinery/datum_pipeline.dm
+++ b/code/modules/atmospherics/machinery/datum_pipeline.dm
@@ -49,13 +49,13 @@
reconcile_air()
//Only react if the mix has changed, and don't keep updating if it hasn't
update = air.react(src)
- //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed
+ //CalculateGasmixColor(air) // NOVA EDIT REMOVAL - Pipe gas visuals removed
/datum/pipeline/proc/set_air(datum/gas_mixture/new_air)
if(new_air == air)
return
air = new_air
- //CalculateGasmixColor(air) // SKYRAT EDIT REMOVAL - Pipe gas visuals removed
+ //CalculateGasmixColor(air) // NOVA EDIT REMOVAL - Pipe gas visuals removed
///Preps a pipeline for rebuilding, insterts it into the rebuild queue
/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base)
@@ -217,7 +217,7 @@
var/turf_temperature = target.GetTemperature()
var/turf_heat_capacity = target.GetHeatCapacity()
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(target.liquids?.liquid_state >= LIQUID_STATE_FOR_HEAT_EXCHANGERS)
turf_temperature = target.liquids.temp
turf_heat_capacity = target.liquids.total_reagents * REAGENT_HEAT_CAPACITY
@@ -231,7 +231,7 @@
air.temperature -= heat / total_heat_capacity
if(!target.liquids.immutable)
target.liquids.temp += heat / turf_heat_capacity
- else //SKYRAT EDIT END
+ else //NOVA EDIT END
if(turf_heat_capacity <= 0 || partial_heat_capacity <= 0)
return TRUE
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index 39b65fda7af..cc0504a5854 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -28,10 +28,10 @@
if(istype(local_turf))
if(islava(local_turf))
environment_temperature = 5000 //Yuck
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
else if (local_turf.liquids && local_turf.liquids.liquid_state >= LIQUID_STATE_FOR_HEAT_EXCHANGERS)
environment_temperature = local_turf.liquids.temp
- //SKYRAT EDIT END
+ //NOVA EDIT END
else if(local_turf.blocks_air)
environment_temperature = local_turf.temperature
else
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index 7479b92c420..18fe9817e81 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -36,8 +36,6 @@
var/shielding_powered = FALSE
///The powercell used to enable shielding
var/obj/item/stock_parts/cell/internal_cell
- ///Is the cell hatch opened
- var/cell_container_opened = FALSE
///used while processing to update appearance only when its pressure state changes
var/current_pressure_state
@@ -73,6 +71,7 @@
AddElement(/datum/element/atmos_sensitive, mapload)
AddElement(/datum/element/volatile_gas_storage)
AddComponent(/datum/component/gas_leaker, leak_rate=0.01)
+ register_context()
/obj/machinery/portable_atmospherics/canister/interact(mob/user)
. = ..()
@@ -81,6 +80,26 @@
playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE)
return
+/obj/machinery/portable_atmospherics/canister/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+ if(holding)
+ context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove tank"
+ if(!held_item)
+ return CONTEXTUAL_SCREENTIP_SET
+ if(istype(held_item, /obj/item/stock_parts/cell))
+ context[SCREENTIP_CONTEXT_LMB] = "Insert cell"
+ switch(held_item.tool_behaviour)
+ if(TOOL_SCREWDRIVER)
+ context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] hatch"
+ if(TOOL_CROWBAR)
+ if(panel_open && internal_cell)
+ context[SCREENTIP_CONTEXT_LMB] = "Remove cell"
+ if(TOOL_WELDER)
+ context[SCREENTIP_CONTEXT_LMB] = "Repair"
+ context[SCREENTIP_CONTEXT_RMB] = "Dismantle"
+
+ return CONTEXTUAL_SCREENTIP_SET
+
/obj/machinery/portable_atmospherics/canister/examine(user)
. = ..()
. += span_notice("A sticker on its side says MAX SAFE PRESSURE: [siunit_pressure(initial(pressure_limit), 0)]; MAX SAFE TEMPERATURE: [siunit(temp_limit, "K", 0)] .")
@@ -88,8 +107,8 @@
. += span_notice("The internal cell has [internal_cell.percent()]% of its total charge.")
else
. += span_notice("Warning, no cell installed, use a screwdriver to open the hatch and insert one.")
- if(cell_container_opened)
- . += span_notice("Cell hatch open, close it with a screwdriver.")
+ if(panel_open)
+ . += span_notice("Hatch open, close it with a screwdriver.")
// Please keep the canister types sorted
// Basic canister per gas below here
@@ -286,7 +305,7 @@
. += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "shielding")
. += emissive_appearance('icons/obj/pipes_n_cables/canisters.dmi', "shielding", src)
- if(cell_container_opened)
+ if(panel_open)
. += mutable_appearance('icons/obj/pipes_n_cables/canisters.dmi', "cell_hatch")
///Function is used to actually set the overlays
@@ -352,30 +371,27 @@
/obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/stock_parts/cell))
var/obj/item/stock_parts/cell/active_cell = item
- if(!cell_container_opened)
- balloon_alert(user, "open the hatch first")
+ if(!panel_open)
+ balloon_alert(user, "open hatch first!")
return TRUE
if(!user.transferItemToLoc(active_cell, src))
return TRUE
if(internal_cell)
user.put_in_hands(internal_cell)
- balloon_alert(user, "you successfully replace the cell")
+ balloon_alert(user, "you replace the cell")
else
- balloon_alert(user, "you successfully install the cell")
+ balloon_alert(user, "you install the cell")
internal_cell = active_cell
return TRUE
-
return ..()
/obj/machinery/portable_atmospherics/canister/screwdriver_act(mob/living/user, obj/item/screwdriver)
- screwdriver.play_tool_sound(src, 50)
- cell_container_opened = !cell_container_opened
- to_chat(user, span_notice("You [cell_container_opened ? "open" : "close"] the cell container hatch of [src]."))
- update_appearance()
- return ITEM_INTERACT_SUCCESS
+ if(default_deconstruction_screwdriver(user, icon_state, icon_state, screwdriver))
+ update_appearance()
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/portable_atmospherics/canister/crowbar_act(mob/living/user, obj/item/tool)
- if(!cell_container_opened || !internal_cell)
+ if(!panel_open || !internal_cell)
return ITEM_INTERACT_BLOCKING
internal_cell.forceMove(drop_location())
@@ -606,64 +622,19 @@
investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS)
if("valve")
- var/logmsg
- var/admin_msg
- var/danger = FALSE
- var/n = 0
- valve_open = !valve_open
- if(valve_open)
- SSair.start_processing_machine(src)
- logmsg = "Valve was opened by [key_name(usr)], starting a transfer into \the [holding || "air"]. "
- if(!holding)
- var/list/gaseslog = list() //list for logging all gases in canister
- for(var/id in air_contents.gases)
- var/gas = air_contents.gases[id]
- gaseslog[gas[GAS_META][META_GAS_NAME]] = gas[MOLES] //adds gases to gaseslog
- if(!gas[GAS_META][META_GAS_DANGER])
- continue
- if(gas[MOLES] > (gas[GAS_META][META_GAS_MOLES_VISIBLE] || MOLES_GAS_VISIBLE)) //if moles_visible is undefined, default to default visibility
- danger = TRUE //at least 1 danger gas
- logmsg = "[key_name(usr)] opened a canister that contains the following:"
- admin_msg = "[ADMIN_LOOKUPFLW(usr)] opened a canister that contains the following at [ADMIN_VERBOSEJMP(src)]:"
- for(var/name in gaseslog)
- n = n + 1
- logmsg += "\n[name]: [gaseslog[name]] moles."
- if(n <= 5) //the first five gases added
- admin_msg += "\n[name]: [gaseslog[name]] moles."
- if(n == 5 && length(gaseslog) > 5) //message added if more than 5 gases
- admin_msg += "\nToo many gases to log. Check investigate log."
- if(danger) //sent to admin's chat if contains dangerous gases
- message_admins(admin_msg)
- else
- logmsg = "valve was closed by [key_name(usr)], stopping the transfer into \the [holding || "air"]. "
- investigate_log(logmsg, INVESTIGATE_ATMOS)
- release_log += logmsg
+ toggle_valve(usr)
. = TRUE
if("eject")
- if(holding)
- if(valve_open)
- message_admins("[ADMIN_LOOKUPFLW(usr)] removed [holding] from [src] with valve still open at [ADMIN_VERBOSEJMP(src)] releasing contents into the [span_boldannounce("air")].")
- usr.investigate_log("removed the [holding], leaving the valve open and transferring into the [span_boldannounce("air")].", INVESTIGATE_ATMOS)
- replace_tank(usr, FALSE)
+ if(eject_tank(usr))
. = TRUE
if("shielding")
- shielding_powered = !shielding_powered
- SSair.start_processing_machine(src)
- message_admins("[ADMIN_LOOKUPFLW(usr)] turned [shielding_powered ? "on" : "off"] the [src] powered shielding.")
- usr.investigate_log("turned [shielding_powered ? "on" : "off"] the [src] powered shielding.")
- update_appearance()
+ toggle_shielding(usr)
. = TRUE
if("reaction_suppression")
- if(!nob_crystal_inserted)
- stack_trace("[usr] tried to toggle reaction suppression on a canister without a noblium crystal inside, possible href exploit attempt.")
- return
- suppress_reactions = !suppress_reactions
- SSair.start_processing_machine(src)
- message_admins("[ADMIN_LOOKUPFLW(usr)] turned [suppress_reactions ? "on" : "off"] the [src] reaction suppression.")
- usr.investigate_log("turned [suppress_reactions ? "on" : "off"] the [src] reaction suppression.")
+ toggle_reaction_suppression(usr)
. = TRUE
if("recolor")
@@ -682,6 +653,79 @@
update_appearance()
+/// Opens/closes the canister valve
+/obj/machinery/portable_atmospherics/canister/proc/toggle_valve(mob/user, wire_pulsed = FALSE)
+ valve_open = !valve_open
+ if(!valve_open)
+ var/logmsg = "valve was closed by [key_name(user)] [wire_pulsed ? "via wire pulse" : ""], stopping the transfer into \the [holding || "air"]. "
+ investigate_log(logmsg, INVESTIGATE_ATMOS)
+ release_log += logmsg
+ return
+
+ SSair.start_processing_machine(src)
+ if(holding)
+ var/logmsg = "Valve was opened by [key_name(user)] [wire_pulsed ? "via wire pulse" : ""], starting a transfer into \the [holding || "air"]. "
+ investigate_log(logmsg, INVESTIGATE_ATMOS)
+ release_log += logmsg
+ return
+
+ // Go over the gases in canister, pull all their info and mark the spooky ones
+ var/list/output = list()
+ output += "[key_name(user)] opened a canister [wire_pulsed ? "via wire pulse" : ""] that contains the following:"
+ var/list/admin_output = list()
+ admin_output += "[ADMIN_LOOKUPFLW(user)] opened a canister [wire_pulsed ? "via wire pulse" : ""] that contains the following at [ADMIN_VERBOSEJMP(src)]:"
+ var/list/gases = air_contents.gases
+ var/danger = FALSE
+ for(var/gas_index in 1 to length(gases))
+ var/list/gas_info = gases[gases[gas_index]]
+ var/list/meta = gas_info[GAS_META]
+ var/name = meta[META_GAS_NAME]
+ var/moles = gas_info[MOLES]
+
+ output += "[name]: [moles] moles."
+ if(gas_index <= 5) //the first five gases added
+ admin_output += "[name]: [moles] moles."
+ else if(gas_index == 6) // anddd the warning
+ admin_output += "Too many gases to log. Check investigate log."
+ //if moles_visible is undefined, default to default visibility
+ if(meta[META_GAS_DANGER] && moles > (meta[META_GAS_MOLES_VISIBLE] || MOLES_GAS_VISIBLE))
+ danger = TRUE
+
+ if(danger) //sent to admin's chat if contains dangerous gases
+ message_admins(admin_output.Join("\n"))
+ var/logmsg = output.Join("\n")
+ investigate_log(logmsg, INVESTIGATE_ATMOS)
+ release_log += logmsg
+
+/// Turns canister shielding on or off
+/obj/machinery/portable_atmospherics/canister/proc/toggle_shielding(mob/user, wire_pulsed = FALSE)
+ shielding_powered = !shielding_powered
+ SSair.start_processing_machine(src)
+ message_admins("[ADMIN_LOOKUPFLW(user)] turned [shielding_powered ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] powered shielding.")
+ user.investigate_log("turned [shielding_powered ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] powered shielding.")
+ update_appearance()
+
+/// Ejects tank from canister, if any
+/obj/machinery/portable_atmospherics/canister/proc/eject_tank(mob/user, wire_pulsed = FALSE)
+ if(!holding)
+ return FALSE
+ if(valve_open)
+ message_admins("[ADMIN_LOOKUPFLW(user)] removed [holding] from [src] with valve still open [wire_pulsed ? "via wire pulse" : ""] at [ADMIN_VERBOSEJMP(src)] releasing contents into the [span_boldannounce("air")].")
+ user.investigate_log("removed the [holding] [wire_pulsed ? "via wire pulse" : ""], leaving the valve open and transferring into the [span_boldannounce("air")].", INVESTIGATE_ATMOS)
+ replace_tank(user, FALSE)
+ return TRUE
+
+/// Turns hyper-noblium crystal reaction suppression in the canister on or off
+/obj/machinery/portable_atmospherics/canister/proc/toggle_reaction_suppression(mob/user, wire_pulsed = FALSE)
+ if(!nob_crystal_inserted)
+ if(!wire_pulsed)
+ stack_trace("[user] tried to toggle reaction suppression on a canister without a noblium crystal inside and without pulsing wires, possible href exploit attempt.")
+ return
+ suppress_reactions = !suppress_reactions
+ SSair.start_processing_machine(src)
+ message_admins("[ADMIN_LOOKUPFLW(user)] turned [suppress_reactions ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] reaction suppression.")
+ user.investigate_log("turned [suppress_reactions ? "on" : "off"] [wire_pulsed ? "via wire pulse" : ""] the [src] reaction suppression.")
+
/obj/machinery/portable_atmospherics/canister/proc/recolor(datum/greyscale_modify_menu/menu)
set_greyscale(menu.split_colors, menu.config.type)
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index 576dff39a8d..62e4c7b04c9 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -61,11 +61,11 @@
var/atom/target = holding || get_turf(src)
scrub(target.return_air())
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
for(var/turf/open/open_turf in view(3, src))
if(open_turf.pollution)
open_turf.pollution.scrub_amount(POLLUTION_HEIGHT_DIVISOR)
- //SKYRAT EDIT END
+ //NOVA EDIT END
return ..()
/**
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 6bfe17ebc2e..aa7d8a40d0d 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -25,14 +25,14 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
. = "Connection desynchronized. Recalibration in progress."
/* Check if the movable is allowed to arrive at this destination (exile implants mostly) */
-/** SKYRAT EDIT - CYBORGS CANT USE GETWAY
+/** NOVA EDIT - CYBORGS CANT USE GETWAY
/datum/gateway_destination/proc/incoming_pass_check(atom/movable/AM)
return TRUE
**/
// Just a reminder that the home gateway overrides this proc so if a borg someone finds themself in an away mission they can still leave
/datum/gateway_destination/proc/incoming_pass_check(atom/movable/AM)
return !iscyborg(AM)
-// SKYRAT EDIT - END
+// NOVA EDIT - END
/* Get the actual turf we'll arrive at */
/datum/gateway_destination/proc/get_target_turf()
CRASH("get target turf not implemented for this destination type")
@@ -138,7 +138,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
invisibility = INVISIBILITY_ABSTRACT
/obj/effect/gateway_portal_bumper/Bumped(atom/movable/AM)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/list/type_blacklist = list(
/obj/item/mmi,
/mob/living/silicon,
@@ -150,7 +150,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
continue
to_chat(AM, span_warning("[content_item] seems to be blocking you from entering the gateway!"))
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(get_dir(src,AM) == SOUTH)
gateway.Transfer(AM)
@@ -192,7 +192,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
var/teleportion_possible = FALSE
var/transport_active = FALSE
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/requires_key = FALSE
var/key_used = FALSE
@@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
key_used = TRUE
qdel(I)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/machinery/gateway/Initialize(mapload)
generate_destination()
@@ -287,10 +287,10 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
/obj/machinery/gateway/proc/activate(datum/gateway_destination/D)
if(!powered() || target)
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(requires_key && !key_used)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
target = D
target.activate(destination)
portal_visuals.setup_visuals(target)
@@ -348,7 +348,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
/obj/machinery/gateway/away/interact(mob/user, special_state)
. = ..()
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/list/type_blacklist = list(
/obj/item/mmi,
/mob/living/silicon,
@@ -361,7 +361,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
continue
to_chat(user, span_warning("[content_item] seems to be blocking you from entering the gateway!"))
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!target)
if(!GLOB.the_gateway)
to_chat(user,span_warning("Home gateway is not responding!"))
@@ -375,7 +375,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
/obj/machinery/computer/gateway_control
name = "Gateway Control"
desc = "Human friendly interface to the mysterious gate next to it."
- req_access = list(ACCESS_CENT_GENERAL) //SKYRAT EDIT ADDITION
+ req_access = list(ACCESS_CENT_GENERAL) //NOVA EDIT ADDITION
var/obj/machinery/gateway/G
/obj/machinery/computer/gateway_control/Initialize(mapload, obj/item/circuitboard/C)
@@ -413,13 +413,13 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
try_to_linkup()
return TRUE
if("activate")
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(ishuman(usr))
var/mob/living/carbon/human/interacting_human = usr
if(!allowed(interacting_human))
to_chat(interacting_human, "Error, you do not have the required access to link up the gateway. ")
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/datum/gateway_destination/D = locate(params["destination"]) in GLOB.gateway_destinations
try_to_connect(D)
return TRUE
diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm
index c46b0b9aa3c..864b4fa03f8 100644
--- a/code/modules/awaymissions/signpost.dm
+++ b/code/modules/awaymissions/signpost.dm
@@ -46,9 +46,6 @@
if (Adjacent(user))
return interact(user)
-/obj/structure/signpost/attack_slime(mob/user, list/modifiers)
- return interact(user)
-
/obj/structure/signpost/attack_animal(mob/user, list/modifiers)
return interact(user)
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
index 556a9fd63ad..d7ecda85018 100644
--- a/code/modules/awaymissions/super_secret_room.dm
+++ b/code/modules/awaymissions/super_secret_room.dm
@@ -105,8 +105,6 @@
/obj/structure/speaking_tile/attack_ai(mob/user)
return interact(user)
-/obj/structure/speaking_tile/attack_slime(mob/user, list/modifiers)
- return interact(user)
/obj/structure/speaking_tile/attack_animal(mob/user, list/modifiers)
return interact(user)
diff --git a/code/modules/basketball/controller.dm b/code/modules/basketball/controller.dm
index 53726c57389..53e89d182a3 100644
--- a/code/modules/basketball/controller.dm
+++ b/code/modules/basketball/controller.dm
@@ -49,7 +49,7 @@ GLOBAL_VAR(basketball_game)
GLOB.basketball_game = src
map_deleter = new
-/datum/basketball_controller/Destroy(force, ...)
+/datum/basketball_controller/Destroy(force)
. = ..()
GLOB.basketball_game = null
end_game()
diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm
index dd0585e0742..f356fc52315 100644
--- a/code/modules/basketball/hoop.dm
+++ b/code/modules/basketball/hoop.dm
@@ -53,9 +53,6 @@
/obj/structure/hoop/update_overlays()
. = ..()
- if(dir & NORTH)
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
-
var/dir_offset_x = 0
var/dir_offset_y = 0
@@ -72,7 +69,6 @@
var/mutable_appearance/scoreboard = mutable_appearance('icons/obj/signs.dmi', "basketball_scorecard")
scoreboard.pixel_x = dir_offset_x
scoreboard.pixel_y = dir_offset_y
- SET_PLANE_EXPLICIT(scoreboard, GAME_PLANE, src)
. += scoreboard
var/ones = total_score % 10
@@ -156,7 +152,7 @@
var/score_chance = throw_range_success[distance]
var/obj/structure/hoop/backboard = throwingdatum.initial_target?.resolve()
var/click_on_hoop = TRUE
- var/mob/living/thrower = throwingdatum.thrower
+ var/mob/living/thrower = throwingdatum?.get_thrower()
// aim penalty for not clicking directly on the hoop when shooting
if(!istype(backboard) || backboard != src)
diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm
index 20d4aa94b4c..3f94d79c15e 100644
--- a/code/modules/bitrunning/components/avatar_connection.dm
+++ b/code/modules/bitrunning/components/avatar_connection.dm
@@ -135,7 +135,7 @@
if(isnull(old_body) || damage_type == STAMINA || damage_type == OXYLOSS)
return
- if(damage >= (old_body.health + (ishuman(old_body) ? HUMAN_MAXHEALTH : MAX_LIVING_HEALTH))) // SKYRAT EDIT CHANGE - ORIGINAL: if(damage >= (old_body.health + MAX_LIVING_HEALTH))
+ if(damage >= (old_body.health + (ishuman(old_body) ? HUMAN_MAXHEALTH : MAX_LIVING_HEALTH))) // NOVA EDIT CHANGE - ORIGINAL: if(damage >= (old_body.health + MAX_LIVING_HEALTH))
full_avatar_disconnect(cause_damage = TRUE)
return
diff --git a/code/modules/bitrunning/components/netpod_healing.dm b/code/modules/bitrunning/components/netpod_healing.dm
index f400f42bc5d..03cdbc000be 100644
--- a/code/modules/bitrunning/components/netpod_healing.dm
+++ b/code/modules/bitrunning/components/netpod_healing.dm
@@ -13,7 +13,7 @@
START_PROCESSING(SSmachines, src)
-/datum/component/netpod_healing/Destroy(force, silent)
+/datum/component/netpod_healing/Destroy(force)
STOP_PROCESSING(SSmachines, src)
var/mob/living/carbon/player = parent
diff --git a/code/modules/bitrunning/components/npc_friendly.dm b/code/modules/bitrunning/components/npc_friendly.dm
index 3686f024056..0e15ec60e6f 100644
--- a/code/modules/bitrunning/components/npc_friendly.dm
+++ b/code/modules/bitrunning/components/npc_friendly.dm
@@ -28,7 +28,7 @@
previous_factions.Add(player.faction)
player.faction |= npc_factions
-/datum/component/npc_friendly/Destroy(force, silent)
+/datum/component/npc_friendly/Destroy(force)
. = ..()
var/mob/living/player = parent
diff --git a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm
index c2ea1a2b57f..6db7c3337b6 100644
--- a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm
+++ b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm
@@ -7,3 +7,11 @@
key = "wendigo"
map_name = "wendigo"
reward_points = BITRUNNER_REWARD_HIGH
+
+/obj/effect/mob_spawn/corpse/human/bitrunner/special(mob/living/spawned_mob)
+ . = ..()
+ spawned_mob.apply_status_effect(/datum/status_effect/gutted)
+
+/obj/effect/mob_spawn/corpse/human/cyber_police/special(mob/living/spawned_mob)
+ . = ..()
+ spawned_mob.apply_status_effect(/datum/status_effect/gutted)
diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm
index 2167a85a57c..31f2c4c9757 100644
--- a/code/modules/buildmode/submodes/advanced.dm
+++ b/code/modules/buildmode/submodes/advanced.dm
@@ -58,7 +58,7 @@
else if(right_click)
if(isobj(object))
log_admin("Build Mode: [key_name(c)] deleted [object] at [AREACOORD(object)]")
- // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object)
+ // NOVA EDIT -- BS delete sparks. Original was just qdel(object)
var/turf/T = get_turf(object)
qdel(object)
if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks))
diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm
index a37c6becfa1..92ca8c1aefe 100644
--- a/code/modules/buildmode/submodes/basic.dm
+++ b/code/modules/buildmode/submodes/basic.dm
@@ -37,7 +37,7 @@
var/turf/T = object
T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
else if(isobj(object))
- // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object)
+ // NOVA EDIT -- BS delete sparks. Original was just qdel(object)
var/turf/T = get_turf(object)
qdel(object)
if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks))
diff --git a/code/modules/buildmode/submodes/delete.dm b/code/modules/buildmode/submodes/delete.dm
index 79daeaa2c9d..cc755e796b3 100644
--- a/code/modules/buildmode/submodes/delete.dm
+++ b/code/modules/buildmode/submodes/delete.dm
@@ -15,7 +15,7 @@
var/turf/T = object
T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
else if(isatom(object))
- // SKYRAT EDIT -- BS delete sparks. Original was just qdel(object)
+ // NOVA EDIT -- BS delete sparks. Original was just qdel(object)
var/turf/T = get_turf(object)
qdel(object)
if(T && c.prefs.read_preference(/datum/preference/toggle/admin/delete_sparks))
diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm
new file mode 100644
index 00000000000..3e167c0f637
--- /dev/null
+++ b/code/modules/buildmode/submodes/map_export.dm
@@ -0,0 +1,80 @@
+/datum/buildmode_mode/map_export
+ key = "mapexport"
+ use_corner_selection = TRUE
+ /// Variable with the flag value to understand how to treat the shuttle zones.
+ var/shuttle_flag = SAVE_SHUTTLEAREA_DONTCARE
+ /// Variable with a flag value to indicate what should be saved (for example, only objects or only mobs).
+ var/save_flag = ALL
+ /// A guard variable to prevent more than one map export process from occurring at the same time.
+ var/static/is_running = FALSE
+
+/datum/buildmode_mode/map_export/change_settings(client/builder)
+ var/static/list/options = list(
+ "Object Saving" = SAVE_OBJECTS,
+ "Mob Saving" = SAVE_MOBS,
+ "Turf Saving" = SAVE_TURFS,
+ "Area Saving" = SAVE_AREAS,
+ "Space Turf Saving" = SAVE_SPACE,
+ "Object Property Saving" = SAVE_OBJECT_PROPERTIES,
+ )
+ var/what_to_change = tgui_input_list(builder, "What export setting would you like to toggle?", "Map Exporter", options)
+ save_flag ^= options[what_to_change]
+ to_chat(builder, "[what_to_change] is now [save_flag & options[what_to_change] ? "ENABLED" : "DISABLED"]. ")
+
+/datum/buildmode_mode/map_export/show_help(client/builder)
+ to_chat(builder, span_purple(examine_block(
+ "[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\
+ [span_bold("Set export options")] -> Right Mouse Button on buildmode button"))
+ )
+
+/datum/buildmode_mode/map_export/handle_selected_area(client/builder, params)
+ var/list/listed_params = params2list(params)
+ var/left_click = listed_params.Find("left")
+
+ //Ensure the selection is actually done
+ if(!left_click)
+ to_chat(builder, span_warning("Invalid selection."))
+ return
+
+ //If someone somehow gets build mode, stop them from using this.
+ if(!check_rights(R_DEBUG))
+ message_admins("[ckey(builder)] tried to run the map save generator but was rejected due to insufficient perms.")
+ to_chat(builder, span_warning("You must have +ADMIN rights to use this."))
+ return
+ //Emergency check
+ if(get_dist(cornerA, cornerB) > 60 || cornerA.z != cornerB.z)
+ var/confirm = tgui_alert(builder, "Are you sure about this? Exporting large maps may take quite a while.", "Map Exporter", list("Yes", "No"))
+ if(confirm != "Yes")
+ return
+
+ if(cornerA == cornerB)
+ return
+
+ if(is_running)
+ to_chat(builder, span_warning("Someone is already running the generator! Try again in a little bit."))
+ return
+
+ to_chat(builder, span_warning("Saving, please wait..."))
+ is_running = TRUE
+
+ log_admin("Build Mode: [key_name(builder)] is exporting the map area from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") //I put this before the actual saving of the map because it likely won't log if it crashes the fucking server
+
+ //oversimplified for readability and understandibility
+
+ var/minx = min(cornerA.x, cornerB.x)
+ var/miny = min(cornerA.y, cornerB.y)
+ var/minz = min(cornerA.z, cornerB.z)
+
+ var/maxx = max(cornerA.x, cornerB.x)
+ var/maxy = max(cornerA.y, cornerB.y)
+ var/maxz = max(cornerA.z, cornerB.z)
+
+ //Step 1: Get the data (This can take a while)
+ var/dat = write_map(minx, miny, minz, maxx, maxy, maxz, save_flag, shuttle_flag)
+
+ //Step 2: Write the data to a file and give map to client
+ var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss")
+ var/file_name = sanitize_filename(tgui_input_text(builder, "Filename?", "Map Exporter", "exported_map_[date]"))
+ send_exported_map(builder, file_name, dat)
+ to_chat(builder, span_green("The map was successfully saved!"))
+ is_running = FALSE
diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm
index a38937db301..b5df4981c9f 100644
--- a/code/modules/capture_the_flag/ctf_controller.dm
+++ b/code/modules/capture_the_flag/ctf_controller.dm
@@ -29,7 +29,7 @@
src.game_id = game_id
GLOB.ctf_games[game_id] = src
-/datum/ctf_controller/Destroy(force, ...)
+/datum/ctf_controller/Destroy(force)
GLOB.ctf_games[game_id] = null
return ..()
@@ -207,7 +207,7 @@
team_span = spawner.team_span
///If the team is destroyed all players in that team need their componenet removed.
-/datum/ctf_team/Destroy(force, ...)
+/datum/ctf_team/Destroy(force)
for(var/player in team_members)
var/datum/component/ctf_player/ctf_player = team_members[player]
ctf_player.end_game()
diff --git a/code/modules/capture_the_flag/ctf_player_component.dm b/code/modules/capture_the_flag/ctf_player_component.dm
index d3abc0f2571..c51b48b918c 100644
--- a/code/modules/capture_the_flag/ctf_player_component.dm
+++ b/code/modules/capture_the_flag/ctf_player_component.dm
@@ -74,7 +74,7 @@
player_mob.dust()
qdel(src)
-/datum/component/ctf_player/Destroy(force, silent)
+/datum/component/ctf_player/Destroy(force)
if(player_mob)
UnregisterSignal(player_mob, list(COMSIG_MOB_AFTER_APPLY_DAMAGE, COMSIG_MOB_GHOSTIZED))
return ..()
diff --git a/code/modules/cards/cards.dm b/code/modules/cards/cards.dm
index fb84b2d9789..5cd17a53515 100644
--- a/code/modules/cards/cards.dm
+++ b/code/modules/cards/cards.dm
@@ -27,7 +27,8 @@
if(. || !istype(target)) // was it caught or is the target not a living mob
return .
- if(!throwingdatum?.thrower) // if a mob didn't throw it (need two people to play 52 pickup)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(!thrower) // if a mob didn't throw it (need two people to play 52 pickup)
return
if(count_cards() == 0)
diff --git a/code/modules/cards/deck/deck.dm b/code/modules/cards/deck/deck.dm
index 632b01d509d..6a199bec4d7 100644
--- a/code/modules/cards/deck/deck.dm
+++ b/code/modules/cards/deck/deck.dm
@@ -188,11 +188,10 @@
if(. || !istype(target)) // was it caught or is the target not a living mob
return .
- if(!throwingdatum?.thrower) // if a mob didn't throw it (need two people to play 52 pickup)
+ var/mob/living/thrower = throwingdatum?.get_thrower()
+ if(!thrower) // if a mob didn't throw it (need two people to play 52 pickup)
return
- var/mob/living/thrower = throwingdatum.thrower
-
target.visible_message(span_warning("[target] is forced to play 52 card pickup!"), span_warning("You are forced to play 52 card pickup."))
target.add_mood_event("lost_52_card_pickup", /datum/mood_event/lost_52_card_pickup)
thrower.add_mood_event("won_52_card_pickup", /datum/mood_event/won_52_card_pickup)
diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm
index 9c287341b88..ab64efdb83d 100644
--- a/code/modules/cargo/bounties/mining.dm
+++ b/code/modules/cargo/bounties/mining.dm
@@ -18,7 +18,7 @@
required_count = 2
wanted_types = list(/obj/item/oar = TRUE)
-//SKYRAT EDIT REMOVAL
+//NOVA EDIT REMOVAL
/*
/datum/bounty/item/mining/bone_axe
name = "Bone Axe"
@@ -26,7 +26,7 @@
reward = CARGO_CRATE_VALUE * 15
wanted_types = list(/obj/item/fireaxe/boneaxe = TRUE)
*/
-//END SKYRAT EDIT REMOVAL
+//END NOVA EDIT REMOVAL
/datum/bounty/item/mining/bone_armor
name = "Bone Armor"
@@ -46,7 +46,7 @@
reward = CARGO_CRATE_VALUE * 15
required_count = 3
wanted_types = list(/obj/item/clothing/accessory/talisman = TRUE)
-//SKYRAT EDIT REMOVAL
+//NOVA EDIT REMOVAL
/*
/datum/bounty/item/mining/bone_dagger
name = "Bone Daggers"
@@ -55,7 +55,7 @@
required_count = 3
wanted_types = list(/obj/item/knife/combat/bone = TRUE)
*/
-//END SKYRAT EDIT REMOVAL
+//END NOVA EDIT REMOVAL
/datum/bounty/item/mining/polypore_mushroom
name = "Mushroom Bowl"
diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm
index 5c4e1e930b5..e56544a1864 100644
--- a/code/modules/cargo/coupon.dm
+++ b/code/modules/cargo/coupon.dm
@@ -1,4 +1,49 @@
-#define COUPON_OMEN "omen"
+///datum used by the Coupon Master PDA app to generate coupon items redeemed by a bank account.
+/datum/coupon_code
+ ///The pack that'll receive the discount
+ var/datum/supply_pack/discounted_pack
+ ///The discount of the pack, on a 0 to 1 range.
+ var/discount
+ /**
+ * If set, copies of the coupon code will delete itself after a while if not printed.
+ * The ones SSmodular_computer.discount_coupons stay intact.
+ */
+ var/expires_in
+ ///Has the coupon been printed. Dictates in which section it's shown, and that it cannot be printed again.
+ var/printed = FALSE
+ ///The timerid for deletion if expires_in is set.
+ var/timerid
+ ///Reference to the associated bank account, since we need to clear refs on deletion.
+ var/datum/bank_account/associated_account
+
+/datum/coupon_code/New(discount, discounted_pack, expires_in)
+ ..()
+ src.discounted_pack = discounted_pack
+ src.discount = discount
+ if(expires_in)
+ src.expires_in = world.time + expires_in
+
+/datum/coupon_code/Destroy()
+ if(associated_account)
+ associated_account.redeemed_coupons -= src
+ associated_account = null
+ return ..()
+
+/datum/coupon_code/proc/copy(datum/bank_account/account)
+ var/datum/coupon_code/copy = new(discount, discounted_pack, expires_in)
+ copy.associated_account = account
+ if(account)
+ LAZYADD(account.redeemed_coupons, src)
+ if(expires_in)
+ copy.timerid = QDEL_IN_STOPPABLE(copy, expires_in - world.time)
+
+/datum/coupon_code/proc/generate()
+ var/obj/item/coupon/coupon = new()
+ coupon.generate(discount, discounted_pack)
+ printed = TRUE
+ deltimer(timerid)
+ timerid = null
+ return coupon
/obj/item/coupon
name = "coupon"
@@ -12,18 +57,15 @@
var/obj/machinery/computer/cargo/inserted_console
/// Choose what our prize is :D
-/obj/item/coupon/proc/generate(rig_omen=FALSE)
- discounted_pack = pick(subtypesof(/datum/supply_pack/goody))
- var/list/chances = list("0.10" = 4, "0.15" = 8, "0.20" = 10, "0.25" = 8, "0.50" = 4, COUPON_OMEN = 1)
-
- if(rig_omen)
- discount_pct_off = COUPON_OMEN
- else
- discount_pct_off = pick_weight(chances)
+/obj/item/coupon/proc/generate(discount, datum/supply_pack/discounted_pack)
+ src.discounted_pack = discounted_pack || pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)])
+ var/static/list/chances = list("0.10" = 4, "0.15" = 8, "0.20" = 10, "0.25" = 8, "0.50" = 4, COUPON_OMEN = 1)
+ discount_pct_off = discount || pick_weight(chances)
if(discount_pct_off != COUPON_OMEN)
- discount_pct_off = text2num(discount_pct_off)
- name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]"
+ if(!discount) // the discount arg should be a number already, while the keys in the chances list cannot be numbers
+ discount_pct_off = text2num(discount_pct_off)
+ name = "coupon - [round(discount_pct_off * 100)]% off [initial(src.discounted_pack.name)]"
return
name = "coupon - fuck you"
@@ -71,5 +113,3 @@
LAZYREMOVE(inserted_console.loaded_coupons, src)
inserted_console = null
. = ..()
-
-#undef COUPON_OMEN
diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm
index 622ab5ef9b0..fd6e91a8580 100644
--- a/code/modules/cargo/exports.dm
+++ b/code/modules/cargo/exports.dm
@@ -115,7 +115,6 @@ Then the player gets the profit from selling his own wasted time.
return ..()
/datum/export/process()
- ..()
cost *= NUM_E**(k_elasticity * (1/30))
if(cost > init_cost)
cost = init_cost
diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm
index 3a5c7f975ed..ecb0d0d0460 100644
--- a/code/modules/cargo/exports/materials.dm
+++ b/code/modules/cargo/exports/materials.dm
@@ -19,7 +19,7 @@
return 0
var/obj/item/I = O
- var/list/mat_comp = I.get_material_composition(BREAKDOWN_FLAGS_EXPORT)
+ var/list/mat_comp = I.get_material_composition()
var/datum/material/mat_ref = ispath(material_id) ? locate(material_id) in mat_comp : GET_MATERIAL_REF(material_id)
if(isnull(mat_comp[mat_ref]))
return 0
diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm
index f3dca7a3dca..36ceff8ad51 100644
--- a/code/modules/cargo/gondolapod.dm
+++ b/code/modules/cargo/gondolapod.dm
@@ -65,13 +65,13 @@
/mob/living/simple_animal/pet/gondola/gondolapod/setOpened()
opened = TRUE
- SET_PLANE_IMPLICIT(src, GAME_PLANE)
+ layer = initial(layer)
update_appearance()
addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/, setClosed)), 50)
/mob/living/simple_animal/pet/gondola/gondolapod/setClosed()
opened = FALSE
- SET_PLANE_IMPLICIT(src, GAME_PLANE_FOV_HIDDEN)
+ layer = LOW_MOB_LAYER
update_appearance()
/mob/living/simple_animal/pet/gondola/gondolapod/death()
diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm
index cf08c773d06..7b185051478 100644
--- a/code/modules/cargo/goodies.dm
+++ b/code/modules/cargo/goodies.dm
@@ -3,6 +3,13 @@
access = NONE
group = "Goodies"
goody = TRUE
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
+
+/datum/supply_pack/goody/clear_pda
+ name = "Mint Condition Nanotrasen Clear PDA"
+ desc = "Mint condition, freshly repackaged! A valuable collector's item normally valued at over 2.5 million credits, now available for a steal!"
+ cost = 100000
+ contains = list(/obj/item/modular_computer/pda/clear)
/datum/supply_pack/goody/dumdum38
name = ".38 DumDum Speedloader"
diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm
index 309567d51e9..3f8ceb5ca02 100644
--- a/code/modules/cargo/order.dm
+++ b/code/modules/cargo/order.dm
@@ -85,7 +85,7 @@
src.manifest_can_fail = manifest_can_fail
src.can_be_cancelled = can_be_cancelled
-/datum/supply_order/Destroy(force, ...)
+/datum/supply_order/Destroy(force)
QDEL_NULL(applied_coupon)
return ..()
@@ -208,7 +208,7 @@
/// Custom type of order who's supply pack can be safely deleted
/datum/supply_order/disposable
-/datum/supply_order/disposable/Destroy(force, ...)
+/datum/supply_order/disposable/Destroy(force)
QDEL_NULL(pack)
return ..()
diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm
index 38552e4cb9a..a0a94badbb8 100644
--- a/code/modules/cargo/orderconsole.dm
+++ b/code/modules/cargo/orderconsole.dm
@@ -267,7 +267,7 @@
reason = reason,
paying_account = account,
coupon = applied_coupon,
- charge_on_purchase = TRUE, // SKYRAT EDIT ADDITION
+ charge_on_purchase = TRUE, // NOVA EDIT ADDITION
)
working_list += order
diff --git a/code/modules/cargo/packs/_packs.dm b/code/modules/cargo/packs/_packs.dm
index 2adec36584a..9257d2d1e3d 100644
--- a/code/modules/cargo/packs/_packs.dm
+++ b/code/modules/cargo/packs/_packs.dm
@@ -39,6 +39,8 @@
var/admin_spawned = FALSE
/// Goodies can only be purchased by private accounts and can have coupons apply to them. They also come in a lockbox instead of a full crate, so the 700 min doesn't apply
var/goody = FALSE
+ /// Can coupons target this pack? If so, how rarely?
+ var/discountable = SUPPLY_PACK_NOT_DISCOUNTABLE
/datum/supply_pack/New()
id = type
diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm
index 6ac7ee5095d..51fb4686038 100644
--- a/code/modules/cargo/packs/costumes_toys.dm
+++ b/code/modules/cargo/packs/costumes_toys.dm
@@ -30,6 +30,7 @@
)
crate_name = "collectable hats crate"
crate_type = /obj/structure/closet/crate/wooden
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/costumes_toys/formalwear
name = "Formalwear Crate"
@@ -70,6 +71,7 @@
contains = list(/obj/item/firing_pin/clown)
crate_name = "toy crate" // It's /technically/ a toy. For the clown, at least.
crate_type = /obj/structure/closet/crate/wooden
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/costumes_toys/lasertag
name = "Laser Tag Crate"
@@ -232,6 +234,7 @@
cost = 1000
contains = list()
crate_name = "booster pack pack"
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
/datum/supply_pack/costumes_toys/randomised/tcg/fill(obj/structure/closet/crate/C)
var/cardpacktype
@@ -244,6 +247,7 @@
desc = "This crate contains a random assortment of stickers."
cost = CARGO_CRATE_VALUE * 3
contains = list()
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
/datum/supply_pack/costumes_toys/stickers/fill(obj/structure/closet/crate/crate)
for(var/i in 1 to rand(1,2))
@@ -262,3 +266,4 @@
)
crate_name = "corgi pinata kit"
crate_type = /obj/structure/closet/crate/wooden
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm
index 49e97271251..9c57a4d6d7f 100644
--- a/code/modules/cargo/packs/emergency.dm
+++ b/code/modules/cargo/packs/emergency.dm
@@ -1,5 +1,6 @@
/datum/supply_pack/emergency
group = "Emergency"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/emergency/bio
name = "Biological Emergency Crate"
diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm
index ae03ffb0190..33d4b35cdf5 100644
--- a/code/modules/cargo/packs/engineering.dm
+++ b/code/modules/cargo/packs/engineering.dm
@@ -73,7 +73,7 @@
desc = "No rechargers? No problem, with the NT-75 EPI, you can recharge any standard \
cell-based equipment anytime, anywhere. Contains two Inducers."
cost = CARGO_CRATE_VALUE * 4
- contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0} = 2) //FALSE doesn't work in modified type paths apparently.
+ contains = list(/obj/item/inducer/orderable = 2)
crate_name = "inducer crate"
crate_type = /obj/structure/closet/crate/engineering/electrical
@@ -271,6 +271,7 @@
crate_name = "supermatter shard crate"
crate_type = /obj/structure/closet/crate/secure/radiation
dangerous = TRUE
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/engine/tesla_coils
name = "Tesla Coil Crate"
diff --git a/code/modules/cargo/packs/general.dm b/code/modules/cargo/packs/general.dm
index 1b4937f5ab4..e294d1bd4a1 100644
--- a/code/modules/cargo/packs/general.dm
+++ b/code/modules/cargo/packs/general.dm
@@ -25,6 +25,7 @@
/obj/item/toner = 2)
crate_name = "tattoo crate"
crate_type = /obj/structure/closet/crate/wooden
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
/datum/supply_pack/misc/bicycle
name = "Bicycle"
@@ -33,6 +34,7 @@
contains = list(/obj/vehicle/ridden/bicycle)
crate_name = "bicycle crate"
crate_type = /obj/structure/closet/crate/large
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/misc/bigband
name = "Big Band Instrument Collection"
diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm
index 22a2cd4dddc..61cdc594577 100644
--- a/code/modules/cargo/packs/imports.dm
+++ b/code/modules/cargo/packs/imports.dm
@@ -17,6 +17,7 @@
cost = CARGO_CRATE_VALUE * 2
contains = list(/obj/item/gun/ballistic/shotgun/toy = 8)
crate_name = "foam force crate"
+ discountable = SUPPLY_PACK_STD_DISCOUNTABLE
/datum/supply_pack/imports/foamforce/bonus
name = "Foam Force Pistols Crate"
@@ -37,6 +38,7 @@
contains = list(/obj/item/storage/backpack/meat)
crate_name = "MEAT MEAT MEAT MEAT MEAT"
crate_type = /obj/structure/closet/crate/necropolis
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/imports/duct_spider
name = "Duct Spider Crate"
@@ -45,6 +47,7 @@
contains = list(/mob/living/basic/spider/maintenance)
crate_name = "duct spider crate"
crate_type = /obj/structure/closet/crate/critter
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/imports/duct_spider/dangerous
name = "Duct Spider Crate?"
@@ -66,6 +69,7 @@
cost = CARGO_CRATE_VALUE * 100
contains = list(/obj/item/stack/sheet/mineral/bananium)
crate_name = "bananium sheet crate"
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/imports/naturalbait
name = "Freshness Jars full of Natural Bait"
@@ -201,7 +205,7 @@
/obj/item/grenade/mirage = 5,
)
-// SKYRAT EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_skyrat/modules/cargo/code/packs.dm
+// NOVA EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_nova/modules/cargo/code/packs.dm
/*
/datum/supply_pack/imports/russian
name = "Russian Surplus Military Gear Crate"
@@ -228,13 +232,14 @@
/obj/item/clothing/suit/armor/vest/russian_coat,
/obj/item/storage/toolbox/guncase/soviet = 2,
)
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/imports/russian/fill(obj/structure/closet/crate/our_crate)
for(var/items in 1 to 10)
var/item = pick(contains)
new item(our_crate)
*/
-// SKYRAT EDIT REMOVAL END
+// NOVA EDIT REMOVAL END
/datum/supply_pack/imports/moistnuggets
name = "Refurbished Sakhno Precision Rifle Crate"
@@ -272,6 +277,7 @@
crate_name = "abandoned crate"
contraband = TRUE
dangerous = TRUE //these are literally bombs so....
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/imports/shambler_evil
name = "Shamber's Juice Eldritch Energy! Crate"
diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm
index 676dfb0a2f7..899216ffb5b 100644
--- a/code/modules/cargo/packs/livestock.dm
+++ b/code/modules/cargo/packs/livestock.dm
@@ -222,6 +222,7 @@
cost = CARGO_CRATE_VALUE * 20
contains = list(/mob/living/basic/garden_gnome)
crate_name = "garden gnome crate"
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/critter/garden_gnome/generate()
. = ..()
diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm
index 90315f5c772..c30a698c06f 100644
--- a/code/modules/cargo/packs/medical.dm
+++ b/code/modules/cargo/packs/medical.dm
@@ -189,3 +189,4 @@
cost = CARGO_CRATE_VALUE * 6
contains = list(/obj/item/organ/internal/cyberimp/arm/muscle = 2)
crate_name = "Strong-Arm implant crate"
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index e5a1327b453..d806ce51d45 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -125,6 +125,7 @@
access = ACCESS_THEATRE
access_view = ACCESS_THEATRE
crate_type = /obj/structure/closet/crate/secure
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/organic/hydroponics
name = "Hydroponics Crate"
@@ -306,6 +307,7 @@
/obj/machinery/grill/unwrenched,
)
crate_name = "grilling starter kit crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/organic/grillfuel
name = "Grilling Fuel Kit"
@@ -317,6 +319,7 @@
/obj/item/reagent_containers/cup/soda_cans/monkey_energy,
)
crate_name = "grilling fuel kit crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/organic/tiziran_supply
name = "Tiziran Supply Box"
diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm
index 04129eb08a5..eacd24fdbd0 100644
--- a/code/modules/cargo/packs/security.dm
+++ b/code/modules/cargo/packs/security.dm
@@ -140,6 +140,7 @@
/obj/item/clothing/mask/gas/sechailer,
)
crate_name = "security clothing crate"
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/security/baton
name = "Stun Batons Crate"
@@ -168,6 +169,7 @@
/obj/item/clothing/mask/whistle,
/obj/item/conversion_kit,
)
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/// Armory packs
diff --git a/code/modules/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm
index ac59c5cb8ff..fddd093b4fb 100644
--- a/code/modules/cargo/packs/service.dm
+++ b/code/modules/cargo/packs/service.dm
@@ -103,6 +103,7 @@
contains = list(/obj/item/stack/tile/carpet/fifty = 2,
/obj/item/stack/tile/carpet/black/fifty = 2)
crate_name = "premium carpet crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/carpet_exotic
name = "Exotic Carpet Crate"
@@ -119,6 +120,7 @@
/obj/item/stack/tile/carpet/royalblack/fifty = 2,
)
crate_name = "exotic carpet crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/carpet_neon
name = "Simple Neon Carpet Crate"
@@ -140,6 +142,7 @@
/obj/item/stack/tile/carpet/neon/simple/pink/sixty = 2,
)
crate_name = "neon carpet crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/lightbulbs
name = "Replacement Lights"
@@ -243,6 +246,7 @@
)
crate_name = "\improper Ready-Donk crate"
crate_type = /obj/structure/closet/crate/freezer/food
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/randomized/ready_donk/fill(obj/structure/closet/crate/C)
for(var/i in 1 to 3)
@@ -265,6 +269,7 @@
/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel, //one extra syrup as a treat
)
crate_name = "coffee equipment crate"
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/coffeemaker
name = "Impressa Coffeemaker Crate"
@@ -273,6 +278,7 @@
contains = list(/obj/machinery/coffeemaker/impressa)
crate_name = "coffeemaker crate"
crate_type = /obj/structure/closet/crate/large
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/service/aquarium_kit
name = "Aquarium Kit"
@@ -287,6 +293,7 @@
)
crate_name = "aquarium kit crate"
crate_type = /obj/structure/closet/crate/wooden
+ discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/// Spare bar sign wallmount
/datum/supply_pack/service/bar_sign
@@ -295,3 +302,4 @@
cost = CARGO_CRATE_VALUE * 14
contains = list(/obj/item/wallframe/barsign/all_access)
crate_name = "bar sign crate"
+ discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index 20ea6fec8ba..58c4298ac0e 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -259,11 +259,11 @@
var/mob/living/carbon/carbon_target_mob = target_living
for(var/obj/item/organ/organ_to_yeet as anything in carbon_target_mob.organs)
var/destination = get_edge_target_turf(turf_underneath, pick(GLOB.alldirs)) //Pick a random direction to toss them in
- // SKYRAT EDIT START - Non-spillable organs
+ // NOVA EDIT START - Non-spillable organs
if(!organ_to_yeet.drop_when_organ_spilling)
qdel(organ_to_yeet)
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
organ_to_yeet.Remove(carbon_target_mob) //Note that this isn't the same proc as for lists
organ_to_yeet.forceMove(turf_underneath) //Move the organ outta the body
organ_to_yeet.throw_at(destination, 2, 3) //Thow the organ at a random tile 3 spots away
diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm
index 707267e7143..158e466c107 100644
--- a/code/modules/client/client_colour.dm
+++ b/code/modules/client/client_colour.dm
@@ -191,7 +191,7 @@
colour = list(/*R*/ 0,0,0,0, /*G*/ 0,175,0,0, /*B*/ 0,0,0,0, /*A*/ 0,0,0,1, /*C*/0,-130,0,0) // Matrix colors
/datum/client_colour/monochrome
- colour = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
+ colour = COLOR_MATRIX_GRAYSCALE
priority = PRIORITY_HIGH //we can't see colors anyway!
override = TRUE
fade_in = 20
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 44591686aef..aa210fa9fe1 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -3,10 +3,7 @@
////////////
GLOBAL_LIST_INIT(blacklisted_builds, list(
- "1407" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see",
- "1408" = "bug preventing client display overrides from working leads to clients being able to see things/mobs they shouldn't be able to see",
- "1428" = "bug causing right-click menus to show too many verbs that's been fixed in version 1429",
-
+ "1622" = "Bug breaking rendering can lead to wallhacks.",
))
#define LIMITER_SIZE 5
@@ -35,10 +32,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
/client/Topic(href, href_list, hsrc, hsrc_command)
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
- //SKYRAT EDIT ADDITION BEGIN - MENTOR
+ //NOVA EDIT ADDITION BEGIN - MENTOR
if(mentor_client_procs(href_list))
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
#ifndef TESTING
if (lowertext(hsrc_command) == "_debug") //disable the integrated byond vv in the client side debugging tools since it doesn't respect vv read protections
@@ -254,11 +251,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
else if(GLOB.deadmins[ckey])
add_verb(src, /client/proc/readmin)
connecting_admin = TRUE
- //SKYRAT EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not.
+ //NOVA EDIT ADDITION //We will check the population here, because we need to know if the client is an admin or not.
if(!check_population(connecting_admin))
qdel(src)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(CONFIG_GET(flag/autoadmin))
if(!GLOB.admin_datums[ckey])
var/list/autoadmin_ranks = ranks_from_rank_name(CONFIG_GET(string/autoadmin_rank))
@@ -606,7 +603,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
QDEL_NULL(view_size)
QDEL_NULL(void)
QDEL_NULL(tooltips)
- QDEL_NULL(open_loadout_ui) //SKYRAT EDIT ADDITION
+ QDEL_NULL(open_loadout_ui) //NOVA EDIT ADDITION
seen_messages = null
Master.UpdateTickRate()
..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening
@@ -648,7 +645,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!query_client_in_db.Execute())
qdel(query_client_in_db)
return
-/*
+/* NOVA EDIT REMOVAL - Original
var/client_is_in_db = query_client_in_db.NextRow()
// If we aren't an admin, and the flag is set (the panic bunker is enabled).
if(CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey])
@@ -684,22 +681,22 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
var/client_is_in_db = query_client_in_db.NextRow()
if(!client_is_in_db)
- //SKYRAT EDIT ADDITION BEGIN - PANICBUNKER
+ //NOVA EDIT ADDITION BEGIN - PANICBUNKER
if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough))
log_access("Failed Login: [key] - [address] - New account attempting to connect during panic bunker")
- message_admins("Failed Login: [key] - [address] - New account attempting to connect during panic bunker ")
- to_chat_immediate(src, {"Hi! We have temporarily enabled safety measures that prevents new players from joining currently. Please try again later, or contact a staff on Discord if you have any questions. To join our community, check out our Discord! To gain full access to our Discord, read the rules and post a request in the #access-requests channel under the \"Landing Zone\" category in the Discord server linked here: https://discord.gg/6RpdCgR "}) //skyrat-edit
+ message_admins(span_adminnotice("Failed Login: [key] - [address] - New account attempting to connect during panic bunker"))
+ to_chat_immediate(src, span_notice("Hi! We have temporarily enabled safety measures that prevents new players from joining currently. Please try again later, or contact a staff on Discord if you have any questions. To join our community, check out our Discord! To gain full access to our Discord, read the rules and post a request in the #access-requests channel under the \"Landing Zone\" category in the Discord server linked here: https://discord.gg/novasector "))
var/list/connectiontopic_a = params2list(connectiontopic)
var/list/panic_addr = CONFIG_GET(string/panic_server_address)
if(panic_addr && !connectiontopic_a["redirect"])
var/panic_name = CONFIG_GET(string/panic_server_name)
- to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr]. ")
+ to_chat(src, span_notice("Sending you to [panic_name ? panic_name : panic_addr]."))
winset(src, null, "command=.options")
src << link("[panic_addr]?redirect=1")
qdel(query_client_in_db)
qdel(src)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
new_player = 1
account_join_date = findJoinDate()
var/datum/db_query/query_add_player = SSdbcore.NewQuery({"
@@ -714,10 +711,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(!account_join_date)
account_join_date = "Error"
account_age = -1
- //SKYRAT EDIT ADDITION BEGIN - PANICBUNKER
+ //NOVA EDIT ADDITION BEGIN - PANICBUNKER
else if(ckey in GLOB.bunker_passthrough)
GLOB.bunker_passthrough -= ckey
- //SKYRAT EDIT END
+ //NOVA EDIT END
qdel(query_client_in_db)
var/datum/db_query/query_get_client_age = SSdbcore.NewQuery(
"SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = :ckey",
@@ -760,10 +757,10 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
qdel(query_log_player)
if(!account_join_date)
account_join_date = "Error"
- var/datum/db_query/query_log_connection = SSdbcore.NewQuery(/* SKYRAT EDIT CHANGE - MULTISERVER */{"
+ var/datum/db_query/query_log_connection = SSdbcore.NewQuery(/* NOVA EDIT CHANGE - MULTISERVER */{"
INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_name`,`server_ip`,`server_port`,`round_id`,`ckey`,`ip`,`computerid`)
VALUES(null,Now(),:server_name,INET_ATON(:internet_address),:port,:round_id,:ckey,INET_ATON(:ip),:computerid)
- "}, list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = world.port, "round_id" = GLOB.round_id, "ckey" = ckey, "ip" = address, "computerid" = computer_id)) //SKYRAT EDIT CHANGE - MULTISERVER
+ "}, list("server_name" = CONFIG_GET(string/serversqlname), "internet_address" = world.internet_address || "0", "port" = world.port, "round_id" = GLOB.round_id, "ckey" = ckey, "ip" = address, "computerid" = computer_id)) //NOVA EDIT CHANGE - MULTISERVER
query_log_connection.Execute()
qdel(query_log_connection)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 741c7f7a36f..3be90e397c6 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/// Ensures that we always load the last used save, QOL
var/default_slot = 1
/// The maximum number of slots we're allowed to contain
- var/max_save_slots = 30 //SKYRAT EDIT - ORIGINAL 3
+ var/max_save_slots = 30 //NOVA EDIT - ORIGINAL 3
/// Bitflags for communications that are muted
var/muted = NONE
@@ -88,14 +88,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/// If set to TRUE, will update character_profiles on the next ui_data tick.
var/tainted_character_profiles = FALSE
-/datum/preferences/Destroy(force, ...)
+/datum/preferences/Destroy(force)
QDEL_NULL(character_preview_view)
QDEL_LIST(middleware)
value_cache = null
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(pref_species)
QDEL_NULL(pref_species)
- //SKYRAT EDIT END
+ //NOVA EDIT END
return ..()
/datum/preferences/New(client/parent)
@@ -109,9 +109,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
load_path(parent.ckey)
if(load_and_save && !fexists(path))
try_savefile_type_migration()
- unlock_content = !!parent.IsByondMember() || GLOB.donator_list[parent.ckey] //SKYRAT EDIT - ADDED DONATOR CHECK
- if(unlock_content)
- max_save_slots = 50 //SKYRAT EDIT - ORIGINAL 8
+ unlock_content = !!parent.IsByondMember()
+ donator_status = !!GLOB.donator_list[parent.ckey] //NOVA EDIT ADD - DONATOR CHECK
+ if(unlock_content || donator_status) //NOVA EDIT CHANGE - ADD DONATOR CHECK
+ max_save_slots = 50 //NOVA EDIT - ORIGINAL 8
else
CRASH("attempted to create a preferences datum without a client or mock!")
load_savefile()
@@ -124,11 +125,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/loaded_preferences_successfully = load_preferences()
if(loaded_preferences_successfully)
if(load_character())
- // SKYRAT EDIT START - Sanitizing preferences
+ // NOVA EDIT START - Sanitizing preferences
sanitize_languages()
sanitize_quirks()
- // SKYRAT EDIT END
- return // SKYRAT EDIT - Don't remove this. Just don't. Nothing is worth forced random characters.
+ // NOVA EDIT END
+ return // NOVA EDIT - Don't remove this. Just don't. Nothing is worth forced random characters.
//we couldn't load character data so just randomize the character appearance + name
randomise_appearance_prefs() //let's create a random character then - rather than a fat, bald and naked man.
if(parent)
@@ -174,12 +175,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
data["character_profiles"] = create_character_profiles()
tainted_character_profiles = FALSE
- //SKYRAT EDIT BEGIN
+ //NOVA EDIT BEGIN
data["preview_selection"] = preview_pref
data["quirks_balance"] = GetQuirkBalance()
data["positive_quirk_count"] = GetPositiveQuirkCount()
- //SKYRAT EDIT END
+ //NOVA EDIT END
data["character_preferences"] = compile_character_preferences(user)
@@ -193,12 +194,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/datum/preferences/ui_static_data(mob/user)
var/list/data = list()
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(CONFIG_GET(flag/disable_erp_preferences))
data["preview_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_UNDERWEAR, PREVIEW_PREF_NAKED)
else
data["preview_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_UNDERWEAR, PREVIEW_PREF_NAKED, PREVIEW_PREF_NAKED_AROUSED)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
data["character_profiles"] = create_character_profiles()
@@ -246,10 +247,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
randomise_appearance_prefs()
save_character()
- // SKYRAT EDIT START - Sanitizing languages
+ // NOVA EDIT START - Sanitizing languages
if(sanitize_languages())
save_character()
- // SKYRAT EDIT END
+ // NOVA EDIT END
for (var/datum/preference_middleware/preference_middleware as anything in middleware)
preference_middleware.on_new_character(usr)
@@ -258,12 +259,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return TRUE
if ("rotate")
- /* SKYRAT EDIT - Bi-directional prefs menu rotation - ORIGINAL:
+ /* NOVA EDIT - Bi-directional prefs menu rotation - ORIGINAL:
character_preview_view.dir = turn(character_preview_view.dir, -90)
- */ // ORIGINAL END - SKYRAT EDIT START:
+ */ // ORIGINAL END - NOVA EDIT START:
var/backwards = params["backwards"]
character_preview_view.dir = turn(character_preview_view.dir, backwards ? 90 : -90)
- // SKYRAT EDIT END
+ // NOVA EDIT END
return TRUE
if ("set_preference")
@@ -284,12 +285,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if (istype(requested_preference, /datum/preference/name))
tainted_character_profiles = TRUE
- //SKYRAT EDIT
+ //NOVA EDIT
update_mutant_bodyparts(requested_preference)
for (var/datum/preference_middleware/preference_middleware as anything in middleware)
if (preference_middleware.post_set_preference(usr, requested_preference_key, value))
return TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
return TRUE
if ("set_color_preference")
var/requested_preference_key = params["preference"]
@@ -318,16 +319,18 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return FALSE
return TRUE
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if("update_preview")
preview_pref = params["updated_preview"]
character_preview_view.update_body()
return TRUE
if ("open_loadout")
- if(parent.open_loadout_ui)
- parent.open_loadout_ui.ui_interact(usr)
+ var/datum/loadout_manager/open_loadout_ui = parent.open_loadout_ui?.resolve()
+ if(open_loadout_ui)
+ open_loadout_ui.ui_interact(usr)
else
+ parent.open_loadout_ui = null
var/datum/loadout_manager/tgui = new(usr)
tgui.ui_interact(usr)
return TRUE
@@ -369,7 +372,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
// For the quirks in the prefs menu.
if ("get_quirks_balance")
return TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
for (var/datum/preference_middleware/preference_middleware as anything in middleware)
@@ -472,7 +475,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
body = new
// Without this, it doesn't show up in the menu
- body.appearance_flags |= KEEP_TOGETHER // SKYRAT EDIT - Fix pixel scaling - ORIGINAL: body.appearance_flags &= ~KEEP_TOGETHER
+ body.appearance_flags |= KEEP_TOGETHER // NOVA EDIT - Fix pixel scaling - ORIGINAL: body.appearance_flags &= ~KEEP_TOGETHER
/datum/preferences/proc/create_character_profiles()
var/list/profiles = list()
@@ -523,11 +526,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
for(var/V in all_quirks)
var/datum/quirk/T = SSquirks.quirks[V]
bal -= initial(T.value)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
for(var/key in augments)
var/datum/augment_item/aug = GLOB.augment_items[augments[key]]
bal -= aug.cost
- //SKYRAT EDIT END
+ //NOVA EDIT END
return bal
/datum/preferences/proc/GetPositiveQuirkCount()
@@ -595,8 +598,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
apply_prefs_to(character, icon_updates)
/// Applies the given preferences to a human mob.
-/datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE, visuals_only = FALSE) // SKYRAT EDIT - Customization - ORIGINAL: /datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE)
- character.dna.features = MANDATORY_FEATURE_LIST //SKYRAT EDIT CHANGE - We need to instansiate the list with the basic features.
+/datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE, visuals_only = FALSE) // NOVA EDIT - Customization - ORIGINAL: /datum/preferences/proc/apply_prefs_to(mob/living/carbon/human/character, icon_updates = TRUE)
+ character.dna.features = MANDATORY_FEATURE_LIST //NOVA EDIT CHANGE - We need to instansiate the list with the basic features.
for (var/datum/preference/preference as anything in get_preferences_in_priority_order())
if (preference.savefile_identifier != PREFERENCE_CHARACTER)
@@ -604,10 +607,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
preference.apply_to_human(character, read_preference(preference.type), src)
- // SKYRAT EDIT ADDITION START - middleware apply human prefs
+ // NOVA EDIT ADDITION START - middleware apply human prefs
for (var/datum/preference_middleware/preference_middleware as anything in middleware)
preference_middleware.apply_to_human(character, src, visuals_only = visuals_only)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
character.dna.real_name = character.real_name
diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm
index 8d2d52ae0d1..69c1e6a6b79 100644
--- a/code/modules/client/preferences/_preference.dm
+++ b/code/modules/client/preferences/_preference.dm
@@ -209,7 +209,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key())
/// Apply this preference onto the given human.
/// Must be overriden by subtypes.
/// Called when the savefile_identifier == PREFERENCE_CHARACTER.
-/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) //SKYRAT EDIT CHANGE
+/datum/preference/proc/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) //NOVA EDIT CHANGE
SHOULD_NOT_SLEEP(TRUE)
SHOULD_CALL_PARENT(FALSE)
CRASH("`apply_to_human()` was not implemented for [type]!")
diff --git a/code/modules/client/preferences/assets.dm b/code/modules/client/preferences/assets.dm
index 6fa29b9f90f..a75178cc3e1 100644
--- a/code/modules/client/preferences/assets.dm
+++ b/code/modules/client/preferences/assets.dm
@@ -2,7 +2,6 @@
/datum/asset/spritesheet/preferences
name = "preferences"
early = TRUE
- cross_round_cachable = TRUE
/datum/asset/spritesheet/preferences/create_spritesheets()
var/list/to_insert = list()
diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm
index 827b91c49c2..b867e3ce884 100644
--- a/code/modules/client/preferences/clothing.dm
+++ b/code/modules/client/preferences/clothing.dm
@@ -1,13 +1,13 @@
-/proc/generate_underwear_icon(datum/sprite_accessory/accessory, icon/base_icon, color, icon_offset = 0) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
+/proc/generate_underwear_icon(datum/sprite_accessory/accessory, icon/base_icon, color, icon_offset = 0) //NOVA EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
var/icon/final_icon = new(base_icon)
if (!isnull(accessory))
- var/icon/accessory_icon = icon(accessory.icon, accessory.icon_state) // SKYRAT EDIT CHANGE: ORIGINAL - var/icon/accessory_icon = icon('icons/mob/clothing/underwear.dmi', accessory.icon_state)
+ var/icon/accessory_icon = icon(accessory.icon, accessory.icon_state) // NOVA EDIT CHANGE: ORIGINAL - var/icon/accessory_icon = icon('icons/mob/clothing/underwear.dmi', accessory.icon_state)
if (color && !accessory.use_static)
accessory_icon.Blend(color, ICON_MULTIPLY)
final_icon.Blend(accessory_icon, ICON_OVERLAY)
- final_icon.Crop(10, 1+icon_offset, 22, 13+icon_offset) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
+ final_icon.Crop(10, 1+icon_offset, 22, 13+icon_offset) //NOVA EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
final_icon.Scale(32, 32)
return final_icon
@@ -136,9 +136,9 @@
if (value != "Nude")
var/datum/sprite_accessory/accessory = GLOB.undershirt_list[value]
- icon_with_undershirt.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) // SKYRAT EDIT CHANGE: ORIGINAL - icon_with_undershirt.Blend(icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY)
+ icon_with_undershirt.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY) // NOVA EDIT CHANGE: ORIGINAL - icon_with_undershirt.Blend(icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY)
- icon_with_undershirt.Crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
+ icon_with_undershirt.Crop(10, 11, 22, 23) // NOVA EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
icon_with_undershirt.Scale(32, 32)
return icon_with_undershirt
@@ -165,7 +165,7 @@
lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY)
lower_half.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY)
- return generate_underwear_icon(GLOB.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // SKYRAT EDIT CHANGE : ICON_OFFSET
+ return generate_underwear_icon(GLOB.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // NOVA EDIT CHANGE : ICON_OFFSET
/datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value)
target.underwear = value
diff --git a/code/modules/client/preferences/fov_darkness.dm b/code/modules/client/preferences/fov_darkness.dm
deleted file mode 100644
index b0146e10b40..00000000000
--- a/code/modules/client/preferences/fov_darkness.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/datum/preference/numeric/fov_darkness
- category = PREFERENCE_CATEGORY_GAME_PREFERENCES
- savefile_key = "fov_darkness"
- savefile_identifier = PREFERENCE_PLAYER
-
- minimum = 0
- maximum = 255
-
-/datum/preference/numeric/fov_darkness/create_default_value()
- return 255
-
-/datum/preference/numeric/fov_darkness/apply_to_client_updated(client/client, value)
- if(client.mob)
- var/datum/component/fov_handler/fov_component = client.mob.GetComponent(/datum/component/fov_handler)
- if(!fov_component)
- return
- fov_component.visual_shadow.alpha = value
diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm
index f602d6b3a66..d26f9a15ffb 100644
--- a/code/modules/client/preferences/language.dm
+++ b/code/modules/client/preferences/language.dm
@@ -20,6 +20,7 @@
//we add uncommon as it's foreigner-only.
var/datum/language/uncommon/uncommon_language = /datum/language/uncommon
values += initial(uncommon_language.name)
+ values += /datum/language/common::name // NOVA EDIT ADDITION START - Let's you select common
for(var/datum/language/language_type as anything in GLOB.uncommon_roundstart_languages)
if(initial(language_type.name) in values)
diff --git a/code/modules/client/preferences/middleware/_middleware.dm b/code/modules/client/preferences/middleware/_middleware.dm
index b7719270cc3..9f33eda22c2 100644
--- a/code/modules/client/preferences/middleware/_middleware.dm
+++ b/code/modules/client/preferences/middleware/_middleware.dm
@@ -51,14 +51,14 @@
/datum/preference_middleware/proc/on_new_character(mob/user)
return
-// SKYRAT EDIT
+// NOVA EDIT
/// Called after every update_preference, returns TRUE if this handled it.
/datum/preference_middleware/proc/post_set_preference(mob/user, preference, value)
return FALSE
/// Called when applying preferences to the mob.
-/datum/preference_middleware/proc/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) //SKYRAT EDIT CHANGE
+/datum/preference_middleware/proc/apply_to_human(mob/living/carbon/human/target, datum/preferences/preferences, visuals_only = FALSE) //NOVA EDIT CHANGE
SHOULD_NOT_SLEEP(TRUE)
SHOULD_CALL_PARENT(FALSE)
return
-//SKYRAT EDIT END
+//NOVA EDIT END
diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm
index 52593aad912..acd4b265bd6 100644
--- a/code/modules/client/preferences/middleware/antags.dm
+++ b/code/modules/client/preferences/middleware/antags.dm
@@ -108,7 +108,6 @@
/datum/asset/spritesheet/antagonists
name = "antagonists"
early = TRUE
- cross_round_cachable = TRUE
/// Mapping of spritesheet keys -> icons
var/list/antag_icons = list()
@@ -119,7 +118,7 @@
ROLE_GLITCH = /datum/antagonist/bitrunning_glitch,
ROLE_FUGITIVE = /datum/antagonist/fugitive,
ROLE_LONE_OPERATIVE = /datum/antagonist/nukeop/lone,
- ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //SKYRAT EDIT
+ ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //NOVA EDIT
ROLE_SENTIENCE = /datum/antagonist/sentient_creature,
)
diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm
index d61fb53c98f..a7261bbaf17 100644
--- a/code/modules/client/preferences/middleware/jobs.dm
+++ b/code/modules/client/preferences/middleware/jobs.dm
@@ -1,9 +1,9 @@
/datum/preference_middleware/jobs
action_delegations = list(
"set_job_preference" = PROC_REF(set_job_preference),
- // SKYRAT EDIT
+ // NOVA EDIT
"set_job_title" = PROC_REF(set_job_title),
- // SKYRAT EDIT END
+ // NOVA EDIT END
)
/datum/preference_middleware/jobs/proc/set_job_preference(list/params, mob/user)
@@ -28,7 +28,7 @@
return TRUE
-// SKYRAT EDIT
+// NOVA EDIT
/datum/preference_middleware/jobs/proc/set_job_title(list/params, mob/user)
var/job_title = params["job"]
var/new_job_title = params["new_title"]
@@ -44,7 +44,7 @@
preferences.alt_job_titles[job_title] = new_job_title
return TRUE
-// SKYRAT EDIT END
+// NOVA EDIT END
/datum/preference_middleware/jobs/get_constant_data()
var/list/data = list()
@@ -73,8 +73,8 @@
jobs[job.title] = list(
"description" = job.description,
"department" = department_name,
- "veteran" = job.veteran_only, // SKYRAT EDIT
- "alt_titles" = job.alt_titles, // SKYRAT EDIT
+ "veteran" = job.veteran_only, // NOVA EDIT
+ "alt_titles" = job.alt_titles, // NOVA EDIT
)
data["departments"] = departments
@@ -84,24 +84,24 @@
/datum/preference_middleware/jobs/get_ui_data(mob/user)
var/list/data = list()
- // SKYRAT EDIT
+ // NOVA EDIT
if(isnull(preferences.alt_job_titles))
preferences.alt_job_titles = list()
- // SKYRAT EDIT END
+ // NOVA EDIT END
data["job_preferences"] = preferences.job_preferences
- // SKYRAT EDIT
+ // NOVA EDIT
data["job_alt_titles"] = preferences.alt_job_titles
data["species_restricted_jobs"] = get_unavailable_jobs_for_species()
- // SKYRAT EDIT END
+ // NOVA EDIT END
return data
/datum/preference_middleware/jobs/get_ui_static_data(mob/user)
var/list/data = list()
- // SKYRAT EDIT
+ // NOVA EDIT
if(SSplayer_ranks.is_veteran(user.client))
data["is_veteran"] = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/list/required_job_playtime = get_required_job_playtime(user)
if (!isnull(required_job_playtime))
data += required_job_playtime
@@ -147,7 +147,7 @@
return data
-//SKYRAT EDIT ADDITION BEGIN - CHECKING FOR INCOMPATIBLE SPECIES
+//NOVA EDIT ADDITION BEGIN - CHECKING FOR INCOMPATIBLE SPECIES
//This returns a list of jobs that are unavailable for the player's current species
/datum/preference_middleware/jobs/proc/get_unavailable_jobs_for_species()
var/list/data = list()
@@ -158,4 +158,4 @@
return data
-//SKYRAT EDIT ADDITION END
+//NOVA EDIT ADDITION END
diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm
index 18ddf0aebab..3fabab63238 100644
--- a/code/modules/client/preferences/middleware/quirks.dm
+++ b/code/modules/client/preferences/middleware/quirks.dm
@@ -43,7 +43,7 @@
"value" = initial(quirk.value),
"customizable" = constant_data?.is_customizable(),
"customization_options" = customization_options,
- "veteran_only" = initial(quirk.veteran_only), // SKYRAT EDIT - Veteran quirks
+ "veteran_only" = initial(quirk.veteran_only), // NOVA EDIT - Veteran quirks
)
return list(
@@ -58,15 +58,15 @@
/datum/preference_middleware/quirks/proc/give_quirk(list/params, mob/user)
var/quirk_name = params["quirk"]
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/list/quirks = SSquirks.get_quirks()
var/datum/quirk/quirk = quirks[quirk_name]
if(initial(quirk.veteran_only) && !SSplayer_ranks.is_veteran(preferences?.parent))
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/list/new_quirks = preferences.all_quirks | quirk_name
- if (SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+
+ if (SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// NOVA EDIT - AUGMENTS+
// If the client is sending an invalid give_quirk, that means that
// something went wrong with the client prediction, so we should
// catch it back up to speed.
@@ -82,7 +82,7 @@
var/quirk_name = params["quirk"]
var/list/new_quirks = preferences.all_quirks - quirk_name
- if (!(quirk_name in preferences.all_quirks) || SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// SKYRAT EDIT - AUGMENTS+
+ if (!(quirk_name in preferences.all_quirks) || SSquirks.filter_invalid_quirks(new_quirks, preferences.augments) != new_quirks)// NOVA EDIT - AUGMENTS+
// If the client is sending an invalid remove_quirk, that means that
// something went wrong with the client prediction, so we should
// catch it back up to speed.
@@ -98,13 +98,13 @@
var/list/selected_quirks = list()
for (var/quirk in preferences.all_quirks)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/list/quirks = SSquirks.get_quirks()
var/datum/quirk/quirk_datum = quirks[quirk]
if(initial(quirk_datum.veteran_only) && !SSplayer_ranks.is_veteran(preferences?.parent))
preferences.all_quirks -= quirk
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
selected_quirks += sanitize_css_class_name(quirk)
return selected_quirks
diff --git a/code/modules/client/preferences/middleware/species.dm b/code/modules/client/preferences/middleware/species.dm
index 16954cf8bf7..fbb6de77318 100644
--- a/code/modules/client/preferences/middleware/species.dm
+++ b/code/modules/client/preferences/middleware/species.dm
@@ -9,12 +9,11 @@
/datum/asset/spritesheet/species
name = "species"
early = TRUE
- cross_round_cachable = TRUE
/datum/asset/spritesheet/species/create_spritesheets()
var/list/to_insert = list()
- for (var/species_id in get_selectable_species() | get_customizable_races()) // SKYRAT EDIT CHANGE - ORIGINAL: for (var/species_id in get_selectable_species())
+ for (var/species_id in get_selectable_species() | get_customizable_races()) // NOVA EDIT CHANGE - ORIGINAL: for (var/species_id in get_selectable_species())
var/datum/species/species_type = GLOB.species_list[species_id]
var/mob/living/carbon/human/dummy/consistent/dummy = new
diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm
index 823de1b4173..10fb4b7b585 100644
--- a/code/modules/client/preferences/names.dm
+++ b/code/modules/client/preferences/names.dm
@@ -12,7 +12,7 @@
var/group
/// Whether or not to allow numbers in the person's name
- var/allow_numbers = TRUE //SKYRAT EDIT CHANGE
+ var/allow_numbers = TRUE //NOVA EDIT CHANGE
/// If the highest priority job matches this, will prioritize this name in the UI
var/relevant_job
diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm
index a91a93fc84b..c6757ca31ee 100644
--- a/code/modules/client/preferences/species.dm
+++ b/code/modules/client/preferences/species.dm
@@ -24,17 +24,17 @@
for (var/species_id in get_selectable_species())
values += GLOB.species_list[species_id]
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
for (var/species_id in get_customizable_races())
values += GLOB.species_list[species_id]
- //SKYRAT EDIT END
+ //NOVA EDIT END
return values
/datum/preference/choiced/species/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/prefs)
- target.set_species(value, FALSE, FALSE, prefs?.features.Copy(), prefs?.mutant_bodyparts.Copy(), prefs?.body_markings.Copy()) // SKYRAT EDIT - Customization
+ target.set_species(value, FALSE, FALSE, prefs?.features.Copy(), prefs?.mutant_bodyparts.Copy(), prefs?.body_markings.Copy()) // NOVA EDIT - Customization
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
target.dna.update_body_size()
for(var/organ_key in list(ORGAN_SLOT_VAGINA, ORGAN_SLOT_PENIS, ORGAN_SLOT_BREASTS, ORGAN_SLOT_ANUS))
@@ -42,12 +42,12 @@
if(gent)
gent.aroused = prefs.arousal_preview
gent.update_sprite_suffix()
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/preference/choiced/species/compile_constant_data()
var/list/data = list()
- for (var/species_id in (get_selectable_species() + get_customizable_races())) //SKYRAT EDIT CHANGE
+ for (var/species_id in (get_selectable_species() + get_customizable_races())) //NOVA EDIT CHANGE
var/species_type = GLOB.species_list[species_id]
var/datum/species/species = new species_type()
@@ -61,7 +61,7 @@
data[species_id]["enabled_features"] = species.get_features()
data[species_id]["perks"] = species.get_species_perks()
data[species_id]["diet"] = species.get_species_diet()
- data[species_id]["veteran_only"] = species.veteran_only // SKYRAT EDIT ADDITION - Veteran races
+ data[species_id]["veteran_only"] = species.veteran_only // NOVA EDIT ADDITION - Veteran races
qdel(species)
diff --git a/code/modules/client/preferences/species_features/felinid.dm b/code/modules/client/preferences/species_features/felinid.dm
index 037615ee809..6e0dfdf003d 100644
--- a/code/modules/client/preferences/species_features/felinid.dm
+++ b/code/modules/client/preferences/species_features/felinid.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/preference/choiced/tail_human
savefile_key = "feature_human_tail"
savefile_identifier = PREFERENCE_CHARACTER
diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm
index 2e0b3f3e513..68736becc3b 100644
--- a/code/modules/client/preferences/species_features/lizard.dm
+++ b/code/modules/client/preferences/species_features/lizard.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/proc/generate_lizard_side_shot(datum/sprite_accessory/sprite_accessory, key, include_snout = TRUE)
var/static/icon/lizard
var/static/icon/lizard_with_snout
diff --git a/code/modules/client/preferences/species_features/moth.dm b/code/modules/client/preferences/species_features/moth.dm
index 2879cfb8788..b76fda5bce7 100644
--- a/code/modules/client/preferences/species_features/moth.dm
+++ b/code/modules/client/preferences/species_features/moth.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/preference/choiced/moth_antennae
savefile_key = "feature_moth_antennae"
savefile_identifier = PREFERENCE_CHARACTER
diff --git a/code/modules/client/preferences/species_features/mutants.dm b/code/modules/client/preferences/species_features/mutants.dm
index a00c57ecb9a..71bb4cf417b 100644
--- a/code/modules/client/preferences/species_features/mutants.dm
+++ b/code/modules/client/preferences/species_features/mutants.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/preference/color/mutant_color
savefile_key = "feature_mcolor"
savefile_identifier = PREFERENCE_CHARACTER
diff --git a/code/modules/client/preferences/species_features/pod.dm b/code/modules/client/preferences/species_features/pod.dm
index 7f7746ea41d..1446075b6cd 100644
--- a/code/modules/client/preferences/species_features/pod.dm
+++ b/code/modules/client/preferences/species_features/pod.dm
@@ -1,4 +1,4 @@
-// SKYRAT EDIT: REPLACED BY /datum/preference/choiced/mutant_choice/pod_hair IN mutant_parts.dm
+// NOVA EDIT: REPLACED BY /datum/preference/choiced/mutant_choice/pod_hair IN mutant_parts.dm
/*
/datum/preference/choiced/pod_hair
savefile_key = "feature_pod_hair"
@@ -30,4 +30,4 @@
/datum/preference/choiced/pod_hair/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["pod_hair"] = value
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index eb324419cb2..9e699530169 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -99,8 +99,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
migrate_character_to_tgui_prefs_menu()
if (current_version < 42)
- // migrate_body_types(save_data) // SKYRAT EDIT - This'll fuck up savefiles
- migrate_mentor() // SKYRAT EDIT - Make mentors alive again
+ // migrate_body_types(save_data) // NOVA EDIT - This'll fuck up savefiles
+ migrate_mentor() // NOVA EDIT - Make mentors alive again
if (current_version < 43)
migrate_legacy_sound_toggles(savefile)
@@ -302,7 +302,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
all_quirks = save_data?["all_quirks"]
- load_character_skyrat(save_data) //SKYRAT EDIT ADDITION
+ load_character_skyrat(save_data) //NOVA EDIT ADDITION
//try to fix any outdated data if necessary
//preference updating will handle saving the updated data for us.
@@ -319,7 +319,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(job_preferences[j] != JP_LOW && job_preferences[j] != JP_MEDIUM && job_preferences[j] != JP_HIGH)
job_preferences -= j
- all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks), augments)// SKYRAT EDIT - AUGMENTS+
+ all_quirks = SSquirks.filter_invalid_quirks(SANITIZE_LIST(all_quirks), augments)// NOVA EDIT - AUGMENTS+
validate_quirks()
return TRUE
@@ -362,7 +362,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Quirks
save_data["all_quirks"] = all_quirks
- save_character_skyrat(save_data) //SKYRAT EDIT ADDITION
+ save_character_skyrat(save_data) //NOVA EDIT ADDITION
return TRUE
diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm
index 5df802b9f60..eacb6767fa9 100644
--- a/code/modules/client/verbs/ooc.dm
+++ b/code/modules/client/verbs/ooc.dm
@@ -76,8 +76,8 @@ GLOBAL_VAR_INIT(normal_ooc_colour, "#002eb8")
var/keyname = key
- if(CONFIG_GET(flag/enable_cross_server_ooc)) //SKYRAT EDIT ADDITION
- send_ooc_to_other_server(ckey, msg) //SKYRAT EDIT ADDITION
+ if(CONFIG_GET(flag/enable_cross_server_ooc)) //NOVA EDIT ADDITION
+ send_ooc_to_other_server(ckey, msg) //NOVA EDIT ADDITION
if(prefs.unlock_content)
if(prefs.toggles & MEMBER_PUBLIC)
diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm
index ad75e7c883f..f58ab3d244c 100644
--- a/code/modules/client/verbs/suicide.dm
+++ b/code/modules/client/verbs/suicide.dm
@@ -48,11 +48,11 @@
/// Checks if we are in a valid state to suicide (not already suiciding, capable of actually killing ourselves, area checks, etc.) Returns TRUE if we can suicide, FALSE if we can not.
/mob/living/proc/can_suicide()
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(CONFIG_GET(flag/disable_suicide))
to_chat(src, span_warning("Suicide is disabled on this server."))
return FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(HAS_TRAIT_FROM_ONLY(src, TRAIT_SUICIDED, REF(src)))
to_chat(src, span_warning("You are already commiting suicide!"))
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 486f44f3504..ae0561d2177 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -344,7 +344,7 @@
. += how_cool_are_your_threads.Join()
if(get_armor().has_any_armor() || (flags_cover & (HEADCOVERSMOUTH|PEPPERPROOF)))
- . += span_notice("OOC: Click here to see its protection classes.") // SKYRAT EDIT ORIGINAL: ("It has a tag listing its protection classes.")
+ . += span_notice("OOC: Click here to see its protection classes.") // NOVA EDIT ORIGINAL: ("It has a tag listing its protection classes.")
/obj/item/clothing/Topic(href, href_list)
. = ..()
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 81e87e84baa..38c856f8003 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -45,7 +45,7 @@
/obj/item/clothing/glasses/weldingvisortoggle(mob/user)
. = ..()
- alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // SKYRAT EDIT - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null
+ alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : initial(alternate_worn_layer) // NOVA EDIT - ORIGINAL : alternate_worn_layer = up ? ABOVE_BODY_FRONT_HEAD_LAYER : null
if(. && user)
user.update_sight()
if(iscarbon(user))
@@ -66,7 +66,7 @@
eyes.apply_organ_damage(5)
/obj/item/clothing/glasses/AltClick(mob/user)
- . = ..() //SKYRAT EDIT ADDITION
+ . = ..() //NOVA EDIT ADDITION
if(glass_colour_type && !forced_glass_color && ishuman(user))
var/mob/living/carbon/human/human_user = user
@@ -453,7 +453,7 @@
tint = 2
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
glass_colour_type = /datum/client_colour/glass_colour/gray
- alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // SKYRAT EDIT - Just so it works until I make the change upstream
+ alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // NOVA EDIT - Just so it works until I make the change upstream
/obj/item/clothing/glasses/welding/attack_self(mob/user)
weldingvisortoggle(user)
@@ -551,8 +551,8 @@
name = "chameleon thermals"
desc = "A pair of thermal optic goggles with an onboard chameleon generator."
actions_types = list(/datum/action/item_action/chameleon/change/glasses/no_preset)
- special_desc_requirement = EXAMINE_CHECK_SYNDICATE // SKYRAT EDIT ADDITION
- special_desc = "Chameleon thermal goggles employed by the Syndicate in infiltration operations." //SKYRAT EDIT ADDITION, I don't think the regular description persists through chameleon changes.
+ special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT ADDITION
+ special_desc = "Chameleon thermal goggles employed by the Syndicate in infiltration operations." //NOVA EDIT ADDITION, I don't think the regular description persists through chameleon changes.
/obj/item/clothing/glasses/thermal/monocle
name = "thermoncle"
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index f77f6cc2c67..4e7112bb772 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -9,7 +9,7 @@
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
cut_type = /obj/item/clothing/gloves/fingerless
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
uses_advanced_reskins = TRUE
unique_reskin = list(
"Basic Gloves" = list(
@@ -19,13 +19,13 @@
RESKIN_WORN_ICON_STATE = "black"
),
"Peacekeeper Gloves" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi',
RESKIN_ICON_STATE = "peacekeeper_gloves",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/hands.dmi',
RESKIN_WORN_ICON_STATE = "peacekeeper"
)
)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/obj/item/clothing/gloves/color/black/Initialize(mapload)
. = ..()
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 09c67e7534a..a05d3d670cf 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -121,7 +121,7 @@
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
///Icon state of the welding visor.
var/visor_state = "weldvisor"
- var/visor_sprite_path //SKYRAT EDIT --- Lets the visor not smush the snout
+ var/visor_sprite_path //NOVA EDIT --- Lets the visor not smush the snout
/obj/item/clothing/head/utility/hardhat/welding/Initialize(mapload)
. = ..()
@@ -141,11 +141,11 @@
/obj/item/clothing/head/utility/hardhat/welding/proc/toggle_welding_screen(mob/living/user)
if(weldingvisortoggle(user))
playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE) //Visors don't just come from nothing
- var/mob/living/carbon/carbon_user = user //SKYRAT EDIT --- Lets the visor not smush the snout
+ var/mob/living/carbon/carbon_user = user //NOVA EDIT --- Lets the visor not smush the snout
if(carbon_user.dna.species.mutant_bodyparts["snout"])
- visor_sprite_path = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
+ visor_sprite_path = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
else
- visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' //END SKYRAT EDIT
+ visor_sprite_path = 'icons/mob/clothing/head/utility.dmi' //END NOVA EDIT
update_appearance()
/obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands)
@@ -154,8 +154,8 @@
return
if(!up)
- // SKYRAT EDIT: ORIGINAL - . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state)
- // SKYRAT EDIT: WELDING MUZZLES
+ // NOVA EDIT: ORIGINAL - . += mutable_appearance('icons/mob/clothing/head/utility.dmi', visor_state)
+ // NOVA EDIT: WELDING MUZZLES
. += mutable_appearance(visor_sprite_path, visor_state)
/obj/item/clothing/head/utility/hardhat/welding/update_overlays()
diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm
index 104bf812444..308e5e7f617 100644
--- a/code/modules/clothing/head/hat.dm
+++ b/code/modules/clothing/head/hat.dm
@@ -180,6 +180,15 @@
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/santa
+/obj/item/clothing/head/costume/santa/gags
+ name = "santa hat"
+ desc = "On the first day of christmas my employer gave to me!"
+ icon_state = "santa_hat"
+ greyscale_colors = "#cc0000#f8f8f8"
+ greyscale_config = /datum/greyscale_config/santa_hat
+ greyscale_config_worn = /datum/greyscale_config/santa_hat/worn
+ flags_1 = IS_PLAYER_COLORABLE_1
+
/obj/item/clothing/head/costume/jester
name = "jester hat"
desc = "A hat with bells, to add some merriness to the suit."
@@ -261,7 +270,7 @@
flags_inv = 0
armor_type = /datum/armor/hats_centcom_cap
strip_delay = (8 SECONDS)
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON //SKYRAT EDIT lets anthros wear the hat
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON //NOVA EDIT lets anthros wear the hat
/datum/armor/hats_centcom_cap
melee = 30
@@ -283,7 +292,7 @@
desc = "Perfect for winter in Siberia, da?"
icon_state = "ushankadown"
inhand_icon_state = null
- flags_inv = HIDEEARS //SKYRAT EDIT (Original: HIDEEARS|HIDEHAIR)
+ flags_inv = HIDEEARS //NOVA EDIT (Original: HIDEEARS|HIDEHAIR)
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
dog_fashion = /datum/dog_fashion/head/ushanka
diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm
index d1c423b5b03..fbe8cfe48a3 100644
--- a/code/modules/clothing/head/mind_monkey_helmet.dm
+++ b/code/modules/clothing/head/mind_monkey_helmet.dm
@@ -1,6 +1,6 @@
//monkey sentience caps
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/obj/item/clothing/head/helmet/monkey_sentience
name = "monkey mind magnification helmet"
desc = "A fragile, circuitry embedded helmet for boosting the intelligence of a monkey to a higher level. You see several warning labels..."
@@ -47,7 +47,7 @@
playsound(src, 'sound/machines/ping.ogg', 30, TRUE)
RegisterSignal(magnification, COMSIG_SPECIES_LOSS, PROC_REF(make_fall_off))
polling = TRUE
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a mind magnified monkey?", ROLE_MONKEY_HELMET, null, 5 SECONDS, magnification, POLL_IGNORE_MONKEY_HELMET)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a mind magnified monkey?", check_jobban = ROLE_MONKEY_HELMET, poll_time = 5 SECONDS, target_mob = magnification, ignore_category = POLL_IGNORE_MONKEY_HELMET, pic_source = magnification, role_name_text = "mind-magnified monkey")
polling = FALSE
if(!magnification)
return
diff --git a/code/modules/clothing/head/moth.dm b/code/modules/clothing/head/moth.dm
index fe5f04f0a4c..324acaa13eb 100644
--- a/code/modules/clothing/head/moth.dm
+++ b/code/modules/clothing/head/moth.dm
@@ -7,4 +7,14 @@
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
flags_cover = HEADCOVERSEYES
- flags_inv = HIDEHAIR|SHOWSPRITEEARS
+ flags_inv = HIDEHAIR|SHOWSPRITEEARS // NOVA ADDITION - SHOWSPRITEEARS Loadout Mothic Clothing #21056
+
+/obj/item/clothing/head/mothcap/original
+ desc = "An authentic, padded leather cap with magnifying goggles, standard issue aboard the moth fleet. Keeps your head warm and debris away from those big eyes."
+
+/obj/item/clothing/head/mothcap/original/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 1.2, zoom_method = ZOOM_METHOD_ITEM_ACTION, item_action_type = /datum/action/item_action/hands_free/moth_googles)
+
+/obj/item/clothing/head/mothcap/original/item_action_slot_check(slot, mob/user, datum/action/action)
+ return (slot & ITEM_SLOT_HEAD)
diff --git a/code/modules/clothing/head/wig.dm b/code/modules/clothing/head/wig.dm
index 01a29b28a16..565d04e3b63 100644
--- a/code/modules/clothing/head/wig.dm
+++ b/code/modules/clothing/head/wig.dm
@@ -40,7 +40,7 @@
override_state = null,
override_file = null,
use_height_offset = TRUE,
- mutant_styles = NONE, // SKYRAT EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument)
+ mutant_styles = NONE, // NOVA EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument)
)
return ..(default_layer, default_icon_file, isinhands, female_uniform, override_state, override_file, use_height_offset = FALSE)
diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm
index ea067c2bea8..7d04daf15f2 100644
--- a/code/modules/clothing/masks/bandana.dm
+++ b/code/modules/clothing/masks/bandana.dm
@@ -35,12 +35,12 @@
if(slot_flags & ITEM_SLOT_NECK)
to_chat(user, span_warning("You must undo [src] in order to push it into a hat!"))
return
- //SKYRAT EDIT START: BANDANA HATS FOR MUTANTS
+ //NOVA EDIT START: BANDANA HATS FOR MUTANTS
if(slot_flags & ITEM_SLOT_HEAD)
supports_variations_flags = NONE
if(slot_flags & ITEM_SLOT_MASK)
supports_variations_flags = initial(supports_variations_flags)
- //SKYRAT EDIT END
+ //NOVA EDIT END
adjustmask(user)
diff --git a/code/modules/clothing/masks/gas_filter.dm b/code/modules/clothing/masks/gas_filter.dm
index c77c37de224..08ae650c247 100644
--- a/code/modules/clothing/masks/gas_filter.dm
+++ b/code/modules/clothing/masks/gas_filter.dm
@@ -39,7 +39,8 @@
/datum/gas/nitrium,
/datum/gas/freon,
/datum/gas/hypernoblium,
- /datum/gas/bz
+ /datum/gas/bz,
+ /datum/gas/miasma,
)
///List of gases with low filter priority
var/list/low_filtering_gases = list(
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index c8784d9af6c..8026479d6f9 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -288,7 +288,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
"The Madman" = image(icon = src.icon, icon_state = "joker"),
"The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow")
)
- //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //SKYRAT EDIT REMOVAL
+ //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) //NOVA EDIT REMOVAL
/obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user)
if(!istype(user) || user.incapacitated())
@@ -362,8 +362,8 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
// SKYRAT ADDITION - More mask variations
var/mob/living/carbon/human/human_user = user
if(human_user.dna.species.mutant_bodyparts["snout"])
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak")
if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts)
icon_state = "[options[choice]]_b"
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index ddce653aee5..a22691495cc 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -113,6 +113,16 @@
r_hand = /obj/item/gun/energy/recharge/ebow
shoes = /obj/item/clothing/shoes/magboots/advance
+/datum/outfit/heretic_hallucination
+ name = "Heretic Hallucination"
+
+ uniform = /obj/item/clothing/under/color/grey
+ suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch
+ neck = /obj/item/clothing/neck/heretic_focus
+ r_hand = /obj/item/melee/touch_attack/mansus_fist
+ head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
+ shoes = /obj/item/clothing/shoes/sneakers/black
+
/datum/outfit/rev_cutout
name = "Revolutionary Cutout"
diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm
index e7d87f34bca..ed6942db14b 100644
--- a/code/modules/clothing/shoes/_shoes.dm
+++ b/code/modules/clothing/shoes/_shoes.dm
@@ -44,7 +44,7 @@
playsound(user, 'sound/weapons/genhit2.ogg', 50, TRUE)
return BRUTELOSS
-//SKYRAT EDIT REMOVAL BEGIN -DIGI_BLOODSOLE - (Moved to modular_skyrat/modules/digi_shoeblood/code/modules/clothing/shoes/_shoes.dm)
+//NOVA EDIT REMOVAL BEGIN -DIGI_BLOODSOLE - (Moved to modular_nova/modules/digi_shoeblood/code/modules/clothing/shoes/_shoes.dm)
/*
/obj/item/clothing/shoes/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
. = ..()
@@ -59,7 +59,7 @@
else
. += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/obj/item/clothing/shoes/examine(mob/user)
. = ..()
@@ -165,12 +165,12 @@
to_chat(user, span_warning("You're already interacting with [src]!"))
return
user.visible_message(span_notice("[user] begins [tied ? "unknotting" : "tying"] the laces of [user.p_their()] [src.name]."), span_notice("You begin [tied ? "unknotting" : "tying"] the laces of your [src.name]..."))
- // SKYRAT EDIT START
+ // NOVA EDIT START
var/tie_time = lace_time
if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS))
tie_time *= 0.5
if(do_after(user, tie_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy)))
- // SKYRAT EDIT END
+ // NOVA EDIT END
to_chat(user, span_notice("You [tied ? "unknot" : "tie"] the laces of your [src.name]."))
if(tied == SHOES_UNTIED)
adjust_laces(SHOES_TIED, user)
@@ -193,10 +193,10 @@
to_chat(user, span_notice("You quietly set to work [tied ? "untying" : "knotting"] [loc]'s [src.name]..."))
if(HAS_TRAIT(user, TRAIT_CLUMSY)) // based clowns trained their whole lives for this
mod_time *= 0.75
- // SKYRAT EDIT START
+ // NOVA EDIT START
if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS)) // Clowns with thieving gloves will be a menace
mod_time *= 0.5
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(do_after(user, mod_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy)))
to_chat(user, span_notice("You [tied ? "untie" : "knot"] the laces on [loc]'s [src.name]."))
if(tied == SHOES_UNTIED)
@@ -282,12 +282,12 @@
return
to_chat(user, span_notice("You begin [tied ? "untying" : "tying"] the laces on [src]..."))
- // SKYRAT EDIT STARTr
+ // NOVA EDIT STARTr
var/tie_time = lace_time
if(HAS_TRAIT(user, TRAIT_STICKY_FINGERS))
tie_time *= 0.5
if(do_after(user, lace_time, target = src,extra_checks = CALLBACK(src, PROC_REF(still_shoed), user)))
- // SKYRAT EDIT END
+ // NOVA EDIT END
to_chat(user, span_notice("You [tied ? "untie" : "tie"] the laces on [src]."))
adjust_laces(tied ? SHOES_UNTIED : SHOES_TIED, user)
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index 75299ad828a..909f835b1c9 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -19,7 +19,13 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
- bananium = AddComponent(/datum/component/material_container, list(/datum/material/bananium), 100 * SHEET_MATERIAL_AMOUNT, MATCONTAINER_EXAMINE|MATCONTAINER_ANY_INTENT|MATCONTAINER_SILENT, allowed_items=/obj/item/stack)
+ bananium = AddComponent(
+ /datum/component/material_container, \
+ list(/datum/material/bananium), \
+ 100 * SHEET_MATERIAL_AMOUNT, \
+ MATCONTAINER_EXAMINE | MATCONTAINER_ANY_INTENT | MATCONTAINER_SILENT, \
+ allowed_items = /obj/item/stack, \
+ )
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20)
RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, PROC_REF(on_step))
if(always_noslip)
diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm
index 0109e950dca..37270f47f6c 100644
--- a/code/modules/clothing/shoes/clown.dm
+++ b/code/modules/clothing/shoes/clown.dm
@@ -14,7 +14,7 @@
create_storage(storage_type = /datum/storage/pockets/shoes/clown)
LoadComponent(/datum/component/squeak, squeak_sound, 50, falloff_exponent = 20) //die off quick please
- //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) // SKYRAT EDIT - REMOVAL - NO CLOWN CYTOLOGY
+ //AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0) // NOVA EDIT - REMOVAL - NO CLOWN CYTOLOGY
/obj/item/clothing/shoes/clown_shoes/equipped(mob/living/user, slot)
. = ..()
diff --git a/code/modules/clothing/shoes/sneakers.dm b/code/modules/clothing/shoes/sneakers.dm
index 66af19f503c..5dcf27b138e 100644
--- a/code/modules/clothing/shoes/sneakers.dm
+++ b/code/modules/clothing/shoes/sneakers.dm
@@ -10,7 +10,7 @@
greyscale_config_inhand_left = /datum/greyscale_config/sneakers/inhand_left
greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right
flags_1 = IS_PLAYER_COLORABLE_1
- greyscale_config_worn_digi = /datum/greyscale_config/sneakers/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/sneakers/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
/obj/item/clothing/shoes/sneakers/black
name = "black shoes"
@@ -86,7 +86,7 @@
greyscale_config_inhand_right = /datum/greyscale_config/sneakers_orange/inhand_right
flags_1 = NONE
var/obj/item/restraints/handcuffs/attached_cuffs
- greyscale_config_worn_digi = /datum/greyscale_config/sneakers_orange/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/sneakers_orange/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
/obj/item/clothing/shoes/sneakers/orange/Initialize(mapload)
. = ..()
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index a1fab1f591d..9a8a454af92 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -48,7 +48,7 @@
)
slowdown = 1
armor_type = /datum/armor/suit_space
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL //SKYRAT EDIT CHANGE - ADDED HIDETAIL. ADDED HIDESEXTOY TO PREVENT VISUAL BUGS.
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL //NOVA EDIT CHANGE - ADDED HIDETAIL. ADDED HIDESEXTOY TO PREVENT VISUAL BUGS.
cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT_OFF
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index cc08f7373c9..0e4d5b9cba5 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -17,23 +17,23 @@
var/blood_overlay_type = "suit"
limb_integrity = 0 // disabled for most exo-suits
-/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) // SKYRAT EDIT CHANGE - TAURS AND TESHIS - ORIGINAL: /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
+/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE) // NOVA EDIT CHANGE - TAURS AND TESHIS - ORIGINAL: /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
. = ..()
if(isinhands)
return
if(damaged_clothes)
- //SKYRAT EDIT CHANGE BEGIN
+ //NOVA EDIT CHANGE BEGIN
//. += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") //ORIGINAL
- var/damagefile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi' : 'icons/effects/item_damage.dmi'
+ var/damagefile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_nova/master_files/icons/mob/64x32_item_damage.dmi' : 'icons/effects/item_damage.dmi'
. += mutable_appearance(damagefile2use, "damaged[blood_overlay_type]")
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
if(GET_ATOM_BLOOD_DNA_LENGTH(src))
- //SKYRAT EDIT CHANGE BEGIN
+ //NOVA EDIT CHANGE BEGIN
//. += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") //ORIGINAL
- var/bloodfile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_skyrat/master_files/icons/mob/64x32_blood.dmi' : 'icons/effects/blood.dmi'
+ var/bloodfile2use = (mutant_styles & STYLE_TAUR_ALL) ? 'modular_nova/master_files/icons/mob/64x32_blood.dmi' : 'icons/effects/blood.dmi'
. += mutable_appearance(bloodfile2use, "[blood_overlay_type]blood")
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
var/mob/living/carbon/human/wearer = loc
if(!ishuman(wearer) || !wearer.w_uniform)
@@ -44,7 +44,7 @@
var/obj/item/clothing/accessory/displayed = undershirt.attached_accessories[1]
if(displayed.above_suit)
- . += undershirt.modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += undershirt.accessory_overlay
+ . += undershirt.modify_accessory_overlay() // NOVA EDIT CHANGE - ORIGINAL: . += undershirt.accessory_overlay
/obj/item/clothing/suit/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED)
..()
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 296ac44503d..e968fd20147 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -192,7 +192,7 @@
strip_delay = 70
resistance_flags = FLAMMABLE
dog_fashion = null
- //SKYRAT EDIT ADDITION START
+ //NOVA EDIT ADDITION START
uses_advanced_reskins = TRUE
unique_reskin = list(
"Basic Warden Armor" = list(
@@ -202,20 +202,20 @@
RESKIN_WORN_ICON_STATE = "warden_alt"
),
"Standard" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
RESKIN_ICON_STATE = "vest_warden",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
RESKIN_WORN_ICON_STATE = "vest_warden",
),
"Peacekeeper" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
RESKIN_ICON_STATE = "peacekeeper_trench_warden",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
RESKIN_WORN_ICON_STATE = "peacekeeper_trench_warden",
RESKIN_SUPPORTS_VARIATIONS_FLAGS = NONE
)
)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/obj/item/clothing/suit/armor/vest/warden/alt
name = "warden's armored jacket"
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index d82dd048e72..8eba960cbe2 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -37,7 +37,7 @@
slowdown = 0.5
allowed = list(/obj/item/tank/internals, /obj/item/reagent_containers/dropper, /obj/item/flashlight/pen, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/cup/beaker, /obj/item/gun/syringe)
armor_type = /datum/armor/suit_bio_suit
- flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
strip_delay = 70
equip_delay_other = 70
resistance_flags = ACID_PROOF
diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm
index 3a480ae1fa6..680db9f80dc 100644
--- a/code/modules/clothing/suits/costume.dm
+++ b/code/modules/clothing/suits/costume.dm
@@ -262,7 +262,7 @@
inhand_icon_state = "space_suit_syndicate"
armor_type = /datum/armor/carp_costume_spaceproof
allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/rifle/boltaction/harpoon) //I'm giving you a hint here
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 3ed9be8cb1d..b63bb493e58 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -144,6 +144,12 @@
icon_state = "detsuit"
inhand_icon_state = null
+/obj/item/clothing/suit/jacket/det_suit/brown
+ name = "brown suit jacket"
+ desc = "A suit jacket perfect for dinner dates and criminal investigations."
+ icon_state = "detsuit_brown"
+ inhand_icon_state = null
+
/obj/item/clothing/suit/jacket/det_suit/kim
name = "aerostatic bomber jacket"
desc = "A jacket once worn by the revolutionary air brigades during the Antecentennial Revolution. There are quite a few pockets on the inside, mostly for storing notebooks and compasses."
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index 7a3e155d6f8..49c6021a7c7 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -47,8 +47,8 @@
. = ..()
allowed += list(
/obj/item/melee/baton/telescopic,
- /obj/item/gun/energy/cell_loaded/medigun, //SKYRAT EDIT ADDITION - MEDIGUNS
- /obj/item/storage/medkit, //SKYRAT EDIT ADDITION
+ /obj/item/gun/energy/cell_loaded/medigun, //NOVA EDIT ADDITION - MEDIGUNS
+ /obj/item/storage/medkit, //NOVA EDIT ADDITION
)
/obj/item/clothing/suit/toggle/labcoat/paramedic
@@ -57,13 +57,13 @@
icon_state = "labcoat_paramedic"
inhand_icon_state = null
-//START SKYRAT EDIT ADDITION
+//START NOVA EDIT ADDITION
/obj/item/clothing/suit/toggle/labcoat/paramedic/Initialize(mapload)
. = ..()
allowed += list(
/obj/item/storage/medkit,
)
-//END SKYRAT EDIT
+//END NOVA EDIT
/obj/item/clothing/suit/toggle/labcoat/mad
name = "\proper The Mad's labcoat"
@@ -74,12 +74,18 @@
/obj/item/clothing/suit/toggle/labcoat/genetics
name = "geneticist labcoat"
desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
- icon_state = "labcoat_gen"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2"
/obj/item/clothing/suit/toggle/labcoat/chemist
name = "chemist labcoat"
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
- icon_state = "labcoat_chem"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#F17420#F17420#EB6F2C"
/obj/item/clothing/suit/toggle/labcoat/chemist/Initialize(mapload)
. = ..()
@@ -88,7 +94,10 @@
/obj/item/clothing/suit/toggle/labcoat/virologist
name = "virologist labcoat"
desc = "A suit that protects against minor chemical spills. Has a green stripe on the shoulder."
- icon_state = "labcoat_vir"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#198019#198019#40992E"
/obj/item/clothing/suit/toggle/labcoat/virologist/Initialize(mapload)
. = ..()
@@ -97,7 +106,10 @@
/obj/item/clothing/suit/toggle/labcoat/coroner
name = "coroner labcoat"
desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder."
- icon_state = "labcoat_coroner"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#2D2D33#2D2D33#39393F"
/obj/item/clothing/suit/toggle/labcoat/coroner/Initialize(mapload)
. = ..()
@@ -109,7 +121,10 @@
/obj/item/clothing/suit/toggle/labcoat/science
name = "scientist labcoat"
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
- icon_state = "labcoat_sci"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#7E1980#7E1980#B347A1"
/obj/item/clothing/suit/toggle/labcoat/science/Initialize(mapload)
. = ..()
@@ -118,9 +133,15 @@
/obj/item/clothing/suit/toggle/labcoat/roboticist
name = "roboticist labcoat"
desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads."
- icon_state = "labcoat_robo"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#88242D#88242D#39393F"
/obj/item/clothing/suit/toggle/labcoat/interdyne
name = "interdyne labcoat"
desc = "More like an eccentric coat than a labcoat. Helps pass off bloodstains as part of the aesthetic. Comes with red shoulder pads."
- icon_state = "labcoat_robo"
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#88242D#88242D#39393F"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index bbd880f5466..10facb47432 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -29,7 +29,7 @@
)
slowdown = 1
armor_type = /datum/armor/utility_fire
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
@@ -118,7 +118,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 2
armor_type = /datum/armor/utility_bomb_suit
- flags_inv = HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -195,7 +195,7 @@
armor_type = /datum/armor/utility_radiation
strip_delay = 60
equip_delay_other = 60
- flags_inv = HIDEJUMPSUIT|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEJUMPSUIT|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
resistance_flags = NONE
/obj/item/clothing/suit/utility/radiation/Initialize(mapload)
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 283878339fe..7249a40368a 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -352,7 +352,7 @@
. = ..()
allowed += list(
/obj/item/melee/baton/telescopic,
- /obj/item/gun/energy/cell_loaded/medigun, //SKYRAT EDIT MEDIGUNS
+ /obj/item/gun/energy/cell_loaded/medigun, //NOVA EDIT MEDIGUNS
)
/obj/item/clothing/head/hooded/winterhood/medical/cmo
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 4f4111a0eb4..008c99e9e5f 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -89,7 +89,7 @@
if(GET_ATOM_BLOOD_DNA_LENGTH(src))
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
if(accessory_overlay)
- . += modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += accessory_overlay
+ . += modify_accessory_overlay() // NOVA EDIT CHANGE - ORIGINAL: . += accessory_overlay
/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, params)
if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil))
@@ -149,13 +149,13 @@
if(adjusted == ALT_STYLE)
adjust_to_normal()
- /* SKYRAT EDIT REMOVAL - This breaks jumpsuit adjustment. Plus, we don't support it.
+ /* NOVA EDIT REMOVAL - This breaks jumpsuit adjustment. Plus, we don't support it.
if((supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION) && ishuman(user))
var/mob/living/carbon/human/wearer = user
if(wearer.bodytype & BODYTYPE_DIGITIGRADE)
adjusted = DIGITIGRADE_STYLE
update_appearance()
- */ // SKYRAT EDIT END
+ */ // NOVA EDIT END
/obj/item/clothing/under/equipped(mob/living/user, slot)
..()
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index 69f2d31d0d8..e452b4e034c 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -171,7 +171,7 @@
else
display = span_notice("The dogtag is all scratched up.")
-/* MODULAR SKYRAT - OVERRIDDEN IN (\modular_skyrat\modules\customization\modules\clothing\under\accessories.dm)
+/* MODULAR SKYRAT - OVERRIDDEN IN (\modular_nova\modules\customization\modules\clothing\under\accessories.dm)
/// Reskins for the pride pin accessory, mapped by display name to icon state
GLOBAL_LIST_INIT(pride_pin_reskins, list(
"Rainbow Pride" = "pride",
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index b548aee7097..28348e52b4c 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -7,7 +7,7 @@
greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn
greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/inhand_left
greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/inhand_right
- greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
icon = 'icons/obj/clothing/under/color.dmi'
icon_state = "jumpsuit"
inhand_icon_state = "jumpsuit"
@@ -21,7 +21,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
icon_state = "jumpskirt"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- greyscale_config_worn_digi = null //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = null //NOVA EDIT ADDITION - DigiGreyscale
/// Returns a random, acceptable jumpsuit typepath
/proc/get_random_jumpsuit()
@@ -39,7 +39,7 @@
/obj/item/clothing/under/color/random/Initialize(mapload)
..()
- var/obj/item/clothing/under/color/C = get_random_variant() // SKYRAT EDIT CHANGE - use local proc that handles prefs
+ var/obj/item/clothing/under/color/C = get_random_variant() // NOVA EDIT CHANGE - use local proc that handles prefs
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING, initial=TRUE) //or else you end up with naked assistants running around everywhere...
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index c7be95178e4..4e648a040d6 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -274,7 +274,7 @@
icon_state = "buttondown_slacks"
greyscale_config = /datum/greyscale_config/buttondown_slacks
greyscale_config_worn = /datum/greyscale_config/buttondown_slacks/worn
- greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C"
flags_1 = IS_PLAYER_COLORABLE_1
@@ -287,7 +287,7 @@
icon_state = "buttondown_shorts"
greyscale_config = /datum/greyscale_config/buttondown_shorts
greyscale_config_worn = /datum/greyscale_config/buttondown_shorts/worn
- greyscale_config_worn_digi = /datum/greyscale_config/buttondown_shorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/buttondown_shorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C"
flags_1 = IS_PLAYER_COLORABLE_1
@@ -325,7 +325,7 @@
can_adjust = FALSE
greyscale_config = /datum/greyscale_config/football_suit
greyscale_config_worn = /datum/greyscale_config/football_suit/worn
- greyscale_config_worn_digi = /datum/greyscale_config/football_suit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/football_suit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#D74722"
flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
index e726ba54689..a85488e4b64 100644
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
@@ -32,14 +32,14 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
can_adjust = FALSE
-//SKYRAT EDIT REMOVAL BEGIN
+//NOVA EDIT REMOVAL BEGIN
/*
/obj/item/clothing/under/rank/civilian/clown/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20) //die off quick please
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/obj/item/clothing/under/rank/civilian/clown/blue
name = "blue clown suit"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index 63bf1c65847..6c3f06fc63b 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -239,7 +239,7 @@
greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn
greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left
greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right
- greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/prison/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/jumpsuit/prison/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
has_sensor = LOCKED_SENSORS
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
@@ -260,7 +260,7 @@
greyscale_config_worn = /datum/greyscale_config/jumpsuit/prison/worn
greyscale_config_inhand_left = /datum/greyscale_config/jumpsuit/prison/inhand_left
greyscale_config_inhand_right = /datum/greyscale_config/jumpsuit/prison/inhand_right
- greyscale_config_worn_digi = null //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = null //NOVA EDIT ADDITION - DigiGreyscale
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
index 66830455b2e..f433a98b035 100644
--- a/code/modules/clothing/under/pants.dm
+++ b/code/modules/clothing/under/pants.dm
@@ -14,7 +14,7 @@
icon_state = "slacks"
greyscale_config = /datum/greyscale_config/slacks
greyscale_config_worn = /datum/greyscale_config/slacks/worn
- greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#575757#3E3E3E#75634F"
flags_1 = IS_PLAYER_COLORABLE_1
@@ -24,7 +24,7 @@
icon_state = "jeans"
greyscale_config = /datum/greyscale_config/jeans
greyscale_config_worn = /datum/greyscale_config/jeans/worn
- greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#787878#723E0E#4D7EAC"
flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index 2fd8a113682..3697ae584dd 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -4,7 +4,7 @@
icon_state = "shorts"
greyscale_config = /datum/greyscale_config/shorts
greyscale_config_worn = /datum/greyscale_config/shorts/worn
- greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#575757#3E3E3E#75634F"
gender = PLURAL
body_parts_covered = GROIN
@@ -20,7 +20,7 @@
icon_state = "jeanshorts"
greyscale_config = /datum/greyscale_config/jeanshorts
greyscale_config_worn = /datum/greyscale_config/jeanshorts/worn
- greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#787878#723E0E#4D7EAC"
/obj/item/clothing/under/shorts/red
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
index 0b870156f47..12a61ceaf9e 100644
--- a/code/modules/clothing/under/skirt_dress.dm
+++ b/code/modules/clothing/under/skirt_dress.dm
@@ -49,7 +49,7 @@
greyscale_colors = "#CC2102"
greyscale_config = /datum/greyscale_config/plaidskirt
greyscale_config_worn = /datum/greyscale_config/plaidskirt/worn
- greyscale_config_worn_digi = /datum/greyscale_config/plaidskirt/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/plaidskirt/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/under/dress/skirt/turtleskirt
diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm
index 046e6b5e6ef..3de26404cd5 100644
--- a/code/modules/clothing/under/trek.dm
+++ b/code/modules/clothing/under/trek.dm
@@ -15,7 +15,7 @@
inhand_icon_state = "y_suit"
greyscale_config = /datum/greyscale_config/trek
greyscale_config_worn = /datum/greyscale_config/trek/worn
- greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#fab342"
/obj/item/clothing/under/trek/engsec
@@ -25,7 +25,7 @@
inhand_icon_state = "r_suit"
greyscale_config = /datum/greyscale_config/trek
greyscale_config_worn = /datum/greyscale_config/trek/worn
- greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#B72B2F"
/obj/item/clothing/under/trek/medsci
@@ -35,7 +35,7 @@
inhand_icon_state = "b_suit"
greyscale_config = /datum/greyscale_config/trek
greyscale_config_worn = /datum/greyscale_config/trek/worn
- greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
greyscale_colors = "#5FA4CC"
/*
diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm
index b4703945092..6bcad3f247c 100644
--- a/code/modules/economy/account.dm
+++ b/code/modules/economy/account.dm
@@ -35,6 +35,8 @@
var/pay_token
///List with a transaction history for NT pay app
var/list/transaction_history = list()
+ ///A lazylist of coupons redeemed with the Coupon Master pda app associated with this account.
+ var/list/redeemed_coupons
/datum/bank_account/New(newname, job, modifier = 1, player_account = TRUE)
account_holder = newname
@@ -47,6 +49,7 @@
/datum/bank_account/Destroy()
if(add_to_accounts)
SSeconomy.bank_accounts_by_id -= "[account_id]"
+ QDEL_LIST(redeemed_coupons)
return ..()
/**
diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm
index ec24769124f..4b4abcd691a 100644
--- a/code/modules/error_handler/error_viewer.dm
+++ b/code/modules/error_handler/error_viewer.dm
@@ -86,7 +86,7 @@ GLOBAL_DATUM(error_cache, /datum/error_viewer/error_cache)
var/datum/error_viewer/error_source/error_source
for (var/erroruid in error_sources)
error_source = error_sources[erroruid]
- html += "[error_source.make_link(null, src)] x [error_source.errors.len] " //SKYRAT EDIT - RUNTIME TRANSPARENCY
+ html += "[error_source.make_link(null, src)] x [error_source.errors.len] " //NOVA EDIT - RUNTIME TRANSPARENCY
else
html += "[make_link("organized", null)] | linear "
diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm
index 3aa17832e3c..c05f4057583 100644
--- a/code/modules/escape_menu/escape_menu.dm
+++ b/code/modules/escape_menu/escape_menu.dm
@@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(escape_menus)
if (!isnull(ckey))
GLOB.escape_menus[ckey] = src
-/datum/escape_menu/Destroy(force, ...)
+/datum/escape_menu/Destroy(force)
QDEL_NULL(base_holder)
QDEL_NULL(page_holder)
@@ -80,8 +80,8 @@ GLOBAL_LIST_EMPTY(escape_menus)
switch (menu_page)
if (PAGE_HOME)
show_home_page()
- //if (PAGE_LEAVE_BODY) //SKYRAT EDIT REMOVAL
- //show_leave_body_page() //SKYRAT EDIT REMOVAL
+ //if (PAGE_LEAVE_BODY) //NOVA EDIT REMOVAL
+ //show_leave_body_page() //NOVA EDIT REMOVAL
else
CRASH("Unknown escape menu page: [menu_page]")
diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm
index 6d48285ae77..3d8cbb58652 100644
--- a/code/modules/escape_menu/home_page.dm
+++ b/code/modules/escape_menu/home_page.dm
@@ -30,7 +30,7 @@
/* offset = */ 2,
)
)
- //SKYRAT EDIT REMOVAL BEGIN
+ //NOVA EDIT REMOVAL BEGIN
/*
page_holder.give_screen_object(
new /atom/movable/screen/escape_menu/home_button/leave_body(
@@ -43,7 +43,7 @@
)
)
*/
- // SKYRAT EDIT REMOVAL END
+ // NOVA EDIT REMOVAL END
/datum/escape_menu/proc/home_resume()
qdel(src)
diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm
index 14de01749bf..cb85860bd9d 100644
--- a/code/modules/escape_menu/leave_body.dm
+++ b/code/modules/escape_menu/leave_body.dm
@@ -13,7 +13,7 @@
"Suicide",
"Perform a dramatic suicide in game",
/* pixel_offset = */ -105,
- // CALLBACK(src, PROC_REF(leave_suicide)), // SKYRAT EDIT REMOVAL
+ // CALLBACK(src, PROC_REF(leave_suicide)), // NOVA EDIT REMOVAL
/* button_overlay = */ dead_clown,
))
@@ -64,7 +64,7 @@
var/mob/living/living_user = client?.mob
living_user?.ghost()
-//SKYRAT EDIT REMOVAL BEGIN
+//NOVA EDIT REMOVAL BEGIN
/*
/datum/escape_menu/proc/leave_suicide()
PRIVATE_PROC(TRUE)
@@ -73,7 +73,7 @@
var/mob/living/carbon/human/human_user = client?.mob
human_user?.suicide()
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/atom/movable/screen/escape_menu/leave_body_button
icon = 'icons/hud/escape_menu_leave_body.dmi'
diff --git a/code/modules/escape_menu/readme.md b/code/modules/escape_menu/readme.md
index c10aab5535a..ec64cac9a34 100644
--- a/code/modules/escape_menu/readme.md
+++ b/code/modules/escape_menu/readme.md
@@ -1,2 +1,2 @@
-Skyrat Edit:
+NOVA EDIT:
leave_body.dm - removed suicide menu option
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 3a6defdd665..70aa98ab0ca 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -1,4 +1,4 @@
-#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) //SKYRAT EDIT CHANGE
+#define RANDOM_EVENT_ADMIN_INTERVENTION_TIME (3 MINUTES) //NOVA EDIT CHANGE
//this singleton datum is used by the events controller to dictate how it selects events
/datum/round_event_control
@@ -87,8 +87,7 @@
if(ispath(typepath, /datum/round_event/ghost_role) && !(GLOB.ghost_role_flags & GHOSTROLE_MIDROUND_EVENT))
return FALSE
- var/datum/game_mode/dynamic/dynamic = SSticker.mode
- if (istype(dynamic) && dynamic_should_hijack && dynamic.random_event_hijacked != HIJACKED_NOTHING)
+ if (dynamic_should_hijack && SSdynamic.random_event_hijacked != HIJACKED_NOTHING)
return FALSE
return TRUE
@@ -103,19 +102,19 @@
triggering = TRUE
// We sleep HERE, in pre-event setup (because there's no sense doing it in run_event() since the event is already running!) for the given amount of time to make an admin has enough time to cancel an event un-fitting of the present round.
- // SKYRAT EDIT REMOVAL BEGIN - Event notification
+ // NOVA EDIT REMOVAL BEGIN - Event notification
/**
if(alert_observers)
- message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL | SOMETHING ELSE )") //SKYRAT EDIT CHANGE
+ message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (CANCEL | SOMETHING ELSE )") //NOVA EDIT CHANGE
sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)
var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE)
if(!can_spawn_event(players_amt))
message_admins("Second pre-condition check for [name] failed, skipping...")
return EVENT_INTERRUPTED
*/
- // SKYRAT EDIT REMOVAL END - Event notification
+ // NOVA EDIT REMOVAL END - Event notification
- // SKYRAT EDIT ADDITION BEGIN - Event notification
+ // NOVA EDIT ADDITION BEGIN - Event notification
message_admins("Random Event triggering in [DisplayTimeText(RANDOM_EVENT_ADMIN_INTERVENTION_TIME)]: [name]. (\
CANCEL | \
SOMETHING ELSE ) ")
@@ -129,7 +128,7 @@
CANCEL | \
SOMETHING ELSE ) ")
sleep(RANDOM_EVENT_ADMIN_INTERVENTION_TIME * 0.5)
- // SKYRAT EDIT ADDITION END - Event notification
+ // NOVA EDIT ADDITION END - Event notification
if(!triggering)
return EVENT_CANCELLED //admin cancelled
@@ -146,7 +145,7 @@
message_admins("[key_name_admin(usr)] cancelled event [name].")
log_admin_private("[key_name(usr)] cancelled event [name].")
SSblackbox.record_feedback("tally", "event_admin_cancelled", 1, typepath)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(href_list["something_else"])
if(!triggering)
to_chat(usr, span_admin("Too late! The event is running."))
@@ -155,7 +154,7 @@
SSevents.spawnEvent(TRUE)
message_admins("[key_name_admin(usr)] requested a new event be spawned instead of [name].")
log_admin_private("[key_name(usr)] requested a new event be spawned instead of [name].")
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/*
Runs the event
@@ -181,7 +180,7 @@ Runs the event
round_event.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
occurrences++
- SSevents.previously_run += src //SKYRAT EDIT ADDITION
+ SSevents.previously_run += src //NOVA EDIT ADDITION
if(announce_chance_override != null)
round_event.announce_chance = announce_chance_override
diff --git a/code/modules/events/anomaly/_anomaly.dm b/code/modules/events/anomaly/_anomaly.dm
index 40ae2b840e1..2b64ca9a3e6 100644
--- a/code/modules/events/anomaly/_anomaly.dm
+++ b/code/modules/events/anomaly/_anomaly.dm
@@ -28,7 +28,7 @@
/datum/round_event/anomaly/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/start()
var/turf/anomaly_turf
diff --git a/code/modules/events/anomaly/anomaly_bioscrambler.dm b/code/modules/events/anomaly/anomaly_bioscrambler.dm
index 87d8a19c39a..ce12c4060c3 100644
--- a/code/modules/events/anomaly/anomaly_bioscrambler.dm
+++ b/code/modules/events/anomaly/anomaly_bioscrambler.dm
@@ -17,4 +17,4 @@
/datum/round_event/anomaly/anomaly_bioscrambler/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert")
+ priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert")
diff --git a/code/modules/events/anomaly/anomaly_bluespace.dm b/code/modules/events/anomaly/anomaly_bluespace.dm
index e8a6f4aa160..e0821ff209b 100644
--- a/code/modules/events/anomaly/anomaly_bluespace.dm
+++ b/code/modules/events/anomaly/anomaly_bluespace.dm
@@ -16,4 +16,4 @@
/datum/round_event/anomaly/anomaly_bluespace/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_MASSIVEBSPACEANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_MASSIVEBSPACEANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/anomaly/anomaly_dimensional.dm b/code/modules/events/anomaly/anomaly_dimensional.dm
index 885b4fef8c1..85e35c3931e 100644
--- a/code/modules/events/anomaly/anomaly_dimensional.dm
+++ b/code/modules/events/anomaly/anomaly_dimensional.dm
@@ -25,7 +25,7 @@
/datum/round_event/anomaly/anomaly_dimensional/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
/datum/event_admin_setup/listed_options/anomaly_dimensional
input_text = "Select a dimensional anomaly theme?"
diff --git a/code/modules/events/anomaly/anomaly_ectoplasm.dm b/code/modules/events/anomaly/anomaly_ectoplasm.dm
index 6bd929d6922..d05335c172d 100644
--- a/code/modules/events/anomaly/anomaly_ectoplasm.dm
+++ b/code/modules/events/anomaly/anomaly_ectoplasm.dm
@@ -41,7 +41,7 @@
/datum/round_event/anomaly/anomaly_ectoplasm/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert")
/datum/event_admin_setup/anomaly_ectoplasm
///The admin-selected intensity
diff --git a/code/modules/events/anomaly/anomaly_flux.dm b/code/modules/events/anomaly/anomaly_flux.dm
index 231d3d825ba..09f7a22c6df 100644
--- a/code/modules/events/anomaly/anomaly_flux.dm
+++ b/code/modules/events/anomaly/anomaly_flux.dm
@@ -17,4 +17,4 @@
/datum/round_event/anomaly/anomaly_flux/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_FLUXANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_FLUXANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/anomaly/anomaly_grav.dm b/code/modules/events/anomaly/anomaly_grav.dm
index 400feb2900e..5b721a7faeb 100644
--- a/code/modules/events/anomaly/anomaly_grav.dm
+++ b/code/modules/events/anomaly/anomaly_grav.dm
@@ -29,4 +29,4 @@
/datum/round_event/anomaly/anomaly_grav/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRAVANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRANOMALIES)
+ priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRAVANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRANOMALIES)
diff --git a/code/modules/events/anomaly/anomaly_hallucination.dm b/code/modules/events/anomaly/anomaly_hallucination.dm
index 93803a321a8..08296e85f97 100644
--- a/code/modules/events/anomaly/anomaly_hallucination.dm
+++ b/code/modules/events/anomaly/anomaly_hallucination.dm
@@ -17,4 +17,4 @@
/datum/round_event/anomaly/anomaly_hallucination/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_ANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/anomaly/anomaly_pyro.dm b/code/modules/events/anomaly/anomaly_pyro.dm
index c8cbfde644c..14a3973225e 100644
--- a/code/modules/events/anomaly/anomaly_pyro.dm
+++ b/code/modules/events/anomaly/anomaly_pyro.dm
@@ -16,4 +16,4 @@
/datum/round_event/anomaly/anomaly_pyro/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_PYROANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert")
+ priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert", ANNOUNCER_PYROANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert")
diff --git a/code/modules/events/anomaly/anomaly_vortex.dm b/code/modules/events/anomaly/anomaly_vortex.dm
index 3c762d52239..b2221f3ad84 100644
--- a/code/modules/events/anomaly/anomaly_vortex.dm
+++ b/code/modules/events/anomaly/anomaly_vortex.dm
@@ -17,4 +17,4 @@
/datum/round_event/anomaly/anomaly_vortex/announce(fake)
if(isnull(impact_area))
impact_area = placer.findValidArea()
- priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert", ANNOUNCER_VORTEXANOMALIES) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert")
+ priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert", ANNOUNCER_VORTEXANOMALIES) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert")
diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm
index e063c89e152..5d6a5a7d520 100644
--- a/code/modules/events/brain_trauma.dm
+++ b/code/modules/events/brain_trauma.dm
@@ -21,10 +21,10 @@
continue
if(!(H.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) //please stop giving my centcom admin gimmicks full body paralysis
continue
- // SKYRAT EDIT ADD START - Station/area event candidate filtering
+ // NOVA EDIT ADD START - Station/area event candidate filtering
if(engaged_role_play_check(H, station = TRUE, dorms = TRUE))
continue
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
traumatize(H)
announce_to_ghosts(H)
break
diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm
index 950adf622ec..83c0c834d85 100644
--- a/code/modules/events/brand_intelligence.dm
+++ b/code/modules/events/brand_intelligence.dm
@@ -52,7 +52,7 @@
if(fake)
var/obj/machinery/vending/prototype = pick(subtypesof(/obj/machinery/vending))
machine_name = initial(prototype.name)
- priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert", ANNOUNCER_BRANDINTELLIGENCE) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert")
+ priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert", ANNOUNCER_BRANDINTELLIGENCE) //NOVA EDIT CHANGE - ORIGINAL: priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please inspect any [machine_name] brand vendors for aggressive marketing tactics, and reboot them if necessary.", "Machine Learning Alert")
/datum/round_event/brand_intelligence/start()
origin_machine.shut_up = FALSE
diff --git a/code/modules/events/bureaucratic_error.dm b/code/modules/events/bureaucratic_error.dm
index add5ad58b4a..578adc9be30 100644
--- a/code/modules/events/bureaucratic_error.dm
+++ b/code/modules/events/bureaucratic_error.dm
@@ -25,9 +25,9 @@
continue
current.total_positions = 0
else // Adds/removes a random amount of job slots from all jobs.
- */ // SKYRAT EDIT REMOVAL - no more locking off jobs
+ */ // NOVA EDIT REMOVAL - no more locking off jobs
for(var/datum/job/current as anything in jobs)
if(!current.allow_bureaucratic_error)
continue
- var/ran = rand(1,4) // SKYRAT EDIT - no more locking off jobs
+ var/ran = rand(1,4) // NOVA EDIT - no more locking off jobs
current.total_positions = max(current.total_positions + ran, 0)
diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm
index f7ff1c2642c..d4547dd1bdc 100644
--- a/code/modules/events/communications_blackout.dm
+++ b/code/modules/events/communications_blackout.dm
@@ -23,7 +23,7 @@
to_chat(A, " [span_warning("[alert] ")] ")
if(prob(30) || fake) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
- priority_announce(alert, "Anomaly Alert", sound = ANNOUNCER_COMMSBLACKOUT) //SKYRAT EDIT CHANGE - ORIGINAL: priority_announce(alert, "Anomaly Alert")
+ priority_announce(alert, "Anomaly Alert", sound = ANNOUNCER_COMMSBLACKOUT) //NOVA EDIT CHANGE - ORIGINAL: priority_announce(alert, "Anomaly Alert")
/datum/round_event/communications_blackout/start()
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 3be09528abd..c5e5ac399df 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -63,10 +63,10 @@
continue
if(!is_station_level(candidate.z) && !is_mining_level(candidate.z)) //Diseases can't really spread if the vector is in deep space.
continue
- // SKYRAT EDIT ADDITION START - Station/area event candidate filtering.
+ // NOVA EDIT ADDITION START - Station/area event candidate filtering.
if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE))
continue
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
disease_candidates += candidate
///Handles checking and alerting admins about the number of valid candidates
diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm
index 84086260ea6..8a0bb517137 100644
--- a/code/modules/events/electrical_storm.dm
+++ b/code/modules/events/electrical_storm.dm
@@ -15,7 +15,7 @@
announce_when = 1
/datum/round_event/electrical_storm/announce(fake)
- priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", ANNOUNCER_ELECTRICALSTORM) //SKYRAT EDIT CHANGE
+ priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", ANNOUNCER_ELECTRICALSTORM) //NOVA EDIT CHANGE
/datum/round_event/electrical_storm/start()
diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm
index 93572d244f5..e23ff73c07f 100644
--- a/code/modules/events/fake_virus.dm
+++ b/code/modules/events/fake_virus.dm
@@ -12,10 +12,10 @@
continue
if(!(victim.mind?.assigned_role.job_flags & JOB_CREW_MEMBER))
continue
- // SKYRAT EDIT ADD START - Station/area event candidate filtering
+ // NOVA EDIT ADD START - Station/area event candidate filtering
if(engaged_role_play_check(fake_virus_victims, station = TRUE, dorms = TRUE))
continue
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
fake_virus_victims += victim
//first we do hard status effect victims
diff --git a/code/modules/events/ghost_role/_ghost_role.dm b/code/modules/events/ghost_role/_ghost_role.dm
index 90b6b36dca3..336fb4c03bb 100644
--- a/code/modules/events/ghost_role/_ghost_role.dm
+++ b/code/modules/events/ghost_role/_ghost_role.dm
@@ -3,8 +3,6 @@
/datum/round_event/ghost_role
fakeable = FALSE
- /// Members of this list will be placed at the front of the candicacy list, in front of the (shuffled) normal candidates.
- var/list/priority_candidates = list() //expected to contain 0 or more /clients (or things with .key)
/// The minimum number of signups required for the event to continue past the polling period
var/minimum_required = 1
/// The name of the role, to be displayed in logs/polls/etc.
@@ -84,29 +82,4 @@
/datum/round_event/ghost_role/proc/spawn_role()
return FALSE
-/**
- * Gathers the candidates to select our ghost roles from.
- *
- * Returns a list of candidates in priority order, with candidates from
- * `priority_candidates` first, and ghost roles randomly shuffled and
- * appended after.
- *
- * jobban - The jobban flag to exclude players from the polling pool with.
- * be_special - The "special role" flag for the ghost candidacy poll.
- */
-
-/datum/round_event/ghost_role/proc/get_candidates(jobban, be_special)
- var/list/mob/dead/observer/regular_candidates
- // don't get their hopes up
- if(priority_candidates.len < minimum_required)
- regular_candidates = poll_ghost_candidates("Do you wish to be considered for the special role of '[role_name]'?", jobban, be_special)
- else
- regular_candidates = list()
-
- shuffle_inplace(regular_candidates)
-
- var/list/candidates = priority_candidates + regular_candidates
-
- return candidates
-
#undef MAX_SPAWN_ATTEMPT
diff --git a/code/modules/events/ghost_role/abductor.dm b/code/modules/events/ghost_role/abductor.dm
index f6928222cfd..65fe4a142f5 100644
--- a/code/modules/events/ghost_role/abductor.dm
+++ b/code/modules/events/ghost_role/abductor.dm
@@ -14,7 +14,7 @@
fakeable = FALSE //Nothing to fake here
/datum/round_event/ghost_role/abductor/spawn_role()
- var/list/mob/dead/observer/candidates = get_candidates(ROLE_ABDUCTOR, ROLE_ABDUCTOR)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ABDUCTOR, role = ROLE_ABDUCTOR, pic_source = /obj/item/melee/baton/abductor, role_name_text = role_name)
if(candidates.len < 2)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/alien_infestation.dm b/code/modules/events/ghost_role/alien_infestation.dm
index 8c3741ccef2..f4078e52e65 100644
--- a/code/modules/events/ghost_role/alien_infestation.dm
+++ b/code/modules/events/ghost_role/alien_infestation.dm
@@ -62,7 +62,7 @@
message_admins("An event attempted to spawn an alien but no suitable vents were found. Shutting down.")
return MAP_ERROR
- var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, pic_source = /mob/living/carbon/alien/larva, role_name_text = role_name)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/blob.dm b/code/modules/events/ghost_role/blob.dm
index 51219f9fd8d..70640512699 100644
--- a/code/modules/events/ghost_role/blob.dm
+++ b/code/modules/events/ghost_role/blob.dm
@@ -29,7 +29,11 @@
/datum/round_event/ghost_role/blob/spawn_role()
if(!GLOB.blobstart.len)
return MAP_ERROR
- var/list/candidates = get_candidates(ROLE_BLOB, ROLE_BLOB)
+ var/icon/blob_icon = icon('icons/mob/nonhuman-player/blob.dmi', icon_state = "blob_core")
+ blob_icon.Blend("#9ACD32", ICON_MULTIPLY)
+ blob_icon.Blend(icon('icons/mob/nonhuman-player/blob.dmi', "blob_core_overlay"), ICON_OVERLAY)
+ var/image/blob_image = image(blob_icon)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_BLOB, role = ROLE_BLOB, pic_source = blob_image, role_name_text = role_name)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/observer/new_blob = pick(candidates)
diff --git a/code/modules/events/ghost_role/changeling_event.dm b/code/modules/events/ghost_role/changeling_event.dm
index 570a6166093..43b4ca48af5 100644
--- a/code/modules/events/ghost_role/changeling_event.dm
+++ b/code/modules/events/ghost_role/changeling_event.dm
@@ -21,7 +21,7 @@
fakeable = FALSE
/datum/round_event/ghost_role/changeling/spawn_role()
- var/list/mob/dead/observer/candidate = get_candidates(ROLE_CHANGELING, ROLE_CHANGELING_MIDROUND)
+ var/list/mob/dead/observer/candidate = SSpolling.poll_ghost_candidates(check_jobban = ROLE_CHANGELING, role = ROLE_CHANGELING_MIDROUND, pic_source = /obj/item/melee/arm_blade, role_name_text = role_name)
if(!candidate.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm
index d272ba637ce..1556eb04558 100644
--- a/code/modules/events/ghost_role/fugitive_event.dm
+++ b/code/modules/events/ghost_role/fugitive_event.dm
@@ -20,7 +20,7 @@
if(isnull(landing_turf))
return MAP_ERROR
var/list/possible_backstories = list()
- var/list/candidates = get_candidates(ROLE_FUGITIVE, ROLE_FUGITIVE)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_FUGITIVE, role = ROLE_FUGITIVE, pic_source = /obj/item/card/id/advanced/prisoner)
if(!length(candidates))
return NOT_ENOUGH_PLAYERS
@@ -105,7 +105,7 @@
//security team gets called in after 10 minutes of prep to find the refugees
/datum/round_event/ghost_role/fugitives/proc/spawn_hunters(backstory)
- var/list/candidates = poll_ghost_candidates("Do you wish to be considered for a group of [backstory]?", ROLE_FUGITIVE_HUNTER)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a group of [backstory]?", check_jobban = ROLE_FUGITIVE_HUNTER, pic_source = /obj/machinery/sleeper, role_name_text = backstory)
shuffle_inplace(candidates)
var/datum/map_template/shuttle/hunter/ship
diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm
index e9ac8bb9ea0..c9133863f8c 100644
--- a/code/modules/events/ghost_role/morph_event.dm
+++ b/code/modules/events/ghost_role/morph_event.dm
@@ -13,7 +13,7 @@
role_name = "morphling"
/datum/round_event/ghost_role/morph/spawn_role()
- var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, pic_source = /mob/living/basic/morph, role_name_text = "morph")
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm
index 57b942988cd..ffb206c476d 100644
--- a/code/modules/events/ghost_role/nightmare.dm
+++ b/code/modules/events/ghost_role/nightmare.dm
@@ -15,7 +15,7 @@
fakeable = FALSE
/datum/round_event/ghost_role/nightmare/spawn_role()
- var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_NIGHTMARE)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_NIGHTMARE, role_name_text = role_name)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm
index 4cf8da639bb..fcea52e3c02 100644
--- a/code/modules/events/ghost_role/operative.dm
+++ b/code/modules/events/ghost_role/operative.dm
@@ -12,7 +12,7 @@
fakeable = FALSE
/datum/round_event/ghost_role/operative/spawn_role()
- var/list/candidates = get_candidates(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_OPERATIVE, role = ROLE_LONE_OPERATIVE, pic_source = /obj/machinery/nuclearbomb)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/revenant_event.dm b/code/modules/events/ghost_role/revenant_event.dm
index 4ed05bbc82c..6cdfc2c4c9e 100644
--- a/code/modules/events/ghost_role/revenant_event.dm
+++ b/code/modules/events/ghost_role/revenant_event.dm
@@ -30,7 +30,7 @@
message_admins("Event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.")
return WAITING_FOR_SOMETHING
- var/list/candidates = get_candidates(ROLE_REVENANT, ROLE_REVENANT)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_REVENANT, role = ROLE_REVENANT, pic_source = /mob/living/basic/revenant)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/sentience.dm b/code/modules/events/ghost_role/sentience.dm
index f33333ddb1b..8ebd30ad7b3 100644
--- a/code/modules/events/ghost_role/sentience.dm
+++ b/code/modules/events/ghost_role/sentience.dm
@@ -50,7 +50,7 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
/datum/round_event/ghost_role/sentience/spawn_role()
var/list/mob/dead/observer/candidates
- candidates = get_candidates(ROLE_SENTIENCE, ROLE_SENTIENCE)
+ candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, pic_source = /obj/item/slimepotion/slime/sentience, role_name_text = role_name)
// find our chosen mob to breathe life into
// Mobs have to be simple animals, mindless, on station, and NOT holograms.
diff --git a/code/modules/events/ghost_role/sentient_disease.dm b/code/modules/events/ghost_role/sentient_disease.dm
index 5efa4e6915a..44f78d7c08c 100644
--- a/code/modules/events/ghost_role/sentient_disease.dm
+++ b/code/modules/events/ghost_role/sentient_disease.dm
@@ -13,7 +13,7 @@
role_name = "sentient disease"
/datum/round_event/ghost_role/sentient_disease/spawn_role()
- var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, pic_source = /obj/structure/sign/warning/biohazard, role_name_text = role_name)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/slaughter_event.dm b/code/modules/events/ghost_role/slaughter_event.dm
index 8cb2b729aa4..f4628344d2f 100644
--- a/code/modules/events/ghost_role/slaughter_event.dm
+++ b/code/modules/events/ghost_role/slaughter_event.dm
@@ -16,7 +16,7 @@
role_name = "slaughter demon"
/datum/round_event/ghost_role/slaughter/spawn_role()
- var/list/candidates = get_candidates(ROLE_ALIEN, ROLE_ALIEN)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_ALIEN, role = ROLE_ALIEN, pic_source = /mob/living/basic/demon/slaughter, role_name_text = role_name)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/space_dragon.dm b/code/modules/events/ghost_role/space_dragon.dm
index dd75a97a869..0a328f6dc8d 100644
--- a/code/modules/events/ghost_role/space_dragon.dm
+++ b/code/modules/events/ghost_role/space_dragon.dm
@@ -20,7 +20,7 @@
/datum/round_event/ghost_role/space_dragon/spawn_role()
- var/list/candidates = get_candidates(ROLE_SPACE_DRAGON, ROLE_SPACE_DRAGON)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_SPACE_DRAGON, role = ROLE_SPACE_DRAGON, pic_source = /mob/living/basic/space_dragon)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
diff --git a/code/modules/events/ghost_role/space_ninja.dm b/code/modules/events/ghost_role/space_ninja.dm
index 3aa7f5ee1ac..d7da1e4a53e 100644
--- a/code/modules/events/ghost_role/space_ninja.dm
+++ b/code/modules/events/ghost_role/space_ninja.dm
@@ -19,7 +19,7 @@
return MAP_ERROR
//selecting a candidate player
- var/list/candidates = get_candidates(ROLE_NINJA, ROLE_NINJA)
+ var/list/candidates = SSpolling.poll_ghost_candidates(check_jobban = ROLE_NINJA, role = ROLE_NINJA, pic_source = /obj/item/energy_katana)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
@@ -31,7 +31,7 @@
ninja.key = key
ninja.mind.add_antag_datum(/datum/antagonist/ninja)
spawned_mobs += ninja
-// SKYRAT EDIT ADDITION BEGIN: Preference Ninjas
+// NOVA EDIT ADDITION BEGIN: Preference Ninjas
var/loadme = tgui_input_list(ninja, "Do you wish to load your character slot?", "Load Character?", list("Yes!", "No, I want to be random!"), default = "No, I want to be random!", timeout = 60 SECONDS)
var/codename
if(loadme == "Yes!")
@@ -45,7 +45,7 @@
ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES))
ninja.dna.update_dna_identity()
-// SKYRAT EDIT ADDITION END: Preference Ninjas
+// NOVA EDIT ADDITION END: Preference Ninjas
message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a space ninja by an event.")
ninja.log_message("was spawned as a ninja by an event.", LOG_GAME)
@@ -56,9 +56,9 @@
/proc/create_space_ninja(spawn_loc)
var/mob/living/carbon/human/new_ninja = new(spawn_loc)
-// new_ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES)) //SKYRAT EDIT: Player Prefs Ninjas
+// new_ninja.randomize_human_appearance(~(RANDOMIZE_NAME|RANDOMIZE_SPECIES)) //NOVA EDIT: Player Prefs Ninjas
var/new_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]"
new_ninja.name = new_name
new_ninja.real_name = new_name
-// new_ninja.dna.update_dna_identity() //SKYRAT EDIT: Player Prefs Ninjas
+// new_ninja.dna.update_dna_identity() //NOVA EDIT: Player Prefs Ninjas
return new_ninja
diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm
index a7a1740cbc7..9d9e4c76cd9 100644
--- a/code/modules/events/heart_attack.dm
+++ b/code/modules/events/heart_attack.dm
@@ -34,10 +34,10 @@
continue
if(!(candidate.mind.assigned_role.job_flags & JOB_CREW_MEMBER))//only crewmembers can get one, a bit unfair for some ghost roles and it wastes the event
continue
- // SKYRAT EDIT ADD START - Station/area event candidate filtering
+ // NOVA EDIT ADD START - Station/area event candidate filtering
if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE))
continue
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
if(candidate.satiety <= -60 && !candidate.has_status_effect(/datum/status_effect/exercised)) //Multiple junk food items recently //No foodmaxxing for the achievement
heart_attack_candidates[candidate] = 3
else
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 3726da4c650..cad343f7deb 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -84,7 +84,7 @@
priority_announce("Santa is coming to town!", "Unknown Transmission")
/datum/round_event/santa/start()
- var/list/candidates = poll_ghost_candidates("Santa is coming to town! Do you want to be Santa?", poll_time=150)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Santa is coming to town! Do you want to be Santa?", poll_time = 15 SECONDS, pic_source = /obj/item/clothing/head/costume/santa, role_name_text = "santa")
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
santa = new /mob/living/carbon/human(pick(GLOB.blobstart))
diff --git a/code/modules/events/market_crash.dm b/code/modules/events/market_crash.dm
index 1b18fe774f6..3dc9f5f7a65 100644
--- a/code/modules/events/market_crash.dm
+++ b/code/modules/events/market_crash.dm
@@ -23,7 +23,7 @@
var/list/poss_reasons = list("the alignment of the moon and the sun",\
"some risky housing market outcomes",\
"the B.E.P.I.S. team's untimely downfall",\
- "speculative SolFed grants backfiring", /*SKYRAT EDIT CHANGE; original was "speculative Terragov grants backfiring"*/\
+ "speculative SolFed grants backfiring", /*NOVA EDIT CHANGE; original was "speculative Terragov grants backfiring"*/\
"greatly exaggerated reports of Nanotrasen accountancy personnel being \"laid off\"",\
"a \"great investment\" into \"non-fungible tokens\" by a \"moron\"",\
"a number of raids from Tiger Cooperative agents",\
diff --git a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm
index 6c325e43da3..ab129552484 100644
--- a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm
+++ b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm
@@ -7,7 +7,7 @@
/// What the shuttle says about it.
var/shuttle_transit_text = "Unset transit text"
/// Supply points earned for taking the deal.
- var/bonus_points = 10000
+ var/bonus_points = CARGO_CRATE_VALUE * 50
/// Response for taking the deal.
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
/// Small description of the loan for easier log reading.
@@ -21,7 +21,7 @@
bonus_points *= 1.15
/// Spawns paths added to `spawn_list`, and passes empty shuttle turfs so you can spawn more complicated things like dead bodies.
-/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
SHOULD_CALL_PARENT(FALSE)
CRASH("Unimplemented get_spawned_items() on [src.type].")
@@ -31,7 +31,7 @@
shuttle_transit_text = "Virus samples incoming."
logging_desc = "Virus shuttle"
-/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/obj/effect/mob_spawn/corpse/human/assistant/infected_assistant = pick(list(
/obj/effect/mob_spawn/corpse/human/assistant/beesease_infection,
/obj/effect/mob_spawn/corpse/human/assistant/brainrot_infection,
@@ -58,7 +58,7 @@
bonus_points = 0
logging_desc = "Resupply packages"
-/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/list/crate_types = list(
/datum/supply_pack/emergency/equipment,
/datum/supply_pack/security/supplies,
@@ -84,7 +84,7 @@
shuttle_transit_text = "Syndicate hijack team incoming."
logging_desc = "Syndicate boarding party"
-/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
pack.generate(pick_n_take(empty_shuttle_turfs))
@@ -99,10 +99,10 @@
sender = "CentCom Janitorial Division"
announcement_text = "One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?"
shuttle_transit_text = "Biohazard cleanup incoming."
- bonus_points = 20000 //Toxin bees can be unbeelievably lethal
+ bonus_points = CARGO_CRATE_VALUE * 100 //Toxin bees can be unbeelievably lethal
logging_desc = "Shuttle full of bees"
-/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/hydroponics/beekeeping_fullkit]
pack.generate(pick_n_take(empty_shuttle_turfs))
@@ -135,10 +135,10 @@
announcement_text = "We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it."
shuttle_transit_text = "Live explosive ordnance incoming. Exercise extreme caution."
thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended."
- bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese
+ bonus_points = CARGO_CRATE_VALUE * 225 //If you mess up, people die and the shuttle gets turned into swiss cheese
logging_desc = "Shuttle with a ticking bomb"
-/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
spawn_list.Add(/obj/machinery/syndicatebomb/shuttle_loan)
if(prob(95))
spawn_list.Add(/obj/item/paper/fluff/cargo/bomb)
@@ -153,7 +153,7 @@
bonus_points = 0 //Payout is made when the stamped papers are returned
logging_desc = "Paperwork shipment"
-/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
spawn_list += subtypesof(/obj/item/paperwork) - typesof(/obj/item/paperwork/photocopy) - typesof(/obj/item/paperwork/ancient)
/datum/shuttle_loan_situation/pizza_delivery
@@ -164,8 +164,8 @@
bonus_points = 0
logging_desc = "Pizza delivery"
-/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
- var/naughtypizza = list(/obj/item/pizzabox/bomb /*/obj/item/pizzabox/margherita/robo*/) // SKYRAT EDIT: oh look another blacklist, for pizza nonetheless! removes borg pizza
+/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
+ var/naughtypizza = list(/obj/item/pizzabox/bomb) // oh look another blacklist, for pizza nonetheless! removes borg pizza // NOVA EDIT CHANGE - ORIGINAL: var/naughtypizza = list(/obj/item/pizzabox/bomb, /obj/item/pizzabox/margherita/robo)
var/nicepizza = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/meat, /obj/item/pizzabox/vegetable, /obj/item/pizzabox/mushroom)
for(var/i in 1 to 6)
spawn_list.Add(pick(prob(5) ? naughtypizza : nicepizza))
@@ -176,7 +176,7 @@
shuttle_transit_text = "Partying Russians incoming."
logging_desc = "Russian party squad"
-/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/service/party]
pack.generate(pick_n_take(empty_shuttle_turfs))
@@ -194,7 +194,7 @@
shuttle_transit_text = "Spider Clan gift incoming."
logging_desc = "Shuttle full of spiders"
-/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
+/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
pack.generate(pick_n_take(empty_shuttle_turfs))
@@ -213,3 +213,82 @@
for(var/i in 1 to 5)
var/turf/web_turf = pick_n_take(empty_shuttle_turfs)
new /obj/structure/spider/stickyweb(web_turf)
+
+#define DENT_WALL "dent"
+#define CHANGE_WALL "change"
+#define DISMANTLE_WALL "dismantle"
+
+#define BREAK_TILE "break"
+#define PLATING_TILE "plating"
+#define RUST_TILE "rust"
+
+/**
+ * A special shuttle loan situation enabled by the 'mail blocked' station trait.
+ * It sends back a lot of mail to the station, at the cost of wrecking the cargo shuttle a little.
+ */
+/datum/shuttle_loan_situation/mail_strike
+ sender = "Spinward Mail Workers Union"
+ announcement_text = "The Mail Workers Union wants to borrow your cargo shuttle to employ \"advanced union strike tactics\" with. Payment is strictly in mails."
+ bonus_points = 0
+ thanks_msg = "The cargo shuttle should return in five minutes."
+ shuttle_transit_text = "Nothing stops the mail."
+ logging_desc = "Shuttle full of shady mail"
+
+/datum/shuttle_loan_situation/mail_strike/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
+ for(var/i in 1 to rand(7, 12))
+ var/turf/closed/wall/wall = pick_n_take(blocked_shutte_turfs)
+ if(!istype(wall))
+ continue
+ var/static/list/wall_bad_stuff = list(DENT_WALL = 85, CHANGE_WALL = 13, DISMANTLE_WALL = 2)
+ var/static/list/possible_new_walls = list(
+ /turf/closed/wall/mineral/sandstone,
+ /turf/closed/wall/mineral/wood,
+ /turf/closed/wall/mineral/iron,
+ /turf/closed/wall/metal_foam_base,
+ /turf/closed/wall/r_wall,
+ )
+ var/damage_done = pick_weight(wall_bad_stuff)
+ switch(damage_done)
+ if(DENT_WALL)
+ for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
+ wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
+ if(CHANGE_WALL)
+ wall.ChangeTurf(pick(possible_new_walls - wall.type))
+ if(prob(25))
+ for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
+ wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
+ if(DISMANTLE_WALL)
+ wall.dismantle_wall()
+
+ for(var/i in 1 to rand(7, 12))
+ var/turf/open/floor/floor = pick_n_take(empty_shuttle_turfs)
+ if(!istype(floor))
+ continue
+ var/static/list/floor_bad_stuff = list(BREAK_TILE = 65, PLATING_TILE = 25, RUST_TILE = 10)
+ var/damage_done = pick_weight(floor_bad_stuff)
+ switch(damage_done)
+ if(BREAK_TILE)
+ if(prob(50))
+ floor.break_tile()
+ else
+ floor.burn_tile()
+ if(PLATING_TILE)
+ if(prob(25))
+ floor.remove_tile()
+ else
+ floor.make_plating()
+ if(RUST_TILE)
+ floor.ChangeTurf(/turf/open/floor/plating/rust)
+ if(prob(25))
+ spawn_list += pick(/obj/effect/gibspawner/robot, /obj/effect/gibspawner/human)
+
+ for(var/i in 1 to rand(4, 7))
+ spawn_list += /obj/structure/closet/crate/mail/full/mail_strike
+
+#undef BREAK_TILE
+#undef PLATING_TILE
+#undef RUST_TILE
+
+#undef DENT_WALL
+#undef CHANGE_WALL
+#undef DISMANTLE_WALL
diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
index 6eeddea0214..99e70e39495 100644
--- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm
+++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm
@@ -8,7 +8,8 @@
description = "If cargo accepts the offer, fills the shuttle with loot and/or enemies."
///The types of loan events already run (and to be excluded if the event triggers).
admin_setup = list(/datum/event_admin_setup/listed_options/shuttle_loan)
- var/list/run_situations = list()
+ ///A list of normally unavailable (or already run) situations datums
+ var/list/unavailable_situations = list(/datum/shuttle_loan_situation/mail_strike)
/datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE)
. = ..()
@@ -28,14 +29,14 @@
var/datum/round_event_control/shuttle_loan/loan_control = control
//by this point if situation is admin picked, it is a type, not an instance.
if(!situation)
- var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.run_situations
+ var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.unavailable_situations
if(!valid_situations.len)
//If we somehow run out of loans (fking campbell), they all become available again
- loan_control.run_situations.Cut()
+ loan_control.unavailable_situations.Cut()
valid_situations = subtypesof(/datum/shuttle_loan_situation)
situation = pick(valid_situations)
- loan_control.run_situations.Add(situation)
+ loan_control.unavailable_situations.Add(situation)
situation = new situation()
/datum/round_event/shuttle_loan/announce(fake)
@@ -76,10 +77,12 @@
//get empty turfs
var/list/empty_shuttle_turfs = list()
+ var/list/blocked_shutte_turfs = list()
var/list/area/shuttle/shuttle_areas = SSshuttle.supply.shuttle_areas
for(var/area/shuttle/shuttle_area as anything in shuttle_areas)
for(var/turf/open/floor/shuttle_turf in shuttle_area)
if(shuttle_turf.is_blocked_turf())
+ blocked_shutte_turfs += shuttle_turf
continue
empty_shuttle_turfs += shuttle_turf
if(!empty_shuttle_turfs.len)
@@ -87,7 +90,7 @@
//let the situation spawn its items
var/list/spawn_list = list()
- situation.spawn_items(spawn_list, empty_shuttle_turfs)
+ situation.spawn_items(spawn_list, empty_shuttle_turfs, blocked_shutte_turfs)
var/false_positive = 0
while(spawn_list.len && empty_shuttle_turfs.len)
@@ -103,7 +106,7 @@
/datum/event_admin_setup/listed_options/shuttle_loan/get_list()
var/datum/round_event_control/shuttle_loan/loan_event = event_control
- var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.run_situations
+ var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.unavailable_situations
return valid_situations
/datum/event_admin_setup/listed_options/shuttle_loan/apply_to_event(datum/round_event/shuttle_loan/event)
diff --git a/code/modules/events/space_vines/vine_mutations.dm b/code/modules/events/space_vines/vine_mutations.dm
index f081c81b985..6f1b9265d82 100644
--- a/code/modules/events/space_vines/vine_mutations.dm
+++ b/code/modules/events/space_vines/vine_mutations.dm
@@ -72,11 +72,11 @@
return
if(prob(TOXICITY_MUTATION_PROB) && istype(crosser) && !isvineimmune(crosser))
to_chat(crosser, span_alert("You accidentally touch the vine and feel a strange sensation."))
- crosser.adjustToxLoss(5) // SKYRAT EDIT CHANGE - Original: 20
+ crosser.adjustToxLoss(5) // NOVA EDIT CHANGE - Original: 20
/datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater)
if(!isvineimmune(eater))
- eater.adjustToxLoss(5) // SKYRAT EDIT CHANGE - Original: 20
+ eater.adjustToxLoss(5) // NOVA EDIT CHANGE - Original: 20
/datum/spacevine_mutation/explosive // JC IT'S A BOMB
name = "Explosive"
@@ -290,7 +290,7 @@
if(prob(THORN_MUTATION_CUT_PROB) && istype(crosser) && !isvineimmune(crosser))
var/mob/living/victim = crosser
- victim.adjustBruteLoss(5) // SKYRAT EDIT CHANGE - Original: 15
+ victim.adjustBruteLoss(5) // NOVA EDIT CHANGE - Original: 15
to_chat(victim, span_danger("You cut yourself on the thorny vines."))
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/item, expected_damage)
@@ -305,7 +305,7 @@
if(prob(THORN_MUTATION_CUT_PROB) && istype(hitter) && !isvineimmune(hitter))
var/mob/living/victim = hitter
- victim.adjustBruteLoss(5) // SKYRAT EDIT CHANGE - Original: 15
+ victim.adjustBruteLoss(5) // NOVA EDIT CHANGE - Original: 15
to_chat(victim, span_danger("You cut yourself on the thorny vines."))
return expected_damage
diff --git a/code/modules/events/space_vines/vine_structure.dm b/code/modules/events/space_vines/vine_structure.dm
index 155a4c5c083..539b8a75cd4 100644
--- a/code/modules/events/space_vines/vine_structure.dm
+++ b/code/modules/events/space_vines/vine_structure.dm
@@ -7,7 +7,6 @@
anchored = TRUE
density = FALSE
layer = SPACEVINE_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
mouse_opacity = MOUSE_OPACITY_OPAQUE //Clicking anywhere on the turf is good enough
pass_flags = PASSTABLE | PASSGRILLE
max_integrity = 50
@@ -68,10 +67,10 @@
for(var/datum/spacevine_mutation/mutation in mutations)
override += mutation.on_chem(src, chem)
if(!override && prob(75) && istype(chem, /datum/reagent/toxin/plantbgone))
- // SKYRAT EDIT ADD START
+ // NOVA EDIT ADD START
if(plantbgone_resist && prob(50))
return
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
qdel(src)
/obj/structure/spacevine/proc/eat(mob/eater)
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index f83050fe08d..b96206ecfa6 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -27,7 +27,7 @@
var/item_set = pick(
BIG_FAT_DOOBIE,
BOXING,
-// CATGIRLS_2015, // SKYRAT EDIT REMOVAL
+// CATGIRLS_2015, // NOVA EDIT REMOVAL
CURSED_SWORDS,
VOICE_MODULATORS,
WIZARD_MIMICRY,
diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm
index 4a927c052ed..82994226142 100644
--- a/code/modules/events/wizard/imposter.dm
+++ b/code/modules/events/wizard/imposter.dm
@@ -13,7 +13,7 @@
if(!ishuman(M.current))
continue
var/mob/living/carbon/human/W = M.current
- var/list/candidates = poll_ghost_candidates("Would you like to be an imposter wizard?", ROLE_WIZARD)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Would you like to be an imposter wizard?", check_jobban = ROLE_WIZARD, pic_source = /obj/item/clothing/head/wizard, role_name_text = "imposter wizard")
if(!length(candidates))
return //Sad Trombone
var/mob/dead/observer/C = pick(candidates)
diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm
index 282dae5d33c..a755af9f644 100644
--- a/code/modules/events/wizard/petsplosion.dm
+++ b/code/modules/events/wizard/petsplosion.dm
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(petsplosion_candidates, typecacheof(list(
/datum/round_event_control/wizard/petsplosion //the horror
name = "Petsplosion"
- weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2
+ weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2
typepath = /datum/round_event/wizard/petsplosion
max_occurrences = 1 //Exponential growth is nothing to sneeze at!
earliest_start = 0 MINUTES
diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm
index a9ef199bf76..288bb52b2fb 100644
--- a/code/modules/events/wizard/race.dm
+++ b/code/modules/events/wizard/race.dm
@@ -1,6 +1,6 @@
/datum/round_event_control/wizard/race //Lizard Wizard? Lizard Wizard.
name = "Race Swap"
- weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2
+ weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 2
typepath = /datum/round_event/wizard/race
max_occurrences = 5
earliest_start = 0 MINUTES
diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm
index 0ffe8966eea..696111c5814 100644
--- a/code/modules/events/wizard/shuffle.dm
+++ b/code/modules/events/wizard/shuffle.dm
@@ -42,7 +42,7 @@
/datum/round_event_control/wizard/shufflenames //Face/off joke
name = "Change Faces!"
- weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 4
+ weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 4
typepath = /datum/round_event/wizard/shufflenames
max_occurrences = 5
earliest_start = 0 MINUTES
@@ -77,7 +77,7 @@
/datum/round_event_control/wizard/shuffleminds //Basically Mass Ranged Mindswap
name = "Change Minds!"
- weight = 0 //SKYRAT EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 1
+ weight = 0 //NOVA EDIT CHANGE - WIZARD CHANGE - ORIGINAL weight = 1
typepath = /datum/round_event/wizard/shuffleminds
max_occurrences = 3
earliest_start = 0 MINUTES
diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm
index 29e7da95391..ef4cd581cb9 100644
--- a/code/modules/experisci/experiment/handlers/experiment_handler.dm
+++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm
@@ -72,7 +72,7 @@
GLOB.experiment_handlers += src
-/datum/component/experiment_handler/Destroy(force, silent)
+/datum/component/experiment_handler/Destroy(force)
. = ..()
GLOB.experiment_handlers -= src
diff --git a/code/modules/explorer_drone/exploration_events/resource.dm b/code/modules/explorer_drone/exploration_events/resource.dm
index 3d4fc926517..d25729c3826 100644
--- a/code/modules/explorer_drone/exploration_events/resource.dm
+++ b/code/modules/explorer_drone/exploration_events/resource.dm
@@ -282,7 +282,7 @@
has_tool_description = "Your drill will allow you to extract the deposit!"
action_text = "Mine"
delay_message = "Mining..."
- var/static/list/possible_materials = list(/datum/material/silver,/datum/material/bananium) //only add materials with sheet type here //SKYRAT EDIT - REMOVED /datum/material/pizza
+ var/static/list/possible_materials = list(/datum/material/silver,/datum/material/bananium) //only add materials with sheet type here //NOVA EDIT - REMOVED /datum/material/pizza
var/loot_amount = 30
var/chosen_material_type
diff --git a/code/modules/explorer_drone/manager.dm b/code/modules/explorer_drone/manager.dm
index 9ca85ca4a20..00909d03abf 100644
--- a/code/modules/explorer_drone/manager.dm
+++ b/code/modules/explorer_drone/manager.dm
@@ -79,7 +79,7 @@
/datum/adventure_browser/ui_assets(mob/user)
return list(get_asset_datum(/datum/asset/simple/adventure))
-/datum/adventure_browser/Destroy(force, ...)
+/datum/adventure_browser/Destroy(force)
. = ..()
QDEL_NULL(temp_adventure)
diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm
index 2cfc6cbf814..05f1d9a8b8f 100644
--- a/code/modules/explorer_drone/scanner_array.dm
+++ b/code/modules/explorer_drone/scanner_array.dm
@@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions())
SEND_SIGNAL(src,COMSIG_EXOSCAN_INTERRUPTED)
qdel(src)
-/datum/exoscan/Destroy(force, ...)
+/datum/exoscan/Destroy(force)
. = ..()
deltimer(scan_timer)
diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm
index 7744bcc01be..81e8b3a6943 100644
--- a/code/modules/fishing/fishing_minigame.dm
+++ b/code/modules/fishing/fishing_minigame.dm
@@ -199,7 +199,7 @@
bait_height -= difficulty
bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1)
-/datum/fishing_challenge/Destroy(force, ...)
+/datum/fishing_challenge/Destroy(force)
if(!completed)
complete(win = FALSE)
if(fishing_line)
diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm
index 5061d84a018..120348038f1 100644
--- a/code/modules/fishing/sources/_fish_source.dm
+++ b/code/modules/fishing/sources/_fish_source.dm
@@ -170,10 +170,13 @@ GLOBAL_LIST_INIT(specific_fish_icons, zebra_typecacheof(list(
var/atom/movable/reward = spawn_reward(reward_path, fisherman, fishing_spot)
if(!reward) //balloon alert instead
- fisherman.balloon_alert(fisherman,pick(duds))
+ fisherman.balloon_alert(fisherman, pick(duds))
return
if(isitem(reward)) //Try to put it in hand
INVOKE_ASYNC(fisherman, TYPE_PROC_REF(/mob, put_in_hands), reward)
+ else if(istype(reward, /obj/effect/spawner)) // Do not attempt to forceMove() a spawner. It will break things, and the spawned item should already be at the mob's turf by now.
+ fisherman.balloon_alert(fisherman, "caught something!")
+ return
else // for fishing things like corpses, move them to the turf of the fisherman
INVOKE_ASYNC(reward, TYPE_PROC_REF(/atom/movable, forceMove), get_turf(fisherman))
fisherman.balloon_alert(fisherman, "caught [reward]!")
diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm
index 75381f61474..15f39d3ac28 100644
--- a/code/modules/food_and_drinks/machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm
@@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list(
/obj/item/reagent_containers/syringe,
)))
-/obj/machinery/deepfryer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/machinery/deepfryer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "deep fryer"
desc = "Deep fried everything ."
icon = 'icons/obj/machines/kitchen.dmi'
diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm
index f8410d2065d..da92d040f27 100644
--- a/code/modules/food_and_drinks/machinery/food_cart.dm
+++ b/code/modules/food_and_drinks/machinery/food_cart.dm
@@ -137,4 +137,3 @@
icon = 'icons/obj/fluff/3x3.dmi'
icon_state = "stand"
layer = ABOVE_MOB_LAYER//big mobs will still go over the tent, this is fine and cool
- plane = GAME_PLANE_UPPER
diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm
index 5cc23742060..43493c3c969 100644
--- a/code/modules/food_and_drinks/machinery/gibber.dm
+++ b/code/modules/food_and_drinks/machinery/gibber.dm
@@ -1,4 +1,4 @@
-/obj/machinery/gibber//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/machinery/gibber//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "gibber"
desc = "The name isn't descriptive enough?"
icon = 'icons/obj/machines/kitchen.dmi'
diff --git a/code/modules/food_and_drinks/machinery/grill.dm b/code/modules/food_and_drinks/machinery/grill.dm
index dc72f0b70ff..9ca42de4ee6 100644
--- a/code/modules/food_and_drinks/machinery/grill.dm
+++ b/code/modules/food_and_drinks/machinery/grill.dm
@@ -3,7 +3,7 @@
#define GRILL_FUELUSAGE_IDLE 0.5
#define GRILL_FUELUSAGE_ACTIVE 5
-/obj/machinery/grill//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/machinery/grill//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "grill"
desc = "Just like the old days."
icon = 'icons/obj/machines/kitchen.dmi'
diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm
index 5333643e955..0471f5e92ef 100644
--- a/code/modules/food_and_drinks/machinery/microwave.dm
+++ b/code/modules/food_and_drinks/machinery/microwave.dm
@@ -418,8 +418,8 @@
return TRUE
return ..()
- if(vampire_charging_capable && istype(item, /obj/item/modular_computer/pda) && ingredients.len > 0)
- balloon_alert(user, "max 1 pda!")
+ if(vampire_charging_capable && istype(item, /obj/item/modular_computer) && ingredients.len > 0)
+ balloon_alert(user, "max 1 device!")
return FALSE
if(istype(item, /obj/item/storage))
@@ -577,7 +577,7 @@
if(cell_powered && cell?.charge < TIER_1_CELL_CHARGE_RATE * efficiency)
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
- balloon_alert(cooker, "replace cell!")
+ balloon_alert(cooker, "no power draw!")
return
if(cooker && HAS_TRAIT(cooker, TRAIT_CURSED) && prob(7))
@@ -593,7 +593,7 @@
for(var/atom/movable/potential_fooditem as anything in ingredients)
if(IS_EDIBLE(potential_fooditem))
non_food_ingedients--
- if(istype(potential_fooditem, /obj/item/modular_computer/pda) && prob(75))
+ if(istype(potential_fooditem, /obj/item/modular_computer) && prob(75))
pda_failure = TRUE
notify_ghosts(
"[cooker] has overheated their PDA!",
@@ -610,11 +610,13 @@
start(cooker)
/obj/machinery/microwave/proc/wzhzhzh()
- visible_message(span_notice("\The [src] turns on."), null, span_hear("You hear a microwave humming."))
- operating = TRUE
if(cell_powered && !isnull(cell))
- cell.use(TIER_1_CELL_CHARGE_RATE * efficiency)
+ if(!cell.use(TIER_1_CELL_CHARGE_RATE * efficiency))
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
+ return
+ visible_message(span_notice("\The [src] turns on."), null, span_hear("You hear a microwave humming."))
+ operating = TRUE
set_light(l_range = 1.5, l_power = 1.2, l_on = TRUE)
soundloop.start()
update_appearance()
@@ -764,7 +766,7 @@
* * cooker - The mob that initiated the cook cycle, can be null if no apparent mob triggered it (such as via emp)
*/
/obj/machinery/microwave/proc/vampire(mob/cooker)
- var/obj/item/modular_computer/pda/vampire_pda = LAZYACCESS(ingredients, 1)
+ var/obj/item/modular_computer/vampire_pda = LAZYACCESS(ingredients, 1)
if(isnull(vampire_pda))
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
after_finish_loop()
@@ -796,7 +798,7 @@
// We should only be charging PDAs
for(var/atom/movable/potential_item as anything in ingredients)
- if(!istype(potential_item, /obj/item/modular_computer/pda))
+ if(!istype(potential_item, /obj/item/modular_computer))
balloon_alert(cooker, "pda only!")
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
eject()
@@ -817,7 +819,7 @@
pre_fail()
return
- if(!vampire_charge_amount || !length(ingredients) || (!isnull(cell) && !cell.charge) || vampire_charge_amount < 25)
+ if(!vampire_charge_amount || !length(ingredients) || isnull(cell) || !cell.charge || vampire_charge_amount < 25)
vampire_cell = null
charge_loop_finish(cooker)
return
diff --git a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
index afbbf6da0c4..c2ef7973a8a 100644
--- a/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
+++ b/code/modules/food_and_drinks/machinery/monkeyrecycler.dm
@@ -29,9 +29,9 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
. = ..()
cube_production = 0
for(var/datum/stock_part/servo/servo in component_parts)
- cube_production += servo.tier * 0.2 // SKYRAT EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += manipulator.tier * 0.1
+ cube_production += servo.tier * 0.2 // NOVA EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += manipulator.tier * 0.1
for(var/datum/stock_part/matter_bin/matter_bin in component_parts)
- cube_production += matter_bin.tier * 0.2 // SKYRAT EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += matter_bin.tier * 0.1
+ cube_production += matter_bin.tier * 0.2 // NOVA EDIT CHANGE - buffs to allow 1.2 cubes per monkey at T4 - ORIGINAL: cube_production += matter_bin.tier * 0.1
/obj/machinery/monkey_recycler/examine(mob/user)
. = ..()
diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm
index 4641da596da..c3e40300392 100644
--- a/code/modules/food_and_drinks/machinery/processor.dm
+++ b/code/modules/food_and_drinks/machinery/processor.dm
@@ -1,6 +1,6 @@
#define PROCESSOR_SELECT_RECIPE(movable_input) LAZYACCESS(processor_inputs[type], movable_input.type)
-/obj/machinery/processor //SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/machinery/processor //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "food processor"
desc = "An industrial grinder used to process meat and other foods. Keep hands clear of intake area while operating."
icon = 'icons/obj/machines/kitchen.dmi'
diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm
index 8dbc90e80d1..a7da148b308 100644
--- a/code/modules/food_and_drinks/machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/machinery/smartfridge.dm
@@ -725,7 +725,7 @@
/obj/item/reagent_containers/cup/beaker,
/obj/item/reagent_containers/spray,
/obj/item/reagent_containers/medigel,
- /obj/item/reagent_containers/cup/vial, //SKYRAT EDIT ADDITION - HYPOSPRAYS
+ /obj/item/reagent_containers/cup/vial, //NOVA EDIT ADDITION - HYPOSPRAYS
/obj/item/reagent_containers/chem_pack
))
return is_type_in_typecache(weapon, chemfridge_typecache)
diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm
index 3703a29cd93..77606f5e372 100644
--- a/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm
+++ b/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm
@@ -31,11 +31,6 @@
required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
-/datum/chemical_reaction/drink/wine
- results = list(/datum/reagent/consumable/ethanol/wine = 10)
- required_reagents = list(/datum/reagent/consumable/grapejuice = 10)
- required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
-
/datum/chemical_reaction/drink/spacebeer
results = list(/datum/reagent/consumable/ethanol/beer = 10)
required_reagents = list(/datum/reagent/consumable/flour = 10)
diff --git a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm
index b3db43009a0..e4585669b8d 100644
--- a/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm
+++ b/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm
@@ -105,12 +105,12 @@
/datum/chemical_reaction/drink/coffee
results = list(/datum/reagent/consumable/coffee = 5)
required_reagents = list(/datum/reagent/toxin/coffeepowder = 1, /datum/reagent/water = 5)
- pollutant_type = /datum/pollutant/food/coffee //SKYRAT EDIT ADDITION - Pollution
+ pollutant_type = /datum/pollutant/food/coffee //NOVA EDIT ADDITION - Pollution
/datum/chemical_reaction/drink/tea
results = list(/datum/reagent/consumable/tea = 5)
required_reagents = list(/datum/reagent/toxin/teapowder = 1, /datum/reagent/water = 5)
- pollutant_type = /datum/pollutant/food/tea //SKYRAT EDIT ADDITION
+ pollutant_type = /datum/pollutant/food/tea //NOVA EDIT ADDITION
/datum/chemical_reaction/drink/cream_soda
results = list(/datum/reagent/consumable/cream_soda = 4)
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index 3b6092917b4..761ff0c4712 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -131,13 +131,13 @@
results = list(/datum/reagent/consumable/hot_ramen = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/consumable/dry_ramen = 3)
- pollutant_type = /datum/pollutant/food/spicy_noodles //SKYRAT EDIT ADDITION
+ pollutant_type = /datum/pollutant/food/spicy_noodles //NOVA EDIT ADDITION
/datum/chemical_reaction/food/hell_ramen
results = list(/datum/reagent/consumable/hell_ramen = 6)
required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/hot_ramen = 6)
- pollutant_type = /datum/pollutant/food/spicy_noodles //SKYRAT EDIT ADDITION
+ pollutant_type = /datum/pollutant/food/spicy_noodles //NOVA EDIT ADDITION
/datum/chemical_reaction/food/imitationcarpmeat
required_reagents = list(/datum/reagent/toxin/carpotoxin = 5)
@@ -284,3 +284,9 @@
required_reagents = list(/datum/reagent/consumable/flour = 1, /datum/reagent/consumable/nutriment/soup/dashi = 1)
mix_message = "A smooth batter forms."
reaction_flags = REACTION_INSTANT
+
+/datum/chemical_reaction/food/vinegar
+ results = list(/datum/reagent/consumable/vinegar = 5)
+ required_reagents = list(/datum/reagent/consumable/grapejuice = 5)
+ required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
+ mix_message = "The smell of the mixture reminds you of how you lost access to the country club..."
diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm
index ab6006631b7..7a80f291b87 100644
--- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm
@@ -710,7 +710,7 @@
/datum/chemical_reaction/food/soup/bloodsoup
required_reagents = list(
- /datum/reagent/water/salt = 10, // SKYRAT EDIT CHANGE - ORIGINAL: /datum/reagent/water = 10,
+ /datum/reagent/water/salt = 10, // NOVA EDIT CHANGE - ORIGINAL: /datum/reagent/water = 10,
/datum/reagent/blood = 10,
)
required_ingredients = list(
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
index 06b5e8952ed..4e7c63413ec 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -397,3 +397,71 @@
)
result = /obj/item/food/burger/sloppy_moe
category = CAT_BURGER
+
+/datum/crafting_recipe/food/kortaburger
+ name = "Plain Rootburger"
+ reqs = list(
+ /obj/item/food/patty/plain = 1,
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/plain/korta
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/ratkorta
+ name = "Rat Rootburger"
+ reqs = list(
+ /obj/item/food/deadmouse = 1,
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/rat/korta
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/rootguffin
+ name = "Root-Guffin"
+ reqs = list(
+ /obj/item/food/friedegg = 1,
+ /obj/item/food/meat/bacon = 2,
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/rootguffin
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/rootrib
+ name = "RootRib"
+ reqs = list(
+ /obj/item/food/bbqribs = 1, //The sauce is already included in the ribs
+ /obj/item/food/onion_slice = 1, //feel free to remove if too burdensome.
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/rootrib
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/rootchicken
+ name = "Chicken Rootwich"
+ reqs = list(
+ /obj/item/food/patty/chicken = 1,
+ /datum/reagent/consumable/mayonnaise = 5,
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/rootchicken
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/rootfish
+ name = "Fish rootburger"
+ reqs = list(
+ /obj/item/food/fishmeat = 1,
+ /obj/item/food/rootroll = 1
+ )
+ result = /obj/item/food/burger/rootfish
+ category = CAT_BURGER
+
+/datum/crafting_recipe/food/sloppyroot
+ name = "Sssloppy moe"
+ reqs = list(
+ /obj/item/food/rootroll = 1,
+ /obj/item/food/meat/cutlet = 2,
+ /obj/item/food/onion_slice = 1,
+ /datum/reagent/consumable/bbqsauce = 5,
+ )
+ result = /obj/item/food/burger/sloppyroot
+ category = CAT_BURGER
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
index c260f5b4d1b..0e71758b063 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm
@@ -310,3 +310,14 @@
)
result = /obj/item/food/popsicle/licorice_creamsicle
category = CAT_ICE
+
+/datum/crafting_recipe/food/meatsicle
+ name = "Meatsicle"
+ reqs = list(
+ /obj/item/popsicle_stick = 1,
+ /obj/item/food/meat/slab = 1,
+ /datum/reagent/consumable/ice = 2,
+ /datum/reagent/consumable/sugar = 2
+ )
+ result = /obj/item/food/popsicle/meatsicle
+ category = CAT_ICE
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
index 419546a4784..98eafb66823 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm
@@ -262,6 +262,21 @@
result = /obj/item/food/beef_wellington
category = CAT_MEAT
+/datum/crafting_recipe/food/korta_wellington
+ name = "Korta Wellington"
+ reqs = list(
+ /obj/item/food/meat/steak = 1,
+ /obj/item/food/grown/mushroom = 1,
+ /obj/item/food/grown/garlic = 1,
+ /obj/item/food/meat/bacon = 1,
+ /obj/item/food/flatrootdough = 1,
+ /datum/reagent/consumable/korta_milk = 5,
+ /datum/reagent/consumable/salt = 2,
+ /datum/reagent/consumable/blackpepper = 2
+ )
+ result = /obj/item/food/korta_wellington
+ category = CAT_MEAT
+
/datum/crafting_recipe/food/full_roast
name = "Roast Chicken Dinner"
reqs = list(
diff --git a/code/modules/forensics/_forensics.dm b/code/modules/forensics/_forensics.dm
index 5936ce4b5c4..75cbc55df28 100644
--- a/code/modules/forensics/_forensics.dm
+++ b/code/modules/forensics/_forensics.dm
@@ -66,7 +66,7 @@
src.fibers = LAZY_LISTS_OR(src.fibers, fibers)
check_blood()
-/datum/forensics/Destroy(force, ...)
+/datum/forensics/Destroy(force)
var/atom/parent_atom = parent.resolve()
if (!isnull(parent_atom))
UnregisterSignal(parent_atom, list(COMSIG_COMPONENT_CLEAN_ACT))
diff --git a/code/modules/hallucination/delusions.dm b/code/modules/hallucination/delusions.dm
index 312972f5c9a..9dd82151e06 100644
--- a/code/modules/hallucination/delusions.dm
+++ b/code/modules/hallucination/delusions.dm
@@ -56,7 +56,7 @@
return ..()
/datum/hallucination/delusion/start()
- if(!hallucinator.client || !delusion_icon_file)
+ if(!hallucinator.client)
return FALSE
feedback_details += "Delusion: [delusion_name]"
@@ -229,3 +229,31 @@
affects_us = FALSE
affects_others = TRUE
random_hallucination_weight = 0
+
+/// Hallucination used by the path of moon heretic to turn everyone into a lunar mass
+/datum/hallucination/delusion/preset/moon
+ delusion_icon_file = 'icons/mob/nonhuman-player/eldritch_mobs.dmi'
+ delusion_icon_state = "moon_mass"
+ delusion_name = "moon"
+ duration = 15 SECONDS
+ affects_others = TRUE
+ random_hallucination_weight = 0
+
+// Hallucination used by heretic paintings
+/datum/hallucination/delusion/preset/heretic
+ random_hallucination_weight = 0
+ dynamic_icon = TRUE
+ delusion_name = "Heretic"
+ affects_others = TRUE
+ affects_us = FALSE
+ duration = 11 SECONDS
+
+/datum/hallucination/delusion/preset/heretic/make_delusion_image(mob/over_who)
+ delusion_icon_file = getFlatIcon(get_dynamic_human_appearance(/datum/outfit/heretic_hallucination, r_hand = NO_REPLACE))
+ return ..()
+
+/datum/hallucination/delusion/preset/heretic/gate
+ delusion_name = "Mind Gate"
+ duration = 60 SECONDS
+ affects_us = TRUE
+
diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm
index 511ad4bdeb5..c346d1b31d0 100644
--- a/code/modules/holodeck/computer.dm
+++ b/code/modules/holodeck/computer.dm
@@ -286,6 +286,7 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf
RegisterSignal(holo_effect_product, COMSIG_QDELETING, PROC_REF(remove_from_holo_lists))
if(islist(holo_effect_product))
for(var/atom/atom_product as anything in holo_effect_product)
+ spawned += atom_product
RegisterSignal(atom_product, COMSIG_QDELETING, PROC_REF(remove_from_holo_lists))
return
@@ -325,6 +326,8 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf
UnregisterSignal(holo_atom, COMSIG_QDELETING)
var/turf/target_turf = get_turf(holo_atom)
for(var/atom/movable/atom_contents as anything in holo_atom) //make sure that things inside of a holoitem are moved outside before destroying it
+ if(atom_contents.flags_1 & HOLOGRAM_1) //hologram in hologram is fine
+ continue
atom_contents.forceMove(target_turf)
if(istype(holo_atom, /obj/item/clothing/under))
diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm
index 8bc02a011c4..1bbedefb2e0 100644
--- a/code/modules/holodeck/holo_effect.dm
+++ b/code/modules/holodeck/holo_effect.dm
@@ -105,6 +105,13 @@
/obj/effect/holodeck_effect/mobspawner/monkey
mobtype = /mob/living/carbon/human/species/monkey/holodeck
+/obj/effect/holodeck_effect/mobspawner/monkey/activate(obj/machinery/computer/holodeck/computer)
+ var/mob/living/carbon/human/monkey = ..()
+ . = list() + monkey
+
+ for(var/atom/atom as anything in monkey.contents + monkey.organs)
+ . += atom
+
/obj/effect/holodeck_effect/mobspawner/penguin
mobtype = /mob/living/basic/pet/penguin/emperor/neuter
diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm
index 4ac0e396b9d..bffeb459cd4 100644
--- a/code/modules/hydroponics/grown/cannabis.dm
+++ b/code/modules/hydroponics/grown/cannabis.dm
@@ -20,7 +20,7 @@
/obj/item/seeds/cannabis/white,
/obj/item/seeds/cannabis/ultimate,
)
- reagents_add = list(/datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS - axed lipolicide, replaced space drugs with thc
+ reagents_add = list(/datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS - axed lipolicide, replaced space drugs with thc
/obj/item/seeds/cannabis/rainbow
@@ -44,7 +44,7 @@
plantname = "Deathweed"
product = /obj/item/food/grown/cannabis/death
mutatelist = null
- reagents_add = list(/datum/reagent/toxin/cyanide = 0.35, /datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS
+ reagents_add = list(/datum/reagent/toxin/cyanide = 0.35, /datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS
rarity = 40
/obj/item/seeds/cannabis/white
@@ -57,7 +57,7 @@
instability = 30
product = /obj/item/food/grown/cannabis/white
mutatelist = null
- reagents_add = list(/datum/reagent/medicine/omnizine = 0.35, /datum/reagent/drug/thc = 0.15) //SKYRAT EDIT - MORENARCOTICS
+ reagents_add = list(/datum/reagent/medicine/omnizine = 0.35, /datum/reagent/drug/thc = 0.15) //NOVA EDIT - MORENARCOTICS
rarity = 40
@@ -72,7 +72,7 @@
product = /obj/item/food/grown/cannabis/ultimate
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green, /datum/plant_gene/trait/modified_volume/omega_weed)
mutatelist = null
- reagents_add = list(/datum/reagent/drug/thc = 0.3, //SKYRAT EDIT - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3,
+ reagents_add = list(/datum/reagent/drug/thc = 0.3, //NOVA EDIT - MORE NARCOTICS - ORIGINAL: reagents_add = list(/datum/reagent/drug/cannabis = 0.3,
/datum/reagent/toxin/mindbreaker = 0.3,
/datum/reagent/mercury = 0.15,
/datum/reagent/lithium = 0.15,
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index c1fd02bf9f0..6e999568f3f 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -197,7 +197,7 @@
if(!features["mcolor"])
features["mcolor"] = "#59CE00"
/*if(!features["pod_hair"])
- features["pod_hair"] = pick(GLOB.pod_hair_list)*/ //SKYRAT EDIT - Tricolor Pod Hair
+ features["pod_hair"] = pick(GLOB.pod_hair_list)*/ //NOVA EDIT - Tricolor Pod Hair
for(var/V in quirks)
new V(podman)
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 046e835c50c..1b95c69b7ae 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -146,7 +146,7 @@
build_stab_overlay()
/obj/structure/punji_sticks/proc/build_stab_overlay()
- stab_overlay = mutable_appearance(icon, "[icon_state]_stab", layer = ABOVE_MOB_LAYER, offset_spokesman = src, plane = GAME_PLANE_FOV_HIDDEN)
+ stab_overlay = mutable_appearance(icon, "[icon_state]_stab", layer = ABOVE_MOB_LAYER)
/obj/structure/punji_sticks/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents)
. = ..()
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
index fb16d8428c9..4d7278eb9e4 100644
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ b/code/modules/hydroponics/hydroitemdefines.dm
@@ -1,5 +1,5 @@
// Plant analyzer
-/obj/item/plant_analyzer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/plant_analyzer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "plant analyzer"
desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits. Comes with a growth scanning mode and a chemical scanning mode."
icon = 'icons/obj/devices/scanner.dmi'
@@ -504,7 +504,7 @@
resistance_flags = FLAMMABLE
flags_1 = NONE
-/* Skyrat Edit Start - Modularization and New Scythes
+/* NOVA EDIT Start - Modularization and New Scythes
/obj/item/scythe
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
diff --git a/code/modules/interview/interview_manager.dm b/code/modules/interview/interview_manager.dm
index 4832e51f341..b5d39961b58 100644
--- a/code/modules/interview/interview_manager.dm
+++ b/code/modules/interview/interview_manager.dm
@@ -18,7 +18,7 @@ GLOBAL_DATUM_INIT(interviews, /datum/interview_manager, new)
/// Ckeys which are currently in the cooldown system, they will be unable to create new interviews
var/list/cooldown_ckeys = list()
-/datum/interview_manager/Destroy(force, ...)
+/datum/interview_manager/Destroy(force)
QDEL_LIST(open_interviews)
QDEL_LIST(interview_queue)
QDEL_LIST(closed_interviews)
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index b60623526ba..ce3f55da9b5 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -138,10 +138,10 @@
/datum/job/New()
. = ..()
- // SKYRAT EDIT START
+ // NOVA EDIT START
if(!job_spawn_title)
job_spawn_title = title
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/new_spawn_positions = CHECK_MAP_JOB_CHANGE(title, "spawn_positions")
if(isnum(new_spawn_positions))
spawn_positions = new_spawn_positions
@@ -180,9 +180,9 @@
/// Announce that this job as joined the round to all crew members.
/// Note the joining mob has no client at this point.
-/datum/job/proc/announce_job(mob/living/joining_mob, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob)
+/datum/job/proc/announce_job(mob/living/joining_mob, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob)
if(head_announce)
- announce_head(joining_mob, head_announce, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: announce_head(joining_mob, head_announce)
+ announce_head(joining_mob, head_announce, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: announce_head(joining_mob, head_announce)
//Used for a special check of whether to allow a client to latejoin as this job.
@@ -195,38 +195,38 @@
#define VERY_LATE_ARRIVAL_TOAST_PROB 20
-/mob/living/carbon/human/on_job_equipping(datum/job/equipping, datum/preferences/used_pref, client/player_client) //SKYRAT EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/on_job_equipping(datum/job/equipping)
+/mob/living/carbon/human/on_job_equipping(datum/job/equipping, datum/preferences/used_pref, client/player_client) //NOVA EDIT CHANGE - ORIGINAL: /mob/living/carbon/human/on_job_equipping(datum/job/equipping)
var/datum/bank_account/bank_account = new(real_name, equipping, dna.species.payday_modifier)
bank_account.payday(STARTING_PAYCHECKS, TRUE)
account_id = bank_account.account_id
bank_account.replaceable = FALSE
add_mob_memory(/datum/memory/key/account, remembered_id = account_id)
- dress_up_as_job(equipping, FALSE, used_pref) //SKYRAT EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping)
+ dress_up_as_job(equipping, FALSE, used_pref) //NOVA EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping)
if(EMERGENCY_PAST_POINT_OF_NO_RETURN && prob(VERY_LATE_ARRIVAL_TOAST_PROB))
- //equipping.equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) // SKYRAT EDIT REMOVAL - See below
- // SKYRAT EDIT ADDITION - Lizards
+ //equipping.equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) // NOVA EDIT REMOVAL - See below
+ // NOVA EDIT ADDITION - Lizards
if(islizard(equipping))
equip_to_slot_or_del(new /obj/item/food/breadslice/root(equipping), ITEM_SLOT_MASK)
else
equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK)
- // SKYRAT EDIT ADDITION END - Lizards
+ // NOVA EDIT ADDITION END - Lizards
#undef VERY_LATE_ARRIVAL_TOAST_PROB
/mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE)
return
-/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //SKYRAT EDIT CHANGE
+/mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //NOVA EDIT CHANGE
dna.species.pre_equip_species_outfit(equipping, src, visual_only)
- equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //SKYRAT EDIT CHANGE
+ equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //NOVA EDIT CHANGE
/// tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
-/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels)
+/datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels)
if(H && GLOB.announcement_systems.len)
//timer because these should come after the captain announcement
- SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, job_title, channels), 1)) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1))
+ SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, job_title, channels), 1)) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1))
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/job/proc/player_old_enough(client/player)
@@ -284,21 +284,21 @@
return TRUE
/// Gets the message that shows up when spawning as this job
-/datum/job/proc/get_spawn_message(alt_title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message()
+/datum/job/proc/get_spawn_message(alt_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message()
SHOULD_NOT_OVERRIDE(TRUE)
- return examine_block(span_infoplain(jointext(get_spawn_message_information(alt_title), "\n• "))) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLED - ORIGINAL: return examine_block(span_infoplain(jointext(get_spawn_message_information(), "\n• ")))
+ return examine_block(span_infoplain(jointext(get_spawn_message_information(alt_title), "\n• "))) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLED - ORIGINAL: return examine_block(span_infoplain(jointext(get_spawn_message_information(), "\n• ")))
/// Returns a list of strings that correspond to chat messages sent to this mob when they join the round.
-/datum/job/proc/get_spawn_message_information(alt_title = title) // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message_information()
+/datum/job/proc/get_spawn_message_information(alt_title = title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: /datum/job/proc/get_spawn_message_information()
SHOULD_CALL_PARENT(TRUE)
var/list/info = list()
- info += "You are the [alt_title]. \n" // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "You are the [title]. \n"
+ info += "You are the [alt_title]. \n" // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "You are the [title]. \n"
var/related_policy = get_policy(title)
var/radio_info = get_radio_information()
if(related_policy)
info += related_policy
if(supervisors)
- info += "As the [alt_title == title ? alt_title : "[alt_title] ([title])"] you answer directly to [supervisors]. Special circumstances may change this." // SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "As the [title] you answer directly to [supervisors]. Special circumstances may change this."
+ info += "As the [alt_title == title ? alt_title : "[alt_title] ([title])"] you answer directly to [supervisors]. Special circumstances may change this." // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - ORIGINAL: info += "As the [title] you answer directly to [supervisors]. Special circumstances may change this."
if(radio_info)
info += radio_info
if(req_admin_notify)
@@ -308,11 +308,11 @@
info += span_boldnotice("As this station was initially staffed with a \
[CONFIG_GET(flag/jobs_have_minimal_access) ? "full crew, only your job's necessities" : "skeleton crew, additional access may"] \
have been added to your ID card.")
- //SKYRAT EDIT ADDITION START - ALTERNATIVE_JOB_TITLES
+ //NOVA EDIT ADDITION START - ALTERNATIVE_JOB_TITLES
if(alt_title != title)
info += span_warning("Remember that alternate titles are purely for flavor and roleplay.")
info += span_doyourjobidiot("Do not use your \"[alt_title]\" alt title as an excuse to forego your duties as a [title].")
- //SKYRAT EDIT END
+ //NOVA EDIT END
return info
@@ -359,7 +359,7 @@
if(DSATCHEL)
back = satchel //Department satchel
if(DMESSENGER)
- back = messenger //SKYRAT EDIT - Messenger Bags
+ back = messenger //NOVA EDIT - Messenger Bags
if(DDUFFELBAG)
back = duffelbag //Department duffel bag
if(DMESSENGER)
@@ -473,10 +473,10 @@
return hangover_spawn_point || get_latejoin_spawn_point()
/* if(length(GLOB.jobspawn_overrides[title]))
return pick(GLOB.jobspawn_overrides[title]) */ // ORIGINAL CODE
- // SKYRAT EDIT START - Alt job titles
+ // NOVA EDIT START - Alt job titles
if(length(GLOB.jobspawn_overrides[job_spawn_title]))
return pick(GLOB.jobspawn_overrides[job_spawn_title])
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/obj/effect/landmark/start/spawn_point = get_default_roundstart_spawn_point()
if(!spawn_point) //if there isn't a spawnpoint send them to latejoin, if there's no latejoin go yell at your mapper
return get_latejoin_spawn_point()
@@ -486,7 +486,7 @@
/// Handles finding and picking a valid roundstart effect landmark spawn point, in case no uncommon different spawning events occur.
/datum/job/proc/get_default_roundstart_spawn_point()
for(var/obj/effect/landmark/start/spawn_point as anything in GLOB.start_landmarks_list)
- if(spawn_point.name != job_spawn_title) // SKYRAT EDIT - Alt job titles - ORIGINAL: if(spawn_point.name != title)
+ if(spawn_point.name != job_spawn_title) // NOVA EDIT - Alt job titles - ORIGINAL: if(spawn_point.name != title)
continue
. = spawn_point
if(spawn_point.used) //so we can revert to spawning them on top of eachother if something goes wrong
@@ -500,10 +500,10 @@
/datum/job/proc/get_latejoin_spawn_point()
/* if(length(GLOB.jobspawn_overrides[title]))
return pick(GLOB.jobspawn_overrides[title]) */ // ORIGINAL CODE
- // SKYRAT EDIT START - Alt job titles
+ // NOVA EDIT START - Alt job titles
if(length(GLOB.jobspawn_overrides[job_spawn_title])) //We're doing something special today.
return pick(GLOB.jobspawn_overrides[job_spawn_title])
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(length(SSjob.latejoin_trackers))
return pick(SSjob.latejoin_trackers)
return SSjob.get_last_resort_spawn_points()
diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm
index 0b38d6e081d..87998485041 100644
--- a/code/modules/jobs/job_types/ai.dm
+++ b/code/modules/jobs/job_types/ai.dm
@@ -35,7 +35,7 @@
*/ //SKYRAT REMOVAL END
var/mob/living/silicon/ai/ai_spawn = spawned
ai_spawn.log_current_laws()
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
for(var/mob/living/silicon/robot/sync_target in GLOB.silicon_mobs)
if(!(sync_target.z in SSmapping.levels_by_trait(ZTRAIT_STATION)) || (sync_target.z in SSmapping.levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND))) // Skip ghost cafe, interlink, and other cyborgs.
continue
@@ -56,7 +56,7 @@
sync_target.lawsync()
sync_target.lawupdate = TRUE
sync_target.show_laws()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/datum/job/ai/get_roundstart_spawn_point()
diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm
index 89e7d04742c..0fb5f6fec90 100644
--- a/code/modules/jobs/job_types/assistant.dm
+++ b/code/modules/jobs/job_types/assistant.dm
@@ -37,13 +37,13 @@ Assistant
rpg_title = "Lout"
config_tag = "ASSISTANT"
- allow_bureaucratic_error = FALSE // SKYRAT EDIT ADDITION
+ allow_bureaucratic_error = FALSE // NOVA EDIT ADDITION
/datum/outfit/job/assistant
name = JOB_ASSISTANT
jobtype = /datum/job/assistant
id_trim = /datum/id_trim/job/assistant
- uniform = /obj/item/clothing/under/color/random // SKYRAT EDIT ADD
+ uniform = /obj/item/clothing/under/color/random // NOVA EDIT ADD
belt = /obj/item/modular_computer/pda/assistant
/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target)
@@ -66,10 +66,10 @@ Assistant
var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1
- // SKYRAT EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item)
+ // NOVA EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item)
if(modified_outfit_slots & ITEM_SLOT_ICLOTHING)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
//We don't cache these, because they can delete on init
//Too fragile, better to just eat the cost
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index d8ae6d335b3..954ec3f1726 100755
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -21,7 +21,7 @@
plasmaman_outfit = /datum/outfit/plasmaman/captain
paycheck = PAYCHECK_COMMAND
- paycheck_department = ACCOUNT_CMD // SKYRAT EDIT - Original: paycheck_department = ACCOUNT_SEC
+ paycheck_department = ACCOUNT_CMD // NOVA EDIT - Original: paycheck_department = ACCOUNT_SEC
liver_traits = list(TRAIT_ROYAL_METABOLISM)
diff --git a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
index 3e752910a29..6832e3d66d4 100644
--- a/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
+++ b/code/modules/jobs/job_types/chaplain/chaplain_vorpal_scythe.dm
@@ -139,7 +139,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and
var/death_knell_speed_mod = 1
- potential_reaping.visible_message(span_danger("[user] begins to raise [src] arove [potential_reaping]'s [head_name]."), span_userdanger("[user] begins to raise [src], aiming to slice off your [head_name]!"))
+ potential_reaping.visible_message(span_danger("[user] begins to raise [src] above [potential_reaping]'s [head_name]."), span_userdanger("[user] begins to raise [src], aiming to slice off your [head_name]!"))
if(potential_reaping.stat >= UNCONSCIOUS || HAS_TRAIT(potential_reaping, TRAIT_INCAPACITATED)) //if the victim is incapacitated (due to paralysis, a stun, being in staminacrit, etc.), critted, unconscious, or dead, it's much easier to properly behead
death_knell_speed_mod *= 0.5
if(potential_reaping.stat != DEAD && potential_reaping.has_status_effect(/datum/status_effect/jitter)) //jittering will make it harder to perform the death knell, even if they're still
@@ -149,6 +149,8 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and
if(ispodperson(potential_reaping) || ismonkey(potential_reaping)) //And if they're a podperson or monkey, they can just die.
death_knell_speed_mod *= 0.5
+ log_combat(user, potential_reaping, "prepared to use [src] to decapitate")
+
if(do_after(user, 15 SECONDS * death_knell_speed_mod, target = potential_reaping))
playsound(get_turf(potential_reaping), 'sound/weapons/bladeslice.ogg', 250, TRUE)
reaped_head.dismember()
@@ -165,6 +167,7 @@ If the scythe isn't empowered when you sheath it, you take a heap of damage and
)
scythe_empowerment(potential_empowerment)
+ log_combat(user, potential_reaping, "used [src] to decapitate")
if(HAS_MIND_TRAIT(user, TRAIT_MORBID)) //You feel good about yourself, pal?
user.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment)
diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm
index a3172c44407..c6dad4a3c9c 100644
--- a/code/modules/jobs/job_types/curator.dm
+++ b/code/modules/jobs/job_types/curator.dm
@@ -45,7 +45,7 @@
backpack_contents = list(
/obj/item/barcodescanner = 1,
/obj/item/choice_beacon/hero = 1,
- /obj/item/glassblowing/magnifying_glass, //SKYRAT EDIT: Magnifying Glass
+ /obj/item/glassblowing/magnifying_glass, //NOVA EDIT: Magnifying Glass
)
belt = /obj/item/modular_computer/pda/curator
ears = /obj/item/radio/headset/headset_srv
diff --git a/code/modules/jobs/job_types/cyborg.dm b/code/modules/jobs/job_types/cyborg.dm
index 92094073033..6f7e105b135 100644
--- a/code/modules/jobs/job_types/cyborg.dm
+++ b/code/modules/jobs/job_types/cyborg.dm
@@ -3,7 +3,7 @@
description = "Assist the crew, follow your laws, obey your AI."
auto_deadmin_role_flags = DEADMIN_POSITION_SILICON
faction = FACTION_STATION
- total_positions = 3 // SKYRAT EDIT: Original value (0)
+ total_positions = 3 // NOVA EDIT: Original value (0)
spawn_positions = 3
supervisors = "your laws and the AI" //Nodrak
spawn_type = /mob/living/silicon/robot
@@ -29,7 +29,7 @@
spawned.gender = NEUTER
var/mob/living/silicon/robot/robot_spawn = spawned
robot_spawn.notify_ai(AI_NOTIFICATION_NEW_BORG)
- //SKYRAT EDIT START
+ //NOVA EDIT START
var/list/malf_ais = list()
var/list/regular_ais = list()
for(var/mob/living/silicon/ai/ai_possible as anything in GLOB.ai_list)
@@ -54,7 +54,7 @@
robot_spawn.lawsync()
robot_spawn.lawupdate = TRUE
robot_spawn.show_laws()
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!robot_spawn.connected_ai) // Only log if there's no Master AI
robot_spawn.log_current_laws()
diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm
index 15ac668473e..e544935819a 100644
--- a/code/modules/jobs/job_types/detective.dm
+++ b/code/modules/jobs/job_types/detective.dm
@@ -57,14 +57,14 @@
/obj/item/melee/baton = 1,
/obj/item/storage/box/evidence = 1,
)
- belt = /obj/item/storage/belt/holster/detective/full // SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/modular_computer/pda/detective
+ belt = /obj/item/storage/belt/holster/detective/full // NOVA EDIT CHANGE - ORIGINAL: /obj/item/modular_computer/pda/detective
ears = /obj/item/radio/headset/headset_sec/alt
gloves = /obj/item/clothing/gloves/color/black
head = /obj/item/clothing/head/fedora/det_hat
mask = /obj/item/clothing/mask/cigarette
neck = /obj/item/clothing/neck/tie/detective
shoes = /obj/item/clothing/shoes/sneakers/brown
- l_pocket = /obj/item/modular_computer/pda/detective // SKYRAT EDIT CHANGE - ORIGINAL: /obj/item/toy/crayon/white
+ l_pocket = /obj/item/modular_computer/pda/detective // NOVA EDIT CHANGE - ORIGINAL: /obj/item/toy/crayon/white
r_pocket = /obj/item/lighter
chameleon_extras = list(
diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm
index 5fa3fcaa948..825add17d89 100644
--- a/code/modules/jobs/job_types/head_of_security.dm
+++ b/code/modules/jobs/job_types/head_of_security.dm
@@ -58,7 +58,7 @@
belt = /obj/item/modular_computer/pda/heads/hos
ears = /obj/item/radio/headset/heads/hos/alt
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
- gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
+ gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
head = /obj/item/clothing/head/hats/hos/beret
shoes = /obj/item/clothing/shoes/jackboots/sec
l_pocket = /obj/item/restraints/handcuffs
diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm
index 3719095f8d1..e1c71b6c545 100644
--- a/code/modules/jobs/job_types/janitor.dm
+++ b/code/modules/jobs/job_types/janitor.dm
@@ -48,14 +48,14 @@
backpack_contents += list(/obj/item/gun/ballistic/revolver)
r_pocket = /obj/item/ammo_box/a357
-//SKYRAT EDIT REMOVAL BEGIN - JANITOR KEY - (Moved to modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm)
+//NOVA EDIT REMOVAL BEGIN - JANITOR KEY - (Moved to modular_nova/master_files/code/modules/jobs/job_types/janitor.dm)
/*
var/static/access_key_given = FALSE
if(!access_key_given && !visuals_only)
access_key_given = TRUE
backpack_contents += list(/obj/item/access_key)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/outfit/job/janitor/get_types_to_preload()
. = ..()
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index cf4c9f65910..8a58dc233a7 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -3,7 +3,7 @@
description = "Keep yourself occupied in permabrig."
department_head = list("The Security Team")
faction = FACTION_STATION
- total_positions = 12 // SKYRAT EDIT: Original value (0)
+ total_positions = 12 // NOVA EDIT: Original value (0)
spawn_positions = 2
supervisors = "the security team"
exp_granted_type = EXP_TYPE_CREW
@@ -14,7 +14,7 @@
plasmaman_outfit = /datum/outfit/plasmaman/prisoner
display_order = JOB_DISPLAY_ORDER_PRISONER
- department_for_prefs = /datum/job_department/assistant // SKYRAT EDIT - ORIGINAL: /datum/job_department/security
+ department_for_prefs = /datum/job_department/assistant // NOVA EDIT - ORIGINAL: /datum/job_department/security
exclusive_mail_goodies = TRUE
mail_goodies = list (
diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm
index ae71ba04e0f..18f0229d78f 100644
--- a/code/modules/jobs/job_types/security_officer.dm
+++ b/code/modules/jobs/job_types/security_officer.dm
@@ -5,8 +5,8 @@
auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY
department_head = list(JOB_HEAD_OF_SECURITY)
faction = FACTION_STATION
- total_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SET TO 8, WAS 5
- spawn_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //SKYRAT EDIT: SEE ABOVE
+ total_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //NOVA EDIT: SET TO 8, WAS 5
+ spawn_positions = 8 //Handled in /datum/controller/occupations/proc/setup_officer_positions() //NOVA EDIT: SEE ABOVE
supervisors = "the Head of Security, and the head of your assigned department (if applicable)"
minimal_player_age = 7
exp_requirements = 300
@@ -28,7 +28,7 @@
/datum/job_department/security,
)
- family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec/peacekeeper) //SKYRAT EDIT ADD - /peacekeeper
+ family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec/peacekeeper) //NOVA EDIT ADD - /peacekeeper
mail_goodies = list(
/obj/item/food/donut/caramel = 10,
@@ -54,24 +54,24 @@ GLOBAL_LIST_EMPTY(security_officer_distribution)
/datum/job/security_officer/after_roundstart_spawn(mob/living/spawning, client/player_client)
. = ..()
- //SKYRAT EDIT REMOVAL
+ //NOVA EDIT REMOVAL
/*
if(ishuman(spawning))
setup_department(spawning, player_client)
*/
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/job/security_officer/after_latejoin_spawn(mob/living/spawning)
. = ..()
- //SKYRAT EDIT REMOVAL
+ //NOVA EDIT REMOVAL
/*
if(ishuman(spawning))
var/department = setup_department(spawning, spawning.client)
if(department)
announce_latejoin(spawning, department, GLOB.security_officer_distribution)
*/
- //SKYRAT EDIT END
+ //NOVA EDIT END
/// Returns the department this mob was assigned to, if any.
@@ -214,8 +214,8 @@ GLOBAL_LIST_EMPTY(security_officer_distribution)
)
belt = /obj/item/modular_computer/pda/security
ears = /obj/item/radio/headset/headset_sec/alt
- gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/security_garrison //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/head/helmet/sec
+ gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/security_garrison //NOVA EDIT CHANGE - Original: /obj/item/clothing/head/helmet/sec
shoes = /obj/item/clothing/shoes/jackboots/sec
l_pocket = /obj/item/restraints/handcuffs
r_pocket = /obj/item/assembly/flash/handheld
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index b3a31a132e8..83fb669b387 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -41,7 +41,7 @@
/obj/item/mining_voucher = 1,
/obj/item/suit_voucher = 1,
/obj/item/stack/marker_beacon/ten = 1,
- ) //SKYRAT EDIT: Suit_Voucher is an addition, one line up
+ ) //NOVA EDIT: Suit_Voucher is an addition, one line up
belt = /obj/item/modular_computer/pda/shaftminer
ears = /obj/item/radio/headset/headset_cargo/mining
gloves = /obj/item/clothing/gloves/color/black
diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm
index a671e0fdadf..b4db8d50d6f 100644
--- a/code/modules/jobs/job_types/warden.dm
+++ b/code/modules/jobs/job_types/warden.dm
@@ -47,7 +47,7 @@
id_trim = /datum/id_trim/job/warden
uniform = /obj/item/clothing/under/rank/security/warden
- suit = /obj/item/clothing/suit/armor/vest/warden //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/suit/armor/vest/warden/alt
+ suit = /obj/item/clothing/suit/armor/vest/warden //NOVA EDIT CHANGE - Original: /obj/item/clothing/suit/armor/vest/warden/alt
suit_store = /obj/item/gun/energy/disabler
backpack_contents = list(
/obj/item/evidencebag = 1,
@@ -55,8 +55,8 @@
belt = /obj/item/modular_computer/pda/warden
ears = /obj/item/radio/headset/headset_sec/alt
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
- gloves = /obj/item/clothing/gloves/color/black/security //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
- head = /obj/item/clothing/head/hats/warden //SKYRAT EDIT CHANGE - Original: /obj/item/clothing/head/hats/warden/red
+ gloves = /obj/item/clothing/gloves/color/black/security //NOVA EDIT CHANGE - Original: /obj/item/clothing/gloves/color/black
+ head = /obj/item/clothing/head/hats/warden //NOVA EDIT CHANGE - Original: /obj/item/clothing/head/hats/warden/red
shoes = /obj/item/clothing/shoes/jackboots/sec
l_pocket = /obj/item/restraints/handcuffs
r_pocket = /obj/item/assembly/flash/handheld
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index d3b6bc3ebbb..b1396b26945 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -25,13 +25,13 @@ GLOBAL_LIST_INIT(exp_specialmap, list(
ROLE_SYNDICATE_DRONE,
ROLE_VENUSHUMANTRAP,
ROLE_GHOST_ROLE,
- //Skyrat Edit Start - Custom Ghost roles
+ //NOVA EDIT Start - Custom Ghost roles
ROLE_BLACK_MARKET_DEALER,
ROLE_DS2,
ROLE_FREIGHTER_CREW,
ROLE_GHOST_CAFE,
ROLE_PORT_TARKON,
- //Skyrat Edit Start - End Custom Ghost roles
+ //NOVA EDIT Start - End Custom Ghost roles
), // Ghost roles
EXP_TYPE_GHOST = list() // dead people, observers
))
diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm
index 6c446f1dae6..3e2c4e14d02 100644
--- a/code/modules/language/language.dm
+++ b/code/modules/language/language.dm
@@ -20,10 +20,10 @@
// if you are seeing someone speak popcorn language, then something is wrong.
var/icon = 'icons/misc/language.dmi'
var/icon_state = "popcorn"
- //SKYRAT EDIT
+ //NOVA EDIT
/// Should this be hidden on the language buy menu?
var/secret = FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/language/proc/display_icon(atom/movable/hearer)
var/understands = hearer.has_language(src.type)
diff --git a/code/modules/language/nekomimetic.dm b/code/modules/language/nekomimetic.dm
index 190dc7b2af0..8b54713900d 100644
--- a/code/modules/language/nekomimetic.dm
+++ b/code/modules/language/nekomimetic.dm
@@ -6,7 +6,7 @@
syllables = list(
"neko", "nyan", "mimi", "moe", "mofu", "fuwa", "kyaa", "kawaii", "poka", "munya",
"puni", "munyu", "ufufu", "uhuhu", "icha", "doki", "kyun", "kusu", "nya", "nyaa",
- "desu", "kis", "ama", "chuu", "baka", "hewo", "boop", "gatto", "kit", "sune", "yori", //SKYRAT EDIT gatto
+ "desu", "kis", "ama", "chuu", "baka", "hewo", "boop", "gatto", "kit", "sune", "yori", //NOVA EDIT gatto
"sou", "baka", "chan", "san", "kun", "mahou", "yatta", "suki", "usagi", "domo", "ori",
"uwa", "zaazaa", "shiku", "puru", "ira", "heto", "etto"
)
diff --git a/code/modules/mafia/abilities/abilities.dm b/code/modules/mafia/abilities/abilities.dm
index 3c8e643a427..deba0f670ff 100644
--- a/code/modules/mafia/abilities/abilities.dm
+++ b/code/modules/mafia/abilities/abilities.dm
@@ -24,7 +24,7 @@
RegisterSignal(game, action_priority, PROC_REF(perform_action_target))
RegisterSignal(game, COMSIG_MAFIA_NIGHT_END, PROC_REF(clean_action_refs))
-/datum/mafia_ability/Destroy(force, ...)
+/datum/mafia_ability/Destroy(force)
host_role = null
target_role = null
return ..()
diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm
index 007e0b5e456..f6b46c3430d 100644
--- a/code/modules/mafia/controller.dm
+++ b/code/modules/mafia/controller.dm
@@ -104,7 +104,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment())
GLOB.mafia_game = src
map_deleter = new
-/datum/mafia_controller/Destroy(force, ...)
+/datum/mafia_controller/Destroy(force)
. = ..()
end_game()
player_role_lookup.Cut()
diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm
index f301a8ac02a..ab1a1cc0e45 100644
--- a/code/modules/mafia/roles/roles.dm
+++ b/code/modules/mafia/roles/roles.dm
@@ -57,7 +57,7 @@
role_unique_actions += new abilities(game, src)
role_unique_actions -= abilities
-/datum/mafia_role/Destroy(force, ...)
+/datum/mafia_role/Destroy(force)
UnregisterSignal(body, COMSIG_MOB_SAY)
QDEL_NULL(mafia_alert)
QDEL_NULL(mafia_panel)
diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
index f0368ba8c74..1b4f5644235 100644
--- a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
+++ b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm
@@ -14,7 +14,7 @@
baseturfs = /turf/open/water/cursed_spring
planetary_atmos = TRUE
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/turf/open/water/cursed_spring/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
. = ..()
if(!isliving(arrived))
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm
index 75ac48c2467..f3b321b88b2 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/watcher_grave.dm
@@ -143,7 +143,6 @@
icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
icon_state = "watcher_baby"
layer = EDGED_TURF_LAYER // Don't render under lightbulbs
- plane = GAME_PLANE_UPPER
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
pixel_y = 22
alpha = 0
diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
index af694619898..c8b491e5301 100644
--- a/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
+++ b/code/modules/mapfluff/ruins/objects_and_mobs/ash_walker_den.dm
@@ -94,7 +94,7 @@
L.add_mood_event("oogabooga", /datum/mood_event/sacrifice_bad)
ashies.sacrifices_made++
-// SKYRAT EDIT ADDITION - PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT
+// NOVA EDIT ADDITION - PLEASE VIEW SKYRAT ASHWALKER MODULE FOR REPLACEMENT
/obj/structure/lavaland/ash_walker/proc/remake_walker(mob/living/carbon/oldmob)
var/mob/living/carbon/human/newwalker = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs)))
newwalker.set_species(/datum/species/lizard/ashwalker)
diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
index f2734bb7b05..6ce6056b477 100644
--- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
+++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
@@ -81,7 +81,6 @@
icon = 'icons/effects/96x96.dmi'
icon_state = "gate_blocker"
layer = EDGED_TURF_LAYER
- plane = GAME_PLANE_UPPER
pixel_x = -32
pixel_y = -32
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
index 1e39d248f50..3834b957ea7 100644
--- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
+++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
@@ -8,12 +8,12 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
icon_state = "hilbertshotel"
w_class = WEIGHT_CLASS_SMALL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
- //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE
+ //NOVA EDIT ADDITION - GHOST HOTEL UPDATE
var/list/static/hotel_maps = list("Generic", "Apartment")
//standart - hilber's hotel room
//apartment - see /datum/map_template/ghost_cafe_rooms
var/datum/map_template/ghost_cafe_rooms/ghost_cafe_rooms_apartment
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/datum/map_template/hilbertshotel/hotelRoomTemp
var/datum/map_template/hilbertshotel/empty/hotelRoomTempEmpty
var/datum/map_template/hilbertshotel/lore/hotelRoomTempLore
@@ -32,9 +32,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
hotelRoomTemp = new()
hotelRoomTempEmpty = new()
hotelRoomTempLore = new()
- //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE
+ //NOVA EDIT ADDITION - GHOST HOTEL UPDATE
ghost_cafe_rooms_apartment = new()
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/area/currentArea = get_area(src)
if(currentArea.type == /area/ruin/space/has_grav/powered/hilbertresearchfacility/secretroom)
ruinSpawned = TRUE
@@ -85,8 +85,8 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
to_chat(target, span_warning("You aren't able to activate \the [src] anymore!"))
// Has the user thrown it away or otherwise disposed of it such that it's no longer in their hands or in some storage connected to them?
- // if(!(get_atom_on_turf(src, /mob) == user)) SKYRAT EDIT ORIGINAL
- if(!Adjacent(user)) // SKYRAT EDIT -- Ghost Cafe Static Hilbertspawner
+ // if(!(get_atom_on_turf(src, /mob) == user)) NOVA EDIT ORIGINAL
+ if(!Adjacent(user)) // NOVA EDIT -- Ghost Cafe Static Hilbertspawner
if(user == target)
to_chat(user, span_warning("\The [src] is no longer in your possession!"))
else
@@ -104,11 +104,11 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
else if(!user.dropItemToGround(src))
to_chat(user, span_warning("You can't seem to drop \the [src]! It must be stuck to your hand somehow! Prepare for unforeseen consequences..."))
- //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE
+ //NOVA EDIT ADDITION - GHOST HOTEL UPDATE
var/chosen_room = "Nothing"
if(istype(src, /obj/item/hilbertshotel/ghostdojo)) //to don't add another one var
chosen_room = tgui_input_list(user, "Choose desired room:", "Time to choose", hotel_maps)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!storageTurf) //Blame subsystems for not allowing this to be in Initialize
if(!GLOB.hhStorageTurf)
var/datum/map_template/hilbertshotelstorage/storageTemp = new()
@@ -122,7 +122,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
return
if(tryStoredRoom(chosenRoomNumber, target))
return
- sendToNewRoom(chosenRoomNumber, target, chosen_room) //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(chosenRoomNumber, target)
+ sendToNewRoom(chosenRoomNumber, target, chosen_room) //NOVA EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(chosenRoomNumber, target)
/obj/item/hilbertshotel/proc/tryActiveRoom(roomNumber, mob/user)
if(activeRooms["[roomNumber]"])
@@ -168,17 +168,17 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
return TRUE
return FALSE
-/obj/item/hilbertshotel/proc/sendToNewRoom(roomNumber, mob/user, chosen_room) //SKYRAT EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(roomNumber, mob/user)
+/obj/item/hilbertshotel/proc/sendToNewRoom(roomNumber, mob/user, chosen_room) //NOVA EDIT ADDITION - GHOST HOTEL UPDATE. Was sendToNewRoom(roomNumber, mob/user)
var/datum/turf_reservation/roomReservation = SSmapping.request_turf_block_reservation(hotelRoomTemp.width, hotelRoomTemp.height, 1)
var/turf/bottom_left = roomReservation.bottom_left_turfs[1]
var/datum/map_template/load_from = hotelRoomTemp
if(ruinSpawned && roomNumber == GLOB.hhMysteryRoomNumber)
load_from = hotelRoomTempLore
- //SKYRAT EDIT ADDITION START - GHOST HOTEL UPDATE
+ //NOVA EDIT ADDITION START - GHOST HOTEL UPDATE
else if(chosen_room == "Apartment")
load_from = ghost_cafe_rooms_apartment
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
load_from.load(bottom_left)
activeRooms["[roomNumber]"] = roomReservation
@@ -354,9 +354,6 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
/turf/closed/indestructible/hoteldoor/attack_larva(mob/user, list/modifiers)
promptExit(user)
-/turf/closed/indestructible/hoteldoor/attack_slime(mob/user, list/modifiers)
- promptExit(user)
-
/turf/closed/indestructible/hoteldoor/attack_robot(mob/user)
if(get_dist(get_turf(src), get_turf(user)) <= 1)
promptExit(user)
@@ -398,9 +395,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
has_gravity = TRUE
area_flags = NOTELEPORT | HIDDEN_AREA
static_lighting = TRUE
- /* SKYRAT EDIT REMOVAL - GHOST HOTEL UPDATE
+ /* NOVA EDIT REMOVAL - GHOST HOTEL UPDATE
ambientsounds = list('sound/ambience/servicebell.ogg')
- SKYRAT EDIT END */
+ NOVA EDIT END */
var/roomnumber = 0
var/obj/item/hilbertshotel/parentSphere
var/datum/turf_reservation/reservation
diff --git a/code/modules/mapping/verify.dm b/code/modules/mapping/verify.dm
index 60067bc5db7..c9347c7ecdb 100644
--- a/code/modules/mapping/verify.dm
+++ b/code/modules/mapping/verify.dm
@@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(map_reports)
original_path = map.original_path || "Untitled"
GLOB.map_reports += src
-/datum/map_report/Destroy(force, ...)
+/datum/map_report/Destroy(force)
GLOB.map_reports -= src
return ..()
diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm
index 62b61b89ce9..3d78d378d66 100644
--- a/code/modules/mining/equipment/mineral_scanner.dm
+++ b/code/modules/mining/equipment/mineral_scanner.dm
@@ -77,7 +77,7 @@
/obj/effect/temp_visual/mining_overlay
plane = HIGH_GAME_PLANE
layer = FLASH_LAYER
- icon = 'modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi' //SKYRAT EDIT ADDITION - XENOARCHAEOLOGY
+ icon = 'modular_nova/modules/xenoarch/icons/ore_visuals.dmi' //NOVA EDIT ADDITION - XENOARCHAEOLOGY
appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are
duration = 35
pixel_x = -224
diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm
index 699564c9ed7..61d795c764a 100644
--- a/code/modules/mining/equipment/monster_organs/monster_organ.dm
+++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm
@@ -65,7 +65,7 @@
. = ..()
decay_timer = addtimer(CALLBACK(src, PROC_REF(go_inert)), time_to_decay, TIMER_STOPPABLE)
-/obj/item/organ/internal/monster_core/Destroy(force, silent)
+/obj/item/organ/internal/monster_core/Destroy(force)
deltimer(decay_timer)
return ..()
diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm
index 0b42fd23212..006c920d4b9 100644
--- a/code/modules/mining/fulton.dm
+++ b/code/modules/mining/fulton.dm
@@ -243,3 +243,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons)
/obj/effect/extraction_holder/singularity_pull()
return
+
+/obj/item/extraction_pack/syndicate
+ name = "syndicate fulton extraction pack"
+ can_use_indoors = TRUE
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
index 59866e73aec..e693858fba5 100644
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ b/code/modules/mining/lavaland/ash_flora.dm
@@ -197,9 +197,9 @@
pixel_y = base_pixel_y + rand(-4, 4)
/obj/item/food/grown/ash_flora/shavings //So we can't craft bowls from everything.
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Botanist") //SKYRAT EDIT
- special_desc = "You feel this flora would be unwise to consume while already full." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Botanist") //NOVA EDIT
+ special_desc = "You feel this flora would be unwise to consume while already full." //NOVA EDIT
grind_results = list(/datum/reagent/toxin/mushroom_powder = 5)
/obj/item/food/grown/ash_flora/mushroom_leaf
@@ -208,9 +208,9 @@
icon_state = "mushroom_leaf"
seed = /obj/item/seeds/lavaland/porcini
wine_power = 40
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Botanist") //SKYRAT EDIT
- special_desc = "This flora is nutritious and healthy to eat, though slightly laced with nicotine." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Botanist") //NOVA EDIT
+ special_desc = "This flora is nutritious and healthy to eat, though slightly laced with nicotine." //NOVA EDIT
/obj/item/food/grown/ash_flora/mushroom_cap
name = "mushroom cap"
@@ -218,9 +218,9 @@
icon_state = "mushroom_cap"
seed = /obj/item/seeds/lavaland/inocybe
wine_power = 70
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Botanist") //SKYRAT EDIT
- special_desc = "This flora is poisonous and hallucinogenic." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Botanist") //NOVA EDIT
+ special_desc = "This flora is poisonous and hallucinogenic." //NOVA EDIT
/obj/item/food/grown/ash_flora/mushroom_stem
name = "mushroom stem"
@@ -228,9 +228,9 @@
icon_state = "mushroom_stem"
seed = /obj/item/seeds/lavaland/ember
wine_power = 60
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Botanist") //SKYRAT EDIT
- special_desc = "This flora contains psychoactive drugs and will also make you glow." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Botanist") //NOVA EDIT
+ special_desc = "This flora contains psychoactive drugs and will also make you glow." //NOVA EDIT
/obj/item/food/grown/ash_flora/cactus_fruit
name = "cactus fruit"
@@ -238,9 +238,9 @@
icon_state = "cactus_fruit"
seed = /obj/item/seeds/lavaland/cactus
wine_power = 50
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Botanist") //SKYRAT EDIT
- special_desc = "This flora is very nutritious and medicinal." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Botanist") //NOVA EDIT
+ special_desc = "This flora is very nutritious and medicinal." //NOVA EDIT
/obj/item/food/grown/ash_flora/seraka
name = "seraka cap"
diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm
index 47a334484ba..0c9822b43c9 100644
--- a/code/modules/mining/lavaland/megafauna_loot.dm
+++ b/code/modules/mining/lavaland/megafauna_loot.dm
@@ -268,7 +268,7 @@
greyscale_colors = "#4d4d4d#808080"
greyscale_config = /datum/greyscale_config/heck_suit
greyscale_config_worn = /datum/greyscale_config/heck_suit/worn
- greyscale_config_worn_digi = /datum/greyscale_config/heck_suit/worn/digi //SKYRAT EDIT ADDITION - DigiGreyscale
+ greyscale_config_worn_digi = /datum/greyscale_config/heck_suit/worn/digi //NOVA EDIT ADDITION - DigiGreyscale
flags_1 = IS_PLAYER_COLORABLE_1
/datum/armor/hooded_hostile_environment
@@ -286,7 +286,6 @@
AddElement(/datum/element/gags_recolorable)
/obj/item/clothing/suit/hooded/hostile_environment/process(seconds_per_tick)
- . = ..()
var/mob/living/carbon/wearer = loc
if(istype(wearer) && SPT_PROB(1, seconds_per_tick)) //cursed by bubblegum
if(prob(7.5))
@@ -314,7 +313,7 @@
greyscale_colors = "#4d4d4d#808080#ff3300"
greyscale_config = /datum/greyscale_config/heck_helmet
greyscale_config_worn = /datum/greyscale_config/heck_helmet/worn
- greyscale_config_worn_digi = /datum/greyscale_config/heck_helmet/worn/snouted //SKYRAT EDIT ADDITION - MuzzledGreyscale (Why does this use worn_digi)
+ greyscale_config_worn_digi = /datum/greyscale_config/heck_helmet/worn/snouted //NOVA EDIT ADDITION - MuzzledGreyscale (Why does this use worn_digi)
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/head/hooded/hostile_environment/Initialize(mapload)
@@ -730,7 +729,7 @@
return
var/mob/living/carbon/human/consumer = user
- var/random = rand(2,4) //SKYRAT EDIT - Commenting out #1 because it makes people invisible.
+ var/random = rand(2,4) //NOVA EDIT - Commenting out #1 because it makes people invisible.
switch(random)
if(1)
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 8725fee2e22..d6115ae3e9f 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -127,7 +127,7 @@
var/loot = rand(1,2)
switch(loot)
if(1)
- new /obj/item/bloodcrawl_bottle(src) //SKYRAT EDIT ORIGINAL : new /obj/item/mayhem(src)
+ new /obj/item/bloodcrawl_bottle(src) //NOVA EDIT ORIGINAL : new /obj/item/mayhem(src)
if(2)
new /obj/item/soulscythe(src)
diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm
index cca402cf133..72d89d55b69 100644
--- a/code/modules/mining/lavaland/tendril_loot.dm
+++ b/code/modules/mining/lavaland/tendril_loot.dm
@@ -566,7 +566,7 @@
var/list/name2type = list()
for(var/obj/item/organ/external/wings/functional/possible_type as anything in wing_types)
var/datum/sprite_accessory/accessory = initial(possible_type.sprite_accessory_override) //get the type
- accessory = GLOB.sprite_accessories[initial(accessory.key)][initial(accessory.name)] //SKYRAT EDIT CHANGE - ORIGINAL: accessory = GLOB.wings_list[initial(accessory.name)] //get the singleton instance
+ accessory = GLOB.sprite_accessories[initial(accessory.key)][initial(accessory.name)] //NOVA EDIT CHANGE - ORIGINAL: accessory = GLOB.wings_list[initial(accessory.name)] //get the singleton instance
var/image/img = image(icon = accessory.icon, icon_state = "m_wingsopen_[accessory.icon_state]_BEHIND") //Process the HUD elements
img.transform *= 0.5
img.pixel_x = -32
@@ -591,10 +591,10 @@
var/turf/T = get_turf(src)
var/ladder_x = T.x
var/ladder_y = T.y
- to_chat(user, span_notice("You unfold the ladder. It does some unknowable, eldritch twisting and turning in a dance of form, seeming to invert and fold into itself - before a satisfying click rings out.")) //Skyrat Edit - Attempts to explain why it sometimes just 'dissapears' on some z-levels.
+ to_chat(user, span_notice("You unfold the ladder. It does some unknowable, eldritch twisting and turning in a dance of form, seeming to invert and fold into itself - before a satisfying click rings out.")) //NOVA EDIT - Attempts to explain why it sometimes just 'dissapears' on some z-levels.
var/last_ladder = null
for(var/i in 1 to world.maxz)
- if(is_centcom_level(i) || is_reserved_level(i) || is_away_level(i) || is_spaceruins_level(i)) //Skyrat Edit: Stops Jacob's ladder from piercing problematic space ruins.
+ if(is_centcom_level(i) || is_reserved_level(i) || is_away_level(i) || is_spaceruins_level(i)) //NOVA EDIT: Stops Jacob's ladder from piercing problematic space ruins.
continue
var/turf/T2 = locate(ladder_x, ladder_y, i)
last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder)
@@ -663,7 +663,7 @@
icon_state = "berserker"
icon = 'icons/obj/clothing/suits/armor.dmi'
worn_icon = 'icons/mob/clothing/suits/armor.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi'
hoodtype = /obj/item/clothing/head/hooded/berserker
armor_type = /datum/armor/hooded_berserker
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 848ecac0fa3..f4510741968 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -159,7 +159,7 @@
/datum/component/material_container, \
allowed_materials, \
INFINITY, \
- MATCONTAINER_EXAMINE | BREAKDOWN_FLAGS_ORE_PROCESSOR, \
+ MATCONTAINER_EXAMINE, \
allowed_items = /obj/item/stack \
)
if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter])
@@ -176,11 +176,11 @@
/obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O)
if(QDELETED(O))
return
- var/material_amount = materials.get_item_material_amount(O, BREAKDOWN_FLAGS_ORE_PROCESSOR)
+ var/material_amount = materials.get_item_material_amount(O)
if(!materials.has_space(material_amount))
unload_mineral(O)
else
- materials.insert_item(O, breakdown_flags = BREAKDOWN_FLAGS_ORE_PROCESSOR)
+ materials.insert_item(O)
if(mineral_machine)
mineral_machine.updateUsrDialog()
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index 8ecbcb80074..cfa8203615e 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -52,13 +52,21 @@
if(!GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter])
GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter] = new /datum/techweb/autounlocking/smelter
stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/smelter]
- materials = AddComponent(
+
+ //mat_container_signals is for reedeming points from local storage if silo is not required
+ var/list/local_signals = null
+ if(!requires_silo)
+ local_signals = list(
+ COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/mineral/ore_redemption, local_redeem_points)
+ )
+ materials = AddComponent( \
/datum/component/remote_materials, \
mapload, \
- mat_container_flags = BREAKDOWN_FLAGS_ORM \
+ mat_container_signals = local_signals \
)
- RegisterSignal(src, COMSIG_MATCONTAINER_ITEM_CONSUMED, TYPE_PROC_REF(/obj/machinery/mineral/ore_redemption, redeem_points))
+ //for reedeming points from items inserted into ore silo
+ RegisterSignal(src, COMSIG_SILO_ITEM_CONSUMED, TYPE_PROC_REF(/obj/machinery/mineral/ore_redemption, silo_redeem_points))
/obj/machinery/mineral/ore_redemption/Destroy()
stored_research = null
@@ -71,7 +79,12 @@
. += span_notice("Alt-click to rotate the input and output direction.")
-/obj/machinery/mineral/ore_redemption/proc/redeem_points(obj/machinery/mineral/ore_redemption/machine, container, obj/item/stack/ore/gathered_ore)
+/obj/machinery/mineral/ore_redemption/proc/silo_redeem_points(obj/machinery/mineral/ore_redemption/machine, container, obj/item/stack/ore/gathered_ore)
+ SIGNAL_HANDLER
+
+ local_redeem_points(container, gathered_ore)
+
+/obj/machinery/mineral/ore_redemption/proc/local_redeem_points(container, obj/item/stack/ore/gathered_ore)
SIGNAL_HANDLER
if(istype(gathered_ore) && gathered_ore.refined_type)
@@ -160,7 +173,7 @@
if(isnull(gathered_ore.refined_type))
continue
- if(materials.mat_container.insert_item(gathered_ore, ore_multiplier, breakdown_flags = BREAKDOWN_FLAGS_ORM, context = src) <= 0)
+ if(materials.insert_item(gathered_ore, ore_multiplier) <= 0)
unload_mineral(gathered_ore) //if rejected unload
SEND_SIGNAL(src, COMSIG_ORM_COLLECTED_ORE)
@@ -293,21 +306,26 @@
var/datum/component/material_container/mat_container = materials.mat_container
switch(action)
if("Claim")
+ //requires silo but silo not in range
+ if(requires_silo && !materials.check_z_level())
+ return FALSE
+
+ //no ID
var/obj/item/card/id/user_id_card
if(isliving(usr))
var/mob/living/user = usr
user_id_card = user.get_idcard(TRUE)
- if(!materials.check_z_level() && (requires_silo || !user_id_card.registered_account.replaceable))
- return TRUE
+ if(isnull(user_id_card))
+ to_chat(usr, span_warning("No valid ID detected."))
+ return FALSE
+
+ //we have points
if(points)
- if(user_id_card)
- user_id_card.registered_account.mining_points += points
- points = 0
- else
- to_chat(usr, span_warning("No valid ID detected."))
- else
- to_chat(usr, span_warning("No points to claim."))
- return TRUE
+ user_id_card.registered_account.mining_points += points
+ points = 0
+ return TRUE
+
+ return FALSE
if("Release")
if(!mat_container)
return
diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm
index 61e340d3540..dcc85dc1c1c 100644
--- a/code/modules/mining/machine_silo.dm
+++ b/code/modules/mining/machine_silo.dm
@@ -64,7 +64,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
silo_log(context, "deposited", amount_inserted, item_inserted.name, mats_consumed)
- SEND_SIGNAL(context, COMSIG_MATCONTAINER_ITEM_CONSUMED, container, item_inserted, last_inserted_id, mats_consumed, amount_inserted)
+ SEND_SIGNAL(context, COMSIG_SILO_ITEM_CONSUMED, container, item_inserted, last_inserted_id, mats_consumed, amount_inserted)
/obj/machinery/ore_silo/proc/log_sheets_ejected(datum/component/material_container/container, obj/item/stack/sheet/sheets, atom/context)
SIGNAL_HANDLER
diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm
index 059a5014d0c..992f0513423 100644
--- a/code/modules/mob/dead/new_player/latejoin_menu.dm
+++ b/code/modules/mob/dead/new_player/latejoin_menu.dm
@@ -148,12 +148,12 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new)
tgui_alert(owner, "There is an administrative lock on entering the game for non-observers!", "Oh No!")
return TRUE
- // SKYRAT EDIT ADDITION START - Flavourtext requirement
+ // NOVA EDIT ADDITION START - Flavourtext requirement
if(CONFIG_GET(flag/min_flavor_text))
if(length_char(owner.client.prefs.read_preference(/datum/preference/text/flavor_text)) < CONFIG_GET(number/flavor_text_character_requirement))
to_chat(owner, span_notice("You need at least [CONFIG_GET(number/flavor_text_character_requirement)] characters of flavor text to join the round. You have [length_char(owner.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters."))
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
//Determines Relevent Population Cap
var/relevant_cap
diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm
index 91aa6b932e9..96139298d0c 100644
--- a/code/modules/mob/dead/new_player/login.dm
+++ b/code/modules/mob/dead/new_player/login.dm
@@ -32,11 +32,11 @@
if(GLOB.admin_notice)
to_chat(src, span_notice("Admin Notice: \n \t [GLOB.admin_notice]"))
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
var/soft_player_cap = CONFIG_GET(number/player_soft_cap)
if(soft_player_cap >= TGS_CLIENT_COUNT)
INVOKE_ASYNC(src, PROC_REF(connect_to_second_server))
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/spc = CONFIG_GET(number/soft_popcap)
if(spc && living_player_count() >= spc)
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 5c07c8c8fd4..c10c027bc3d 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -5,7 +5,7 @@
invisibility = INVISIBILITY_ABSTRACT
density = FALSE
stat = DEAD
- //hud_type = /datum/hud/new_player SKYRAT EDIT REMOVAL
+ //hud_type = /datum/hud/new_player NOVA EDIT REMOVAL
hud_possible = list()
var/ready = FALSE
@@ -74,13 +74,13 @@
if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP])
less_input_message = " - Notice: Observer freelook is currently disabled."
// Don't convert this to tgui please, it's way too important
- var/this_is_like_playing_right = alert(usr, "Are you sure you wish to observe?[less_input_message]", "Observe", "Yes", "No") //SKYRAT EDIT CHANGE
+ var/this_is_like_playing_right = alert(usr, "Are you sure you wish to observe?[less_input_message]", "Observe", "Yes", "No") //NOVA EDIT CHANGE
if(QDELETED(src) || !src.client || this_is_like_playing_right != "Yes")
ready = PLAYER_NOT_READY
- show_title_screen() // SKYRAT EDIT ADDITION
+ show_title_screen() // NOVA EDIT ADDITION
return FALSE
- hide_title_screen() // SKYRAT EDIT ADDITION - Skyrat Titlescreen
+ hide_title_screen() // NOVA EDIT ADDITION - Skyrat Titlescreen
var/mob/dead/observer/observer = new()
spawning = TRUE
@@ -121,7 +121,7 @@
return "Your account is not old enough for [jobtitle]."
if(JOB_UNAVAILABLE_SLOTFULL)
return "[jobtitle] is already filled to capacity."
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(JOB_NOT_VETERAN)
return "You need to be veteran to join as [jobtitle]."
if(JOB_UNAVAILABLE_QUIRK)
@@ -134,7 +134,7 @@
return "[jobtitle] requires you to have flavour text for your character."
if(JOB_UNAVAILABLE_AUGMENT)
return "[jobtitle] is restricted due to your selected body augments."
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(JOB_UNAVAILABLE_ANTAG_INCOMPAT)
return "[jobtitle] is not compatible with some antagonist role assigned to you."
if(JOB_UNAVAILABLE_AGE)
@@ -162,7 +162,7 @@
if(latejoin && !job.special_check_latejoin(client))
return JOB_UNAVAILABLE_GENERIC
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(!job.has_required_languages(client.prefs))
return JOB_UNAVAILABLE_LANGUAGE
if(job.has_banned_quirk(client.prefs))
@@ -171,7 +171,7 @@
return JOB_NOT_VETERAN
if(job.has_banned_species(client.prefs))
return JOB_UNAVAILABLE_SPECIES
- //SKYRAT EDIT END
+ //NOVA EDIT END
return JOB_AVAILABLE
@@ -205,7 +205,7 @@
tgui_alert(usr, "There was an unexpected error putting you into your requested job. If you cannot join with any job, you should contact an admin.")
return FALSE
- hide_title_screen()// SKYRAT EDIT ADDITION
+ hide_title_screen()// NOVA EDIT ADDITION
mind.late_joiner = TRUE
var/atom/destination = mind.assigned_role.get_latejoin_spawn_point()
if(!destination)
@@ -226,7 +226,7 @@
// If we already have a captain, are they a "Captain" rank and are we allowing multiple of them to be assigned?
if(is_captain_job(job))
is_captain = IS_FULL_CAPTAIN
- captain_sound = ANNOUNCER_DEPARTMENTAL // SKYRAT EDIT CHANGE - Announcer Sounds
+ captain_sound = ANNOUNCER_DEPARTMENTAL // NOVA EDIT CHANGE - Announcer Sounds
// If we don't have an assigned cap yet, check if this person qualifies for some from of captaincy.
else if(!SSjob.assigned_captain && ishuman(character) && SSjob.chain_of_command[rank] && !is_banned_from(ckey, list(JOB_CAPTAIN)))
is_captain = IS_ACTING_CAPTAIN
@@ -244,19 +244,19 @@
humanc = character //Let's retypecast the var to be human,
if(humanc) //These procs all expect humans
- // BEGIN SKYRAT EDIT CHANGE - ALTERNATIVE_JOB_TITLES
- var/chosen_rank = humanc.client?.prefs.alt_job_titles[rank] || rank
+ // BEGIN NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES
+ var/chosen_rank = humanc.client?.prefs.alt_job_titles?[rank] || rank
GLOB.manifest.inject(humanc, humanc.client)
if(SSshuttle.arrivals)
SSshuttle.arrivals.QueueAnnounce(humanc, chosen_rank)
else
announce_arrival(humanc, chosen_rank)
- // END SKYRAT EDIT CHANGE - customization
+ // END NOVA EDIT CHANGE - customization
AddEmploymentContract(humanc)
humanc.increment_scar_slot()
humanc.load_persistent_scars()
- SSpersistence.load_modular_persistence(humanc.get_organ_slot(ORGAN_SLOT_BRAIN)) // SKYRAT EDIT ADDITION - MODULAR_PERSISTENCE
+ SSpersistence.load_modular_persistence(humanc.get_organ_slot(ORGAN_SLOT_BRAIN)) // NOVA EDIT ADDITION - MODULAR_PERSISTENCE
if(GLOB.curse_of_madness_triggered)
give_madness(humanc, GLOB.curse_of_madness_triggered)
@@ -267,23 +267,23 @@
if(SSshuttle.emergency)
switch(SSshuttle.emergency.mode)
if(SHUTTLE_RECALL, SHUTTLE_IDLE)
- SSticker.mode.make_antag_chance(humanc)
+ SSdynamic.make_antag_chance(humanc)
if(SHUTTLE_CALL)
if(SSshuttle.emergency.timeLeft(1) > initial(SSshuttle.emergency_call_time)*0.5)
- SSticker.mode.make_antag_chance(humanc)
+ SSdynamic.make_antag_chance(humanc)
if((job.job_flags & JOB_ASSIGN_QUIRKS) && humanc && CONFIG_GET(flag/roundstart_traits))
SSquirks.AssignQuirks(humanc, humanc.client)
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(humanc)
for(var/datum/loadout_item/item as anything in loadout_list_to_datums(humanc?.client?.prefs?.loadout_list))
if (item.restricted_roles && length(item.restricted_roles) && !(job.title in item.restricted_roles))
continue
item.post_equip_item(humanc.client?.prefs, humanc)
- // SKYRAT EDIT END
+ // NOVA EDIT END
/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
//TODO: figure out a way to exclude wizards/nukeops/demons from this.
@@ -296,7 +296,7 @@
/mob/dead/new_player/proc/create_character(atom/destination)
spawning = TRUE
- hide_title_screen() // SKYRAT EDIT ADDITION - titlescreen
+ hide_title_screen() // NOVA EDIT ADDITION - titlescreen
mind.active = FALSE //we wish to transfer the key manually
var/mob/living/spawning_mob = mind.assigned_role.get_spawn_mob(client, destination)
diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm
index d1e75d0ab14..9e9a58e8032 100644
--- a/code/modules/mob/dead/new_player/preferences_setup.dm
+++ b/code/modules/mob/dead/new_player/preferences_setup.dm
@@ -93,7 +93,7 @@
highest_pref = job_preferences[job]
return preview_job
-/* SKYRAT EDIT REMOVE - MOVED TO MASTER FILES
+/* NOVA EDIT REMOVE - MOVED TO MASTER FILES
/datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin)
var/datum/job/preview_job = get_highest_priority_job()
mannequin.dna.mutant_bodyparts = list()
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index a8cb7e9eb4d..577e88a4f3b 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -334,11 +334,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!HAS_TRAIT(src, TRAIT_CORPSELOCKED)) //corpse-locked have to confirm with the alert below
ghostize(TRUE)
return TRUE
- // SKYRAT EDIT ADDITION -- Free Ghost Cafe Ghosting
+ // NOVA EDIT ADDITION -- Free Ghost Cafe Ghosting
if(HAS_TRAIT(src, TRAIT_FREE_GHOST))
ghostize(TRUE) // Can return with TRUE
return TRUE
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/response = tgui_alert(usr, "Are you sure you want to ghost? If you ghost whilst still alive you cannot re-enter your body!", "Confirm Ghost Observe", list("Ghost", "Stay in Body"))
if(response != "Ghost")
return FALSE//didn't want to ghost after-all
@@ -393,7 +393,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!mind || QDELETED(mind.current))
to_chat(src, span_warning("You have no body."))
return
- if(!can_reenter_corpse && !mind.has_antag_datum(/datum/antagonist/changeling)) //SKYRAT EDIT
+ if(!can_reenter_corpse && !mind.has_antag_datum(/datum/antagonist/changeling)) //NOVA EDIT
to_chat(src, span_warning("You cannot re-enter your body."))
return
if(mind.current.key && mind.current.key[1] != "@") //makes sure we don't accidentally kick any clients
@@ -426,13 +426,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
// Update med huds
current_mob.med_hud_set_status()
current_mob.log_message("had their player ([key_name(src)]) do-not-resuscitate / DNR", LOG_GAME, color = COLOR_GREEN, log_globally = FALSE)
- //SKYRAT EDIT ADDITION - DNR TRAIT (Technically this is just to fix ghost-DNR'ing not actually DNR'ing, but it pairs with the trait so)
+ //NOVA EDIT ADDITION - DNR TRAIT (Technically this is just to fix ghost-DNR'ing not actually DNR'ing, but it pairs with the trait so)
if(!current_mob.has_quirk(/datum/quirk/dnr))
current_mob.add_quirk(/datum/quirk/dnr)
var/datum/job/job_to_free = SSjob.GetJob(current_mob.mind.assigned_role.title)
if(job_to_free)
job_to_free.current_positions = max(0, job_to_free.current_positions - 1)
- //SKYRAT EDIT ADDITION END - DNR TRAIT
+ //NOVA EDIT ADDITION END - DNR TRAIT
log_message("has opted to do-not-resuscitate / DNR from their body ([current_mob])", LOG_GAME, color = COLOR_GREEN)
// Disassociates observer mind from the body mind
@@ -450,10 +450,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/atom/movable/screen/alert/A = throw_alert("[REF(source)]_revival", /atom/movable/screen/alert/revival)
if(A)
var/ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style)
- var/erp_ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style) //SKYRAT EDIT - ADDITION - ERP ICONS FIX
+ var/erp_ui_style = client?.prefs?.read_preference(/datum/preference/choiced/ui_style) //NOVA EDIT - ADDITION - ERP ICONS FIX
if(ui_style)
A.icon = ui_style2icon(ui_style)
- A.icon = erp_ui_style2icon(erp_ui_style) //SKYRAT EDIT - ADDITION - ERP ICONS FIX
+ A.icon = erp_ui_style2icon(erp_ui_style) //NOVA EDIT - ADDITION - ERP ICONS FIX
A.desc = message
var/old_layer = source.layer
var/old_plane = source.plane
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 4660a1b0546..139218e4572 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -544,14 +544,21 @@
..() //Don't redraw hands until we have organs for them
//GetAllContents that is reasonable and not stupid
-/mob/living/carbon/proc/get_all_gear()
+/mob/living/proc/get_all_gear()
var/list/processing_list = get_equipped_items(include_pockets = TRUE, include_accessories = TRUE) + held_items
list_clear_nulls(processing_list) // handles empty hands
var/i = 0
- while(i < length(processing_list) )
+ while(i < length(processing_list))
var/atom/A = processing_list[++i]
if(A.atom_storage)
var/list/item_stuff = list()
A.atom_storage.return_inv(item_stuff)
processing_list += item_stuff
return processing_list
+
+/// Returns a list of things that the provided mob has, including any storage-capable implants.
+/mob/living/proc/gather_belongings()
+ var/list/belongings = get_all_gear()
+ for (var/obj/item/implant/storage/internal_bag in implants)
+ belongings += internal_bag.contents
+ return belongings
diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm
index 03f684b7d87..69370ed49be 100644
--- a/code/modules/mob/living/basic/basic_defense.dm
+++ b/code/modules/mob/living/basic/basic_defense.dm
@@ -112,13 +112,6 @@
if(damage_done > 0)
attacking_larva.amount_grown = min(attacking_larva.amount_grown + damage_done, attacking_larva.max_grown)
-/mob/living/basic/attack_slime(mob/living/simple_animal/slime/M, list/modifiers)
- if(..()) //successful slime attack
- var/damage = rand(15, 25)
- if(M.is_adult)
- damage = rand(20, 35)
- return apply_damage(damage, M.melee_damage_type)
-
/mob/living/basic/attack_drone(mob/living/basic/drone/attacking_drone)
if(attacking_drone.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon.
return
diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm
index 81d69ce7701..f8b273804ea 100644
--- a/code/modules/mob/living/basic/bots/_bots.dm
+++ b/code/modules/mob/living/basic/bots/_bots.dm
@@ -69,6 +69,14 @@ GLOBAL_LIST_INIT(command_strings, list(
var/obj/item/card/id/access_card
///The trim type that will grant additional acces
var/datum/id_trim/additional_access
+ ///file the path icon is stored in
+ var/path_image_icon = 'icons/mob/silicon/aibots.dmi'
+ ///state of the path icon
+ var/path_image_icon_state = "path_indicator"
+ ///what color this path icon will use
+ var/path_image_color = "#FFFFFF"
+ ///list of all layed path icons
+ var/list/current_pathed_turfs = list()
///The type of data HUD the bot uses. Diagnostic by default.
var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC
@@ -91,8 +99,9 @@ GLOBAL_LIST_INIT(command_strings, list(
/mob/living/basic/bot/Initialize(mapload)
. = ..()
- AddElement(/datum/element/relay_attackers)
+ AddElement(/datum/element/relay_attackers)
+ RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(handle_loop_movement))
RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(after_attacked))
RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access))
ADD_TRAIT(src, TRAIT_NO_GLIDE, INNATE_TRAIT)
@@ -185,6 +194,7 @@ GLOBAL_LIST_INIT(command_strings, list(
/mob/living/basic/bot/Destroy()
GLOB.bots_list -= src
calling_ai_ref = null
+ clear_path_hud()
QDEL_NULL(paicard)
QDEL_NULL(pa_system)
QDEL_NULL(internal_radio)
@@ -261,10 +271,10 @@ GLOBAL_LIST_INIT(command_strings, list(
fully_replace_character_name(real_name, new_name)
/mob/living/basic/bot/proc/check_access(mob/living/user, obj/item/card/id)
- if(!istype(user)) // Non-living mobs shouldn't be manipulating bots (like observes using the botkeeper UI).
- return FALSE
if(user.has_unlimited_silicon_privilege || isAdminGhostAI(user)) // Silicon and Admins always have access.
return TRUE
+ if(!istype(user)) // Non-living mobs shouldn't be manipulating bots (like observes using the botkeeper UI).
+ return FALSE
if(!length(maints_access_required)) // No requirements to access it.
return TRUE
if(bot_access_flags & BOT_CONTROL_PANEL_OPEN) // Unlocked.
@@ -540,6 +550,7 @@ GLOBAL_LIST_INIT(command_strings, list(
access_card.set_access(initial_access)
diag_hud_set_botstat()
diag_hud_set_botmode()
+ clear_path_hud()
if(bypass_ai_reset || isnull(calling_ai_ref))
return
var/mob/living/ai_caller = calling_ai_ref.resolve()
@@ -593,9 +604,9 @@ GLOBAL_LIST_INIT(command_strings, list(
// Actions received from TGUI
/mob/living/basic/bot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
- if(. || !isliving(ui.user))
+ if(.)
return
- var/mob/living/the_user = ui.user
+ var/mob/the_user = ui.user
if(!check_access(the_user))
balloon_alert(the_user, "access denied!")
return
@@ -747,6 +758,7 @@ GLOBAL_LIST_INIT(command_strings, list(
speed = 2
diag_hud_set_botmode()
+ clear_path_hud()
/mob/living/basic/bot/Logout()
. = ..()
@@ -807,8 +819,13 @@ GLOBAL_LIST_INIT(command_strings, list(
diag_hud_set_botmode()
/mob/living/basic/bot/proc/after_attacked(datum/source, atom/attacker, attack_flags)
+ SIGNAL_HANDLER
+
if(attack_flags & ATTACKER_DAMAGING_ATTACK)
do_sparks(number = 5, cardinal_only = TRUE, source = src)
/mob/living/basic/bot/spawn_gibs(drop_bitflags = NONE)
new /obj/effect/gibspawner/robot(drop_location(), src)
+
+/mob/living/basic/bot/proc/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced)
+ return
diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm
index bb8d77eb64b..7bfbca96380 100644
--- a/code/modules/mob/living/basic/bots/bot_ai.dm
+++ b/code/modules/mob/living/basic/bots/bot_ai.dm
@@ -23,6 +23,10 @@
BB_PREVIOUS_BEACON_TARGET,
BB_BOT_SUMMON_TARGET,
)
+ ///how many times we tried to reach the target
+ var/current_pathing_attempts = 0
+ ///if we cant reach it after this many attempts, add it to our ignore list
+ var/max_pathing_attempts = 25
/datum/ai_controller/basic_controller/bot/TryPossessPawn(atom/new_pawn)
. = ..()
@@ -70,8 +74,15 @@
var/datum/target = blackboard[key]
if(QDELETED(target))
return FALSE
- if(!can_reach_target(target, distance))
+ var/datum/last_attempt = blackboard[BB_LAST_ATTEMPTED_PATHING]
+ if(last_attempt != target)
+ current_pathing_attempts = 0
+ set_blackboard_key(BB_LAST_ATTEMPTED_PATHING, target)
+ else
+ current_pathing_attempts++
+ if(current_pathing_attempts >= max_pathing_attempts || !can_reach_target(target, distance))
clear_blackboard_key(key)
+ clear_blackboard_key(BB_LAST_ATTEMPTED_PATHING)
set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, target, TRUE)
return FALSE
return TRUE
@@ -84,7 +95,7 @@
/datum/ai_behavior/manage_unreachable_list
behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
- action_cooldown = 15 SECONDS
+ action_cooldown = 45 SECONDS
/datum/ai_behavior/manage_unreachable_list/perform(seconds_per_tick, datum/ai_controller/controller, list_key)
. = ..()
@@ -97,6 +108,10 @@
/datum/ai_planning_subtree/find_patrol_beacon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
var/mob/living/basic/bot/bot_pawn = controller.pawn
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
if(!(bot_pawn.bot_mode_flags & BOT_MODE_AUTOPATROL) || bot_pawn.mode == BOT_SUMMON)
return
diff --git a/code/modules/mob/living/basic/bots/bot_hud.dm b/code/modules/mob/living/basic/bots/bot_hud.dm
index d9b429a32bf..c4001473f94 100644
--- a/code/modules/mob/living/basic/bots/bot_hud.dm
+++ b/code/modules/mob/living/basic/bots/bot_hud.dm
@@ -37,3 +37,84 @@
holder.icon_state = "hudmove"
else
holder.icon_state = ""
+
+///proc that handles drawing and transforming the bot's path onto diagnostic huds
+/mob/living/basic/bot/proc/generate_bot_path(datum/move_loop/has_target/jps/source)
+ SIGNAL_HANDLER
+
+ UnregisterSignal(src, COMSIG_MOVELOOP_JPS_FINISHED_PATHING)
+
+ if(isnull(ai_controller))
+ return
+
+ clear_path_hud()
+
+ var/list/path_images = active_hud_list[DIAG_PATH_HUD]
+ QDEL_LIST(path_images)
+
+ var/list/path_huds_watching_me = list(GLOB.huds[DATA_HUD_DIAGNOSTIC_ADVANCED])
+
+ var/atom/move_target = ai_controller.current_movement_target
+ if(move_target != ai_controller.blackboard[BB_BEACON_TARGET])
+ return
+
+ var/list/our_path = source.movement_path
+ if(!length(our_path))
+ return
+
+ for(var/datum/atom_hud/hud as anything in path_huds_watching_me)
+ hud.remove_atom_from_hud(src)
+
+ for(var/index in 1 to our_path.len)
+ if(index == 1 || index == our_path.len)
+ continue
+ var/turf/current_turf = our_path[index]
+ var/turf/previous_turf = our_path[index - 1]
+
+ var/turf/next_turf = our_path[index + 1]
+ var/next_direction = get_dir(previous_turf, next_turf)
+ var/previous_direction = get_dir(current_turf, previous_turf)
+
+ var/image/path_display = image(icon = path_image_icon, loc = current_turf, icon_state = path_image_icon_state, layer = GAME_PLANE, dir = next_direction)
+
+ if((ISDIAGONALDIR(next_direction) && (previous_direction & (NORTH|SOUTH))))
+ var/turn_value = (next_direction == SOUTHWEST || next_direction == NORTHEAST) ? 90 : -90
+ path_display.transform = path_display.transform.Turn(turn_value)
+ path_display.transform = path_display.transform.Scale(1, -1)
+
+ path_display.color = path_image_color
+ path_images += path_display
+ current_pathed_turfs[current_turf] = path_display
+
+ for(var/datum/atom_hud/hud as anything in path_huds_watching_me)
+ hud.add_atom_to_hud(src)
+
+///proc that handles moving along the bot's drawn path
+/mob/living/basic/bot/proc/handle_loop_movement(atom/movable/source, atom/oldloc, dir, forced)
+ SIGNAL_HANDLER
+
+ handle_hud_path()
+ on_bot_movement(source, oldloc, dir, forced)
+
+/mob/living/basic/bot/proc/handle_hud_path()
+ if(client || !length(current_pathed_turfs) || isnull(ai_controller))
+ return
+
+ var/atom/move_target = ai_controller.current_movement_target
+
+ if(move_target != ai_controller.blackboard[BB_BEACON_TARGET])
+ clear_path_hud()
+
+ var/turf/our_turf = get_turf(src)
+ var/image/target_image = current_pathed_turfs[our_turf]
+ if(target_image)
+ animate(target_image, alpha = 0, time = 0.3 SECONDS)
+ current_pathed_turfs -= our_turf
+
+///proc that handles deleting the bot's drawn path when needed
+/mob/living/basic/bot/proc/clear_path_hud()
+ for(var/turf/index as anything in current_pathed_turfs)
+ var/image/our_image = current_pathed_turfs[index]
+ animate(our_image, alpha = 0, time = 0.3 SECONDS)
+ current_pathed_turfs -= index
+
diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
index 204e6f7ba62..8a8050b9afc 100644
--- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
+++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm
@@ -19,6 +19,7 @@
additional_access = /datum/id_trim/job/janitor
possessed_message = "You are a cleanbot! Clean the station to the best of your ability!"
ai_controller = /datum/ai_controller/basic_controller/bot/cleanbot
+ path_image_color = "#993299"
///the bucket used to build us.
var/obj/item/reagent_containers/cup/bucket/build_bucket
///Flags indicating what kind of cleanables we should scan for to set as our target to clean.
@@ -93,7 +94,6 @@
/obj/effect/decal/cleanable/glass,
/obj/effect/decal/cleanable/vomit,
/obj/effect/decal/cleanable/wrapping,
- /obj/effect/decal/remains,
))
///blood we can clean
var/static/list/cleanable_blood = typecacheof(list(
@@ -110,6 +110,7 @@
var/static/list/huntable_trash = typecacheof(list(
/obj/item/trash,
/obj/item/food/deadmouse,
+ /obj/effect/decal/remains,
))
///drawings we hunt
var/static/list/cleanable_drawings = typecacheof(list(/obj/effect/decal/cleanable/crayon))
diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm
index 9d1367ee075..c42383bf51f 100644
--- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm
+++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm
@@ -1,4 +1,5 @@
#define BOT_CLEAN_PATH_LIMIT 15
+#define POST_CLEAN_COOLDOWN 5 SECONDS
/datum/ai_controller/basic_controller/bot/cleanbot
blackboard = list(
@@ -21,7 +22,7 @@
/datum/ai_planning_subtree/acid_spray,
/datum/ai_planning_subtree/use_mob_ability/foam_area,
/datum/ai_planning_subtree/salute_authority,
- /datum/ai_planning_subtree/find_patrol_beacon,
+ /datum/ai_planning_subtree/find_patrol_beacon/cleanbot,
)
reset_keys = list(
BB_ACTIVE_PET_COMMAND,
@@ -37,9 +38,14 @@
BB_CLEANABLE_DRAWINGS = CLEANBOT_CLEAN_DRAWINGS,
BB_HUNTABLE_TRASH = CLEANBOT_CLEAN_TRASH,
)
+ ai_traits = PAUSE_DURING_DO_AFTER
/datum/ai_planning_subtree/pet_planning/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
var/mob/living/basic/bot/bot_pawn = controller.pawn
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
//we are DONE listening to orders
if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)
return
@@ -49,11 +55,10 @@
/datum/ai_planning_subtree/cleaning_subtree
/datum/ai_planning_subtree/cleaning_subtree/SelectBehaviors(datum/ai_controller/basic_controller/bot/cleanbot/controller, seconds_per_tick)
- var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn
-
- if(LAZYLEN(bot_pawn.do_afters))
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(controller.pawn))
return SUBTREE_RETURN_FINISH_PLANNING
-
+ // NOVA EDIT ADDITION END
if(controller.reachable_key(BB_CLEAN_TARGET, BOT_CLEAN_PATH_LIMIT))
controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_CLEAN_TARGET)
return SUBTREE_RETURN_FINISH_PLANNING
@@ -62,7 +67,12 @@
final_hunt_list += controller.blackboard[BB_CLEANABLE_DECALS]
var/list/flag_list = controller.clean_flags
+ var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn
for(var/list_key in flag_list)
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
if(!(bot_pawn.janitor_mode_flags & flag_list[list_key]))
continue
final_hunt_list += controller.blackboard[list_key]
@@ -70,7 +80,7 @@
controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list/clean_targets, BB_CLEAN_TARGET, final_hunt_list)
/datum/ai_behavior/find_and_set/in_list/clean_targets
- action_cooldown = 2 SECONDS
+ action_cooldown = 1 SECONDS
/datum/ai_behavior/find_and_set/in_list/clean_targets/search_tactic(datum/ai_controller/controller, locate_paths, search_range)
var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths)
@@ -84,6 +94,10 @@
/datum/ai_planning_subtree/acid_spray/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED))
return
if(controller.reachable_key(BB_ACID_SPRAY_TARGET, BOT_CLEAN_PATH_LIMIT))
@@ -130,6 +144,7 @@
/datum/ai_behavior/execute_clean/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key)
. = ..()
+ controller.set_blackboard_key(BB_POST_CLEAN_COOLDOWN, POST_CLEAN_COOLDOWN + world.time)
var/atom/target = controller.blackboard[target_key]
if(QDELETED(target) || is_type_in_typecache(target, controller.blackboard[BB_HUNTABLE_TRASH]))
return
@@ -152,6 +167,10 @@
/datum/ai_planning_subtree/use_mob_ability/foam_area/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
var/mob/living/basic/bot/bot_pawn = controller.pawn
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED))
return
return ..()
@@ -160,6 +179,10 @@
/datum/ai_planning_subtree/befriend_janitors/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
var/mob/living/basic/bot/bot_pawn = controller.pawn
+ // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed
+ if(QDELETED(bot_pawn))
+ return SUBTREE_RETURN_FINISH_PLANNING
+ // NOVA EDIT ADDITION END
//we are now evil. dont befriend the janitors
if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)
return
@@ -185,6 +208,13 @@
return human_target
return null
+/datum/ai_planning_subtree/find_patrol_beacon/cleanbot
+
+/datum/ai_planning_subtree/find_patrol_beacon/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
+ if(controller.blackboard[BB_POST_CLEAN_COOLDOWN] >= world.time)
+ return
+ return ..()
+
/datum/pet_command/point_targeting/clean
command_name = "Clean"
command_desc = "Command a cleanbot to clean the mess."
@@ -209,3 +239,4 @@
controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND)
#undef BOT_CLEAN_PATH_LIMIT
+#undef POST_CLEAN_COOLDOWN
diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm
new file mode 100644
index 00000000000..1d802ca9358
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot.dm
@@ -0,0 +1,132 @@
+#define WASH_PERIOD 3 SECONDS
+
+/mob/living/basic/bot/hygienebot
+ name = "\improper Hygienebot"
+ desc = "A flying cleaning robot, he'll chase down people who can't shower properly!"
+ icon = 'icons/mob/silicon/aibots.dmi'
+ icon_state = "hygienebot"
+ base_icon_state = "hygienebot"
+ pass_flags = PASSMOB | PASSFLAPS | PASSTABLE
+ layer = MOB_UPPER_LAYER
+ density = FALSE
+ anchored = FALSE
+ health = 100
+ maxHealth = 100
+ path_image_color = "#80dae7"
+ maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR)
+ radio_key = /obj/item/encryptionkey/headset_service
+ radio_channel = RADIO_CHANNEL_SERVICE
+ bot_type = HYGIENE_BOT
+ additional_access = /datum/id_trim/job/janitor
+ hackables = "cleaning service protocols"
+ ai_controller = /datum/ai_controller/basic_controller/bot/hygienebot
+
+ ///are we currently washing someone?
+ var/washing = FALSE
+ ///Visual overlay of the bot spraying water.
+ var/static/mutable_appearance/water_overlay = mutable_appearance('icons/mob/silicon/aibots.dmi', "hygienebot-water")
+ ///Visual overlay of the bot commiting warcrimes.
+ var/static/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/silicon/aibots.dmi', "hygienebot-fire")
+ ///announcements we say when we find a target
+ var/static/list/found_announcements = list(
+ HYGIENEBOT_VOICED_UNHYGIENIC = 'sound/voice/hygienebot/unhygienicclient.ogg',
+ )
+ ///announcements we say when the target keeps moving away
+ var/static/list/threat_announcements = list(
+ HYGIENEBOT_VOICED_THREAT_AIRLOCK = 'sound/voice/hygienebot/dragyouout.ogg',
+ HYGIENEBOT_VOICED_FOUL_SMELL = 'sound/voice/hygienebot/foulsmelling.ogg',
+ HYGIENEBOT_VOICED_TROGLODYTE = 'sound/voice/hygienebot/troglodyte.ogg',
+ HYGIENEBOT_VOICED_GREEN_CLOUD = 'sound/voice/hygienebot/greencloud.ogg',
+ HYGIENEBOT_VOICED_ARSEHOLE = 'sound/voice/hygienebot/letmeclean.ogg',
+ HYGIENEBOT_VOICED_THREAT_ARTERIES = 'sound/voice/hygienebot/cutarteries.ogg',
+ HYGIENEBOT_VOICED_STOP_RUNNING = 'sound/voice/hygienebot/stoprunning.ogg',
+ )
+ ///announcements we say after we have cleaned our target
+ var/static/list/cleaned_announcements = list(
+ HYGIENEBOT_VOICED_FUCKING_FINALLY = 'sound/voice/hygienebot/finally.ogg',
+ HYGIENEBOT_VOICED_THANK_GOD = 'sound/voice/hygienebot/thankgod.ogg',
+ HYGIENEBOT_VOICED_DEGENERATE = 'sound/voice/hygienebot/degenerate.ogg',
+ )
+
+/mob/living/basic/bot/hygienebot/Initialize(mapload)
+ . = ..()
+ update_appearance(UPDATE_ICON)
+
+ generate_ai_speech()
+
+ var/static/list/loc_connections = list(
+ COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
+ )
+ AddElement(/datum/element/connect_loc, loc_connections)
+ var/static/list/hat_offsets = list(1, 1)
+ AddElement(/datum/element/hat_wearer, offsets = hat_offsets)
+
+ ADD_TRAIT(src, TRAIT_SPRAY_PAINTABLE, INNATE_TRAIT)
+ RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_attack))
+
+/mob/living/basic/bot/hygienebot/explode()
+ var/datum/effect_system/fluid_spread/foam/foam = new
+ foam.set_up(2, holder = src, location = loc)
+ foam.start()
+ return ..()
+
+/mob/living/basic/bot/hygienebot/generate_speak_list()
+ var/static/list/finalized_speak_list = (found_announcements + threat_announcements + cleaned_announcements)
+ return finalized_speak_list
+
+/mob/living/basic/bot/hygienebot/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state][bot_mode_flags & BOT_MODE_ON ? "-on" : ""]"
+
+
+/mob/living/basic/bot/hygienebot/update_overlays()
+ . = ..()
+ if(bot_mode_flags & BOT_MODE_ON)
+ . += mutable_appearance(icon, "hygienebot-flame")
+
+ if(!washing)
+ return
+
+ . += (bot_access_flags & BOT_COVER_EMAGGED) ? fire_overlay : water_overlay
+
+/mob/living/basic/bot/hygienebot/proc/on_entered(datum/source, atom/movable/movable)
+ SIGNAL_HANDLER
+ if(!washing)
+ return
+ commence_wash(movable)
+
+/mob/living/basic/bot/hygienebot/proc/on_attack(datum/source, atom/target)
+ SIGNAL_HANDLER
+ . = COMPONENT_HOSTILE_NO_ATTACK
+ if(washing)
+ return
+ set_washing_mode(new_mode = TRUE)
+ for(var/atom/to_wash in loc)
+ commence_wash(to_wash)
+ addtimer(CALLBACK(src, PROC_REF(set_washing_mode), FALSE), WASH_PERIOD)
+
+/mob/living/basic/bot/hygienebot/proc/set_washing_mode(new_mode)
+ washing = new_mode
+ update_appearance(UPDATE_OVERLAYS)
+
+/mob/living/basic/bot/hygienebot/proc/commence_wash(atom/target)
+ if(bot_access_flags & BOT_COVER_EMAGGED)
+ target.fire_act()
+ return
+ target.wash(CLEAN_WASH)
+
+/mob/living/basic/bot/hygienebot/on_bot_movement(atom/movable/source, atom/oldloc, dir, forced)
+
+ if(!washing || !isturf(loc))
+ return
+
+ for(var/mob/living/carbon/human in loc)
+ commence_wash(human)
+
+
+/mob/living/basic/bot/hygienebot/proc/generate_ai_speech()
+ ai_controller.set_blackboard_key(BB_WASH_FOUND, found_announcements)
+ ai_controller.set_blackboard_key(BB_WASH_THREATS, threat_announcements)
+ ai_controller.set_blackboard_key(BB_WASH_DONE, cleaned_announcements)
+
+#undef WASH_PERIOD
diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm
new file mode 100644
index 00000000000..2d2bc27079f
--- /dev/null
+++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm
@@ -0,0 +1,142 @@
+#define BOT_FRUSTRATION_LIMIT 8
+
+/datum/ai_controller/basic_controller/bot/hygienebot
+ blackboard = list(
+ BB_SALUTE_MESSAGES = list(
+ "salutes",
+ "nods in appreciation towards",
+ ),
+ BB_WASH_FRUSTRATION = 0,
+ )
+ planning_subtrees = list(
+ /datum/ai_planning_subtree/manage_unreachable_list,
+ /datum/ai_planning_subtree/respond_to_summon,
+ /datum/ai_planning_subtree/wash_people,
+ /datum/ai_planning_subtree/salute_authority,
+ /datum/ai_planning_subtree/find_patrol_beacon,
+ )
+ reset_keys = list(
+ BB_WASH_TARGET,
+ BB_BEACON_TARGET,
+ BB_PREVIOUS_BEACON_TARGET,
+ BB_BOT_SUMMON_TARGET,
+ )
+
+/datum/ai_controller/basic_controller/bot/hygienebot/TryPossessPawn(atom/new_pawn)
+ . = ..()
+ if(. & AI_CONTROLLER_INCOMPATIBLE)
+ return
+ RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_WASH_TARGET), PROC_REF(reset_anger))
+
+/datum/ai_controller/basic_controller/bot/hygienebot/proc/reset_anger()
+ SIGNAL_HANDLER
+
+ set_blackboard_key(BB_WASH_FRUSTRATION, 0)
+
+
+/datum/ai_planning_subtree/wash_people
+
+/datum/ai_planning_subtree/wash_people/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick)
+ var/mob/living/basic/bot/bot_pawn = controller.pawn
+
+ var/atom/wash_target = controller.blackboard[BB_WASH_TARGET]
+ if(QDELETED(wash_target))
+ controller.queue_behavior(/datum/ai_behavior/find_valid_wash_targets, BB_WASH_TARGET, bot_pawn.bot_access_flags)
+ return
+
+ if(get_dist(bot_pawn, wash_target) < 9)
+ controller.queue_behavior(/datum/ai_behavior/wash_target, BB_WASH_TARGET)
+ return SUBTREE_RETURN_FINISH_PLANNING
+
+ controller.clear_blackboard_key(BB_WASH_TARGET) //delete if too far
+
+/datum/ai_behavior/find_valid_wash_targets
+ action_cooldown = 5 SECONDS
+
+/datum/ai_behavior/find_valid_wash_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, our_access_flags)
+ . = ..()
+ var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST]
+ var/atom/found_target
+ for(var/mob/living/carbon/human/wash_potential in oview(5, controller.pawn))
+
+ if(found_target)
+ break
+
+ if(isnull(wash_potential.mind) || wash_potential.stat != CONSCIOUS)
+ continue
+
+ if(LAZYACCESS(ignore_list, wash_potential))
+ continue
+
+ if(our_access_flags & BOT_COVER_EMAGGED)
+ controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, wash_potential, TRUE)
+ found_target = wash_potential
+ break
+
+ for(var/atom/clothing in wash_potential.get_equipped_items())
+ if(GET_ATOM_BLOOD_DNA_LENGTH(clothing))
+ found_target = wash_potential
+ break
+
+ if(isnull(found_target))
+ finish_action(controller, succeeded = FALSE)
+ return
+
+ controller.set_blackboard_key(target_key, found_target)
+ finish_action(controller, succeeded = TRUE)
+
+
+
+/datum/ai_behavior/find_valid_wash_targets/finish_action(datum/ai_controller/controller, succeeded, target_key)
+ . = ..()
+ if(!succeeded)
+ return
+ var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY]
+ announcement.announce(pick(controller.blackboard[BB_WASH_FOUND]))
+
+/datum/ai_behavior/wash_target
+ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_MOVE_AND_PERFORM
+ required_distance = 0
+ action_cooldown = 1 SECONDS
+
+/datum/ai_behavior/wash_target/setup(datum/ai_controller/controller, target_key)
+ . = ..()
+ var/atom/target = controller.blackboard[target_key]
+ if(QDELETED(target))
+ return FALSE
+ set_movement_target(controller, target)
+
+/datum/ai_behavior/wash_target/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key)
+ . = ..()
+ var/mob/living/carbon/human/unclean_target = controller.blackboard[target_key]
+ var/mob/living/basic/living_pawn = controller.pawn
+ if(QDELETED(unclean_target))
+ finish_action(controller, FALSE, target_key)
+ return
+
+ if(living_pawn.loc == get_turf(unclean_target))
+ living_pawn.melee_attack(unclean_target)
+ finish_action(controller, TRUE, target_key)
+ return
+
+ var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION]
+ controller.set_blackboard_key(BB_WASH_FRUSTRATION, frustration_count + 1)
+ finish_action(controller, FALSE, target_key)
+
+/datum/ai_behavior/wash_target/finish_action(datum/ai_controller/controller, succeeded, target_key)
+ . = ..()
+ var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY]
+
+ if(succeeded)
+ if(controller.blackboard[BB_WASH_FRUSTRATION] > 0)
+ announcement.announce(pick(controller.blackboard[BB_WASH_DONE]))
+ controller.clear_blackboard_key(target_key)
+ return
+
+ if(controller.blackboard[BB_WASH_FRUSTRATION] < BOT_FRUSTRATION_LIMIT)
+ return
+
+ announcement.announce(pick(controller.blackboard[BB_WASH_THREATS]))
+ controller.set_blackboard_key(BB_WASH_FRUSTRATION, 0)
+
+#undef BOT_FRUSTRATION_LIMIT
diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm
index 278a69d154b..791de6b6296 100644
--- a/code/modules/mob/living/basic/bots/medbot/medbot.dm
+++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm
@@ -25,6 +25,7 @@
additional_access = /datum/id_trim/job/paramedic
announcement_type = /datum/action/cooldown/bot_announcement/medbot
+ path_image_color = "#d9d9f4"
///anouncements when we find a target to heal
var/static/list/wait_announcements = list(
@@ -146,8 +147,10 @@
)
RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack))
+
if(!HAS_TRAIT(SSstation, STATION_TRAIT_MEDBOT_MANIA) || !mapload || !is_station_level(z))
- return
+ return INITIALIZE_HINT_LATELOAD
+
skin = "advanced"
update_appearance(UPDATE_OVERLAYS)
damage_type_healer = HEAL_ALL_DAMAGE
@@ -315,12 +318,12 @@
return
if(!iscarbon(target))
return
- // SKYRAT EDIT ADDITION START - Skip trying to heal synths
+ // NOVA EDIT ADDITION START - Skip trying to heal synths
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
if(human_target.mob_biotypes & MOB_ROBOTIC)
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
INVOKE_ASYNC(src, PROC_REF(medicate_patient), target)
return COMPONENT_HOSTILE_NO_ATTACK
@@ -334,7 +337,7 @@
update_bot_mode(new_mode = BOT_HEALING, update_hud = FALSE)
patient.visible_message("[src] is trying to tend the wounds of [patient]", span_userdanger("[src] is trying to tend your wounds!"))
- if(!do_after(src, delay = 10 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION)) //SKYRAT EDIT CHANGE : Increased time as tradeoff for automated healing. ORIGINAL: if(!do_after(src, delay = 0.5 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION))
+ if(!do_after(src, delay = 10 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION)) //NOVA EDIT CHANGE : Increased time as tradeoff for automated healing. ORIGINAL: if(!do_after(src, delay = 0.5 SECONDS, target = patient, interaction_key = TEND_DAMAGE_INTERACTION))
update_bot_mode(new_mode = BOT_IDLE)
return
var/modified_heal_amount = heal_amount
diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
index 54315deda72..ceb333b1755 100644
--- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
+++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm
@@ -16,6 +16,7 @@
BB_PREVIOUS_BEACON_TARGET,
BB_BOT_SUMMON_TARGET,
)
+ ai_traits = PAUSE_DURING_DO_AFTER
/datum/ai_movement/jps/bot/medbot
@@ -185,22 +186,22 @@
return can_see(source, patient, radius)
/datum/ai_behavior/announce_patient
- action_cooldown = 30 SECONDS
+ action_cooldown = 3 MINUTES
behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
/datum/ai_behavior/announce_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key)
. = ..()
var/mob/living/living_target = controller.blackboard[target_key]
if(QDELETED(living_target))
- finish_action(controller, FALSE)
+ finish_action(controller, FALSE, target_key)
return
var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY]
if(QDELETED(announcement))
- finish_action(controller, FALSE)
+ finish_action(controller, FALSE, target_key)
return
var/text_to_announce = "Medical emergency! [living_target] is in critical condition at [get_area(living_target)]!"
announcement.announce(text_to_announce, controller.blackboard[BB_RADIO_CHANNEL])
- finish_action(controller, TRUE)
+ finish_action(controller, TRUE, target_key)
/datum/ai_behavior/announce_patient/finish_action(datum/ai_controller/controller, succeeded, target_key)
. = ..()
diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm
index 0eb86dfc538..926271eea82 100644
--- a/code/modules/mob/living/basic/drone/_drone.dm
+++ b/code/modules/mob/living/basic/drone/_drone.dm
@@ -260,7 +260,7 @@
dust()
/mob/living/basic/drone/examine(mob/user)
- . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE
+ . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE
//Hands
for(var/obj/item/held_thing in held_items)
diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm
index 7ebc9737b41..d01383427df 100644
--- a/code/modules/mob/living/basic/guardian/guardian_creator.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm
@@ -87,11 +87,13 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial())
used = TRUE
to_chat(user, use_message)
var/guardian_type_name = random ? "Random" : capitalize(initial(guardian_path.creator_name))
- var/list/mob/dead/observer/candidates = poll_ghost_candidates(
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
"Do you want to play as [user.real_name]'s [guardian_type_name] [mob_name]?",
- jobban_type = ROLE_PAI,
+ check_jobban = ROLE_PAI,
poll_time = 10 SECONDS,
ignore_category = POLL_IGNORE_HOLOPARASITE,
+ pic_source = src,
+ role_name_text = "guardian spirit",
)
if(LAZYLEN(candidates))
var/mob/dead/observer/candidate = pick(candidates)
diff --git a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm
index 31426475754..b2ac9d66e8c 100644
--- a/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_types/lightning.dm
@@ -92,4 +92,3 @@
/obj/effect/ebeam/chain
name = "lightning chain"
layer = LYING_MOB_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm
index 02d1fd1ed3a..7377ad15282 100644
--- a/code/modules/mob/living/basic/guardian/guardian_verbs.dm
+++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm
@@ -166,7 +166,7 @@
return FALSE
to_chat(owner, span_holoparasite("You attempt to reset [span_bold(chosen_guardian.real_name)] 's personality..."))
- var/list/mob/dead/observer/ghost_candidates = poll_ghost_candidates("Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", ROLE_PAI, FALSE, 100)
+ var/list/mob/dead/observer/ghost_candidates = SSpolling.poll_ghost_candidates("Do you want to play as [owner.real_name]'s [chosen_guardian.theme.name]?", check_jobban = ROLE_PAI, poll_time = 10 SECONDS, pic_source = chosen_guardian, role_name_text = chosen_guardian.theme.name)
if (!LAZYLEN(ghost_candidates))
to_chat(owner, span_holoparasite("Your attempt to reset the personality of \
[span_bold(chosen_guardian.real_name)] appears to have failed... \
diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm
index 8f454fd7f78..e503cd65aea 100644
--- a/code/modules/mob/living/basic/heretic/star_gazer.dm
+++ b/code/modules/mob/living/basic/heretic/star_gazer.dm
@@ -34,7 +34,6 @@
can_buckle_to = FALSE
mob_size = MOB_SIZE_HUGE
layer = LARGE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
ai_controller = /datum/ai_controller/basic_controller/star_gazer
diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
index 8ff9edd1476..efc09410db4 100644
--- a/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
+++ b/code/modules/mob/living/basic/jungle/leaper/leaper_abilities.dm
@@ -42,7 +42,6 @@
icon = 'icons/obj/weapons/guns/projectiles.dmi'
icon_state = "leaper_bubble_pop"
layer = ABOVE_ALL_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
duration = 3 SECONDS
/obj/effect/temp_visual/leaper_projectile_impact/Initialize(mapload)
@@ -160,7 +159,6 @@
icon = 'icons/obj/weapons/guns/projectiles.dmi'
icon_state = "leaper"
layer = ABOVE_ALL_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
duration = 1 SECONDS
/obj/effect/temp_visual/blood_drop_rising/Initialize(mapload)
@@ -172,7 +170,6 @@
icon = 'icons/effects/effects.dmi'
icon_state = "blood_effect_falling"
layer = ABOVE_ALL_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
duration = 0.7 SECONDS
pixel_y = 60
diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm
index b59ec233bd0..f9306afe20e 100644
--- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm
+++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm
@@ -16,7 +16,6 @@
icon = 'icons/mob/spacevines.dmi'
icon_state = "bud0"
layer = SPACEVINE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
opacity = FALSE
canSmoothWith = null
smoothing_flags = NONE
@@ -135,7 +134,6 @@
health_doll_icon = "venus_human_trap"
mob_biotypes = MOB_ORGANIC | MOB_PLANT
layer = SPACEVINE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
health = 100
maxHealth = 100
obj_damage = 60
diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm
index 8a0fe5e157d..fb3ac3fdffb 100644
--- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm
+++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm
@@ -18,7 +18,7 @@
/datum/idle_behavior/idle_random_walk/parrot
///chance of us moving while perched
- var/walk_chance_when_perched = 1 // SKYRAT EDIT CHANGE - More obedient poly ORIGINAL : var/walk_chance_when_perched = 5
+ var/walk_chance_when_perched = 1 // NOVA EDIT CHANGE - More obedient poly ORIGINAL : var/walk_chance_when_perched = 5
/datum/idle_behavior/idle_random_walk/parrot/perform_idle_behavior(seconds_per_tick, datum/ai_controller/controller)
var/mob/living/living_pawn = controller.pawn
diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm
index 85f48a8f672..2a1948172cf 100644
--- a/code/modules/mob/living/basic/ruin_defender/flesh.dm
+++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm
@@ -130,7 +130,7 @@
RegisterSignal(part.owner, COMSIG_LIVING_DEATH, PROC_REF(owner_died))
RegisterSignal(part.owner, COMSIG_LIVING_ELECTROCUTE_ACT, PROC_REF(owner_shocked)) //detach if we are shocked, not beneficial for the host but hey its a sideeffect
-/mob/living/basic/living_limb_flesh/proc/owner_shocked(datum/source, shock_damage, source, siemens_coeff, flags)
+/mob/living/basic/living_limb_flesh/proc/owner_shocked(datum/source, shock_damage, shock_source, siemens_coeff, flags)
SIGNAL_HANDLER
if(shock_damage < 10)
return
diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm
index 63f4bbb9dbc..c6454ee5f70 100644
--- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm
+++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_abilities.dm
@@ -251,7 +251,7 @@
if(iscarbon(mob))
if(ishuman(mob))
var/mob/living/carbon/human/H = mob
- if(H.dna && H.dna.species && !HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) // SKYRAT EDIT - No more funny purple hair
+ if(H.dna && H.dna.species && !HAS_TRAIT(H, TRAIT_VIRUSIMMUNE)) // NOVA EDIT - No more funny purple hair
H.set_haircolor("#1d2953", override = TRUE) //will be reset when blight is cured
var/blightfound = FALSE
for(var/datum/disease/revblight/blight in H.diseases)
diff --git a/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm b/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm
index a9e17a9b305..ea153b03c06 100644
--- a/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm
+++ b/code/modules/mob/living/basic/space_fauna/revenant/revenant_items.dm
@@ -86,7 +86,7 @@
/// Handles giving the revenant a new client to control it
/obj/item/ectoplasm/revenant/proc/get_new_user()
message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...")
- var/list/candidates = poll_candidates_for_mob("Do you want to be [revenant.name] (reforming)?", ROLE_REVENANT, ROLE_REVENANT, 5 SECONDS, revenant)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to be [revenant.name] (reforming)?", check_jobban = ROLE_REVENANT, role = ROLE_REVENANT, poll_time = 5 SECONDS, target_mob = revenant, pic_source = revenant)
if(!LAZYLEN(candidates))
message_admins("No candidates were found for the new revenant.")
diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
index 71fd357fd98..42a9fe3defd 100644
--- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
+++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spiders.dm
@@ -109,7 +109,7 @@
. = ..()
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web)
-/mob/living/basic/spider/giant/hunter/mold //skyrat edit: exists to make molds not spam the world with simple mobs
+/mob/living/basic/spider/giant/hunter/mold //NOVA EDIT: exists to make molds not spam the world with simple mobs
basic_mob_flags = DEL_ON_DEATH
/**
diff --git a/code/modules/mob/living/basic/space_fauna/statue/statue.dm b/code/modules/mob/living/basic/space_fauna/statue/statue.dm
index 801aa271d91..814500674fc 100644
--- a/code/modules/mob/living/basic/space_fauna/statue/statue.dm
+++ b/code/modules/mob/living/basic/space_fauna/statue/statue.dm
@@ -51,10 +51,8 @@
pull_force = MOVE_FORCE_EXTREMELY_STRONG
ai_controller = /datum/ai_controller/basic_controller/statue
- /// Stores the creator in here if it has one.
- var/mob/living/creator = null
-/mob/living/basic/statue/Initialize(mapload, mob/living/creator)
+/mob/living/basic/statue/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_UNOBSERVANT, INNATE_TRAIT)
AddComponent(/datum/component/unobserved_actor, unobserved_flags = NO_OBSERVED_MOVEMENT | NO_OBSERVED_ATTACKS)
@@ -65,10 +63,6 @@
)
grant_actions_by_list(innate_actions)
- // Set creator
- if(creator)
- src.creator = creator
-
/mob/living/basic/statue/med_hud_set_health()
return //we're a statue we're invincible
@@ -142,7 +136,6 @@
/datum/ai_controller/basic_controller/statue
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
- BB_LOW_PRIORITY_HUNTING_TARGET = null, // lights
)
ai_movement = /datum/ai_movement/basic_avoidance
diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm
index 162848d062a..351bfd809a6 100644
--- a/code/modules/mob/living/basic/vermin/frog.dm
+++ b/code/modules/mob/living/basic/vermin/frog.dm
@@ -26,7 +26,7 @@
response_harm_simple = "splat"
density = FALSE
faction = list(FACTION_HOSTILE, FACTION_MAINT_CREATURES)
- attack_sound = null // SKYRAT EDIT - No more frog ear-rape - ORIGINAL: attack_sound = 'sound/effects/reee.ogg'
+ attack_sound = null // NOVA EDIT - No more frog ear-rape - ORIGINAL: attack_sound = 'sound/effects/reee.ogg'
butcher_results = list(/obj/item/food/nugget = 1)
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
@@ -40,7 +40,7 @@
ai_controller = /datum/ai_controller/basic_controller/frog
- var/stepped_sound = null // SKYRAT EDIT - No more frog ear-rape - ORIGINA: var/stepped_sound = 'sound/effects/huuu.ogg'
+ var/stepped_sound = null // NOVA EDIT - No more frog ear-rape - ORIGINA: var/stepped_sound = 'sound/effects/huuu.ogg'
///How much of a reagent the mob injects on attack
var/poison_per_bite = 3
///What reagent the mob injects targets with
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 8f29a7d2be7..ab870461965 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -6,7 +6,6 @@
throw_speed = 3
throw_range = 5
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_BRAIN
organ_flags = ORGAN_ORGANIC | ORGAN_VITAL
diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm
index df03ce3fa9e..f2093738eac 100644
--- a/code/modules/mob/living/carbon/alien/adult/queen.dm
+++ b/code/modules/mob/living/carbon/alien/adult/queen.dm
@@ -9,7 +9,6 @@
bubble_icon = "alienroyal"
mob_size = MOB_SIZE_LARGE
layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
butcher_results = list(/obj/item/food/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
@@ -23,11 +22,11 @@
/mob/living/carbon/alien/adult/royal/on_lying_down(new_lying_angle)
. = ..()
- SET_PLANE_IMPLICIT(src, GAME_PLANE_FOV_HIDDEN) //So it won't hide smaller mobs.
+ layer = LYING_MOB_LAYER
/mob/living/carbon/alien/adult/royal/on_standing_up(new_lying_angle)
. = ..()
- SET_PLANE_IMPLICIT(src, initial(plane))
+ layer = initial(layer)
/mob/living/carbon/alien/adult/royal/can_inject(mob/user, target_zone, injection_flags)
return FALSE
diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm
index 4ea7e98b05f..9388dcea560 100644
--- a/code/modules/mob/living/carbon/alien/alien_defense.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defense.dm
@@ -67,15 +67,6 @@ In all, this is a lot like the monkey code. /N
var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected))
apply_damage(rand(1, 3), BRUTE, affecting)
-/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M, list/modifiers)
- if(..()) //successful slime attack
- var/damage = rand(5, 35)
- if(M.is_adult)
- damage = rand(10, 40)
- adjustBruteLoss(damage)
- log_combat(M, src, "attacked")
- updatehealth()
-
/mob/living/carbon/alien/ex_act(severity, target, origin)
. = ..()
if(!. || QDELETED(src))
diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm
index 93937adaeaf..a74bfc55311 100644
--- a/code/modules/mob/living/carbon/alien/larva/powers.dm
+++ b/code/modules/mob/living/carbon/alien/larva/powers.dm
@@ -46,7 +46,7 @@
return TRUE
-//SKYRAT EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\larva.dm
+//NOVA EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_nova\modules\xenos_skyrat_redo\code\xeno_types\larva.dm
/*
/datum/action/cooldown/alien/larva_evolve/Activate(atom/target)
var/mob/living/carbon/alien/larva/larva = owner
@@ -102,4 +102,4 @@
larva.alien_evolve(new_xeno)
return TRUE
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
index 19434d888a1..3a72dc61dc6 100644
--- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
+++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm
@@ -133,14 +133,14 @@
if(gib_on_success)
new_xeno.visible_message(span_danger("[new_xeno] bursts out of [owner] in a shower of gore!"), span_userdanger("You exit [owner], your previous host."), span_hear("You hear organic matter ripping and tearing!"))
- //owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) // SKYRAT EDIT REMOVAL - ALIEN QOL - don't ever gib host.
+ //owner.investigate_log("has been gibbed by an alien larva.", INVESTIGATE_DEATHS) // NOVA EDIT REMOVAL - ALIEN QOL - don't ever gib host.
//owner.gib(DROP_ORGANS|DROP_BODYPARTS)
- // SKYRAT EDIT ADDITION BEGIN - ALIEN QOL - You aren't getting gibbed but you aren't going to be having fun
+ // NOVA EDIT ADDITION BEGIN - ALIEN QOL - You aren't getting gibbed but you aren't going to be having fun
owner.apply_damage(150, BRUTE, BODY_ZONE_CHEST, wound_bonus = 30, sharpness = SHARP_POINTY)
owner.spawn_gibs()
owner.cut_overlay(overlay)
owner.investigate_log("has been chestbursted.", INVESTIGATE_DEATHS)
- // SKYRAT EDIT ADDITION END - ALIEN QOL
+ // NOVA EDIT ADDITION END - ALIEN QOL
else
new_xeno.visible_message(span_danger("[new_xeno] wriggles out of [owner]!"), span_userdanger("You exit [owner], your previous host."))
owner.log_message("had an alien larva within them escape (without being gibbed).", LOG_ATTACK, log_globally = FALSE)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index b3435a7d879..72aecd31721 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -22,12 +22,11 @@
tint = 3
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
layer = MOB_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
max_integrity = 100
item_flags = XENOMORPH_HOLDABLE
- special_desc_requirement = EXAMINE_CHECK_JOB //SKYRAT EDIT
- special_desc_jobs = list("Scientist, Research Director") //SKYRAT EDIT
- special_desc = "This alien is an extremely dangerous life form capable of creating a xenomorph. You would know well not to approach without full body biological protection." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_JOB //NOVA EDIT
+ special_desc_jobs = list("Scientist, Research Director") //NOVA EDIT
+ special_desc = "This alien is an extremely dangerous life form capable of creating a xenomorph. You would know well not to approach without full body biological protection." //NOVA EDIT
var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case
var/sterile = FALSE
@@ -271,9 +270,9 @@
/obj/item/clothing/mask/facehugger/lamarr
name = "Lamarr"
desc = "The Research Director's pet, a domesticated and debeaked xenomorph facehugger. Friendly, but may still try to couple with your head."
- special_desc_requirement = EXAMINE_CHECK_ROLE //SKYRAT EDIT
- special_desc_roles = list("ROLE_ALIEN") //SKYRAT EDIT
- special_desc = "This young one has been cruelly mutilated. It lacks the capability to fill a host with our sisters." //SKYRAT EDIT
+ special_desc_requirement = EXAMINE_CHECK_ROLE //NOVA EDIT
+ special_desc_roles = list("ROLE_ALIEN") //NOVA EDIT
+ special_desc = "This young one has been cruelly mutilated. It lacks the capability to fill a host with our sisters." //NOVA EDIT
sterile = TRUE
/obj/item/clothing/mask/facehugger/dead
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index d07ca87c75f..fb4828e457f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -50,7 +50,8 @@
var/hurt = TRUE
var/extra_speed = 0
var/oof_noise = FALSE //We smacked something with denisty, so play a noise
- if(throwingdatum.thrower != src)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if(thrower != src)
extra_speed = min(max(0, throwingdatum.speed - initial(throw_speed)), CARBON_MAX_IMPACT_SPEED_BONUS)
if(istype(throwingdatum))
@@ -137,6 +138,7 @@
if(prob(0.5))
verb_text = "yeet"
var/neckgrab_throw = FALSE // we can't check for if it's a neckgrab throw when totaling up power_throw since we've already stopped pulling them by then, so get it early
+ var/frequency_number = 1 //We assign a default frequency number for the sound of the throw.
if(!held_item)
if(pulling && isliving(pulling) && grab_state >= GRAB_AGGRESSIVE)
var/mob/living/throwable_mob = pulling
@@ -164,23 +166,34 @@
power_throw--
if(HAS_TRAIT(thrown_thing, TRAIT_DWARF))
power_throw++
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(HAS_TRAIT(src, TRAIT_OVERSIZED))
power_throw++
if(HAS_TRAIT(thrown_thing, TRAIT_OVERSIZED))
power_throw--
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(neckgrab_throw)
power_throw++
if(isitem(thrown_thing))
var/obj/item/thrown_item = thrown_thing
+ frequency_number = 1-(thrown_item.w_class-3)/8 //At normal weight, the frequency is at 1. For tiny, it is 1.25. For huge, it is 0.75.
if(thrown_item.throw_verb)
verb_text = thrown_item.throw_verb
- do_attack_animation(target, no_effect = 1) //SKYRAT EDIT ADDITION - AESTHETICS
- playsound(loc, 'sound/weapons/punchmiss.ogg', 50, TRUE, -1) //SKYRAT EDIT ADDITION - AESTHETICS
- visible_message(span_danger("[src] [verb_text][plural_s(verb_text)] [thrown_thing][power_throw ? " really hard!" : "."]"), \
- span_danger("You [verb_text] [thrown_thing][power_throw ? " really hard!" : "."]"))
- log_message("has thrown [thrown_thing] [power_throw > 0 ? "really hard" : ""]", LOG_ATTACK)
+ do_attack_animation(target, no_effect = 1)
+ var/sound/throwsound = 'sound/weapons/throw.ogg'
+ var/power_throw_text = "."
+ if(power_throw > 0) //If we have anything that boosts our throw power like hulk, we use the rougher heavier variant.
+ throwsound = 'sound/weapons/throwhard.ogg'
+ power_throw_text = " really hard!"
+ if(power_throw < 0) //if we have anything that weakens our throw power like dward, we use a slower variant.
+ throwsound = 'sound/weapons/throwsoft.ogg'
+ power_throw_text = " flimsily."
+ frequency_number = frequency_number + (rand(-5,5)/100); //Adds a bit of randomness in the frequency to not sound exactly the same.
+ //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 50. Short throws are quieter. A fast throwing speed also makes the noise sharper.
+ playsound(src, throwsound, min(8*min(get_dist(loc,target),thrown_thing.throw_range), 50), vary = TRUE, extrarange = -1, frequency = frequency_number)
+ visible_message(span_danger("[src] [verb_text][plural_s(verb_text)] [thrown_thing][power_throw_text]"), \
+ span_danger("You [verb_text] [thrown_thing][power_throw_text]"))
+ log_message("has thrown [thrown_thing] [power_throw_text]", LOG_ATTACK)
var/extra_throw_range = HAS_TRAIT(src, TRAIT_THROWINGARM) ? 2 : 0
newtonian_move(get_dir(target, src))
thrown_thing.safe_throw_at(target, thrown_thing.throw_range + extra_throw_range, max(1,thrown_thing.throw_speed + power_throw), src, null, null, null, move_force)
@@ -920,18 +933,18 @@
/mob/living/carbon/can_be_revived()
if(!get_organ_by_type(/obj/item/organ/internal/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling)) || HAS_TRAIT(src, TRAIT_HUSK))
return FALSE
-//SKYRAT EDIT ADDITION - DNR TRAIT
+//NOVA EDIT ADDITION - DNR TRAIT
if(HAS_TRAIT(src, TRAIT_DNR))
return FALSE
-//SKYRAT EDIT ADDITION END - DNR TRAIT
+//NOVA EDIT ADDITION END - DNR TRAIT
return ..()
/mob/living/carbon/proc/can_defib()
-//SKYRAT EDIT ADDITION - DNR TRAIT
+//NOVA EDIT ADDITION - DNR TRAIT
if(HAS_TRAIT(src, TRAIT_DNR)) //This is also added when a ghost DNR's!
return DEFIB_FAIL_DNR
-//SKYRAT EDIT ADDITION END - DNR TRAIT
+//NOVA EDIT ADDITION END - DNR TRAIT
if (HAS_TRAIT(src, TRAIT_SUICIDED))
return DEFIB_FAIL_SUICIDE
@@ -971,7 +984,7 @@
return DEFIB_POSSIBLE
/mob/living/carbon/proc/can_defib_client()
- return (client || get_ghost(FALSE, FALSE)) && (can_defib() & DEFIB_REVIVABLE_STATES) // SKYRAT EDIT - ORIGINAL: return (client || get_ghost(FALSE, TRUE)) && (can_defib() & DEFIB_REVIVABLE_STATES)
+ return (client || get_ghost(FALSE, FALSE)) && (can_defib() & DEFIB_REVIVABLE_STATES) // NOVA EDIT - ORIGINAL: return (client || get_ghost(FALSE, TRUE)) && (can_defib() & DEFIB_REVIVABLE_STATES)
/mob/living/carbon/harvest(mob/living/user)
if(QDELETED(src))
@@ -1335,14 +1348,14 @@
/// Special carbon interaction on lying down, to transform its sprite by a rotation.
/mob/living/carbon/proc/lying_angle_on_lying_down(new_lying_angle)
if(!new_lying_angle)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(dir == WEST)
set_lying_angle(270)
return
else if(dir == EAST)
set_lying_angle(90)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
set_lying_angle(pick(90, 270))
else
set_lying_angle(new_lying_angle)
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index ace31751c5d..7a0f4682b3e 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -101,7 +101,7 @@
var/message_verb_continuous = length(I.attack_verb_continuous) ? "[pick(I.attack_verb_continuous)]" : "attacks"
var/message_verb_simple = length(I.attack_verb_simple) ? "[pick(I.attack_verb_simple)]" : "attack"
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(I.force && !user.combat_mode && !length(I.attack_verb_simple) && !length(I.attack_verb_continuous))
var/random = rand(1,2)
switch(random)
@@ -111,7 +111,7 @@
if(2)
message_verb_continuous = "maims "
message_verb_simple = "maim "
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
var/extra_wound_details = ""
@@ -215,28 +215,6 @@
ForceContractDisease(D)
return TRUE
-
-/mob/living/carbon/attack_slime(mob/living/simple_animal/slime/M, list/modifiers)
- if(..()) //successful slime attack
- if(M.powerlevel > 0)
- var/stunprob = M.powerlevel * 7 + 10 // 17 at level 1, 80 at level 10
- if(prob(stunprob))
- M.powerlevel -= 3
- if(M.powerlevel < 0)
- M.powerlevel = 0
-
- visible_message(span_danger("The [M.name] shocks [src]!"), \
- span_userdanger("The [M.name] shocks you!"))
-
- do_sparks(5, TRUE, src)
- var/power = M.powerlevel + rand(0,3)
- Paralyze(power * 2 SECONDS)
- set_stutter_if_lower(power * 2 SECONDS)
- if (prob(stunprob) && M.powerlevel >= 8)
- adjustFireLoss(M.powerlevel * rand(6,10))
- updatehealth()
- return 1
-
/**
* Really weird proc that attempts to dismebmer the passed zone if it is at max damage
* Unless the attacker is an NPC, in which case it disregards the zone and picks a random one
@@ -285,7 +263,7 @@
"You hear a slap.")
target.dna?.species?.stop_wagging_tail(target)
return
- //SKYRAT EDIT ADDITION BEGIN - EMOTES
+ //NOVA EDIT ADDITION BEGIN - EMOTES
if(zone_selected == BODY_ZONE_PRECISE_GROIN && target.dir == src.dir)
if(HAS_TRAIT(target, TRAIT_PERSONALSPACE) && (target.stat != UNCONSCIOUS) && (!target.handcuffed)) //You need to be conscious and uncuffed to use Personal Space
if(target.combat_mode && (!HAS_TRAIT(target, TRAIT_PACIFISM))) //Being pacified prevents violent counters
@@ -313,7 +291,7 @@
"You hear a slap.", ignored_mobs = list(target))
to_chat(target, "[src] slaps your ass!")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
do_attack_animation(target, ATTACK_EFFECT_DISARM)
playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
if (ishuman(target))
@@ -444,7 +422,7 @@
var/immediately_stun = should_stun && !(flags & SHOCK_DELAY_STUN)
if (immediately_stun)
if (paralyze)
- StaminaKnockdown(stun_duration / 4) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(40)
+ StaminaKnockdown(stun_duration / 4) // NOVA EDIT CHANGE - ORIGINAL: Paralyze(40)
else
Knockdown(stun_duration)
//Jitter and other fluff.
@@ -458,12 +436,12 @@
///Called slightly after electrocute act to apply a secondary stun.
/mob/living/carbon/proc/secondary_shock(paralyze, stun_duration)
if (paralyze)
- StaminaKnockdown(stun_duration / 6) // SKYRAT EDIT CHANGE - ORIGINAL: Paralyze(60)
+ StaminaKnockdown(stun_duration / 6) // NOVA EDIT CHANGE - ORIGINAL: Paralyze(60)
else
Knockdown(stun_duration)
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/helper)
- var/nosound = FALSE //SKYRAT EDIT ADDITION - EMOTES
+ var/nosound = FALSE //NOVA EDIT ADDITION - EMOTES
if(on_fire)
to_chat(helper, span_warning("You can't put [p_them()] out with just your bare hands!"))
return
@@ -483,29 +461,29 @@
null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(helper, src))
to_chat(helper, span_notice("You shake [src] trying to pick [p_them()] up!"))
to_chat(src, span_notice("[helper] shakes you to get you up!"))
- //SKYRAT EDIT ADDITION BEGIN - EMOTES -- SENSITIVE SNOUT TRAIT ADDITION
+ //NOVA EDIT ADDITION BEGIN - EMOTES -- SENSITIVE SNOUT TRAIT ADDITION
else if(helper.zone_selected == BODY_ZONE_PRECISE_MOUTH)
nosound = TRUE
if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && src.incapacitated(IGNORE_RESTRAINTS))
visible_message(span_warning("[helper] tries to boop [src] on the nose, but [p_they()] move[p_s()] out of the way."))
return
else
- playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg', 50, 0)
+ playsound(src, 'modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg', 50, 0)
if(HAS_TRAIT(src, TRAIT_SENSITIVESNOUT) && get_location_accessible(src, BODY_ZONE_PRECISE_MOUTH))
to_chat(src, span_warning("[helper] boops you on your sensitive nose, sending you to the ground!"))
src.Knockdown(20)
src.apply_damage(30, STAMINA)
helper.visible_message(span_notice("[helper] boops [src]'s nose."), span_notice("You boop [src] on the nose."))
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else if(check_zone(helper.zone_selected) == BODY_ZONE_HEAD && get_bodypart(BODY_ZONE_HEAD)) //Headpats!
- //SKYRAT EDIT ADDITION BEGIN - OVERSIZED & DISALLOWED HEADPATS
+ //NOVA EDIT ADDITION BEGIN - OVERSIZED & DISALLOWED HEADPATS
if(HAS_TRAIT(src, TRAIT_OVERSIZED) && !HAS_TRAIT(helper, TRAIT_OVERSIZED))
visible_message(span_warning("[helper] tries to pat [src] on the head, but can't reach!"))
return
else if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS))
visible_message(span_warning("[helper] tries to pat [src] on the head, but [p_they()] move[p_s()] out of the way."))
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
helper.visible_message(span_notice("[helper] gives [src] a pat on the head to make [p_them()] feel better!"), \
null, span_hear("You hear a soft patter."), DEFAULT_MESSAGE_RANGE, list(helper, src))
to_chat(helper, span_notice("You give [src] a pat on the head to make [p_them()] feel better!"))
@@ -513,12 +491,12 @@
if(HAS_TRAIT(src, TRAIT_BADTOUCH))
to_chat(helper, span_warning("[src] looks visibly upset as you pat [p_them()] on the head."))
- //SKYRAT EDIT ADDITION BEGIN - EMOTES
+ //NOVA EDIT ADDITION BEGIN - EMOTES
if(HAS_TRAIT(src, TRAIT_EXCITABLE))
var/obj/item/organ/external/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL)
if(src_tail && !(src_tail.wag_flags & WAG_WAGGING))
emote("wag")
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/external/tail)))
helper.visible_message(span_notice("[helper] pulls on [src]'s tail!"), \
@@ -548,11 +526,11 @@
to_chat(helper, span_notice("You wrap [src] into a tight bear hug!"))
to_chat(src, span_notice("[helper] squeezes you super tightly in a firm bear hug!"))
else
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if (HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS))
visible_message(span_warning("[helper] tries to hug [src], but [p_they()] move[p_s()] out of the way."))
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
helper.visible_message(span_notice("[helper] hugs [src] to make [p_them()] feel better!"), \
null, span_hear("You hear the rustling of clothes."), DEFAULT_MESSAGE_RANGE, list(helper, src))
to_chat(helper, span_notice("You hug [src] to make [p_them()] feel better!"))
@@ -605,7 +583,7 @@
if(body_position != STANDING_UP && !resting && !buckled && !HAS_TRAIT(src, TRAIT_FLOORED))
get_up(TRUE)
- if(!nosound) //SKYRAT EDIT ADDITION - EMOTES
+ if(!nosound) //NOVA EDIT ADDITION - EMOTES
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
// Shake animation
@@ -798,7 +776,7 @@
QDEL_NULL(grasp)
return
grasp.grasp_limb(grasped_part)
- */ // SKYRAT EDIT REMOVAL - MODULARIZED INTO grasp.dm's self_grasp_bleeding_limb !! IF THIS PROC IS UPDATED, PUT IT IN THERE !!
+ */ // NOVA EDIT REMOVAL - MODULARIZED INTO grasp.dm's self_grasp_bleeding_limb !! IF THIS PROC IS UPDATED, PUT IT IN THERE !!
self_grasp_bleeding_limb(grasped_part, supress_message)
/// If TRUE, the owner of this bodypart can try grabbing it to slow bleeding, as well as various other effects.
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index a9562686fb6..38571bccdb1 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -2,7 +2,7 @@
blood_volume = BLOOD_VOLUME_NORMAL
gender = MALE
pressure_resistance = 15
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR ICON
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR ICON
has_limbs = TRUE
held_items = list(null, null)
num_legs = 0 //Populated on init through list/bodyparts
@@ -123,4 +123,4 @@
COOLDOWN_DECLARE(bleeding_message_cd)
- var/next_smell = 0 //SKYRAT EDIT ADDITION /// Cooldown for the next smell
+ var/next_smell = 0 //NOVA EDIT ADDITION /// Cooldown for the next smell
diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm
index d4fa006957e..bb67d5a9635 100644
--- a/code/modules/mob/living/carbon/carbon_update_icons.dm
+++ b/code/modules/mob/living/carbon/carbon_update_icons.dm
@@ -85,8 +85,8 @@
SEND_SIGNAL(src, COMSIG_CARBON_REMOVE_OVERLAY, cache_index, I)
//used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body.
-/mob/living/carbon/human/proc/update_mutant_bodyparts(force_update = FALSE) // SKYRAT EDIT CHANGE
- dna?.species.handle_mutant_bodyparts(src, force_update = force_update) // SKYRAT EDIT CHANGE
+/mob/living/carbon/human/proc/update_mutant_bodyparts(force_update = FALSE) // NOVA EDIT CHANGE
+ dna?.species.handle_mutant_bodyparts(src, force_update = force_update) // NOVA EDIT CHANGE
update_body_parts()
/mob/living/carbon/update_body(is_creating = FALSE)
@@ -364,7 +364,7 @@
apply_overlay(WOUND_LAYER)
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
/*
/mob/living/carbon/update_worn_mask()
remove_overlay(FACEMASK_LAYER)
@@ -397,9 +397,9 @@
apply_overlay(NECK_LAYER)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
-//SKYRAT EDIT REMOVAL BEGIN - TESHARI CLOTHES (moved to modular)
+//NOVA EDIT REMOVAL BEGIN - TESHARI CLOTHES (moved to modular)
/*
/mob/living/carbon/update_worn_back()
remove_overlay(BACK_LAYER)
@@ -414,9 +414,9 @@
apply_overlay(BACK_LAYER)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
/*
/mob/living/carbon/update_worn_head()
remove_overlay(HEAD_LAYER)
@@ -434,12 +434,12 @@
apply_overlay(HEAD_LAYER)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/mob/living/carbon/update_worn_handcuffs()
remove_overlay(HANDCUFF_LAYER)
- if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //SKYRAT EDIT ADDED !(handcuffed.item_flags & ABSTRACT)
+ if(handcuffed && !(handcuffed.item_flags & ABSTRACT)) //NOVA EDIT ADDED !(handcuffed.item_flags & ABSTRACT)
var/mutable_appearance/handcuff_overlay = mutable_appearance('icons/mob/simple/mob.dmi', "handcuff1", -HANDCUFF_LAYER)
if(handcuffed.blocks_emissive != EMISSIVE_BLOCK_NONE)
handcuff_overlay.overlays += emissive_blocker(handcuff_overlay.icon, handcuff_overlay.icon_state, src, alpha = handcuff_overlay.alpha)
@@ -477,10 +477,10 @@
//Overlays for the worn overlay so you can overlay while you overlay
//eg: ammo counters, primed grenade flashing, etc.
//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file
-// SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION
+// NOVA EDIT CHANGE BEGIN - CUSTOMIZATION
// obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file) - original
/obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, mutant_styles = NONE)
-// SKYRAT EDIT CHANGE END
+// NOVA EDIT CHANGE END
SHOULD_CALL_PARENT(TRUE)
RETURN_TYPE(/list)
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index 8d1599d0e80..8ac09dd5bb8 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -16,7 +16,7 @@
name = "blink (Rapid)"
message = "blinks rapidly."
-//SKYRAT EDIT REMOVAL BEGIN - EMOTES - (Moved to modular_skyrat/modules/emotes/code/emotes.dm as /datum/emote/living/clap)
+//NOVA EDIT REMOVAL BEGIN - EMOTES - (Moved to modular_nova/modules/emotes/code/emotes.dm as /datum/emote/living/clap)
/*
/datum/emote/living/carbon/clap
key = "clap"
@@ -38,7 +38,7 @@
'sound/misc/clap3.ogg',
'sound/misc/clap4.ogg')
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/emote/living/carbon/crack
key = "crack"
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index e6a99d32052..39759daae71 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -6,7 +6,7 @@
var/t_has = p_have()
var/t_is = p_are()
- . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) // SKYRAT EDIT CHANGE - HR padding
+ . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) // NOVA EDIT CHANGE - HR padding
var/obscured = check_obscured_slots()
if (handcuffed)
@@ -26,7 +26,7 @@
if (back)
. += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back."
- . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections
+ . += EXAMINE_SECTION_BREAK // NOVA EDIT ADDITION - hr sections
var/appears_dead = FALSE
if (stat == DEAD)
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index d358d697875..5f07cf2dce9 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -71,7 +71,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
* Layer hiding is handled by [/datum/species/proc/handle_mutant_bodyparts] below.
*/
//var/list/mutant_bodyparts = list() //ORIGINAL
- var/list/list/mutant_bodyparts = list() //SKYRAT EDIT CHANGE - CUSTOMIZATION (typed list)
+ var/list/list/mutant_bodyparts = list() //NOVA EDIT CHANGE - CUSTOMIZATION (typed list)
///The bodyparts this species uses. assoc of bodypart string - bodypart type. Make sure all the fucking entries are in or I'll skin you alive.
var/list/bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left,
@@ -610,7 +610,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
* Arguments:
* * species_human - Human, whoever we're handling the body for
*/
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
/*
/datum/species/proc/handle_body(mob/living/carbon/human/species_human)
species_human.remove_overlay(BODY_LAYER)
@@ -703,7 +703,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
species_human.apply_overlay(BODY_LAYER)
handle_mutant_bodyparts(species_human)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/**
* Handles the mutant bodyparts of a human
@@ -714,7 +714,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
* * H - Human, whoever we're handling the body for
* * forced_colour - The forced color of an accessory. Leave null to use mutant color.
*/
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular)
/*
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/source, forced_colour)
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
@@ -821,7 +821,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
source.apply_overlay(BODY_ADJ_LAYER)
source.apply_overlay(BODY_FRONT_LAYER)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
//This exists so sprite accessories can still be per-layer without having to include that layer's
@@ -834,12 +834,12 @@ GLOBAL_LIST_EMPTY(features_by_species)
return "ADJ"
if(BODY_FRONT_LAYER)
return "FRONT"
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(BODY_FRONT_UNDER_CLOTHES)
return "FRONT_UNDER"
if(ABOVE_BODY_FRONT_HEAD_LAYER)
return "FRONT_OVER"
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
///Proc that will randomise the hair, or primary appearance element (i.e. for moths wings) of a species' associated mob
/datum/species/proc/randomize_main_appearance_element(mob/living/carbon/human/human_mob)
@@ -851,7 +851,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
human_mob.undershirt = random_undershirt(human_mob.gender)
human_mob.underwear = random_underwear(human_mob.gender)
human_mob.socks = random_socks(human_mob.gender)
- human_mob.bra = random_bra(human_mob.gender) //SKYRAT EDIT ADDITION - Underwear and Bra split
+ human_mob.bra = random_bra(human_mob.gender) //NOVA EDIT ADDITION - Underwear and Bra split
///Proc that will randomise the underwear (i.e. top, pants and socks) of a species' associated mob
/datum/species/proc/randomize_active_underwear(mob/living/carbon/human/human_mob)
@@ -934,7 +934,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(ITEM_SLOT_FEET)
if(H.num_legs < 2)
return FALSE
- /* SKYRAT EDIT REMOVAL
+ /* NOVA EDIT REMOVAL
if((H.bodytype & BODYTYPE_DIGITIGRADE) && !(I.item_flags & IGNORE_DIGITIGRADE))
if(!(I.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)))
if(!disable_warning)
@@ -1209,7 +1209,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/armor_block = target.run_armor_check(affecting, MELEE)
- playsound(target.loc, attacking_bodypart.unarmed_attack_sound || get_sfx("punch"), 25, TRUE, -1) // SKYRAT EDIT - ORIGINAL: playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1)
+ playsound(target.loc, attacking_bodypart.unarmed_attack_sound || get_sfx("punch"), 25, TRUE, -1) // NOVA EDIT - ORIGINAL: playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1)
if(grappled && attacking_bodypart.grappled_attack_verb)
atk_verb = attacking_bodypart.grappled_attack_verb
@@ -1225,7 +1225,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/attack_direction = get_dir(user, target)
var/attack_type = attacking_bodypart.attack_type
- var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //SKYRAT EDIT ADDITION - If unarmed damage sharpness needs to be taken into account.
+ var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //NOVA EDIT ADDITION - If unarmed damage sharpness needs to be taken into account.
if(atk_effect == ATTACK_EFFECT_KICK || grappled) //kicks and punches when grappling bypass armor slightly.
if(damage >= 9)
target.force_say()
@@ -1233,7 +1233,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
target.apply_damage(damage, attack_type, affecting, armor_block - limb_accuracy, attack_direction = attack_direction)
target.apply_damage(damage*1.5, STAMINA, affecting, armor_block - limb_accuracy)
else // Normal attacks do not gain the benefit of armor penetration.
- target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //SKYRAT EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction)
+ target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //NOVA EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction)
target.apply_damage(damage*1.5, STAMINA, affecting, armor_block)
if(damage >= 9)
target.force_say()
@@ -1244,11 +1244,11 @@ GLOBAL_LIST_EMPTY(features_by_species)
target.visible_message(span_danger("[user] knocks [target] down!"), \
span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user)
to_chat(user, span_danger("You knock [target] down!"))
- /* SKYRAT EDIT REMOVAL - Less combat lethality and hard stungs
+ /* NOVA EDIT REMOVAL - Less combat lethality and hard stungs
var/knockdown_duration = 4 SECONDS + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 4 second base stun + 4 second stun modifier = 8 second knockdown duration
target.apply_effect(knockdown_duration, EFFECT_KNOCKDOWN, armor_block)
*/ // SKYRAT REMOVAL END
- target.StaminaKnockdown(20) //SKYRAT EDIT ADDITION
+ target.StaminaKnockdown(20) //NOVA EDIT ADDITION
log_combat(user, target, "got a stun punch with their previous punch")
/datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
@@ -1366,14 +1366,14 @@ GLOBAL_LIST_EMPTY(features_by_species)
// Get the temperature of the environment for area
var/area_temp = humi.get_temperature(environment)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
//Special handling for getting liquids temperature
if(isturf(humi.loc))
var/turf/T = humi.loc
if(T.liquids && T.liquids.liquid_state > LIQUID_STATE_PUDDLE)
var/submergment_percent = SUBMERGEMENT_PERCENT(humi, T.liquids)
area_temp = (area_temp*(1-submergment_percent)) + (T.liquids.temp * submergment_percent)
- //SKYRAT EDIT END
+ //NOVA EDIT END
// Get the insulation value based on the area's temp
var/thermal_protection = humi.get_insulation_protection(area_temp)
@@ -1648,7 +1648,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
former_tail_owner.clear_mood_event("tail_balance_lost")
former_tail_owner.clear_mood_event("wrong_tail_regained")
-/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR
+/* NOVA EDIT REMOVAL - MOVED TO MODULAR
/// Returns a list of strings representing features this species has.
/// Used by the preferences UI to know what buttons to show.
@@ -2164,11 +2164,11 @@ GLOBAL_LIST_EMPTY(features_by_species)
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
SPECIES_PERK_ICON = "comment",
SPECIES_PERK_NAME = "Native Speaker",
- /* SKYRAT EDIT - Digitigrade customization - ORIGINAL:
+ /* NOVA EDIT - Digitigrade customization - ORIGINAL:
SPECIES_PERK_DESC = "Alongside [initial(common_language.name)], [plural_form] gain the ability to speak [english_list(bonus_languages)].",
- */ // ORIGINAL END - SKYRAT EDIT START:
+ */ // ORIGINAL END - NOVA EDIT START:
SPECIES_PERK_DESC = "Alongside [initial(common_language.name)], [plural_form] commonly speak [english_list(bonus_languages)].",
- // SKYRAT EDIT END
+ // NOVA EDIT END
))
else
@@ -2186,7 +2186,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
new_species ||= target.dna.species //If no new species is provided, assume its src.
//Note for future: Potentionally add a new C.dna.species() to build a template species for more accurate limb replacement
- // SKYRAT EDIT ADDITION START - Synth digitigrade sanitization
+ // NOVA EDIT ADDITION START - Synth digitigrade sanitization
var/ignore_digi = FALSE // You can jack into this var with other checks, if you want.
if(issynthetic(target))
var/list/chassis = target.dna.mutant_bodyparts[MUTANT_SYNTH_CHASSIS]
@@ -2197,21 +2197,21 @@ GLOBAL_LIST_EMPTY(features_by_species)
body_choice = chassis_accessory[chassis[MUTANT_INDEX_NAME]]
if(body_choice && !body_choice.is_digi_compatible)
ignore_digi = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/list/final_bodypart_overrides = new_species.bodypart_overrides.Copy()
- if(!ignore_digi && ((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED)) //if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) // SKYRAT EDIT - Digitigrade customization - ORIGINAL
- /* SKYRAT EDIT - Digitigrade customization - ORIGINAL:
+ if(!ignore_digi && ((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED)) //if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) // NOVA EDIT - Digitigrade customization - ORIGINAL
+ /* NOVA EDIT - Digitigrade customization - ORIGINAL:
final_bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade
final_bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade
- */ // ORIGINAL END - SKYRAT EDIT START:
+ */ // ORIGINAL END - NOVA EDIT START:
var/obj/item/bodypart/leg/right/r_leg = new_species.bodypart_overrides[BODY_ZONE_R_LEG]
if(r_leg)
final_bodypart_overrides[BODY_ZONE_R_LEG] = initial(r_leg.digitigrade_type)
var/obj/item/bodypart/leg/left/l_leg = new_species.bodypart_overrides[BODY_ZONE_L_LEG]
if(l_leg)
final_bodypart_overrides[BODY_ZONE_L_LEG] = initial(l_leg.digitigrade_type)
- // SKYRAT EDIT END
+ // NOVA EDIT END
for(var/obj/item/bodypart/old_part as anything in target.bodyparts)
if((old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) || (old_part.bodypart_flags & BODYPART_IMPLANTED))
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 7f6d0b05594..150b73a486b 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -60,10 +60,10 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
/mob/living/carbon/proc/Drain()
become_husk(CHANGELING_DRAIN)
- //SKYRAT EDIT REMOVAL START
+ //NOVA EDIT REMOVAL START
/*
ADD_TRAIT(src, TRAIT_BADDNA, CHANGELING_DRAIN)
*/
- //SKYRAT EDIT END
+ //NOVA EDIT END
blood_volume = 0
return TRUE
diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm
index 44fe6d1a1c0..31063a502b2 100644
--- a/code/modules/mob/living/carbon/human/dummy.dm
+++ b/code/modules/mob/living/carbon/human/dummy.dm
@@ -18,7 +18,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
/mob/living/carbon/human/dummy/attach_rot(mapload)
return
-/mob/living/carbon/human/dummy/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // SKYRAT EDIT - Customization
+/mob/living/carbon/human/dummy/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // NOVA EDIT - Customization
harvest_organs()
return ..()
@@ -87,7 +87,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
return consistent_entry
/proc/create_consistent_human_dna(mob/living/carbon/human/target)
- /* SKYRAT EDIT START - Customization - ORIGINAL:
+ /* NOVA EDIT START - Customization - ORIGINAL:
target.dna.features["mcolor"] = COLOR_VIBRANT_LIME
target.dna.features["ethcolor"] = COLOR_WHITE
target.dna.features["body_markings"] = get_consistent_feature_entry(GLOB.body_markings_list)
@@ -102,10 +102,10 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
target.dna.features["tail_cat"] = get_consistent_feature_entry(GLOB.tails_list_human) // it's a lie
target.dna.features["tail_lizard"] = get_consistent_feature_entry(GLOB.tails_list_lizard)
target.dna.features["pod_hair"] = get_consistent_feature_entry(GLOB.pod_hair_list)
- */ // ORIGINAL END - SKYRAT EDIT START
+ */ // ORIGINAL END - NOVA EDIT START
target.dna.features["mcolor"] = COLOR_VIBRANT_LIME
target.dna.features["ethcolor"] = COLOR_WHITE
- // SKYRAT EDIT END
+ // NOVA EDIT END
target.dna.initialize_dna(create_mutation_blocks = FALSE, randomize_features = FALSE)
// UF and UI are nondeterministic, even though the features are the same some blocks will randomize slightly
// In practice this doesn't matter, but this is for the sake of 100%(ish) consistency
@@ -168,9 +168,9 @@ GLOBAL_LIST_EMPTY(dummy_mob_list)
if(ishuman(target))
var/mob/living/carbon/human/human_target = target
human_target.copy_clothing_prefs(copycat)
- // SKYRAT EDIT
+ // NOVA EDIT
target?.client?.prefs?.apply_prefs_to(copycat, TRUE)
- // SKYRAT EDIT END
+ // NOVA EDIT END
copycat.updateappearance(icon_update=TRUE, mutcolor_update=TRUE, mutations_overlay_update=TRUE)
else
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 692dc52c798..e3bbca427b2 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -82,7 +82,7 @@
only_forced_audio = TRUE
vary = TRUE
-/* - SKYRAT EDIT REMOVAL: EMOTES
+/* - NOVA EDIT REMOVAL: EMOTES
/datum/emote/living/carbon/human/scream/get_sound(mob/living/carbon/human/user)
if(!istype(user))
return
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 9e36124c5a1..1766bf109a8 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -9,10 +9,10 @@
var/obscure_name
var/obscure_examine
- // SKYRAT EDIT START
+ // NOVA EDIT START
var/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(isliving(user))
var/mob/living/L = user
@@ -22,7 +22,7 @@
obscure_name = TRUE
obscure_examine = TRUE
- //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION
+ //NOVA EDIT CHANGE BEGIN - CUSTOMIZATION
var/species_visible
var/species_name_string
if(skipface || get_visible_name() == "Unknown")
@@ -40,15 +40,15 @@
else
species_name_string = ", [prefix_a_or_an(dna.species.name)] [dna.species.name] !"
- . = list("This is [!obscure_name ? name : "Unknown"] [species_name_string]", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE
+ . = list("This is [!obscure_name ? name : "Unknown"] [species_name_string]", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE
if(species_visible) //If they have a custom species shown, show the real one too
if(!dna.species.lore_protected && dna.features["custom_species"])
. += "[t_He] [t_is] [prefix_a_or_an(dna.species.name)] [dna.species.name]!"
else
. += "You can't make out what species they are."
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
- /* SKYRAT EDIT REMOVAL
+ /* NOVA EDIT REMOVAL
var/apparent_species
if(dna?.species && !skipface)
apparent_species = ", \an [dna.species.name]"
@@ -61,7 +61,7 @@
var/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- */ //SKYRAT EDIT END
+ */ //NOVA EDIT END
//uniform
if(w_uniform && !(obscured & ITEM_SLOT_ICLOTHING) && !(w_uniform.item_flags & EXAMINE_SKIP))
@@ -141,7 +141,7 @@
. += wear_id.get_id_examine_strings(user)
- . += EXAMINE_SECTION_BREAK // SKYRAT EDIT ADDITION - hr sections
+ . += EXAMINE_SECTION_BREAK // NOVA EDIT ADDITION - hr sections
//Status effects
var/list/status_examines = get_status_effect_examinations()
@@ -366,7 +366,7 @@
if(!key)
msg += "[span_deadsay("[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.")]\n"
else if(!client)
- msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.")]\n" // SKYRAT EDIT CHANGE - SSD_INDICATOR - ORIGINAL: msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.")]\n"
+ msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon.")]\n" // NOVA EDIT CHANGE - SSD_INDICATOR - ORIGINAL: msg += "[span_deadsay("[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.")]\n"
var/scar_severity = 0
for(var/i in all_scars)
@@ -422,10 +422,10 @@
if(target_record)
. += "\[Medical evaluation\] "
. += "\[See quirks\] "
- //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS
+ //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS
if(target_record && length(target_record.past_medical_records) > RECORDS_INVISIBLE_THRESHOLD)
. += "\[View medical records\] "
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(HAS_TRAIT(user, TRAIT_SECURITY_HUD))
if(!user.stat && user != src)
@@ -445,18 +445,18 @@
"\[Add citation\] ",
"\[Add crime\] ",
"\[Add note\] "), "")
- // SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS
+ // NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS
if(target_record && length(target_record.past_security_records) > RECORDS_INVISIBLE_THRESHOLD)
. += "Past security records: \[View past security records\] "
if (target_record && length(target_record.past_general_records) > RECORDS_INVISIBLE_THRESHOLD)
. += "\[View general records\] "
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
else if(isobserver(user))
. += span_info("Quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)]")
. += " "
- //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS
+ //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS
if(isobserver(user) || user.mind?.can_see_exploitables || user.mind?.has_exploitables_override)
var/datum/record/crew/target_records = find_record(perpname)
if(target_records)
@@ -466,16 +466,16 @@
. += "\[View background info\] "
if((length(exploitable_text) > RECORDS_INVISIBLE_THRESHOLD) && ((exploitable_text) != EXPLOITABLE_DEFAULT_TEXT))
. += "\[View exploitable info\] "
- //SKYRAT EDIT END
- //SKYRAT EDIT ADDITION BEGIN - GUNPOINT
+ //NOVA EDIT END
+ //NOVA EDIT ADDITION BEGIN - GUNPOINT
if(gunpointing)
. += "[t_He] [t_is] holding [gunpointing.target.name] at gunpoint with [gunpointing.aimed_gun.name]! \n"
if(length(gunpointed))
for(var/datum/gunpoint/GP in gunpointed)
. += "[GP.source.name] [GP.source.p_are()] holding [t_him] at gunpoint with [GP.aimed_gun.name]! \n"
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
for(var/genital in GLOB.possible_genitals)
if(dna.species.mutant_bodyparts[genital])
var/datum/sprite_accessory/genital/G = GLOB.sprite_accessories[genital][dna.species.mutant_bodyparts[genital][MUTANT_INDEX_NAME]]
@@ -535,10 +535,10 @@
return
var/age_text
switch(age)
- if(-INFINITY to 17) // SKYRAT EDIT ADD START -- AGE EXAMINE
+ if(-INFINITY to 17) // NOVA EDIT ADD START -- AGE EXAMINE
age_text = "too young to be here"
if(18 to 25)
- age_text = "a young adult" // SKYRAT EDIT END
+ age_text = "a young adult" // NOVA EDIT END
if(26 to 35)
age_text = "of adult age"
if(36 to 55)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ac65691efd3..afca9c63e3d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -23,7 +23,7 @@
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_FACE_ACT, PROC_REF(clean_face))
AddComponent(/datum/component/personal_crafting)
- AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) //SKYRAT EDIT CHANGE - AESTHETICS
+ AddElement(/datum/element/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) //NOVA EDIT CHANGE - AESTHETICS
AddComponent(/datum/component/bloodysoles/feet)
AddElement(/datum/element/ridable, /datum/component/riding/creature/human)
AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human/, should_strip))
@@ -32,7 +32,7 @@
)
AddElement(/datum/element/connect_loc, loc_connections)
GLOB.human_list += src
- SSopposing_force.give_opfor_button(src) //SKYRAT EDIT - OPFOR SYSTEM
+ SSopposing_force.give_opfor_button(src) //NOVA EDIT - OPFOR SYSTEM
/mob/living/carbon/human/proc/setup_physiology()
physiology = new()
@@ -194,12 +194,12 @@
to_chat(human_user, "Detected physiological traits: \n[quirkstring] ")
else
to_chat(usr, "No physiological traits found. ")
- //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS
+ //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS
if(href_list["medrecords"])
to_chat(usr, "Medical Record: [target_record.past_medical_records]")
if(href_list["genrecords"])
to_chat(usr, "General Record: [target_record.past_general_records]")
- //SKYRAT EDIT END
+ //NOVA EDIT END
return //Medical HUD ends here.
if(href_list["hud"] == "s")
@@ -267,7 +267,7 @@
return
- //SKYRAT EDIT ADDITION BEGIN - EXAMINE RECORDS
+ //NOVA EDIT ADDITION BEGIN - EXAMINE RECORDS
if(href_list["genrecords"])
if(!human_user.canUseHUD())
return
@@ -281,7 +281,7 @@
if(!HAS_TRAIT(human_user, TRAIT_SECURITY_HUD))
return
to_chat(human_user, "Security Record: [target_record.past_security_records]")
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(href_list["add_citation"])
var/max_fine = CONFIG_GET(number/maxfine)
@@ -321,7 +321,7 @@
return
- //SKYRAT EDIT ADDITION BEGIN - VIEW RECORDS
+ //NOVA EDIT ADDITION BEGIN - VIEW RECORDS
if(href_list["bgrecords"])
if(isobserver(usr) || usr.mind.can_see_exploitables || usr.mind.has_exploitables_override)
var/examined_name = get_face_name(get_id_name(""))
@@ -332,7 +332,7 @@
var/examined_name = get_face_name(get_id_name("")) //Named as such because this is the name we see when we examine
var/datum/record/crew/target_record = find_record(examined_name)
to_chat(usr, "Exploitable information: [target_record.exploitable_information]")
- //SKYRAT EDIT END
+ //NOVA EDIT END
..() //end of this massive fucking chain. TODO: make the hud chain not spooky. - Yeah, great job doing that.
@@ -432,7 +432,7 @@
if(istype(head, /obj/item/clothing/head/wizard))
threatcount += 2
- /* SKYRAT EDIT - REMOVAL
+ /* NOVA EDIT - REMOVAL
//Check for nonhuman scum
if(dna && dna.species.id && dna.species.id != "human")
threatcount += 1
@@ -816,10 +816,10 @@
var/datum/quirk/quirk_type = type
if(initial(quirk_type.abstract_parent_type) == type)
continue
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(initial(quirk_type.erp_quirk) && CONFIG_GET(flag/disable_erp_preferences))
continue
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/qname = initial(quirk_type.name)
options[has_quirk(quirk_type) ? "[qname] (Remove)" : "[qname] (Add)"] = quirk_type
var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in sort_list(options)
@@ -950,11 +950,11 @@
skills_space = " very quickly"
else if(carrydelay <= 4 SECONDS)
skills_space = " quickly"
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
else if(HAS_TRAIT(target, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED))
visible_message(span_warning("[src] tries to carry [target], but they are too heavy!"))
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
visible_message(span_notice("[src] starts[skills_space] lifting [target] onto [p_their()] back..."),
span_notice("You[skills_space] start to lift [target] onto your back..."))
if(!do_after(src, carrydelay, target))
@@ -981,7 +981,7 @@
if(target.incapacitated(IGNORE_GRAB) || incapacitated(IGNORE_GRAB))
target.visible_message(span_warning("[target] can't hang onto [src]!"))
return
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(HAS_TRAIT(target, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED))
target.visible_message(span_warning("[target] is too heavy for [src] to carry!"))
var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
@@ -1003,7 +1003,7 @@
if(get_turf(target) != get_turf(src))
target.throw_at(get_turf(src), 1, 1, spin=FALSE, quickstart=FALSE)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
return buckle_mob(target, TRUE, TRUE, RIDER_NEEDS_ARMS)
@@ -1075,7 +1075,7 @@
if (!isnull(race))
dna.species = new race
-/mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // SKYRAT EDIT - Customization
+/mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update = TRUE, pref_load = FALSE, list/override_features, list/override_mutantparts, list/override_markings, retain_features = FALSE, retain_mutantparts = FALSE) // NOVA EDIT - Customization
. = ..()
if(use_random_name)
fully_replace_character_name(real_name, dna.species.random_name())
diff --git a/code/modules/mob/living/carbon/human/human_context.dm b/code/modules/mob/living/carbon/human/human_context.dm
index f0fd30f6d49..0321ba5c9ca 100644
--- a/code/modules/mob/living/carbon/human/human_context.dm
+++ b/code/modules/mob/living/carbon/human/human_context.dm
@@ -17,7 +17,7 @@
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Strangle"
else
return .
- // SKYRAT EDIT START - screentips for grab interactions (slams/suplexes/dislocations)
+ // NOVA EDIT START - screentips for grab interactions (slams/suplexes/dislocations)
if(user.combat_mode && user.grab_state > GRAB_PASSIVE)
switch(deprecise_zone(user.zone_selected))
if (BODY_ZONE_HEAD)
@@ -27,7 +27,7 @@
context[SCREENTIP_CONTEXT_ALT_LMB] = "Suplex"
else
context[SCREENTIP_CONTEXT_ALT_LMB] = "Dislocate"
- // SKYRAT EDIT END
+ // NOVA EDIT END
else
context[SCREENTIP_CONTEXT_CTRL_LMB] = "Pull"
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 825e2b6a56b..4e15ac814c7 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -184,7 +184,7 @@
apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, MELEE))
return TRUE
-//SKYRAT EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm
+//NOVA EDIT REMOVAL BEGIN - SKYRAT_XENO_REDO - Moved to: modular_nova\modules\xenos_skyrat_redo\code\human_defense.dm
/*
/mob/living/carbon/human/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers)
. = ..()
@@ -238,7 +238,7 @@
return TRUE
apply_damage(damage, BRUTE, affecting, armor_block)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers)
@@ -256,30 +256,6 @@
var/armor_block = run_armor_check(affecting, MELEE)
apply_damage(damage, BRUTE, affecting, armor_block)
-/mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M, list/modifiers)
- . = ..()
- if(!.) // slime attack failed
- return
- var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
- if(!damage)
- return
- var/wound_mod = -45 // 25^1.4=90, 90-45=45
- if(M.is_adult)
- damage += rand(5, 10)
- wound_mod = -90 // 35^1.4=145, 145-90=55
-
- if(check_block(M, damage, "the [M.name]"))
- return FALSE
-
- var/dam_zone = dismembering_strike(M, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
- if(!dam_zone) //Dismemberment successful
- return TRUE
-
- var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(dam_zone))
- var/armor_block = run_armor_check(affecting, MELEE)
- apply_damage(damage, BRUTE, affecting, armor_block, wound_bonus=wound_mod)
-
-
/mob/living/carbon/human/ex_act(severity, target, origin)
if(HAS_TRAIT(src, TRAIT_BOMBIMMUNE))
return FALSE
@@ -397,14 +373,14 @@
//Don't go further if the shock was blocked/too weak.
if(!.)
return
- //SKYRAT EDIT BEGIN: MAKES POWERFUL SHOCKS HAVE A CHANCE TO STOP YOUR HEART. DANGER
+ //NOVA EDIT BEGIN: MAKES POWERFUL SHOCKS HAVE A CHANCE TO STOP YOUR HEART. DANGER
if(can_heartattack() && !(flags & SHOCK_ILLUSION) && shock_damage >= 70)
if(shock_damage * siemens_coeff >= 1 && prob(30))//Higher chance to disrupt the pacemaker cells
var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
heart.Stop()
visible_message("[src.name] briefly twitches; before falling limp - their breathing irratic and chest spasming violently! ", \
"You feel your heart thump eratically; before ceasing to beat, a violent twitch overcoming your form! ", ignored_mobs=src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!(flags & SHOCK_ILLUSION))
if(shock_damage * siemens_coeff >= 5)
force_say()
@@ -597,10 +573,10 @@
body_part.check_for_injuries(src, combined_msg)
- //SKYRAT EDIT ADDITION BEGIN - MEDICAL
+ //NOVA EDIT ADDITION BEGIN - MEDICAL
if(body_part.current_gauze)
combined_msg += "\t [span_notice("Your [body_part.name] is [body_part.current_gauze.get_gauze_usage_prefix()] with [body_part.current_gauze.get_gauze_description()] .")]"
- //SKYRAT EDIT END
+ //NOVA EDIT END
for(var/t in missing)
combined_msg += span_boldannounce("Your [parse_zone(t)] is missing!")
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index c0a1836dcfb..d2f3576b6a9 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -5,7 +5,7 @@
icon = 'icons/mob/human/human.dmi'
icon_state = "human_basic"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,PERMIT_HUD, DNR_HUD) //SKYRAT EDIT ADDITION - PERMIT_HUD, DNR_HUD
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPSEC_FIRST_HUD,IMPSEC_SECOND_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,PERMIT_HUD, DNR_HUD) //NOVA EDIT ADDITION - PERMIT_HUD, DNR_HUD
hud_type = /datum/hud/human
pressure_resistance = 25
can_buckle = TRUE
@@ -14,8 +14,8 @@
can_be_shoved_into = TRUE
initial_language_holder = /datum/language_holder/empty // We get stuff from our species
- maxHealth = HUMAN_MAXHEALTH //SKYRAT EDIT ADDITION
- health = HUMAN_MAXHEALTH //SKYRAT EDIT ADDITION
+ maxHealth = HUMAN_MAXHEALTH //NOVA EDIT ADDITION
+ health = HUMAN_MAXHEALTH //NOVA EDIT ADDITION
//Hair colour and style
var/hair_color = "#000000"
@@ -55,7 +55,7 @@
var/jumpsuit_style = PREF_SUIT //suit/skirt
var/datum/scream_type/selected_scream //SKRYAT EDIT ADDITION
- var/datum/laugh_type/selected_laugh //SKYRAT EDIT ADDITION
+ var/datum/laugh_type/selected_laugh //NOVA EDIT ADDITION
//Equipment slots
var/obj/item/clothing/wear_suit = null
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index a20758b17ae..7e7af092b99 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -91,7 +91,7 @@
//Useful when player is being seen by other mobs
/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown")
var/obj/item/storage/wallet/wallet = wear_id
- var/obj/item/modular_computer/pda/pda = wear_id
+ var/obj/item/modular_computer/pda = wear_id
var/obj/item/card/id/id = wear_id
if(HAS_TRAIT(src, TRAIT_UNKNOWN))
. = if_no_id //You get NOTHING, no id name, good day sir
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
index d79b6f8623c..02f1fdf1b56 100644
--- a/code/modules/mob/living/carbon/human/human_stripping.dm
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/id
key = STRIPPABLE_ITEM_ID
item_slot = ITEM_SLOT_ID
- can_be_silent = TRUE //SKYRAT EDIT ADDITION
+ can_be_silent = TRUE //NOVA EDIT ADDITION
/datum/strippable_item/mob_item_slot/belt
key = STRIPPABLE_ITEM_BELT
@@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
/datum/strippable_item/mob_item_slot/pocket
/// Which pocket we're referencing. Used for visible text.
var/pocket_side
- can_be_silent = TRUE //SKYRAT EDIT ADDITION
+ can_be_silent = TRUE //NOVA EDIT ADDITION
/datum/strippable_item/mob_item_slot/pocket/get_obscuring(atom/source)
return isnull(get_item(source)) \
@@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
var/result = start_unequip_mob(item, source, user, POCKET_STRIP_DELAY)
- if (!(result || HAS_TRAIT(user, TRAIT_STICKY_FINGERS))) //SKYRAT EDIT ADDITION original if (!result)
+ if (!(result || HAS_TRAIT(user, TRAIT_STICKY_FINGERS))) //NOVA EDIT ADDITION original if (!result)
warn_owner(source)
return result
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index 077ebe669b7..996a67ec26a 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -101,49 +101,49 @@ There are several things that need to be remembered:
var/handled_by_bodytype = TRUE
var/icon_file
var/woman
- var/digi // SKYRAT EDIT ADDITION - Digi female gender shaping
- var/female_sprite_flags = uniform.female_sprite_flags // SKYRAT EDIT ADDITION - Digi female gender shaping
- var/mutant_styles = NONE // SKYRAT EDIT ADDITON - mutant styles to pass down to build_worn_icon.
+ var/digi // NOVA EDIT ADDITION - Digi female gender shaping
+ var/female_sprite_flags = uniform.female_sprite_flags // NOVA EDIT ADDITION - Digi female gender shaping
+ var/mutant_styles = NONE // NOVA EDIT ADDITON - mutant styles to pass down to build_worn_icon.
//BEGIN SPECIES HANDLING
if((bodytype & BODYTYPE_MONKEY) && (uniform.supports_variations_flags & CLOTHING_MONKEY_VARIATION))
- icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // SKYRAT EDIT CHANGE - ORIGINAL: icon_file = MONKEY_UNIFORM_FILE
+ icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // NOVA EDIT CHANGE - ORIGINAL: icon_file = MONKEY_UNIFORM_FILE
else if((bodytype & BODYTYPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION))
- icon_file = uniform.worn_icon_digi || DIGITIGRADE_UNIFORM_FILE // SKYRAT EDIT CHANGE - ORIGINAL: icon_file = DIGITIGRADE_UNIFORM_FILE
- digi = TRUE // SKYRAT EDIT ADDITION - Digi female gender shaping
- // SKYRAT EDIT ADDITION - birbs
+ icon_file = uniform.worn_icon_digi || DIGITIGRADE_UNIFORM_FILE // NOVA EDIT CHANGE - ORIGINAL: icon_file = DIGITIGRADE_UNIFORM_FILE
+ digi = TRUE // NOVA EDIT ADDITION - Digi female gender shaping
+ // NOVA EDIT ADDITION - birbs
else if(bodytype & BODYTYPE_CUSTOM)
icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_UNIFORM, w_uniform, src) // Might have to refactor how this works eventually, maybe.
- // SKYRAT EDIT END
+ // NOVA EDIT END
//Female sprites have lower priority than digitigrade sprites
- if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh // SKYRAT EDIT CHANGE - ORIGINAL: else if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM))
+ if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh // NOVA EDIT CHANGE - ORIGINAL: else if(dna.species.sexes && (bodytype & BODYTYPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM))
woman = TRUE
- // SKYRAT EDIT ADDITION START - Digi female gender shaping
+ // NOVA EDIT ADDITION START - Digi female gender shaping
if(digi)
mutant_styles |= STYLE_DIGI // for passing to wear_female_version
if(!(female_sprite_flags & FEMALE_UNIFORM_DIGI_FULL))
female_sprite_flags &= ~FEMALE_UNIFORM_FULL // clear the FEMALE_UNIFORM_DIGI_FULL bit if it was set, we don't want that.
female_sprite_flags |= FEMALE_UNIFORM_TOP_ONLY // And set the FEMALE_UNIFORM_TOP bit if it is unset.
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
if(!icon_exists(icon_file, RESOLVE_ICON_STATE(uniform)))
icon_file = DEFAULT_UNIFORM_FILE
handled_by_bodytype = FALSE
- // SKYRAT EDIT ADDITION START - Taur-friendly suits!
+ // NOVA EDIT ADDITION START - Taur-friendly suits!
if(bodytype & BODYTYPE_TAUR)
if(istype(uniform) && uniform.gets_cropped_on_taurs)
mutant_styles |= get_taur_mode()
- // SKYRAT EDIT END
+ // NOVA EDIT END
//END SPECIES HANDLING
uniform_overlay = uniform.build_worn_icon(
default_layer = UNIFORM_LAYER,
default_icon_file = icon_file,
isinhands = FALSE,
- female_uniform = woman ? female_sprite_flags : null, // SKYRAT EDIT CHANGE - Digi female gender shaping - ORIGINAL: female_uniform = woman ? uniform.female_sprite_flags : null,
+ female_uniform = woman ? female_sprite_flags : null, // NOVA EDIT CHANGE - Digi female gender shaping - ORIGINAL: female_uniform = woman ? uniform.female_sprite_flags : null,
override_state = target_overlay,
override_file = handled_by_bodytype ? icon_file : null,
- mutant_styles = mutant_styles, // SKYRAT EDIT ADDITION - Taur-friendly uniforms!
+ mutant_styles = mutant_styles, // NOVA EDIT ADDITION - Taur-friendly uniforms!
)
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
@@ -209,16 +209,16 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/hands.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_GLOVES, gloves, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
var/feature_y_offset = 0
//needs to be typed, hand_bodyparts can have nulls
@@ -252,21 +252,21 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/eyes.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_GLASSES, glasses, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_head.worn_glasses_offset?.apply_offset(glasses_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[GLASSES_LAYER] = glasses_overlay
apply_overlay(GLASSES_LAYER)
@@ -291,21 +291,21 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/ears.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_EARS, ears, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_head.worn_ears_offset?.apply_offset(ears_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[EARS_LAYER] = ears_overlay
apply_overlay(EARS_LAYER)
@@ -325,7 +325,7 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/neck.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_NECK, wear_neck, src)
@@ -338,15 +338,15 @@ There are several things that need to be remembered:
if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = snout_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_chest?.worn_belt_offset?.apply_offset(neck_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[NECK_LAYER] = neck_overlay
apply_overlay(NECK_LAYER)
@@ -370,14 +370,14 @@ There are several things that need to be remembered:
var/icon_file = DEFAULT_SHOES_FILE
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
var/mutant_override = FALSE
if((bodytype & BODYTYPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION))
var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG)
if(leg.limb_id == "digitigrade")//Snowflakey and bad. But it makes it look consistent.
- icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SHOES_FILE // SKYRAT EDIT CHANGE
- mutant_override = TRUE // SKYRAT EDIT ADDITION
+ icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SHOES_FILE // NOVA EDIT CHANGE
+ mutant_override = TRUE // NOVA EDIT ADDITION
else if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_SHOES, shoes, src)
if(species_icon_file)
@@ -385,9 +385,9 @@ There are several things that need to be remembered:
mutant_override = TRUE
else if(bodytype & BODYTYPE_HIDE_SHOES)
return // We just don't want shoes that float if we're not displaying legs (useful for taurs, for now)
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
if(!shoes_overlay)
return
@@ -444,7 +444,7 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/head/default.dmi'
- // SKYRAT EDIT ADDITION - This needs to be refactored.
+ // NOVA EDIT ADDITION - This needs to be refactored.
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_HEAD, head, src)
@@ -456,15 +456,15 @@ There are several things that need to be remembered:
if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = snout_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_head?.worn_head_offset?.apply_offset(head_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[HEAD_LAYER] = head_overlay
update_mutant_bodyparts()
@@ -486,22 +486,22 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/belt.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_BELT, belt, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_chest?.worn_belt_offset?.apply_offset(belt_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[BELT_LAYER] = belt_overlay
apply_overlay(BELT_LAYER)
@@ -518,14 +518,14 @@ There are several things that need to be remembered:
update_hud_wear_suit(worn_item)
var/icon_file = DEFAULT_SUIT_FILE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
var/mutant_styles = NONE
//More currently unused digitigrade handling
if(bodytype & BODYTYPE_DIGITIGRADE)
if(worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)
- icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SUIT_FILE // SKYRAT EDIT CHANGE
+ icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SUIT_FILE // NOVA EDIT CHANGE
mutant_override = TRUE
else if(bodytype & BODYTYPE_CUSTOM)
@@ -538,15 +538,15 @@ There are several things that need to be remembered:
var/obj/item/clothing/suit/worn_suit = wear_suit
if(istype(worn_suit) && worn_suit.gets_cropped_on_taurs)
mutant_styles |= get_taur_mode()
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, mutant_styles = mutant_styles) // SKYRAT EDIT CHANGE - Mutant bodytypes and Taur-friendly suits!
+ var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, mutant_styles = mutant_styles) // NOVA EDIT CHANGE - Mutant bodytypes and Taur-friendly suits!
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_chest?.worn_suit_offset?.apply_offset(suit_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[SUIT_LAYER] = suit_overlay
update_body_parts()
update_mutant_bodyparts()
@@ -595,7 +595,7 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/mask.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_MASK, wear_mask, src)
@@ -607,14 +607,14 @@ There are several things that need to be remembered:
if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = snout_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_head.worn_mask_offset?.apply_offset(mask_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[FACEMASK_LAYER] = mask_overlay
apply_overlay(FACEMASK_LAYER)
@@ -633,24 +633,24 @@ There are several things that need to be remembered:
update_hud_back(worn_item)
var/icon_file = 'icons/mob/clothing/back.dmi'
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/mutant_override = FALSE
if(bodytype & BODYTYPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_MISC, back, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
- back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // SKYRAT EDIT CHANGE
+ back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null) // NOVA EDIT CHANGE
if(!back_overlay)
return
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(!mutant_override)
my_chest?.worn_back_offset?.apply_offset(back_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
overlays_standing[BACK_LAYER] = back_overlay
apply_overlay(BACK_LAYER)
@@ -693,12 +693,12 @@ There are several things that need to be remembered:
hands += hand_overlay
return hands
-/proc/wear_female_version(t_color, icon, layer, type, greyscale_colors, mutant_styles) // SKYRAT EDIT CHANGE - Digi female gender shaping - ORIGINAL: /proc/wear_female_version(t_color, icon, layer, type, greyscale_colors)
- var/index = "[t_color]-[greyscale_colors][(mutant_styles & STYLE_DIGI) ? "-d" : ""]" // SKYRAT EDIT CHANGE - Digi female gender shaping - Original: var/index = "[t_color]-[greyscale_colors]]"
+/proc/wear_female_version(t_color, icon, layer, type, greyscale_colors, mutant_styles) // NOVA EDIT CHANGE - Digi female gender shaping - ORIGINAL: /proc/wear_female_version(t_color, icon, layer, type, greyscale_colors)
+ var/index = "[t_color]-[greyscale_colors][(mutant_styles & STYLE_DIGI) ? "-d" : ""]" // NOVA EDIT CHANGE - Digi female gender shaping - Original: var/index = "[t_color]-[greyscale_colors]]"
var/icon/female_clothing_icon = GLOB.female_clothing_icons[index]
if(!female_clothing_icon) //Create standing/laying icons if they don't exist
generate_female_clothing(index, t_color, icon, type)
- return mutable_appearance(GLOB.female_clothing_icons[index], layer = -layer, icon_state = t_color) // SKYRAT EDIT - Taur-friendly uniforms and suits - Adds `icon_state = t_color`
+ return mutable_appearance(GLOB.female_clothing_icons[index], layer = -layer, icon_state = t_color) // NOVA EDIT - Taur-friendly uniforms and suits - Adds `icon_state = t_color`
/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers)
var/list/out = new
@@ -816,7 +816,7 @@ in this situation default_icon_file is expected to match either the lefthand_ or
female_uniform: A value matching a uniform item's female_sprite_flags var, if this is anything but NO_FEMALE_UNIFORM, we
generate/load female uniform sprites matching all previously decided variables
-mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT EDIT ADDITION - Taur-friendly suits and uniforms
+mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // NOVA EDIT ADDITION - Taur-friendly suits and uniforms
*/
/obj/item/proc/build_worn_icon(
default_layer = 0,
@@ -826,7 +826,7 @@ mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT E
override_state = null,
override_file = null,
use_height_offset = TRUE,
- mutant_styles = NONE, // SKYRAT EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument)
+ mutant_styles = NONE, // NOVA EDIT ADD - Further outfit modification for outfits (added `mutant_styles` argument)
)
//Find a valid icon_state from variables+arguments
@@ -847,17 +847,17 @@ mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT E
var/mutable_appearance/standing
if(female_uniform)
- standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors, mutant_styles) //should layer2use be in sync with the adjusted value below? needs testing - shiz // SKYRAT EDIT CHANGE - ORIGINAL: standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors)
+ standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors, mutant_styles) //should layer2use be in sync with the adjusted value below? needs testing - shiz // NOVA EDIT CHANGE - ORIGINAL: standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors)
if(!standing)
standing = mutable_appearance(file2use, t_state, -layer2use)
- // SKYRAT EDIT ADDITION START - Taur-friendly uniforms and suits
+ // NOVA EDIT ADDITION START - Taur-friendly uniforms and suits
if(mutant_styles & STYLE_TAUR_ALL)
standing = wear_taur_version(standing.icon_state, standing.icon, layer2use, female_uniform, greyscale_colors)
- // SKYRAT EDIT END
+ // NOVA EDIT END
//Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
- var/list/worn_overlays = worn_overlays(standing, isinhands, file2use, mutant_styles) // SKYRAT EDIT CHANGE - ORIGINAL: var/list/worn_overlays = worn_overlays(standing, isinhands)
+ var/list/worn_overlays = worn_overlays(standing, isinhands, file2use, mutant_styles) // NOVA EDIT CHANGE - ORIGINAL: var/list/worn_overlays = worn_overlays(standing, isinhands)
if(worn_overlays?.len)
if(!isinhands && default_layer && ishuman(loc) && use_height_offset)
var/mob/living/carbon/human/human_loc = loc
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 602ab7d24c1..b9beca107f4 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -179,12 +179,12 @@
return
gloves = equipping
- //SKYRAT EDIT ADDITION - ERP UPDATE
+ //NOVA EDIT ADDITION - ERP UPDATE
if(gloves.breakouttime)
ADD_TRAIT(src, TRAIT_RESTRAINED, TRAIT_GLOVES)
stop_pulling()
update_mob_action_buttons()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
update_worn_gloves()
if(ITEM_SLOT_FEET)
if(shoes)
@@ -257,33 +257,34 @@
if(I.flags_inv & HIDEJUMPSUIT)
update_worn_undersuit()
- // SKYRAT EDIT ADDITION START - ERP Overlays
+ // NOVA EDIT ADDITION START - ERP Overlays
if(I.flags_inv & HIDESEXTOY)
update_inv_lewd()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
update_worn_oversuit()
else if(I == w_uniform)
if(invdrop)
- if(r_store)
+ if(r_store && IS_ORGANIC_LIMB(src.get_bodypart(BODY_ZONE_R_LEG)))
dropItemToGround(r_store, TRUE) //Again, makes sense for pockets to drop.
- if(l_store)
+ if(l_store && IS_ORGANIC_LIMB(src.get_bodypart(BODY_ZONE_L_LEG)))
dropItemToGround(l_store, TRUE)
- if(wear_id)
- dropItemToGround(wear_id)
- if(belt)
- dropItemToGround(belt)
+ if(IS_ORGANIC_LIMB(src.get_bodypart(BODY_ZONE_CHEST)))
+ if(wear_id)
+ dropItemToGround(wear_id)
+ if(belt)
+ dropItemToGround(belt)
w_uniform = null
update_suit_sensors()
if(!QDELETED(src))
update_worn_undersuit()
else if(I == gloves)
- //SKYRAT EDIT ADDITION - ERP UPDATE
+ //NOVA EDIT ADDITION - ERP UPDATE
if(gloves.breakouttime) //when unequipping a straightjacket
REMOVE_TRAIT(src, TRAIT_RESTRAINED, TRAIT_GLOVES)
drop_all_held_items() //suit is restraining
update_mob_action_buttons() //certain action buttons may be usable again.
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
gloves = null
if(!QDELETED(src))
update_worn_gloves()
diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
index ec384347ec5..53271292dff 100644
--- a/code/modules/mob/living/carbon/human/login.dm
+++ b/code/modules/mob/living/carbon/human/login.dm
@@ -3,7 +3,7 @@
dna?.species?.on_owner_login(src)
- if(SStts.tts_enabled && isnull(voice)) // SKYRAT EDIT - None option for TTS - ORIGINAL: if(SStts.tts_enabled && !voice)
+ if(SStts.tts_enabled && isnull(voice)) // NOVA EDIT - None option for TTS - ORIGINAL: if(SStts.tts_enabled && !voice)
voice = pick(SStts.available_speakers)
if(!LAZYLEN(afk_thefts))
diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm
index 76bf7cc5288..88d46855a5e 100644
--- a/code/modules/mob/living/carbon/human/monkey.dm
+++ b/code/modules/mob/living/carbon/human/monkey.dm
@@ -38,14 +38,6 @@
/mob/living/carbon/human/species/monkey/holodeck/spawn_gibs() // no blood and no gibs
return
-/mob/living/carbon/human/species/monkey/holodeck/has_dna()
- return null
-
-/mob/living/carbon/human/species/monkey/holodeck/create_bodyparts(list/overrides) // done like this in case people add more limbs to monkeys or something
- . = ..()
- for(var/obj/item/bodypart/limb as anything in bodyparts)
- limb.bodypart_flags |= BODYPART_UNREMOVABLE // no farming organs or limbs from these fellers. get a monkey cube
-
GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/punpun)
/mob/living/carbon/human/species/monkey/punpun
diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
index 7850dee6734..e2440ea1caf 100644
--- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm
@@ -11,7 +11,7 @@
siemens_coeff = 0.5 //They thrive on energy
payday_modifier = 1.0
inherent_traits = list(
- // TRAIT_NO_UNDERWEAR, // SKYRAT EDIT - LET THEM WEAR PANTIES
+ // TRAIT_NO_UNDERWEAR, // NOVA EDIT - LET THEM WEAR PANTIES
TRAIT_MUTANT_COLORS,
TRAIT_FIXED_MUTANT_COLORS,
TRAIT_FIXED_HAIRCOLOR,
diff --git a/code/modules/mob/living/carbon/human/species_types/felinid.dm b/code/modules/mob/living/carbon/human/species_types/felinid.dm
index 82a46a39439..1db30b11dbe 100644
--- a/code/modules/mob/living/carbon/human/species_types/felinid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/felinid.dm
@@ -6,12 +6,12 @@
mutant_bodyparts = list("ears" = "Cat", "wings" = "None")
mutantbrain = /obj/item/organ/internal/brain/felinid
mutanttongue = /obj/item/organ/internal/tongue/cat
- /* SKYRAT EDIT REMOVAL - CUSTOMIZATION
+ /* NOVA EDIT REMOVAL - CUSTOMIZATION
mutantears = /obj/item/organ/internal/ears/cat
external_organs = list(
/obj/item/organ/external/tail/cat = "Cat",
)
- */ // SKYRAT EDIT REMOVAL END
+ */ // NOVA EDIT REMOVAL END
inherent_traits = list(
TRAIT_CATLIKE_GRACE,
TRAIT_HATED_BY_DOGS,
@@ -136,7 +136,7 @@
human_for_preview.set_haircolor("#ffcccc", update = FALSE) // pink
human_for_preview.set_hairstyle("Hime Cut", update = TRUE)
- /* SKYRAT EDIT - Making the species menu icons work better - ORIGINAL:
+ /* NOVA EDIT - Making the species menu icons work better - ORIGINAL:
var/obj/item/organ/internal/ears/cat/cat_ears = human_for_preview.get_organ_by_type(/obj/item/organ/internal/ears/cat)
if (cat_ears)
cat_ears.color = human_for_preview.hair_color
@@ -146,7 +146,7 @@
human_for_preview.dna.mutant_bodyparts["ears"] = list(MUTANT_INDEX_NAME = "Cat", MUTANT_INDEX_COLOR_LIST = list(human_for_preview.hair_color))
regenerate_organs(human_for_preview, src, visual_only = TRUE)
human_for_preview.update_body(TRUE)
- // SKYRAT EDIT END
+ // NOVA EDIT END
/datum/species/human/felinid/get_physical_attributes()
return "Felinids are very similar to humans in almost all respects, with their biggest differences being the ability to lick their wounds, \
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 96f91f6a379..2fed7a7351d 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -41,7 +41,7 @@
BODY_ZONE_CHEST = /obj/item/bodypart/chest/jelly,
)
var/datum/action/innate/regenerate_limbs/regenerate_limbs
- var/datum/action/innate/alter_form/alter_form //SKYRAT EDIT ADDITION - CUSTOMIZATION
+ var/datum/action/innate/alter_form/alter_form //NOVA EDIT ADDITION - CUSTOMIZATION
/datum/species/jelly/on_species_gain(mob/living/carbon/new_jellyperson, datum/species/old_species, pref_load)
. = ..()
@@ -49,19 +49,19 @@
regenerate_limbs = new
regenerate_limbs.Grant(new_jellyperson)
update_mail_goodies(new_jellyperson)
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
alter_form = new
alter_form.Grant(new_jellyperson)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
new_jellyperson.AddElement(/datum/element/soft_landing)
/datum/species/jelly/on_species_loss(mob/living/carbon/former_jellyperson, datum/species/new_species, pref_load)
if(regenerate_limbs)
regenerate_limbs.Remove(former_jellyperson)
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
if(alter_form)
alter_form.Remove(former_jellyperson)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
former_jellyperson.RemoveElement(/datum/element/soft_landing)
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 45e34d96bfd..1d431fdb546 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -72,14 +72,14 @@
return randname
-//SKYRAT EDIT REMOVAL BEGIN
+//NOVA EDIT REMOVAL BEGIN
/*
/datum/species/lizard/randomize_features(mob/living/carbon/human/human_mob)
var/list/features = ..()
features["body_markings"] = pick(GLOB.body_markings_list)
return features
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/species/lizard/get_scream_sound(mob/living/carbon/human/lizard)
return pick(
@@ -158,7 +158,7 @@ Lizard subspecies: ASHWALKERS
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard,
)
-/datum/species/lizard/get_physical_attributes()
+/datum/species/lizard/ashwalker/get_physical_attributes()
return "Ash Walkers are identical to lizardpeople in almost all aspects. \
Unlike them, they're always digitigrade, they can breathe Lavaland's often noxious atmosphere and resist viruses. They are usually illiterate."
diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
index 0af65516f23..00003a5240b 100644
--- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm
+++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm
@@ -209,13 +209,5 @@
TRAIT_NOHUNGER,
TRAIT_VENTCRAWLER_NUDE,
)
- bodypart_overrides = list(
- BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/monkey,
- BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/monkey,
- BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey,
- BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/monkey,
- BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/monkey,
- BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey,
- )
#undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index 8f3cd84e1e5..911813ac43c 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -9,7 +9,7 @@
)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
mutant_bodyparts = list("moth_markings" = "None")
- // external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // SKYRAT EDIT - Fixing moths
+ // external_organs = list(/obj/item/organ/external/wings/moth = "Plain", /obj/item/organ/external/antennae = "Plain") // NOVA EDIT - Fixing moths
meat = /obj/item/food/meat/slab/human/mutant/moth
mutanttongue = /obj/item/organ/internal/tongue/moth
mutanteyes = /obj/item/organ/internal/eyes/moth
@@ -61,7 +61,7 @@
/datum/species/moth/randomize_features()
var/list/features = ..()
- features["moth_markings"] = pick(GLOB.moth_wings_list) // SKYRAT EDIT CHANGE - ORIGINAL: features["moth_markings"] = pick(GLOB.moth_markings_list)
+ features["moth_markings"] = pick(GLOB.moth_wings_list) // NOVA EDIT CHANGE - ORIGINAL: features["moth_markings"] = pick(GLOB.moth_markings_list)
return features
/datum/species/moth/get_scream_sound(mob/living/carbon/human/human)
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index 308645c9ea1..59099cec175 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -2,7 +2,7 @@
name = "Mushroomperson"
plural_form = "Mushroompeople"
id = SPECIES_MUSHROOM
- mutant_bodyparts = list("caps" = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19"))) // SKYRAT EDIT - Customization - ORIGINAL: mutant_bodyparts = list("caps" = "Round")
+ mutant_bodyparts = list("caps" = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list("#FF4B19"))) // NOVA EDIT - Customization - ORIGINAL: mutant_bodyparts = list("caps" = "Round")
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
fixed_mut_color = "#DBBF92"
@@ -42,8 +42,8 @@
. = ..()
if(ishuman(C))
var/mob/living/carbon/human/H = C
- if(!H.dna.mutant_bodyparts["caps"] || H.dna.mutant_bodyparts["caps"][MUTANT_INDEX_NAME] != "None") // SKYRAT EDIT - Customization - ORIGINAL: if(!H.dna.features["caps"])
- H.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list(H.hair_color)) // SKYRAT EDIT - Customization - ORIGINAL: H.dna.features["caps"] = "Round"
+ if(!H.dna.mutant_bodyparts["caps"] || H.dna.mutant_bodyparts["caps"][MUTANT_INDEX_NAME] != "None") // NOVA EDIT - Customization - ORIGINAL: if(!H.dna.features["caps"])
+ H.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list(H.hair_color)) // NOVA EDIT - Customization - ORIGINAL: H.dna.features["caps"] = "Round"
handle_mutant_bodyparts(H)
mush = new(null)
mush.teach(H)
@@ -60,6 +60,6 @@
if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller)
affected.adjustToxLoss(3 * REM * seconds_per_tick)
-/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour, force_update = FALSE) //SKYRAT EDIT - ORIGINAL: /datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) (one parameter added)
+/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour, force_update = FALSE) //NOVA EDIT - ORIGINAL: /datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour) (one parameter added)
forced_colour = FALSE
return ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index 5cf2355c86c..a28cd78e708 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -8,7 +8,7 @@
TRAIT_PLANT_SAFE,
)
external_organs = list(
- // /obj/item/organ/external/pod_hair = "None", // SKYRAT EDIT REMOVAL - Customization (it messes up unit tests.)
+ // /obj/item/organ/external/pod_hair = "None", // NOVA EDIT REMOVAL - Customization (it messes up unit tests.)
)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
inherent_factions = list(FACTION_PLANTS, FACTION_VINES)
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 1bd77a4356f..55a144cd669 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -22,7 +22,7 @@
mutantlungs = null
species_language_holder = /datum/language_holder/shadowpeople
- examine_limb_id = SPECIES_SHADOW // SKYRAT EDIT: Fixing Shadowpeople
+ examine_limb_id = SPECIES_SHADOW // NOVA EDIT: Fixing Shadowpeople
bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/shadow,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/shadow,
@@ -89,11 +89,20 @@
return to_add
+/obj/item/organ/internal/eyes/shadow
+ name = "burning red eyes"
+ desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread."
+ icon = 'icons/obj/medical/organs/shadow_organs.dmi'
+ color_cutoffs = list(20, 10, 40)
+ pepperspray_protect = TRUE
+
/// the key to some of their powers
/obj/item/organ/internal/brain/shadow
name = "shadowling tumor"
desc = "Something that was once a brain, before being remolded by a shadowling. It has adapted to the dark, irreversibly."
icon = 'icons/obj/medical/organs/shadow_organs.dmi'
+ /// What status effect do we gain while in darkness?
+ var/applied_status = /datum/status_effect/shadow_regeneration
/obj/item/organ/internal/brain/shadow/on_life(seconds_per_tick, times_fired)
. = ..()
@@ -102,14 +111,34 @@
return
var/light_amount = owner_turf.get_lumcount()
- if(light_amount > SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
+ if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark
+ owner.apply_status_effect(applied_status)
+ if (!owner.has_status_effect(applied_status))
owner.take_overall_damage(brute = 0.5 * seconds_per_tick, burn = 0.5 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC)
- else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark
- owner.heal_overall_damage(brute = 0.5 * seconds_per_tick, burn = 0.5 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC)
-/obj/item/organ/internal/eyes/shadow
- name = "burning red eyes"
- desc = "Even without their shadowy owner, looking at these eyes gives you a sense of dread."
- icon = 'icons/obj/medical/organs/shadow_organs.dmi'
- color_cutoffs = list(20, 10, 40)
- pepperspray_protect = TRUE
+/// Heal in darkness and potentially trigger other effects, persists for a short duration after leaving
+/datum/status_effect/shadow_regeneration
+ id = "shadow_regeneration"
+ duration = 2 SECONDS
+ status_type = STATUS_EFFECT_REFRESH
+ alert_type = /atom/movable/screen/alert/status_effect/shadow_regeneration
+
+/datum/status_effect/shadow_regeneration/on_apply()
+ . = ..()
+ if (!.)
+ return FALSE
+ heal_owner()
+ return TRUE
+
+/datum/status_effect/shadow_regeneration/refresh(effect)
+ . = ..()
+ heal_owner()
+
+/// Regenerate health whenever this status effect is applied or reapplied
+/datum/status_effect/shadow_regeneration/proc/heal_owner()
+ owner.heal_overall_damage(brute = 1, burn = 1, required_bodytype = BODYTYPE_ORGANIC)
+
+/atom/movable/screen/alert/status_effect/shadow_regeneration
+ name = "Shadow Regeneration"
+ desc = "Bathed in soothing darkness, you will slowly heal yourself."
+ icon_state = "lightless"
diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm
index 6f2f12ebe03..9361a99e0b2 100644
--- a/code/modules/mob/living/carbon/human/species_types/snail.dm
+++ b/code/modules/mob/living/carbon/human/species_types/snail.dm
@@ -3,9 +3,9 @@
id = SPECIES_SNAIL
inherent_traits = list(
TRAIT_MUTANT_COLORS,
- // TRAIT_NO_UNDERWEAR, //SKYRAT EDIT REMOVAL - Roundstart Snails - Snails deserve to wear underwear
+ // TRAIT_NO_UNDERWEAR, //NOVA EDIT REMOVAL - Roundstart Snails - Snails deserve to wear underwear
TRAIT_NO_SLIP_ALL,
- TRAIT_WATER_BREATHING, //SKYRAT EDIT ADDITION - Roundstart Snails - Sea snails exist, and land snails can weather being underwater for almost a day.
+ TRAIT_WATER_BREATHING, //NOVA EDIT ADDITION - Roundstart Snails - Sea snails exist, and land snails can weather being underwater for almost a day.
)
coldmod = 0.5 //snails only come out when its cold and wet
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 84d125c89c3..fea1de2ecc6 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -2,12 +2,12 @@
if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM))
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(isopenturf(loc))
var/turf/open/my_our_turf = loc
if(my_our_turf.pollution)
my_our_turf.pollution.touch_act(src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(damageoverlaytemp)
damageoverlaytemp = 0
@@ -112,7 +112,7 @@
breath = loc_as_obj.handle_internal_lifeform(src, BREATH_VOLUME)
else if(isturf(loc)) //Breathe from loc as turf
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
//Underwater breathing
var/turf/our_turf = loc
if(our_turf.liquids && !HAS_TRAIT(src, TRAIT_NOBREATH) && ((body_position == LYING_DOWN && our_turf.liquids.liquid_state >= LIQUID_STATE_WAIST) || (body_position == STANDING_UP && our_turf.liquids.liquid_state >= LIQUID_STATE_FULLTILE)))
@@ -140,7 +140,7 @@
next_smell = world.time + SMELL_COOLDOWN
open_turf.pollution.smell_act(src)
open_turf.pollution.breathe_act(src)
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/breath_moles = 0
if(environment)
breath_moles = environment.total_moles()*BREATH_PERCENTAGE
@@ -509,13 +509,13 @@
/mob/living/carbon/handle_diseases(seconds_per_tick, times_fired)
- for(var/thing in diseases)
- var/datum/disease/D = thing
- if(SPT_PROB(D.infectivity, seconds_per_tick))
- D.spread()
-
- if(stat != DEAD || D.process_dead)
- D.stage_act(seconds_per_tick, times_fired)
+ for(var/datum/disease/disease as anything in diseases)
+ if(QDELETED(disease)) //Got cured/deleted while the loop was still going.
+ continue
+ if(SPT_PROB(disease.infectivity, seconds_per_tick))
+ disease.spread()
+ if(stat != DEAD || disease.process_dead)
+ disease.stage_act(seconds_per_tick, times_fired)
/mob/living/carbon/handle_wounds(seconds_per_tick, times_fired)
for(var/datum/wound/wound as anything in all_wounds)
diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm
index b9b5fd0b365..9f718835956 100644
--- a/code/modules/mob/living/carbon/status_procs.dm
+++ b/code/modules/mob/living/carbon/status_procs.dm
@@ -13,7 +13,7 @@
to_chat(src, span_notice("You're too exhausted to keep going..."))
add_traits(list(TRAIT_INCAPACITATED, TRAIT_IMMOBILIZED, TRAIT_FLOORED), STAMINA)
- if(getStaminaLoss() < 162) // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems. //SKYRAT EDIT CHANGE
+ if(getStaminaLoss() < 162) // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems. //NOVA EDIT CHANGE
adjustStaminaLoss(30, FALSE)
/mob/living/carbon/adjust_disgust(amount, max = DISGUST_LEVEL_MAXEDOUT)
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 62344128d02..a5d2d7b5558 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -62,7 +62,7 @@
damage_dealt = actual_hit.get_damage() - delta // Unfortunately bodypart receive_damage doesn't return damage dealt so we do it manually
else
damage_dealt = adjustBruteLoss(damage_amount, forced = forced)
- INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // SKYRAT EDIT ADDITION - ERP Pain
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // NOVA EDIT ADDITION - ERP Pain
if(BURN)
if(isbodypart(def_zone))
var/obj/item/bodypart/actual_hit = def_zone
@@ -81,7 +81,7 @@
damage_dealt = delta - actual_hit.get_damage() // See above
else
damage_dealt = adjustFireLoss(damage_amount, forced = forced)
- INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // SKYRAT EDIT ADDITION - ERP Pain
+ INVOKE_ASYNC(src, TYPE_PROC_REF(/mob/living, adjust_pain), damage_amount) // NOVA EDIT ADDITION - ERP Pain
if(TOX)
damage_dealt = adjustToxLoss(damage_amount, forced = forced)
if(OXY)
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index c4ad9aab656..b4eb2bed3b1 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -131,9 +131,9 @@
med_hud_set_status()
stop_pulling()
- cut_overlay(GLOB.combat_indicator_overlay) //SKYRAT EDIT ADDITION - COMBAT_INDICATOR
- set_combat_indicator(FALSE) //SKYRAT EDIT ADDITION - COMBAT_INDICATOR
- set_ssd_indicator(FALSE) //SKYRAT EDIT ADDITION - SSD_INDICATOR
+ cut_overlay(GLOB.combat_indicator_overlay) //NOVA EDIT ADDITION - COMBAT_INDICATOR
+ set_combat_indicator(FALSE) //NOVA EDIT ADDITION - COMBAT_INDICATOR
+ set_ssd_indicator(FALSE) //NOVA EDIT ADDITION - SSD_INDICATOR
SEND_SIGNAL(src, COMSIG_LIVING_DEATH, gibbed)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_DEATH, src, gibbed)
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index 8c95f897817..a2c484ee7e0 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -2,7 +2,7 @@
/* EMOTE DATUMS */
/datum/emote/living
mob_type_allowed_typecache = /mob/living
- mob_type_blacklist_typecache = list(/mob/living/brain) //SKYRAT EDIT - OVERWIRTTEN BY `modular_skyrat\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm`
+ mob_type_blacklist_typecache = list(/mob/living/brain) //NOVA EDIT - OVERWIRTTEN BY `modular_nova\modules\modular_implants\code\soulcatcher\soulcatcher_mob.dm`
/datum/emote/living/blush
key = "blush"
@@ -140,7 +140,7 @@
hands_use_check = TRUE
var/wing_time = 20
-//SKYRAT EDIT REMOVAL BEGIN - EMOTES - Not working due to modified mutant code, will be fixed later
+//NOVA EDIT REMOVAL BEGIN - EMOTES - Not working due to modified mutant code, will be fixed later
/*
/datum/emote/living/flap/run_emote(mob/user, params, type_override, intentional)
. = ..()
@@ -162,7 +162,7 @@
if(istype(wings, /obj/item/organ/external/wings/moth))
playsound(H, 'sound/voice/moth/moth_flutter.ogg', 50, TRUE)
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/emote/living/flap/aflap
key = "aflap"
@@ -205,7 +205,7 @@
if(!ishuman(user))
return
var/mob/living/carbon/human/human_user = user
- if(!HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) // SKYRAT EDIT CHANGE - Let other species gasp - ORIGINAL: if(human_user.dna.species.id == SPECIES_HUMAN && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING))
+ if(!HAS_MIND_TRAIT(human_user, TRAIT_MIMING)) // NOVA EDIT CHANGE - Let other species gasp - ORIGINAL: if(ishumanbasic(human_user) || isfelinid(human_user) && !HAS_MIND_TRAIT(human_user, TRAIT_MIMING))
if(human_user.physique == FEMALE)
return pick('sound/voice/human/gasp_female1.ogg', 'sound/voice/human/gasp_female2.ogg', 'sound/voice/human/gasp_female3.ogg')
else
@@ -278,7 +278,7 @@
qdel(kiss_blower)
to_chat(user, span_warning("You're incapable of blowing a kiss in your current state."))
-/* SKYRAT EDIT REMOVAL - EMOTES - MOVED TO EMOTES.DM MODULAR
+/* NOVA EDIT REMOVAL - EMOTES - MOVED TO EMOTES.DM MODULAR
/datum/emote/living/laugh
key = "laugh"
key_third_person = "laughs"
@@ -301,7 +301,7 @@
return 'sound/voice/human/womanlaugh.ogg'
else
return pick('sound/voice/human/manlaugh1.ogg', 'sound/voice/human/manlaugh2.ogg')
-*/ //SKYRAT EDIT END
+*/ //NOVA EDIT END
/datum/emote/living/look
key = "look"
@@ -424,7 +424,7 @@
message_mime = "sniffs silently."
emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE
-//SKYRAT EDIT ADDITION
+//NOVA EDIT ADDITION
/datum/emote/living/sniff/run_emote(mob/user, params, type_override, intentional)
. = ..()
if(.)
@@ -436,7 +436,7 @@
return
carbon_user.next_smell = world.time + SMELL_COOLDOWN
current_turf.pollution.smell_act(user)
-//SKYRAT EDIT END
+//NOVA EDIT END
/datum/emote/living/snore
key = "snore"
@@ -468,7 +468,7 @@
message = "puts their hands on their head and falls to the ground, they surrender%s!"
emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE
-/* SKYRAT EDIT CHANGE - MOVED TO combat_indicator.dm IN INDICATORS MODULE
+/* NOVA EDIT CHANGE - MOVED TO combat_indicator.dm IN INDICATORS MODULE
/datum/emote/living/surrender/run_emote(mob/user, params, type_override, intentional)
. = ..()
if(. && isliving(user))
@@ -560,9 +560,9 @@
message = "smiles weakly."
/// The base chance for your yawn to propagate to someone else if they're on the same tile as you
-#define YAWN_PROPAGATE_CHANCE_BASE 0 // SKYRAT EDIT - Group yawn no more - ORIGINAL: #define YAWN_PROPAGATE_CHANCE_BASE 40
-/// The base chance for your yawn to propagate to someone else if they're on the same tile as you
-#define YAWN_PROPAGATE_CHANCE_DECAY 8
+#define YAWN_PROPAGATE_CHANCE_BASE 16 // NOVA EDIT - Group yawn no more - ORIGINAL: #define YAWN_PROPAGATE_CHANCE_BASE 20
+/// The amount the base chance to propagate yawns falls for each tile of distance
+#define YAWN_PROPAGATE_CHANCE_DECAY 4
/datum/emote/living/yawn
key = "yawn"
@@ -670,7 +670,7 @@
return TRUE
/datum/emote/living/custom/proc/get_custom_emote_from_user()
- return stripped_multiline_input(usr, "Choose an emote to display.", "Me" , null, MAX_MESSAGE_LEN) // SKYRAT EDIT CHANGE - ORIGINAL : return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN)
+ return stripped_multiline_input(usr, "Choose an emote to display.", "Me" , null, MAX_MESSAGE_LEN) // NOVA EDIT CHANGE - ORIGINAL : return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN)
/datum/emote/living/custom/proc/get_custom_emote_type_from_user()
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
@@ -715,7 +715,7 @@
else if(type_override)
emote_type = type_override
- message = user.say_emphasis(message) //SKYRAT EDIT ADDITION - EMOTES
+ message = user.say_emphasis(message) //NOVA EDIT ADDITION - EMOTES
. = ..()
@@ -725,7 +725,7 @@
/datum/emote/living/custom/replace_pronoun(mob/user, message)
return message
-//SKYRAT EDIT REMOVAL BEGIN - SYNTH EMOTES, NOW HANDLED IN SYNTH_EMOTES.DM
+//NOVA EDIT REMOVAL BEGIN - SYNTH EMOTES, NOW HANDLED IN SYNTH_EMOTES.DM
/* /datum/emote/living/beep
key = "beep"
key_third_person = "beeps"
@@ -734,7 +734,7 @@
sound = 'sound/machines/twobeep.ogg'
mob_type_allowed_typecache = list(/mob/living/brain, /mob/living/silicon)
emote_type = EMOTE_AUDIBLE */
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/datum/emote/living/inhale
key = "inhale"
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 1a76e6398d6..13975716f07 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -63,11 +63,11 @@
if(. & ZIMPACT_CANCEL_DAMAGE)
return .
- //SKYRAT EDIT ADDITION START - Landing in liquids
+ //NOVA EDIT ADDITION START - Landing in liquids
if(impacted_turf.liquids && impacted_turf.liquids.liquid_state >= LIQUID_STATE_WAIST)
Knockdown(2 SECONDS)
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
// If you are incapped, you probably can't brace yourself
var/can_help_themselves = !incapacitated(IGNORE_RESTRAINTS)
if(levels <= 1 && can_help_themselves)
@@ -87,7 +87,7 @@
if(HAS_TRAIT(src, TRAIT_CATLIKE_GRACE) && (small_surface_area || usable_legs >= 2) && body_position == STANDING_UP && can_help_themselves)
. |= ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN
skip_knockdown = TRUE
- if(small_surface_area || (isfelinid(src) || istajaran(src))) // SKYRAT EDIT CHANGE - ORIGINAL: if(small_surface_area)
+ if(small_surface_area || (isfelinid(src) || istajaran(src))) // NOVA EDIT CHANGE - ORIGINAL: if(small_surface_area)
visible_message(
span_notice("[src] makes a hard landing on [impacted_turf], but lands safely on [p_their()] feet!"),
span_notice("You make a hard landing on [impacted_turf], but land safely on your feet!"),
@@ -190,7 +190,7 @@
if(!(world.time % 5))
to_chat(src, span_warning("[L] is restraining [P], you cannot push past."))
return TRUE
- //SKYRAT EDIT ADDITION BEGIN - GUNPOINT
+ //NOVA EDIT ADDITION BEGIN - GUNPOINT
if(L.gunpointed.len)
var/is_pointing = FALSE
for(var/datum/gunpoint/gp in L.gunpointed)
@@ -205,7 +205,7 @@
if(!(world.time % 5))
to_chat(src, "[L] is holding someone at gunpoint, you cannot push past. ")
return TRUE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(moving_diagonally)//no mob swap during diagonal moves.
return TRUE
@@ -408,7 +408,7 @@
log_combat(src, M, "grabbed", addition="passive grab")
if(!supress_message && !(iscarbon(AM) && HAS_TRAIT(src, TRAIT_STRONG_GRABBER)))
- //SKYRAT EDIT START - Tail coiling
+ //NOVA EDIT START - Tail coiling
if(ishuman(M))
if(zone_selected == BODY_ZONE_PRECISE_GROIN && M.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) && src.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL))
M.visible_message(span_warning("[src] coils their tail with [AM], wow is that okay in public?!"), "[src] has entwined their tail with yours!")
@@ -419,7 +419,7 @@
M.visible_message(span_warning("[src] grabs [M] [grabbed_by_hands ? "by their hands":"passively"]!"), \
span_warning("[src] grabs you [grabbed_by_hands ? "by your hands":"passively"]!"), null, null, src)
to_chat(src, span_notice("You grab [M] [grabbed_by_hands ? "by their hands":"passively"]!"))
- // SKYRAT EDIT END
+ // NOVA EDIT END
else
M.visible_message(span_warning("[src] grabs [M] passively!"), \
span_warning("[src] grabs you passively!"), null, null, src)
@@ -685,7 +685,7 @@
if(!silent)
to_chat(src, span_notice("You will now stand up as soon as you are able to."))
else
- /*if(!silent) SKYRAT EDIT REMOVAL
+ /*if(!silent) NOVA EDIT REMOVAL
to_chat(src, "You stand up. ")*/
get_up(instant)
@@ -696,12 +696,12 @@
/// Proc to append and redefine behavior to the change of the [/mob/living/var/resting] variable.
/mob/living/proc/update_resting()
update_rest_hud_icon()
- SEND_SIGNAL(src, COMSIG_LIVING_UPDATED_RESTING, resting) //SKYRAT EDIT ADDITION - GUNPOINT
+ SEND_SIGNAL(src, COMSIG_LIVING_UPDATED_RESTING, resting) //NOVA EDIT ADDITION - GUNPOINT
/mob/living/proc/get_up(instant = FALSE)
set waitfor = FALSE
- var/get_up_speed = GET_UP_FAST //SKYRAT EDIT CHANGE : if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP))
+ var/get_up_speed = GET_UP_FAST //NOVA EDIT CHANGE : if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP))
var/stam = getStaminaLoss()
switch(FLOOR(stam,1))
if(STAMINA_THRESHOLD_MEDIUM_GET_UP to STAMINA_THRESHOLD_SLOW_GET_UP)
@@ -719,11 +719,11 @@
if(!do_after(src, get_up_speed SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, /mob/living/proc/rest_checks_callback), interaction_key = DOAFTER_SOURCE_GETTING_UP))
return
if(pulledby && pulledby.grab_state)
- to_chat(src, span_warning("You fail to stand up, you're restrained!")) //SKYRAT EDIT ADDITION END
+ to_chat(src, span_warning("You fail to stand up, you're restrained!")) //NOVA EDIT ADDITION END
return
if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED))
return
- to_chat(src, span_notice("You stand up.")) //SKYRAT EDIT ADDITION
+ to_chat(src, span_notice("You stand up.")) //NOVA EDIT ADDITION
set_body_position(STANDING_UP)
set_lying_angle(0)
@@ -885,7 +885,7 @@
if(full_heal_flags)
fully_heal(full_heal_flags)
- if(stat == DEAD && can_be_revived() || (full_heal_flags & HEAL_ADMIN)) //in some cases you can't revive (e.g. no brain) //SKYRAT EDIT ADDITION - DNR TRAIT - Added: " || (full_heal_flags & HEAL_ADMIN)"
+ if(stat == DEAD && can_be_revived() || (full_heal_flags & HEAL_ADMIN)) //in some cases you can't revive (e.g. no brain) //NOVA EDIT ADDITION - DNR TRAIT - Added: " || (full_heal_flags & HEAL_ADMIN)"
set_suicide(FALSE)
set_stat(UNCONSCIOUS) //the mob starts unconscious,
updatehealth() //then we check if the mob should wake up.
@@ -1200,7 +1200,7 @@
/mob/living/resist_grab(moving_resist)
. = TRUE
//If we're in an aggressive grab or higher, we're lying down, we're vulnerable to grabs, or we're staggered and we have some amount of stamina loss, we must resist
- if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() > STAMINA_THRESHOLD_HARD_RESIST) //SKYRAT EDIT CHANGE - ORIGINAL : if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() >= 30)
+ if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() > STAMINA_THRESHOLD_HARD_RESIST) //NOVA EDIT CHANGE - ORIGINAL : if(pulledby.grab_state || body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered) && getStaminaLoss() >= 30)
var/altered_grab_state = pulledby.grab_state
if((body_position == LYING_DOWN || HAS_TRAIT(src, TRAIT_GRABWEAKNESS) || get_timed_status_effect_duration(/datum/status_effect/staggered)) && pulledby.grab_state < GRAB_KILL) //If prone, resisting out of a grab is equivalent to 1 grab state higher. won't make the grab state exceed the normal max, however
altered_grab_state++
@@ -1210,9 +1210,9 @@
altered_grab_state++
var/mob/living/M = pulledby
if(M.staminaloss > STAMINA_THRESHOLD_HARD_RESIST)
- altered_grab_state-- //SKYRAT EDIT END
+ altered_grab_state-- //NOVA EDIT END
var/resist_chance = BASE_GRAB_RESIST_CHANCE /// see defines/combat.dm, this should be baseline 60%
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
// Akula grab resist
if(HAS_TRAIT(src, TRAIT_SLIPPERY))
resist_chance += AKULA_GRAB_RESIST_BONUS
@@ -1221,10 +1221,10 @@
resist_chance += OVERSIZED_GRAB_RESIST_BONUS
if(HAS_TRAIT(pulledby, TRAIT_OVERSIZED))
resist_chance -= OVERSIZED_GRAB_RESIST_BONUS
- //SKYRAT EDIT END
+ //NOVA EDIT END
resist_chance = (resist_chance/altered_grab_state) ///Resist chance divided by the value imparted by your grab state. It isn't until you reach neckgrab that you gain a penalty to escaping a grab.
if(prob(resist_chance))
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
// Akula break-out flavor
if(HAS_TRAIT(src, TRAIT_SLIPPERY))
visible_message(span_cyan("[src] slips free of [pulledby]'s grip!"), \
@@ -1234,7 +1234,7 @@
log_combat(pulledby, src, "broke grab")
pulledby.stop_pulling()
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
visible_message(span_danger("[src] breaks free of [pulledby]'s grip!"), \
span_danger("You break free of [pulledby]'s grip!"), null, null, pulledby)
to_chat(pulledby, span_warning("[src] breaks free of your grip!"))
@@ -1242,7 +1242,7 @@
pulledby.stop_pulling()
return FALSE
else
- adjustStaminaLoss(rand(10,15))//failure to escape still imparts a pretty serious penalty //SKYRAT EDIT CHANGE: //adjustStaminaLoss(rand(15,20))//failure to escape still imparts a pretty serious penalty
+ adjustStaminaLoss(rand(10,15))//failure to escape still imparts a pretty serious penalty //NOVA EDIT CHANGE: //adjustStaminaLoss(rand(15,20))//failure to escape still imparts a pretty serious penalty
visible_message("[src] struggles as they fail to break free of [pulledby]'s grip! ", \
"You struggle as you fail to break free of [pulledby]'s grip! ", null, null, pulledby)
to_chat(pulledby, "[src] struggles as they fail to break free of your grip! ")
@@ -1467,7 +1467,8 @@
else
for(var/obj/item/item in src)
if(!dropItemToGround(item))
- qdel(item)
+ if(!(item.item_flags & ABSTRACT))
+ qdel(item)
continue
item_contents += item
@@ -1866,7 +1867,7 @@ GLOBAL_LIST_EMPTY(fire_appearances)
if(isliving(dropping))
var/mob/living/M = dropping
if(M.can_be_held && U.pulling == M)
- return M.mob_try_pickup(U) //SKYRAT EDIT CHANGE //blame kevinz dont open the mobs inventory if you are picking them up
+ return M.mob_try_pickup(U) //NOVA EDIT CHANGE //blame kevinz dont open the mobs inventory if you are picking them up
. = ..()
/mob/living/proc/mob_pickup(mob/living/user)
@@ -1895,7 +1896,7 @@ GLOBAL_LIST_EMPTY(fire_appearances)
if(!do_after(user, 2 SECONDS, target = src))
return FALSE
mob_pickup(user)
- return TRUE //SKYRAT EDIT CHANGE
+ return TRUE //NOVA EDIT CHANGE
/mob/living/proc/get_static_viruses() //used when creating blood and other infective objects
if(!LAZYLEN(diseases))
@@ -2430,10 +2431,10 @@ GLOBAL_LIST_EMPTY(fire_appearances)
body_position = new_value
SEND_SIGNAL(src, COMSIG_LIVING_SET_BODY_POSITION, new_value, .)
if(new_value == LYING_DOWN) // From standing to lying down.
- //SKYRAT EDIT ADDITION BEGIN - SOUNDS
+ //NOVA EDIT ADDITION BEGIN - SOUNDS
if(has_gravity())
playsound(src, "bodyfall", 50, TRUE)
- //SKYRAT EDIT END
+ //NOVA EDIT END
on_lying_down()
else // From lying down to standing up.
on_standing_up()
@@ -2699,7 +2700,7 @@ GLOBAL_LIST_EMPTY(fire_appearances)
if(isnull(guardian_client))
return
else if(guardian_client == "Poll Ghosts")
- var/list/candidates = poll_ghost_candidates("Do you want to play as an admin created Guardian Spirit of [real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_HOLOPARASITE)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Do you want to play as an admin created Guardian Spirit of [real_name]?", check_jobban = ROLE_PAI, poll_time = 10 SECONDS, ignore_category = POLL_IGNORE_HOLOPARASITE, pic_source = src, role_name_text = "guardian spirit")
if(LAZYLEN(candidates))
var/mob/dead/observer/candidate = pick(candidates)
guardian_client = candidate.client
@@ -2731,3 +2732,21 @@ GLOBAL_LIST_EMPTY(fire_appearances)
message_admins(span_adminnotice("[key_name_admin(admin)] gave a guardian spirit controlled by [guardian_client || "AI"] to [src]."))
log_admin("[key_name(admin)] gave a guardian spirit controlled by [guardian_client] to [src].")
BLACKBOX_LOG_ADMIN_VERB("Give Guardian Spirit")
+
+/mob/living/verb/lookup()
+ set name = "Look Up"
+ set category = "IC"
+
+ if(client.perspective != MOB_PERSPECTIVE)
+ end_look_up()
+ else
+ look_up()
+
+/mob/living/verb/lookdown()
+ set name = "Look Down"
+ set category = "IC"
+
+ if(client.perspective != MOB_PERSPECTIVE)
+ end_look_down()
+ else
+ look_down()
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index ccdcc18390f..704572ca0ad 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -1,6 +1,6 @@
/mob/living/proc/run_armor_check(def_zone = null, attack_flag = MELEE, absorb_text = null, soften_text = null, armour_penetration, penetrated_text, silent=FALSE, weak_against_armour = FALSE)
- SEND_SIGNAL(src, COMSIG_MOB_RUN_ARMOR) //SKYRAT EDIT ADDITION
+ SEND_SIGNAL(src, COMSIG_MOB_RUN_ARMOR) //NOVA EDIT ADDITION
var/our_armor = getarmor(def_zone, attack_flag)
@@ -151,17 +151,17 @@
return
. = combat_mode
combat_mode = new_mode
- SEND_SIGNAL(src, COMSIG_LIVING_COMBAT_MODE_TOGGLE, new_mode) //SKYRAT EDIT ADDITION
+ SEND_SIGNAL(src, COMSIG_LIVING_COMBAT_MODE_TOGGLE, new_mode) //NOVA EDIT ADDITION
if(hud_used?.action_intent)
hud_used.action_intent.update_appearance()
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(!ishuman(src) && !ckey)
if(combat_mode)
set_combat_indicator(TRUE)
else
set_combat_indicator(FALSE)
face_mouse = (client?.prefs?.read_preference(/datum/preference/toggle/face_cursor_combat_mode) && combat_mode) ? TRUE : FALSE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(silent || !(client?.prefs.read_preference(/datum/preference/toggle/sound_combatmode)))
return
@@ -296,30 +296,6 @@
user.set_pull_offsets(src, grab_state)
return TRUE
-
-/mob/living/attack_slime(mob/living/simple_animal/slime/attacking_slime, list/modifiers)
- if(attacking_slime.buckled)
- if(attacking_slime in buckled_mobs)
- attacking_slime.stop_feeding()
- return // can't attack while eating!
-
- if(HAS_TRAIT(attacking_slime, TRAIT_PACIFISM))
- to_chat(attacking_slime, span_warning("You don't want to hurt anyone!"))
- return FALSE
-
- if(check_block(src, attacking_slime.melee_damage_upper, "[attacking_slime]'s glomp", MELEE_ATTACK, attacking_slime.armour_penetration, attacking_slime.melee_damage_type))
- return FALSE
-
- if (stat != DEAD)
- log_combat(attacking_slime, src, "attacked")
- attacking_slime.do_attack_animation(src)
- visible_message(span_danger("\The [attacking_slime.name] glomps [src]!"), \
- span_userdanger("\The [attacking_slime.name] glomps you!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacking_slime)
- to_chat(attacking_slime, span_danger("You glomp [src]!"))
- return TRUE
-
- return FALSE
-
/mob/living/attack_animal(mob/living/simple_animal/user, list/modifiers)
. = ..()
if(.)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 56d10b83700..addd5c11531 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -1,6 +1,6 @@
/mob/living
see_invisible = SEE_INVISIBLE_LIVING
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR_HUD
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR_HUD
pressure_resistance = 10
hud_type = /datum/hud/living
diff --git a/code/modules/mob/living/living_fov.dm b/code/modules/mob/living/living_fov.dm
index 6d47085855b..0f400017515 100644
--- a/code/modules/mob/living/living_fov.dm
+++ b/code/modules/mob/living/living_fov.dm
@@ -10,7 +10,7 @@
// ^ If that case has changed and you need that check, add it.
var/rel_x = observed_atom.x - my_turf.x
var/rel_y = observed_atom.y - my_turf.y
- if(fov_view && observed_atom.plane == GAME_PLANE_FOV_HIDDEN) //SKYRAT EDIT CHANGE
+ if(fov_view)
if(rel_x >= -1 && rel_x <= 1 && rel_y >= -1 && rel_y <= 1) //Cheap way to check inside that 3x3 box around you
return TRUE //Also checks if both are 0 to stop division by zero
@@ -133,10 +133,3 @@
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
plane = FIELD_OF_VISION_BLOCKER_PLANE
screen_loc = "BOTTOM,LEFT"
-
-/atom/movable/screen/fov_shadow
- icon = 'icons/effects/fov/field_of_view.dmi'
- icon_state = "90_v"
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
- plane = ABOVE_LIGHTING_PLANE
- screen_loc = "BOTTOM,LEFT"
diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm
index f694e685cf0..48ec170af72 100644
--- a/code/modules/mob/living/living_movement.dm
+++ b/code/modules/mob/living/living_movement.dm
@@ -60,7 +60,8 @@
if(.)
return
if(mover.throwing)
- return (!density || (body_position == LYING_DOWN) || (mover.throwing.thrower == src && !ismob(mover)))
+ var/mob/thrower = mover.throwing.get_thrower()
+ return (!density || (body_position == LYING_DOWN) || (thrower == src && !ismob(mover)))
if(buckled == mover)
return TRUE
if(ismob(mover) && (mover in buckled_mobs))
@@ -89,11 +90,11 @@
if(pulling)
if(isliving(pulling))
var/mob/living/L = pulling
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(HAS_TRAIT(L, TRAIT_OVERSIZED) && !HAS_TRAIT(src, TRAIT_OVERSIZED) && !iscyborg(src))
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_OVERSIZED_SLOWDOWN)
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!slowed_by_drag || L.body_position == STANDING_UP || L.buckled || grab_state >= GRAB_AGGRESSIVE)
remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag)
return
diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm
index 8ece4a2be84..3489c9ba753 100644
--- a/code/modules/mob/living/living_say.dm
+++ b/code/modules/mob/living/living_say.dm
@@ -20,11 +20,11 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
RADIO_KEY_SYNDICATE = RADIO_CHANNEL_SYNDICATE,
RADIO_KEY_UPLINK = RADIO_CHANNEL_UPLINK,
RADIO_KEY_CENTCOM = RADIO_CHANNEL_CENTCOM,
- RADIO_KEY_FACTION = RADIO_CHANNEL_FACTION, //SKYRAT EDIT ADDITION - FACTION
- RADIO_KEY_CYBERSUN = RADIO_CHANNEL_CYBERSUN, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_KEY_INTERDYNE = RADIO_CHANNEL_INTERDYNE, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_KEY_GUILD = RADIO_CHANNEL_GUILD, //SKYRAT EDIT ADDITION - MAPPING
- RADIO_KEY_TARKON = RADIO_CHANNEL_TARKON, //SKYRAT EDIT ADDITION - MAPPING
+ RADIO_KEY_FACTION = RADIO_CHANNEL_FACTION, //NOVA EDIT ADDITION - FACTION
+ RADIO_KEY_CYBERSUN = RADIO_CHANNEL_CYBERSUN, //NOVA EDIT ADDITION - MAPPING
+ RADIO_KEY_INTERDYNE = RADIO_CHANNEL_INTERDYNE, //NOVA EDIT ADDITION - MAPPING
+ RADIO_KEY_GUILD = RADIO_CHANNEL_GUILD, //NOVA EDIT ADDITION - MAPPING
+ RADIO_KEY_TARKON = RADIO_CHANNEL_TARKON, //NOVA EDIT ADDITION - MAPPING
// Admin
MODE_KEY_ADMIN = MODE_ADMIN,
@@ -506,11 +506,11 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list(
return list("message" = message, "tts_message" = tts_message, "tts_filter" = tts_filter)
/mob/living/proc/radio(message, list/message_mods = list(), list/spans, language)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if((message_mods[MODE_HEADSET] || message_mods[RADIO_EXTENSION]) && !(mobility_flags & MOBILITY_USE) && !isAI(src) && !ispAI(src) && !ismecha(loc)) // If can't use items, you can't press the button
to_chat(src, span_warning("You can't use the radio right now as you can't reach the button!"))
return ITALICS | REDUCE_RANGE
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/obj/item/implant/radio/imp = locate() in src
if(imp?.radio.is_on())
if(message_mods[MODE_HEADSET])
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index f0122491a04..8c27854865b 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -506,8 +506,8 @@
alert_control.ui_interact(src)
#ifdef AI_VOX
if(href_list["say_word"])
- play_vox_word(href_list["say_word"], null, src, vox_type) //SKYRAT EDIT CHANGE
- vox_word_string += "[href_list["say_word"]] " //SKYRAT EDIT ADDITION
+ play_vox_word(href_list["say_word"], null, src, vox_type) //NOVA EDIT CHANGE
+ vox_word_string += "[href_list["say_word"]] " //NOVA EDIT ADDITION
return
#endif
if(href_list["show_tablet_note"])
diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm
index da8411f7cb3..1148b639d01 100644
--- a/code/modules/mob/living/silicon/ai/ai_defense.dm
+++ b/code/modules/mob/living/silicon/ai/ai_defense.dm
@@ -10,9 +10,6 @@
return ..()
-/mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user, list/modifiers)
- return //immune to slimes
-
/mob/living/silicon/ai/blob_act(obj/structure/blob/B)
if (stat != DEAD)
adjustBruteLoss(60)
diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm
index 78519109101..6bf996037df 100644
--- a/code/modules/mob/living/silicon/ai/ai_say.dm
+++ b/code/modules/mob/living/silicon/ai/ai_say.dm
@@ -51,7 +51,7 @@
else
to_chat(src, span_alert("No holopad connected."))
-/* SKYRAT EDIT REMOVAL - MOVED TO: MODULAR_SKYRAT/MODULES/ALT_VOX/CODE/VOX_PROCS.DM
+/* NOVA EDIT REMOVAL - MOVED TO: modular_nova/MODULES/ALT_VOX/CODE/VOX_PROCS.DM
// Make sure that the code compiles with AI_VOX undefined
#ifdef AI_VOX
#define VOX_DELAY 600
@@ -171,4 +171,4 @@
#undef VOX_DELAY
#endif
-*/ //SKYRAT EDIT REMOVAL END
+*/ //NOVA EDIT REMOVAL END
diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm
index e4a98f5f366..f862ba0adea 100644
--- a/code/modules/mob/living/silicon/ai/examine.dm
+++ b/code/modules/mob/living/silicon/ai/examine.dm
@@ -1,5 +1,5 @@
/mob/living/silicon/ai/examine(mob/user)
- . = list("This is [icon2html(src, user)] [src] !", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE
+ . = list("This is [icon2html(src, user)] [src] !", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE
if(stat == DEAD)
. += span_deadsay("It appears to be powered-down.")
. += span_notice("Its floor bolts are [is_anchored ? "tightened" : "loose"].")
@@ -26,9 +26,9 @@
. += "The wireless networking light is blinking."
else if (!shunted && !client)
. += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem..."
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
. += get_silicon_flavortext()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
. += " "
. += ..()
diff --git a/code/modules/mob/living/silicon/ai/vox_sounds.dm b/code/modules/mob/living/silicon/ai/vox_sounds.dm
index 4b535e4e03a..dacb1eeb813 100644
--- a/code/modules/mob/living/silicon/ai/vox_sounds.dm
+++ b/code/modules/mob/living/silicon/ai/vox_sounds.dm
@@ -9,6 +9,9 @@
// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox_fem\/\1',/g
GLOBAL_LIST_INIT(vox_sounds, list(
"abduction" = 'sound/vox_fem/abduction.ogg',
+ "," = 'sound/vox_fem/,.ogg',
+ "." = 'sound/vox_fem/..ogg',
+ "a" = 'sound/vox_fem/a.ogg',
"abortions" = 'sound/vox_fem/abortions.ogg',
"above" = 'sound/vox_fem/above.ogg',
"abstain" = 'sound/vox_fem/abstain.ogg',
@@ -16,74 +19,79 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"accelerator" = 'sound/vox_fem/accelerator.ogg',
"accepted" = 'sound/vox_fem/accepted.ogg',
"access" = 'sound/vox_fem/access.ogg',
- "acknowledged" = 'sound/vox_fem/acknowledged.ogg',
"acknowledge" = 'sound/vox_fem/acknowledge.ogg',
+ "acknowledged" = 'sound/vox_fem/acknowledged.ogg',
"acquired" = 'sound/vox_fem/acquired.ogg',
"acquisition" = 'sound/vox_fem/acquisition.ogg',
"across" = 'sound/vox_fem/across.ogg',
- "activated" = 'sound/vox_fem/activated.ogg',
"activate" = 'sound/vox_fem/activate.ogg',
+ "activated" = 'sound/vox_fem/activated.ogg',
"activity" = 'sound/vox_fem/activity.ogg',
"adios" = 'sound/vox_fem/adios.ogg',
"administration" = 'sound/vox_fem/administration.ogg',
"advanced" = 'sound/vox_fem/advanced.ogg',
"advised" = 'sound/vox_fem/advised.ogg',
- "after" = 'sound/vox_fem/after.ogg',
"aft" = 'sound/vox_fem/aft.ogg',
+ "after" = 'sound/vox_fem/after.ogg',
"agent" = 'sound/vox_fem/agent.ogg',
"ai" = 'sound/vox_fem/ai.ogg',
- "airlock" = 'sound/vox_fem/airlock.ogg',
"air" = 'sound/vox_fem/air.ogg',
+ "airlock" = 'sound/vox_fem/airlock.ogg',
"alarm" = 'sound/vox_fem/alarm.ogg',
+ "alarmed" = 'sound/vox_fem/alarmed.ogg',
+ "alarming" = 'sound/vox_fem/alarming.ogg',
"alert" = 'sound/vox_fem/alert.ogg',
+ "alerted" = 'sound/vox_fem/alerted.ogg',
+ "alerting" = 'sound/vox_fem/alerting.ogg',
"alien" = 'sound/vox_fem/alien.ogg',
"aligned" = 'sound/vox_fem/aligned.ogg',
"all" = 'sound/vox_fem/all.ogg',
"alpha" = 'sound/vox_fem/alpha.ogg',
"also" = 'sound/vox_fem/also.ogg',
+ "am" = 'sound/vox_fem/am.ogg',
"amigo" = 'sound/vox_fem/amigo.ogg',
"ammunition" = 'sound/vox_fem/ammunition.ogg',
- "am" = 'sound/vox_fem/am.ogg',
+ "an" = 'sound/vox_fem/an.ogg',
"and" = 'sound/vox_fem/and.ogg',
"animal" = 'sound/vox_fem/animal.ogg',
"announcement" = 'sound/vox_fem/announcement.ogg',
- "an" = 'sound/vox_fem/an.ogg',
"anomalous" = 'sound/vox_fem/anomalous.ogg',
"answer" = 'sound/vox_fem/answer.ogg',
"antenna" = 'sound/vox_fem/antenna.ogg',
"any" = 'sound/vox_fem/any.ogg',
- "a" = 'sound/vox_fem/a.ogg',
"apc" = 'sound/vox_fem/apc.ogg',
"apprehend" = 'sound/vox_fem/apprehend.ogg',
"approach" = 'sound/vox_fem/approach.ogg',
- "area" = 'sound/vox_fem/area.ogg',
"are" = 'sound/vox_fem/are.ogg',
- "armed" = 'sound/vox_fem/armed.ogg',
+ "area" = 'sound/vox_fem/area.ogg',
"arm" = 'sound/vox_fem/arm.ogg',
+ "armed" = 'sound/vox_fem/armed.ogg',
"armor" = 'sound/vox_fem/armor.ogg',
"armory" = 'sound/vox_fem/armory.ogg',
"array" = 'sound/vox_fem/array.ogg',
"arrest" = 'sound/vox_fem/arrest.ogg',
+ "artillery" = 'sound/vox_fem/artillery.ogg',
"asimov" = 'sound/vox_fem/asimov.ogg',
+ "ass" = 'sound/vox_fem/ass.ogg',
"asshole" = 'sound/vox_fem/asshole.ogg',
"assholes" = 'sound/vox_fem/assholes.ogg',
"assistance" = 'sound/vox_fem/assistance.ogg',
"assistant" = 'sound/vox_fem/assistant.ogg',
- "ass" = 'sound/vox_fem/ass.ogg',
+ "at" = 'sound/vox_fem/at.ogg',
"atmosphere" = 'sound/vox_fem/atmosphere.ogg',
"atmospheric" = 'sound/vox_fem/atmospheric.ogg',
"atmospherics" = 'sound/vox_fem/atmospherics.ogg',
- "at" = 'sound/vox_fem/at.ogg',
"atomic" = 'sound/vox_fem/atomic.ogg',
"attention" = 'sound/vox_fem/attention.ogg',
"authentication" = 'sound/vox_fem/authentication.ogg',
- "authorized" = 'sound/vox_fem/authorized.ogg',
"authorize" = 'sound/vox_fem/authorize.ogg',
+ "authorized" = 'sound/vox_fem/authorized.ogg',
"automatic" = 'sound/vox_fem/automatic.ogg',
"away" = 'sound/vox_fem/away.ogg',
"awful" = 'sound/vox_fem/awful.ogg',
- "backman" = 'sound/vox_fem/backman.ogg',
+ "b" = 'sound/vox_fem/b.ogg',
"back" = 'sound/vox_fem/back.ogg',
+ "backman" = 'sound/vox_fem/backman.ogg',
"bad" = 'sound/vox_fem/bad.ogg',
"bag" = 'sound/vox_fem/bag.ogg',
"bailey" = 'sound/vox_fem/bailey.ogg',
@@ -92,21 +100,26 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"bartender" = 'sound/vox_fem/bartender.ogg',
"base" = 'sound/vox_fem/base.ogg',
"bay" = 'sound/vox_fem/bay.ogg',
+ "be" = 'sound/vox_fem/be.ogg',
"beam" = 'sound/vox_fem/beam.ogg',
"been" = 'sound/vox_fem/been.ogg',
"beep" = 'sound/vox_fem/beep.ogg',
"before" = 'sound/vox_fem/before.ogg',
"below" = 'sound/vox_fem/below.ogg',
- "be" = 'sound/vox_fem/be.ogg',
"beside" = 'sound/vox_fem/beside.ogg',
"beware" = 'sound/vox_fem/beware.ogg',
"beyond" = 'sound/vox_fem/beyond.ogg',
+ "big" = 'sound/vox_fem/big.ogg',
+ "billion" = 'sound/vox_fem/billion.ogg',
"biohazard" = 'sound/vox_fem/biohazard.ogg',
"biological" = 'sound/vox_fem/biological.ogg',
"birdwell" = 'sound/vox_fem/birdwell.ogg',
- "bitches" = 'sound/vox_fem/bitches.ogg',
"bitch" = 'sound/vox_fem/bitch.ogg',
+ "bitches" = 'sound/vox_fem/bitches.ogg',
"bitcoin" = 'sound/vox_fem/bitcoin.ogg',
+ "bitrun" = 'sound/vox_fem/bitrun.ogg',
+ "bitrunner" = 'sound/vox_fem/bitrunner.ogg',
+ "bitrunning" = 'sound/vox_fem/bitrunning.ogg',
"black" = 'sound/vox_fem/black.ogg',
"blast" = 'sound/vox_fem/blast.ogg',
"bleed" = 'sound/vox_fem/bleed.ogg',
@@ -115,15 +128,15 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"blood" = 'sound/vox_fem/blood.ogg',
"bloop" = 'sound/vox_fem/bloop.ogg',
"blue" = 'sound/vox_fem/blue.ogg',
- "b" = 'sound/vox_fem/b.ogg',
+ "bluespace" = 'sound/vox_fem/bluespace.ogg',
"bomb" = 'sound/vox_fem/bomb.ogg',
"bone" = 'sound/vox_fem/bone.ogg',
"botanist" = 'sound/vox_fem/botanist.ogg',
"botany" = 'sound/vox_fem/botany.ogg',
"bottom" = 'sound/vox_fem/bottom.ogg',
"bravo" = 'sound/vox_fem/bravo.ogg',
- "breached" = 'sound/vox_fem/breached.ogg',
"breach" = 'sound/vox_fem/breach.ogg',
+ "breached" = 'sound/vox_fem/breached.ogg',
"break" = 'sound/vox_fem/break.ogg',
"bridge" = 'sound/vox_fem/bridge.ogg',
"brig" = 'sound/vox_fem/brig.ogg',
@@ -131,9 +144,10 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"but" = 'sound/vox_fem/but.ogg',
"button" = 'sound/vox_fem/button.ogg',
"bypass" = 'sound/vox_fem/bypass.ogg',
+ "c" = 'sound/vox_fem/c.ogg',
"cable" = 'sound/vox_fem/cable.ogg',
- "called" = 'sound/vox_fem/called.ogg',
"call" = 'sound/vox_fem/call.ogg',
+ "called" = 'sound/vox_fem/called.ogg',
"canal" = 'sound/vox_fem/canal.ogg',
"canister" = 'sound/vox_fem/canister.ogg',
"cap" = 'sound/vox_fem/cap.ogg',
@@ -142,6 +156,7 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"carbon" = 'sound/vox_fem/carbon.ogg',
"cargo" = 'sound/vox_fem/cargo.ogg',
"cat" = 'sound/vox_fem/cat.ogg',
+ "ce" = 'sound/vox_fem/ce.ogg',
"cease" = 'sound/vox_fem/cease.ogg',
"ceiling" = 'sound/vox_fem/ceiling.ogg',
"celsius" = 'sound/vox_fem/celsius.ogg',
@@ -149,12 +164,11 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"center" = 'sound/vox_fem/center.ogg',
"centi" = 'sound/vox_fem/centi.ogg',
"central" = 'sound/vox_fem/central.ogg',
- "ce" = 'sound/vox_fem/ce.ogg',
"challenge" = 'sound/vox_fem/challenge.ogg',
"chamber" = 'sound/vox_fem/chamber.ogg',
+ "change" = 'sound/vox_fem/change.ogg',
"changed" = 'sound/vox_fem/changed.ogg',
"changeling" = 'sound/vox_fem/changeling.ogg',
- "change" = 'sound/vox_fem/change.ogg',
"chapel" = 'sound/vox_fem/chapel.ogg',
"chaplain" = 'sound/vox_fem/chaplain.ogg',
"charlie" = 'sound/vox_fem/charlie.ogg',
@@ -164,19 +178,21 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"chemist" = 'sound/vox_fem/chemist.ogg',
"chief" = 'sound/vox_fem/chief.ogg',
"christ" = 'sound/vox_fem/christ.ogg',
+ "christmas" = 'sound/vox_fem/christmas.ogg',
"chuckle" = 'sound/vox_fem/chuckle.ogg',
"circuit" = 'sound/vox_fem/circuit.ogg',
"cleanup" = 'sound/vox_fem/cleanup.ogg',
- "clearance" = 'sound/vox_fem/clearance.ogg',
"clear" = 'sound/vox_fem/clear.ogg',
+ "clearance" = 'sound/vox_fem/clearance.ogg',
"clockwork" = 'sound/vox_fem/clockwork.ogg',
"close" = 'sound/vox_fem/close.ogg',
- "clowning" = 'sound/vox_fem/clowning.ogg',
+ "closed" = 'sound/vox_fem/closed.ogg',
+ "closing" = 'sound/vox_fem/closing.ogg',
"clown" = 'sound/vox_fem/clown.ogg',
+ "clowning" = 'sound/vox_fem/clowning.ogg',
"cmo" = 'sound/vox_fem/cmo.ogg',
- "coded" = 'sound/vox_fem/coded.ogg',
"code" = 'sound/vox_fem/code.ogg',
- "c" = 'sound/vox_fem/c.ogg',
+ "coded" = 'sound/vox_fem/coded.ogg',
"cold" = 'sound/vox_fem/cold.ogg',
"collider" = 'sound/vox_fem/collider.ogg',
"come" = 'sound/vox_fem/come.ogg',
@@ -189,8 +205,8 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"condom" = 'sound/vox_fem/condom.ogg',
"confirmed" = 'sound/vox_fem/confirmed.ogg',
"connor" = 'sound/vox_fem/connor.ogg',
- "console2" = 'sound/vox_fem/console2.ogg',
"console" = 'sound/vox_fem/console.ogg',
+ "console2" = 'sound/vox_fem/console2.ogg',
"construct" = 'sound/vox_fem/construct.ogg',
"containment" = 'sound/vox_fem/containment.ogg',
"contamination" = 'sound/vox_fem/contamination.ogg',
@@ -215,14 +231,15 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"cross" = 'sound/vox_fem/cross.ogg',
"cryogenic" = 'sound/vox_fem/cryogenic.ogg',
"crystal" = 'sound/vox_fem/crystal.ogg',
- "cultist" = 'sound/vox_fem/cultist.ogg',
"cult" = 'sound/vox_fem/cult.ogg',
+ "cultist" = 'sound/vox_fem/cultist.ogg',
"cunt" = 'sound/vox_fem/cunt.ogg',
"curator" = 'sound/vox_fem/curator.ogg',
"cyborg" = 'sound/vox_fem/cyborg.ogg',
"cyborgs" = 'sound/vox_fem/cyborgs.ogg',
- "damaged" = 'sound/vox_fem/damaged.ogg',
+ "d" = 'sound/vox_fem/d.ogg',
"damage" = 'sound/vox_fem/damage.ogg',
+ "damaged" = 'sound/vox_fem/damaged.ogg',
"danger" = 'sound/vox_fem/danger.ogg',
"dangerous" = 'sound/vox_fem/dangerous.ogg',
"day" = 'sound/vox_fem/day.ogg',
@@ -238,12 +255,12 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"demon" = 'sound/vox_fem/demon.ogg',
"denied" = 'sound/vox_fem/denied.ogg',
"departures" = 'sound/vox_fem/departures.ogg',
- "deployed" = 'sound/vox_fem/deployed.ogg',
"deploy" = 'sound/vox_fem/deploy.ogg',
+ "deployed" = 'sound/vox_fem/deployed.ogg',
"desire" = 'sound/vox_fem/desire.ogg',
"desist" = 'sound/vox_fem/desist.ogg',
- "destroyed" = 'sound/vox_fem/destroyed.ogg',
"destroy" = 'sound/vox_fem/destroy.ogg',
+ "destroyed" = 'sound/vox_fem/destroyed.ogg',
"destruction" = 'sound/vox_fem/destruction.ogg',
"detain" = 'sound/vox_fem/detain.ogg',
"detected" = 'sound/vox_fem/detected.ogg',
@@ -253,6 +270,7 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"devil" = 'sound/vox_fem/devil.ogg',
"did" = 'sound/vox_fem/did.ogg',
"die" = 'sound/vox_fem/die.ogg',
+ "died" = 'sound/vox_fem/died.ogg',
"dimensional" = 'sound/vox_fem/dimensional.ogg',
"dioxide" = 'sound/vox_fem/dioxide.ogg',
"director" = 'sound/vox_fem/director.ogg',
@@ -265,10 +283,9 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"disposal" = 'sound/vox_fem/disposal.ogg',
"distance" = 'sound/vox_fem/distance.ogg',
"distortion" = 'sound/vox_fem/distortion.ogg',
+ "do" = 'sound/vox_fem/do.ogg',
"doctor" = 'sound/vox_fem/doctor.ogg',
- "d" = 'sound/vox_fem/d.ogg',
"dog" = 'sound/vox_fem/dog.ogg',
- "do" = 'sound/vox_fem/do.ogg',
"doomsday" = 'sound/vox_fem/doomsday.ogg',
"doop" = 'sound/vox_fem/doop.ogg',
"door" = 'sound/vox_fem/door.ogg',
@@ -278,13 +295,14 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"drone" = 'sound/vox_fem/drone.ogg',
"dual" = 'sound/vox_fem/dual.ogg',
"duct" = 'sound/vox_fem/duct.ogg',
+ "e" = 'sound/vox_fem/e.ogg',
"east" = 'sound/vox_fem/east.ogg',
"echo" = 'sound/vox_fem/echo.ogg',
"ed" = 'sound/vox_fem/ed.ogg',
"effect" = 'sound/vox_fem/effect.ogg',
"egress" = 'sound/vox_fem/egress.ogg',
- "eighteen" = 'sound/vox_fem/eighteen.ogg',
"eight" = 'sound/vox_fem/eight.ogg',
+ "eighteen" = 'sound/vox_fem/eighteen.ogg',
"eighty" = 'sound/vox_fem/eighty.ogg',
"electric" = 'sound/vox_fem/electric.ogg',
"electromagnetic" = 'sound/vox_fem/electromagnetic.ogg',
@@ -294,35 +312,39 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"emergency" = 'sound/vox_fem/emergency.ogg',
"enabled" = 'sound/vox_fem/enabled.ogg',
"energy" = 'sound/vox_fem/energy.ogg',
- "engaged" = 'sound/vox_fem/engaged.ogg',
"engage" = 'sound/vox_fem/engage.ogg',
- "engineering" = 'sound/vox_fem/engineering.ogg',
- "engineer" = 'sound/vox_fem/engineer.ogg',
+ "engaged" = 'sound/vox_fem/engaged.ogg',
"engine" = 'sound/vox_fem/engine.ogg',
+ "engineer" = 'sound/vox_fem/engineer.ogg',
+ "engineering" = 'sound/vox_fem/engineering.ogg',
+ "enormous" = 'sound/vox_fem/enormous.ogg',
"enter" = 'sound/vox_fem/enter.ogg',
"entity" = 'sound/vox_fem/entity.ogg',
"entry" = 'sound/vox_fem/entry.ogg',
"environment" = 'sound/vox_fem/environment.ogg',
- "e" = 'sound/vox_fem/e.ogg',
"epic" = 'sound/vox_fem/epic.ogg',
"equipment" = 'sound/vox_fem/equipment.ogg',
"error" = 'sound/vox_fem/error.ogg',
"escape" = 'sound/vox_fem/escape.ogg',
- "evacuate" = 'sound/vox_fem/evacuate.ogg',
+ "ethereal" = 'sound/vox_fem/ethereal.ogg',
"eva" = 'sound/vox_fem/eva.ogg',
+ "evacuate" = 'sound/vox_fem/evacuate.ogg',
+ "ever" = 'sound/vox_fem/ever.ogg',
"exchange" = 'sound/vox_fem/exchange.ogg',
+ "execute" = 'sound/vox_fem/execute.ogg',
"exit" = 'sound/vox_fem/exit.ogg',
"expect" = 'sound/vox_fem/expect.ogg',
- "experimental" = 'sound/vox_fem/experimental.ogg',
"experiment" = 'sound/vox_fem/experiment.ogg',
+ "experimental" = 'sound/vox_fem/experimental.ogg',
"explode" = 'sound/vox_fem/explode.ogg',
"explosion" = 'sound/vox_fem/explosion.ogg',
"explosive" = 'sound/vox_fem/explosive.ogg',
"exposure" = 'sound/vox_fem/exposure.ogg',
"exterminate" = 'sound/vox_fem/exterminate.ogg',
- "extinguisher" = 'sound/vox_fem/extinguisher.ogg',
"extinguish" = 'sound/vox_fem/extinguish.ogg',
+ "extinguisher" = 'sound/vox_fem/extinguisher.ogg',
"extreme" = 'sound/vox_fem/extreme.ogg',
+ "f" = 'sound/vox_fem/f.ogg',
"facility" = 'sound/vox_fem/facility.ogg',
"factory" = 'sound/vox_fem/factory.ogg',
"fahrenheit" = 'sound/vox_fem/fahrenheit.ogg',
@@ -333,6 +355,7 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"fast" = 'sound/vox_fem/fast.ogg',
"fauna" = 'sound/vox_fem/fauna.ogg',
"feet" = 'sound/vox_fem/feet.ogg',
+ "felinid" = 'sound/vox_fem/felinid.ogg',
"field" = 'sound/vox_fem/field.ogg',
"fifteen" = 'sound/vox_fem/fifteen.ogg',
"fifth" = 'sound/vox_fem/fifth.ogg',
@@ -346,43 +369,46 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"flooding" = 'sound/vox_fem/flooding.ogg',
"floor" = 'sound/vox_fem/floor.ogg',
"flyman" = 'sound/vox_fem/flyman.ogg',
- "f" = 'sound/vox_fem/f.ogg',
"fool" = 'sound/vox_fem/fool.ogg',
+ "for" = 'sound/vox_fem/for.ogg',
"forbidden" = 'sound/vox_fem/forbidden.ogg',
"force" = 'sound/vox_fem/force.ogg',
"fore" = 'sound/vox_fem/fore.ogg',
- "formed" = 'sound/vox_fem/formed.ogg',
"form" = 'sound/vox_fem/form.ogg',
+ "formed" = 'sound/vox_fem/formed.ogg',
"forms" = 'sound/vox_fem/forms.ogg',
- "for" = 'sound/vox_fem/for.ogg',
+ "forty" = 'sound/vox_fem/forty.ogg',
"found" = 'sound/vox_fem/found.ogg',
"four" = 'sound/vox_fem/four.ogg',
"fourteen" = 'sound/vox_fem/fourteen.ogg',
"fourth" = 'sound/vox_fem/fourth.ogg',
"fourty" = 'sound/vox_fem/fourty.ogg',
"foxtrot" = 'sound/vox_fem/foxtrot.ogg',
- "freeman" = 'sound/vox_fem/freeman.ogg',
"free" = 'sound/vox_fem/free.ogg',
+ "freeman" = 'sound/vox_fem/freeman.ogg',
+ "freeze" = 'sound/vox_fem/freeze.ogg',
"freezer" = 'sound/vox_fem/freezer.ogg',
"freezing" = 'sound/vox_fem/freezing.ogg',
"from" = 'sound/vox_fem/from.ogg',
"front" = 'sound/vox_fem/front.ogg',
- "fucking" = 'sound/vox_fem/fucking.ogg',
+ "froze" = 'sound/vox_fem/froze.ogg',
+ "frozen" = 'sound/vox_fem/frozen.ogg',
"fuck" = 'sound/vox_fem/fuck.ogg',
+ "fucking" = 'sound/vox_fem/fucking.ogg',
"fucks" = 'sound/vox_fem/fucks.ogg',
"fuel" = 'sound/vox_fem/fuel.ogg',
+ "g" = 'sound/vox_fem/g.ogg',
"gas" = 'sound/vox_fem/gas.ogg',
"generator" = 'sound/vox_fem/generator.ogg',
"geneticist" = 'sound/vox_fem/geneticist.ogg',
"get" = 'sound/vox_fem/get.ogg',
"glory" = 'sound/vox_fem/glory.ogg',
+ "go" = 'sound/vox_fem/go.ogg',
"god" = 'sound/vox_fem/god.ogg',
- "g" = 'sound/vox_fem/g.ogg',
"going" = 'sound/vox_fem/going.ogg',
"golem" = 'sound/vox_fem/golem.ogg',
- "goodbye" = 'sound/vox_fem/goodbye.ogg',
"good" = 'sound/vox_fem/good.ogg',
- "go" = 'sound/vox_fem/go.ogg',
+ "goodbye" = 'sound/vox_fem/goodbye.ogg',
"gordon" = 'sound/vox_fem/gordon.ogg',
"got" = 'sound/vox_fem/got.ogg',
"government" = 'sound/vox_fem/government.ogg',
@@ -396,17 +422,20 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"gulf" = 'sound/vox_fem/gulf.ogg',
"gun" = 'sound/vox_fem/gun.ogg',
"guthrie" = 'sound/vox_fem/guthrie.ogg',
+ "h" = 'sound/vox_fem/h.ogg',
"hacker" = 'sound/vox_fem/hacker.ogg',
"hackers" = 'sound/vox_fem/hackers.ogg',
+ "had" = 'sound/vox_fem/had.ogg',
"hall" = 'sound/vox_fem/hall.ogg',
"hallway" = 'sound/vox_fem/hallway.ogg',
"handling" = 'sound/vox_fem/handling.ogg',
"hangar" = 'sound/vox_fem/hangar.ogg',
- "harmful" = 'sound/vox_fem/harmful.ogg',
"harm" = 'sound/vox_fem/harm.ogg',
+ "harmful" = 'sound/vox_fem/harmful.ogg',
"has" = 'sound/vox_fem/has.ogg',
"have" = 'sound/vox_fem/have.ogg',
"hazard" = 'sound/vox_fem/hazard.ogg',
+ "he" = 'sound/vox_fem/he.ogg',
"head" = 'sound/vox_fem/head.ogg',
"health" = 'sound/vox_fem/health.ogg',
"heat" = 'sound/vox_fem/heat.ogg',
@@ -414,20 +443,21 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"helium" = 'sound/vox_fem/helium.ogg',
"hello" = 'sound/vox_fem/hello.ogg',
"help" = 'sound/vox_fem/help.ogg',
- "he" = 'sound/vox_fem/he.ogg',
+ "her" = 'sound/vox_fem/her.ogg',
"here" = 'sound/vox_fem/here.ogg',
+ "heretic" = 'sound/vox_fem/heretic.ogg',
"hide" = 'sound/vox_fem/hide.ogg',
- "highest" = 'sound/vox_fem/highest.ogg',
"high" = 'sound/vox_fem/high.ogg',
+ "highest" = 'sound/vox_fem/highest.ogg',
+ "him" = 'sound/vox_fem/him.ogg',
"hit" = 'sound/vox_fem/hit.ogg',
- "h" = 'sound/vox_fem/h.ogg',
"hole" = 'sound/vox_fem/hole.ogg',
"honk" = 'sound/vox_fem/honk.ogg',
"hop" = 'sound/vox_fem/hop.ogg',
"hos" = 'sound/vox_fem/hos.ogg',
"hostile" = 'sound/vox_fem/hostile.ogg',
- "hotel" = 'sound/vox_fem/hotel.ogg',
"hot" = 'sound/vox_fem/hot.ogg',
+ "hotel" = 'sound/vox_fem/hotel.ogg',
"hour" = 'sound/vox_fem/hour.ogg',
"hours" = 'sound/vox_fem/hours.ogg',
"how" = 'sound/vox_fem/how.ogg',
@@ -439,19 +469,20 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"hurt" = 'sound/vox_fem/hurt.ogg',
"hydro" = 'sound/vox_fem/hydro.ogg',
"hydroponics" = 'sound/vox_fem/hydroponics.ogg',
+ "i" = 'sound/vox_fem/i.ogg',
"ian" = 'sound/vox_fem/ian.ogg',
"idiot" = 'sound/vox_fem/idiot.ogg',
- "if2" = 'sound/vox_fem/if2.ogg',
"if" = 'sound/vox_fem/if.ogg',
+ "if2" = 'sound/vox_fem/if2.ogg',
"illegal" = 'sound/vox_fem/illegal.ogg',
- "immediately" = 'sound/vox_fem/immediately.ogg',
"immediate" = 'sound/vox_fem/immediate.ogg',
+ "immediately" = 'sound/vox_fem/immediately.ogg',
"immortal" = 'sound/vox_fem/immortal.ogg',
"impossible" = 'sound/vox_fem/impossible.ogg',
+ "in" = 'sound/vox_fem/in.ogg',
"inches" = 'sound/vox_fem/inches.ogg',
"india" = 'sound/vox_fem/india.ogg',
"ing" = 'sound/vox_fem/ing.ogg',
- "in" = 'sound/vox_fem/in.ogg',
"inoperative" = 'sound/vox_fem/inoperative.ogg',
"inside" = 'sound/vox_fem/inside.ogg',
"inspection" = 'sound/vox_fem/inspection.ogg',
@@ -460,26 +491,30 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"internals" = 'sound/vox_fem/internals.ogg',
"intruder" = 'sound/vox_fem/intruder.ogg',
"invalid" = 'sound/vox_fem/invalid.ogg',
+ "invalidate" = 'sound/vox_fem/invalidate.ogg',
"invasion" = 'sound/vox_fem/invasion.ogg',
- "i" = 'sound/vox_fem/i.ogg',
"is" = 'sound/vox_fem/is.ogg',
"it" = 'sound/vox_fem/it.ogg',
+ "j" = 'sound/vox_fem/j.ogg',
"janitor" = 'sound/vox_fem/janitor.ogg',
"jesus" = 'sound/vox_fem/jesus.ogg',
- "j" = 'sound/vox_fem/j.ogg',
"johnson" = 'sound/vox_fem/johnson.ogg',
+ "jolly" = 'sound/vox_fem/jolly.ogg',
"juliet" = 'sound/vox_fem/juliet.ogg',
+ "k" = 'sound/vox_fem/k.ogg',
"key" = 'sound/vox_fem/key.ogg',
"kidnapped" = 'sound/vox_fem/kidnapped.ogg',
"kidnapping" = 'sound/vox_fem/kidnapping.ogg',
- "killed" = 'sound/vox_fem/killed.ogg',
"kill" = 'sound/vox_fem/kill.ogg',
+ "killed" = 'sound/vox_fem/killed.ogg',
+ "killer" = 'sound/vox_fem/killer.ogg',
"kilo" = 'sound/vox_fem/kilo.ogg',
- "kitchen" = 'sound/vox_fem/kitchen.ogg',
"kit" = 'sound/vox_fem/kit.ogg',
- "k" = 'sound/vox_fem/k.ogg',
+ "kitchen" = 'sound/vox_fem/kitchen.ogg',
+ "l" = 'sound/vox_fem/l.ogg',
"lab" = 'sound/vox_fem/lab.ogg',
"lambda" = 'sound/vox_fem/lambda.ogg',
+ "large" = 'sound/vox_fem/large.ogg',
"laser" = 'sound/vox_fem/laser.ogg',
"last" = 'sound/vox_fem/last.ogg',
"launch" = 'sound/vox_fem/launch.ogg',
@@ -496,23 +531,24 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"library" = 'sound/vox_fem/library.ogg',
"lie" = 'sound/vox_fem/lie.ogg',
"lieutenant" = 'sound/vox_fem/lieutenant.ogg',
- "lifeform" = 'sound/vox_fem/lifeform.ogg',
"life" = 'sound/vox_fem/life.ogg',
+ "lifeform" = 'sound/vox_fem/lifeform.ogg',
"light" = 'sound/vox_fem/light.ogg',
+ "lightbulb" = 'sound/vox_fem/lightbulb.ogg',
"lima" = 'sound/vox_fem/lima.ogg',
"liquid" = 'sound/vox_fem/liquid.ogg',
- "live2" = 'sound/vox_fem/live2.ogg',
"live" = 'sound/vox_fem/live.ogg',
+ "live2" = 'sound/vox_fem/live2.ogg',
"lizard" = 'sound/vox_fem/lizard.ogg',
+ "lizardperson" = 'sound/vox_fem/lizardperson.ogg',
"loading" = 'sound/vox_fem/loading.ogg',
- "located" = 'sound/vox_fem/located.ogg',
"locate" = 'sound/vox_fem/locate.ogg',
+ "located" = 'sound/vox_fem/located.ogg',
"location" = 'sound/vox_fem/location.ogg',
+ "lock" = 'sound/vox_fem/lock.ogg',
"locked" = 'sound/vox_fem/locked.ogg',
"locker" = 'sound/vox_fem/locker.ogg',
- "lock" = 'sound/vox_fem/lock.ogg',
"lockout" = 'sound/vox_fem/lockout.ogg',
- "l" = 'sound/vox_fem/l.ogg',
"long" = 'sound/vox_fem/long.ogg',
"look" = 'sound/vox_fem/look.ogg',
"loop" = 'sound/vox_fem/loop.ogg',
@@ -521,11 +557,14 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"lower" = 'sound/vox_fem/lower.ogg',
"lowest" = 'sound/vox_fem/lowest.ogg',
"lusty" = 'sound/vox_fem/lusty.ogg',
+ "m" = 'sound/vox_fem/m.ogg',
"machine" = 'sound/vox_fem/machine.ogg',
"magic" = 'sound/vox_fem/magic.ogg',
"magnetic" = 'sound/vox_fem/magnetic.ogg',
"main" = 'sound/vox_fem/main.ogg',
+ "maintainer" = 'sound/vox_fem/maintainer.ogg',
"maintenance" = 'sound/vox_fem/maintenance.ogg',
+ "major" = 'sound/vox_fem/major.ogg',
"malfunction" = 'sound/vox_fem/malfunction.ogg',
"man" = 'sound/vox_fem/man.ogg',
"many" = 'sound/vox_fem/many.ogg',
@@ -533,12 +572,12 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"materials" = 'sound/vox_fem/materials.ogg',
"maximum" = 'sound/vox_fem/maximum.ogg',
"may" = 'sound/vox_fem/may.ogg',
+ "me" = 'sound/vox_fem/me.ogg',
"meat" = 'sound/vox_fem/meat.ogg',
"medbay" = 'sound/vox_fem/medbay.ogg',
"medical" = 'sound/vox_fem/medical.ogg',
"megafauna" = 'sound/vox_fem/megafauna.ogg',
"men" = 'sound/vox_fem/men.ogg',
- "me" = 'sound/vox_fem/me.ogg',
"mercy" = 'sound/vox_fem/mercy.ogg',
"mesa" = 'sound/vox_fem/mesa.ogg',
"message" = 'sound/vox_fem/message.ogg',
@@ -554,70 +593,82 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"minefield" = 'sound/vox_fem/minefield.ogg',
"miner" = 'sound/vox_fem/miner.ogg',
"minimum" = 'sound/vox_fem/minimum.ogg',
+ "minor" = 'sound/vox_fem/minor.ogg',
"minutes" = 'sound/vox_fem/minutes.ogg',
"mister" = 'sound/vox_fem/mister.ogg',
"mode" = 'sound/vox_fem/mode.ogg',
"modification" = 'sound/vox_fem/modification.ogg',
- "m" = 'sound/vox_fem/m.ogg',
"money" = 'sound/vox_fem/money.ogg',
"monkey" = 'sound/vox_fem/monkey.ogg',
"moth" = 'sound/vox_fem/moth.ogg',
+ "mothperson" = 'sound/vox_fem/mothperson.ogg',
"motor" = 'sound/vox_fem/motor.ogg',
"motorpool" = 'sound/vox_fem/motorpool.ogg',
"move" = 'sound/vox_fem/move.ogg',
"multitude" = 'sound/vox_fem/multitude.ogg',
"murder" = 'sound/vox_fem/murder.ogg',
+ "murderer" = 'sound/vox_fem/murderer.ogg',
"must" = 'sound/vox_fem/must.ogg',
"my" = 'sound/vox_fem/my.ogg',
"mythic" = 'sound/vox_fem/mythic.ogg',
+ "n" = 'sound/vox_fem/n.ogg',
"nanotrasen" = 'sound/vox_fem/nanotrasen.ogg',
"nearest" = 'sound/vox_fem/nearest.ogg',
"need" = 'sound/vox_fem/need.ogg',
+ "never" = 'sound/vox_fem/never.ogg',
"nice" = 'sound/vox_fem/nice.ogg',
+ "night" = 'sound/vox_fem/night.ogg',
"nine" = 'sound/vox_fem/nine.ogg',
"nineteen" = 'sound/vox_fem/nineteen.ogg',
"ninety" = 'sound/vox_fem/ninety.ogg',
"nitrogen" = 'sound/vox_fem/nitrogen.ogg',
- "n" = 'sound/vox_fem/n.ogg',
- "nominal" = 'sound/vox_fem/nominal.ogg',
"no" = 'sound/vox_fem/no.ogg',
+ "nominal" = 'sound/vox_fem/nominal.ogg',
"north" = 'sound/vox_fem/north.ogg',
+ "northeast" = 'sound/vox_fem/northeast.ogg',
+ "northwest" = 'sound/vox_fem/northwest.ogg',
"not" = 'sound/vox_fem/not.ogg',
"november" = 'sound/vox_fem/november.ogg',
"now" = 'sound/vox_fem/now.ogg',
"nuclear" = 'sound/vox_fem/nuclear.ogg',
"nuke" = 'sound/vox_fem/nuke.ogg',
"number" = 'sound/vox_fem/number.ogg',
+ "o" = 'sound/vox_fem/o.ogg',
"objective" = 'sound/vox_fem/objective.ogg',
+ "obliterate" = 'sound/vox_fem/obliterate.ogg',
+ "obliterated" = 'sound/vox_fem/obliterated.ogg',
+ "obliterating" = 'sound/vox_fem/obliterating.ogg',
"observation" = 'sound/vox_fem/observation.ogg',
"obtain" = 'sound/vox_fem/obtain.ogg',
+ "of" = 'sound/vox_fem/of.ogg',
+ "off" = 'sound/vox_fem/off.ogg',
"office" = 'sound/vox_fem/office.ogg',
"officer" = 'sound/vox_fem/officer.ogg',
- "off" = 'sound/vox_fem/off.ogg',
- "of" = 'sound/vox_fem/of.ogg',
- "," = 'sound/vox_fem/,.ogg',
- "." = 'sound/vox_fem/..ogg',
"oh" = 'sound/vox_fem/oh.ogg',
"ok" = 'sound/vox_fem/ok.ogg',
- "one" = 'sound/vox_fem/one.ogg',
+ "okay" = 'sound/vox_fem/okay.ogg',
"on" = 'sound/vox_fem/on.ogg',
+ "once" = 'sound/vox_fem/once.ogg',
+ "one" = 'sound/vox_fem/one.ogg',
"oof" = 'sound/vox_fem/oof.ogg',
- "o" = 'sound/vox_fem/o.ogg',
"open" = 'sound/vox_fem/open.ogg',
+ "opened" = 'sound/vox_fem/opened.ogg',
+ "opening" = 'sound/vox_fem/opening.ogg',
"operating" = 'sound/vox_fem/operating.ogg',
"operations" = 'sound/vox_fem/operations.ogg',
"operative" = 'sound/vox_fem/operative.ogg',
"option" = 'sound/vox_fem/option.ogg',
+ "or" = 'sound/vox_fem/or.ogg',
"order" = 'sound/vox_fem/order.ogg',
"organic" = 'sound/vox_fem/organic.ogg',
- "or" = 'sound/vox_fem/or.ogg',
"oscar" = 'sound/vox_fem/oscar.ogg',
"out" = 'sound/vox_fem/out.ogg',
"outside" = 'sound/vox_fem/outside.ogg',
- "overload" = 'sound/vox_fem/overload.ogg',
"over" = 'sound/vox_fem/over.ogg',
+ "overload" = 'sound/vox_fem/overload.ogg',
"override" = 'sound/vox_fem/override.ogg',
"oxygen" = 'sound/vox_fem/oxygen.ogg',
+ "p" = 'sound/vox_fem/p.ogg',
"pacification" = 'sound/vox_fem/pacification.ogg',
"pacify" = 'sound/vox_fem/pacify.ogg',
"pain" = 'sound/vox_fem/pain.ogg',
@@ -627,6 +678,7 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"pathetic" = 'sound/vox_fem/pathetic.ogg',
"percent" = 'sound/vox_fem/percent.ogg',
"perfect" = 'sound/vox_fem/perfect.ogg',
+ "perhaps" = 'sound/vox_fem/perhaps.ogg',
"perimeter" = 'sound/vox_fem/perimeter.ogg',
"permitted" = 'sound/vox_fem/permitted.ogg',
"personal" = 'sound/vox_fem/personal.ogg',
@@ -635,23 +687,24 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"piping" = 'sound/vox_fem/piping.ogg',
"piss" = 'sound/vox_fem/piss.ogg',
"plant" = 'sound/vox_fem/plant.ogg',
- "plasmaman" = 'sound/vox_fem/plasmaman.ogg',
"plasma" = 'sound/vox_fem/plasma.ogg',
+ "plasmaman" = 'sound/vox_fem/plasmaman.ogg',
"platform" = 'sound/vox_fem/platform.ogg',
"plausible" = 'sound/vox_fem/plausible.ogg',
"please" = 'sound/vox_fem/please.ogg',
- "p" = 'sound/vox_fem/p.ogg',
"point" = 'sound/vox_fem/point.ogg',
- "portal" = 'sound/vox_fem/portal.ogg',
"port" = 'sound/vox_fem/port.ogg',
+ "portal" = 'sound/vox_fem/portal.ogg',
"possible" = 'sound/vox_fem/possible.ogg',
"power" = 'sound/vox_fem/power.ogg',
"presence" = 'sound/vox_fem/presence.ogg',
+ "present" = 'sound/vox_fem/present.ogg',
+ "presents" = 'sound/vox_fem/presents.ogg',
"press" = 'sound/vox_fem/press.ogg',
"pressure" = 'sound/vox_fem/pressure.ogg',
"primary" = 'sound/vox_fem/primary.ogg',
- "prisoner" = 'sound/vox_fem/prisoner.ogg',
"prison" = 'sound/vox_fem/prison.ogg',
+ "prisoner" = 'sound/vox_fem/prisoner.ogg',
"proceed" = 'sound/vox_fem/proceed.ogg',
"processing" = 'sound/vox_fem/processing.ogg',
"progress" = 'sound/vox_fem/progress.ogg',
@@ -667,19 +720,20 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"quartermaster" = 'sound/vox_fem/quartermaster.ogg',
"quebec" = 'sound/vox_fem/quebec.ogg',
"queen" = 'sound/vox_fem/queen.ogg',
+ "question" = 'sound/vox_fem/question.ogg',
"questionable" = 'sound/vox_fem/questionable.ogg',
"questioning" = 'sound/vox_fem/questioning.ogg',
- "question" = 'sound/vox_fem/question.ogg',
"quick" = 'sound/vox_fem/quick.ogg',
"quit" = 'sound/vox_fem/quit.ogg',
+ "r" = 'sound/vox_fem/r.ogg',
"radiation" = 'sound/vox_fem/radiation.ogg',
"radioactive" = 'sound/vox_fem/radioactive.ogg',
"rads" = 'sound/vox_fem/rads.ogg',
"raider" = 'sound/vox_fem/raider.ogg',
"raiders" = 'sound/vox_fem/raiders.ogg',
"rapid" = 'sound/vox_fem/rapid.ogg',
- "reached" = 'sound/vox_fem/reached.ogg',
"reach" = 'sound/vox_fem/reach.ogg',
+ "reached" = 'sound/vox_fem/reached.ogg',
"reactor" = 'sound/vox_fem/reactor.ogg',
"red" = 'sound/vox_fem/red.ogg',
"relay" = 'sound/vox_fem/relay.ogg',
@@ -690,28 +744,31 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"repair" = 'sound/vox_fem/repair.ogg',
"report" = 'sound/vox_fem/report.ogg',
"reports" = 'sound/vox_fem/reports.ogg',
- "required" = 'sound/vox_fem/required.ogg',
+ "request" = 'sound/vox_fem/request.ogg',
+ "requested" = 'sound/vox_fem/requested.ogg',
+ "requesting" = 'sound/vox_fem/requesting.ogg',
"require" = 'sound/vox_fem/require.ogg',
+ "required" = 'sound/vox_fem/required.ogg',
"research" = 'sound/vox_fem/research.ogg',
"resevoir" = 'sound/vox_fem/resevoir.ogg',
"resistance" = 'sound/vox_fem/resistance.ogg',
"rest" = 'sound/vox_fem/rest.ogg',
"restoration" = 'sound/vox_fem/restoration.ogg',
- "revolutionary" = 'sound/vox_fem/revolutionary.ogg',
"revolution" = 'sound/vox_fem/revolution.ogg',
+ "revolutionary" = 'sound/vox_fem/revolutionary.ogg',
"right" = 'sound/vox_fem/right.ogg',
"riot" = 'sound/vox_fem/riot.ogg',
"roboticist" = 'sound/vox_fem/roboticist.ogg',
"rocket" = 'sound/vox_fem/rocket.ogg',
"roger" = 'sound/vox_fem/roger.ogg',
- "r" = 'sound/vox_fem/r.ogg',
"rogue" = 'sound/vox_fem/rogue.ogg',
"romeo" = 'sound/vox_fem/romeo.ogg',
"room" = 'sound/vox_fem/room.ogg',
"round" = 'sound/vox_fem/round.ogg',
- "rune" = 'sound/vox_fem/rune.ogg',
"run" = 'sound/vox_fem/run.ogg',
+ "rune" = 'sound/vox_fem/rune.ogg',
"runtime" = 'sound/vox_fem/runtime.ogg',
+ "s" = 'sound/vox_fem/s.ogg',
"sabotage" = 'sound/vox_fem/sabotage.ogg',
"safe" = 'sound/vox_fem/safe.ogg',
"safety" = 'sound/vox_fem/safety.ogg',
@@ -726,16 +783,16 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"scream" = 'sound/vox_fem/scream.ogg',
"screen" = 'sound/vox_fem/screen.ogg',
"search" = 'sound/vox_fem/search.ogg',
- "secondary" = 'sound/vox_fem/secondary.ogg',
"second" = 'sound/vox_fem/second.ogg',
+ "secondary" = 'sound/vox_fem/secondary.ogg',
"seconds" = 'sound/vox_fem/seconds.ogg',
"section" = 'sound/vox_fem/section.ogg',
"sector" = 'sound/vox_fem/sector.ogg',
- "secured" = 'sound/vox_fem/secured.ogg',
"secure" = 'sound/vox_fem/secure.ogg',
+ "secured" = 'sound/vox_fem/secured.ogg',
"security" = 'sound/vox_fem/security.ogg',
- "selected" = 'sound/vox_fem/selected.ogg',
"select" = 'sound/vox_fem/select.ogg',
+ "selected" = 'sound/vox_fem/selected.ogg',
"self" = 'sound/vox_fem/self.ogg',
"sensors" = 'sound/vox_fem/sensors.ogg',
"server" = 'sound/vox_fem/server.ogg',
@@ -751,8 +808,8 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"shield" = 'sound/vox_fem/shield.ogg',
"shipment" = 'sound/vox_fem/shipment.ogg',
"shirt" = 'sound/vox_fem/shirt.ogg',
- "shitlord" = 'sound/vox_fem/shitlord.ogg',
"shit" = 'sound/vox_fem/shit.ogg',
+ "shitlord" = 'sound/vox_fem/shitlord.ogg',
"shits" = 'sound/vox_fem/shits.ogg',
"shitting" = 'sound/vox_fem/shitting.ogg',
"shock" = 'sound/vox_fem/shock.ogg',
@@ -778,7 +835,8 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"slippery" = 'sound/vox_fem/slippery.ogg',
"slow" = 'sound/vox_fem/slow.ogg',
"sm" = 'sound/vox_fem/sm.ogg',
- "s" = 'sound/vox_fem/s.ogg',
+ "small" = 'sound/vox_fem/small.ogg',
+ "sockmuncher" = 'sound/vox_fem/sockmuncher.ogg',
"solar" = 'sound/vox_fem/solar.ogg',
"solars" = 'sound/vox_fem/solars.ogg',
"soldier" = 'sound/vox_fem/soldier.ogg',
@@ -788,6 +846,8 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"son" = 'sound/vox_fem/son.ogg',
"sorry" = 'sound/vox_fem/sorry.ogg',
"south" = 'sound/vox_fem/south.ogg',
+ "southeast" = 'sound/vox_fem/southeast.ogg',
+ "southwest" = 'sound/vox_fem/southwest.ogg',
"space" = 'sound/vox_fem/space.ogg',
"squad" = 'sound/vox_fem/squad.ogg',
"square" = 'sound/vox_fem/square.ogg',
@@ -814,16 +874,18 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"supply" = 'sound/vox_fem/supply.ogg',
"surface" = 'sound/vox_fem/surface.ogg',
"surrender" = 'sound/vox_fem/surrender.ogg',
- "surrounded" = 'sound/vox_fem/surrounded.ogg',
"surround" = 'sound/vox_fem/surround.ogg',
+ "surrounded" = 'sound/vox_fem/surrounded.ogg',
"sweating" = 'sound/vox_fem/sweating.ogg',
"swhitenoise" = 'sound/vox_fem/swhitenoise.ogg',
"switch" = 'sound/vox_fem/switch.ogg',
"syndicate" = 'sound/vox_fem/syndicate.ogg',
"system" = 'sound/vox_fem/system.ogg',
"systems" = 'sound/vox_fem/systems.ogg',
+ "t" = 'sound/vox_fem/t.ogg',
"table" = 'sound/vox_fem/table.ogg',
"tactical" = 'sound/vox_fem/tactical.ogg',
+ "taildragger" = 'sound/vox_fem/taildragger.ogg',
"take" = 'sound/vox_fem/take.ogg',
"talk" = 'sound/vox_fem/talk.ogg',
"tampered" = 'sound/vox_fem/tampered.ogg',
@@ -831,22 +893,26 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"tank" = 'sound/vox_fem/tank.ogg',
"target" = 'sound/vox_fem/target.ogg',
"team" = 'sound/vox_fem/team.ogg',
+ "tech" = 'sound/vox_fem/tech.ogg',
"technician" = 'sound/vox_fem/technician.ogg',
"technology" = 'sound/vox_fem/technology.ogg',
- "tech" = 'sound/vox_fem/tech.ogg',
+ "teleporter" = 'sound/vox_fem/teleporter.ogg',
"temperature" = 'sound/vox_fem/temperature.ogg',
"temporal" = 'sound/vox_fem/temporal.ogg',
"ten" = 'sound/vox_fem/ten.ogg',
"terminal" = 'sound/vox_fem/terminal.ogg',
+ "terminate" = 'sound/vox_fem/terminate.ogg',
"terminated" = 'sound/vox_fem/terminated.ogg',
"termination" = 'sound/vox_fem/termination.ogg',
"test" = 'sound/vox_fem/test.ogg',
"text" = 'sound/vox_fem/text.ogg',
+ "thank" = 'sound/vox_fem/thank.ogg',
+ "thanks" = 'sound/vox_fem/thanks.ogg',
"that" = 'sound/vox_fem/that.ogg',
+ "the" = 'sound/vox_fem/the.ogg',
"theater" = 'sound/vox_fem/theater.ogg',
"them" = 'sound/vox_fem/them.ogg',
"then" = 'sound/vox_fem/then.ogg',
- "the" = 'sound/vox_fem/the.ogg',
"there" = 'sound/vox_fem/there.ogg',
"they" = 'sound/vox_fem/they.ogg',
"third" = 'sound/vox_fem/third.ogg',
@@ -860,7 +926,7 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"through" = 'sound/vox_fem/through.ogg',
"tide" = 'sound/vox_fem/tide.ogg',
"time" = 'sound/vox_fem/time.ogg',
- "t" = 'sound/vox_fem/t.ogg',
+ "tiny" = 'sound/vox_fem/tiny.ogg',
"to" = 'sound/vox_fem/to.ogg',
"top" = 'sound/vox_fem/top.ogg',
"topside" = 'sound/vox_fem/topside.ogg',
@@ -879,8 +945,9 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"twelve" = 'sound/vox_fem/twelve.ogg',
"twenty" = 'sound/vox_fem/twenty.ogg',
"two" = 'sound/vox_fem/two.ogg',
- "ughh" = 'sound/vox_fem/ughh.ogg',
+ "u" = 'sound/vox_fem/u.ogg',
"ugh" = 'sound/vox_fem/ugh.ogg',
+ "ughh" = 'sound/vox_fem/ughh.ogg',
"unable" = 'sound/vox_fem/unable.ogg',
"unauthorized" = 'sound/vox_fem/unauthorized.ogg',
"under" = 'sound/vox_fem/under.ogg',
@@ -889,26 +956,27 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"unlocked" = 'sound/vox_fem/unlocked.ogg',
"unsafe" = 'sound/vox_fem/unsafe.ogg',
"until" = 'sound/vox_fem/until.ogg',
- "u" = 'sound/vox_fem/u.ogg',
- "updated" = 'sound/vox_fem/updated.ogg',
+ "up" = 'sound/vox_fem/up.ogg',
"update" = 'sound/vox_fem/update.ogg',
+ "updated" = 'sound/vox_fem/updated.ogg',
"updating" = 'sound/vox_fem/updating.ogg',
"upload" = 'sound/vox_fem/upload.ogg',
- "up" = 'sound/vox_fem/up.ogg',
"upper" = 'sound/vox_fem/upper.ogg',
"uranium" = 'sound/vox_fem/uranium.ogg',
+ "us" = 'sound/vox_fem/us.ogg',
"usa" = 'sound/vox_fem/usa.ogg',
- "used" = 'sound/vox_fem/used.ogg',
"use" = 'sound/vox_fem/use.ogg',
+ "used" = 'sound/vox_fem/used.ogg',
"user" = 'sound/vox_fem/user.ogg',
- "us" = 'sound/vox_fem/us.ogg',
+ "v" = 'sound/vox_fem/v.ogg',
"vacate" = 'sound/vox_fem/vacate.ogg',
"vacuum" = 'sound/vox_fem/vacuum.ogg',
"valid" = 'sound/vox_fem/valid.ogg',
+ "validate" = 'sound/vox_fem/validate.ogg',
"vapor" = 'sound/vox_fem/vapor.ogg',
"vendor" = 'sound/vox_fem/vendor.ogg',
- "ventilation" = 'sound/vox_fem/ventilation.ogg',
"vent" = 'sound/vox_fem/vent.ogg',
+ "ventilation" = 'sound/vox_fem/ventilation.ogg',
"very" = 'sound/vox_fem/very.ogg',
"victor" = 'sound/vox_fem/victor.ogg',
"violated" = 'sound/vox_fem/violated.ogg',
@@ -917,31 +985,33 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"virology" = 'sound/vox_fem/virology.ogg',
"virus" = 'sound/vox_fem/virus.ogg',
"vitals" = 'sound/vox_fem/vitals.ogg',
- "v" = 'sound/vox_fem/v.ogg',
"voltage" = 'sound/vox_fem/voltage.ogg',
- "vox_login" = 'sound/vox_fem/vox_login.ogg',
"vox" = 'sound/vox_fem/vox.ogg',
+ "vox_login" = 'sound/vox_fem/vox_login.ogg',
"voxtest" = 'sound/vox_fem/voxtest.ogg',
+ "w" = 'sound/vox_fem/w.ogg',
"walk" = 'sound/vox_fem/walk.ogg',
"wall" = 'sound/vox_fem/wall.ogg',
"wanker" = 'sound/vox_fem/wanker.ogg',
- "wanted" = 'sound/vox_fem/wanted.ogg',
"want" = 'sound/vox_fem/want.ogg',
+ "wanted" = 'sound/vox_fem/wanted.ogg',
"warden" = 'sound/vox_fem/warden.ogg',
"warm" = 'sound/vox_fem/warm.ogg',
- "warning" = 'sound/vox_fem/warning.ogg',
"warn" = 'sound/vox_fem/warn.ogg',
+ "warning" = 'sound/vox_fem/warning.ogg',
+ "was" = 'sound/vox_fem/was.ogg',
"waste" = 'sound/vox_fem/waste.ogg',
"water" = 'sound/vox_fem/water.ogg',
+ "we" = 'sound/vox_fem/we.ogg',
"weak" = 'sound/vox_fem/weak.ogg',
"weapon" = 'sound/vox_fem/weapon.ogg',
"welcome" = 'sound/vox_fem/welcome.ogg',
- "we" = 'sound/vox_fem/we.ogg',
"west" = 'sound/vox_fem/west.ogg',
"wew" = 'sound/vox_fem/wew.ogg',
"what" = 'sound/vox_fem/what.ogg',
"when" = 'sound/vox_fem/when.ogg',
"where" = 'sound/vox_fem/where.ogg',
+ "while" = 'sound/vox_fem/while.ogg',
"whiskey" = 'sound/vox_fem/whiskey.ogg',
"white" = 'sound/vox_fem/white.ogg',
"why" = 'sound/vox_fem/why.ogg',
@@ -952,29 +1022,28 @@ GLOBAL_LIST_INIT(vox_sounds, list(
"with" = 'sound/vox_fem/with.ogg',
"without" = 'sound/vox_fem/without.ogg',
"wizard" = 'sound/vox_fem/wizard.ogg',
- "w" = 'sound/vox_fem/w.ogg',
"wood" = 'sound/vox_fem/wood.ogg',
"woody" = 'sound/vox_fem/woody.ogg',
"woop" = 'sound/vox_fem/woop.ogg',
"wow" = 'sound/vox_fem/wow.ogg',
+ "x" = 'sound/vox_fem/x.ogg',
+ "xeno" = 'sound/vox_fem/xeno.ogg',
"xenobiology" = 'sound/vox_fem/xenobiology.ogg',
"xenomorph" = 'sound/vox_fem/xenomorph.ogg',
"xenomorphs" = 'sound/vox_fem/xenomorphs.ogg',
- "xeno" = 'sound/vox_fem/xeno.ogg',
- "x" = 'sound/vox_fem/x.ogg',
+ "y" = 'sound/vox_fem/y.ogg',
"yankee" = 'sound/vox_fem/yankee.ogg',
"yards" = 'sound/vox_fem/yards.ogg',
"year" = 'sound/vox_fem/year.ogg',
"yellow" = 'sound/vox_fem/yellow.ogg',
"yes" = 'sound/vox_fem/yes.ogg',
- "y" = 'sound/vox_fem/y.ogg',
"you" = 'sound/vox_fem/you.ogg',
"your" = 'sound/vox_fem/your.ogg',
"yourself" = 'sound/vox_fem/yourself.ogg',
- "zero" = 'sound/vox_fem/zero.ogg',
"z" = 'sound/vox_fem/z.ogg',
+ "zero" = 'sound/vox_fem/zero.ogg',
"zombie" = 'sound/vox_fem/zombie.ogg',
"zone" = 'sound/vox_fem/zone.ogg',
- "zulu" = 'sound/vox_fem/zulu.ogg'
- ))
+ "zulu" = 'sound/vox_fem/zulu.ogg',
+))
#endif
diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm
index c766ac080d1..58e5a244eaf 100644
--- a/code/modules/mob/living/silicon/damage_procs.dm
+++ b/code/modules/mob/living/silicon/damage_procs.dm
@@ -25,7 +25,7 @@
return FALSE
-/mob/living/silicon/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, forced = FALSE, required_biotype)
+/mob/living/silicon/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype)
if(isAI(src)) //ditto
return ..()
diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm
index 1cd7035b8a0..229ad70bb84 100644
--- a/code/modules/mob/living/silicon/death.dm
+++ b/code/modules/mob/living/silicon/death.dm
@@ -5,8 +5,6 @@
new /obj/effect/decal/remains/robot(loc)
/mob/living/silicon/death(gibbed)
- if(!gibbed)
- INVOKE_ASYNC(src, PROC_REF(emote), "deathgasp")
diag_hud_set_status()
diag_hud_set_health()
update_health_hud()
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index 41855a0db87..2f6c67b976c 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL
+/* NOVA EDIT REMOVAL
/datum/emote/silicon
mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot, /mob/living/basic/bot)
emote_type = EMOTE_AUDIBLE
diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm
index 68ee438dc12..8f17cf20d8a 100644
--- a/code/modules/mob/living/silicon/robot/examine.dm
+++ b/code/modules/mob/living/silicon/robot/examine.dm
@@ -46,9 +46,9 @@
. += span_warning("It doesn't seem to be responding.")
if(DEAD)
. += span_deadsay("It looks like its system is corrupted and requires a reset.")
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
. += get_silicon_flavortext()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
. += " "
. += ..()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 31ead7ef718..805bb7b6dd4 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -12,7 +12,7 @@
post_untipped_callback = CALLBACK(src, PROC_REF(after_righted)), \
roleplay_friendly = TRUE, \
roleplay_emotes = list(/datum/emote/living/human/buzz, /datum/emote/living/human/buzz2, /datum/emote/living/human/beep, /datum/emote/living/human/beep2), \
- roleplay_callback = CALLBACK(src, PROC_REF(untip_roleplay))) // SKYRAT EDIT CHANGE
+ roleplay_callback = CALLBACK(src, PROC_REF(untip_roleplay))) // NOVA EDIT CHANGE
set_wires(new /datum/wires/robot(src))
AddElement(/datum/element/empprotection, EMP_PROTECT_WIRES)
@@ -160,7 +160,7 @@
to_chat(src,span_userdanger("ERROR: Lockdown is engaged. Please disengage lockdown to pick module."))
return
- // SKYRAT EDIT START - Making the cyborg model list static to reduce how many times it's generated.
+ // NOVA EDIT START - Making the cyborg model list static to reduce how many times it's generated.
if(!length(GLOB.cyborg_model_list))
GLOB.cyborg_model_list = list(
"Engineering" = /obj/item/robot_model/engineering,
@@ -184,8 +184,8 @@
for(var/option in GLOB.cyborg_model_list)
var/obj/item/robot_model/model = GLOB.cyborg_model_list[option]
var/model_icon = initial(model.cyborg_base_icon)
- GLOB.cyborg_base_models_icon_list[option] = image(icon = 'modular_skyrat/master_files/icons/mob/robots.dmi', icon_state = model_icon) // SKYRAT EDIT - CARGO BORGS - ORIGINAL: model_icons[option] = image(icon = 'icons/mob/robots.dmi', icon_state = model_icon)
- // SKYRAT EDIT END
+ GLOB.cyborg_base_models_icon_list[option] = image(icon = 'modular_nova/master_files/icons/mob/robots.dmi', icon_state = model_icon) // NOVA EDIT - CARGO BORGS - ORIGINAL: model_icons[option] = image(icon = 'icons/mob/robots.dmi', icon_state = model_icon)
+ // NOVA EDIT END
var/input_model = show_radial_menu(src, src, GLOB.cyborg_base_models_icon_list, radius = 42)
if(!input_model || model.type != /obj/item/robot_model)
@@ -734,14 +734,14 @@
if (hasExpanded)
hasExpanded = FALSE
//update_transform(0.5) // Original
- update_transform(0.8) // SKYRAT EDIT CHANGE
+ update_transform(0.8) // NOVA EDIT CHANGE
- //SKYRAT EDIT ADDITION BEGIN - CYBORG
+ //NOVA EDIT ADDITION BEGIN - CYBORG
if (hasShrunk)
hasShrunk = FALSE
update_transform(4/3)
hasAffection = FALSE //Just so they can get the affection modules back if they want them.
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
logevent("Chassis model has been reset.")
log_silicon("CYBORG: [key_name(src)] has reset their cyborg model.")
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 074f9d0049a..44e8583b86f 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -207,24 +207,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real
..()
return
-/mob/living/silicon/robot/attack_slime(mob/living/simple_animal/slime/M, list/modifiers)
- if(..()) //successful slime shock
- flash_act()
- var/stunprob = M.powerlevel * 7 + 10
- if(prob(stunprob) && M.powerlevel >= 8)
- adjustBruteLoss(M.powerlevel * rand(6,10))
-
- var/damage = rand(1, 3)
-
- if(M.is_adult)
- damage = rand(20, 40)
- else
- damage = rand(5, 35)
- damage = round(damage / 2) // borgs receive half damage
- adjustBruteLoss(damage)
-
- return
-
/mob/living/silicon/robot/attack_hand(mob/living/carbon/human/user, list/modifiers)
add_fingerprint(user)
if(!opened)
diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm
index 965845073cd..d87532f9a6c 100644
--- a/code/modules/mob/living/silicon/robot/robot_defines.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defines.dm
@@ -8,7 +8,7 @@
/mob/living/silicon/robot
name = "Cyborg"
real_name = "Cyborg"
- icon = 'icons/mob/silicon/robots.dmi' //SKYRAT EDIT - Modified in modular_skyrat\modules\altborgs\code\robot_defines.dm (to allow for custom transformation animations)
+ icon = 'icons/mob/silicon/robots.dmi' //NOVA EDIT - Modified in modular_nova\modules\altborgs\code\robot_defines.dm (to allow for custom transformation animations)
icon_state = "robot"
maxHealth = 100
health = 100
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index 0ded7750d24..05ad14c5f21 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -157,11 +157,11 @@
var/obj/item/gun/energy/gun = module
if(!gun.chambered)
gun.recharge_newshot() //try to reload a new shot.
- /// SKYRAT EDIT START - Cargo borgs
+ /// NOVA EDIT START - Cargo borgs
else if(istype(module, /obj/item/hand_labeler/cyborg))
var/obj/item/hand_labeler/cyborg/labeler = module
labeler.labels_left = 30
- /// SKYRAT EDIT END
+ /// NOVA EDIT END
cyborg.toner = cyborg.tonermax
@@ -227,10 +227,10 @@
cyborg.set_modularInterface_theme()
log_silicon("CYBORG: [key_name(cyborg)] has transformed into the [new_model] model.")
- //SKYRAT EDIT ADDITION BEGIN - ALTBORGS - Old check for 'dogborg' var no longer necessary, refactored into model_features instead.
+ //NOVA EDIT ADDITION BEGIN - ALTBORGS - Old check for 'dogborg' var no longer necessary, refactored into model_features instead.
new_model.update_dogborg()
new_model.update_tallborg()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
INVOKE_ASYNC(new_model, PROC_REF(do_transform_animation))
qdel(src)
@@ -246,26 +246,26 @@
for(var/skin in borg_skins)
var/list/details = borg_skins[skin]
reskin_icons[skin] = image(icon = details[SKIN_ICON] || 'icons/mob/silicon/robots.dmi', icon_state = details[SKIN_ICON_STATE])
- //SKYRAT EDIT ADDITION BEGIN - ALTBORGS
+ //NOVA EDIT ADDITION BEGIN - ALTBORGS
if (!isnull(details[SKIN_FEATURES]))
if (TRAIT_R_WIDE in details[SKIN_FEATURES])
var/image/reskin = reskin_icons[skin]
reskin.pixel_x -= 16
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/borg_skin = show_radial_menu(cyborg, cyborg, reskin_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), cyborg, old_model), radius = 38, require_near = TRUE)
if(!borg_skin)
return FALSE
var/list/details = borg_skins[borg_skin]
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(cyborg.hasExpanded && (((TRAIT_R_WIDE in details[SKIN_FEATURES]) && (TRAIT_R_WIDE in model_features)) || ((TRAIT_R_TALL in details[SKIN_FEATURES]) && (TRAIT_R_TALL in model_features))))
to_chat(cyborg, span_warning("You can't make yourself into a larger frame when you've already used an expander!"))
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(!isnull(details[SKIN_ICON_STATE]))
cyborg_base_icon = details[SKIN_ICON_STATE]
if(!isnull(details[SKIN_ICON]))
cyborg.icon = details[SKIN_ICON]
- cyborg_icon_override = details[SKIN_ICON] // SKYRAT EDIT ADDITION
+ cyborg_icon_override = details[SKIN_ICON] // NOVA EDIT ADDITION
cyborg.base_pixel_x = details[SKIN_PIXEL_X]
if(!isnull(details[SKIN_PIXEL_Y]))
cyborg.base_pixel_y = details[SKIN_PIXEL_Y]
@@ -275,10 +275,10 @@
hat_offset = details[SKIN_HAT_OFFSET]
if(!isnull(details[SKIN_TRAITS]))
model_traits += details[SKIN_TRAITS]
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(!isnull(details[SKIN_FEATURES]))
model_features += details[SKIN_FEATURES]
- //SKYRAT EDIT END
+ //NOVA EDIT END
for(var/i in old_model.added_modules)
added_modules += i
old_model.added_modules -= i
@@ -386,7 +386,7 @@
/obj/item/multitool/cyborg,
/obj/item/t_scanner,
/obj/item/analyzer,
- /obj/item/holosign_creator/atmos, // Skyrat Edit - Adds Holofans to engineering borgos
+ /obj/item/holosign_creator/atmos, // NOVA EDIT - Adds Holofans to engineering borgos
/obj/item/assembly/signaler/cyborg,
/obj/item/areaeditor/blueprints/cyborg,
/obj/item/electroadaptive_pseudocircuit,
@@ -394,7 +394,7 @@
/obj/item/stack/sheet/glass,
/obj/item/borg/apparatus/sheet_manipulator,
/obj/item/stack/rods/cyborg,
- /obj/item/lightreplacer/cyborg, // Skyrat Edit - Surprised Engie borgs don't get these
+ /obj/item/lightreplacer/cyborg, // NOVA EDIT - Surprised Engie borgs don't get these
/obj/item/stack/tile/iron/base/cyborg,
/obj/item/stack/cable_coil,
)
@@ -763,7 +763,7 @@
/obj/item/robot_model/peacekeeper/do_transform_animation()
..()
to_chat(loc, "Under Safeguard, you are an enforcer of the PEACE and preventer of HARM. \
- You are not a security member and you are expected to follow orders and prevent harm above all else. Space law means nothing to you. ") // SKYRAT EDIT Changes verbiage off ASIMOV/HUMAN Focus
+ You are not a security member and you are expected to follow orders and prevent harm above all else. Space law means nothing to you. ") // NOVA EDIT Changes verbiage off ASIMOV/HUMAN Focus
/obj/item/robot_model/security
name = "Security"
@@ -807,13 +807,13 @@
/obj/item/reagent_containers/borghypo/borgshaker,
/obj/item/borg/apparatus/beaker/service,
/obj/item/reagent_containers/cup/beaker/large, //I know a shaker is more appropiate but this is for ease of identification
- //Skyrat Edit Start: Borg Buff
+ //NOVA EDIT Start: Borg Buff
//obj/item/reagent_containers/condiment/enzyme, //edit - Borg shaker has it
- /obj/item/borg/apparatus/beaker, // SKYRAT EDIT: allows the pickup of different beakers for easier drink mixing
+ /obj/item/borg/apparatus/beaker, // NOVA EDIT: allows the pickup of different beakers for easier drink mixing
/obj/item/reagent_containers/dropper,
/obj/item/rsf,
/obj/item/storage/bag/tray,
- /obj/item/storage/bag/tray, // SKYRAT EDIT: Moves the second tray up to be near the default one
+ /obj/item/storage/bag/tray, // NOVA EDIT: Moves the second tray up to be near the default one
/obj/item/pen,
/obj/item/toy/crayon/spraycan/borg,
/obj/item/extinguisher/mini,
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 872ba0d4715..31096fbffc7 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -21,7 +21,7 @@
var/designation = ""
var/radiomod = "" //Radio character used before state laws/arrivals announce to allow department transmissions, default, or none at all.
var/obj/item/camera/siliconcam/aicamera = null //photography
- hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD, DNR_HUD) // SKYRAT EDIT ADDITION - DNR HUD
+ hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_TRACK_HUD, DNR_HUD) // NOVA EDIT ADDITION - DNR HUD
var/obj/item/radio/borg/radio = null ///If this is a path, this gets created as an object in Initialize.
diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm
index cf894e21baf..9b74fb35ffc 100644
--- a/code/modules/mob/living/silicon/silicon_defense.dm
+++ b/code/modules/mob/living/silicon/silicon_defense.dm
@@ -70,11 +70,11 @@
visible_message(span_danger("[user] punches [src], but doesn't leave a dent!"), \
span_warning("[user] punches you, but doesn't leave a dent!"), null, COMBAT_MESSAGE_RANGE, user)
to_chat(user, span_danger("You punch [src], but don't leave a dent!"))
- else // SKYRAT EDIT ADDITION START
+ else // NOVA EDIT ADDITION START
if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS))
visible_message(span_warning("[user] tries to pet [src], but it moves out of the way."))
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
visible_message(span_notice("[user] pets [src]."), \
span_notice("[user] pets you."), null, null, user)
to_chat(user, span_notice("You pet [src]."))
diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm
index 01d144aea88..afe4c00db4d 100644
--- a/code/modules/mob/living/simple_animal/animal_defense.dm
+++ b/code/modules/mob/living/simple_animal/animal_defense.dm
@@ -91,13 +91,6 @@
if(damage_done > 0)
L.amount_grown = min(L.amount_grown + damage_done, L.max_grown)
-/mob/living/simple_animal/attack_slime(mob/living/simple_animal/slime/user, list/modifiers)
- if(..()) //successful slime attack
- var/damage = rand(15, 25)
- if(user.is_adult)
- damage = rand(20, 35)
- return apply_damage(damage, user.melee_damage_type)
-
/mob/living/simple_animal/attack_drone(mob/living/basic/drone/user)
if(user.combat_mode) //No kicking dogs even as a rogue drone. Use a weapon.
return
diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm
index 7ef55e8357c..30b09848cb9 100644
--- a/code/modules/mob/living/simple_animal/bot/construction.dm
+++ b/code/modules/mob/living/simple_animal/bot/construction.dm
@@ -273,10 +273,10 @@
switch(build_step)
if(ASSEMBLY_FIRST_STEP)
if(istype(W, /obj/item/healthanalyzer))
- var/obj/item/healthanalyzer/analyzer = W // SKYRAT EDIT ADDITION BEGIN -- EXTRA ROBOTICS HEALTH ANALYZERS
+ var/obj/item/healthanalyzer/analyzer = W // NOVA EDIT ADDITION BEGIN -- EXTRA ROBOTICS HEALTH ANALYZERS
if (!analyzer.can_be_used_in_medibot())
user?.balloon_alert(user, "no attachment ports!")
- return // SKYRAT EDIT ADDITION END
+ return // NOVA EDIT ADDITION END
if(!user.temporarilyRemoveItemFromInventory(W))
return
healthanalyzer = W.type
@@ -552,8 +552,8 @@
to_chat(user, span_notice("You start to pipe up [src]..."))
if(do_after(user, 40, target = src) && D.use(1))
to_chat(user, span_notice("You pipe up [src]."))
- var/mob/living/simple_animal/bot/hygienebot/H = new(drop_location())
- H.name = created_name
+ var/mob/living/basic/bot/hygienebot/new_bot = new(drop_location())
+ new_bot.name = created_name
qdel(src)
if(I.tool_behaviour == TOOL_SCREWDRIVER) //deconstruct
new /obj/item/assembly/prox_sensor(Tsec)
diff --git a/code/modules/mob/living/simple_animal/bot/hygienebot.dm b/code/modules/mob/living/simple_animal/bot/hygienebot.dm
deleted file mode 100644
index 0db59e2518c..00000000000
--- a/code/modules/mob/living/simple_animal/bot/hygienebot.dm
+++ /dev/null
@@ -1,253 +0,0 @@
-//Cleanbot
-/mob/living/simple_animal/bot/hygienebot
- name = "\improper Hygienebot"
- desc = "A flying cleaning robot, he'll chase down people who can't shower properly!"
- icon = 'icons/mob/silicon/aibots.dmi'
- icon_state = "hygienebot"
- base_icon_state = "hygienebot"
- pass_flags = PASSMOB | PASSFLAPS | PASSTABLE
- layer = MOB_UPPER_LAYER
- density = FALSE
- anchored = FALSE
- health = 100
- maxHealth = 100
-
- maints_access_required = list(ACCESS_ROBOTICS, ACCESS_JANITOR)
- radio_key = /obj/item/encryptionkey/headset_service
- radio_channel = RADIO_CHANNEL_SERVICE //Service
- bot_mode_flags = ~BOT_MODE_CAN_BE_SAPIENT
- bot_type = HYGIENE_BOT
- hackables = "cleaning service protocols"
- path_image_color = "#993299"
-
- automated_announcements = list(
- HYGIENEBOT_VOICED_UNHYGIENIC = 'sound/voice/hygienebot/unhygienicclient.ogg',
- HYGIENEBOT_VOICED_ENJOY_DAY = 'sound/voice/hygienebot/cleanandtidy.ogg',
- HYGIENEBOT_VOICED_THREAT_AIRLOCK = 'sound/voice/hygienebot/dragyouout.ogg',
- HYGIENEBOT_VOICED_FOUL_SMELL = 'sound/voice/hygienebot/foulsmelling.ogg',
- HYGIENEBOT_VOICED_TROGLODYTE = 'sound/voice/hygienebot/troglodyte.ogg',
- HYGIENEBOT_VOICED_GREEN_CLOUD = 'sound/voice/hygienebot/greencloud.ogg',
- HYGIENEBOT_VOICED_ARSEHOLE = 'sound/voice/hygienebot/letmeclean.ogg',
- HYGIENEBOT_VOICED_THREAT_ARTERIES = 'sound/voice/hygienebot/cutarteries.ogg',
- HYGIENEBOT_VOICED_STOP_RUNNING = 'sound/voice/hygienebot/stoprunning.ogg',
- HYGIENEBOT_VOICED_FUCKING_FINALLY = 'sound/voice/hygienebot/finally.ogg',
- HYGIENEBOT_VOICED_THANK_GOD = 'sound/voice/hygienebot/thankgod.ogg',
- HYGIENEBOT_VOICED_DEGENERATE = 'sound/voice/hygienebot/degenerate.ogg',
- )
-
- ///The human target the bot is trying to wash.
- var/mob/living/carbon/human/target
- ///The mob's current speed, which varies based on how long the bot chases it's target.
- var/currentspeed = 5
- ///Is the bot currently washing it's target/everything else that crosses it?
- var/washing = FALSE
- ///Have the target evaded the bot for long enough that it will swear at it like kirk did to kahn?
- var/mad = FALSE
- ///The last time that the previous/current target was found.
- var/last_found
- ///Name of the previous target the bot was pursuing.
- var/oldtarget_name
- ///Visual overlay of the bot spraying water.
- var/mutable_appearance/water_overlay
- ///Visual overlay of the bot commiting warcrimes.
- var/mutable_appearance/fire_overlay
-
-/mob/living/simple_animal/bot/hygienebot/Initialize(mapload)
- . = ..()
- update_appearance(UPDATE_ICON)
-
- // Doing this hurts my soul, but simplebot access reworks are for another day.
- var/datum/id_trim/job/jani_trim = SSid_access.trim_singletons_by_path[/datum/id_trim/job/janitor]
- access_card.add_access(jani_trim.access + jani_trim.wildcard_access)
- prev_access = access_card.access.Copy()
- var/static/list/loc_connections = list(
- COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
- )
- AddElement(/datum/element/connect_loc, loc_connections)
-
- ADD_TRAIT(src, TRAIT_SPRAY_PAINTABLE, INNATE_TRAIT)
-
-/mob/living/simple_animal/bot/hygienebot/explode()
- var/datum/effect_system/fluid_spread/foam/foam = new
- foam.set_up(2, holder = src, location = loc)
- foam.start()
-
- return ..()
-
-/mob/living/simple_animal/bot/hygienebot/proc/on_entered(datum/source, atom/movable/AM)
- SIGNAL_HANDLER
- if(washing)
- do_wash(AM)
-
-/mob/living/simple_animal/bot/hygienebot/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state][bot_mode_flags & BOT_MODE_ON ? "-on" : null]"
-
-
-/mob/living/simple_animal/bot/hygienebot/update_overlays()
- . = ..()
- if(bot_mode_flags & BOT_MODE_ON)
- . += mutable_appearance(icon, "hygienebot-flame")
-
- if(washing)
- . += mutable_appearance(icon, bot_cover_flags & BOT_COVER_EMAGGED ? "hygienebot-fire" : "hygienebot-water")
-
-
-/mob/living/simple_animal/bot/hygienebot/turn_off()
- ..()
- mode = BOT_IDLE
-
-/mob/living/simple_animal/bot/hygienebot/bot_reset()
- ..()
- target = null
- oldtarget_name = null
- SSmove_manager.stop_looping(src)
- last_found = world.time
-
-/mob/living/simple_animal/bot/hygienebot/handle_automated_action()
- if(!..())
- return
-
- if(washing)
- do_wash(loc)
- for(var/AM in loc)
- if (AM == src)
- continue
- do_wash(AM)
- if(isopenturf(loc) && !(bot_cover_flags & BOT_COVER_EMAGGED))
- var/turf/open/tile = loc
- tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
-
- switch(mode)
- if(BOT_IDLE) // idle
- SSmove_manager.stop_looping(src)
- look_for_lowhygiene() // see if any disgusting fucks are in range
- if(!mode && bot_mode_flags & BOT_MODE_AUTOPATROL) // still idle, and set to patrol
- mode = BOT_START_PATROL // switch to patrol mode
-
- if(BOT_HUNT) // hunting for stinkman
- if(bot_cover_flags & BOT_COVER_EMAGGED) //lol fuck em up
- currentspeed = 3.5
- start_washing()
- mad = TRUE
- else
- switch(frustration)
- if(0 to 4)
- currentspeed = 5
- mad = FALSE
- if(5 to INFINITY)
- currentspeed = 2.5
- mad = TRUE
- if(target && !check_purity(target))
- if(target.loc == loc && isturf(target.loc)) //LADIES AND GENTLEMAN WE GOTEM PREPARE TO DUMP
- start_washing()
- if(mad)
- var/static/list/relief = list(
- HYGIENEBOT_VOICED_FUCKING_FINALLY,
- HYGIENEBOT_VOICED_THANK_GOD,
- HYGIENEBOT_VOICED_DEGENERATE,
- )
- speak(pick(relief))
- playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1) //i think it should still make robot noises too
- mad = FALSE
- mode = BOT_SHOWERSTANCE
- else
- stop_washing()
- var/olddist = get_dist(src, target)
- if(olddist > 20 || frustration > 100) // Focus on something else
- back_to_idle()
- return
- SSmove_manager.move_to(src, target, 0, currentspeed)
- if(mad && prob(min(frustration * 2, 60)))
- var/static/list/threats = list(
- HYGIENEBOT_VOICED_THREAT_AIRLOCK,
- HYGIENEBOT_VOICED_FOUL_SMELL,
- HYGIENEBOT_VOICED_TROGLODYTE,
- HYGIENEBOT_VOICED_GREEN_CLOUD,
- HYGIENEBOT_VOICED_ARSEHOLE,
- HYGIENEBOT_VOICED_THREAT_ARTERIES,
- HYGIENEBOT_VOICED_STOP_RUNNING,
- )
- speak(pick(threats))
- playsound(loc, 'sound/effects/hygienebot_angry.ogg', 60, 1)
- if((get_dist(src, target)) >= olddist)
- frustration++
- else
- frustration = 0
- else
- back_to_idle()
-
- if(BOT_SHOWERSTANCE)
- if(check_purity(target))
- speak(HYGIENEBOT_VOICED_ENJOY_DAY)
- playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1)
- back_to_idle()
- return
- if(!target)
- last_found = world.time
- if(target.loc != loc || !isturf(target.loc))
- back_to_hunt()
-
- if(BOT_START_PATROL)
- look_for_lowhygiene()
- start_patrol()
-
- if(BOT_PATROL)
- look_for_lowhygiene()
- bot_patrol()
-
-/mob/living/simple_animal/bot/hygienebot/proc/back_to_idle()
- mode = BOT_IDLE
- SSmove_manager.stop_looping(src)
- target = null
- frustration = 0
- last_found = world.time
- stop_washing()
- INVOKE_ASYNC(src, PROC_REF(handle_automated_action))
-
-/mob/living/simple_animal/bot/hygienebot/proc/back_to_hunt()
- frustration = 0
- mode = BOT_HUNT
- stop_washing()
- INVOKE_ASYNC(src, PROC_REF(handle_automated_action))
-
-/mob/living/simple_animal/bot/hygienebot/proc/look_for_lowhygiene()
- for (var/mob/living/carbon/human/H in view(7,src)) //Find the NEET
- if((H.name == oldtarget_name) && (world.time < last_found + 100))
- continue
- if(!check_purity(H)) //Theyre impure
- target = H
- oldtarget_name = H.name
- speak(HYGIENEBOT_VOICED_UNHYGIENIC)
- playsound(loc, 'sound/effects/hygienebot_happy.ogg', 60, 1)
- visible_message("[src] points at [H.name]!")
- mode = BOT_HUNT
- INVOKE_ASYNC(src, PROC_REF(handle_automated_action))
- break
- else
- continue
-
-/mob/living/simple_animal/bot/hygienebot/proc/start_washing()
- washing = TRUE
- update_appearance()
-
-/mob/living/simple_animal/bot/hygienebot/proc/stop_washing()
- washing = FALSE
- update_appearance()
-
-/mob/living/simple_animal/bot/hygienebot/proc/check_purity(mob/living/L)
- if((bot_cover_flags & BOT_COVER_EMAGGED) && L.stat != DEAD)
- return FALSE
-
- for(var/X in list(ITEM_SLOT_HEAD, ITEM_SLOT_MASK, ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING, ITEM_SLOT_FEET))
-
- var/obj/item/I = L.get_item_by_slot(X)
- if(I && GET_ATOM_BLOOD_DNA_LENGTH(I))
- return FALSE
- return TRUE
-
-/mob/living/simple_animal/bot/hygienebot/proc/do_wash(atom/A)
- if(bot_cover_flags & BOT_COVER_EMAGGED)
- A.fire_act() //lol pranked no cleaning besides that
- else
- A.wash(CLEAN_WASH)
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index b4cd4d25498..288d1a7c872 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -331,11 +331,11 @@
weapon.attack(current_target, src)
if(ishuman(current_target))
current_target.set_stutter(10 SECONDS)
- current_target.Paralyze(60) // SKYRAT EDIT CHANGE - original was current_target.Paralyze(100)
+ current_target.Paralyze(60) // NOVA EDIT CHANGE - original was current_target.Paralyze(100)
var/mob/living/carbon/human/human_target = current_target
threat = human_target.assess_threat(judgement_criteria)
else
- current_target.Paralyze(60) // SKYRAT EDIT CHANGE - original was current_target.Paralyze(100)
+ current_target.Paralyze(60) // NOVA EDIT CHANGE - original was current_target.Paralyze(100)
current_target.set_stutter(10 SECONDS)
threat = current_target.assess_threat(judgement_criteria)
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 9d215ed35fc..88d89c5f1d6 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -420,7 +420,7 @@
in_melee = FALSE
SSmove_manager.stop_looping(src)
LoseAggro()
- SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // SKYRAT EDIT ADDITION
+ SEND_SIGNAL(src, COMSIG_HOSTILE_MOB_LOST_TARGET) // NOVA EDIT ADDITION
//////////////END HOSTILE MOB TARGETING AND AGGRESSION////////////
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm
index a71f5a1a6a2..200800f3d05 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm
@@ -25,7 +25,6 @@
pull_force = MOVE_FORCE_OVERPOWERING
mob_size = MOB_SIZE_HUGE
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
- plane = GAME_PLANE_UPPER // SKYRAT EDIT - ORIGINAL: plane = GAME_PLANE_UPPER_FOV_HIDDEN
mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
/// Crusher loot dropped when the megafauna is killed with a crusher
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
index f726fcb9819..6be52bf1c85 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm
@@ -238,7 +238,6 @@
var/use_time = 0
/// If we are being used
var/active = FALSE
- var/list/affected_targets = list()
var/activation_sound = 'sound/effects/break_stone.ogg'
COOLDOWN_DECLARE(cooldown_timer)
@@ -320,14 +319,28 @@
possible_methods = list(ACTIVATE_MOB_BUMP, ACTIVATE_SPEECH)
activation_sound = 'sound/items/bikehorn.ogg'
use_time = 3 SECONDS
+ /// List of REFs to mobs that have been turned into a clown
+ var/list/clowned_mob_refs = list()
/obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user)
- if(..() && ishuman(user) && !(user in affected_targets) && (user in viewers(src)))
- var/mob/living/carbon/human/new_clown = user
- for(var/obj/item/to_strip in new_clown)
- new_clown.dropItemToGround(to_strip)
- new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown))
- affected_targets.Add(new_clown)
+ . = ..()
+ if(!.)
+ return FALSE
+
+ if(!ishuman(user))
+ return FALSE
+ if(!(user in viewers(src)))
+ return FALSE
+ var/clown_ref = REF(user)
+ if(clown_ref in clowned_mob_refs)
+ return FALSE
+
+ var/mob/living/carbon/human/new_clown = user
+ for(var/obj/item/to_strip in new_clown.get_equipped_items())
+ new_clown.dropItemToGround(to_strip)
+ new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown))
+ clowned_mob_refs += clown_ref
+ return TRUE
/// Transforms the area to look like a new one
/obj/machinery/anomalous_crystal/theme_warp
@@ -335,130 +348,32 @@
activation_method = ACTIVATE_TOUCH
cooldown_add = 20 SECONDS
use_time = 5 SECONDS
- var/datum/crystal_warp_theme/terrain_theme
+ /// Theme which we turn areas into on activation
+ var/datum/dimension_theme/terrain_theme
+ /// List of all areas we've affected
+ var/list/converted_areas = list()
/obj/machinery/anomalous_crystal/theme_warp/Initialize(mapload)
. = ..()
- var/terrain_type = pick(subtypesof(/datum/crystal_warp_theme))
+ var/terrain_type = pick(subtypesof(/datum/dimension_theme))
terrain_theme = new terrain_type()
- observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme]\"."
+ observer_desc = "This crystal changes the area around it to match the theme of \"[terrain_theme.name]\"."
/obj/machinery/anomalous_crystal/theme_warp/ActivationReaction(mob/user, method)
. = ..()
if (!.)
return FALSE
var/area/current_area = get_area(src)
- if (current_area in affected_targets)
+ if (current_area in converted_areas)
return FALSE
- if (terrain_theme.transform_area(current_area))
- affected_targets += current_area
+ terrain_theme.apply_theme_to_list_of_turfs(current_area.get_contained_turfs())
+ converted_areas += current_area
return TRUE
-/// Transforms an area's turfs and objects into a different theme
-/datum/crystal_warp_theme
- /// Friendly name of theme
- var/name = ""
- /// Typepath of floor to replace open turfs with
- var/floor
- /// Typepath of wall to replace closed turfs with
- var/wall
- /// Typepath of object to replace chairs with
- var/chair
- /// Typepath of object to replace tables with
- var/table
- /// Typepath of things to potentially spawn on transformed open turfs
- var/list/flora_and_fauna = list()
- /// Chance per turf to create the things in the list above
- var/flora_and_fauna_chance = 8
-
-/// Change appropriate objects in provided area to those matching our theme, and spawn some plants or animals
-/datum/crystal_warp_theme/proc/transform_area(area/target_area)
- if (target_area.outdoors)
- return FALSE
- for(var/atom/thing in target_area)
- if(isturf(thing))
- replace_turf(thing)
- continue
- if(chair && istype(thing, /obj/structure/chair))
- replace_object(thing, chair)
- continue
- if(table && istype(thing, /obj/structure/table))
- replace_object(thing, table)
- continue
- return TRUE
-
-/// Replaces a turf with a different themed turf
-/datum/crystal_warp_theme/proc/replace_turf(turf/target_turf)
- if(isindestructiblefloor(target_turf) || isindestructiblewall(target_turf) || isopenspaceturf(target_turf))
- return
-
- if(wall && iswallturf(target_turf))
- target_turf.ChangeTurf(wall)
- return
-
- if(!isopenturf(target_turf))
- return
-
- if(length(flora_and_fauna) && !target_turf.is_blocked_turf(exclude_mobs = TRUE) && prob(flora_and_fauna_chance))
- var/atom/new_flora_and_fauna = pick(flora_and_fauna)
- new new_flora_and_fauna(target_turf)
-
- if(floor)
- var/turf/open/open_turf = target_turf
- open_turf.replace_floor(floor, flags = CHANGETURF_IGNORE_AIR)
-
-/// Replaces an object with a different themed object
-/datum/crystal_warp_theme/proc/replace_object(atom/original, new_type)
- var/atom/new_thing = new new_type(original.loc)
- new_thing.setDir(original.dir)
- qdel(original)
-
-// Depressurizes the place... and free cult metal, I guess.
-/datum/crystal_warp_theme/lavaland
- name = "lavaland"
- floor = /turf/open/floor/fakebasalt
- wall = /turf/closed/wall/mineral/cult
- flora_and_fauna = list(/mob/living/basic/mining/goldgrub)
- flora_and_fauna_chance = 1
-
-// Snow terrain is slow to move in and cold! Get the assistants to shovel your driveway.
-/datum/crystal_warp_theme/winter
- name = "winter"
- floor = /turf/open/misc/snow/actually_safe
- wall = /turf/closed/wall/mineral/wood
- chair = /obj/structure/chair/wood
- table = /obj/structure/table/glass
- flora_and_fauna = list(
- /obj/structure/flora/grass/both/style_random,
- /obj/structure/flora/grass/brown/style_random,
- /obj/structure/flora/grass/green/style_random,
- )
-
-// Beneficial due to actually having breathable air. Plus, monkeys and bows and arrows.
-/datum/crystal_warp_theme/jungle
- name = "jungle"
- floor = /turf/open/floor/grass
- wall = /turf/closed/wall/mineral/wood
- chair = /obj/structure/chair/wood
- table = /obj/structure/table/wood
- flora_and_fauna = list(
- /mob/living/carbon/human/species/monkey,
- /obj/structure/flora/bush/ferny/style_random,
- /obj/structure/flora/bush/grassy/style_random,
- /obj/structure/flora/bush/leavy/style_random,
- /obj/structure/flora/tree/palm/style_random,
- /obj/structure/flora/bush/sparsegrass/style_random,
- /obj/structure/flora/bush/sunny/style_random,
- )
- flora_and_fauna_chance = 20
-
-// Beneficial, turns stuff into alien alloy which is useful to cargo and research. Also repairs atmos.
-/datum/crystal_warp_theme/ayylmao
- name = "ayy lmao"
- floor = /turf/open/floor/mineral/abductor
- wall = /turf/closed/wall/mineral/abductor
- chair = /obj/structure/bed/abductor //ayys apparently don't have chairs. An entire species of people who only recline.
- table = /obj/structure/table/abductor
+/obj/machinery/anomalous_crystal/theme_warp/Destroy()
+ QDEL_NULL(terrain_theme)
+ converted_areas.Cut()
+ return ..()
/obj/machinery/anomalous_crystal/emitter //Generates a projectile when interacted with
observer_desc = "This crystal generates a projectile when activated."
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 3cda123814c..175d0032580 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -174,7 +174,7 @@
return FALSE
return ..()
-/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE), pref checks
+/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes - Original: /mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE), pref checks
if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit
return
return ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
index 4e31088309a..50a6cee44ce 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm
@@ -116,6 +116,10 @@ Difficulty: Hard
shockwave_scream()
return
+ var/mob/living/living_target = target
+ if(istype(living_target) && living_target.stat == DEAD)
+ return
+
if(COOLDOWN_FINISHED(src, scream_cooldown))
chosen_attack = rand(1, 3)
else
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 9540f5e1a4b..a1f77098152 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -1,3 +1,11 @@
+/// Mimics can't be made out of these objects
+GLOBAL_LIST_INIT(animatable_blacklist, typecacheof(list(
+ /obj/structure/table,
+ /obj/structure/cable,
+ /obj/structure/window,
+ /obj/structure/blob,
+)))
+
/mob/living/simple_animal/hostile/mimic
name = "crate"
desc = "A rectangular steel crate."
@@ -98,9 +106,6 @@
O.forceMove(C)
..()
-/// Mimics can't be made out of these objects
-GLOBAL_LIST_INIT(animatable_blacklist, list(/obj/structure/table, /obj/structure/cable, /obj/structure/window, /obj/structure/blob))
-
/mob/living/simple_animal/hostile/mimic/copy
health = 100
maxHealth = 100
@@ -138,19 +143,21 @@ GLOBAL_LIST_INIT(animatable_blacklist, list(/obj/structure/table, /obj/structure
/mob/living/simple_animal/hostile/mimic/copy/wabbajack(what_to_randomize, change_flags = WABBAJACK)
visible_message(span_warning("[src] resists polymorphing into a new creature!"))
-/mob/living/simple_animal/hostile/mimic/copy/proc/ChangeOwner(mob/owner)
- if(owner != creator)
- LoseTarget()
- creator = owner
- faction |= "[REF(owner)]"
+/mob/living/simple_animal/hostile/mimic/copy/animate_atom_living(mob/living/owner)
+ change_owner(owner)
-/mob/living/simple_animal/hostile/mimic/copy/proc/CheckObject(obj/O)
- if((isitem(O) || isstructure(O)) && !is_type_in_list(O, GLOB.animatable_blacklist))
- return TRUE
- return FALSE
+/mob/living/simple_animal/hostile/mimic/copy/proc/change_owner(mob/owner)
+ if(isnull(owner) || creator == owner)
+ return
+ LoseTarget()
+ creator = owner
+ faction |= REF(owner)
+
+/mob/living/simple_animal/hostile/mimic/copy/proc/check_object(obj/target)
+ return ((isitem(target) || isstructure(target)) && !is_type_in_typecache(target, GLOB.animatable_blacklist))
/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0)
- if(destroy_original || CheckObject(O))
+ if(destroy_original || check_object(O))
O.forceMove(src)
name = O.name
desc = O.desc
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
index c4ab1f1c417..3a838ac58cd 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/curse_blob.dm
@@ -23,7 +23,6 @@
environment_smash = ENVIRONMENT_SMASH_NONE
sentience_type = SENTIENCE_BOSS
layer = LARGE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
var/mob/living/set_target
var/datum/move_loop/has_target/force_move/our_loop
@@ -120,8 +119,6 @@ IGNORE_PROC_IF_NOT_TARGET(attack_larva)
IGNORE_PROC_IF_NOT_TARGET(attack_animal)
-IGNORE_PROC_IF_NOT_TARGET(attack_slime)
-
/mob/living/simple_animal/hostile/asteroid/curseblob/bullet_act(obj/projectile/Proj)
if(Proj.firer != set_target)
return
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index b1430b19324..6386fa272b7 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -18,7 +18,6 @@
harm_intent_damage = 0 //Punching elites gets you nowhere
stat_attack = HARD_CRIT
layer = LARGE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
sentience_type = SENTIENCE_BOSS
var/chosen_attack = 1
var/list/attack_action_types = list()
@@ -188,7 +187,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
addtimer(CALLBACK(src, PROC_REF(spawn_elite)), 30)
return
visible_message(span_boldwarning("Something within [src] stirs..."))
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a lavaland elite?", ROLE_SENTIENCE, ROLE_SENTIENCE, 5 SECONDS, src, POLL_IGNORE_LAVALAND_ELITE)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a lavaland elite?", check_jobban = ROLE_SENTIENCE, role = ROLE_SENTIENCE, poll_time = 5 SECONDS, target_mob = src, ignore_category = POLL_IGNORE_LAVALAND_ELITE, pic_source = src, role_name_text = "lavaland elite")
if(candidates.len)
audible_message(span_boldwarning("The stirring sounds increase in volume!"))
elitemind = pick(candidates)
diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm
index 7e523fdf475..7ce269443ce 100644
--- a/code/modules/mob/living/simple_animal/hostile/ooze.dm
+++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm
@@ -287,7 +287,7 @@
obj_damage = 15
death_message = "deflates and spills its vital juices!"
edible_food_types = MEAT | VEGETABLES
- ghost_controllable = TRUE //SKYRAT EDIT ADDITION - These guys can be helpful... maybe players will be helpful.
+ ghost_controllable = TRUE //NOVA EDIT ADDITION - These guys can be helpful... maybe players will be helpful.
/mob/living/simple_animal/hostile/ooze/grapes/get_innate_actions()
var/static/list/innate_actions = list(
diff --git a/code/modules/mob/living/simple_animal/slime/ai.dm b/code/modules/mob/living/simple_animal/slime/ai.dm
new file mode 100644
index 00000000000..0272a4e467b
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/slime/ai.dm
@@ -0,0 +1,494 @@
+#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends)))
+#define SLIME_HUNGER_NONE 0
+#define SLIME_HUNGER_HUNGRY 1
+#define SLIME_HUNGER_STARVING 2
+
+/mob/living/simple_animal/slime/handle_automated_movement()
+ return //slime random movement is currently handled in handle_targets()
+
+/mob/living/simple_animal/slime/handle_automated_speech()
+ return //slime random speech is currently handled in handle_speech()
+
+///Handles slime mood
+/mob/living/simple_animal/slime/proc/handle_mood(seconds_per_tick, times_fired)
+ #define SLIME_MOOD_NONE ""
+ #define SLIME_MOOD_ANGRY "angry"
+ #define SLIME_MOOD_MISCHIEVOUS "mischievous"
+ #define SLIME_MOOD_POUT "pout"
+ #define SLIME_MOOD_SAD "sad"
+ #define SLIME_MOOD_SMILE ":3"
+
+ var/newmood = SLIME_MOOD_NONE
+ if (rabid || attacked_stacks)
+ newmood = SLIME_MOOD_ANGRY
+ else if (docile)
+ newmood = SLIME_MOOD_SMILE
+ else if (Target)
+ newmood = SLIME_MOOD_MISCHIEVOUS
+
+ if (!newmood)
+ if (discipline_stacks && SPT_PROB(13, seconds_per_tick))
+ newmood = SLIME_MOOD_POUT
+ else if (SPT_PROB(0.5, seconds_per_tick))
+ newmood = pick(SLIME_MOOD_SAD, ":3", SLIME_MOOD_POUT)
+
+ if ((current_mood == SLIME_MOOD_SAD || current_mood == SLIME_MOOD_SMILE || current_mood == SLIME_MOOD_POUT) && !newmood)
+ if(SPT_PROB(50, seconds_per_tick))
+ newmood = current_mood
+
+ if (newmood != current_mood) // This is so we don't redraw them every time
+ current_mood = newmood
+ regenerate_icons()
+
+ #undef SLIME_MOOD_NONE
+ #undef SLIME_MOOD_ANGRY
+ #undef SLIME_MOOD_MISCHIEVOUS
+ #undef SLIME_MOOD_POUT
+ #undef SLIME_MOOD_SAD
+ #undef SLIME_MOOD_SMILE
+
+///Handles the slime understanding commends spoken to it
+/mob/living/simple_animal/slime/proc/handle_speech(seconds_per_tick, times_fired)
+ //Speech understanding starts here
+ var/to_say
+ if (speech_buffer.len > 0)
+ var/who = speech_buffer[1] // Who said it?
+ var/phrase = speech_buffer[2] // What did they say?
+ if ((findtext(phrase, num2text(slime_id)) || findtext(phrase, "slimes"))) // Talking to us
+ if (findtext(phrase, "hello") || findtext(phrase, "hi"))
+ to_say = pick("Hello...", "Hi...")
+ else if (findtext(phrase, "follow"))
+ if (Leader)
+ if (Leader == who) // Already following him
+ to_say = pick("Yes...", "Lead...", "Follow...")
+ else if (Friends[who] > Friends[Leader]) // VIVA
+ set_leader(who)
+ to_say = "Yes... I follow [who]..."
+ else
+ to_say = "No... I follow [Leader]..."
+ else
+ if (Friends[who] >= SLIME_FRIENDSHIP_FOLLOW)
+ set_leader(who)
+ to_say = "I follow..."
+ else // Not friendly enough
+ to_say = pick("No...", "I no follow...")
+ else if (findtext(phrase, "stop"))
+ if (buckled) // We are asked to stop feeding
+ if (Friends[who] >= SLIME_FRIENDSHIP_STOPEAT)
+ stop_feeding()
+ set_target(null)
+ if (Friends[who] < SLIME_FRIENDSHIP_STOPEAT_NOANGRY)
+ add_friendship(who, -1)
+ to_say = "Grrr..." // I'm angry but I do it
+ else
+ to_say = "Fine..."
+ else if (Target) // We are asked to stop chasing
+ if (Friends[who] >= SLIME_FRIENDSHIP_STOPCHASE)
+ set_target(null)
+ if (Friends[who] < SLIME_FRIENDSHIP_STOPCHASE_NOANGRY)
+ add_friendship(who, -1)
+ to_say = "Grrr..." // I'm angry but I do it
+ else
+ to_say = "Fine..."
+ else if (Leader) // We are asked to stop following
+ if (Leader == who)
+ to_say = "Yes... I stay..."
+ set_leader(null)
+ else
+ if (Friends[who] > Friends[Leader])
+ set_leader(null)
+ to_say = "Yes... I stop..."
+ else
+ to_say = "No... keep follow..."
+ else if (findtext(phrase, "stay"))
+ if (Leader)
+ if (Leader == who)
+ holding_still = Friends[who] * 10
+ to_say = "Yes... stay..."
+ else if (Friends[who] > Friends[Leader])
+ holding_still = (Friends[who] - Friends[Leader]) * 10
+ to_say = "Yes... stay..."
+ else
+ to_say = "No... keep follow..."
+ else
+ if (Friends[who] >= SLIME_FRIENDSHIP_STAY)
+ holding_still = Friends[who] * 10
+ to_say = "Yes... stay..."
+ else
+ to_say = "No... won't stay..."
+ else if (findtext(phrase, "attack"))
+ if (rabid && prob(20))
+ set_target(who)
+ process_slime_ai() //Wake up the slime's Target AI, needed otherwise this doesn't work
+ to_say = "ATTACK!?!?"
+ else if (Friends[who] >= SLIME_FRIENDSHIP_ATTACK)
+ for (var/mob/living/possible_target in view(7,src)-list(src,who))
+ if (findtext(phrase, lowertext(possible_target.name)))
+ if (isslime(possible_target))
+ to_say = "NO... [possible_target] slime friend"
+ add_friendship(who, -1) //Don't ask a slime to attack its friend
+ else if(!Friends[possible_target] || Friends[possible_target] < 1)
+ set_target(possible_target)
+ process_slime_ai()//Wake up the slime's Target AI, needed otherwise this doesn't work
+ to_say = "Ok... I attack [Target]"
+ else
+ to_say = "No... like [possible_target] ..."
+ add_friendship(who, -1) //Don't ask a slime to attack its friend
+ break
+ else
+ to_say = "No... no listen"
+
+ speech_buffer = list()
+
+ //Speech starts here
+ if (to_say)
+ say (to_say)
+ else if(SPT_PROB(0.5, seconds_per_tick))
+ emote(pick("bounce","sway","light","vibrate","jiggle"))
+ else
+ var/speech_chance = 10
+ var/slimes_near = 0
+ var/dead_slimes = 0
+ var/friends_near = list()
+ for (var/mob/living/seen_mob in view(7,src))
+ if(isslime(seen_mob) && seen_mob != src)
+ ++slimes_near
+ if (seen_mob.stat == DEAD)
+ ++dead_slimes
+ if (seen_mob in Friends)
+ speech_chance += 20
+ friends_near += seen_mob
+ if (nutrition < hunger_nutrition)
+ speech_chance += 10
+ if (nutrition < starve_nutrition)
+ speech_chance += 10
+ if (SPT_PROB(1, seconds_per_tick) && prob(speech_chance))
+ var/phrases = list()
+ if (Target)
+ phrases += "[Target]... look yummy..."
+ if (nutrition < starve_nutrition)
+ phrases += "So... hungry..."
+ phrases += "Very... hungry..."
+ phrases += "Need... food..."
+ phrases += "Must... eat..."
+ else if (nutrition < hunger_nutrition)
+ phrases += "Hungry..."
+ phrases += "Where food?"
+ phrases += "I want to eat..."
+ phrases += "Rawr..."
+ phrases += "Blop..."
+ phrases += "Blorble..."
+ if (rabid || attacked_stacks)
+ phrases += "Hrr..."
+ phrases += "Nhuu..."
+ phrases += "Unn..."
+ if (current_mood == ":3")
+ phrases += "Purr..."
+ if (attacked_stacks)
+ phrases += "Grrr..."
+ if (bodytemperature < T0C)
+ phrases += "Cold..."
+ if (bodytemperature < T0C - 30)
+ phrases += "So... cold..."
+ phrases += "Very... cold..."
+ if (bodytemperature < T0C - 50)
+ phrases += "..."
+ phrases += "C... c..."
+ if (buckled)
+ phrases += "Nom..."
+ phrases += "Yummy..."
+ if (powerlevel > 3)
+ phrases += "Bzzz..."
+ if (powerlevel > 5)
+ phrases += "Zap..."
+ if (powerlevel > 8)
+ phrases += "Zap... Bzz..."
+ if (current_mood == "sad")
+ phrases += "Bored..."
+ if (slimes_near)
+ phrases += "Slime friend..."
+ if (slimes_near > 1)
+ phrases += "Slime friends..."
+ if (dead_slimes)
+ phrases += "What happened?"
+ if (!slimes_near)
+ phrases += "Lonely..."
+ for (var/friend in friends_near)
+ phrases += "[friend]... friend..."
+ if (nutrition < hunger_nutrition)
+ phrases += "[friend]... feed me..."
+ if(!stat)
+ say (pick(phrases))
+
+///Sets the slime's current attack target
+/mob/living/simple_animal/slime/proc/set_target(new_target)
+ var/old_target = Target
+ Target = new_target
+ if(old_target && !SLIME_CARES_ABOUT(old_target))
+ UnregisterSignal(old_target, COMSIG_QDELETING)
+ if(Target)
+ RegisterSignal(Target, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
+
+///Sets the person the slime is following around
+/mob/living/simple_animal/slime/proc/set_leader(new_leader)
+ var/old_leader = Leader
+ Leader = new_leader
+ if(old_leader && !SLIME_CARES_ABOUT(old_leader))
+ UnregisterSignal(old_leader, COMSIG_QDELETING)
+ if(Leader)
+ RegisterSignal(Leader, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
+
+///Alters the friendship value of the target
+/mob/living/simple_animal/slime/proc/add_friendship(new_friend, amount = 1)
+ if(!Friends[new_friend])
+ Friends[new_friend] = 0
+ Friends[new_friend] += amount
+ if(new_friend)
+ RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
+
+///Sets the friendship value of the target
+/mob/living/simple_animal/slime/proc/set_friendship(new_friend, amount = 1)
+ Friends[new_friend] = amount
+ if(new_friend)
+ RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
+
+///Removes someone from the friendlist
+/mob/living/simple_animal/slime/proc/remove_friend(friend)
+ Friends -= friend
+ if(friend && !SLIME_CARES_ABOUT(friend))
+ UnregisterSignal(friend, COMSIG_QDELETING)
+
+///Adds someone to the friend list
+/mob/living/simple_animal/slime/proc/set_friends(new_buds)
+ clear_friends()
+ for(var/mob/friend as anything in new_buds)
+ set_friendship(friend, new_buds[friend])
+
+///Removes everyone from the friend list
+/mob/living/simple_animal/slime/proc/clear_friends()
+ for(var/mob/friend as anything in Friends)
+ remove_friend(friend)
+
+///The passed source will be no longer be the slime's target, leader, or one of its friends
+/mob/living/simple_animal/slime/proc/clear_memories_of(datum/source)
+ SIGNAL_HANDLER
+ if(source == Target)
+ set_target(null)
+ if(source == Leader)
+ set_leader(null)
+ remove_friend(source)
+
+///Handles selecting targets
+/mob/living/simple_animal/slime/proc/handle_targets(seconds_per_tick, times_fired)
+ if(attacked_stacks > 50)
+ attacked_stacks = 50
+
+ if(attacked_stacks > 0)
+ attacked_stacks--
+
+ if(discipline_stacks > 0)
+
+ if(discipline_stacks >= 5 && rabid)
+ if(SPT_PROB(37, seconds_per_tick))
+ rabid = FALSE
+
+ if(SPT_PROB(5, seconds_per_tick))
+ discipline_stacks--
+
+ if(client) //player controlled slimes can decide for themselves
+ return
+
+ if(!(mobility_flags & MOBILITY_MOVE))
+ return
+
+ if(buckled)
+ return // if it's eating someone already, continue eating!
+
+ if(Target)
+ --target_patience
+ if (target_patience <= 0 || stunned_until > world.time || discipline_stacks || attacked_stacks || docile) // Tired of chasing or something draws out attention
+ target_patience = 0
+ set_target(null)
+
+ if(slime_ai_processing && stunned_until > world.time)
+ return
+
+ var/hungry = SLIME_HUNGER_NONE // determines if the slime is hungry
+
+ if (nutrition < starve_nutrition)
+ hungry = SLIME_HUNGER_STARVING
+ else if (nutrition < grow_nutrition && SPT_PROB(13, seconds_per_tick) || nutrition < hunger_nutrition)
+ hungry = SLIME_HUNGER_HUNGRY
+
+ if(hungry == SLIME_HUNGER_STARVING && !client) // if a slime is starving, it starts losing its friends
+ if(Friends.len > 0 && SPT_PROB(0.5, seconds_per_tick))
+ var/mob/nofriend = pick(Friends)
+ add_friendship(nofriend, -1)
+
+ if(!Target) //If we have no target, try to add a target
+ if(will_hunt() && hungry || attacked_stacks || rabid) // Only add to the list if we need to
+ var/list/targets = list()
+
+ for(var/mob/living/L in view(7,src))
+
+ if(isslime(L) || L.stat == DEAD) // Ignore other slimes and dead mobs
+ continue
+
+ if(L in Friends) // No eating friends!
+ continue
+
+ var/ally = FALSE
+ for(var/F in faction)
+ if(F == FACTION_NEUTRAL) //slimes are neutral so other mobs not target them, but they can target neutral mobs
+ continue
+ if(F in L.faction)
+ ally = TRUE
+ break
+ if(ally)
+ continue
+
+ if(issilicon(L) && (rabid || attacked_stacks)) // They can't eat silicons, but they can glomp them in defence
+ targets += L // Possible target found!
+
+ if(locate(/mob/living/simple_animal/slime) in L.buckled_mobs) // Only one slime can latch on at a time.
+ continue
+
+ targets += L // Possible target found!
+
+ if(targets.len > 0)
+ if(attacked_stacks || rabid || hungry == SLIME_HUNGER_STARVING)
+ set_target(targets[1]) // I am attacked and am fighting back or so hungry I don't even care
+ else
+ for(var/mob/living/carbon/C in targets)
+ if(!discipline_stacks && SPT_PROB(2.5, seconds_per_tick))
+ if(ishuman(C) || isalienadult(C))
+ set_target(C)
+ break
+
+ if(islarva(C) || ismonkey(C))
+ set_target(C)
+ break
+
+ if (Target)
+ target_patience = rand(5, 7)
+ if (life_stage == SLIME_LIFE_STAGE_ADULT)
+ target_patience += 3
+
+ if(!Target) // If we have no target, we are wandering or following orders
+ if (Leader)
+ if(holding_still)
+ holding_still = max(holding_still - (0.5 * seconds_per_tick), 0)
+ else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc))
+ step_to(src, Leader)
+
+ else if(hungry)
+ if (holding_still)
+ holding_still = max(holding_still - (0.5 * hungry * seconds_per_tick), 0)
+ else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(50))
+ step(src, pick(GLOB.cardinals))
+
+ else
+ if(holding_still)
+ holding_still = max(holding_still - (0.5 * seconds_per_tick), 0)
+ else if (docile && pulledby)
+ holding_still = 10
+ else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(33))
+ step(src, pick(GLOB.cardinals))
+ else if(!slime_ai_processing)
+ INVOKE_ASYNC(src, PROC_REF(process_slime_ai))
+
+/// Check for being stopped from feeding and chasing
+/mob/living/simple_animal/slime/proc/will_hunt(hunger = -1)
+ if (docile)
+ return FALSE
+ if (hunger == SLIME_HUNGER_STARVING || rabid || attacked_stacks)
+ return TRUE
+ if (Leader)
+ return FALSE
+ if (holding_still)
+ return FALSE
+ return TRUE
+
+/// the master AI process
+/mob/living/simple_animal/slime/proc/process_slime_ai()
+
+ if(slime_ai_processing || stat || client)
+ return
+
+ var/hungry = SLIME_HUNGER_NONE
+ if (nutrition < starve_nutrition)
+ hungry = SLIME_HUNGER_STARVING
+ else if (nutrition < grow_nutrition && prob(25) || nutrition < hunger_nutrition)
+ hungry = SLIME_HUNGER_HUNGRY
+
+ slime_ai_processing = TRUE
+
+ while(slime_ai_processing && stat != DEAD && (attacked_stacks || hungry || rabid || buckled))
+ if(!(mobility_flags & MOBILITY_MOVE)) //also covers buckling. Not sure why buckled is in the while condition if we're going to immediately break, honestly
+ break
+
+ if(!Target || client)
+ break
+
+ if(Target.health <= -70 || Target.stat == DEAD)
+ set_target(null)
+ slime_ai_processing = FALSE
+ break
+
+ if(Target)
+ if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs)
+ set_target(null)
+ slime_ai_processing = FALSE
+ break
+ if(!slime_ai_processing)
+ break
+
+ if(Target in view(1,src))
+ if(!can_feed_on(Target)) //If they're not able to be fed upon, ignore them.
+ if(!is_attack_on_cooldown)
+ is_attack_on_cooldown = TRUE
+ addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
+
+ if(Target.Adjacent(src))
+ Target.attack_animal(src)
+ break
+ if((Target.body_position == STANDING_UP) && prob(80))
+
+ if(Target.client && Target.health >= 20)
+ if(!is_attack_on_cooldown)
+ is_attack_on_cooldown = TRUE
+ addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
+
+ if(Target.Adjacent(src))
+ Target.attack_animal(src)
+
+ else
+ if(!is_attack_on_cooldown && Target.Adjacent(src))
+ start_feeding(Target)
+
+ else
+ if(!is_attack_on_cooldown && Target.Adjacent(src))
+ start_feeding(Target)
+
+ else if(Target in view(7, src))
+ if(!Target.Adjacent(src))
+ // Bug of the month candidate: slimes were attempting to move to target only if it was directly next to them, which caused them to target things, but not approach them
+ step_to(src, Target)
+ else
+ set_target(null)
+ slime_ai_processing = FALSE
+ break
+
+ var/sleeptime = cached_multiplicative_slowdown
+ if(sleeptime <= 0)
+ sleeptime = 1
+
+ sleep(sleeptime + 2) // this is about as fast as a player slime can go
+
+ slime_ai_processing = FALSE
+
+#undef SLIME_CARES_ABOUT
+
+#undef SLIME_HUNGER_NONE
+#undef SLIME_HUNGER_HUNGRY
+#undef SLIME_HUNGER_STARVING
diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm
index 033d7d2414e..a072299d663 100644
--- a/code/modules/mob/living/simple_animal/slime/death.dm
+++ b/code/modules/mob/living/simple_animal/slime/death.dm
@@ -1,22 +1,17 @@
/mob/living/simple_animal/slime/death(gibbed)
if(stat == DEAD)
return
- if(!gibbed)
- if(is_adult)
- var/mob/living/simple_animal/slime/new_slime = new(drop_location(), slime_type.type)
- new_slime.rabid = TRUE
- new_slime.regenerate_icons()
+ if(!gibbed && life_stage == SLIME_LIFE_STAGE_ADULT)
+ var/mob/living/simple_animal/slime/new_slime = new(drop_location(), slime_type.type)
+ new_slime.rabid = TRUE
+ new_slime.regenerate_icons()
- is_adult = FALSE
- maxHealth = 150
- for(var/datum/action/innate/slime/reproduce/reproduce_action in actions)
- reproduce_action.Remove(src)
- var/datum/action/innate/slime/evolve/evolve_action = new
- evolve_action.Grant(src)
- revive(HEAL_ALL)
- regenerate_icons()
- update_name()
- return
+ //revives us as a baby
+ set_life_stage(SLIME_LIFE_STAGE_BABY)
+ revive(HEAL_ALL)
+ regenerate_icons()
+ update_name()
+ return
if(buckled)
stop_feeding(silent = TRUE) //releases ourselves from the mob we fed on.
diff --git a/code/modules/mob/living/simple_animal/slime/defense.dm b/code/modules/mob/living/simple_animal/slime/defense.dm
new file mode 100644
index 00000000000..dd94e4e2bab
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/slime/defense.dm
@@ -0,0 +1,131 @@
+
+/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype)
+ if(!forced)
+ amount = -abs(amount)
+ return ..() //Heals them
+
+/mob/living/simple_animal/slime/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ powerlevel = 0 // oh no, the power!
+
+/mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/user, list/modifiers)
+ . = ..()
+ if(.)
+ attacked_stacks += 10
+
+/mob/living/simple_animal/slime/attack_paw(mob/living/carbon/human/user, list/modifiers)
+ if(..()) //successful monkey bite.
+ attacked_stacks += 10
+
+/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers)
+ if(..()) //successful larva bite.
+ attacked_stacks += 10
+
+/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user)
+ . = ..()
+ if(!.)
+ return
+ discipline_slime(user)
+
+/mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/user, list/modifiers)
+ if(buckled)
+ user.do_attack_animation(src, ATTACK_EFFECT_DISARM)
+ if(buckled == user)
+ if(prob(60))
+ user.visible_message(span_warning("[user] attempts to wrestle \the [name] off!"), \
+ span_danger("You attempt to wrestle \the [name] off!"))
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1)
+
+ else
+ user.visible_message(span_warning("[user] manages to wrestle \the [name] off!"), \
+ span_notice("You manage to wrestle \the [name] off!"))
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
+
+ discipline_slime(user)
+
+ else
+ if(prob(30))
+ buckled.visible_message(span_warning("[user] attempts to wrestle \the [name] off of [buckled]!"), \
+ span_warning("[user] attempts to wrestle \the [name] off of you!"))
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1)
+
+ else
+ buckled.visible_message(span_warning("[user] manages to wrestle \the [name] off of [buckled]!"), \
+ span_notice("[user] manage to wrestle \the [name] off of you!"))
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
+
+ discipline_slime(user)
+ else
+ if(stat == DEAD && surgeries.len)
+ if(!user.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK))
+ for(var/datum/surgery/operations as anything in surgeries)
+ if(operations.next_step(user, modifiers))
+ return TRUE
+ if(..()) //successful attack
+ attacked_stacks += 10
+
+/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers)
+ if(..()) //if harm or disarm intent.
+ attacked_stacks += 10
+ discipline_slime(user)
+
+/mob/living/simple_animal/slime/attackby(obj/item/attacking_item, mob/living/user, params)
+ if(stat == DEAD && surgeries.len)
+ var/list/modifiers = params2list(params)
+ if(!user.combat_mode || (LAZYACCESS(modifiers, RIGHT_CLICK)))
+ for(var/datum/surgery/operations as anything in surgeries)
+ if(operations.next_step(user, modifiers))
+ return TRUE
+ if(istype(attacking_item, /obj/item/stack/sheet/mineral/plasma) && !stat) //Lets you feed slimes plasma.
+ add_friendship(user, 1)
+ to_chat(user, span_notice("You feed the slime the plasma. It chirps happily."))
+ var/obj/item/stack/sheet/mineral/plasma/sheet = attacking_item
+ sheet.use(1)
+ return
+ if(attacking_item.force > 0)
+ attacked_stacks += 10
+ if(prob(25))
+ user.do_attack_animation(src)
+ user.changeNext_move(CLICK_CD_MELEE)
+ to_chat(user, span_danger("[attacking_item] passes right through [src]!"))
+ return
+ if(discipline_stacks && prob(50)) // wow, buddy, why am I getting attacked??
+ discipline_stacks = 0
+ if(attacking_item.force >= 3)
+ var/force_effect = attacking_item.force * (life_stage == SLIME_LIFE_STAGE_BABY ? 2 : 1)
+ if(prob(10 + force_effect))
+ discipline_slime(user)
+
+ if(!istype(attacking_item, /obj/item/storage/bag/xeno))
+ return ..()
+
+ var/obj/item/storage/xeno_bag = attacking_item
+ if(!crossbreed_modification)
+ to_chat(user, span_warning("The slime is not currently being mutated."))
+ return
+ var/has_output = FALSE //Have we outputted text?
+ var/has_found = FALSE //Have we found an extract to be added?
+ for(var/obj/item/slime_extract/extract in xeno_bag.contents)
+ if(extract.crossbreed_modification == crossbreed_modification)
+ xeno_bag.atom_storage.attempt_remove(extract, get_turf(src), silent = TRUE)
+ qdel(extract)
+ applied_crossbreed_amount++
+ has_found = TRUE
+ if(applied_crossbreed_amount >= SLIME_EXTRACT_CROSSING_REQUIRED)
+ to_chat(user, span_notice("You feed the slime as many of the extracts from the bag as you can, and it mutates!"))
+ playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE)
+ spawn_corecross()
+ has_output = TRUE
+ break
+
+ if(has_output)
+ return
+
+ if(!has_found)
+ to_chat(user, span_warning("There are no extracts in the bag that this slime will accept!"))
+ else
+ to_chat(user, span_notice("You feed the slime some extracts from the bag."))
+ playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE)
+ return
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index e17fd09e0fa..be158abaed5 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -1,6 +1,4 @@
-#define SLIME_HUNGER_NONE 0
-#define SLIME_HUNGER_HUNGRY 1
-#define SLIME_HUNGER_STARVING 2
+
/mob/living/simple_animal/slime/Life(seconds_per_tick = SSMOBS_DT, times_fired)
if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM))
@@ -34,84 +32,6 @@
return
return ..()
-/// the master AI process
-/mob/living/simple_animal/slime/proc/process_slime_ai()
-
- if(slime_ai_processing || stat || client)
- return
-
- var/hungry = SLIME_HUNGER_NONE
- if (nutrition < get_starve_nutrition())
- hungry = SLIME_HUNGER_STARVING
- else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition())
- hungry = SLIME_HUNGER_HUNGRY
-
- slime_ai_processing = TRUE
-
- while(slime_ai_processing && stat != DEAD && (attacked_stacks || hungry || rabid || buckled))
- if(!(mobility_flags & MOBILITY_MOVE)) //also covers buckling. Not sure why buckled is in the while condition if we're going to immediately break, honestly
- break
-
- if(!Target || client)
- break
-
- if(Target.health <= -70 || Target.stat == DEAD)
- set_target(null)
- slime_ai_processing = FALSE
- break
-
- if(Target)
- if(locate(/mob/living/simple_animal/slime) in Target.buckled_mobs)
- set_target(null)
- slime_ai_processing = FALSE
- break
- if(!slime_ai_processing)
- break
-
- if(Target in view(1,src))
- if(!can_feed_on(Target)) //If they're not able to be fed upon, ignore them.
- if(!is_attack_on_cooldown)
- is_attack_on_cooldown = TRUE
- addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
-
- if(Target.Adjacent(src))
- Target.attack_slime(src)
- break
- if((Target.body_position == STANDING_UP) && prob(80))
-
- if(Target.client && Target.health >= 20)
- if(!is_attack_on_cooldown)
- is_attack_on_cooldown = TRUE
- addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
-
- if(Target.Adjacent(src))
- Target.attack_slime(src)
-
- else
- if(!is_attack_on_cooldown && Target.Adjacent(src))
- start_feeding(Target)
-
- else
- if(!is_attack_on_cooldown && Target.Adjacent(src))
- start_feeding(Target)
-
- else if(Target in view(7, src))
- if(!Target.Adjacent(src))
- // Bug of the month candidate: slimes were attempting to move to target only if it was directly next to them, which caused them to target things, but not approach them
- step_to(src, Target)
- else
- set_target(null)
- slime_ai_processing = FALSE
- break
-
- var/sleeptime = cached_multiplicative_slowdown
- if(sleeptime <= 0)
- sleeptime = 1
-
- sleep(sleeptime + 2) // this is about as fast as a player slime can go
-
- slime_ai_processing = FALSE
-
/mob/living/simple_animal/slime/handle_environment(datum/gas_mixture/environment, seconds_per_tick, times_fired)
var/loc_temp = get_temperature(environment)
var/divisor = 10 /// The divisor controls how fast body temperature changes, lower causes faster changes
@@ -209,7 +129,7 @@
if(need_mob_update)
animal_victim.updatehealth()
- if(totaldamage <= 0) //if we did no(or negative!) damage to it, stop
+ if(totaldamage >= 0) // AdjustBruteLoss returns a negative value on succesful damage adjustment
stop_feeding(FALSE, FALSE)
return
@@ -230,411 +150,32 @@
return
if(SPT_PROB(7.5, seconds_per_tick))
- adjust_nutrition(-0.5 * (1 + is_adult) * seconds_per_tick)
+ adjust_nutrition((life_stage == SLIME_LIFE_STAGE_ADULT ? -1 : -0.5) * seconds_per_tick)
if(nutrition <= 0)
set_nutrition(0)
if(SPT_PROB(50, seconds_per_tick))
adjustBruteLoss(rand(0,5))
- else if (nutrition >= get_grow_nutrition() && amount_grown < SLIME_EVOLUTION_THRESHOLD)
+ else if (nutrition >= grow_nutrition && amount_grown < SLIME_EVOLUTION_THRESHOLD)
adjust_nutrition(-10 * seconds_per_tick)
amount_grown++
update_mob_action_buttons()
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD && !buckled && !Target && !ckey)
- if(is_adult && loc.AllowDrop())
+ if(life_stage == SLIME_LIFE_STAGE_ADULT && loc.AllowDrop())
Reproduce()
else
Evolve()
///Adds nutrition to the slime's nutrition level. Has a chance to increase its electric levels.
/mob/living/simple_animal/slime/proc/add_nutrition(nutrition_to_add = 0)
- set_nutrition(min((nutrition + nutrition_to_add), get_max_nutrition()))
- if(nutrition >= get_grow_nutrition())
- if(powerlevel<10)
+ set_nutrition(min((nutrition + nutrition_to_add), max_nutrition))
+ if(nutrition >= grow_nutrition)
+ if(powerlevel= get_hunger_nutrition() + 100) //can't get power levels unless you're a bit above hunger level.
- if(powerlevel<5)
+ else if(nutrition >= hunger_nutrition + 100) //can't get power levels unless you're a bit above hunger level.
+ if(powerlevel 50)
- attacked_stacks = 50
-
- if(attacked_stacks > 0)
- attacked_stacks--
-
- if(discipline_stacks > 0)
-
- if(discipline_stacks >= 5 && rabid)
- if(SPT_PROB(37, seconds_per_tick))
- rabid = FALSE
-
- if(SPT_PROB(5, seconds_per_tick))
- discipline_stacks--
-
- if(client) //player controlled slimes can decide for themselves
- return
-
- if(!(mobility_flags & MOBILITY_MOVE))
- return
-
- if(buckled)
- return // if it's eating someone already, continue eating!
-
- if(Target)
- --target_patience
- if (target_patience <= 0 || stunned_until > world.time || discipline_stacks || attacked_stacks || docile) // Tired of chasing or something draws out attention
- target_patience = 0
- set_target(null)
-
- if(slime_ai_processing && stunned_until > world.time)
- return
-
- var/hungry = SLIME_HUNGER_NONE // determines if the slime is hungry
-
- if (nutrition < get_starve_nutrition())
- hungry = SLIME_HUNGER_STARVING
- else if (nutrition < get_grow_nutrition() && SPT_PROB(13, seconds_per_tick) || nutrition < get_hunger_nutrition())
- hungry = SLIME_HUNGER_HUNGRY
-
- if(hungry == SLIME_HUNGER_STARVING && !client) // if a slime is starving, it starts losing its friends
- if(Friends.len > 0 && SPT_PROB(0.5, seconds_per_tick))
- var/mob/nofriend = pick(Friends)
- add_friendship(nofriend, -1)
-
- if(!Target) //If we have no target, try to add a target
- if(will_hunt() && hungry || attacked_stacks || rabid) // Only add to the list if we need to
- var/list/targets = list()
-
- for(var/mob/living/L in view(7,src))
-
- if(isslime(L) || L.stat == DEAD) // Ignore other slimes and dead mobs
- continue
-
- if(L in Friends) // No eating friends!
- continue
-
- var/ally = FALSE
- for(var/F in faction)
- if(F == FACTION_NEUTRAL) //slimes are neutral so other mobs not target them, but they can target neutral mobs
- continue
- if(F in L.faction)
- ally = TRUE
- break
- if(ally)
- continue
-
- if(issilicon(L) && (rabid || attacked_stacks)) // They can't eat silicons, but they can glomp them in defence
- targets += L // Possible target found!
-
- if(locate(/mob/living/simple_animal/slime) in L.buckled_mobs) // Only one slime can latch on at a time.
- continue
-
- targets += L // Possible target found!
-
- if(targets.len > 0)
- if(attacked_stacks || rabid || hungry == SLIME_HUNGER_STARVING)
- set_target(targets[1]) // I am attacked and am fighting back or so hungry I don't even care
- else
- for(var/mob/living/carbon/C in targets)
- if(!discipline_stacks && SPT_PROB(2.5, seconds_per_tick))
- if(ishuman(C) || isalienadult(C))
- set_target(C)
- break
-
- if(islarva(C) || ismonkey(C))
- set_target(C)
- break
-
- if (Target)
- target_patience = rand(5, 7)
- if (is_adult)
- target_patience += 3
-
- if(!Target) // If we have no target, we are wandering or following orders
- if (Leader)
- if(holding_still)
- holding_still = max(holding_still - (0.5 * seconds_per_tick), 0)
- else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc))
- step_to(src, Leader)
-
- else if(hungry)
- if (holding_still)
- holding_still = max(holding_still - (0.5 * hungry * seconds_per_tick), 0)
- else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(50))
- step(src, pick(GLOB.cardinals))
-
- else
- if(holding_still)
- holding_still = max(holding_still - (0.5 * seconds_per_tick), 0)
- else if (docile && pulledby)
- holding_still = 10
- else if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(loc) && prob(33))
- step(src, pick(GLOB.cardinals))
- else if(!slime_ai_processing)
- INVOKE_ASYNC(src, PROC_REF(process_slime_ai))
-
-/mob/living/simple_animal/slime/handle_automated_movement()
- return //slime random movement is currently handled in handle_targets()
-
-/mob/living/simple_animal/slime/handle_automated_speech()
- return //slime random speech is currently handled in handle_speech()
-
-///Handles slime mood
-/mob/living/simple_animal/slime/proc/handle_mood(seconds_per_tick, times_fired)
- #define SLIME_MOOD_NONE ""
- #define SLIME_MOOD_ANGRY "angry"
- #define SLIME_MOOD_MISCHIEVOUS "mischievous"
- #define SLIME_MOOD_POUT "pout"
- #define SLIME_MOOD_SAD "sad"
- #define SLIME_MOOD_SMILE ":3"
-
- var/newmood = SLIME_MOOD_NONE
- if (rabid || attacked_stacks)
- newmood = SLIME_MOOD_ANGRY
- else if (docile)
- newmood = SLIME_MOOD_SMILE
- else if (Target)
- newmood = SLIME_MOOD_MISCHIEVOUS
-
- if (!newmood)
- if (discipline_stacks && SPT_PROB(13, seconds_per_tick))
- newmood = SLIME_MOOD_POUT
- else if (SPT_PROB(0.5, seconds_per_tick))
- newmood = pick(SLIME_MOOD_SAD, ":3", SLIME_MOOD_POUT)
-
- if ((current_mood == SLIME_MOOD_SAD || current_mood == SLIME_MOOD_SMILE || current_mood == SLIME_MOOD_POUT) && !newmood)
- if(SPT_PROB(50, seconds_per_tick))
- newmood = current_mood
-
- if (newmood != current_mood) // This is so we don't redraw them every time
- current_mood = newmood
- regenerate_icons()
-
- #undef SLIME_MOOD_NONE
- #undef SLIME_MOOD_ANGRY
- #undef SLIME_MOOD_MISCHIEVOUS
- #undef SLIME_MOOD_POUT
- #undef SLIME_MOOD_SAD
- #undef SLIME_MOOD_SMILE
-
-///Handles the slime understanding commends spoken to it
-/mob/living/simple_animal/slime/proc/handle_speech(seconds_per_tick, times_fired)
- //Speech understanding starts here
- var/to_say
- if (speech_buffer.len > 0)
- var/who = speech_buffer[1] // Who said it?
- var/phrase = speech_buffer[2] // What did they say?
- if ((findtext(phrase, num2text(slime_id)) || findtext(phrase, "slimes"))) // Talking to us
- if (findtext(phrase, "hello") || findtext(phrase, "hi"))
- to_say = pick("Hello...", "Hi...")
- else if (findtext(phrase, "follow"))
- if (Leader)
- if (Leader == who) // Already following him
- to_say = pick("Yes...", "Lead...", "Follow...")
- else if (Friends[who] > Friends[Leader]) // VIVA
- set_leader(who)
- to_say = "Yes... I follow [who]..."
- else
- to_say = "No... I follow [Leader]..."
- else
- if (Friends[who] >= SLIME_FRIENDSHIP_FOLLOW)
- set_leader(who)
- to_say = "I follow..."
- else // Not friendly enough
- to_say = pick("No...", "I no follow...")
- else if (findtext(phrase, "stop"))
- if (buckled) // We are asked to stop feeding
- if (Friends[who] >= SLIME_FRIENDSHIP_STOPEAT)
- stop_feeding()
- set_target(null)
- if (Friends[who] < SLIME_FRIENDSHIP_STOPEAT_NOANGRY)
- add_friendship(who, -1)
- to_say = "Grrr..." // I'm angry but I do it
- else
- to_say = "Fine..."
- else if (Target) // We are asked to stop chasing
- if (Friends[who] >= SLIME_FRIENDSHIP_STOPCHASE)
- set_target(null)
- if (Friends[who] < SLIME_FRIENDSHIP_STOPCHASE_NOANGRY)
- add_friendship(who, -1)
- to_say = "Grrr..." // I'm angry but I do it
- else
- to_say = "Fine..."
- else if (Leader) // We are asked to stop following
- if (Leader == who)
- to_say = "Yes... I stay..."
- set_leader(null)
- else
- if (Friends[who] > Friends[Leader])
- set_leader(null)
- to_say = "Yes... I stop..."
- else
- to_say = "No... keep follow..."
- else if (findtext(phrase, "stay"))
- if (Leader)
- if (Leader == who)
- holding_still = Friends[who] * 10
- to_say = "Yes... stay..."
- else if (Friends[who] > Friends[Leader])
- holding_still = (Friends[who] - Friends[Leader]) * 10
- to_say = "Yes... stay..."
- else
- to_say = "No... keep follow..."
- else
- if (Friends[who] >= SLIME_FRIENDSHIP_STAY)
- holding_still = Friends[who] * 10
- to_say = "Yes... stay..."
- else
- to_say = "No... won't stay..."
- else if (findtext(phrase, "attack"))
- if (rabid && prob(20))
- set_target(who)
- process_slime_ai() //Wake up the slime's Target AI, needed otherwise this doesn't work
- to_say = "ATTACK!?!?"
- else if (Friends[who] >= SLIME_FRIENDSHIP_ATTACK)
- for (var/mob/living/possible_target in view(7,src)-list(src,who))
- if (findtext(phrase, lowertext(possible_target.name)))
- if (isslime(possible_target))
- to_say = "NO... [possible_target] slime friend"
- add_friendship(who, -1) //Don't ask a slime to attack its friend
- else if(!Friends[possible_target] || Friends[possible_target] < 1)
- set_target(possible_target)
- process_slime_ai()//Wake up the slime's Target AI, needed otherwise this doesn't work
- to_say = "Ok... I attack [Target]"
- else
- to_say = "No... like [possible_target] ..."
- add_friendship(who, -1) //Don't ask a slime to attack its friend
- break
- else
- to_say = "No... no listen"
-
- speech_buffer = list()
-
- //Speech starts here
- if (to_say)
- say (to_say)
- else if(SPT_PROB(0.5, seconds_per_tick))
- emote(pick("bounce","sway","light","vibrate","jiggle"))
- else
- var/speech_chance = 10
- var/slimes_near = 0
- var/dead_slimes = 0
- var/friends_near = list()
- for (var/mob/living/seen_mob in view(7,src))
- if(isslime(seen_mob) && seen_mob != src)
- ++slimes_near
- if (seen_mob.stat == DEAD)
- ++dead_slimes
- if (seen_mob in Friends)
- speech_chance += 20
- friends_near += seen_mob
- if (nutrition < get_hunger_nutrition())
- speech_chance += 10
- if (nutrition < get_starve_nutrition())
- speech_chance += 10
- if (SPT_PROB(1, seconds_per_tick) && prob(speech_chance))
- var/phrases = list()
- if (Target)
- phrases += "[Target]... look yummy..."
- if (nutrition < get_starve_nutrition())
- phrases += "So... hungry..."
- phrases += "Very... hungry..."
- phrases += "Need... food..."
- phrases += "Must... eat..."
- else if (nutrition < get_hunger_nutrition())
- phrases += "Hungry..."
- phrases += "Where food?"
- phrases += "I want to eat..."
- phrases += "Rawr..."
- phrases += "Blop..."
- phrases += "Blorble..."
- if (rabid || attacked_stacks)
- phrases += "Hrr..."
- phrases += "Nhuu..."
- phrases += "Unn..."
- if (current_mood == ":3")
- phrases += "Purr..."
- if (attacked_stacks)
- phrases += "Grrr..."
- if (bodytemperature < T0C)
- phrases += "Cold..."
- if (bodytemperature < T0C - 30)
- phrases += "So... cold..."
- phrases += "Very... cold..."
- if (bodytemperature < T0C - 50)
- phrases += "..."
- phrases += "C... c..."
- if (buckled)
- phrases += "Nom..."
- phrases += "Yummy..."
- if (powerlevel > 3)
- phrases += "Bzzz..."
- if (powerlevel > 5)
- phrases += "Zap..."
- if (powerlevel > 8)
- phrases += "Zap... Bzz..."
- if (current_mood == "sad")
- phrases += "Bored..."
- if (slimes_near)
- phrases += "Slime friend..."
- if (slimes_near > 1)
- phrases += "Slime friends..."
- if (dead_slimes)
- phrases += "What happened?"
- if (!slimes_near)
- phrases += "Lonely..."
- for (var/friend in friends_near)
- phrases += "[friend]... friend..."
- if (nutrition < get_hunger_nutrition())
- phrases += "[friend]... feed me..."
- if(!stat)
- say (pick(phrases))
-
-/// Can't go above it
-/mob/living/simple_animal/slime/proc/get_max_nutrition()
- if (is_adult)
- return 1200
- else
- return 1000
-
-/// Above it we grow, below it we can eat
-/mob/living/simple_animal/slime/proc/get_grow_nutrition()
- if (is_adult)
- return 1000
- else
- return 800
-
-/// Below it we will always eat
-/mob/living/simple_animal/slime/proc/get_hunger_nutrition()
- if (is_adult)
- return 600
- else
- return 500
-
-/// Below it we will eat before everything else
-/mob/living/simple_animal/slime/proc/get_starve_nutrition()
- if(is_adult)
- return 300
- else
- return 200
-/// Check for being stopped from feeding and chasing
-/mob/living/simple_animal/slime/proc/will_hunt(hunger = -1)
- if (docile)
- return FALSE
- if (hunger == SLIME_HUNGER_STARVING || rabid || attacked_stacks)
- return TRUE
- if (Leader)
- return FALSE
- if (holding_still)
- return FALSE
- return TRUE
-
-#undef SLIME_HUNGER_NONE
-#undef SLIME_HUNGER_HUNGRY
-#undef SLIME_HUNGER_STARVING
diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm
index 32c60f63adc..f129482eb24 100644
--- a/code/modules/mob/living/simple_animal/slime/powers.dm
+++ b/code/modules/mob/living/simple_animal/slime/powers.dm
@@ -133,25 +133,27 @@
///The slime will stop feeding
/mob/living/simple_animal/slime/proc/stop_feeding(silent = FALSE, living=TRUE)
- if(buckled)
- if(!living)
- to_chat(src, "[pick("This subject is incompatible", \
- "This subject does not have life energy", "This subject is empty", \
- "I am not satisified", "I can not feed from this subject", \
- "I do not feel nourished", "This subject is not food")]! ")
+ if(!buckled)
+ return
- var/mob/living/victim = buckled
+ if(!living)
+ to_chat(src, "[pick("This subject is incompatible", \
+ "This subject does not have life energy", "This subject is empty", \
+ "I am not satisified", "I can not feed from this subject", \
+ "I do not feel nourished", "This subject is not food")]! ")
- if(istype(victim))
- var/bio_protection = 100 - victim.getarmor(null, BIO)
- if(prob(bio_protection))
- victim.apply_status_effect(/datum/status_effect/slimed, slime_type.rgb_code, slime_type.colour == SLIME_TYPE_RAINBOW)
+ var/mob/living/victim = buckled
- if(!silent)
- visible_message(span_warning("[src] lets go of [buckled]!"), \
- span_notice("I stopped feeding. "))
- layer = initial(layer)
- buckled.unbuckle_mob(src,force=TRUE)
+ if(istype(victim))
+ var/bio_protection = 100 - victim.getarmor(null, BIO)
+ if(prob(bio_protection))
+ victim.apply_status_effect(/datum/status_effect/slimed, slime_type.rgb_code, slime_type.colour == SLIME_TYPE_RAINBOW)
+
+ if(!silent)
+ visible_message(span_warning("[src] lets go of [buckled]!"), \
+ span_notice("I stopped feeding. "))
+ layer = initial(layer)
+ buckled.unbuckle_mob(src,force=TRUE)
/mob/living/simple_animal/slime/verb/Evolve()
set category = "Slime"
@@ -160,19 +162,16 @@
if(stat)
to_chat(src, "I must be conscious to do this... ")
return
- if(is_adult)
+ if(life_stage == SLIME_LIFE_STAGE_ADULT)
to_chat(src, "I have already evolved... ")
return
if(amount_grown < SLIME_EVOLUTION_THRESHOLD)
to_chat(src, "I am not ready to evolve yet... ")
return
- is_adult = TRUE
- maxHealth = 200
+ set_life_stage(SLIME_LIFE_STAGE_ADULT)
amount_grown = 0
- for(var/datum/action/innate/slime/evolve/evolve_action in actions)
- evolve_action.Remove(src)
- GRANT_ACTION(/datum/action/innate/slime/reproduce)
+
regenerate_icons()
update_name()
@@ -196,7 +195,7 @@
if(!isopenturf(loc))
balloon_alert(src, "can't reproduce here!")
- if(!is_adult)
+ if(life_stage != SLIME_LIFE_STAGE_ADULT)
balloon_alert(src, "not old enough to reproduce!")
return
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 8d0770d2bf5..a95b5f85b95 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -1,4 +1,8 @@
-#define SLIME_CARES_ABOUT(to_check) (to_check && (to_check == Target || to_check == Leader || (to_check in Friends)))
+#define SLIME_EXTRA_SHOCK_COST 3
+#define SLIME_EXTRA_SHOCK_THRESHOLD 8
+#define SLIME_BASE_SHOCK_PERCENTAGE 10
+#define SLIME_SHOCK_PERCENTAGE_PER_LEVEL 7
+
/mob/living/simple_animal/slime
name = "grey baby slime (123)"
icon = 'icons/mob/simple/slimes.dmi'
@@ -10,6 +14,8 @@
harm_intent_damage = 5
icon_living = "grey baby slime"
icon_dead = "grey baby slime dead"
+ attack_verb_simple = "glomp"
+ attack_verb_continuous = "glomps"
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "shoos"
@@ -28,6 +34,7 @@
mob_biotypes = MOB_SLIME
melee_damage_lower = 5
melee_damage_upper = 25
+ wound_bonus = -45
verb_say = "blorbles"
verb_ask = "inquisitively blorbles"
@@ -42,17 +49,25 @@
//Physiology
- ///Is the slime an adult slime?
- var/is_adult = TRUE
+ ///What is our current lifestage?
+ var/life_stage = SLIME_LIFE_STAGE_BABY
///The number of /obj/item/slime_extract's the slime has left inside
var/cores = 1
///Chance of mutating, should be between 25 and 35
var/mutation_chance = 30
///1-10 controls how much electricity they are generating
- var/powerlevel = 0
+ var/powerlevel = SLIME_MIN_POWER
///Controls how long the slime has been overfed, if 10, grows or reproduces
var/amount_grown = 0
+ ///The maximum amount of nutrition a slime can contain
+ var/max_nutrition = 1000
+ /// Above it we grow our amount_grown and our power_level, below it we can eat
+ var/grow_nutrition = 800
+ /// Below this, we feel hungry
+ var/hunger_nutrition = 500
+ /// Below this, we feel starving
+ var/starve_nutrition = 200
///Has a mutator been used on the slime? Only one is allowed
var/mutator_used = FALSE
@@ -106,20 +121,12 @@
///Last phrase said near it and person who said it
var/list/speech_buffer = list()
-/mob/living/simple_animal/slime/Initialize(mapload, new_type=/datum/slime_type/grey, new_is_adult=FALSE)
+/mob/living/simple_animal/slime/Initialize(mapload, new_type=/datum/slime_type/grey, new_life_stage=SLIME_LIFE_STAGE_BABY)
var/datum/action/innate/slime/feed/feeding_action = new
feeding_action.Grant(src)
- is_adult = new_is_adult
+ set_life_stage(new_life_stage)
- if(is_adult)
- var/datum/action/innate/slime/reproduce/reproduce_action = new
- reproduce_action.Grant(src)
- health = 200
- maxHealth = 200
- else
- var/datum/action/innate/slime/evolve/evolve_action = new
- evolve_action.Grant(src)
set_slime_type(new_type)
. = ..()
set_nutrition(700)
@@ -129,6 +136,8 @@
ADD_TRAIT(src, TRAIT_CANT_RIDE, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
+ RegisterSignal(src, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(slime_pre_attack))
+
/mob/living/simple_animal/slime/Destroy()
for (var/A in actions)
var/datum/action/AC = A
@@ -139,34 +148,25 @@
return ..()
///Random slime subtype
-/mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_is_adult)
- . = ..(mapload, pick(subtypesof(/datum/slime_type)), prob(50))
+/mob/living/simple_animal/slime/random/Initialize(mapload, new_colour, new_life_stage)
+ . = ..(mapload, pick(subtypesof(/datum/slime_type)), prob(50) ? SLIME_LIFE_STAGE_ADULT : SLIME_LIFE_STAGE_BABY)
///Friendly docile subtype
/mob/living/simple_animal/slime/pet
docile = TRUE
-/mob/living/simple_animal/slime/proc/set_slime_type(new_type)
- slime_type = new new_type
- update_name()
- regenerate_icons()
-
/mob/living/simple_animal/slime/update_name()
///Checks if the slime has a generic name, in the format of baby/adult slime (123)
var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)")
if(slime_name_regex.Find(name))
slime_id = rand(1, 1000)
- name = "[slime_type.colour] [is_adult ? "adult" : "baby"] slime ([slime_id])"
+ name = "[slime_type.colour] [life_stage] slime ([slime_id])"
real_name = name
return ..()
-///randomizes the colour of a slime
-/mob/living/simple_animal/slime/proc/random_colour()
- set_slime_type(pick(subtypesof(/datum/slime_type)))
-
/mob/living/simple_animal/slime/regenerate_icons()
cut_overlays()
- var/icon_text = "[slime_type.colour] [is_adult ? "adult" : "baby"] slime"
+ var/icon_text = "[slime_type.colour] [life_stage] slime"
icon_dead = "[icon_text] dead"
if(stat != DEAD)
icon_state = icon_text
@@ -197,39 +197,46 @@
if(mod)
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_tempmod, multiplicative_slowdown = mod)
-/mob/living/simple_animal/slime/ObjBump(obj/O)
- if(!client && powerlevel > 0)
- var/probab = 10
- switch(powerlevel)
- if(1 to 2)
- probab = 20
- if(3 to 4)
- probab = 30
- if(5 to 6)
- probab = 40
- if(7 to 8)
- probab = 60
- if(9)
- probab = 70
- if(10)
- probab = 95
- if(prob(probab))
- if(istype(O, /obj/structure/window) || istype(O, /obj/structure/grille))
- if(nutrition <= get_hunger_nutrition() && !is_attack_on_cooldown)
- if (is_adult || prob(5))
- O.attack_slime(src)
- is_attack_on_cooldown = TRUE
- addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
-
-/mob/living/simple_animal/slime/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
- return 2
+/mob/living/simple_animal/slime/ObjBump(obj/bumped_object)
+ if(client || powerlevel <= SLIME_MIN_POWER) // slimes with people in control can't accidentally attack
+ return
+
+ if (life_stage != SLIME_LIFE_STAGE_ADULT && !prob(5)) //its rare for baby slimes to actually damage windows
+ return
+
+ var/accidental_attack_probability = 10
+ switch(powerlevel)
+ if(1 to 2)
+ accidental_attack_probability = 20
+ if(3 to 4)
+ accidental_attack_probability = 30
+ if(5 to 6)
+ accidental_attack_probability = 40
+ if(7 to 8)
+ accidental_attack_probability = 60
+ if(9)
+ accidental_attack_probability = 70
+ if(10)
+ accidental_attack_probability = 95
+ if(!prob(accidental_attack_probability))
+ return
+
+ if(!istype(bumped_object, /obj/structure/window) && !istype(bumped_object, /obj/structure/grille))
+ return
+
+ if(nutrition > hunger_nutrition || is_attack_on_cooldown) //hungry slimes and slimes on cooldown will not attack
+ return
+
+ bumped_object.attack_animal(src)
+ is_attack_on_cooldown = TRUE
+ addtimer(VARSET_CALLBACK(src, is_attack_on_cooldown, FALSE), 4.5 SECONDS)
/mob/living/simple_animal/slime/get_status_tab_items()
. = ..()
if(!docile)
- . += "Nutrition: [nutrition]/[get_max_nutrition()]"
+ . += "Nutrition: [nutrition]/[max_nutrition]"
if(amount_grown >= SLIME_EVOLUTION_THRESHOLD)
- if(is_adult)
+ if(life_stage == SLIME_LIFE_STAGE_ADULT)
. += "You can reproduce!"
else
. += "You can evolve!"
@@ -241,17 +248,6 @@
. += "Power Level: [powerlevel]"
-/mob/living/simple_animal/slime/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype)
- if(!forced)
- amount = -abs(amount)
- return ..() //Heals them
-
-/mob/living/simple_animal/slime/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- powerlevel = 0 // oh no, the power!
-
/mob/living/simple_animal/slime/MouseDrop(atom/movable/target_atom as mob|obj)
if(isliving(target_atom) && target_atom != src && usr == src)
var/mob/living/Food = target_atom
@@ -268,176 +264,12 @@
/mob/living/simple_animal/slime/attack_ui(slot, params)
return
-/mob/living/simple_animal/slime/attack_slime(mob/living/simple_animal/slime/attacking_slime, list/modifiers)
- if(..()) //successful slime attack
- if(attacking_slime == src)
- return
- if(buckled)
- stop_feeding(silent = TRUE)
- visible_message(span_danger("[attacking_slime] pulls [src] off!"), \
- span_danger("You pull [src] off!"))
- return
- attacked_stacks += 5
- if(nutrition >= 100) //steal some nutrition. negval handled in life()
- adjust_nutrition(-(50 + (40 * attacking_slime.is_adult)))
- attacking_slime.add_nutrition(50 + (40 * attacking_slime.is_adult))
- if(health > 0)
- attacking_slime.adjustBruteLoss(-10 + (-10 * attacking_slime.is_adult))
- attacking_slime.updatehealth()
-
-/mob/living/simple_animal/slime/attack_animal(mob/living/simple_animal/user, list/modifiers)
- . = ..()
- if(.)
- attacked_stacks += 10
-
-/mob/living/simple_animal/slime/attack_paw(mob/living/carbon/human/user, list/modifiers)
- if(..()) //successful monkey bite.
- attacked_stacks += 10
-
-/mob/living/simple_animal/slime/attack_larva(mob/living/carbon/alien/larva/L, list/modifiers)
- if(..()) //successful larva bite.
- attacked_stacks += 10
-
-/mob/living/simple_animal/slime/attack_hulk(mob/living/carbon/human/user)
- . = ..()
- if(!.)
- return
- discipline_slime(user)
-
-/mob/living/simple_animal/slime/attack_hand(mob/living/carbon/human/user, list/modifiers)
- if(buckled)
- user.do_attack_animation(src, ATTACK_EFFECT_DISARM)
- if(buckled == user)
- if(prob(60))
- user.visible_message(span_warning("[user] attempts to wrestle \the [name] off!"), \
- span_danger("You attempt to wrestle \the [name] off!"))
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1)
-
- else
- user.visible_message(span_warning("[user] manages to wrestle \the [name] off!"), \
- span_notice("You manage to wrestle \the [name] off!"))
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
-
- discipline_slime(user)
-
- else
- if(prob(30))
- buckled.visible_message(span_warning("[user] attempts to wrestle \the [name] off of [buckled]!"), \
- span_warning("[user] attempts to wrestle \the [name] off of you!"))
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1)
-
- else
- buckled.visible_message(span_warning("[user] manages to wrestle \the [name] off of [buckled]!"), \
- span_notice("[user] manage to wrestle \the [name] off of you!"))
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
-
- discipline_slime(user)
- else
- if(stat == DEAD && surgeries.len)
- if(!user.combat_mode || LAZYACCESS(modifiers, RIGHT_CLICK))
- for(var/datum/surgery/operations as anything in surgeries)
- if(operations.next_step(user, modifiers))
- return TRUE
- if(..()) //successful attack
- attacked_stacks += 10
-
-/mob/living/simple_animal/slime/attack_alien(mob/living/carbon/alien/adult/user, list/modifiers)
- if(..()) //if harm or disarm intent.
- attacked_stacks += 10
- discipline_slime(user)
-
-
-/mob/living/simple_animal/slime/attackby(obj/item/attacking_item, mob/living/user, params)
- if(stat == DEAD && surgeries.len)
- var/list/modifiers = params2list(params)
- if(!user.combat_mode || (LAZYACCESS(modifiers, RIGHT_CLICK)))
- for(var/datum/surgery/operations as anything in surgeries)
- if(operations.next_step(user, modifiers))
- return TRUE
- if(istype(attacking_item, /obj/item/stack/sheet/mineral/plasma) && !stat) //Let's you feed slimes plasma.
- add_friendship(user, 1)
- to_chat(user, span_notice("You feed the slime the plasma. It chirps happily."))
- var/obj/item/stack/sheet/mineral/plasma/sheet = attacking_item
- sheet.use(1)
- return
- if(attacking_item.force > 0)
- attacked_stacks += 10
- if(prob(25))
- user.do_attack_animation(src)
- user.changeNext_move(CLICK_CD_MELEE)
- to_chat(user, span_danger("[attacking_item] passes right through [src]!"))
- return
- if(discipline_stacks && prob(50)) // wow, buddy, why am I getting attacked??
- discipline_stacks = 0
- if(attacking_item.force >= 3)
- var/force_effect = 2 * attacking_item.force
- if(is_adult)
- force_effect = round(attacking_item.force/2)
- if(prob(10 + force_effect))
- discipline_slime(user)
-
- if(!istype(attacking_item, /obj/item/storage/bag/xeno))
- return ..()
-
- var/obj/item/storage/xeno_bag = attacking_item
- if(!crossbreed_modification)
- to_chat(user, span_warning("The slime is not currently being mutated."))
- return
- var/has_output = FALSE //Have we outputted text?
- var/has_found = FALSE //Have we found an extract to be added?
- for(var/obj/item/slime_extract/extract in xeno_bag.contents)
- if(extract.crossbreed_modification == crossbreed_modification)
- xeno_bag.atom_storage.attempt_remove(extract, get_turf(src), silent = TRUE)
- qdel(extract)
- applied_crossbreed_amount++
- has_found = TRUE
- if(applied_crossbreed_amount >= SLIME_EXTRACT_CROSSING_REQUIRED)
- to_chat(user, span_notice("You feed the slime as many of the extracts from the bag as you can, and it mutates!"))
- playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE)
- spawn_corecross()
- has_output = TRUE
- break
-
- if(has_output)
- return
-
- if(!has_found)
- to_chat(user, span_warning("There are no extracts in the bag that this slime will accept!"))
- else
- to_chat(user, span_notice("You feed the slime some extracts from the bag."))
- playsound(src, 'sound/effects/attackblob.ogg', 50, TRUE)
- return
-
-
-///Spawns a crossed slimecore item
-/mob/living/simple_animal/slime/proc/spawn_corecross()
- var/static/list/crossbreeds = subtypesof(/obj/item/slimecross)
- visible_message(span_danger("[src] shudders, its mutated core consuming the rest of its body!"))
- playsound(src, 'sound/magic/smoke.ogg', 50, TRUE)
- var/selected_crossbreed_path
- for(var/crossbreed_path in crossbreeds)
- var/obj/item/slimecross/cross_item = crossbreed_path
- if(initial(cross_item.colour) == slime_type.colour && initial(cross_item.effect) == crossbreed_modification)
- selected_crossbreed_path = cross_item
- break
- if(selected_crossbreed_path)
- new selected_crossbreed_path(loc)
- else
- visible_message(span_warning("The mutated core shudders, and collapses into a puddle, unable to maintain its form."))
- qdel(src)
-
-/mob/living/simple_animal/slime/proc/apply_water()
- adjustBruteLoss(rand(15,20))
- if(client)
- return
-
- if(Target) // Like cats
- set_target(null)
- ++discipline_stacks
- return
+/mob/living/simple_animal/slime/get_mob_buckling_height(mob/seat)
+ if(..())
+ return 3
/mob/living/simple_animal/slime/examine(mob/user)
- . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) //SKYRAT EDIT CHANGE
+ . = list("This is [icon2html(src, user)] \a [src] !", EXAMINE_SECTION_BREAK) //NOVA EDIT CHANGE
if (stat == DEAD)
. += span_deadsay("It is limp and unresponsive.")
else
@@ -466,6 +298,70 @@
. += " "
+/mob/living/simple_animal/slime/proc/apply_water()
+ adjustBruteLoss(rand(15,20))
+ if(client)
+ return
+
+ if(Target) // Like cats
+ set_target(null)
+ ++discipline_stacks
+ return
+
+///Changes the slime's current life state
+/mob/living/simple_animal/slime/proc/set_life_stage(new_life_stage = SLIME_LIFE_STAGE_BABY)
+ life_stage = new_life_stage
+
+ switch(life_stage)
+ if(SLIME_LIFE_STAGE_BABY)
+ for(var/datum/action/innate/slime/reproduce/reproduce_action in actions)
+ reproduce_action.Remove(src)
+
+ GRANT_ACTION(/datum/action/innate/slime/evolve)
+
+ health = initial(health)
+ maxHealth = initial(maxHealth)
+
+ obj_damage = initial(obj_damage)
+ melee_damage_lower = initial(melee_damage_lower)
+ melee_damage_upper = initial(melee_damage_upper)
+ wound_bonus = initial(wound_bonus)
+
+ max_nutrition = initial(max_nutrition)
+ grow_nutrition = initial(grow_nutrition)
+ hunger_nutrition = initial(hunger_nutrition)
+ starve_nutrition = initial(starve_nutrition)
+
+ if(SLIME_LIFE_STAGE_ADULT)
+
+ for(var/datum/action/innate/slime/evolve/evolve_action in actions)
+ evolve_action.Remove(src)
+
+ GRANT_ACTION(/datum/action/innate/slime/reproduce)
+
+ health = 200
+ maxHealth = 200
+
+ obj_damage = 15
+ melee_damage_lower += 10
+ melee_damage_upper += 10
+ wound_bonus = -90
+
+ max_nutrition += 200
+ grow_nutrition += 200
+ hunger_nutrition += 100
+ starve_nutrition += 100
+
+///Sets the slime's type, name and its icons
+/mob/living/simple_animal/slime/proc/set_slime_type(new_type)
+ slime_type = new new_type
+ update_name()
+ regenerate_icons()
+
+///randomizes the colour of a slime
+/mob/living/simple_animal/slime/proc/random_colour()
+ set_slime_type(pick(subtypesof(/datum/slime_type)))
+
///Makes a slime not attack people for a while
/mob/living/simple_animal/slime/proc/discipline_slime(mob/user)
if(stat)
@@ -474,7 +370,7 @@
if(prob(80) && !client)
discipline_stacks++
- if(!is_adult && discipline_stacks == 1) //if the slime is a baby and has not been overly disciplined, it will give up its grudge
+ if(life_stage == SLIME_LIFE_STAGE_BABY && discipline_stacks == 1) //if the slime is a baby and has not been overly disciplined, it will give up its grudge
attacked_stacks = 0
set_target(null)
@@ -494,66 +390,83 @@
if(user)
step_away(src,user,15)
-/mob/living/simple_animal/slime/get_mob_buckling_height(mob/seat)
- if(..())
- return 3
-
-///Sets the slime's current attack target
-/mob/living/simple_animal/slime/proc/set_target(new_target)
- var/old_target = Target
- Target = new_target
- if(old_target && !SLIME_CARES_ABOUT(old_target))
- UnregisterSignal(old_target, COMSIG_QDELETING)
- if(Target)
- RegisterSignal(Target, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
-
-///Sets the person the slime is following around
-/mob/living/simple_animal/slime/proc/set_leader(new_leader)
- var/old_leader = Leader
- Leader = new_leader
- if(old_leader && !SLIME_CARES_ABOUT(old_leader))
- UnregisterSignal(old_leader, COMSIG_QDELETING)
- if(Leader)
- RegisterSignal(Leader, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
-
-///Alters the friendship value of the target
-/mob/living/simple_animal/slime/proc/add_friendship(new_friend, amount = 1)
- if(!Friends[new_friend])
- Friends[new_friend] = 0
- Friends[new_friend] += amount
- if(new_friend)
- RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
-
-///Sets the friendship value of the target
-/mob/living/simple_animal/slime/proc/set_friendship(new_friend, amount = 1)
- Friends[new_friend] = amount
- if(new_friend)
- RegisterSignal(new_friend, COMSIG_QDELETING, PROC_REF(clear_memories_of), override = TRUE)
-
-///Removes someone from the friendlist
-/mob/living/simple_animal/slime/proc/remove_friend(friend)
- Friends -= friend
- if(friend && !SLIME_CARES_ABOUT(friend))
- UnregisterSignal(friend, COMSIG_QDELETING)
-
-///Adds someone to the friend list
-/mob/living/simple_animal/slime/proc/set_friends(new_buds)
- clear_friends()
- for(var/mob/friend as anything in new_buds)
- set_friendship(friend, new_buds[friend])
-
-///Removes everyone from the friend list
-/mob/living/simple_animal/slime/proc/clear_friends()
- for(var/mob/friend as anything in Friends)
- remove_friend(friend)
+///Spawns a crossed slimecore item
+/mob/living/simple_animal/slime/proc/spawn_corecross()
+ var/static/list/crossbreeds = subtypesof(/obj/item/slimecross)
+ visible_message(span_danger("[src] shudders, its mutated core consuming the rest of its body!"))
+ playsound(src, 'sound/magic/smoke.ogg', 50, TRUE)
+ var/selected_crossbreed_path
+ for(var/crossbreed_path in crossbreeds)
+ var/obj/item/slimecross/cross_item = crossbreed_path
+ if(initial(cross_item.colour) == slime_type.colour && initial(cross_item.effect) == crossbreed_modification)
+ selected_crossbreed_path = cross_item
+ break
+ if(selected_crossbreed_path)
+ new selected_crossbreed_path(loc)
+ else
+ visible_message(span_warning("The mutated core shudders, and collapses into a puddle, unable to maintain its form."))
+ qdel(src)
-///The passed source will be no longer be the slime's target, leader, or one of its friends
-/mob/living/simple_animal/slime/proc/clear_memories_of(datum/source)
+///Handles slime attacking restrictions, and any extra effects that would trigger
+/mob/living/simple_animal/slime/proc/slime_pre_attack(mob/living/simple_animal/slime/our_slime, atom/target, proximity, modifiers)
SIGNAL_HANDLER
- if(source == Target)
- set_target(null)
- if(source == Leader)
- set_leader(null)
- remove_friend(source)
-
-#undef SLIME_CARES_ABOUT
+ if(isAI(target)) //The aI is not tasty!
+ target.balloon_alert(our_slime, "not tasty!")
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+ if(our_slime.buckled == target) //If you try to attack the creature you are latched on, you instead cancel feeding
+ our_slime.stop_feeding()
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+ if(iscyborg(target))
+ var/mob/living/silicon/robot/borg_target = target
+ borg_target.flash_act()
+ do_sparks(5, TRUE, borg_target)
+ var/stunprob = our_slime.powerlevel * SLIME_SHOCK_PERCENTAGE_PER_LEVEL + SLIME_BASE_SHOCK_PERCENTAGE
+ if(prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST)
+ our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER)
+ borg_target.apply_damage(our_slime.powerlevel * rand(6, 10), BRUTE, spread_damage = TRUE, wound_bonus = CANT_WOUND)
+ borg_target.visible_message(span_danger("The [our_slime.name] shocks [borg_target]!"), span_userdanger("The [our_slime.name] shocks you!"))
+ else
+ borg_target.visible_message(span_danger("The [our_slime.name] fails to hurt [borg_target]!"), span_userdanger("The [our_slime.name] failed to hurt you!"))
+
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+
+ if(iscarbon(target) && our_slime.powerlevel > SLIME_MIN_POWER)
+ var/mob/living/carbon/carbon_target = target
+ var/stunprob = our_slime.powerlevel * SLIME_SHOCK_PERCENTAGE_PER_LEVEL + SLIME_BASE_SHOCK_PERCENTAGE // 17 at level 1, 80 at level 10
+ if(!prob(stunprob))
+ return NONE // normal attack
+
+ carbon_target.visible_message(span_danger("The [our_slime.name] shocks [carbon_target]!"), span_userdanger("The [our_slime.name] shocks you!"))
+
+ do_sparks(5, TRUE, carbon_target)
+ var/power = our_slime.powerlevel + rand(0,3)
+ carbon_target.Paralyze(power * 2 SECONDS)
+ carbon_target.set_stutter_if_lower(power * 2 SECONDS)
+ if (prob(stunprob) && our_slime.powerlevel >= SLIME_EXTRA_SHOCK_COST)
+ our_slime.powerlevel = clamp(our_slime.powerlevel - SLIME_EXTRA_SHOCK_COST, SLIME_MIN_POWER, SLIME_MAX_POWER)
+ carbon_target.apply_damage(our_slime.powerlevel * rand(6, 10), BURN, spread_damage = TRUE, wound_bonus = CANT_WOUND)
+
+ if(isslime(target))
+ if(target == our_slime)
+ return COMPONENT_CANCEL_ATTACK_CHAIN
+ var/mob/living/simple_animal/slime/target_slime = target
+ if(target_slime.buckled)
+ target_slime.stop_feeding(silent = TRUE)
+ visible_message(span_danger("[our_slime] pulls [target_slime] off!"), \
+ span_danger("You pull [target_slime] off!"))
+ return NONE // normal attack
+ target_slime.attacked_stacks += 5
+ var/is_adult_slime = our_slime.life_stage == SLIME_LIFE_STAGE_ADULT
+ if(target_slime.nutrition >= 100) //steal some nutrition. negval handled in life()
+ var/stolen_nutrition = is_adult_slime ? 90 : 50
+ target_slime.adjust_nutrition(-stolen_nutrition)
+ our_slime.add_nutrition(stolen_nutrition)
+ if(target_slime.health > 0)
+ our_slime.adjustBruteLoss(is_adult_slime ? -20 : -10)
+
+#undef SLIME_EXTRA_SHOCK_COST
+#undef SLIME_EXTRA_SHOCK_THRESHOLD
+#undef SLIME_BASE_SHOCK_PERCENTAGE
+#undef SLIME_SHOCK_PERCENTAGE_PER_LEVEL
diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm
index f0bc01eb84c..72adcbb43df 100644
--- a/code/modules/mob/living/taste.dm
+++ b/code/modules/mob/living/taste.dm
@@ -56,6 +56,9 @@
// No tongue, no tastin'
if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA))
return NONE
+ // Handled in here since the brain trauma can't modify taste directly (/datum/brain_trauma/severe/flesh_desire)
+ if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
+ return GORE | MEAT
return tongue.liked_foodtypes
/**
@@ -83,6 +86,8 @@
// No tongue, no tastin'
if(!tongue)
return TOXIC
+ if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE))
+ return VEGETABLES | DAIRY | FRUIT | FRIED
return tongue.toxic_foodtypes
/**
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 817e9ce9474..0b111cf8af3 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -181,7 +181,7 @@
hud_list[hud] = list()
else
- var/image/I = image('modular_skyrat/master_files/icons/mob/huds/hud.dmi', src, "") //SKYRAT EDIT: original filepath 'icons/mob/huds/hud.dmi'
+ var/image/I = image('modular_nova/master_files/icons/mob/huds/hud.dmi', src, "") //NOVA EDIT: original filepath 'icons/mob/huds/hud.dmi'
I.appearance_flags = RESET_COLOR|RESET_TRANSFORM
hud_list[hud] = I
set_hud_image_active(hud, update_huds = FALSE) //by default everything is active. but dont add it to huds to keep control.
@@ -267,7 +267,7 @@
* * vision_distance (optional) define how many tiles away the message can be seen.
* * ignored_mob (optional) doesn't show any message to a given mob if TRUE.
*/
-/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - separation, pref checks
+/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - separation, pref checks
var/turf/T = get_turf(src)
if(!T)
return
@@ -277,7 +277,7 @@
var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs.
hearers -= ignored_mobs
- //SKYRAT EDIT ADDITION BEGIN - AI QoL
+ //NOVA EDIT ADDITION BEGIN - AI QoL
for(var/mob/camera/ai_eye/ai_eye in hearers)
if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD))
hearers -= ai_eye
@@ -286,22 +286,22 @@
for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers)
if(holo.Impersonation?.client)
hearers |= holo.Impersonation
- //SKYRAT EDIT ADDITION END - AI QoL
+ //NOVA EDIT ADDITION END - AI QoL
if(self_message)
hearers -= src
var/raw_msg = message
if(visible_message_flags & EMOTE_MESSAGE)
- message = "[src] [separation][message] " // SKYRAT EDIT - Better emotes
+ message = "[src] [separation][message] " // NOVA EDIT - Better emotes
for(var/mob/M in hearers)
if(!M.client)
continue
- // SKYRAT EDIT ADDITION - Emote pref checks
+ // NOVA EDIT ADDITION - Emote pref checks
if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
//This entire if/else chain could be in two lines but isn't for readibilties sake.
var/msg = message
@@ -327,7 +327,7 @@
///Adds the functionality to self_message.
-/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks
+/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks
. = ..()
if(self_message)
show_message(self_message, MSG_VISUAL, blind_message, MSG_AUDIBLE)
@@ -342,10 +342,10 @@
* * deaf_message (optional) is what deaf people will see.
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
*/
-/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks
+/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks
var/list/hearers = get_hearers_in_view(hearing_distance, src)
- //SKYRAT EDIT ADDITION BEGIN - AI QoL
+ //NOVA EDIT ADDITION BEGIN - AI QoL
for(var/mob/camera/ai_eye/ai_eye in hearers)
if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD))
hearers -= ai_eye
@@ -354,18 +354,18 @@
for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers)
if(holo.Impersonation?.client)
hearers |= holo.Impersonation
- //SKYRAT EDIT ADDITION END - AI QoL
+ //NOVA EDIT ADDITION END - AI QoL
if(self_message)
hearers -= src
var/raw_msg = message
if(audible_message_flags & EMOTE_MESSAGE)
- message = "[src] [separation][message] " //SKYRAT EDIT CHANGE
+ message = "[src] [separation][message] " //NOVA EDIT CHANGE
for(var/mob/M in hearers)
- // SKYRAT EDIT ADDITION - Emote pref checks
+ // NOVA EDIT ADDITION - Emote pref checks
if(pref_to_check && !M.client?.prefs.read_preference(pref_to_check))
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear())
M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags)
M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
@@ -381,7 +381,7 @@
* * deaf_message (optional) is what deaf people will see.
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
*/
-/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // SKYRAT EDIT ADDITION - Better emotes, pref checks
+/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ", pref_to_check) // NOVA EDIT ADDITION - Better emotes, pref checks
. = ..()
if(self_message)
show_message(self_message, MSG_AUDIBLE, deaf_message, MSG_VISUAL)
@@ -502,7 +502,7 @@
*
* returns 0 if it cannot, 1 if successful
*/
-/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //SKYRAT EDIT CHANGE
+/mob/proc/equip_to_appropriate_slot(obj/item/W, qdel_on_fail = FALSE, indirect_action = FALSE, blacklist, initial) //NOVA EDIT CHANGE
if(!istype(W))
return FALSE
@@ -520,7 +520,7 @@
ITEM_SLOT_DEX_STORAGE\
)
- //SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION
+ //NOVA EDIT CHANGE BEGIN - CUSTOMIZATION
/*
for(var/slot in slot_priority)
if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, FALSE)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE;
@@ -529,7 +529,7 @@
slot_priority -= blacklist
for(var/slot in slot_priority)
if(equip_to_slot_if_possible(W, slot, FALSE, TRUE, TRUE, FALSE, initial, indirect_action = indirect_action)) //qdel_on_fail = FALSE; disable_warning = TRUE; redraw_mob = TRUE;
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
return TRUE
if(qdel_on_fail)
@@ -625,7 +625,7 @@
else
result = examinify.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist?
- //SKYRAT EDIT CHANGE
+ //NOVA EDIT CHANGE
if(result.len)
for(var/i = 1; i <= length(result); i++)
if(result[i] != EXAMINE_SECTION_BREAK)
@@ -635,7 +635,7 @@
if((i == 1) || (i == length(result)) || (result[i - 1] == EXAMINE_SECTION_BREAK))
result.Cut(i, i + 1)
i--
- //SKYRAT EDIT END
+ //NOVA EDIT END
to_chat(src, examine_block("[result.Join()] "))
SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify)
@@ -849,12 +849,12 @@
if(!check_respawn_delay())
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(ckey)
if(is_banned_from(ckey, BAN_RESPAWN))
to_chat(usr, "You are respawn banned, you can't respawn! ")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
usr.log_message("used the respawn button.", LOG_GAME)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index be218941aea..245afb86932 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -9,7 +9,6 @@
/mob
density = TRUE
layer = MOB_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
animate_movement = SLIDE_STEPS
hud_possible = list(ANTAG_HUD)
pressure_resistance = 8
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 19ca3e7736b..8c6ebe11496 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -364,7 +364,7 @@
var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/)
if(A)
poll_message = "[poll_message] Status: [A.name]."
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob(poll_message, ROLE_PAI, FALSE, 10 SECONDS, M)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob(poll_message, check_jobban = ROLE_PAI, poll_time = 10 SECONDS, target_mob = M, pic_source = M, role_name_text = "ghost control")
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
diff --git a/code/modules/mob/mob_lists.dm b/code/modules/mob/mob_lists.dm
index f0a5275bf71..75904737c3f 100644
--- a/code/modules/mob/mob_lists.dm
+++ b/code/modules/mob/mob_lists.dm
@@ -53,7 +53,7 @@
GLOB.keyloop_list |= src
else if(stat != DEAD || !SSlag_switch?.measures[DISABLE_DEAD_KEYLOOP])
GLOB.keyloop_list |= src
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
if(stat == DEAD)
add_to_current_dead_players()
@@ -65,7 +65,7 @@
SHOULD_CALL_PARENT(TRUE)
GLOB.player_list -= src
GLOB.keyloop_list -= src
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
if(stat == DEAD)
remove_from_current_dead_players()
@@ -75,12 +75,12 @@
///Adds the cliented mob reference to either the list of dead player-mobs or to the list of observers, depending on how they joined the game.
/mob/proc/add_to_current_dead_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
GLOB.dead_player_list |= src
/mob/dead/observer/add_to_current_dead_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
if(started_as_observer)
GLOB.current_observers_list |= src
@@ -92,12 +92,12 @@
///Removes the mob reference from either the list of dead player-mobs or from the list of observers, depending on how they joined the game.
/mob/proc/remove_from_current_dead_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
GLOB.dead_player_list -= src
/mob/dead/observer/remove_from_current_dead_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
if(started_as_observer)
GLOB.current_observers_list -= src
@@ -107,7 +107,7 @@
///Adds the cliented mob reference to the list of living player-mobs. If the mob is an antag, it adds it to the list of living antag player-mobs.
/mob/proc/add_to_current_living_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
GLOB.alive_player_list |= src
if(mind && (mind.special_role || length(mind.antag_datums)))
@@ -115,7 +115,7 @@
///Removes the mob reference from the list of living player-mobs. If the mob is an antag, it removes it from the list of living antag player-mobs.
/mob/proc/remove_from_current_living_players()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
GLOB.alive_player_list -= src
if(LAZYLEN(mind?.antag_datums))
@@ -124,7 +124,7 @@
///Adds the cliented mob reference to the list of living antag player-mobs.
/mob/proc/add_to_current_living_antags()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
if (length(mind.antag_datums) == 0)
@@ -137,6 +137,6 @@
///Removes the mob reference from the list of living antag player-mobs.
/mob/proc/remove_from_current_living_antags()
- if(!SSticker?.mode)
+ if(!SSticker.HasRoundStarted())
return
GLOB.current_living_antags -= src
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 4189d08f3bd..6dbcb9cfa4e 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -490,13 +490,12 @@
if(move_intent == MOVE_INTENT_RUN)
move_intent = MOVE_INTENT_WALK
else
- //SKYRAT EDIT ADDITION BEGIN - GUNPOINT
+ //NOVA EDIT ADDITION BEGIN - GUNPOINT
if (HAS_TRAIT(src,TRAIT_NORUNNING))
to_chat(src, "You find yourself unable to run.")
return FALSE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
move_intent = MOVE_INTENT_RUN
- SET_PLANE_IMPLICIT(src, (move_intent == MOVE_INTENT_WALK && !HAS_TRAIT(src, TRAIT_OVERSIZED)) ? GAME_PLANE_FOV_HIDDEN : GAME_PLANE) //SKYRAT EDIT ADDITION - Oversized Overhaul
if(hud_used?.static_inventory)
for(var/atom/movable/screen/mov_intent/selector in hud_used.static_inventory)
selector.update_appearance()
@@ -507,10 +506,12 @@
set name = "Move Upwards"
set category = "IC"
+ if(remote_control)
+ return remote_control.relaymove(src, UP)
+
var/turf/current_turf = get_turf(src)
var/turf/above_turf = GET_TURF_ABOVE(current_turf)
- var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0
if(!above_turf)
to_chat(src, span_warning("There's nowhere to go in that direction!"))
return
@@ -519,6 +520,8 @@
var/atom/loc_atom = loc
return loc_atom.relaymove(src, UP)
+ var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0
+
if(can_z_move(DOWN, above_turf, current_turf, ZMOVE_FALL_FLAGS|ventcrawling_flag)) //Will we fall down if we go up?
if(buckled)
to_chat(src, span_warning("[buckled] is is not capable of flight."))
@@ -534,8 +537,12 @@
set name = "Move Down"
set category = "IC"
+ if(remote_control)
+ return remote_control.relaymove(src, DOWN)
+
var/turf/current_turf = get_turf(src)
var/turf/below_turf = GET_TURF_BELOW(current_turf)
+
if(!below_turf)
to_chat(src, span_warning("There's nowhere to go in that direction!"))
return
@@ -545,6 +552,7 @@
return loc_atom.relaymove(src, DOWN)
var/ventcrawling_flag = HAS_TRAIT(src, TRAIT_MOVE_VENTCRAWLING) ? ZMOVE_VENTCRAWLING : 0
+
if(zMove(DOWN, z_move_flags = ZMOVE_FLIGHT_FLAGS|ZMOVE_FEEDBACK|ventcrawling_flag))
to_chat(src, span_notice("You move down."))
return FALSE
diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm
index 79391916de4..28b3da6580a 100644
--- a/code/modules/mob/mob_say.dm
+++ b/code/modules/mob/mob_say.dm
@@ -100,11 +100,11 @@
to_chat(usr, span_danger("Speech is currently admin-disabled."))
return
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(!GLOB.dchat_allowed && !check_rights(R_ADMIN, FALSE))
to_chat(src, "Dead chat is currently muted. ")
return
- //SKYRAT EDIT END
+ //NOVA EDIT END
var/jb = is_banned_from(ckey, "Deadchat")
if(QDELETED(src))
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 1c5543bbb59..068c6c98366 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -189,7 +189,7 @@
to_chat(src, "You are job banned from cyborg! Appeal your job ban if you want to avoid this in the future! ")
ghostize(FALSE)
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob("Do you want to play as [src]?", "Cyborg", null, 5 SECONDS, src)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as [src]?", check_jobban = JOB_CYBORG, poll_time = 5 SECONDS, target_mob = src, pic_source = src, role_name_text = "cyborg")
if(LAZYLEN(candidates))
var/mob/dead/observer/chosen_candidate = pick(candidates)
message_admins("[key_name_admin(chosen_candidate)] has taken control of ([key_name_admin(src)]) to replace a jobbanned player.")
diff --git a/code/modules/mob_spawn/corpses/job_corpses.dm b/code/modules/mob_spawn/corpses/job_corpses.dm
index 3893f3e1ba6..00a5de4f3d6 100644
--- a/code/modules/mob_spawn/corpses/job_corpses.dm
+++ b/code/modules/mob_spawn/corpses/job_corpses.dm
@@ -84,3 +84,7 @@
outfit = /datum/outfit/job/roboticist
icon_state = "corpseroboticist"
+/obj/effect/mob_spawn/corpse/human/bitrunner
+ name = JOB_BITRUNNER
+ outfit = /datum/outfit/job/bitrunner
+ icon_state = "corpsecargotech"
diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
index 81d34105e9a..0bd347408cd 100644
--- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm
@@ -14,8 +14,8 @@
the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between your toes and \
the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... "
spawner_job_path = /datum/job/hermit
- quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ quirks_enabled = TRUE // NOVA EDIT ADDITION - ghost role loadouts
+ random_appearance = FALSE // NOVA EDIT ADDITION
/obj/effect/mob_spawn/ghost_role/human/hermit/Initialize(mapload)
. = ..()
@@ -81,8 +81,8 @@
flavour_text = "Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?"
spawner_job_path = /datum/job/beach_bum
outfit = /datum/outfit/beachbum
- quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ quirks_enabled = TRUE // NOVA EDIT ADDITION - ghost role loadouts
+ random_appearance = FALSE // NOVA EDIT ADDITION
/obj/effect/mob_spawn/ghost_role/human/beach/lifeguard
you_are_text = "You're a spunky lifeguard!"
@@ -123,7 +123,7 @@
flavour_text = "Time to mix drinks and change lives. Smoking space drugs makes it easier to understand your patrons' odd dialect."
spawner_job_path = /datum/job/space_bartender
outfit = /datum/outfit/spacebartender
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ random_appearance = FALSE // NOVA EDIT ADDITION
/datum/outfit/spacebartender
name = "Space Bartender"
@@ -159,8 +159,8 @@
and eventually bring life to this desolate planet while waiting for contact from your creators. \
Estimated time of last contact: Deployment, 5000 millennia ago."
spawner_job_path = /datum/job/lifebringer
- restricted_species = list(/datum/species/pod) //SKYRAT EDIT ADDITION
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ restricted_species = list(/datum/species/pod) //NOVA EDIT ADDITION
+ random_appearance = FALSE // NOVA EDIT ADDITION
/obj/effect/mob_spawn/ghost_role/human/seed_vault/Initialize(mapload)
. = ..()
@@ -228,8 +228,8 @@
spawner_job_path = /datum/job/ash_walker
var/datum/team/ashwalkers/team
var/obj/structure/ash_walker_eggshell/eggshell
- restricted_species = list(/datum/species/lizard/ashwalker) //SKYRAT EDIT ADDITION
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ restricted_species = list(/datum/species/lizard/ashwalker) //NOVA EDIT ADDITION
+ random_appearance = FALSE // NOVA EDIT ADDITION
/obj/effect/mob_spawn/ghost_role/human/ash_walker/Destroy()
eggshell = null
@@ -243,12 +243,12 @@
return FALSE
/obj/effect/mob_spawn/ghost_role/human/ash_walker/special(mob/living/carbon/human/spawned_human)
- // SKYRAT EDIT MOVE
+ // NOVA EDIT MOVE
// Moved lizard name randomizer before parent call (so character names are preserved)
spawned_human.fully_replace_character_name(null,random_unique_lizard_name(gender))
- quirks_enabled = TRUE //SKYRAT EDIT ADDITION
+ quirks_enabled = TRUE //NOVA EDIT ADDITION
. = ..()
- // SKYRAT EDIT END
+ // NOVA EDIT END
to_chat(spawned_human, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Invade the strange structure of the outsiders if you must. Do not cause unnecessary destruction, as littering the wastes with ugly wreckage is certain to not gain you favor. Glory to the Necropolis! ")
spawned_human.mind.add_antag_datum(/datum/antagonist/ashwalker, team)
@@ -296,13 +296,13 @@
important_text = "The base is rigged with explosives, DO NOT abandon it or let it fall into enemy hands!"
outfit = /datum/outfit/lavaland_syndicate
spawner_job_path = /datum/job/lavaland_syndicate
- loadout_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts
- quirks_enabled = TRUE // SKYRAT EDIT ADDITION - ghost role loadouts
- random_appearance = FALSE // SKYRAT EDIT ADDITION
+ loadout_enabled = TRUE // NOVA EDIT ADDITION - ghost role loadouts
+ quirks_enabled = TRUE // NOVA EDIT ADDITION - ghost role loadouts
+ random_appearance = FALSE // NOVA EDIT ADDITION
/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/special(mob/living/new_spawn)
. = ..()
- new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // SKYRAT EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND)
+ new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // NOVA EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND)
/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/comms
name = "Syndicate Comms Agent"
@@ -323,17 +323,17 @@
ears = /obj/item/radio/headset/syndicate/alt
shoes = /obj/item/clothing/shoes/combat
r_pocket = /obj/item/gun/ballistic/automatic/pistol
- r_hand = /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil // SKYRAT EDIT - Original: /obj/item/gun/ballistic/rifle/sniper_rifle
+ r_hand = /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil // NOVA EDIT - Original: /obj/item/gun/ballistic/rifle/sniper_rifle
implants = list(/obj/item/implant/weapons_auth)
- id_trim = /datum/id_trim/syndicom/skyrat/interdyne //SKYRAT EDIT
+ id_trim = /datum/id_trim/syndicom/skyrat/interdyne //NOVA EDIT
-// SKYRAT EDIT REMOVAL BEGIN -- mapping
+// NOVA EDIT REMOVAL BEGIN -- mapping
/*
/datum/outfit/lavaland_syndicate/post_equip(mob/living/carbon/human/syndicate, visualsOnly = FALSE)
syndicate.faction |= ROLE_SYNDICATE
*/
-// SKYRAT EDIT REMOVAL END
+// NOVA EDIT REMOVAL END
/datum/outfit/lavaland_syndicate/comms
name = "Lavaland Syndicate Comms Agent"
diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm
index 817b2154986..2944d5ef2a2 100644
--- a/code/modules/mob_spawn/ghost_roles/unused_roles.dm
+++ b/code/modules/mob_spawn/ghost_roles/unused_roles.dm
@@ -272,7 +272,7 @@
/obj/effect/mob_spawn/ghost_role/human/syndicatespace/special(mob/living/new_spawn)
. = ..()
- new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // SKYRAT EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND)
+ new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_SPAWNER) // NOVA EDIT CHANGE - ORIGINAL: new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND)
var/datum/job/spawn_job = SSjob.GetJobType(spawner_job_path)
var/policy = get_policy(spawn_job.policy_index)
if(policy)
diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm
index 3f5dd81c184..e51fa864195 100644
--- a/code/modules/mob_spawn/mob_spawn.dm
+++ b/code/modules/mob_spawn/mob_spawn.dm
@@ -59,7 +59,7 @@
spawned_human.underwear = "Nude"
spawned_human.undershirt = "Nude"
spawned_human.socks = "Nude"
- spawned_human.bra = "Nude" //SKYRAT EDIT ADDITION
+ spawned_human.bra = "Nude" //NOVA EDIT ADDITION
if(hairstyle)
spawned_human.hairstyle = hairstyle
else
@@ -141,7 +141,7 @@
var/spawner_job_path = /datum/job/ghost_role
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
/// Do we use a random appearance for this ghost role?
var/random_appearance = TRUE
/// Can we use our loadout for this role?
@@ -150,7 +150,7 @@
var/quirks_enabled = FALSE
/// Are we limited to a certain species type? LISTED TYPE
var/restricted_species
- // SKYRAT EDIT END
+ // NOVA EDIT END
/obj/effect/mob_spawn/ghost_role/Initialize(mapload)
. = ..()
@@ -176,13 +176,13 @@
var/user_ckey = user.ckey // Just in case shenanigans happen, we always want to remove it from the list.
LAZYADD(ckeys_trying_to_spawn, user_ckey)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(restricted_species && !(user.client?.prefs?.read_preference(/datum/preference/choiced/species) in restricted_species))
var/incorrect_species = tgui_alert(user, "Current species preference incompatible, proceed with random appearance?", "Incompatible Species", list("Yes", "No"))
if(incorrect_species != "Yes")
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(prompt_ghost)
var/prompt = "Become [prompt_name]?"
@@ -206,12 +206,12 @@
to_chat(user, span_warning("You are banned from this role!"))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(is_banned_from(user.ckey, BAN_GHOST_ROLE_SPAWNER)) // Ghost role bans
to_chat(user, span_warning("Error, you are banned from playing ghost roles!"))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(!allow_spawn(user, silent = FALSE))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
return
diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm
index 111ea425b6a..2a2ed02c022 100644
--- a/code/modules/mod/mod_actions.dm
+++ b/code/modules/mod/mod_actions.dm
@@ -117,26 +117,43 @@
/datum/action/item_action/mod/panel/ai
ai_action = TRUE
-/datum/action/item_action/mod/pinned_module
+/datum/action/item_action/mod/pinnable
+ /// A reference to the mob we are pinned to.
+ var/mob/pinner
+
+/datum/action/item_action/mod/pinnable/New(Target, mob/user)
+ . = ..()
+ var/obj/item/mod/control/mod = Target
+ if(user == mod.ai_assistant)
+ ai_action = TRUE
+ pinner = user
+ RegisterSignal(user, COMSIG_QDELETING, PROC_REF(pinner_deleted))
+
+/datum/action/item_action/mod/pinnable/Grant(mob/user)
+ if(pinner != user)
+ return
+ return ..()
+
+/// If the guy whose UI we are pinned to got deleted
+/datum/action/item_action/mod/pinnable/proc/pinner_deleted()
+ SIGNAL_HANDLER
+ pinner = null
+ qdel(src)
+
+/datum/action/item_action/mod/pinnable/module
desc = "Activate the module."
/// Overrides the icon applications.
var/override = FALSE
/// Module we are linked to.
var/obj/item/mod/module/module
- /// A reference to the mob we are pinned to.
- var/mob/pinner
/// Timer until we remove our cooldown overlay
var/cooldown_timer
-/datum/action/item_action/mod/pinned_module/New(Target, obj/item/mod/module/linked_module, mob/user)
- var/obj/item/mod/control/mod = Target
- if(user == mod.ai_assistant)
- ai_action = TRUE
+/datum/action/item_action/mod/pinnable/module/New(Target, mob/user, obj/item/mod/module/linked_module)
button_icon = linked_module.icon
button_icon_state = linked_module.icon_state
. = ..()
module = linked_module
- pinner = user
module.pinned_to[REF(user)] = src
if(linked_module.allow_flags & MODULE_ALLOW_INCAPACITATED)
// clears check hands and check conscious
@@ -149,9 +166,8 @@
COMSIG_MODULE_USED,
), PROC_REF(module_interacted_with))
RegisterSignal(linked_module, COMSIG_MODULE_COOLDOWN_STARTED, PROC_REF(cooldown_started))
- RegisterSignal(user, COMSIG_QDELETING, PROC_REF(pinner_deleted))
-/datum/action/item_action/mod/pinned_module/Destroy()
+/datum/action/item_action/mod/pinnable/module/Destroy()
deltimer(cooldown_timer)
UnregisterSignal(module, list(
COMSIG_MODULE_ACTIVATED,
@@ -164,23 +180,13 @@
pinner = null
return ..()
-/datum/action/item_action/mod/pinned_module/Grant(mob/user)
- if(pinner != user)
- return
- return ..()
-
-/datum/action/item_action/mod/pinned_module/Trigger(trigger_flags)
+/datum/action/item_action/mod/pinnable/module/Trigger(trigger_flags)
. = ..()
if(!.)
return
module.on_select()
-/// If the guy whose UI we are pinned to got deleted
-/datum/action/item_action/mod/pinned_module/proc/pinner_deleted()
- pinner = null
- qdel(src)
-
-/datum/action/item_action/mod/pinned_module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force)
+/datum/action/item_action/mod/pinnable/module/apply_button_overlay(atom/movable/screen/movable/action_button/current_button, force)
current_button.cut_overlays()
if(override)
return ..()
@@ -194,12 +200,12 @@
current_button.add_overlay(image(icon = 'icons/hud/radial.dmi', icon_state = "module_cooldown"))
return ..()
-/datum/action/item_action/mod/pinned_module/proc/module_interacted_with(datum/source)
+/datum/action/item_action/mod/pinnable/module/proc/module_interacted_with(datum/source)
SIGNAL_HANDLER
build_all_button_icons(UPDATE_BUTTON_OVERLAY|UPDATE_BUTTON_STATUS)
-/datum/action/item_action/mod/pinned_module/proc/cooldown_started(datum/source, cooldown_time)
+/datum/action/item_action/mod/pinnable/module/proc/cooldown_started(datum/source, cooldown_time)
SIGNAL_HANDLER
deltimer(cooldown_timer)
diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm
index 3fca395e4b7..b230a3a38d7 100644
--- a/code/modules/mod/mod_activation.dm
+++ b/code/modules/mod/mod_activation.dm
@@ -19,7 +19,7 @@
var/obj/item/part = locate(part_reference) in mod_parts
if(!istype(part) || user.incapacitated())
return
- if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING
+ if(activating) // NOVA EDIT - RETRACTABLE EVERYTHING
balloon_alert(user, "deactivate the suit first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return
@@ -43,7 +43,7 @@
/// Quickly deploys all parts (or retracts if all are on the wearer)
/obj/item/mod/control/proc/quick_deploy(mob/user)
- if(activating) // SKYRAT EDIT - RETRACTABLE EVERYTHING
+ if(activating) // NOVA EDIT - RETRACTABLE EVERYTHING
balloon_alert(user, "deactivate the suit first!")
playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
return FALSE
@@ -115,11 +115,11 @@
if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE))
wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE)
overslotting_parts[part] = null
- // SKYRAT EDIT START - Avoiding exploits with the modules staying active when any of the parts are retracted.
+ // NOVA EDIT START - Avoiding exploits with the modules staying active when any of the parts are retracted.
for(var/obj/item/mod/module/module as anything in modules)
if(module.active)
module.on_deactivation(display_message = !!user)
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(!user)
return
wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."),
diff --git a/code/modules/mod/mod_ai.dm b/code/modules/mod/mod_ai.dm
index a78c7be77b6..2b23a4efb20 100644
--- a/code/modules/mod/mod_ai.dm
+++ b/code/modules/mod/mod_ai.dm
@@ -2,10 +2,10 @@
. = ..()
if(!.)
return
- // SKYRAT EDIT ADDITION START - No AIs in MODsuits
+ // NOVA EDIT ADDITION START - No AIs in MODsuits
if(!allow_ai)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(!open) //mod must be open
balloon_alert(user, "suit must be open to transfer!")
return
@@ -92,10 +92,10 @@
pai_assistant.can_holo = FALSE
if (pai_assistant.holoform)
pai_assistant.fold_in()
- // SKYRAT EDIT ADDITION START - pAIs in MODsuits
+ // NOVA EDIT ADDITION START - pAIs in MODsuits
if(can_pai_move_suit)
pai_assistant.remote_control = src
- // SKYRAT EDIT END
+ // NOVA EDIT END
SStgui.close_uis(card)
on_gained_assistant(card.pai)
return TRUE
@@ -144,10 +144,10 @@
/obj/item/mod/control/relaymove(mob/user, direction)
if((!active && wearer) || get_charge() < CHARGE_PER_STEP || user != ai_assistant || !COOLDOWN_FINISHED(src, cooldown_mod_move) || (wearer?.pulledby?.grab_state > GRAB_PASSIVE))
return FALSE
- // SKYRAT EDIT START - pAIs in MODsuits with a bit more functionalities
+ // NOVA EDIT START - pAIs in MODsuits with a bit more functionalities
if(active && !can_pai_move_suit && ispAI(ai_assistant))
return FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/timemodifier = MOVE_DELAY * (ISDIAGONALDIR(direction) ? sqrt(2) : 1) * (wearer ? WEARER_DELAY : LONE_DELAY)
if(wearer && !wearer.Process_Spacemove(direction))
return FALSE
diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm
index a32c8b28b26..b9f5cbd3e16 100644
--- a/code/modules/mod/mod_control.dm
+++ b/code/modules/mod/mod_control.dm
@@ -18,7 +18,7 @@
actions_types = list(
/datum/action/item_action/mod/deploy,
/datum/action/item_action/mod/activate,
- /datum/action/item_action/mod/sprite_accessories, // SKYRAT EDIT - Hide mutant parts action
+ /datum/action/item_action/mod/sprite_accessories, // NOVA EDIT - Hide mutant parts action
/datum/action/item_action/mod/panel,
/datum/action/item_action/mod/module,
/datum/action/item_action/mod/deploy/ai,
@@ -222,7 +222,7 @@
else
. += span_notice("You could use a MOD core on it to install one.")
if(isnull(ai_assistant))
- . += span_notice("You could install a pAI with a pAI card .") // SKYRAT EDIT CHANGE - ORIGINAL: . += span_notice("You could install an AI or pAI using their storage card .")
+ . += span_notice("You could install a pAI with a pAI card .") // NOVA EDIT CHANGE - ORIGINAL: . += span_notice("You could install an AI or pAI using their storage card .")
else if(isAI(ai_assistant))
. += span_notice("You could remove [ai_assistant] with an intellicard .")
. += span_notice("You could copy/set link frequency with a multitool .")
@@ -271,9 +271,9 @@
// Grant pinned actions to pin owners, gives AI pinned actions to the AI and not the wearer
/obj/item/mod/control/grant_action_to_bearer(datum/action/action)
- if (!istype(action, /datum/action/item_action/mod/pinned_module))
+ if (!istype(action, /datum/action/item_action/mod/pinnable))
return ..()
- var/datum/action/item_action/mod/pinned_module/pinned = action
+ var/datum/action/item_action/mod/pinnable/pinned = action
give_item_action(action, pinned.pinner, slot_flags)
/obj/item/mod/control/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
@@ -300,7 +300,7 @@
playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE)
return
- // SKYRAT EDIT ADDITION START - Can't remove your MODsuit from your back when it's still active (as it can cause runtimes and even the MODsuit control unit to delete itself)
+ // NOVA EDIT ADDITION START - Can't remove your MODsuit from your back when it's still active (as it can cause runtimes and even the MODsuit control unit to delete itself)
if(active)
if(!wearer.incapacitated())
balloon_alert(wearer, "deactivate first!")
@@ -700,14 +700,14 @@
part.visor_flags_cover = category[SEALED_COVER] || NONE
part.alternate_worn_layer = category[UNSEALED_LAYER]
mod_parts[part] = part.alternate_worn_layer
- /* SKYRAT EDIT START - All MODsuit parts can be worn as overslots.
+ /* NOVA EDIT START - All MODsuit parts can be worn as overslots.
if(!category[CAN_OVERSLOT])
if(overslotting_parts[part])
var/obj/item/overslot = overslotting_parts[part]
overslot.forceMove(drop_location())
overslotting_parts -= part
continue
- */ // SKYRAT EDIT END
+ */ // NOVA EDIT END
overslotting_parts |= part
wearer?.regenerate_icons()
diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm
index 12ce7fa4827..943ad16eb77 100644
--- a/code/modules/mod/mod_link.dm
+++ b/code/modules/mod/mod_link.dm
@@ -47,23 +47,19 @@
if(newdir & NORTH)
other_visual.pixel_y = 13
other_visual.layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
if(newdir & SOUTH)
other_visual.pixel_y = -24
other_visual.layer = ABOVE_ALL_MOB_LAYER
- SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_UPPER_FOV_HIDDEN)
new_transform.Scale(-1, 1)
new_transform.Translate(-1, 0)
if(newdir & EAST)
other_visual.pixel_x = 14
other_visual.layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
new_transform.Shear(0.5, 0)
new_transform.Scale(0.65, 1)
if(newdir & WEST)
other_visual.pixel_x = -14
other_visual.layer = BELOW_MOB_LAYER
- SET_PLANE_IMPLICIT(other_visual, GAME_PLANE_FOV_HIDDEN)
new_transform.Shear(-0.5, 0)
new_transform.Scale(0.65, 1)
other_visual.transform = new_transform
@@ -173,10 +169,10 @@
/obj/item/clothing/neck/link_scryer/examine(mob/user)
. = ..()
- // SKYRAT EDIT NIFSOFT SCRYERS - START
+ // NOVA EDIT NIFSOFT SCRYERS - START
if(custom_examine_controls)
return
- // SKYRAT EDIT NIFSOFT SCRYERS - END
+ // NOVA EDIT NIFSOFT SCRYERS - END
if(cell)
. += span_notice("The battery charge reads [cell.percent()]%. Right-click with an empty hand to remove it.")
else
diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm
index 351859e5f2b..320276cd00d 100644
--- a/code/modules/mod/mod_paint.dm
+++ b/code/modules/mod/mod_paint.dm
@@ -16,7 +16,7 @@
/obj/item/mod/paint/Initialize(mapload)
. = ..()
- current_color = color_matrix_identity()
+ current_color = COLOR_MATRIX_IDENTITY
/obj/item/mod/paint/examine(mob/user)
. = ..()
@@ -66,7 +66,7 @@
. = ..()
editing_mod = null
QDEL_NULL(proxy_view)
- current_color = color_matrix_identity()
+ current_color = COLOR_MATRIX_IDENTITY
/obj/item/mod/paint/ui_status(mob/user)
if(check_menu(editing_mod, user))
diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm
index eaf4b75d7ee..575518affbb 100644
--- a/code/modules/mod/mod_ui.dm
+++ b/code/modules/mod/mod_ui.dm
@@ -53,7 +53,7 @@
"cooldown" = round(COOLDOWN_TIMELEFT(module, cooldown_timer), 1 SECONDS),
"id" = module.tgui_id,
"ref" = REF(module),
- "configuration_data" = module.get_configuration()
+ "configuration_data" = module.get_configuration(user)
))
data["module_custom_status"] = module_custom_status
data["module_info"] = module_info
diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm
index d3d05d205ab..bf7169dc71b 100644
--- a/code/modules/mod/modules/_module.dm
+++ b/code/modules/mod/modules/_module.dm
@@ -75,11 +75,11 @@
if(mod.wearer)
balloon_alert(mod.wearer, "not active!")
return
- // SKYRAT EDIT START - DEPLOYABLE EVERYTHING OVER EVERYTHING
+ // NOVA EDIT START - DEPLOYABLE EVERYTHING OVER EVERYTHING
if((mod.wearer.wear_suit != mod.chestplate) && !(allow_flags & MODULE_ALLOW_INACTIVE))
balloon_alert(mod.wearer, "chestplate retracted!")
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(module_type != MODULE_USABLE)
if(active)
on_deactivation()
@@ -105,13 +105,13 @@
balloon_alert(mod.wearer, "unpowered!")
return FALSE
- // SKYRAT EDIT START - No using modules when not all parts are deployed.
+ // NOVA EDIT START - No using modules when not all parts are deployed.
if(!(allow_flags & MODULE_ALLOW_INACTIVE))
for(var/obj/item/part as anything in mod.mod_parts)
if(part.loc == mod)
balloon_alert(mod.wearer, "deploy all parts first!")
return FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(!(allow_flags & MODULE_ALLOW_PHASEOUT) && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob))
//specifically a to_chat because the user is phased out.
to_chat(mod.wearer, span_warning("You cannot activate this right now."))
@@ -250,7 +250,7 @@
return list()
/// Creates a list of configuring options for this module
-/obj/item/mod/module/proc/get_configuration()
+/obj/item/mod/module/proc/get_configuration(mob/user)
return list()
/// Generates an element of the get_configuration list with a display name, type and value
@@ -302,14 +302,14 @@
used_overlay = overlay_state_inactive
else
return
- /* SKYRAT EDIT START - Making MODsuits mutant-compatible - ORIGINAL:
+ /* NOVA EDIT START - Making MODsuits mutant-compatible - ORIGINAL:
var/mutable_appearance/module_icon = mutable_appearance(overlay_icon_file, used_overlay, layer = standing.layer + 0.1)
if(!use_mod_colors)
module_icon.appearance_flags |= RESET_COLOR
. += module_icon
*/
return handle_module_icon(standing, used_overlay)
- // SKYRAT EDIT END
+ // NOVA EDIT END
/// Updates the signal used by active modules to be activated
/obj/item/mod/module/proc/update_signal(value)
@@ -325,12 +325,12 @@
if(module_type == MODULE_PASSIVE)
return
- var/datum/action/item_action/mod/pinned_module/existing_action = pinned_to[REF(user)]
+ var/datum/action/item_action/mod/pinnable/module/existing_action = pinned_to[REF(user)]
if(existing_action)
mod.remove_item_action(existing_action)
return
- var/datum/action/item_action/mod/pinned_module/new_action = new(mod, src, user)
+ var/datum/action/item_action/mod/pinnable/module/new_action = new(mod, user, src)
mod.add_item_action(new_action)
/// On drop key, concels a device item.
diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm
index 4df75c3eacd..cf72f62d6c4 100644
--- a/code/modules/mod/modules/modules_antag.dm
+++ b/code/modules/mod/modules/modules_antag.dm
@@ -46,6 +46,7 @@
if(!.)
return
playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ balloon_alert(mod.wearer, "armor boosted, EVA lost")
actual_speed_added = max(0, min(mod.slowdown_active, speed_added))
mod.slowdown -= actual_speed_added
mod.wearer.update_equipment_speed_mods()
@@ -65,6 +66,7 @@
return
if(!deleting)
playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
+ balloon_alert(mod.wearer, "armor retracts, EVA ready")
mod.slowdown += actual_speed_added
mod.wearer.update_equipment_speed_mods()
var/list/parts = mod.mod_parts + mod
diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm
index e87391b1758..4acff57f6dc 100644
--- a/code/modules/mod/modules/modules_general.dm
+++ b/code/modules/mod/modules/modules_general.dm
@@ -866,7 +866,7 @@
insert_trash(new_atom)
/obj/item/mod/module/recycler/proc/insert_trash(obj/item/item)
- var/retrieved = container.insert_item(item, multiplier = efficiency, breakdown_flags = BREAKDOWN_FLAGS_RECYCLER)
+ var/retrieved = container.insert_item(item, multiplier = efficiency)
if(retrieved == MATERIAL_INSERT_ITEM_NO_MATS) //even if it doesn't have any material to give, trash is trash.
qdel(item)
playsound(src, SFX_RUSTLE, 50, TRUE, -5)
diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm
index a5128996b62..1e85656962a 100644
--- a/code/modules/mod/modules/modules_security.dm
+++ b/code/modules/mod/modules/modules_security.dm
@@ -18,7 +18,7 @@
/obj/item/mod/module/magnetic_harness/Initialize(mapload)
. = ..()
if(!guns_typecache)
- guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) //SKYRAT EDIT - MICROFUSION
+ guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) //NOVA EDIT - MICROFUSION
/obj/item/mod/module/magnetic_harness/on_install()
already_allowed_guns = guns_typecache & mod.chestplate.allowed
@@ -424,7 +424,7 @@
if(oldgroup == newgroup)
return
-
+
sorted_creatures[oldgroup] -= creature
sorted_creatures[newgroup] += creature
diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm
index 9bda5fef503..1240a7adff3 100644
--- a/code/modules/mod/modules/modules_supply.dm
+++ b/code/modules/mod/modules/modules_supply.dm
@@ -82,7 +82,7 @@
else
balloon_alert(mod.wearer, "invalid target!")
-/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE) //SKYRAT EDIT
+/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE) //NOVA EDIT
if(deleting)
return
for(var/atom/movable/crate as anything in stored_crates)
@@ -245,7 +245,7 @@
mod.wearer.visible_message(span_warning("[mod.wearer] starts whirring!"), \
blind_message = span_hear("You hear a whirring sound."))
playsound(src, 'sound/items/modsuit/loader_charge.ogg', 75, TRUE)
- lightning = mutable_appearance('icons/effects/effects.dmi', "electricity3", offset_spokesman = src, plane = GAME_PLANE_FOV_HIDDEN)
+ lightning = mutable_appearance('icons/effects/effects.dmi', "electricity3", layer = LOW_MOB_LAYER)
mod.wearer.add_overlay(lightning)
balloon_alert(mod.wearer, "you start charging...")
var/power = launch_time
diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm
index 0492cb71489..208652ca551 100644
--- a/code/modules/modular_computers/computers/item/computer.dm
+++ b/code/modules/modular_computers/computers/item/computer.dm
@@ -47,8 +47,8 @@
var/max_idle_programs = 2
///Flag of the type of device the modular computer is, deciding what types of apps it can run.
- var/hardware_flag = NONE
-// Options: PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_TABLET
+ var/hardware_flag = PROGRAM_ALL
+// Options: PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_PDA
///The theme, used for the main menu and file browser apps.
var/device_theme = PDA_THEME_NTOS
@@ -73,9 +73,9 @@
var/comp_light_color = "#FFFFFF"
///Power usage when the computer is open (screen is active) and can be interacted with.
- var/base_active_power_usage = 15 // SKYRAT EDIT CHANGE - Original: 125
+ var/base_active_power_usage = 15 // NOVA EDIT CHANGE - Original: 125
///Power usage when the computer is idle and screen is off.
- var/base_idle_power_usage = 2 // SKYRAT EDIT CHANGE - Original: 5
+ var/base_idle_power_usage = 2 // NOVA EDIT CHANGE - Original: 5
// Modular computers can run on various devices. Each DEVICE (Laptop, Console & Tablet)
// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently
@@ -402,7 +402,7 @@
return
if(enabled)
- . += active_program ? mutable_appearance(init_icon, active_program.program_icon_state) : mutable_appearance(init_icon, icon_state_menu)
+ . += active_program ? mutable_appearance(init_icon, active_program.program_open_overlay) : mutable_appearance(init_icon, icon_state_menu)
if(atom_integrity <= integrity_failure * max_integrity)
. += mutable_appearance(init_icon, "bsod")
. += mutable_appearance(init_icon, "broken")
@@ -472,13 +472,13 @@
shutdown_computer()
return
- if(active_program && active_program.requires_ntnet && !get_ntnet_status())
+ if(active_program && (active_program.program_flags & PROGRAM_REQUIRES_NTNET) && !get_ntnet_status())
active_program.event_networkfailure(FALSE) // Active program requires NTNet to run but we've just lost connection. Crash.
for(var/datum/computer_file/program/idle_programs as anything in idle_threads)
idle_programs.process_tick(seconds_per_tick)
idle_programs.ntnet_status = get_ntnet_status()
- if(idle_programs.requires_ntnet && !idle_programs.ntnet_status)
+ if((idle_programs.program_flags & PROGRAM_REQUIRES_NTNET) && !idle_programs.ntnet_status)
idle_programs.event_networkfailure(TRUE)
if(active_program)
@@ -506,6 +506,8 @@
physical.loc.visible_message(span_notice("[icon2html(physical, viewers(physical.loc))] \The [src] displays a [caller.filedesc] notification: [alerttext]"))
/obj/item/modular_computer/proc/ring(ringtone) // bring bring
+ if(!use_power())
+ return
if(HAS_TRAIT(SSstation, STATION_TRAIT_PDA_GLITCHED))
playsound(src, pick('sound/machines/twobeep_voice1.ogg', 'sound/machines/twobeep_voice2.ogg'), 50, TRUE)
else
@@ -522,8 +524,9 @@
data["PC_device_theme"] = device_theme
if(internal_cell)
+ data["PC_lowpower_mode"] = !internal_cell.charge
switch(internal_cell.percent())
- if(80 to 200) // 100 should be maximal but just in case..
+ if(80 to INFINITY)
data["PC_batteryicon"] = "batt_100.gif"
if(60 to 80)
data["PC_batteryicon"] = "batt_80.gif"
@@ -537,6 +540,7 @@
data["PC_batteryicon"] = "batt_5.gif"
data["PC_batterypercent"] = "[round(internal_cell.percent())]%"
else
+ data["PC_lowpower_mode"] = FALSE
data["PC_batteryicon"] = null
data["PC_batterypercent"] = null
@@ -569,7 +573,8 @@
CRASH("tried to open program that does not belong to this computer")
if(!program || !istype(program)) // Program not found or it's not executable program.
- to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning."))
+ if(user)
+ to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning."))
return FALSE
// The program is already running. Resume it.
@@ -582,15 +587,17 @@
update_appearance(UPDATE_ICON)
return TRUE
- if(!program.is_supported_by_hardware(hardware_flag, 1, user))
+ if(!program.is_supported_by_hardware(hardware_flag, loud = TRUE, user = user))
return FALSE
if(idle_threads.len > max_idle_programs)
- to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error."))
+ if(user)
+ to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error."))
return FALSE
- if(program.requires_ntnet && !get_ntnet_status()) // The program requires NTNet connection, but we are not connected to NTNet.
- to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning."))
+ if(program.program_flags & PROGRAM_REQUIRES_NTNET && !get_ntnet_status()) // The program requires NTNet connection, but we are not connected to NTNet.
+ if(user)
+ to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning."))
return FALSE
if(!program.on_start(user))
@@ -675,7 +682,7 @@
* It is separated from ui_act() to be overwritten as needed.
*/
/obj/item/modular_computer/proc/toggle_flashlight(mob/user)
- if(!has_light)
+ if(!has_light || !internal_cell || !internal_cell.charge)
return FALSE
if(!COOLDOWN_FINISHED(src, disabled_time))
balloon_alert(user, "disrupted!")
@@ -898,3 +905,14 @@
inserted_pai = null
update_appearance(UPDATE_ICON)
return TRUE
+
+/**
+ * Debug ModPC
+ * Used to spawn all programs for Create and Destroy unit test.
+ */
+/obj/item/modular_computer/debug
+ max_capacity = INFINITY
+
+/obj/item/modular_computer/debug/Initialize(mapload)
+ starting_programs += subtypesof(/datum/computer_file/program)
+ return ..()
diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm
index 24950621de6..b68df9a4671 100644
--- a/code/modules/modular_computers/computers/item/computer_power.dm
+++ b/code/modules/modular_computers/computers/item/computer_power.dm
@@ -1,18 +1,19 @@
///The multiplier given to the base overtime charge drain value if its flashlight is on.
#define FLASHLIGHT_DRAIN_MULTIPLIER 1.1
-// Tries to draw power from charger or, if no operational charger is present, from power cell.
+///Draws power from its rightful source (area if its a computer, the cell otherwise)
+///Takes into account special cases, like silicon PDAs through override, and nopower apps.
/obj/item/modular_computer/proc/use_power(amount = 0)
if(check_power_override())
return TRUE
- if(ismachinery(physical))
- var/obj/machinery/machine_holder = physical
- if(machine_holder.powered())
- machine_holder.use_power(amount)
- return TRUE
-
- if(!internal_cell || !internal_cell.charge)
+ if(!internal_cell)
+ return FALSE
+ if(!internal_cell.charge && (isnull(active_program) || !(active_program.program_flags & PROGRAM_RUNS_WITHOUT_POWER)))
+ close_all_programs()
+ for(var/datum/computer_file/program/programs as anything in stored_files)
+ if((programs.program_flags & PROGRAM_RUNS_WITHOUT_POWER) && open_program(program = programs))
+ return TRUE
return FALSE
if(!internal_cell.use(amount JOULES))
@@ -25,9 +26,9 @@
return internal_cell.give(amount)
return 0
-// Used in following function to reduce copypaste
+///Shuts down the computer from powerloss.
/obj/item/modular_computer/proc/power_failure()
- if(!enabled) // Shut down the computer
+ if(!enabled)
return
if(active_program)
active_program.event_powerfailure()
@@ -57,9 +58,10 @@
power_failure()
return FALSE
-///Used by subtypes for special cases for power usage, returns TRUE if it should stop the use_power chain.
+///Returns TRUE if the PC should not be using any power, FALSE otherwise.
+///Checks to see if the current app allows to be ran without power, if so we'll run with it.
/obj/item/modular_computer/proc/check_power_override()
- return FALSE
+ return (!internal_cell?.charge && (active_program?.program_flags & PROGRAM_RUNS_WITHOUT_POWER))
//Integrated (Silicon) tablets don't drain power, because the tablet is required to state laws, so it being disabled WILL cause problems.
/obj/item/modular_computer/pda/silicon/check_power_override()
diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm
index a09fc49082c..f5ca1d74765 100644
--- a/code/modules/modular_computers/computers/item/computer_ui.dm
+++ b/code/modules/modular_computers/computers/item/computer_ui.dm
@@ -8,23 +8,24 @@
* This is best called when you're actually changing the app, as we don't check
* if we're swapping to the current UI repeatedly.
* Args:
- * user - The person whose UI we're updating.
+ * user - The person whose UI we're updating. Only necessary if we're opening the UI for the first time.
*/
/obj/item/modular_computer/proc/update_tablet_open_uis(mob/user)
- var/datum/tgui/active_ui = SStgui.get_open_ui(user, src)
- if(!active_ui)
- if(active_program)
- active_ui = new(user, src, active_program.tgui_id, active_program.filedesc)
- active_program.ui_interact(user, active_ui)
- else
- active_ui = new(user, src, "NtosMain")
- return active_ui.open()
+ if(user)
+ var/datum/tgui/active_ui = SStgui.get_open_ui(user, src)
+ if(!active_ui)
+ if(active_program)
+ active_ui = new(user, src, active_program.tgui_id, active_program.filedesc)
+ active_program.ui_interact(user, active_ui)
+ else
+ active_ui = new(user, src, "NtosMain")
+ return active_ui.open()
for (var/datum/tgui/window as anything in open_uis)
if(active_program)
window.interface = active_program.tgui_id
window.title = active_program.filedesc
- active_program.ui_interact(user, window)
+ active_program.ui_interact(window.user, window)
else
window.interface = "NtosMain"
window.send_assets()
@@ -113,7 +114,7 @@
data["programs"] += list(list(
"name" = program.filename,
"desc" = program.filedesc,
- "header_program" = program.header_program,
+ "header_program" = !!(program.program_flags & PROGRAM_HEADER),
"running" = !!(program in idle_threads),
"icon" = program.program_icon,
"alert" = program.alert_pending,
diff --git a/code/modules/modular_computers/computers/item/disks/unique_disks.dm b/code/modules/modular_computers/computers/item/disks/unique_disks.dm
index 144fa52c65a..6d8614f56ac 100644
--- a/code/modules/modular_computers/computers/item/disks/unique_disks.dm
+++ b/code/modules/modular_computers/computers/item/disks/unique_disks.dm
@@ -6,3 +6,6 @@
/obj/item/computer_disk/syndicate/camera_app
starting_programs = list(/datum/computer_file/program/secureye/syndicate)
+
+/obj/item/computer_disk/syndicate/contractor
+ starting_programs = list(/datum/computer_file/program/contract_uplink)
diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm
index 0c027b5f30b..0ed24adc1a3 100644
--- a/code/modules/modular_computers/computers/item/pda.dm
+++ b/code/modules/modular_computers/computers/item/pda.dm
@@ -18,7 +18,7 @@
icon_state_menu = "menu"
max_capacity = 64
allow_chunky = TRUE
- hardware_flag = PROGRAM_TABLET
+ hardware_flag = PROGRAM_PDA
max_idle_programs = 2
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
@@ -36,7 +36,7 @@
/datum/computer_file/program/messenger,
/datum/computer_file/program/nt_pay,
/datum/computer_file/program/notepad,
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
/datum/computer_file/program/crew_manifest, // Adds crew manifest to all base tablets
/datum/computer_file/program/maintenance/camera // Adds camera to all base tablets
// SKRAT EDIT ADDITION END
@@ -276,6 +276,19 @@
if(msg)
msg.invisible = TRUE
+/obj/item/modular_computer/pda/syndicate_contract_uplink
+ name = "contractor tablet"
+ device_theme = PDA_THEME_SYNDICATE
+ icon_state_menu = "contractor-assign"
+ comp_light_luminosity = 6.3
+ has_pda_programs = FALSE
+ greyscale_config = /datum/greyscale_config/tablet/stripe_double
+ greyscale_colors = "#696969#000000#FFA500"
+
+ starting_programs = list(
+ /datum/computer_file/program/contract_uplink,
+ )
+
/**
* Silicon PDA
*
@@ -307,8 +320,8 @@
starting_programs = list(
/datum/computer_file/program/filemanager,
/datum/computer_file/program/robotact,
- /datum/computer_file/program/crew_manifest, // SKYRAT EDIT ADDITION - Manifests for borgs
- /datum/computer_file/program/messenger, // SKYRAT EDIT ADDITION - Messenger for borgs
+ /datum/computer_file/program/crew_manifest, // NOVA EDIT ADDITION - Manifests for borgs
+ /datum/computer_file/program/messenger, // NOVA EDIT ADDITION - Messenger for borgs
)
/obj/item/modular_computer/pda/silicon/Initialize(mapload)
@@ -368,7 +381,7 @@
return robotact
qdel(robotact)
robotact = null
- CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected recieving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.")
+ CRASH("Cyborg [silicon_owner]'s tablet hard drive rejected receiving a new copy of the self-manage app. To fix, check the hard drive's space remaining. Please make a bug report about this.")
//Makes the light settings reflect the borg's headlamp settings
/obj/item/modular_computer/pda/silicon/cyborg/ui_data(mob/user)
diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm
index 01c04ed68cd..ea4839ac944 100644
--- a/code/modules/modular_computers/computers/item/processor.dm
+++ b/code/modules/modular_computers/computers/item/processor.dm
@@ -44,6 +44,13 @@
machinery_computer = null
return ..()
+/obj/item/modular_computer/processor/use_power(amount = 0)
+ var/obj/machinery/machine_holder = physical
+ if(machine_holder.powered())
+ machine_holder.use_power(amount)
+ return TRUE
+ return FALSE
+
/obj/item/modular_computer/processor/relay_qdel()
qdel(machinery_computer)
diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
index 4ccdfe8ec21..31d763054b6 100644
--- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm
+++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm
@@ -396,12 +396,12 @@
/datum/computer_file/program/newscaster,
)
-/* // SKYRAT EDIT REMOVAL BEGIN - Mutes the Curator's ringer on spawn
+/* // NOVA EDIT REMOVAL BEGIN - Mutes the Curator's ringer on spawn
/obj/item/modular_computer/pda/curator/Initialize(mapload)
. = ..()
for(var/datum/computer_file/program/messenger/msg in stored_files)
msg.alert_silenced = TRUE
-*/ // SKYRAT EDIT REMOVAL END
+*/ // NOVA EDIT REMOVAL END
/obj/item/modular_computer/pda/psychologist
name = "psychologist PDA"
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index aa6866ff7c5..7fd019c1bee 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -82,7 +82,7 @@
return .
if(cpu.enabled)
- . += cpu.active_program?.program_icon_state || screen_icon_state_menu
+ . += cpu.active_program?.program_open_overlay || screen_icon_state_menu
else if(!(machine_stat & NOPOWER))
. += screen_icon_screensaver
diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md
deleted file mode 100644
index 925f2f5668b..00000000000
--- a/code/modules/modular_computers/documentation.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Modular computer programs
-
-How module computer programs work
-
-Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to.
-
-## Base setup
-
-This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base
-
-```DM
-/datum/computer_file/program/ntnetmonitor
- /// This is obviously the name of the file itself. not much to be said
- filename = "ntmonitor"
-
- /// This is sort of the official name. it's what shows up on the main menu
- filedesc = "NTNet Diagnostics and Monitoring"
-
- /// This is what the screen will look like when the program is active
- program_icon_state = "comm_monitor"
-
- /// This is a sort of a description, visible when looking on the ntnet
- extended_desc = "This program is a dummy."
-
- /// size of the program. Big programs need more hard drive space. Don't
- /// make it too big though.
- size = 12
-
- /// If this is set, the program will not run without an ntnet connection,
- /// and will close if the connection is lost. Mainly for primarily online
- /// programs.
- requires_ntnet = 1
-
- /// This is access required to run the program itself.
- run_access = access_network
-
- /// This is the access needed to download from ntnet or host on the ptp
- /// program. This is what you want to use most of the time.
- download_access = access_change_ids
-
- /// If it's available to download on ntnet. pretty self explanatory.
- available_on_ntnet = 1
-
- /// ditto but on emagged syndie net. Use this for antag programs
- available_on_syndinet = 0
-
- /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination)
- /// or PROGRAM_ALL. Use this to limit what kind of machines can run the
- /// program. For example, comms program should be limited to consoles and laptops.
- usage_flags = PROGRAM_ALL
-
- /// This one is kinda cool. If you have the program minimized, this will
- /// show up in the header of the computer screen. You can even have the
- /// program change what the header is based on the situation! See `alarm.dm`
- /// for an example.
- var/ui_header = "downloader_finished.gif"
-```
diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm
index 99fc288ffaf..948257aa83c 100644
--- a/code/modules/modular_computers/file_system/computer_file.dm
+++ b/code/modules/modular_computers/file_system/computer_file.dm
@@ -86,6 +86,8 @@
* * background - Whether the app is running in the background.
*/
/datum/computer_file/program/proc/event_powerfailure()
+ if(program_flags & PROGRAM_RUNS_WITHOUT_POWER)
+ return
kill_program()
/**
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index d050bd804b3..4ce18fc2a60 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -7,6 +7,12 @@
/// File name. FILE NAME MUST BE UNIQUE IF YOU WANT THE PROGRAM TO BE DOWNLOADABLE FROM NTNET!
filename = "UnknownProgram"
+ /// Program-specific bitflags that tell the app what it runs on.
+ /// (PROGRAM_ALL | PROGRAM_CONSOLE | PROGRAM_LAPTOP | PROGRAM_PDA)
+ var/can_run_on_flags = PROGRAM_ALL
+ /// Program-specific bitflags that tells the ModPC what the app is able to do special.
+ /// (PROGRAM_REQUIRES_NTNET|PROGRAM_ON_NTNET_STORE|PROGRAM_ON_SYNDINET_STORE|PROGRAM_UNIQUE_COPY|PROGRAM_HEADER|PROGRAM_RUNS_WITHOUT_POWER)
+ var/program_flags = PROGRAM_ON_NTNET_STORE
///How much power running this program costs.
var/power_cell_use = PROGRAM_BASIC_CELL_USE
///List of required accesses to *run* the program. Any match will do.
@@ -18,23 +24,16 @@
var/filedesc = "Unknown Program"
/// Short description of this program's function.
var/extended_desc = "N/A"
- /// Category in the NTDownloader.
- var/category = PROGRAM_CATEGORY_MISC
- /// Program-specific screen icon state
- var/program_icon_state = null
- ///Boolean on whether the program will appear at the top on PDA menus, or in the app list with everything else.
- var/header_program = FALSE
- /// Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes.
- var/requires_ntnet = FALSE
+ ///What category this program can be found in within NTNetDownloader.
+ ///This is required if PROGRAM_ON_NTNET_STORE or PROGRAM_ON_SYNDINET_STORE is on.
+ var/downloader_category = PROGRAM_CATEGORY_DEVICE
+ ///The overlay to add ontop of the ModPC running the app while it's open.
+ ///This is taken from the same file as the ModPC, so you can use usage_flags to prevent
+ ///the program from being used on devices that don't have sprites for it.
+ var/program_open_overlay = null
/// 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/ntnet_status = 1
- /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL
- var/usage_flags = PROGRAM_ALL
- /// Whether the program can be downloaded from NTNet. Set to FALSE to disable.
- var/available_on_ntnet = TRUE
- /// Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to TRUE to enable.
- var/available_on_syndinet = FALSE
- /// Name of the tgui interface
+ /// Name of the tgui interface. If this is not defined, this will not be available in NTNet.
var/tgui_id
/// Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images must also be inserted into /datum/asset/simple/headers.
var/ui_header = null
@@ -48,17 +47,15 @@
var/alert_pending = FALSE
/// How well this program will help combat detomatix viruses.
var/detomatix_resistance = NONE
- ///Boolean on whether or not only one copy of the app can exist. This means it deletes itself when cloned elsewhere.
- var/unique_copy = FALSE
/datum/computer_file/program/clone()
var/datum/computer_file/program/temp = ..()
temp.run_access = run_access
temp.filedesc = filedesc
- temp.program_icon_state = program_icon_state
- temp.requires_ntnet = requires_ntnet
- temp.usage_flags = usage_flags
- if(unique_copy)
+ temp.program_open_overlay = program_open_overlay
+ temp.program_flags = program_flags
+ temp.can_run_on_flags = can_run_on_flags
+ if(program_flags & PROGRAM_UNIQUE_COPY)
if(computer)
computer.remove_file(src)
if(disk_host)
@@ -105,7 +102,7 @@
///Makes sure a program can run on this hardware (for apps limited to tablets/computers/laptops)
/datum/computer_file/program/proc/is_supported_by_hardware(hardware_flag = NONE, loud = FALSE, mob/user)
- if(!(hardware_flag & usage_flags))
+ if(!(hardware_flag & can_run_on_flags))
if(loud && computer && user)
to_chat(user, span_danger("\The [computer] flashes a \"Hardware Error - Incompatible software\" warning."))
return FALSE
@@ -127,13 +124,13 @@
* access can contain a list of access numbers to check against. If access is not empty, it will be used istead of checking any inserted ID.
*/
/datum/computer_file/program/proc/can_run(mob/user, loud = FALSE, access_to_check, downloading = FALSE, list/access)
- if(issilicon(user) && !ispAI(user))
- return TRUE
-
- if(isAdminGhostAI(user))
- return TRUE
+ if(user)
+ if(issilicon(user) && !ispAI(user))
+ return TRUE
+ if(isAdminGhostAI(user))
+ return TRUE
- if(computer && (computer.obj_flags & EMAGGED) && (available_on_syndinet || !downloading)) //emagged can run anything on syndinet, and can bypass execution locks, but not download.
+ if(computer && (computer.obj_flags & EMAGGED) && (program_flags & PROGRAM_ON_SYNDINET_STORE || !downloading)) //emagged can run anything on syndinet, and can bypass execution locks, but not download.
return TRUE
if(!access_to_check)
@@ -150,7 +147,7 @@
accesscard = computer.computer_id_slot?.GetID()
if(!accesscard)
- if(loud)
+ if(loud && user)
to_chat(user, span_danger("\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning."))
return FALSE
access = accesscard.GetAccess()
@@ -159,7 +156,7 @@
if(singular_access in access) //For loop checks every individual access entry in the access list. If the user's ID has access to any entry, then we're good.
return TRUE
- if(loud)
+ if(loud && user)
to_chat(user, span_danger("\The [computer] flashes an \"Access Denied\" warning."))
return FALSE
@@ -174,7 +171,7 @@
/datum/computer_file/program/proc/on_start(mob/living/user)
SHOULD_CALL_PARENT(TRUE)
if(can_run(user, loud = TRUE))
- if(requires_ntnet)
+ if(program_flags & PROGRAM_REQUIRES_NTNET)
var/obj/item/card/id/ID = computer.computer_id_slot?.GetID()
generate_network_log("Connection opened -- Program ID:[filename] User:[ID?"[ID.registered_name]":"None"]")
return TRUE
@@ -194,11 +191,11 @@
if(src == computer.active_program)
computer.active_program = null
if(computer.enabled)
- computer.update_tablet_open_uis(usr)
+ computer.update_tablet_open_uis(user)
if(src in computer.idle_threads)
computer.idle_threads.Remove(src)
- if(requires_ntnet)
+ if(program_flags & PROGRAM_REQUIRES_NTNET)
var/obj/item/card/id/ID = computer.computer_id_slot?.GetID()
generate_network_log("Connection closed -- Program ID: [filename] User:[ID ? "[ID.registered_name]" : "None"]")
@@ -208,7 +205,7 @@
///Sends the running program to the background/idle threads. Header programs can't be minimized and will kill instead.
/datum/computer_file/program/proc/background_program()
SHOULD_CALL_PARENT(TRUE)
- if(header_program)
+ if(program_flags & PROGRAM_HEADER)
return kill_program()
computer.idle_threads.Add(src)
diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm
index 0ee695f8fd6..9fc51a00f57 100644
--- a/code/modules/modular_computers/file_system/programs/airestorer.dm
+++ b/code/modules/modular_computers/file_system/programs/airestorer.dm
@@ -1,14 +1,12 @@
/datum/computer_file/program/ai_restorer
filename = "ai_restore"
filedesc = "AI Manager & Restorer"
- category = PROGRAM_CATEGORY_SCI
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
+ program_open_overlay = "generic"
extended_desc = "Firmware Restoration Kit, capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot."
size = 12
- requires_ntnet = FALSE
- usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
+ can_run_on_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
download_access = list(ACCESS_RD)
- available_on_ntnet = TRUE
tgui_id = "NtosAiRestorer"
program_icon = "laptop-code"
diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm
index c1aedb9d5d9..86452eb45d0 100644
--- a/code/modules/modular_computers/file_system/programs/alarm.dm
+++ b/code/modules/modular_computers/file_system/programs/alarm.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/alarm_monitor
filename = "alarmmonitor"
filedesc = "Canary"
- category = PROGRAM_CATEGORY_ENGI
+ downloader_category = PROGRAM_CATEGORY_ENGINEERING
ui_header = "alarm_green.gif"
- program_icon_state = "alert-green"
+ program_open_overlay = "alert-green"
extended_desc = "This program provides visual interface for a station's alarm system."
- requires_ntnet = 1
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 4
tgui_id = "NtosStationAlertConsole"
program_icon = "bell"
@@ -37,12 +37,12 @@
has_alert = (length(alert_control.listener.alarms) > 0)
if(!has_alert)
- program_icon_state = "alert-green"
+ program_open_overlay = "alert-green"
ui_header = "alarm_green.gif"
else
// If we don't know the status, assume the worst.
// Technically we should never have anything other than a truthy or falsy value
// but this will allow for unknown values to fall through to be an actual alert.
- program_icon_state = "alert-red"
+ program_open_overlay = "alert-red"
ui_header = "alarm_red.gif"
update_computer_icon() // Always update the icon after we check our conditional because we might've changed it
diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm
new file mode 100644
index 00000000000..492dc3a25de
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm
@@ -0,0 +1,225 @@
+/datum/computer_file/program/contract_uplink
+ filename = "contractor uplink"
+ filedesc = "Syndicate Contractor Uplink"
+ extended_desc = "A standard, Syndicate issued system for handling important contracts while on the field."
+ program_open_overlay = "contractor-assign"
+ program_icon = "tasks"
+ size = 10
+
+ program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_UNIQUE_COPY
+ can_run_on_flags = PROGRAM_PDA //this is all we've got sprites for :sob:
+ undeletable = TRUE
+ tgui_id = "SyndicateContractor"
+
+ ///The traitor datum stored on the program. Starts off as null and is set by the player.
+ var/datum/antagonist/traitor/traitor_data
+ ///The error screen sent to the UI so they can show the player.
+ var/error = ""
+ ///Boolean on whether the UI is on the Information screen.
+ var/info_screen = TRUE
+ ///Boolean on whether the program is being loaded for the first time, for a unique screen animation.
+ var/first_load = TRUE
+
+/datum/computer_file/program/contract_uplink/clone()
+ var/datum/computer_file/program/contract_uplink/temp = ..()
+ temp.traitor_data = traitor_data
+ return temp
+
+/datum/computer_file/program/contract_uplink/Destroy(force)
+ traitor_data = null
+ return ..()
+
+/datum/computer_file/program/contract_uplink/ui_act(action, params)
+ . = ..()
+ if(.)
+ return
+
+ var/mob/living/user = usr
+
+ // NOVA EDIT ADDITION START
+ var/obj/item/modular_computer/pda/contractor/uplink_computer = computer
+ if(!istype(uplink_computer))
+ return
+ // NOVA EDIT ADDITION END
+
+ switch(action)
+ if("PRG_contract-accept")
+ var/contract_id = text2num(params["contract_id"])
+ uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE
+ uplink_computer.opfor_data.contractor_hub.current_contract = uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id] // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract
+ program_open_overlay = "contractor-contract"
+ return TRUE
+
+ if("PRG_login")
+ /* NOVA EDIT REMOVAL START
+ var/datum/antagonist/traitor/traitor_user = user.mind.has_antag_datum(/datum/antagonist/traitor)
+ if(!traitor_user)
+ error = "UNAUTHORIZED USER"
+ return TRUE
+
+ traitor_data = traitor_user
+ if(!traitor_data.uplink_handler.contractor_hub)
+ traitor_data.uplink_handler.contractor_hub = new
+ traitor_data.uplink_handler.contractor_hub.create_contracts(traitor_user.owner)
+ user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE)
+ program_open_overlay = "contractor-contractlist"
+ NOVA EDIT REMOVAL END */
+ // NOVA EDIT ADDITION START
+ if(!user.mind.opposing_force)
+ var/datum/opposing_force/opposing_force = new(user.mind)
+ user.mind.opposing_force = opposing_force
+ SSopposing_force.new_opfor(opposing_force)
+ var/datum/opposing_force/opfor_data = user.mind.opposing_force
+
+ if (!opfor_data) // Just in case
+ return FALSE
+ // Only play greet sound, and handle contractor hub when assigning for the first time.
+ if (!opfor_data.contractor_hub)
+ user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE)
+ opfor_data.contractor_hub = new
+ opfor_data.contractor_hub.create_hub_items()
+
+ // Stops any topic exploits such as logging in multiple times on a single system.
+ if (!assigned)
+ opfor_data.contractor_hub.create_contracts(opfor_data.mind_reference)
+
+ uplink_computer.opfor_data = opfor_data
+
+ program_open_overlay = "contractor-contractlist"
+ assigned = TRUE
+ // NOVA EDIT ADDITION END
+ return TRUE
+
+ if("PRG_call_extraction")
+ if (uplink_computer.opfor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING)
+ if (uplink_computer.opfor_data.contractor_hub.current_contract.handle_extraction(user)) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.handle_extraction(user))
+ user.playsound_local(user, 'sound/effects/confirmdropoff.ogg', 100, TRUE)
+ uplink_computer.opfor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING
+
+ program_open_overlay = "contractor-extracted"
+ else
+ user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
+ error = "Either both you or your target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside."
+ else
+ user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
+ error = "Already extracting... Place the target into the pod. If the pod was destroyed, this contract is no longer possible."
+
+ return TRUE
+ if("PRG_contract_abort")
+ var/contract_id = uplink_computer.opfor_data.contractor_hub.current_contract.id // NOVA EDIT CHANGE - ORIGINAL: var/contract_id = traitor_data.uplink_handler.contractor_hub.current_contract.id
+
+ uplink_computer.opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null
+ uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED
+
+ program_open_overlay = "contractor-contractlist"
+
+ return TRUE
+ if("PRG_redeem_TC")
+ if (uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem)
+ var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem) // NOVA EDIT CHANGE - ORIGINAL: var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user), traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.put_in_hands(crystals))
+ to_chat(H, span_notice("Your payment materializes into your hands!"))
+ else
+ to_chat(user, span_notice("Your payment materializes onto the floor."))
+
+ uplink_computer.opfor_data.contractor_hub.contract_TC_payed_out += uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_payed_out += traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem
+ uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem = 0 // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem = 0
+ return TRUE
+ else
+ user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
+ return TRUE
+ if ("PRG_clear_error")
+ error = ""
+ return TRUE
+ if("PRG_set_first_load_finished")
+ first_load = FALSE
+ return TRUE
+ if("PRG_toggle_info")
+ info_screen = !info_screen
+ return TRUE
+ // NOVA EDIT ADDITION START
+ if ("buy_hub")
+ if (uplink_computer.opfor_data.mind_reference.current == user)
+ var/item = params["item"]
+ for (var/datum/contractor_item/hub_item in uplink_computer.opfor_data.contractor_hub.hub_items)
+ if (hub_item.name == item)
+ hub_item.handle_purchase(uplink_computer.opfor_data.contractor_hub, user)
+ else
+ error = "Invalid user... You weren't recognized as the user of this system."
+ // NOVA EDIT ADDITION END
+
+
+/datum/computer_file/program/contract_uplink/ui_data(mob/user)
+ var/list/data = list()
+ var/obj/item/modular_computer/pda/contractor/uplink_computer = computer // NOVA EDIT ADDITION
+
+ data["first_load"] = first_load
+ data["logged_in"] = uplink_computer?.opfor_data // NOVA EDIT CHANGE - ORIGINAL: data["logged_in"] = !!traitor_data
+ data["station_name"] = GLOB.station_name
+ data["info_screen"] = info_screen
+ data["error"] = error
+
+ if(!uplink_computer?.opfor_data) // NOVA EDIT CHANGE - ORIGINAL: if(!traitor_data)
+ data["ongoing_contract"] = FALSE
+ data["extraction_enroute"] = FALSE
+ update_computer_icon()
+ return data
+
+ var/datum/opposing_force/opfor_data = uplink_computer.opfor_data // NOVA EDIT ADDITION
+ data["ongoing_contract"] = !!opfor_data.contractor_hub.current_contract // NOVA EDIT CHANGE - ORIGINAL:
+ if(opfor_data.contractor_hub.current_contract) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract)
+ program_open_overlay = "contractor-contract"
+ if (opfor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING) // NOVA EDIT CHANGE - ORIGINAL: if (traitor_data.uplink_handler.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING)
+ data["extraction_enroute"] = TRUE
+ program_open_overlay = "contractor-extracted"
+ else
+ data["extraction_enroute"] = FALSE
+ var/turf/curr = get_turf(user)
+ var/turf/dropoff_turf
+ data["current_location"] = "[get_area_name(curr, TRUE)]"
+ for (var/turf/content in opfor_data.contractor_hub.current_contract.contract.dropoff.contents) // NOVA EDIT CHANGE - ORIGINAL: for (var/turf/content in traitor_data.uplink_handler.contractor_hub.current_contract.contract.dropoff.contents)
+ if (isturf(content))
+ dropoff_turf = content
+ break
+ var/direction
+ if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only
+ direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful.
+ if(get_area(user) == opfor_data.contractor_hub.current_contract.contract.dropoff) // NOVA EDIT CHANGE - ORIGINAL: if(get_area(user) == traitor_data.uplink_handler.contractor_hub.current_contract.contract.dropoff)
+ direction = "LOCATION CONFIRMED"
+ else
+ direction = "???"
+ data["dropoff_direction"] = direction
+ data["redeemable_tc"] = opfor_data.contractor_hub.contract_TC_to_redeem // NOVA EDIT CHANGE - ORIGINAL: data["redeemable_tc"] = traitor_data.uplink_handler.contractor_hub.contract_TC_to_redeem
+ data["earned_tc"] = opfor_data.contractor_hub.contract_TC_payed_out // NOVA EDIT CHANGE - ORIGINAL: data["earned_tc"] = traitor_data.uplink_handler.contractor_hub.contract_TC_payed_out
+ data["contracts_completed"] = opfor_data.contractor_hub.contracts_completed // NOVA EDIT CHANGE - ORIGINAL: data["contracts_completed"] = traitor_data.uplink_handler.contractor_hub.contracts_completed
+ for (var/datum/syndicate_contract/contract in opfor_data.contractor_hub.assigned_contracts) // NOVA EDIT CHANGE - ORIGINAL: for (var/datum/syndicate_contract/contract in traitor_data.uplink_handler.contractor_hub.assigned_contracts)
+ if(!contract.contract)
+ stack_trace("Syndiate contract with null contract objective found in [opfor_data.mind_reference]'s contractor hub!") // NOVA EDIT CHANGE - ORIGINAL:stack_trace("Syndiate contract with null contract objective found in [traitor_data.owner]'s contractor hub!")
+ contract.status = CONTRACT_STATUS_ABORTED
+ continue
+ data["contracts"] += list(list(
+ "target" = contract.contract.target,
+ "target_rank" = contract.target_rank,
+ "payout" = contract.contract.payout,
+ "payout_bonus" = contract.contract.payout_bonus,
+ "dropoff" = contract.contract.dropoff,
+ "id" = contract.id,
+ "status" = contract.status,
+ "message" = contract.wanted_message
+ ))
+ // NOVA EDIT ADDITION START
+ data["contract_rep"] = opfor_data.contractor_hub.contract_rep
+ for (var/datum/contractor_item/hub_item in opfor_data.contractor_hub.hub_items)
+ data["contractor_hub_items"] += list(list(
+ "name" = hub_item.name,
+ "desc" = hub_item.desc,
+ "cost" = hub_item.cost,
+ "limited" = hub_item.limited,
+ "item_icon" = hub_item.item_icon
+ ))
+ // NOVA EDIT ADDITION END
+
+ update_computer_icon()
+ return data
diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
index be15e90faea..d3b7e9d5b86 100644
--- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
+++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
@@ -1,13 +1,11 @@
/datum/computer_file/program/ntnet_dos
filename = "ntn_dos"
filedesc = "DoS Traffic Generator"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "hostile"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "hostile"
extended_desc = "This advanced script can perform denial of service attacks against NTNet quantum relays. The system administrator will probably notice this. Multiple devices can run this program together against same relay for increased effect"
size = 20
- requires_ntnet = TRUE
- available_on_ntnet = FALSE
- available_on_syndinet = TRUE
+ program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNetDos"
program_icon = "satellite-dish"
diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
index 88aa48d0c31..3e0ac275c14 100644
--- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
+++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
@@ -1,13 +1,11 @@
/datum/computer_file/program/revelation
filename = "revelation"
filedesc = "Revelation"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "hostile"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "hostile"
extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution."
size = 13
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
- available_on_syndinet = TRUE
+ program_flags = PROGRAM_ON_SYNDINET_STORE
tgui_id = "NtosRevelation"
program_icon = "magnet"
var/armed = 0
diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm
index a51d3345d10..d4ced4c22ce 100644
--- a/code/modules/modular_computers/file_system/programs/arcade.dm
+++ b/code/modules/modular_computers/file_system/programs/arcade.dm
@@ -1,9 +1,9 @@
/datum/computer_file/program/arcade
filename = "dsarcade"
filedesc = "Donksoft Micro Arcade"
- program_icon_state = "arcade"
+ program_open_overlay = "arcade"
extended_desc = "This port of the classic game 'Outbomb Cuban Pete', redesigned to run on tablets, with thrilling graphics and chilling storytelling."
- requires_ntnet = FALSE
+ downloader_category = PROGRAM_CATEGORY_GAMES
size = 6
tgui_id = "NtosArcade"
program_icon = "gamepad"
@@ -30,7 +30,7 @@
heads_up = "You have crushed [boss_name]! Rejoice!"
playsound(computer.loc, 'sound/arcade/win.ogg', 50)
game_active = FALSE
- program_icon_state = "arcade_off"
+ program_open_overlay = "arcade_off"
if(istype(computer))
computer.update_appearance()
ticket_count += 1
@@ -41,7 +41,7 @@
heads_up = "You have been defeated... how will the station survive?"
playsound(computer.loc, 'sound/arcade/lose.ogg', 50)
game_active = FALSE
- program_icon_state = "arcade_off"
+ program_open_overlay = "arcade_off"
if(istype(computer))
computer.update_appearance()
user?.mind?.adjust_experience(/datum/skill/gaming, 10)
@@ -163,7 +163,7 @@
player_hp = 30
player_mp = 10
heads_up = "You stand before [boss_name]! Prepare for battle!"
- program_icon_state = "arcade"
+ program_open_overlay = "arcade"
boss_id = rand(1,6)
pause_state = FALSE
if(istype(computer))
diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm
index 6264531428f..fd520fbb385 100644
--- a/code/modules/modular_computers/file_system/programs/atmosscan.dm
+++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm
@@ -6,8 +6,8 @@
/datum/computer_file/program/atmosscan
filename = "atmosscan"
filedesc = "AtmoZphere"
- category = PROGRAM_CATEGORY_ENGI
- program_icon_state = "air"
+ downloader_category = PROGRAM_CATEGORY_ENGINEERING
+ program_open_overlay = "air"
extended_desc = "A small built-in sensor reads out the atmospheric conditions around the device."
size = 4
tgui_id = "NtosGasAnalyzer"
@@ -57,7 +57,7 @@
var/list/data = list()
var/turf/turf = get_turf(computer)
data["atmozphereMode"] = atmozphere_mode
- data["clickAtmozphereCompatible"] = (computer.hardware_flag & PROGRAM_TABLET)
+ data["clickAtmozphereCompatible"] = (computer.hardware_flag & PROGRAM_PDA)
switch (atmozphere_mode) //Null air wont cause errors, don't worry.
if(ATMOZPHERE_SCAN_ENV)
var/datum/gas_mixture/air = turf?.return_air()
@@ -74,7 +74,7 @@
atmozphere_mode = ATMOZPHERE_SCAN_ENV
UnregisterSignal(computer, COMSIG_ITEM_ATTACK_SELF_SECONDARY)
return TRUE
- if(!(computer.hardware_flag & PROGRAM_TABLET))
+ if(!(computer.hardware_flag & PROGRAM_PDA))
computer.say("Device incompatible for scanning objects!")
return FALSE
atmozphere_mode = ATMOZPHERE_SCAN_CLICK
diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm
index fae48fbff2f..196ab033408 100644
--- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/borg_monitor
filename = "siliconnect"
filedesc = "SiliConnect"
- category = PROGRAM_CATEGORY_SCI
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
ui_header = "borg_mon.gif"
- program_icon_state = "generic"
+ program_open_overlay = "generic"
extended_desc = "This program allows for remote monitoring of station cyborgs."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
download_access = list(ACCESS_ROBOTICS)
size = 5
tgui_id = "NtosCyborgRemoteMonitor"
@@ -148,13 +148,11 @@
/datum/computer_file/program/borg_monitor/syndicate
filename = "roboverlord"
filedesc = "Roboverlord"
- category = PROGRAM_CATEGORY_SCI
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
ui_header = "borg_mon.gif"
- program_icon_state = "generic"
+ program_open_overlay = "generic"
extended_desc = "This program allows for remote monitoring of mission-assigned cyborgs."
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
- available_on_syndinet = TRUE
+ program_flags = PROGRAM_ON_SYNDINET_STORE
download_access = list()
/datum/computer_file/program/borg_monitor/syndicate/evaluate_borg(mob/living/silicon/robot/R)
diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm
index cb7f6c288bb..4bbad8d1d8b 100644
--- a/code/modules/modular_computers/file_system/programs/bounty_board.dm
+++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm
@@ -1,10 +1,10 @@
/datum/computer_file/program/bounty_board
filename = "bountyboard"
filedesc = "Bounty Board Request Network"
- category = PROGRAM_CATEGORY_SUPL
- program_icon_state = "bountyboard"
+ downloader_category = PROGRAM_CATEGORY_SUPPLY
+ program_open_overlay = "bountyboard"
extended_desc = "A multi-platform network for placing requests across the station, with payment across the network being possible.."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 10
tgui_id = "NtosBountyBoard"
///Reference to the currently logged in user.
diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm
index d2133697194..564a349a502 100644
--- a/code/modules/modular_computers/file_system/programs/budgetordering.dm
+++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/budgetorders
filename = "orderapp"
filedesc = "NT IRN"
- category = PROGRAM_CATEGORY_SUPL
- program_icon_state = "request"
+ downloader_category = PROGRAM_CATEGORY_SUPPLY
+ program_open_overlay = "request"
extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account."
- requires_ntnet = TRUE
- usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
+ can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA
size = 10
tgui_id = "NtosCargo"
///Are you actually placing orders with it?
@@ -303,7 +303,7 @@
if("toggleprivate")
self_paid = !self_paid
. = TRUE
- //SKYRAT EDIT START
+ //NOVA EDIT START
if("company_import_window")
var/datum/component/armament/company_imports/gun_comp = computer.GetComponent(/datum/component/armament/company_imports)
if(!gun_comp)
@@ -312,7 +312,7 @@
gun_comp.parent_prog ||= src
gun_comp.ui_interact(usr)
. = TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
if(.)
post_signal(cargo_shuttle)
diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm
index 05ac394b7bd..c41aa8ae29a 100644
--- a/code/modules/modular_computers/file_system/programs/card.dm
+++ b/code/modules/modular_computers/file_system/programs/card.dm
@@ -1,11 +1,10 @@
/datum/computer_file/program/card_mod
filename = "plexagonidwriter"
filedesc = "Plexagon Access Management"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "id"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
+ program_open_overlay = "id"
extended_desc = "Program for programming employee ID cards to access parts of the station."
download_access = list(ACCESS_COMMAND)
- requires_ntnet = 0
size = 8
tgui_id = "NtosCard"
program_icon = "id-card"
diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm
index 462c17aba70..92c6e152f71 100644
--- a/code/modules/modular_computers/file_system/programs/cargoship.dm
+++ b/code/modules/modular_computers/file_system/programs/cargoship.dm
@@ -1,8 +1,8 @@
/datum/computer_file/program/shipping
filename = "shipping"
filedesc = "GrandArk Exporter"
- category = PROGRAM_CATEGORY_SUPL
- program_icon_state = "shipping"
+ downloader_category = PROGRAM_CATEGORY_SUPPLY
+ program_open_overlay = "shipping"
extended_desc = "A combination printer/scanner app that enables modular computers to print barcodes for easy scanning and shipping."
size = 6
tgui_id = "NtosShipping"
diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/file_system/programs/chatroom/conversation.dm
similarity index 100%
rename from code/modules/modular_computers/NTNet/NTNRC/conversation.dm
rename to code/modules/modular_computers/file_system/programs/chatroom/conversation.dm
diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
similarity index 98%
rename from code/modules/modular_computers/file_system/programs/ntnrc_client.dm
rename to code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
index aa780fc3cf8..1067c3f392d 100644
--- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm
+++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm
@@ -7,13 +7,12 @@
/datum/computer_file/program/chatclient
filename = "ntnrc_client"
filedesc = "Chat Client"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "command"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "command"
extended_desc = "This program allows communication over NTNRC network"
size = 8
- requires_ntnet = TRUE
ui_header = "ntnrc_idle.gif"
- available_on_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNetChat"
program_icon = "comment-alt"
alert_able = TRUE
diff --git a/code/modules/modular_computers/file_system/programs/coupon.dm b/code/modules/modular_computers/file_system/programs/coupon.dm
new file mode 100644
index 00000000000..72e3ff6ec06
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/coupon.dm
@@ -0,0 +1,119 @@
+#define COUPON_PAPER_USE 1
+#define COUPON_TONER_USE 0.250
+
+///A program that enables the user to redeem randomly generated coupons for several cargo packs (mostly goodies).
+/datum/computer_file/program/coupon
+ filename = "couponmaster"
+ filedesc = "Coupon Master"
+ downloader_category = PROGRAM_CATEGORY_SUPPLY
+ extended_desc = "Program for receiving discounts for several cargo goodies. After redeeming a coupon, hit a photocopier with your PDA to print it."
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
+ size = 5
+ tgui_id = "NtosCouponMaster"
+ program_icon = "ticket"
+ can_run_on_flags = PROGRAM_PDA //It relies on the PDA messenger to let you know of new codes
+ detomatix_resistance = DETOMATIX_RESIST_MALUS
+
+/datum/computer_file/program/coupon/on_install()
+ . = ..()
+ ///set the discount_coupons list, which means SSmodular_computers will now begin to periodically produce new coupon codes.
+ LAZYINITLIST(SSmodular_computers.discount_coupons)
+ ADD_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED, REF(src)) //All that glitters is not gold
+
+/datum/computer_file/program/coupon/Destroy()
+ if(computer)
+ REMOVE_TRAIT(computer, TRAIT_MODPC_HALVED_DOWNLOAD_SPEED, REF(src))
+ return ..()
+
+/datum/computer_file/program/coupon/ui_data(mob/user)
+ var/list/data = list()
+ data["printed_coupons"] = list()
+ data["redeemed_coupons"] = list()
+ data["valid_id"] = FALSE
+ var/obj/item/card/id/user_id = computer.computer_id_slot
+ if(user_id?.registered_account.add_to_accounts)
+ for(var/datum/coupon_code/coupon as anything in user_id.registered_account.redeemed_coupons)
+ var/list/coupon_data = list(
+ "goody" = initial(coupon.discounted_pack.name),
+ "discount" = coupon.discount*100,
+ )
+ if(coupon.printed)
+ data["printed_coupons"] += list(coupon_data)
+ else
+ data["redeemed_coupons"] += list(coupon_data)
+ data["valid_id"] = TRUE
+ return data
+
+/datum/computer_file/program/coupon/ui_act(action, params, datum/tgui/ui)
+ var/obj/item/card/id/user_id = computer.computer_id_slot
+ if(!(user_id?.registered_account.add_to_accounts))
+ return TRUE
+ switch(action)
+ if("redeem")
+ var/code = params["code"]
+ if(!length(code))
+ return TRUE
+ var/datum/coupon_code/coupon = SSmodular_computers.discount_coupons[code]
+ if(isnull(coupon))
+ user_id.registered_account.bank_card_talk("Invalid coupon code.", TRUE)
+ return TRUE
+ if(coupon.expires_in && coupon.expires_in < world.time)
+ user_id.registered_account.bank_card_talk("Expired coupon code.", TRUE)
+ return TRUE
+ if(coupon in user_id.registered_account.redeemed_coupons)
+ user_id.registered_account.bank_card_talk("Coupon [code] already redeemed.", TRUE)
+ return TRUE
+ coupon.copy(user_id.registered_account)
+ var/static/list/goodbye = list(
+ "Have a wonderful day.",
+ "Don't forget to print it.",
+ "Time to get shopping!",
+ "Enjoy your discount!",
+ "Congratulations!",
+ "Bye Bye~.",
+ )
+ user_id.registered_account.bank_card_talk("Coupon [code] redeemed. [pick(goodbye)]", TRUE)
+ //Well, guess you're redeeming something else too.
+ if(prob(40) && computer.used_capacity < computer.max_capacity)
+ var/datum/computer_file/warez = new()
+ warez.filename = random_string(rand(6, 12), GLOB.alphabet + GLOB.alphabet_upper + GLOB.numerals)
+ warez.filetype = pick("DAT", "XXX", "TMP", "FILE", "MNT", "MINER", "SYS", "PNG.EXE")
+ warez.size = min(rand(1, 4), computer.max_capacity - computer.used_capacity)
+ if(prob(25))
+ warez.undeletable = TRUE
+ computer.store_file(warez)
+
+/**
+ * Normally, modular PCs can be print paper already, but I find this additional step
+ * to be less lazy and fitting to the "I gotta go print it before it expires" aspect of it.
+ */
+/datum/computer_file/program/coupon/tap(atom/tapped_atom, mob/living/user, params)
+ if(!istype(tapped_atom, /obj/machinery/photocopier))
+ return FALSE
+ var/obj/item/card/id/user_id = computer.computer_id_slot
+ if(!(user_id?.registered_account))
+ computer.balloon_alert(user, "no bank account found!")
+ return TRUE
+ var/obj/machinery/photocopier/copier = tapped_atom
+ if(copier.check_busy(user))
+ return TRUE
+ var/num_coupons = 0
+ for(var/datum/coupon_code/coupon as anything in user_id.registered_account.redeemed_coupons)
+ if(!coupon.printed)
+ num_coupons++
+ if(!num_coupons)
+ computer.balloon_alert(user, "no coupon available!")
+ return TRUE
+ copier.do_copies(CALLBACK(src, PROC_REF(print_coupon), user_id.registered_account), user, COUPON_PAPER_USE, COUPON_TONER_USE, num_coupons)
+ return TRUE
+
+/datum/computer_file/program/coupon/proc/print_coupon(datum/bank_account/account)
+ var/datum/coupon_code/coupon
+ for(var/datum/coupon_code/possible_coupon as anything in account.redeemed_coupons)
+ if(!possible_coupon.printed)
+ coupon = possible_coupon
+ break
+ return coupon?.generate()
+
+#undef COUPON_PAPER_USE
+#undef COUPON_TONER_USE
diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm
index 85f9a4c5ffe..f7e3df473ea 100644
--- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm
+++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/crew_manifest
filename = "plexagoncrew"
filedesc = "Plexagon Crew List"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "id"
+ downloader_category = PROGRAM_CATEGORY_SECURITY
+ program_open_overlay = "id"
extended_desc = "Program for viewing and printing the current crew manifest"
download_access = list(ACCESS_SECURITY, ACCESS_COMMAND)
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 4
tgui_id = "NtosCrewManifest"
program_icon = "clipboard-list"
diff --git a/code/modules/modular_computers/file_system/programs/emojipedia.dm b/code/modules/modular_computers/file_system/programs/emojipedia.dm
index 277311491a7..6aa81b506d5 100644
--- a/code/modules/modular_computers/file_system/programs/emojipedia.dm
+++ b/code/modules/modular_computers/file_system/programs/emojipedia.dm
@@ -2,8 +2,8 @@
/datum/computer_file/program/emojipedia
filename = "emojipedia"
filedesc = "EmojiPedia"
- category = PROGRAM_CATEGORY_CREW // we want everyone to be able to access this application, since everyone can send emoji via PDA messages
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_DEVICE // we want everyone to be able to access this application, since everyone can send emoji via PDA messages
+ program_open_overlay = "generic"
extended_desc = "This program allows you to view all the emojis you can send via PDA messages."
size = 3
tgui_id = "NtosEmojipedia"
diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm
index 50fa29ccd5c..c9133515507 100644
--- a/code/modules/modular_computers/file_system/programs/file_browser.dm
+++ b/code/modules/modular_computers/file_system/programs/file_browser.dm
@@ -2,10 +2,9 @@
filename = "filemanager"
filedesc = "File Manager"
extended_desc = "This program allows management of files."
- program_icon_state = "generic"
+ program_open_overlay = "generic"
size = 8
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
+ program_flags = NONE
undeletable = TRUE
tgui_id = "NtosFileManager"
program_icon = "folder"
diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm
index 3b001e9f39d..884e635364c 100644
--- a/code/modules/modular_computers/file_system/programs/frontier.dm
+++ b/code/modules/modular_computers/file_system/programs/frontier.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/scipaper_program
filename = "ntfrontier"
filedesc = "NT Frontier"
- category = PROGRAM_CATEGORY_SCI
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
extended_desc = "Scientific paper publication and navigation software."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 12
- program_icon_state = "research"
+ program_open_overlay = "research"
tgui_id = "NtosScipaper"
program_icon = "paper-plane"
download_access = list(ACCESS_ORDNANCE)
diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm
index c04fddcd396..0db91c31ac6 100644
--- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm
+++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm
@@ -4,11 +4,11 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/datum/computer_file/program/job_management
filename = "plexagoncore"
filedesc = "Plexagon HR Core"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "id"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
+ program_open_overlay = "id"
extended_desc = "Program for viewing and changing job slot availability."
download_access = list(ACCESS_COMMAND)
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 4
tgui_id = "NtosJobManager"
program_icon = "address-book"
@@ -34,10 +34,10 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
return FALSE
if(job.job_flags & JOB_CANNOT_OPEN_SLOTS)
return FALSE
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(job.veteran_only)
return FALSE
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
return TRUE
diff --git a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm
index bbcdd39d32c..c970349bd20 100644
--- a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm
+++ b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm
@@ -1,9 +1,9 @@
/datum/computer_file/program/mafia
filename = "mafia"
filedesc = "Mafia"
- program_icon_state = "mafia"
+ program_open_overlay = "mafia"
extended_desc = "A program that allows you to play the infamous Mafia game, straight from your Modular PC."
- requires_ntnet = FALSE
+ downloader_category = PROGRAM_CATEGORY_GAMES
size = 6
tgui_id = "NtosMafiaPanel"
program_icon = "user-secret"
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm
index 25a2d1ad941..5cd31293f77 100644
--- a/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm
+++ b/code/modules/modular_computers/file_system/programs/maintenance/_maintenance_program.dm
@@ -6,5 +6,4 @@
*/
/datum/computer_file/program/maintenance
filetype = "MNT"
- available_on_ntnet = FALSE
- unique_copy = TRUE
+ program_flags = PROGRAM_UNIQUE_COPY
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
index 50276a1bcd8..be13d01ad27 100644
--- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
+++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/maintenance/camera
filename = "camera_app"
filedesc = "Camera"
- program_icon_state = "camera"
- category = PROGRAM_CATEGORY_MISC
+ program_open_overlay = "camera"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
extended_desc = "This program allows the taking of pictures."
size = 4
- usage_flags = PROGRAM_TABLET
+ can_run_on_flags = PROGRAM_PDA
tgui_id = "NtosCamera"
program_icon = "camera"
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
index 9f8971fb7fa..25baa43b8f5 100644
--- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
+++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm
@@ -1,8 +1,8 @@
/datum/computer_file/program/maintenance/modsuit_control
filename = "modsuit_control"
filedesc = "MODsuit Control"
- program_icon_state = "modsuit_control"
- category = PROGRAM_CATEGORY_SCI
+ program_open_overlay = "modsuit_control"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
extended_desc = "This program allows people to connect a MODsuit to it, allowing remote control."
size = 2
tgui_id = "NtosMODsuit"
diff --git a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm
index 4c332d0d7d8..7cf05170eb8 100644
--- a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm
+++ b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm
@@ -1,10 +1,10 @@
/datum/computer_file/program/maintenance/phys_scanner
filename = "phys_scanner"
filedesc = "Physical Scanner"
- category = PROGRAM_CATEGORY_MISC
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
extended_desc = "This program allows the tablet to scan physical objects and display a data output."
size = 2
- usage_flags = PROGRAM_TABLET
+ can_run_on_flags = PROGRAM_PDA
tgui_id = "NtosPhysScanner"
program_icon = "barcode"
/// Information from the last scanned person, to display on the app.
diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
index 637b2b33f16..36cf60d10c1 100644
--- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
+++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm
@@ -8,14 +8,14 @@
/datum/computer_file/program/messenger
filename = "nt_messenger"
filedesc = "Direct Messenger"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "command"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "command"
extended_desc = "This program allows old-school communication with other modular devices."
size = 0
undeletable = TRUE // It comes by default in tablets, can't be downloaded, takes no space and should obviously not be able to be deleted.
- header_program = TRUE
- available_on_ntnet = FALSE
- usage_flags = PROGRAM_TABLET
+ power_cell_use = NONE
+ program_flags = PROGRAM_HEADER | PROGRAM_RUNS_WITHOUT_POWER
+ can_run_on_flags = PROGRAM_PDA
ui_header = "ntnrc_idle.gif"
tgui_id = "NtosMessenger"
program_icon = "comment-alt"
@@ -602,9 +602,9 @@
return FALSE
- // SKYRAT EDIT BEGIN - PDA messages show a visible message; again!
+ // NOVA EDIT BEGIN - PDA messages show a visible message; again!
sender.visible_message(span_notice("[sender]'s PDA rings out with the soft sound of keypresses"), vision_distance = COMBAT_MESSAGE_RANGE)
- // SKYRAT EDIT END
+ // NOVA EDIT END
// Log in the talk log
sender.log_talk(message, LOG_PDA, tag="[rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]")
diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm
index 27aafee3a41..a19f38fb777 100644
--- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm
+++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm
@@ -2,12 +2,11 @@
filename = "newscasterapp"
filedesc = "Newscaster"
download_access = list(ACCESS_LIBRARY)
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "bountyboard"
+ downloader_category = PROGRAM_CATEGORY_GAMES
+ program_open_overlay = "bountyboard"
extended_desc = "This program allows any user to access the Newscaster network from anywhere."
size = 2
- requires_ntnet = TRUE
- available_on_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNewscaster"
program_icon = "newspaper"
///The UI we use for the newscaster
diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm
index c0232fe3888..a2fdd5929e8 100644
--- a/code/modules/modular_computers/file_system/programs/notepad.dm
+++ b/code/modules/modular_computers/file_system/programs/notepad.dm
@@ -1,13 +1,13 @@
/datum/computer_file/program/notepad
filename = "notepad"
filedesc = "Notepad"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "generic"
extended_desc = "Jot down your work-safe thoughts and what not."
size = 2
tgui_id = "NtosNotepad"
program_icon = "book"
- usage_flags = PROGRAM_ALL
+ can_run_on_flags = PROGRAM_ALL
var/written_note = "Congratulations on your station upgrading to the new NtOS and Thinktronic based collaboration effort, \
bringing you the best in electronics and software since 2467!\n\
diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm
index 8724375d07b..abaf03fa1cc 100644
--- a/code/modules/modular_computers/file_system/programs/nt_pay.dm
+++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm
@@ -1,13 +1,13 @@
/datum/computer_file/program/nt_pay
filename = "ntpay"
filedesc = "Nanotrasen Pay System"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "generic"
extended_desc = "An application that locally (in your sector) helps to transfer money or track your expenses and profits."
size = 2
tgui_id = "NtosPay"
program_icon = "money-bill-wave"
- usage_flags = PROGRAM_ALL
+ can_run_on_flags = PROGRAM_ALL
///Reference to the currently logged in user.
var/datum/bank_account/current_user
///Pay token, by which we can send credits
diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
index a5aaee6dca4..728f94372cf 100644
--- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm
+++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
@@ -1,32 +1,39 @@
/datum/computer_file/program/ntnetdownload
filename = "ntsoftwarehub"
filedesc = "NT Software Hub"
- program_icon_state = "generic"
+ program_open_overlay = "generic"
extended_desc = "This program allows downloads of software from official NT repositories"
undeletable = TRUE
size = 4
- requires_ntnet = TRUE
- available_on_ntnet = FALSE
+ program_flags = PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNetDownloader"
program_icon = "download"
+ ///The program currently being downloaded.
var/datum/computer_file/program/downloaded_file
+ ///Boolean on whether the `downloaded_file` is being downloaded from the Syndicate store,
+ ///in which case it will appear as 'ENCRYPTED' in logs, rather than display file name.
var/hacked_download = FALSE
- var/download_completion = FALSE //GQ of downloaded data.
- var/download_netspeed = 0
- var/downloaderror = ""
+ ///How much of the data has been downloaded.
+ var/download_completion
+ ///The error message being displayed to the user, if necessary. Null if there isn't one.
+ var/downloaderror
+ ///The list of categories to display in the UI, in order of which they appear.
var/static/list/show_categories = list(
- PROGRAM_CATEGORY_CREW,
- PROGRAM_CATEGORY_ENGI,
- PROGRAM_CATEGORY_SCI,
- PROGRAM_CATEGORY_SUPL,
- PROGRAM_CATEGORY_MISC,
+ PROGRAM_CATEGORY_DEVICE,
+ PROGRAM_CATEGORY_EQUIPMENT,
+ PROGRAM_CATEGORY_GAMES,
+ PROGRAM_CATEGORY_SECURITY,
+ PROGRAM_CATEGORY_ENGINEERING,
+ PROGRAM_CATEGORY_SUPPLY,
+ PROGRAM_CATEGORY_SCIENCE,
)
/datum/computer_file/program/ntnetdownload/kill_program(mob/user)
- . = ..()
+ abort_file_download()
ui_header = null
+ . = ..()
/datum/computer_file/program/ntnetdownload/proc/begin_file_download(filename)
if(downloaded_file)
@@ -38,7 +45,7 @@
return FALSE
// Attempting to download antag only program, but without having emagged/syndicate computer. No.
- if(PRG.available_on_syndinet && !(computer.obj_flags & EMAGGED))
+ if((PRG.program_flags & PROGRAM_ON_SYNDINET_STORE) && !(computer.obj_flags & EMAGGED))
return FALSE
if(!computer || !computer.can_store_file(PRG))
@@ -83,7 +90,7 @@
if(download_completion >= downloaded_file.size)
complete_file_download()
// Download speed according to connectivity state. NTNet server is assumed to be on unlimited speed so we're limited by our local connectivity
- download_netspeed = 0
+ var/download_netspeed
// Speed defines are found in misc.dm
switch(ntnet_status)
if(NTNET_LOW_SIGNAL)
@@ -92,7 +99,8 @@
download_netspeed = NTNETSPEED_HIGHSIGNAL
if(NTNET_ETHERNET_SIGNAL)
download_netspeed = NTNETSPEED_ETHERNET
- download_completion += download_netspeed
+ if(download_netspeed)
+ download_completion += download_netspeed
/datum/computer_file/program/ntnetdownload/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
switch(action)
@@ -103,7 +111,6 @@
if("PRG_reseterror")
if(downloaderror)
download_completion = FALSE
- download_netspeed = FALSE
downloaded_file = null
downloaderror = ""
return TRUE
@@ -121,7 +128,6 @@
data["downloadname"] = downloaded_file.filename
data["downloaddesc"] = downloaded_file.filedesc
data["downloadsize"] = downloaded_file.size
- data["downloadspeed"] = download_netspeed
data["downloadcompletion"] = round(download_completion, 0.1)
data["disk_size"] = computer.max_capacity
@@ -129,35 +135,27 @@
data["emagged"] = (computer.obj_flags & EMAGGED)
var/list/repo = SSmodular_computers.available_antag_software | SSmodular_computers.available_station_software
- var/list/program_categories = list()
for(var/datum/computer_file/program/programs as anything in repo)
- if(!(programs.category in program_categories))
- program_categories.Add(programs.category)
data["programs"] += list(list(
"icon" = programs.program_icon,
"filename" = programs.filename,
"filedesc" = programs.filedesc,
"fileinfo" = programs.extended_desc,
- "category" = programs.category,
+ "category" = programs.downloader_category,
"installed" = !!computer.find_file_by_name(programs.filename),
"compatible" = check_compatibility(programs),
"size" = programs.size,
"access" = programs.can_run(user, downloading = TRUE, access = access),
- "verifiedsource" = programs.available_on_ntnet,
+ "verifiedsource" = !!(programs.program_flags & PROGRAM_ON_NTNET_STORE),
))
- data["categories"] = show_categories & program_categories
+ data["categories"] = show_categories
return data
-/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/P)
- var/hardflag = computer.hardware_flag
-
- if(P?.is_supported_by_hardware(hardware_flag = hardflag, loud = FALSE))
- return TRUE
- return FALSE
-
-/datum/computer_file/program/ntnetdownload/kill_program(mob/user)
- abort_file_download()
- return ..()
+///Checks if a provided `program_to_check` is compatible to be downloaded on our computer.
+/datum/computer_file/program/ntnetdownload/proc/check_compatibility(datum/computer_file/program/program_to_check)
+ if(!program_to_check || !program_to_check.is_supported_by_hardware(hardware_flag = computer.hardware_flag, loud = FALSE))
+ return FALSE
+ return TRUE
diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm
index cdfa24be1b1..6fc1358ccaf 100644
--- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm
+++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm
@@ -12,12 +12,12 @@
/datum/computer_file/program/portrait_printer
filename = "PortraitPrinter"
filedesc = "Marlowe Treeby's Art Galaxy"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "dummy"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
+ program_open_overlay = "dummy"
extended_desc = "This program connects to a Spinward Sector community art site for viewing and printing art."
download_access = list(ACCESS_LIBRARY)
- usage_flags = PROGRAM_CONSOLE
- requires_ntnet = TRUE
+ can_run_on_flags = PROGRAM_CONSOLE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 9
tgui_id = "NtosPortraitPrinter"
program_icon = "paint-brush"
diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm
index 9a8026ccd6c..c5a8eba952b 100644
--- a/code/modules/modular_computers/file_system/programs/powermonitor.dm
+++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm
@@ -3,13 +3,13 @@
/datum/computer_file/program/power_monitor
filename = "ampcheck"
filedesc = "AmpCheck"
- category = PROGRAM_CATEGORY_ENGI
- program_icon_state = "power_monitor"
+ downloader_category = PROGRAM_CATEGORY_ENGINEERING
+ program_open_overlay = "power_monitor"
extended_desc = "This program connects to sensors around the station to provide information about electrical systems"
ui_header = "power_norm.gif"
download_access = list(ACCESS_ENGINEERING)
- usage_flags = PROGRAM_CONSOLE
- requires_ntnet = FALSE
+ can_run_on_flags = PROGRAM_CONSOLE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 8
tgui_id = "NtosPowerMonitor"
program_icon = "plug"
diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm
index 7c074040cef..5e32a212bac 100644
--- a/code/modules/modular_computers/file_system/programs/radar.dm
+++ b/code/modules/modular_computers/file_system/programs/radar.dm
@@ -1,12 +1,11 @@
/datum/computer_file/program/radar //generic parent that handles most of the process
filename = "genericfinder"
filedesc = "debug_finder"
- category = PROGRAM_CATEGORY_CREW
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
ui_header = "borg_mon.gif" //DEBUG -- new icon before PR
- program_icon_state = "radarntos"
- requires_ntnet = TRUE
- available_on_ntnet = FALSE
- usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET
+ program_open_overlay = "radarntos"
+ program_flags = PROGRAM_REQUIRES_NTNET
+ can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA
size = 5
tgui_id = "NtosRadar"
///List of trackable entities. Updated by the scan() proc.
@@ -15,7 +14,7 @@
var/selected
///Used to store when the next scan is available.
COOLDOWN_DECLARE(next_scan)
- ///Used to keep track of the last value program_icon_state was set to, to prevent constant unnecessary update_appearance() calls
+ ///Used to keep track of the last value program_open_overlay was set to, to prevent constant unnecessary update_appearance() calls
var/last_icon_state = ""
///Used by the tgui interface, themed NT or Syndicate.
var/arrowstyle = "ntosradarpointer.png"
@@ -174,17 +173,17 @@
//We use SSfastprocess for the program icon state because it runs faster than process_tick() does.
/datum/computer_file/program/radar/process()
if(computer.active_program != src)
- STOP_PROCESSING(SSfastprocess, src) //We're not the active program, it's time to stop.
- return
+ //We're not the active program, it's time to stop.
+ return PROCESS_KILL
if(!selected)
return
var/atom/movable/signal = find_atom()
if(!trackable(signal))
- program_icon_state = "[initial(program_icon_state)]lost"
- if(last_icon_state != program_icon_state)
+ program_open_overlay = "[initial(program_open_overlay)]lost"
+ if(last_icon_state != program_open_overlay)
computer.update_appearance()
- last_icon_state = program_icon_state
+ last_icon_state = program_open_overlay
return
var/here_turf = get_turf(computer)
@@ -192,17 +191,17 @@
var/trackdistance = get_dist_euclidian(here_turf, target_turf)
switch(trackdistance)
if(0)
- program_icon_state = "[initial(program_icon_state)]direct"
+ program_open_overlay = "[initial(program_open_overlay)]direct"
if(1 to 12)
- program_icon_state = "[initial(program_icon_state)]close"
+ program_open_overlay = "[initial(program_open_overlay)]close"
if(13 to 24)
- program_icon_state = "[initial(program_icon_state)]medium"
+ program_open_overlay = "[initial(program_open_overlay)]medium"
if(25 to INFINITY)
- program_icon_state = "[initial(program_icon_state)]far"
+ program_open_overlay = "[initial(program_open_overlay)]far"
- if(last_icon_state != program_icon_state)
+ if(last_icon_state != program_open_overlay)
computer.update_appearance()
- last_icon_state = program_icon_state
+ last_icon_state = program_open_overlay
computer.setDir(get_dir(here_turf, target_turf))
//We can use process_tick to restart fast processing, since the computer will be running this constantly either way.
@@ -219,9 +218,8 @@
filename = "lifeline"
filedesc = "Lifeline"
extended_desc = "This program allows for tracking of crew members via their suit sensors."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
download_access = list(ACCESS_MEDICAL)
- available_on_ntnet = TRUE
program_icon = "heartbeat"
/datum/computer_file/program/radar/lifeline/find_atom()
@@ -259,9 +257,8 @@
filename = "custodiallocator"
filedesc = "Custodial Locator"
extended_desc = "This program allows for tracking of custodial equipment."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
download_access = list(ACCESS_JANITOR)
- available_on_ntnet = TRUE
program_icon = "broom"
size = 2
detomatix_resistance = DETOMATIX_RESIST_MINOR
@@ -302,12 +299,9 @@
/datum/computer_file/program/radar/fission360
filename = "fission360"
filedesc = "Fission360"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "radarsyndicate"
+ program_open_overlay = "radarsyndicate"
extended_desc = "This program allows for tracking of nuclear authorization disks and warheads."
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
- available_on_syndinet = TRUE
+ program_flags = PROGRAM_ON_SYNDINET_STORE
tgui_id = "NtosRadarSyndicate"
program_icon = "bomb"
arrowstyle = "ntosradarpointerS.png"
diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm
index 12c682f5626..063c19d35e1 100644
--- a/code/modules/modular_computers/file_system/programs/records.dm
+++ b/code/modules/modular_computers/file_system/programs/records.dm
@@ -2,13 +2,13 @@
filename = "ntrecords"
filedesc = "Records"
extended_desc = "Allows the user to view several basic records from the crew."
- category = PROGRAM_CATEGORY_MISC
+ downloader_category = PROGRAM_CATEGORY_SECURITY
program_icon = "clipboard"
- program_icon_state = "crew"
+ program_open_overlay = "crew"
tgui_id = "NtosRecords"
size = 4
- usage_flags = PROGRAM_TABLET | PROGRAM_LAPTOP
- available_on_ntnet = FALSE
+ can_run_on_flags = PROGRAM_PDA | PROGRAM_LAPTOP
+ program_flags = NONE
detomatix_resistance = DETOMATIX_RESIST_MINOR
var/mode
@@ -19,7 +19,7 @@
program_icon = "book-medical"
extended_desc = "Allows the user to view several basic medical records from the crew."
download_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND)
- available_on_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE
mode = "medical"
/datum/computer_file/program/records/security
@@ -27,7 +27,7 @@
filename = "secrecords"
extended_desc = "Allows the user to view several basic security records from the crew."
download_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND)
- available_on_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE
mode = "security"
/datum/computer_file/program/records/proc/GetRecordsReadable()
diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm
index 52bfafdcf8e..37ae20f5260 100644
--- a/code/modules/modular_computers/file_system/programs/robocontrol.dm
+++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm
@@ -2,10 +2,10 @@
/datum/computer_file/program/robocontrol
filename = "botkeeper"
filedesc = "BotKeeper"
- category = PROGRAM_CATEGORY_SCI
- program_icon_state = "robot"
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
+ program_open_overlay = "robot"
extended_desc = "A remote controller used for giving basic commands to non-sentient robots."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 6
tgui_id = "NtosRoboControl"
program_icon = "robot"
diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm
index e64691ccba2..d7a7122090d 100644
--- a/code/modules/modular_computers/file_system/programs/robotact.dm
+++ b/code/modules/modular_computers/file_system/programs/robotact.dm
@@ -1,14 +1,13 @@
/datum/computer_file/program/robotact
filename = "robotact"
filedesc = "RoboTact"
- category = PROGRAM_CATEGORY_SCI
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
extended_desc = "A built-in app for cyborg self-management and diagnostics."
ui_header = "robotact.gif" //DEBUG -- new icon before PR
- program_icon_state = "command"
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
+ program_open_overlay = "command"
+ program_flags = NONE
undeletable = TRUE
- usage_flags = PROGRAM_TABLET
+ can_run_on_flags = PROGRAM_PDA
size = 5
tgui_id = "NtosRobotact"
program_icon = "terminal"
@@ -21,7 +20,7 @@
if(.)
var/obj/item/modular_computer/pda/silicon/tablet = computer
if(tablet.device_theme == PDA_THEME_SYNDICATE)
- program_icon_state = "command-syndicate"
+ program_open_overlay = "command-syndicate"
return TRUE
return FALSE
diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm
index bb31d74f9ab..8298b9ea2b5 100644
--- a/code/modules/modular_computers/file_system/programs/secureye.dm
+++ b/code/modules/modular_computers/file_system/programs/secureye.dm
@@ -3,13 +3,13 @@
/datum/computer_file/program/secureye
filename = "secureye"
filedesc = "SecurEye"
- category = PROGRAM_CATEGORY_MISC
+ downloader_category = PROGRAM_CATEGORY_SECURITY
ui_header = "borg_mon.gif"
- program_icon_state = "generic"
+ program_open_overlay = "generic"
extended_desc = "This program allows access to standard security camera networks."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
download_access = list(ACCESS_SECURITY)
- usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
+ program_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
size = 5
tgui_id = "NtosSecurEye"
program_icon = "eye"
@@ -40,11 +40,8 @@
filedesc = "SyndEye"
extended_desc = "This program allows for illegal access to security camera networks."
download_access = list()
- available_on_ntnet = FALSE
- available_on_syndinet = TRUE
- requires_ntnet = FALSE
- usage_flags = PROGRAM_ALL
- unique_copy = TRUE
+ can_run_on_flags = PROGRAM_ALL
+ program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_UNIQUE_COPY
network = list("ss13", "mine", "rd", "labor", "ordnance", "minisat")
spying = TRUE
diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm
index e8140b62b17..2032ad5461b 100644
--- a/code/modules/modular_computers/file_system/programs/signalcommander.dm
+++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm
@@ -1,13 +1,13 @@
/datum/computer_file/program/signal_commander
filename = "signaler"
filedesc = "SignalCommander"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "signal"
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
+ program_open_overlay = "signal"
extended_desc = "A small built-in frequency app that sends out signaller signals with the appropriate hardware."
size = 2
tgui_id = "NtosSignaler"
program_icon = "satellite-dish"
- usage_flags = PROGRAM_TABLET | PROGRAM_LAPTOP
+ can_run_on_flags = PROGRAM_PDA | PROGRAM_LAPTOP
///What is the saved signal frequency?
var/signal_frequency = FREQ_SIGNALER
/// What is the saved signal code?
diff --git a/code/modules/modular_computers/file_system/programs/skill_tracker.dm b/code/modules/modular_computers/file_system/programs/skill_tracker.dm
index c68cffb3374..9063e3e239d 100644
--- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm
+++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm
@@ -1,13 +1,13 @@
/datum/computer_file/program/skill_tracker
filename = "skilltracker"
filedesc = "ExperTrak Skill Tracker"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "generic"
extended_desc = "Scan and view your current marketable job skills."
size = 2
tgui_id = "NtosSkillTracker"
program_icon = "medal"
- usage_flags = PROGRAM_TABLET // Must be a handheld device to read read your chakras or whatever
+ can_run_on_flags = PROGRAM_PDA // Must be a handheld device to read read your chakras or whatever
/datum/computer_file/program/skill_tracker/ui_data(mob/user)
var/list/data = list()
diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm
index e310d402e9e..0002aa983cc 100644
--- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/supermatter_monitor
filename = "ntcims"
filedesc = "NT CIMS"
- category = PROGRAM_CATEGORY_ENGI
+ downloader_category = PROGRAM_CATEGORY_ENGINEERING
ui_header = "smmon_0.gif"
- program_icon_state = "smmon_0"
+ program_open_overlay = "smmon_0"
extended_desc = "Crystal Integrity Monitoring System, connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
download_access = list(ACCESS_CONSTRUCTION)
size = 5
tgui_id = "NtosSupermatter"
@@ -109,6 +109,6 @@
if(last_status != new_status)
last_status = new_status
ui_header = "smmon_[last_status].gif"
- program_icon_state = "smmon_[last_status]"
+ program_open_overlay = "smmon_[last_status]"
if(istype(computer))
computer.update_appearance()
diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm
index 9350254f646..ab5654ef490 100644
--- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm
+++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm
@@ -2,15 +2,14 @@
filename = "statusdisplay"
filedesc = "Status Display"
program_icon = "signal"
- program_icon_state = "generic"
- requires_ntnet = TRUE
+ program_open_overlay = "generic"
size = 1
extended_desc = "An app used to change the message on the station status displays."
tgui_id = "NtosStatus"
- usage_flags = PROGRAM_ALL
- available_on_ntnet = FALSE
+ can_run_on_flags = PROGRAM_ALL
+ program_flags = PROGRAM_REQUIRES_NTNET
var/upper_text = ""
var/lower_text = ""
@@ -68,7 +67,7 @@
post_status("alert", "bluealert")
if(SEC_LEVEL_GREEN)
post_status("alert", "greenalert")
- // SKYRAT EDIT ADD START - Alert Levels
+ // NOVA EDIT ADD START - Alert Levels
if(SEC_LEVEL_VIOLET)
post_status("alert", "violetalert")
if(SEC_LEVEL_ORANGE)
@@ -77,7 +76,7 @@
post_status("alert", "amberalert")
if(SEC_LEVEL_GAMMA)
post_status("alert", "gammaalert")
- // SKYRAT EDIT ADD END - Alert Levels
+ // NOVA EDIT ADD END - Alert Levels
else
post_status("alert", picture)
diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm
index ad503422b47..3d9af432b69 100644
--- a/code/modules/modular_computers/file_system/programs/techweb.dm
+++ b/code/modules/modular_computers/file_system/programs/techweb.dm
@@ -1,10 +1,10 @@
/datum/computer_file/program/science
filename = "experi_track"
filedesc = "Nanotrasen Science Hub"
- category = PROGRAM_CATEGORY_SCI
- program_icon_state = "research"
+ downloader_category = PROGRAM_CATEGORY_SCIENCE
+ program_open_overlay = "research"
extended_desc = "Connect to the internal science server in order to assist in station research efforts."
- requires_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 10
tgui_id = "NtosTechweb"
program_icon = "atom"
diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm
index 9bc15a1a00b..5fdf1c8d365 100644
--- a/code/modules/modular_computers/file_system/programs/theme_selector.dm
+++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm
@@ -2,12 +2,10 @@
filename = "themeify"
filedesc = "Themeify"
extended_desc = "This program allows configuration of your device's theme."
- program_icon_state = "generic"
+ program_open_overlay = "generic"
undeletable = TRUE
size = 0
- header_program = TRUE
- available_on_ntnet = TRUE
- requires_ntnet = FALSE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_HEADER
tgui_id = "NtosThemeConfigure"
program_icon = "paint-roller"
diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm
index ed83f2ca334..64ef7137b00 100644
--- a/code/modules/modular_computers/file_system/programs/wirecarp.dm
+++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm
@@ -1,13 +1,12 @@
/datum/computer_file/program/ntnetmonitor
filename = "wirecarp"
filedesc = "WireCarp"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "comm_monitor"
+ downloader_category = PROGRAM_CATEGORY_SECURITY
+ program_open_overlay = "comm_monitor"
extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes"
size = 12
- requires_ntnet = TRUE
run_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM.
- available_on_ntnet = TRUE
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
tgui_id = "NtosNetMonitor"
program_icon = "network-wired"
@@ -51,7 +50,7 @@
data["idsalarm"] = SSmodular_computers.intrusion_detection_alarm
data["ntnetlogs"] = list()
- for(var/i in SSmodular_computers.logs)
+ for(var/i in SSmodular_computers.modpc_logs)
data["ntnetlogs"] += list(list("entry" = i))
data["tablets"] = list()
diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm
index 433200e3223..9fd3d051fac 100644
--- a/code/modules/movespeed/modifiers/items.dm
+++ b/code/modules/movespeed/modifiers/items.dm
@@ -19,3 +19,6 @@
/datum/movespeed_modifier/shooting_assistant
multiplicative_slowdown = 0.5
+
+/datum/movespeed_modifier/binocs_wielded
+ multiplicative_slowdown = 1.5
diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm
index 832718f0b17..19e00a04556 100644
--- a/code/modules/pai/pai.dm
+++ b/code/modules/pai/pai.dm
@@ -166,9 +166,9 @@
/mob/living/silicon/pai/examine(mob/user)
. = ..()
. += "Its master ID string seems to be [(!master_name || emagged) ? "empty" : master_name]."
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
. += get_silicon_flavortext()
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
/mob/living/silicon/pai/get_status_tab_items()
. += ..()
@@ -259,6 +259,15 @@
held_state = "[chassis]"
return ..()
+/mob/living/silicon/pai/set_stat(new_stat)
+ . = ..()
+ update_stat()
+
+/mob/living/silicon/pai/on_knockedout_trait_loss(datum/source)
+ . = ..()
+ set_stat(CONSCIOUS)
+ update_stat()
+
/**
* Resolves the weakref of the pai's master.
* If the master has been deleted, calls reset_software().
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 7285aa3172d..2079bddfb85 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -85,7 +85,7 @@
if(toppaper)
. += toppaper.icon_state
. += toppaper.overlays
- if(!integrated_pen && pen) // SKYRAT EDIT - CARGO BORGS - ORIGINAL: if(pen)
+ if(!integrated_pen && pen) // NOVA EDIT - CARGO BORGS - ORIGINAL: if(pen)
. += "clipboard_pen"
. += "clipboard_over"
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
index 2703744d18a..1aac034191c 100644
--- a/code/modules/paperwork/handlabeler.dm
+++ b/code/modules/paperwork/handlabeler.dm
@@ -1,4 +1,4 @@
-/obj/item/hand_labeler //SKYRAT EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
+/obj/item/hand_labeler //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE
name = "hand labeler"
desc = "A combined label printer, applicator, and remover, all in a single portable device. Designed to be easy to operate and use."
icon = 'icons/obj/service/bureaucracy.dmi'
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
index f664b79825e..3b377ddd6a9 100644
--- a/code/modules/paperwork/paperplane.dm
+++ b/code/modules/paperwork/paperplane.dm
@@ -14,7 +14,7 @@
var/hit_probability = 2 //%
var/obj/item/paper/internalPaper
- // SKYRAT EDIT START - Better paper planes
+ // NOVA EDIT START - Better paper planes
/// How long does getting shot in the eyes knock you down for?
var/knockdown_duration = 4 SECONDS
/// How much eye damage does it deal at minimum on eye impact?
@@ -23,7 +23,7 @@
var/impact_eye_damage_higher = 8
/// Does it get deleted when hitting anything or landing?
var/delete_on_impact = FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
/obj/item/paperplane/syndicate
desc = "Paper, masterfully folded in the shape of a plane."
@@ -62,7 +62,7 @@
user.visible_message(span_suicide("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!"))
user.adjust_eye_blur(12 SECONDS)
if(eyes)
- eyes.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) // SKYRAT EDIT START - Better paper planes
+ eyes.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) // NOVA EDIT START - Better paper planes
sleep(1 SECONDS)
return BRUTELOSS
@@ -111,19 +111,19 @@
C.throw_mode_on(THROW_MODE_TOGGLE)
if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman
- // SKYRAT EDIT START - Better paper planes
+ // NOVA EDIT START - Better paper planes
if(delete_on_impact)
qdel(src)
- // SKYRAT EDIT END
+ // NOVA EDIT END
return
var/mob/living/carbon/human/H = hit_atom
var/obj/item/organ/internal/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES)
if(prob(hit_probability))
if(H.is_eyes_covered())
- // SKYRAT EDIT START - Better paper planes
+ // NOVA EDIT START - Better paper planes
if(delete_on_impact)
qdel(src)
- // SKYRAT EDIT END
+ // NOVA EDIT END
return
visible_message(span_danger("\The [src] hits [H] in the eye[eyes ? "" : " socket"]!"))
H.adjust_eye_blur(12 SECONDS)
@@ -133,7 +133,7 @@
if(delete_on_impact)
qdel(src)
- // SKYRAT EDIT END
+ // NOVA EDIT END
/obj/item/paper/examine(mob/user)
. = ..()
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 4b2ea262874..a6cb83aafc0 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -283,6 +283,9 @@ GLOBAL_LIST_INIT(paper_blanks, init_paper_blanks())
/// Will invoke `do_copy_loop` asynchronously. Passes the supplied arguments on to it.
/obj/machinery/photocopier/proc/do_copies(datum/callback/copy_cb, mob/user, paper_use, toner_use, copies_amount)
+ if(machine_stat & (BROKEN|NOPOWER))
+ return
+
busy = TRUE
update_use_power(ACTIVE_POWER_USE)
// fucking god proc
diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm
index b33c37290c2..dae12f33bd4 100644
--- a/code/modules/photography/camera/camera.dm
+++ b/code/modules/photography/camera/camera.dm
@@ -121,6 +121,9 @@
return FALSE
else if(!(get_turf(target) in get_hear(world.view, user)))
return FALSE
+ else if(isliving(loc))
+ if(!(get_turf(target) in view(world.view, loc)))
+ return FALSE
else //user is an atom or null
if(!(get_turf(target) in view(world.view, user || src)))
return FALSE
@@ -241,27 +244,30 @@
printpicture(user, picture)
/obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos
- if(!user)
- return
pictures_left--
var/obj/item/photo/new_photo = new(get_turf(src), picture)
- if(in_range(new_photo, user) && user.put_in_hands(new_photo)) //needed because of TK
- to_chat(user, span_notice("[pictures_left] photos left."))
-
- if(can_customise)
- var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No"))
- if(customise == "Yes")
- var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32)
- var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128)
- var/caption = tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256)
- if(name1)
- picture.picture_name = name1
- if(desc1)
- picture.picture_desc = "[desc1] - [picture.picture_desc]"
- if(caption)
- picture.caption = caption
- else if(default_picture_name)
- picture.picture_name = default_picture_name
+ if(user)
+ if(in_range(new_photo, user) && user.put_in_hands(new_photo)) //needed because of TK
+ to_chat(user, span_notice("[pictures_left] photos left."))
+
+ if(can_customise)
+ var/customise = tgui_alert(user, "Do you want to customize the photo?", "Customization", list("Yes", "No"))
+ if(customise == "Yes")
+ var/name1 = tgui_input_text(user, "Set a name for this photo, or leave blank.", "Name", max_length = 32)
+ var/desc1 = tgui_input_text(user, "Set a description to add to photo, or leave blank.", "Description", max_length = 128)
+ var/caption = tgui_input_text(user, "Set a caption for this photo, or leave blank.", "Caption", max_length = 256)
+ if(name1)
+ picture.picture_name = name1
+ if(desc1)
+ picture.picture_desc = "[desc1] - [picture.picture_desc]"
+ if(caption)
+ picture.caption = caption
+ else if(default_picture_name)
+ picture.picture_name = default_picture_name
+ else if(isliving(loc))
+ var/mob/living/holder = loc
+ if(holder.put_in_hands(new_photo))
+ to_chat(holder, span_notice("[pictures_left] photos left."))
new_photo.set_picture(picture, TRUE, TRUE)
if(CONFIG_GET(flag/picture_logging_camera))
@@ -327,6 +333,6 @@
return
if(!camera.can_target(target))
return
- INVOKE_ASYNC(camera, TYPE_PROC_REF(/obj/item/camera, captureimage), target, null, camera.picture_size_y - 1, camera.picture_size_y - 1)
+ INVOKE_ASYNC(camera, TYPE_PROC_REF(/obj/item/camera, captureimage), target, null, camera.picture_size_x - 1, camera.picture_size_y - 1)
#undef CAMERA_PICTURE_SIZE_HARD_LIMIT
diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm
index 35d7f27017c..f8f8a8fb062 100644
--- a/code/modules/photography/photos/album.dm
+++ b/code/modules/photography/photos/album.dm
@@ -9,6 +9,7 @@
inhand_icon_state = "album"
lefthand_file = 'icons/mob/inhands/items/books_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/books_righthand.dmi'
+ storage_type = /datum/storage/photo_album
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_SMALL
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
@@ -16,13 +17,11 @@
/obj/item/storage/photo_album/Initialize(mapload)
. = ..()
- atom_storage.set_holdable(list(/obj/item/photo))
- atom_storage.max_total_storage = 42
- atom_storage.max_slots = 21
- LAZYADD(SSpersistence.photo_albums, src)
+ if (!SSpersistence.initialized)
+ LAZYADD(SSpersistence.queued_photo_albums, src)
/obj/item/storage/photo_album/Destroy()
- LAZYREMOVE(SSpersistence.photo_albums, src)
+ LAZYREMOVE(SSpersistence.queued_photo_albums, src)
return ..()
/obj/item/storage/photo_album/proc/get_picture_id_list()
@@ -41,9 +40,9 @@
//Manual loading, DO NOT USE FOR HARDCODED/MAPPED IN ALBUMS. This is for if an album needs to be loaded mid-round from an ID.
/obj/item/storage/photo_album/proc/persistence_load()
- var/list/data = SSpersistence.get_photo_albums()
- if(data[persistence_id])
- populate_from_id_list(data[persistence_id])
+ var/list/data = SSpersistence.photo_albums_database.get_key(persistence_id)
+ if (!isnull(data))
+ populate_from_id_list(data)
/obj/item/storage/photo_album/proc/populate_from_id_list(list/ids)
var/list/current_ids = get_picture_id_list()
@@ -55,6 +54,27 @@
if(!atom_storage?.attempt_insert(P, override = TRUE))
qdel(P)
+/datum/storage/photo_album
+ max_total_storage = 42
+ max_slots = 21
+
+/datum/storage/photo_album/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact)
+ . = ..()
+ set_holdable(list(/obj/item/photo))
+
+/datum/storage/photo_album/proc/save_everything()
+ var/obj/item/storage/photo_album/album = parent.resolve()
+ ASSERT(istype(album))
+ SSpersistence.photo_albums_database.set_key(album.persistence_id, album.get_picture_id_list())
+
+/datum/storage/photo_album/handle_enter(datum/source, obj/item/arrived)
+ . = ..()
+ save_everything()
+
+/datum/storage/photo_album/handle_exit(datum/source, obj/item/gone)
+ . = ..()
+ save_everything()
+
/obj/item/storage/photo_album/hos
name = "photo album (Head of Security)"
icon_state = "album_blue"
diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm
index f2d77553ea1..4fbe3e034d8 100644
--- a/code/modules/photography/photos/frame.dm
+++ b/code/modules/photography/photos/frame.dm
@@ -56,7 +56,7 @@
var/obj/structure/sign/picture_frame/PF = O
PF.copy_overlays(src)
if(displayed)
- PF.framed = displayed
+ PF.set_and_save_framed(displayed)
if(contents.len)
var/obj/item/I = pick(contents)
I.forceMove(PF)
@@ -70,27 +70,19 @@
resistance_flags = FLAMMABLE
var/obj/item/photo/framed
var/persistence_id
- var/del_id_on_destroy = FALSE
var/art_value = OK_ART
var/can_decon = TRUE
-#define FRAME_DEFINE(id) /obj/structure/sign/picture_frame/##id/persistence_id = #id
-
-//Put default persistent frame defines here!
-
-#undef FRAME_DEFINE
-
/obj/structure/sign/picture_frame/Initialize(mapload, dir, building)
. = ..()
AddElement(/datum/element/art, art_value)
- LAZYADD(SSpersistence.photo_frames, src)
+ if (!SSpersistence.initialized)
+ LAZYADD(SSpersistence.queued_photo_frames, src)
if(dir)
setDir(dir)
/obj/structure/sign/picture_frame/Destroy()
- LAZYREMOVE(SSpersistence.photo_frames, src)
- if(persistence_id && del_id_on_destroy)
- SSpersistence.remove_photo_frames(persistence_id)
+ LAZYREMOVE(SSpersistence.queued_photo_frames, src)
return ..()
/obj/structure/sign/picture_frame/proc/get_photo_id()
@@ -99,9 +91,9 @@
//Manual loading, DO NOT USE FOR HARDCODED/MAPPED IN ALBUMS. This is for if an album needs to be loaded mid-round from an ID.
/obj/structure/sign/picture_frame/proc/persistence_load()
- var/list/data = SSpersistence.get_photo_frames()
- if(data[persistence_id])
- load_from_id(data[persistence_id])
+ var/list/data = SSpersistence.photo_frames_database.get_key(persistence_id)
+ if(!isnull(data))
+ load_from_id(data)
/obj/structure/sign/picture_frame/proc/load_from_id(id)
var/obj/item/photo/old/P = load_photo_from_disk(id)
@@ -113,6 +105,15 @@
framed = P
update_appearance()
+/// Given a photo (or null), will change the contained picture, and queue a persistent save.
+/obj/structure/sign/picture_frame/proc/set_and_save_framed(obj/item/photo/photo)
+ framed = photo
+
+ if (isnull(persistence_id))
+ return
+
+ SSpersistence.photo_frames_database.set_key(persistence_id, photo?.picture?.id)
+
/obj/structure/sign/picture_frame/examine(mob/user)
. = ..()
if(in_range(src, user))
@@ -141,7 +142,7 @@
tool.play_tool_sound(src)
framed.forceMove(drop_location())
user.visible_message(span_warning("[user] cuts away [framed] from [src]!"))
- framed = null
+ set_and_save_framed(null)
update_appearance()
return ITEM_INTERACT_SUCCESS
@@ -155,7 +156,7 @@
var/obj/item/photo/P = I
if(!user.transferItemToLoc(P, src))
return
- framed = P
+ set_and_save_framed(P)
update_appearance()
return TRUE
..()
@@ -177,7 +178,7 @@
var/obj/item/wallframe/picture/F = new /obj/item/wallframe/picture(loc)
if(framed)
F.displayed = framed
- framed = null
+ set_and_save_framed(null)
if(contents.len)
var/obj/item/I = pick(contents)
I.forceMove(F)
@@ -277,7 +278,6 @@
/obj/structure/sign/picture_frame/portrait/bar
persistence_id = "frame_bar"
- del_id_on_destroy = TRUE
///Generates a persistence id unique to the current map. Every bar should feel a little bit different after all.
/obj/structure/sign/picture_frame/portrait/bar/Initialize(mapload)
diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm
index 6c309b525b9..279a7c00884 100644
--- a/code/modules/plumbing/plumbers/pill_press.dm
+++ b/code/modules/plumbing/plumbers/pill_press.dm
@@ -37,7 +37,7 @@
CAT_PILLS = GLOB.reagent_containers[CAT_PILLS],
CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES],
"Bottles" = list(/obj/item/reagent_containers/cup/bottle),
- CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // SKYRAT EDIT ADDITION - Hypovials
+ CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // NOVA EDIT ADDITION - Hypovials
)
@@ -71,10 +71,10 @@
packaging_category = CAT_PATCHES
else if(ispath(container, /obj/item/reagent_containers/pill))
packaging_category = CAT_PILLS
- // SKYRAT EDIT ADDITION START - HYPOVIALS
+ // NOVA EDIT ADDITION START - HYPOVIALS
else if(ispath(container, /obj/item/reagent_containers/cup/vial))
packaging_category = CAT_HYPOS
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
else
packaging_category = "Bottles"
return container
@@ -93,10 +93,10 @@
suffix = "Pill"
if(CAT_PATCHES)
suffix = "Patch"
- //SKYRAT EDIT ADDITION BEGIN - HYPOVIALS
+ //NOVA EDIT ADDITION BEGIN - HYPOVIALS
if (CAT_HYPOS)
suffix = "Vial"
- //SKYRAT EDIT ADDITION END - HYPOVIALS
+ //NOVA EDIT ADDITION END - HYPOVIALS
else
suffix = "Bottle"
container.name = "[product_name] [suffix]"
diff --git a/code/modules/plumbing/plumbers/plumbing_buffer.dm b/code/modules/plumbing/plumbers/plumbing_buffer.dm
index b2bb21bc24e..7b3ef306d04 100644
--- a/code/modules/plumbing/plumbers/plumbing_buffer.dm
+++ b/code/modules/plumbing/plumbers/plumbing_buffer.dm
@@ -33,11 +33,11 @@
SIGNAL_HANDLER
if(!buffer_net)
return
- if(reagents.total_volume + CHEMICAL_QUANTISATION_LEVEL >= activation_volume && mode == UNREADY)
+ if(reagents.total_volume >= activation_volume && mode == UNREADY)
mode = IDLE
buffer_net.check_active()
- else if(reagents.total_volume + CHEMICAL_QUANTISATION_LEVEL < activation_volume && mode != UNREADY)
+ else if(reagents.total_volume < activation_volume && mode != UNREADY)
mode = UNREADY
buffer_net.check_active()
diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm
index 965b428acbd..2b56bfb4ae6 100644
--- a/code/modules/plumbing/plumbers/reaction_chamber.dm
+++ b/code/modules/plumbing/plumbers/reaction_chamber.dm
@@ -43,7 +43,7 @@
/obj/machinery/plumbing/reaction_chamber/proc/on_reagent_change(datum/reagents/holder, ...)
SIGNAL_HANDLER
- if(holder.total_volume <= CHEMICAL_VOLUME_ROUNDING && emptying) //we were emptying, but now we aren't
+ if(!holder.total_volume && emptying) //we were emptying, but now we aren't
emptying = FALSE
holder.flags |= NO_REACT
return NONE
diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm
index b822ce2003f..a6e152dd34b 100644
--- a/code/modules/power/apc/apc_main.dm
+++ b/code/modules/power/apc/apc_main.dm
@@ -561,7 +561,7 @@
if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights))
low_power_nightshift_lights = TRUE
INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE)
- else if(cell.percent() < 7 && long_term_power < 0) // SKYRAT EDIT CHANGE - orig: 15
+ else if(cell.percent() < 7 && long_term_power < 0) // NOVA EDIT CHANGE - orig: 15
equipment = autoset(equipment, AUTOSET_OFF)
lighting = autoset(lighting, AUTOSET_OFF)
environ = autoset(environ, AUTOSET_ON)
@@ -569,9 +569,9 @@
if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights))
low_power_nightshift_lights = TRUE
INVOKE_ASYNC(src, PROC_REF(set_nightshift), TRUE)
- else if(cell.percent() < 17 && long_term_power < 0) // SKYRAT EDIT CHANGE - orig: 30
- equipment = autoset(equipment, AUTOSET_ON) // SKYRAT EDIT CHANGE - orig: AUTOSET_OFF
- lighting = autoset(lighting, AUTOSET_OFF) // SKYRAT EDIT CHANGE - orig: AUTOSET_ON
+ else if(cell.percent() < 17 && long_term_power < 0) // NOVA EDIT CHANGE - orig: 30
+ equipment = autoset(equipment, AUTOSET_ON) // NOVA EDIT CHANGE - orig: AUTOSET_OFF
+ lighting = autoset(lighting, AUTOSET_OFF) // NOVA EDIT CHANGE - orig: AUTOSET_ON
environ = autoset(environ, AUTOSET_ON)
alarm_manager.send_alarm(ALARM_POWER)
if(!nightshift_lights || (nightshift_lights && !low_power_nightshift_lights))
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 34a0140e311..ad8f8695a05 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -575,16 +575,16 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
if(affecting && IS_ROBOTIC_LIMB(affecting))
if(user == H)
user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name]."))
- /* SKYRAT EDIT START - ORIGINAL:
+ /* NOVA EDIT START - ORIGINAL:
if(!do_after(user, 50, H))
return
*/
- // SKYRAT EDIT CHANGE START
+ // NOVA EDIT CHANGE START
if(!do_after(user, (user == H ? self_delay : other_delay)))
return
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
if(item_heal_robotic(H, user, 0, 15))
- user.visible_message(span_green("[user] fixes some of the wires in to [H]'s [affecting.name]."), span_green("You fix some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) // SKYRAT EDIT ADD
+ user.visible_message(span_green("[user] fixes some of the wires in to [H]'s [affecting.name]."), span_green("You fix some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name].")) // NOVA EDIT ADD
use(1)
return
else
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index eb2a5b4d1a2..68d40c85d11 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -20,12 +20,12 @@
throw_speed = 2
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
+ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
+ grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
///Current charge in cell units
var/charge = 0
///Maximum charge in cell units
var/maxcharge = STANDARD_CELL_CHARGE
- custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*7, /datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5)
- grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5)
///If the cell has been booby-trapped by injecting it with plasma. Chance on use() to explode.
var/rigged = FALSE
///If the power cell was damaged by an explosion, chance for it to become corrupted and function the same as rigged.
@@ -162,16 +162,16 @@
/obj/item/stock_parts/cell/examine(mob/user)
. = ..()
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
if(ratingdesc && !microfusion_readout)
. += "This one has a rating of [display_energy(maxcharge)], and you should not swallow it."
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(rigged)
. += span_danger("This power cell seems to be faulty!")
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
else if(microfusion_readout)
. += "The charge meter reads [charge]/[maxcharge] MF."
- // SKYRAT EDIT END
+ // NOVA EDIT END
else
. += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge
diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm
index 6fa17d8dbe9..d86b178ea0c 100644
--- a/code/modules/power/generator.dm
+++ b/code/modules/power/generator.dm
@@ -96,7 +96,6 @@
add_avail(power_output)
lastgenlev = power_output
lastgen -= power_output
- ..()
/obj/machinery/power/generator/proc/get_menu(include_link = TRUE)
var/t = ""
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 93e3a2a7e4b..78aa4731953 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -190,7 +190,6 @@ GLOBAL_LIST_EMPTY(gravity_generators)
if(count <= 3) // Their sprite is the top part of the generator
part.set_density(FALSE)
part.layer = WALL_OBJ_LAYER
- SET_PLANE(part, GAME_PLANE_UPPER, our_turf)
part.sprite_number = count
part.main_part = src
generator_parts += part
@@ -420,14 +419,14 @@ GLOBAL_LIST_EMPTY(gravity_generators)
if(mobs.client)
shake_camera(mobs, 15, 1)
mobs.playsound_local(T, null, 100, 1, 0.5, sound_to_use = alert_sound)
- //SKYRAT EDIT ADDITON BEGIN
+ //NOVA EDIT ADDITON BEGIN
if(!SSmapping.level_has_any_trait(z, ZTRAIT_STATION)) // SHUT THE FUCK UP ABANDONED STATIONS, I DON'T CARE
return
if(on)
priority_announce("A gravity generator has successfully restarted its graviton field, artificial gravity is online.", "Gravity Generator", ANNOUNCER_GRAVGENON)
else
priority_announce("A gravity generator has lost its graviton field integrity ballast, artificial gravity is offline.", "Gravity Generator", ANNOUNCER_GRAVGENOFF)
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/machinery/gravity_generator/main/proc/gravity_in_level()
var/turf/T = get_turf(src)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 8559ae9fb5a..f2abba090dc 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -5,7 +5,6 @@
icon_state = "tube"
desc = "A lighting fixture."
layer = WALL_OBJ_LAYER
- plane = GAME_PLANE_UPPER
max_integrity = 100
use_power = ACTIVE_POWER_USE
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.02
@@ -187,10 +186,10 @@
. += mutable_appearance(overlay_icon, base_state)
-//SKYRAT EDIT ADDITION BEGIN - AESTHETICS
+//NOVA EDIT ADDITION BEGIN - AESTHETICS
#define LIGHT_ON_DELAY_UPPER (2 SECONDS)
#define LIGHT_ON_DELAY_LOWER (0.25 SECONDS)
-//SKYRAT EDIT END
+//NOVA EDIT END
// Area sensitivity is traditionally tied directly to power use, as an optimization
// But since we want it for fire reacting, we disregard that
@@ -212,16 +211,16 @@
/obj/machinery/light/proc/handle_fire(area/source, new_fire)
SIGNAL_HANDLER
- update(instant = TRUE, play_sound = FALSE) //SKYRAT EDIT CHANGE
+ update(instant = TRUE, play_sound = FALSE) //NOVA EDIT CHANGE
// update the icon_state and luminosity of the light depending on its state
-/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) //SKYRAT EDIT CHANGE
+/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) //NOVA EDIT CHANGE
switch(status)
if(LIGHT_BROKEN,LIGHT_BURNED,LIGHT_EMPTY)
on = FALSE
low_power_mode = FALSE
if(on)
- /* SKYRAT EDIT ORIGINAL
+ /* NOVA EDIT ORIGINAL
var/brightness_set = brightness
var/power_set = bulb_power
var/color_set = bulb_colour
@@ -256,7 +255,7 @@
l_color = color_set
)
*/
- //SKYRAT EDIT CHANGE BEGIN - AESTHETICS
+ //NOVA EDIT CHANGE BEGIN - AESTHETICS
if(instant)
turn_on(trigger, play_sound)
else if(maploaded)
@@ -265,7 +264,7 @@
else if(!turning_on)
turning_on = TRUE
addtimer(CALLBACK(src, PROC_REF(turn_on), trigger, play_sound), rand(LIGHT_ON_DELAY_LOWER, LIGHT_ON_DELAY_UPPER))
- //SKYRAT EDIT END
+ //NOVA EDIT END
else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off())
use_power = IDLE_POWER_USE
low_power_mode = TRUE
@@ -278,10 +277,10 @@
broken_sparks(start_only=TRUE)
-//SKYRAT EDIT ADDITION BEGIN - AESTHETICS
+//NOVA EDIT ADDITION BEGIN - AESTHETICS
#undef LIGHT_ON_DELAY_UPPER
#undef LIGHT_ON_DELAY_LOWER
-//SKYRAT EDIT END
+//NOVA EDIT END
/obj/machinery/light/update_current_power_usage()
if(!on && static_power_used > 0) //Light is off but still powered
@@ -356,10 +355,10 @@
. += "The [fitting] has been smashed."
if(cell || has_mock_cell)
. += "Its backup power charge meter reads [has_mock_cell ? 100 : round((cell.charge / cell.maxcharge) * 100, 0.1)]%."
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(constant_flickering)
. += span_danger("The lighting ballast appears to be damaged, this could be fixed with a multitool.")
- //SKYRAT EDIT END
+ //NOVA EDIT END
@@ -479,16 +478,16 @@
// if a light is turned off, it won't activate emergency power
/obj/machinery/light/proc/turned_off()
var/area/local_area = get_room_area()
- return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //SKYRAT EDIT CHANGE - ORIGINAL : return !local_area.lightswitch && local_area.power_light || flickering
+ return !local_area.lightswitch && local_area.power_light || flickering || constant_flickering //NOVA EDIT CHANGE - ORIGINAL : return !local_area.lightswitch && local_area.power_light || flickering
// returns whether this light has power
// true if area has power and lightswitch is on
/obj/machinery/light/proc/has_power()
var/area/local_area = get_room_area()
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(isnull(local_area))
return FALSE
- //SKYRAT EDIT END
+ //NOVA EDIT END
return local_area.lightswitch && local_area.power_light
// returns whether this light has emergency power
@@ -530,13 +529,13 @@
if(status != LIGHT_OK || !has_power())
break
on = !on
- update(FALSE, TRUE) //SKYRAT EDIT CHANGE
+ update(FALSE, TRUE) //NOVA EDIT CHANGE
sleep(rand(5, 15))
if(has_power())
on = (status == LIGHT_OK)
else
on = FALSE
- update(FALSE, TRUE) // SKYRAT EDIT CHANGE
+ update(FALSE, TRUE) // NOVA EDIT CHANGE
. = TRUE //did we actually flicker?
flickering = FALSE
diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm
index 5be904dad86..905ae72c2e3 100644
--- a/code/modules/power/lighting/light_construct.dm
+++ b/code/modules/power/lighting/light_construct.dm
@@ -5,7 +5,6 @@
icon_state = "tube-construct-stage1"
anchored = TRUE
layer = WALL_OBJ_LAYER
- plane = GAME_PLANE_UPPER
max_integrity = 200
armor_type = /datum/armor/structure_light_construct
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 0fe5b32838b..798bf2a2d75 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -60,6 +60,8 @@
return can_change_cable_layer
/obj/machinery/power/multitool_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
+
if(!can_change_cable_layer || !cable_layer_change_checks(user, tool))
return
diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm
index af48e9c5944..f79eb808a87 100644
--- a/code/modules/power/rtg.dm
+++ b/code/modules/power/rtg.dm
@@ -22,7 +22,6 @@
connect_to_network()
/obj/machinery/power/rtg/process()
- ..()
add_avail(power_gen)
/obj/machinery/power/rtg/RefreshParts()
diff --git a/code/modules/power/singularity/boh_tear.dm b/code/modules/power/singularity/boh_tear.dm
index 1816bef5197..1bc78b11148 100644
--- a/code/modules/power/singularity/boh_tear.dm
+++ b/code/modules/power/singularity/boh_tear.dm
@@ -21,7 +21,7 @@
pixel_y = -32
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
flags_1 = SUPERMATTER_IGNORES_1
-//SKYRAT EDIT START: Nicer RodStopper
+//NOVA EDIT START: Nicer RodStopper
/obj/boh_tear/Initialize(mapload)
. = ..()
QDEL_IN(src, 10 SECONDS) // vanishes after 10 seconds
@@ -36,7 +36,7 @@
roaming = FALSE, \
singularity_size = STAGE_SIX, \
)
-//SKYRAT EDIT STOP: Nicer RodStopper
+//NOVA EDIT STOP: Nicer RodStopper
/obj/boh_tear/attack_tk(mob/user)
if(!isliving(user))
return
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 75dfc4b5c5b..e57e97bedf1 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -3,7 +3,7 @@
/obj/machinery/field/containment
name = "containment field"
desc = "An energy field."
- icon = 'icons/obj/machines/engine/singularity.dmi' // SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/engine/singularity.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "Contain_F"
density = FALSE
move_resist = INFINITY
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 7ba24d69b72..0c7f5897e73 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -1,7 +1,7 @@
/obj/machinery/power/emitter
name = "emitter"
desc = "A heavy-duty industrial laser, often used in containment fields and power generation."
- icon = 'icons/obj/machines/engine/singularity.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/machines/engine/singularity.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
icon_state = "emitter"
base_icon_state = "emitter"
@@ -346,8 +346,8 @@
/obj/machinery/power/emitter/proc/integrate(obj/item/gun/energy/energy_gun, mob/user)
if(!istype(energy_gun, /obj/item/gun/energy))
return
- if(istype(energy_gun, /obj/item/gun/energy/cell_loaded))//SKYRAT EDIT MEDIGUNS
- return //SKYRAT EDIT END
+ if(istype(energy_gun, /obj/item/gun/energy/cell_loaded))//NOVA EDIT MEDIGUNS
+ return //NOVA EDIT END
if(!user.transferItemToLoc(energy_gun, src))
return
gun = energy_gun
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 89833bee343..a2485d5a2f3 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -276,7 +276,7 @@
///security level and shuttle lockdowns for [/proc/begin_the_end()]
/proc/narsie_start_destroy_station()
- SSsecurity_level.set_level(SEC_LEVEL_GAMMA) //SKYRAT EDIT CHANGE - ALERTS - ORIGINAL "delta"
+ SSsecurity_level.set_level(SEC_LEVEL_GAMMA) //NOVA EDIT CHANGE - ALERTS - ORIGINAL "delta"
SSshuttle.registerHostileEnvironment(GLOB.cult_narsie)
SSshuttle.lockdown = TRUE
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_apocalypse)), 1 MINUTES)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index a778d99cc01..52e2d8657ca 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -558,7 +558,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
final_countdown = TRUE
- SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, final_countdown) // SKYRAT EDIT ADDITION - DELAM_SCRAM
+ SEND_GLOBAL_SIGNAL(COMSIG_MAIN_SM_DELAMINATING, final_countdown) // NOVA EDIT ADDITION - DELAM_SCRAM
notify_ghosts(
"[src] has begun the delamination process!",
source = src,
@@ -1051,7 +1051,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/// Consume the santa hat and add it as an overlay
/obj/machinery/power/supermatter_crystal/proc/holiday_item_interaction(source, mob/living/user, obj/item/item, list/modifiers)
SIGNAL_HANDLER
- if(istype(item, /obj/item/clothing/head/costume/santa) || istype(item, /obj/item/clothing/head/costume/skyrat/christmas)) // SKYRAT EDIT CHANGE - Loadouts
+ if(istype(item, /obj/item/clothing/head/costume/santa) || istype(item, /obj/item/clothing/head/costume/skyrat/christmas)) // NOVA EDIT CHANGE - Loadouts
QDEL_NULL(item)
RegisterSignal(src, COMSIG_ATOM_EXAMINE, PROC_REF(holiday_hat_examine))
if(istype(src, /obj/machinery/power/supermatter_crystal/shard))
diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm
index eabb07d1137..9a27e8c57c9 100644
--- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm
+++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm
@@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
if(sm.damage <= sm.warning_point) // Damage is too low, lets not
return FALSE
- notify_delam_suppression(sm) // SKYRAT EDIT ADDITION - DELAM_SCRAM
+ notify_delam_suppression(sm) // NOVA EDIT ADDITION - DELAM_SCRAM
if (sm.damage >= sm.emergency_point && sm.damage_archived < sm.emergency_point)
sm.investigate_log("has entered the emergency point.", INVESTIGATE_ENGINE)
@@ -57,16 +57,16 @@ GLOBAL_LIST_INIT(sm_delam_list, list(
switch(sm.get_status())
if(SUPERMATTER_DELAMINATING)
- // SKYRAT EDIT ADDITION
- alert_sound_to_playing('modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg', override_volume = TRUE)
+ // NOVA EDIT ADDITION
+ alert_sound_to_playing('modular_nova/master_files/sound/effects/reactor/meltdown.ogg', override_volume = TRUE)
alert_sound_to_playing('sound/effects/alert.ogg', override_volume = TRUE)
- // SKYRAT EDIT END
+ // NOVA EDIT END
playsound(sm, 'sound/misc/bloblarm.ogg', 100, FALSE, 40, 30, falloff_distance = 10)
if(SUPERMATTER_EMERGENCY)
- // SKYRAT EDIT ADDITION
- alert_sound_to_playing('modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg', override_volume = TRUE)
+ // NOVA EDIT ADDITION
+ alert_sound_to_playing('modular_nova/master_files/sound/effects/reactor/core_overheating.ogg', override_volume = TRUE)
alert_sound_to_playing('sound/misc/notice1.ogg', override_volume = TRUE)
- // SKYRAT EDIT END
+ // NOVA EDIT END
playsound(sm, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10)
if(SUPERMATTER_DANGER)
playsound(sm, 'sound/machines/engine_alert2.ogg', 100, FALSE, 30, 30, falloff_distance = 10)
diff --git a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
index cbe3f3dab03..cfdb4b6bc56 100644
--- a/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
+++ b/code/modules/power/supermatter/supermatter_delamination/delamination_effects.dm
@@ -134,7 +134,7 @@
priority_announce(
text = "Fatal error occurred in emergency shuttle uplink during transit. Unable to reestablish connection.",
title = "Shuttle Failure",
- sound = ANNOUNCER_SHUTTLE, // SKYRAT EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
+ sound = ANNOUNCER_SHUTTLE, // NOVA EDIT CHANGE - Announcer Sounds - ORIGINAL: sound = 'sound/misc/announce_dig.ogg',
sender_override = "Emergency Shuttle Uplink Alert",
color_override = "grey",
)
diff --git a/code/modules/power/supermatter/supermatter_variants.dm b/code/modules/power/supermatter/supermatter_variants.dm
index 2390ab3d0b7..9d69066a535 100644
--- a/code/modules/power/supermatter/supermatter_variants.dm
+++ b/code/modules/power/supermatter/supermatter_variants.dm
@@ -19,7 +19,6 @@
absorption_ratio = 0.125
explosion_power = 12
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
moveable = TRUE
/// Shard SM with it's processing disabled.
diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm
index 2ca8b1df7f2..fa1a885044a 100644
--- a/code/modules/power/turbine/turbine.dm
+++ b/code/modules/power/turbine/turbine.dm
@@ -7,25 +7,17 @@
can_atmos_pass = ATMOS_PASS_DENSITY
processing_flags = NONE
- ///Theoretical volume of gas that's moving through the turbine, it expands the further it goes
- var/gas_theoretical_volume = 0
- ///Stores the turf thermal conductivity to restore it later
- var/our_turf_thermal_conductivity
///Checks if the machine is processing or not
var/active = FALSE
///The parts can be registered on the main one only when their panel is closed
var/can_connect = TRUE
-
///Reference to our turbine part
var/obj/item/turbine_parts/installed_part
///Path of the turbine part we can install
var/obj/item/turbine_parts/part_path
-
- var/has_gasmix = FALSE
+ ///The gas mixture this turbine part is storing
var/datum/gas_mixture/machine_gasmix
- var/mapped = TRUE
-
///Our overlay when active
var/active_overlay = ""
///Our overlay when off
@@ -35,20 +27,22 @@
///Should we use emissive appearance?
var/emissive = FALSE
-/obj/machinery/power/turbine/Initialize(mapload)
+/obj/machinery/power/turbine/Initialize(mapload, gas_theoretical_volume)
. = ..()
- if(has_gasmix)
- machine_gasmix = new
- machine_gasmix.volume = gas_theoretical_volume
+ machine_gasmix = new
+ machine_gasmix.volume = gas_theoretical_volume
- if(part_path && mapped)
+ if(mapload)
installed_part = new part_path(src)
air_update_turf(TRUE)
update_appearance()
+ register_context()
+
+
/obj/machinery/power/turbine/LateInitialize()
. = ..()
activate_parts()
@@ -60,13 +54,22 @@
QDEL_NULL(installed_part)
if(machine_gasmix)
- machine_gasmix = null
+ QDEL_NULL(machine_gasmix)
deactivate_parts()
return ..()
/**
* Handles all the calculations needed for the gases, work done, temperature increase/decrease
+ *
+ * Arguments
+ * * datum/gas_mixture/input_mix - the gas from the environment or from another part of the turbine
+ * * datum/gas_mixture/output_mix - the gas that got pumped into this part from the input mix.
+ * ideally should be same as input mix but varying texmperatur & pressures can cause varying results
+ * * work_amount_to_remove - the amount of work to subtract from the actual work done to pump in the input mixture.
+ * For e.g. if gas was transfered from the inlet compressor to the rotor we want to subtract the work done
+ * by the inlet from the rotor to get the true work done
+ * * intake_size - the percentage of gas to be fed into an turbine part, controlled by turbine computer for inlet compressor only
*/
/obj/machinery/power/turbine/proc/transfer_gases(datum/gas_mixture/input_mix, datum/gas_mixture/output_mix, work_amount_to_remove, intake_size = 1)
//pump gases. if no gases were transferred then no work was done
@@ -91,15 +94,49 @@
/obj/machinery/power/turbine/block_superconductivity()
return TRUE
+/obj/machinery/power/turbine/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ if(isnull(held_item))
+ return NONE
+
+ if(panel_open && istype(held_item, part_path))
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "[installed_part ? "Replace" : "Install"] part"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(held_item.tool_behaviour == TOOL_SCREWDRIVER)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "[panel_open ? "Close" : "Open"] panel"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(held_item.tool_behaviour == TOOL_WRENCH && panel_open)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Rotate"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(held_item.tool_behaviour == TOOL_CROWBAR)
+ if(installed_part)
+ context[SCREENTIP_CONTEXT_CTRL_RMB] = "Remove part"
+ if(panel_open)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Deconstruct"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(held_item.tool_behaviour == TOOL_MULTITOOL)
+ if(panel_open)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Change cable layer"
+ else
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Link parts"
+ return CONTEXTUAL_SCREENTIP_SET
+
/obj/machinery/power/turbine/examine(mob/user)
. = ..()
if(installed_part)
- . += "Currently at tier [installed_part.current_tier]."
+ . += span_notice("Currently at tier [installed_part.current_tier].")
if(installed_part.current_tier + 1 < installed_part.max_tier)
- . += "Can be upgraded by using a tier [installed_part.current_tier + 1] part."
- . += "The [installed_part.name] can be removed by right-click with a crowbar tool."
+ . += span_notice("Can be upgraded by using a tier [installed_part.current_tier + 1] part.")
+ . += span_notice("The [installed_part.name] can be [EXAMINE_HINT("pried")] out.")
else
- . += "Is missing a [initial(part_path.name)]."
+ . += span_warning("Is missing a [initial(part_path.name)].")
+ . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].")
+ if(panel_open)
+ . += span_notice("It can rotated with a [EXAMINE_HINT("wrench")]")
+ . += span_notice("The full machine can be [EXAMINE_HINT("pried")] apart")
/obj/machinery/power/turbine/update_overlays()
. = ..()
@@ -114,12 +151,13 @@
. += off_overlay
/obj/machinery/power/turbine/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
if(active)
balloon_alert(user, "turn it off!")
- return ITEM_INTERACT_SUCCESS
+ return
if(!anchored)
balloon_alert(user, "anchor first!")
- return ITEM_INTERACT_SUCCESS
+ return
tool.play_tool_sound(src, 50)
toggle_panel_open()
@@ -127,44 +165,54 @@
deactivate_parts(user)
else
activate_parts(user)
- balloon_alert(user, "you [panel_open ? "open" : "close"] the maintenance hatch of [src]")
update_appearance()
return ITEM_INTERACT_SUCCESS
/obj/machinery/power/turbine/wrench_act(mob/living/user, obj/item/tool)
- return default_change_direction_wrench(user, tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_change_direction_wrench(user, tool))
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/power/turbine/crowbar_act(mob/living/user, obj/item/tool)
- return default_deconstruction_crowbar(tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_deconstruction_crowbar(tool))
+ return ITEM_INTERACT_SUCCESS
/obj/machinery/power/turbine/on_deconstruction()
- if(installed_part)
- installed_part.forceMove(loc)
+ installed_part?.forceMove(loc)
return ..()
/obj/machinery/power/turbine/crowbar_act_secondary(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
if(!panel_open)
balloon_alert(user, "panel is closed!")
- return ITEM_INTERACT_SUCCESS
+ return
if(!installed_part)
balloon_alert(user, "no rotor installed!")
- return ITEM_INTERACT_SUCCESS
+ return
if(active)
balloon_alert(user, "[src] is on!")
- return ITEM_INTERACT_SUCCESS
- user.put_in_hands(installed_part)
+ return
+ user.put_in_hands(installed_part)
return ITEM_INTERACT_SUCCESS
/**
* Allow easy enabling of each machine for connection to the main controller
+ *
+ * Arguments
+ * * mob/user - the player who activated the parts
+ * * check_only - if TRUE it will not activate the machine but will only check if it can be activated
*/
/obj/machinery/power/turbine/proc/activate_parts(mob/user, check_only = FALSE)
can_connect = TRUE
/**
* Allow easy disabling of each machine from the main controller
+ *
+ * Arguments
+ * * mob/user - the player who deactivated the parts
*/
/obj/machinery/power/turbine/proc/deactivate_parts(mob/user)
can_connect = FALSE
@@ -196,7 +244,7 @@
//install the part
if(!do_after(user, 2 SECONDS, src))
- return
+ return TRUE
if(installed_part)
user.put_in_hands(installed_part)
balloon_alert(user, "replaced part with the one in hand")
@@ -204,29 +252,19 @@
balloon_alert(user, "installed new part")
user.transferItemToLoc(object, src)
installed_part = object
+ return TRUE
-/**
- * Gets the efficiency of the installed part, returns 0 if no part is installed
- */
+/// Gets the efficiency of the installed part, returns 0 if no part is installed
/obj/machinery/power/turbine/proc/get_efficiency()
- if(installed_part)
- return installed_part.part_efficiency
- return 0
+ return installed_part?.part_efficiency || 0
/obj/machinery/power/turbine/inlet_compressor
name = "inlet compressor"
desc = "The input side of a turbine generator, contains the compressor."
icon = 'icons/obj/machines/engine/turbine.dmi'
icon_state = "inlet_compressor"
-
circuit = /obj/item/circuitboard/machine/turbine_compressor
-
- gas_theoretical_volume = 1000
-
part_path = /obj/item/turbine_parts/compressor
-
- has_gasmix = TRUE
-
active_overlay = "inlet_animation"
off_overlay = "inlet_off"
open_overlay = "inlet_open"
@@ -239,9 +277,13 @@
var/compressor_work
/// Pressure of gases absorbed
var/compressor_pressure
- ///Ratio of the amount of gas going in the turbine
+ ///Ratio of gases going in the turbine
var/intake_regulator = 0.5
+/obj/machinery/power/turbine/inlet_compressor/Initialize(mapload)
+ //Volume of gas mixture is 1000
+ return ..(mapload, gas_theoretical_volume = 1000)
+
/obj/machinery/power/turbine/inlet_compressor/deactivate_parts(mob/user)
. = ..()
if(!QDELETED(rotor))
@@ -266,29 +308,19 @@
//the compressor compresses down the gases from 2500 L to 1000 L
//the temperature and pressure rises up, you can regulate this to increase/decrease the amount of gas moved in.
compressor_work = transfer_gases(input_turf_mixture, machine_gasmix, work_amount_to_remove = 0, intake_size = intake_regulator)
- input_turf.update_visuals()
input_turf.air_update_turf(TRUE)
+ input_turf.update_visuals()
compressor_pressure = PRESSURE_MAX(machine_gasmix.return_pressure())
return input_turf_mixture.temperature
-/obj/machinery/power/turbine/inlet_compressor/constructed
- mapped = FALSE
-
/obj/machinery/power/turbine/turbine_outlet
name = "turbine outlet"
desc = "The output side of a turbine generator, contains the turbine and the stator."
icon = 'icons/obj/machines/engine/turbine.dmi'
icon_state = "turbine_outlet"
-
circuit = /obj/item/circuitboard/machine/turbine_stator
-
- gas_theoretical_volume = 6000
-
part_path = /obj/item/turbine_parts/stator
-
- has_gasmix = TRUE
-
active_overlay = "outlet_animation"
off_overlay = "outlet_off"
open_overlay = "outlet_open"
@@ -298,6 +330,10 @@
/// The turf to puch the gases out into
var/turf/open/output_turf
+/obj/machinery/power/turbine/turbine_outlet/Initialize(mapload)
+ //Volume of gas mixture is 6000
+ return ..(mapload, gas_theoretical_volume = 6000)
+
/obj/machinery/power/turbine/turbine_outlet/deactivate_parts(mob/user)
. = ..()
if(!QDELETED(rotor))
@@ -316,77 +352,56 @@
//eject gases and update turf is any was ejected
var/datum/gas_mixture/ejected_gases = machine_gasmix.pump_gas_to(output_turf.air, machine_gasmix.return_pressure())
if(ejected_gases)
- output_turf.update_visuals()
output_turf.air_update_turf(TRUE)
+ output_turf.update_visuals()
//return ejected gases
return ejected_gases
-/obj/machinery/power/turbine/turbine_outlet/constructed
- mapped = FALSE
-
/obj/machinery/power/turbine/core_rotor
name = "core rotor"
desc = "The middle part of a turbine generator, contains the rotor and the main computer."
icon = 'icons/obj/machines/engine/turbine.dmi'
icon_state = "core_rotor"
- can_change_cable_layer = TRUE
-
- circuit = /obj/item/circuitboard/machine/turbine_rotor
-
- gas_theoretical_volume = 3000
-
- part_path = /obj/item/turbine_parts/rotor
-
- has_gasmix = TRUE
-
active_overlay = "core_light"
open_overlay = "core_open"
-
+ active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION
emissive = TRUE
+ can_change_cable_layer = TRUE
+ circuit = /obj/item/circuitboard/machine/turbine_rotor
+ part_path = /obj/item/turbine_parts/rotor
///ID to easily connect the main part of the turbine to the computer
var/mapping_id
-
///Reference to the compressor
var/obj/machinery/power/turbine/inlet_compressor/compressor
///Reference to the turbine
var/obj/machinery/power/turbine/turbine_outlet/turbine
-
///Rotation per minute the machine is doing
var/rpm
///Amount of power the machine is producing
var/produced_energy
-
///Check to see if all parts are connected to the core
var/all_parts_connected = FALSE
-
///Max rmp that the installed parts can handle, limits the rpms
var/max_allowed_rpm = 0
///Max temperature that the installed parts can handle, unlimited and causes damage to the machine
var/max_allowed_temperature = 0
-
///Amount of damage the machine has received
var/damage = 0
///Used to calculate the max damage received per tick and if the alarm should be called
var/damage_archived = 0
-
///Our internal radio
var/obj/item/radio/radio
- ///The key our internal radio uses
- var/radio_key = /obj/item/encryptionkey/headset_eng
- ///The engineering channel
- var/engineering_channel = "Engineering"
COOLDOWN_DECLARE(turbine_damage_alert)
-/obj/machinery/power/turbine/core_rotor/constructed
- mapped = FALSE
-
/obj/machinery/power/turbine/core_rotor/Initialize(mapload)
- . = ..()
+ //Volume of gas mixture is 3000
+ . = ..(mapload, gas_theoretical_volume = 3000)
+
radio = new(src)
- radio.keyslot = new radio_key
+ radio.keyslot = new /obj/item/encryptionkey/headset_eng
radio.set_listening(FALSE)
radio.recalculateChannels()
@@ -396,6 +411,18 @@
QDEL_NULL(radio)
return ..()
+/obj/machinery/power/turbine/core_rotor/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+ if(. == NONE)
+ return
+
+ if(held_item.tool_behaviour == TOOL_MULTITOOL)
+ if(panel_open)
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Change cable layer"
+ else
+ context[SCREENTIP_CONTEXT_CTRL_LMB] = "Link/Log parts"
+ return CONTEXTUAL_SCREENTIP_SET
+
/obj/machinery/power/turbine/core_rotor/examine(mob/user)
. = ..()
if(!panel_open)
@@ -512,7 +539,9 @@
/obj/machinery/power/turbine/core_rotor/deactivate_parts()
if(all_parts_connected)
power_off()
+ compressor?.rotor = null
compressor = null
+ turbine?.rotor = null
turbine = null
all_parts_connected = FALSE
disconnect_from_network()
@@ -522,9 +551,7 @@
deactivate_parts()
return ..()
-/**
- * Toggle power on and off, not safe
- */
+/// Toggle power on and off, not safe
/obj/machinery/power/turbine/core_rotor/proc/toggle_power()
if(active)
power_off()
@@ -544,9 +571,7 @@
call_parts_update_appearance()
SSair.start_processing_machine(src)
-/**
- * Calls all parts update appearance proc.
- */
+/// Calls all parts update appearance proc.
/obj/machinery/power/turbine/core_rotor/proc/call_parts_update_appearance()
update_appearance()
if(!QDELETED(compressor))
@@ -569,9 +594,7 @@
call_parts_update_appearance()
SSair.stop_processing_machine(src)
-/**
- * Returns true if all parts have their panel closed
- */
+/// Returns true if all parts have their panel closed
/obj/machinery/power/turbine/core_rotor/proc/all_parts_ready()
if(QDELETED(compressor))
return FALSE
@@ -579,19 +602,20 @@
return FALSE
return !panel_open && !compressor.panel_open && !turbine.panel_open
-/**
- * Getter for turbine integrity, return the amount in %
- */
+/// Getter for turbine integrity, return the amount in %
/obj/machinery/power/turbine/core_rotor/proc/get_turbine_integrity()
var/integrity = damage / 500
integrity = max(round(100 - integrity * 100, 0.01), 0)
return integrity
/obj/machinery/power/turbine/core_rotor/process_atmos()
- if(!active || !activate_parts(check_only = TRUE))
+ if(!active || !activate_parts(check_only = TRUE) || (machine_stat & BROKEN) || !powered(ignore_use_power = TRUE))
power_off()
return PROCESS_KILL
+ //use power to operate internal electronics & stuff
+ update_mode_power_usage(ACTIVE_POWER_USE, active_power_usage)
+
//===============COMPRESSOR WORKING========//
//Transfer gases from turf to compressor
var/temperature = compressor.compress_gases()
@@ -622,7 +646,8 @@
if(rpm < 550000)
explosion(src, 2, 5, 7)
return PROCESS_KILL
- radio.talk_into(src, "Warning, turbine at [get_area_name(src)] taking damage, current integrity at [integrity]%!", engineering_channel)
+
+ radio.talk_into(src, "Warning, turbine at [get_area_name(src)] taking damage, current integrity at [integrity]%!", RADIO_CHANNEL_ENGINEERING)
playsound(src, 'sound/machines/engine_alert1.ogg', 100, FALSE, 30, 30, falloff_distance = 10)
//================ROTOR WORKING============//
@@ -644,7 +669,7 @@
//calculate final acheived rpm
rpm = ((work_done * compressor.get_efficiency()) ** turbine.get_efficiency()) * get_efficiency() / TURBINE_RPM_CONVERSION
rpm = FLOOR(min(rpm, max_allowed_rpm), 1)
- //add energy into the grid
+ //add energy into the grid, also use part of it for turbine operation
produced_energy = rpm * TURBINE_ENERGY_RECTIFICATION_MULTIPLIER * TURBINE_RPM_CONVERSION
add_avail(produced_energy)
diff --git a/code/modules/power/turbine/turbine_computer.dm b/code/modules/power/turbine/turbine_computer.dm
index 8e8ba8deb4c..9e0f5bdaa46 100644
--- a/code/modules/power/turbine/turbine_computer.dm
+++ b/code/modules/power/turbine/turbine_computer.dm
@@ -54,20 +54,20 @@
var/list/data = list()
var/obj/machinery/power/turbine/core_rotor/main_control = turbine_core?.resolve()
-
- data["connected"] = main_control ? TRUE : FALSE
+ data["connected"] = !!QDELETED(main_control)
if(!main_control)
return
+
data["active"] = main_control.active
data["rpm"] = main_control.rpm ? main_control.rpm : 0
data["power"] = main_control.produced_energy ? main_control.produced_energy : 0
- data["temp"] = main_control.compressor.input_turf?.air.temperature
data["integrity"] = main_control.get_turbine_integrity()
data["parts_linked"] = main_control.all_parts_connected
data["parts_ready"] = main_control.all_parts_ready()
data["max_rpm"] = main_control.max_allowed_rpm
data["max_temperature"] = main_control.max_allowed_temperature
+ data["temp"] = main_control.compressor?.input_turf?.air.temperature || 0
data["regulator"] = QDELETED(main_control.compressor) ? 0 : main_control.compressor.intake_regulator
return data
diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm
index 8408e1d97b7..420ac9c8d79 100644
--- a/code/modules/procedural_mapping/mapGenerator.dm
+++ b/code/modules/procedural_mapping/mapGenerator.dm
@@ -16,7 +16,7 @@
buildmode_name = copytext_char("[type]", 20) // / d a t u m / m a p g e n e r a t o r / = 20 characters.
initialiseModules()
-/datum/map_generator/Destroy(force, ...)
+/datum/map_generator/Destroy(force)
. = ..()
QDEL_LIST(modules)
diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm
index aa3f0f0e93c..7bf32d15195 100644
--- a/code/modules/procedural_mapping/mapGeneratorModule.dm
+++ b/code/modules/procedural_mapping/mapGeneratorModule.dm
@@ -8,7 +8,7 @@
var/clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS
var/allowAtomsOnSpace = FALSE
-/datum/map_generator_module/Destroy(force, ...)
+/datum/map_generator_module/Destroy(force)
mother = null
return ..()
diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm
index 009c52b227e..23f48f6a2eb 100644
--- a/code/modules/projectiles/ammunition/_firing.dm
+++ b/code/modules/projectiles/ammunition/_firing.dm
@@ -18,7 +18,7 @@
AddComponent(/datum/component/pellet_cloud, projectile_type, pellets)
//var/next_delay = click_cooldown_override || CLICK_CD_RANGE // ORIGINAL
- var/next_delay = click_cooldown_override || ((user.staminaloss <= STAMINA_THRESHOLD_TIRED_CLICK_CD) ? CLICK_CD_RANGE : CLICK_CD_RANGE_TIRED) // SKYRAT EDIT CHANGE
+ var/next_delay = click_cooldown_override || ((user.staminaloss <= STAMINA_THRESHOLD_TIRED_CLICK_CD) ? CLICK_CD_RANGE : CLICK_CD_RANGE_TIRED) // NOVA EDIT CHANGE
if(HAS_TRAIT(user, TRAIT_DOUBLE_TAP))
next_delay = round(next_delay * 0.5)
user.changeNext_move(next_delay)
diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm
index 34f539cdf11..47dca04b6db 100644
--- a/code/modules/projectiles/ammunition/ballistic/revolver.dm
+++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm
@@ -52,7 +52,7 @@
name = ".38 Rubber bullet casing"
desc = "A .38 rubber bullet casing, manufactured to exceedingly bouncy standards."
projectile_type = /obj/projectile/bullet/c38/match/bouncy
- harmful = FALSE //SKYRAT EDIT ADDITION
+ harmful = FALSE //NOVA EDIT ADDITION
/obj/item/ammo_casing/c38/dumdum
name = ".38 DumDum bullet casing"
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
index b9d8e49fbe9..6749bc626b5 100644
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
@@ -27,7 +27,7 @@
icon_state = "bshell"
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2.5)
projectile_type = /obj/projectile/bullet/shotgun_beanbag
- harmful = FALSE //SKYRAT EDIT ADDITION
+ harmful = FALSE //NOVA EDIT ADDITION
/obj/item/ammo_casing/shotgun/incendiary
name = "incendiary slug"
diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm
index 0d3e11ec51a..eb1516c0f45 100644
--- a/code/modules/projectiles/ammunition/energy/_energy.dm
+++ b/code/modules/projectiles/ammunition/energy/_energy.dm
@@ -8,4 +8,4 @@
var/select_name = CALIBER_ENERGY
fire_sound = 'sound/weapons/laser.ogg'
firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/red
- var/select_color = FALSE //SKYRAT EDIT ADDITION - This is the color that shows up when selecting an ammo type. Disabled by default
+ var/select_color = FALSE //NOVA EDIT ADDITION - This is the color that shows up when selecting an ammo type. Disabled by default
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 12faf4b8f72..e43f4dc1228 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -45,7 +45,7 @@
var/weapon_weight = WEAPON_LIGHT
var/dual_wield_spread = 24 //additional spread when dual wielding
///Can we hold up our target with this? Default to yes
- var/can_hold_up = FALSE // SKYRAT EDIT - DISABLED ORIGINAL: TRUE
+ var/can_hold_up = FALSE // NOVA EDIT - DISABLED ORIGINAL: TRUE
/// Just 'slightly' snowflakey way to modify projectile damage for projectiles fired from this gun.
var/projectile_damage_multiplier = 1
@@ -82,8 +82,8 @@
pin = new pin(src)
add_seclight_point()
- give_gun_safeties() // SKYRAT EDIT ADDITION - GUN SAFETIES
- give_manufacturer_examine() // SKYRAT EDIT ADDITON - MANUFACTURER EXAMINE
+ give_gun_safeties() // NOVA EDIT ADDITION - GUN SAFETIES
+ give_manufacturer_examine() // NOVA EDIT ADDITON - MANUFACTURER EXAMINE
/obj/item/gun/Destroy()
if(isobj(pin)) //Can still be the initial path, then we skip
@@ -574,6 +574,9 @@
knife_overlay.pixel_y = knife_y_offset
. += knife_overlay
+/obj/item/gun/animate_atom_living(mob/living/owner)
+ new /mob/living/simple_animal/hostile/mimic/copy/ranged(drop_location(), src, owner)
+
/obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer)
if(!ishuman(user) || !ishuman(target))
return
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index d7e2d16a9b0..ef34a779e8c 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -370,10 +370,10 @@
if (.)
return
if (!internal_magazine && istype(A, /obj/item/ammo_box/magazine))
- // SKYRAT EDIT ADDITION START - this return is intentional; we do not want to run TG's version of this case handling
+ // NOVA EDIT ADDITION START - this return is intentional; we do not want to run TG's version of this case handling
if(handle_magazine(user, A))
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/obj/item/ammo_box/magazine/AM = A
if (!magazine)
insert_magazine(user, AM)
@@ -394,11 +394,11 @@
chambered = null
var/num_loaded = magazine?.attackby(A, user, params, TRUE)
if (num_loaded)
- handle_box_reload(user, A, num_loaded) // SKYRAT EDIT CHANGE - ORIGINAL: balloon_alert(user, "[num_loaded] [cartridge_wording]\s loaded")
+ handle_box_reload(user, A, num_loaded) // NOVA EDIT CHANGE - ORIGINAL: balloon_alert(user, "[num_loaded] [cartridge_wording]\s loaded")
playsound(src, load_sound, load_sound_volume, load_sound_vary)
if (chambered == null && bolt_type == BOLT_TYPE_NO_BOLT)
chamber_round()
- SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - this is normally done by handle_magazine which does not get called so we have to do it manually here
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - this is normally done by handle_magazine which does not get called so we have to do it manually here
A.update_appearance()
update_appearance()
return
@@ -522,7 +522,7 @@
SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name)
if (num_unloaded)
balloon_alert(user, "[num_unloaded] [cartridge_wording]\s unloaded")
- SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // SKYRAT EDIT ADDITION - this is normally handled by eject_magazine() but internal magazines are a special case
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) // NOVA EDIT ADDITION - this is normally handled by eject_magazine() but internal magazines are a special case
playsound(user, eject_sound, eject_sound_volume, eject_sound_vary)
update_appearance()
else
diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
index 713790049b5..4743d4931e8 100644
--- a/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
+++ b/code/modules/projectiles/guns/ballistic/bows/bow_arrows.dm
@@ -21,7 +21,7 @@
/obj/item/ammo_casing/arrow/update_icon_state()
. = ..()
- icon_state = "[initial(icon_state)]" //SKYRAT EDIT: Original: icon_state = "[base_icon_state]"
+ icon_state = "[initial(icon_state)]" //NOVA EDIT: Original: icon_state = "[base_icon_state]"
///base arrow projectile
/obj/projectile/bullet/arrow
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 5d4ca7d8c2b..360d44b08a4 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -1,7 +1,7 @@
/obj/item/gun/ballistic/automatic/pistol
name = "\improper Makarov pistol"
-// desc = "A small, easily concealable 9mm handgun. Has a threaded barrel for suppressors." // SKYRAT EDIT: Original
- desc = "A small, easily concealable 9x25mm Mk.12 handgun. Has a threaded barrel for suppressors." // SKYRAT EDIT: Calibre rename
+// desc = "A small, easily concealable 9mm handgun. Has a threaded barrel for suppressors." // NOVA EDIT: Original
+ desc = "A small, easily concealable 9x25mm Mk.12 handgun. Has a threaded barrel for suppressors." // NOVA EDIT: Calibre rename
icon_state = "pistol"
w_class = WEIGHT_CLASS_SMALL
accepted_magazine_type = /obj/item/ammo_box/magazine/m9mm
@@ -93,9 +93,9 @@
desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo."
icon_state = "deaglecamo"
inhand_icon_state = "deagleg"
- // SKYRAT EDIT - We don't actually have the right icons for this. When you add the icons you can remove this line!
+ // NOVA EDIT - We don't actually have the right icons for this. When you add the icons you can remove this line!
show_bolt_icon = FALSE
- // SKYRAT EDIT END
+ // NOVA EDIT END
/obj/item/gun/ballistic/automatic/pistol/deagle/regal
name = "\improper Regal Condor"
@@ -113,13 +113,13 @@
/obj/item/gun/ballistic/automatic/pistol/aps
name = "\improper Stechkin APS machine pistol"
- desc = "A modernized reproduction of an old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." //SKYRAT EDIT
+ desc = "A modernized reproduction of an old Soviet machine pistol. It fires quickly, but kicks like a mule. Uses 9mm ammo. Has a threaded barrel for suppressors." //NOVA EDIT
icon_state = "aps"
w_class = WEIGHT_CLASS_NORMAL
accepted_magazine_type = /obj/item/ammo_box/magazine/m9mm_aps
can_suppress = TRUE
burst_size = 3
- fire_delay = 3 //SKYRAT EDIT - Original: 1
+ fire_delay = 3 //NOVA EDIT - Original: 1
spread = 10
actions_types = list(/datum/action/item_action/toggle_firemode)
suppressor_x_offset = 6
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index a7186ae6439..3888402b2af 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -149,7 +149,7 @@
accepted_magazine_type = /obj/item/ammo_box/magazine/m12g
can_suppress = FALSE
burst_size = 1
- fire_delay = 10 //Skyrat edit - Original: 0
+ fire_delay = 10 //NOVA EDIT - Original: 0
pin = /obj/item/firing_pin/implant/pindicate
fire_sound = 'sound/weapons/gun/shotgun/shot_alt.ogg'
mag_display = TRUE
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 811ba23122f..05fbb8a31de 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -123,7 +123,7 @@
ammo_type[i] = shot
shot = ammo_type[select]
fire_sound = shot.fire_sound
- fire_sound_volume = shot.fire_sound_volume //SKYRAT EDIT ADDITION
+ fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION
fire_delay = shot.delay
/obj/item/gun/energy/Destroy()
@@ -205,7 +205,7 @@
select = 1
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
fire_sound = shot.fire_sound
- fire_sound_volume = shot.fire_sound_volume //SKYRAT EDIT ADDITION
+ fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION
fire_delay = shot.delay
if (shot.select_name && user)
balloon_alert(user, "set to [shot.select_name]")
@@ -235,10 +235,10 @@
/obj/item/gun/energy/update_overlays()
. = ..()
- // SKYRAT EDIT START
+ // NOVA EDIT START
if(!automatic_charge_overlays || !cell)
return
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/overlay_icon_state = "[icon_state]_charge"
if(modifystate)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index f64437e3579..9477f5e8c64 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -119,7 +119,7 @@
/obj/item/gun/energy/e_gun/turret/add_seclight_point()
return
-/obj/item/gun/energy/e_gun/nuclear //SKYRAT EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE
+/obj/item/gun/energy/e_gun/nuclear //NOVA EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell."
icon_state = "nucgun"
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 5b12e10ed8f..be6c1b4cb89 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -150,10 +150,10 @@
M.modify_projectile(K)
/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg
- icon_state = "kineticgun" // SKYRAT EDIT CHANGE
+ icon_state = "kineticgun" // NOVA EDIT CHANGE
holds_charge = TRUE
unique_frequency = TRUE
- max_mod_capacity = 100 // SKYRAT EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying
+ max_mod_capacity = 100 // NOVA EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying
/obj/item/gun/energy/recharge/kinetic_accelerator/minebot
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 3802ca0de35..161dae9afc0 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -1,4 +1,4 @@
-/obj/item/gun/energy/ionrifle //SKYRAT EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE
+/obj/item/gun/energy/ionrifle //NOVA EDIT - ICON OVERRIDDEN IN AESTHETICS MODULE
name = "ion rifle"
desc = "A man-portable anti-armor weapon designed to disable mechanical threats at range."
icon_state = "ionrifle"
diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm
index a8374363f42..6d714d5c1bb 100644
--- a/code/modules/projectiles/guns/magic/staff.dm
+++ b/code/modules/projectiles/guns/magic/staff.dm
@@ -136,7 +136,7 @@
/obj/projectile/magic/antimagic,
/obj/projectile/magic/arcane_barrage,
/obj/projectile/magic/bounty,
- ///obj/projectile/magic/change, //SKYRAT EDIT REMOVAL
+ ///obj/projectile/magic/change, //NOVA EDIT REMOVAL
/obj/projectile/magic/death,
/obj/projectile/magic/door,
/obj/projectile/magic/fetch,
diff --git a/code/modules/projectiles/guns/special/meat_hook.dm b/code/modules/projectiles/guns/special/meat_hook.dm
index cfa932a6541..724f3abd700 100644
--- a/code/modules/projectiles/guns/special/meat_hook.dm
+++ b/code/modules/projectiles/guns/special/meat_hook.dm
@@ -59,11 +59,11 @@
hitsound = 'sound/effects/splat.ogg'
/// The chain we send out while we are in motion, referred to as "initial" to not get confused with the chain we use to reel the victim in.
var/datum/beam/initial_chain
- var/chain_icon = 'icons/effects/beam.dmi' // SKYRAT EDIT ADDITION
+ var/chain_icon = 'icons/effects/beam.dmi' // NOVA EDIT ADDITION
/obj/projectile/hook/fire(setAngle)
if(firer)
- initial_chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) // SKYRAT EDIT CHANGE - Adds icon arg - ORIGINAL: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE)
+ initial_chain = firer.Beam(src, icon_state = "chain", icon = chain_icon, emissive = FALSE) // NOVA EDIT CHANGE - Adds icon arg - ORIGINAL: chain = firer.Beam(src, icon_state = "chain", emissive = FALSE)
ADD_TRAIT(firer, TRAIT_IMMOBILIZED, REF(src))
addtimer(TRAIT_CALLBACK_REMOVE(firer, TRAIT_IMMOBILIZED, REF(src)), IMMOBILIZATION_TIMER) // safety if we miss, if we get a hit we stay immobilized
return ..()
diff --git a/code/modules/projectiles/guns/special/syringe_gun.dm b/code/modules/projectiles/guns/special/syringe_gun.dm
index 805378c1ffc..97a31a7c813 100644
--- a/code/modules/projectiles/guns/special/syringe_gun.dm
+++ b/code/modules/projectiles/guns/special/syringe_gun.dm
@@ -46,12 +46,12 @@
/obj/item/gun/syringe/recharge_newshot()
if(!syringes.len)
return
- //SKYRAT EDIT SMARTDARTS
+ //NOVA EDIT SMARTDARTS
if(istype(syringes[length(syringes)], /obj/item/reagent_containers/syringe/smartdart))
chambered = new /obj/item/ammo_casing/syringegun/dart(src)
else
chambered = new /obj/item/ammo_casing/syringegun(src)
- //SKYRAT EDIT SMARTDARTS END
+ //NOVA EDIT SMARTDARTS END
chambered.newshot()
/obj/item/gun/syringe/can_shoot()
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 3e08d92a859..8c456c26863 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -13,9 +13,8 @@
generic_canpass = FALSE
blocks_emissive = EMISSIVE_BLOCK_GENERIC
layer = MOB_LAYER
- plane = GAME_PLANE_FOV_HIDDEN
//The sound this plays on impact.
- var/hitsound // SKYRAT EDIT CHANGE
+ var/hitsound // NOVA EDIT CHANGE
var/hitsound_wall = ""
resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -298,7 +297,7 @@
hitx = target.pixel_x + rand(-8, 8)
hity = target.pixel_y + rand(-8, 8)
- // SKYRAT EDIT ADDITION BEGIN - IMPACT SOUNDS
+ // NOVA EDIT ADDITION BEGIN - IMPACT SOUNDS
var/impact_sound
if(hitsound)
impact_sound = hitsound
@@ -306,7 +305,7 @@
impact_sound = target.impact_sound
get_sfx()
playsound(src, get_sfx_skyrat(impact_sound), vol_by_damage(), TRUE, -1)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75))
var/turf/closed/wall/target_wall = target_turf
@@ -320,13 +319,13 @@
if(!isliving(target))
if(impact_effect_type && !hitscan)
new impact_effect_type(target_turf, hitx, hity)
- /* SKYRAT EDIT REMOVAL - IMPACT SOUNDS
+ /* NOVA EDIT REMOVAL - IMPACT SOUNDS
if(isturf(target) && hitsound_wall)
var/volume = clamp(vol_by_damage() + 20, 0, 100)
if(suppressed)
volume = 5
playsound(loc, hitsound_wall, volume, TRUE, -1)
- SKYRAT EDIT REMOVAL END */
+ NOVA EDIT REMOVAL END */
return BULLET_ACT_HIT
var/mob/living/living_target = target
@@ -359,16 +358,16 @@
if(hit_limb_zone)
organ_hit_text = " in \the [parse_zone(hit_limb_zone)]"
if(suppressed == SUPPRESSED_VERY)
- //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS
+ //playsound(loc, hitsound, 5, TRUE, -1) NOVA EDIT REMOVAL - IMPACT SOUNDS
else if(suppressed)
- //playsound(loc, hitsound, 5, TRUE, -1) SKYRAT EDIT REMOVAL - IMPACT SOUNDS
+ //playsound(loc, hitsound, 5, TRUE, -1) NOVA EDIT REMOVAL - IMPACT SOUNDS
to_chat(living_target, span_userdanger("You're shot by \a [src][organ_hit_text]!"))
else
- /* SKYRAT EDIT REMOVAL - IMPACT SOUNDS
+ /* NOVA EDIT REMOVAL - IMPACT SOUNDS
if(hitsound)
var/volume = vol_by_damage()
playsound(src, hitsound, volume, TRUE, -1)
- SKYRAT EDIT REMOVAL END */
+ NOVA EDIT REMOVAL END */
living_target.visible_message(span_danger("[living_target] is hit by \a [src][organ_hit_text]!"), \
span_userdanger("You're hit by \a [src][organ_hit_text]!"), null, COMBAT_MESSAGE_RANGE)
if(living_target.is_blind())
@@ -614,7 +613,7 @@
var/mob/M = firer
if((target == firer) || ((target == firer.loc) && ismecha(firer.loc)) || (target in firer.buckled_mobs) || (istype(M) && (M.buckled == target)))
return FALSE
- if(ignored_factions?.len && ismob(target) && (!direct_target || ignore_direct_target)) //SKYRAT EDIT: ignore_direct_target
+ if(ignored_factions?.len && ismob(target) && (!direct_target || ignore_direct_target)) //NOVA EDIT: ignore_direct_target
var/mob/target_mob = target
if(faction_check(target_mob.faction, ignored_factions))
return FALSE
@@ -793,7 +792,7 @@
if(!log_override && firer && original)
log_combat(firer, original, "fired at", src, "from [get_area_name(src, TRUE)]")
//note: mecha projectile logging is handled in /obj/item/mecha_parts/mecha_equipment/weapon/action(). try to keep these messages roughly the sameish just for consistency's sake.
- if(direct_target && (get_dist(direct_target, get_turf(fired_from)) <= 1)) // point blank shots // SKYRAT EDIT - ORIGINAL: if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1))
+ if(direct_target && (get_dist(direct_target, get_turf(fired_from)) <= 1)) // point blank shots // NOVA EDIT - ORIGINAL: if(direct_target && (get_dist(direct_target, get_turf(src)) <= 1))
process_hit(get_turf(direct_target), direct_target)
if(QDELETED(src))
return
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index deb8440cd66..dfa9e918d67 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -2,7 +2,7 @@
name = "laser"
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 22 // SKYRAT EDIT: 20
+ damage = 22 // NOVA EDIT: 20
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
hitsound_wall = 'sound/weapons/effects/searwall.ogg'
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index 67cbd4352ee..ab725e1d6fa 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -2,12 +2,12 @@
name = "electrode"
icon_state = "spark"
color = "#FFFF00"
- stamina = 80 // SKYRAT EDIT CHANGE
+ stamina = 80 // NOVA EDIT CHANGE
stutter = 10 SECONDS
jitter = 40 SECONDS
hitsound = 'sound/weapons/taserhit.ogg'
//range = 7 //ORIGINAL
- range = 5 //SKYRAT EDIT CHANGE - COMBAT
+ range = 5 //NOVA EDIT CHANGE - COMBAT
tracer_type = /obj/effect/projectile/tracer/stun
muzzle_type = /obj/effect/projectile/muzzle/stun
impact_type = /obj/effect/projectile/impact/stun
@@ -18,7 +18,7 @@
do_sparks(1, TRUE, src)
else if(iscarbon(target))
var/mob/living/carbon/C = target
- C.adjust_confusion_up_to(15 SECONDS, 30 SECONDS) // SKYRAT EDIT ADDITION - Electrode jitteriness
+ C.adjust_confusion_up_to(15 SECONDS, 30 SECONDS) // NOVA EDIT ADDITION - Electrode jitteriness
C.add_mood_event("tased", /datum/mood_event/tased)
SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK)
if(C.dna && C.dna.check_mutation(/datum/mutation/human/hulk))
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 2f3214d5d90..ae91fb6c603 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -173,41 +173,12 @@
/obj/projectile/magic/animate/on_hit(atom/target, blocked = 0, pierce_hit)
. = ..()
- target.animate_atom_living(firer)
-
-/atom/proc/animate_atom_living(mob/living/owner = null)
- if((isitem(src) || isstructure(src)) && !is_type_in_list(src, GLOB.animatable_blacklist))
- if(istype(src, /obj/structure/statue/petrified))
- var/obj/structure/statue/petrified/P = src
- if(P.petrified_mob)
- var/mob/living/L = P.petrified_mob
- var/mob/living/basic/statue/S = new(P.loc, owner)
- S.name = "statue of [L.name]"
- if(owner)
- S.faction = list("[REF(owner)]")
- S.icon = P.icon
- S.icon_state = P.icon_state
- S.copy_overlays(P, TRUE)
- S.color = P.color
- S.atom_colours = P.atom_colours.Copy()
- if(L.mind)
- L.mind.transfer_to(S)
- if(owner)
- to_chat(S, span_userdanger("You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator."))
- P.forceMove(S)
- return
- else
- var/obj/O = src
- if(isgun(O))
- new /mob/living/simple_animal/hostile/mimic/copy/ranged(drop_location(), src, owner)
- else
- new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner)
-
- else if(istype(src, /mob/living/simple_animal/hostile/mimic/copy))
- // Change our allegiance!
- var/mob/living/simple_animal/hostile/mimic/copy/C = src
- if(owner)
- C.ChangeOwner(owner)
+ if(!is_type_in_typecache(target, GLOB.animatable_blacklist))
+ target.animate_atom_living(firer)
+
+///proc to animate the target into a living creature
+/atom/proc/animate_atom_living(mob/living/owner)
+ return
/obj/projectile/magic/spellblade
name = "blade energy"
@@ -400,7 +371,7 @@
var/datum/antagonist/A = target.mind.has_antag_datum(/datum/antagonist/)
if(A)
poll_message = "[poll_message] Status:[A.name]."
- var/list/mob/dead/observer/candidates = poll_candidates_for_mob(poll_message, ROLE_PAI, FALSE, 10 SECONDS, target)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates_for_mob(poll_message, check_jobban = ROLE_PAI, poll_time = 10 SECONDS, target_mob = target, pic_source = target, role_name_text = "bolt of possession")
if(target.stat == DEAD)//boo.
return
if(LAZYLEN(candidates))
diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm
index 25eef224e0d..03b2e0feb53 100644
--- a/code/modules/projectiles/projectile/special/curse.dm
+++ b/code/modules/projectiles/projectile/special/curse.dm
@@ -7,7 +7,6 @@
base_icon_state = "cursehand"
hitsound = 'sound/effects/curse4.ogg'
layer = LARGE_MOB_LAYER
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
damage_type = BURN
damage = 10
paralyze = 20
diff --git a/code/modules/reagents/chemistry/equilibrium.dm b/code/modules/reagents/chemistry/equilibrium.dm
index a6f21a6c6df..c07c349f893 100644
--- a/code/modules/reagents/chemistry/equilibrium.dm
+++ b/code/modules/reagents/chemistry/equilibrium.dm
@@ -168,7 +168,7 @@
step_target_vol = 0
reacted_vol = 0 //Because volumes can be lost mid reactions
for(var/product in reaction.results)
- step_target_vol += (multiplier * reaction.results[product])
+ step_target_vol += multiplier * reaction.results[product]
reacted_vol += holder.get_reagent_amount(product)
target_vol = reacted_vol + step_target_vol
return TRUE
@@ -277,7 +277,7 @@
//Calculate DeltaT (Deviation of T from optimal)
if(!reaction.is_cold_recipe)
if (cached_temp < reaction.optimal_temp && cached_temp >= reaction.required_temp)
- delta_t = (((cached_temp - reaction.required_temp) ** reaction.temp_exponent_factor) / ((reaction.optimal_temp - reaction.required_temp) ** reaction.temp_exponent_factor))
+ delta_t = ((cached_temp - reaction.required_temp) / (reaction.optimal_temp - reaction.required_temp)) ** reaction.temp_exponent_factor
else if (cached_temp >= reaction.optimal_temp)
delta_t = 1
else //too hot
@@ -286,7 +286,7 @@
return
else
if (cached_temp > reaction.optimal_temp && cached_temp <= reaction.required_temp)
- delta_t = (((reaction.required_temp - cached_temp) ** reaction.temp_exponent_factor) / ((reaction.required_temp - reaction.optimal_temp) ** reaction.temp_exponent_factor))
+ delta_t = ((reaction.required_temp - cached_temp) / (reaction.required_temp - reaction.optimal_temp)) ** reaction.temp_exponent_factor
else if (cached_temp <= reaction.optimal_temp)
delta_t = 1
else //Too cold
@@ -312,7 +312,7 @@
purity *= purity_modifier
//Now we calculate how much to add - this is normalised to the rate up limiter
- var/delta_chem_factor = (reaction.rate_up_lim * delta_t) * seconds_per_tick//add/remove factor
+ var/delta_chem_factor = reaction.rate_up_lim * delta_t * seconds_per_tick//add/remove factor
//keep limited
if(delta_chem_factor > step_target_vol)
delta_chem_factor = step_target_vol
@@ -323,23 +323,28 @@
return
//Calculate how much product to make and how much reactant to remove factors..
- for(var/reagent in reaction.required_reagents)
- holder.remove_reagent(reagent, (delta_chem_factor * reaction.required_reagents[reagent]))
+ var/required_amount
+ for(var/datum/reagent/requirement as anything in reaction.required_reagents)
+ required_amount = reaction.required_reagents[requirement]
+ if(!holder.remove_reagent(requirement, delta_chem_factor * required_amount))
+ to_delete = TRUE
+ return
//Apply pH changes
var/pH_adjust
if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT)
- pH_adjust = ((delta_chem_factor * reaction.required_reagents[reagent]) / target_vol) * (reaction.H_ion_release * h_ion_mod)
+ pH_adjust = ((delta_chem_factor * required_amount) / target_vol) * (reaction.H_ion_release * h_ion_mod)
else //Default adds pH independant of volume
- pH_adjust = (delta_chem_factor * reaction.required_reagents[reagent]) * (reaction.H_ion_release * h_ion_mod)
- holder.adjust_specific_reagent_ph(reagent, pH_adjust)
+ pH_adjust = (delta_chem_factor * required_amount) * (reaction.H_ion_release * h_ion_mod)
+ holder.adjust_specific_reagent_ph(requirement, pH_adjust)
var/step_add
var/total_step_added = 0
- for(var/product in reaction.results)
+ for(var/datum/reagent/product as anything in reaction.results)
//create the products
- step_add = delta_chem_factor * reaction.results[product]
- //Default handiling
- holder.add_reagent(product, step_add, null, cached_temp, purity, override_base_ph = TRUE)
+ step_add = holder.add_reagent(product, delta_chem_factor * reaction.results[product], null, cached_temp, purity, override_base_ph = TRUE)
+ if(!step_add)
+ to_delete = TRUE
+ return
//Apply pH changes
var/pH_adjust
@@ -348,6 +353,8 @@
else
pH_adjust = step_add * (reaction.H_ion_release * h_ion_mod)
holder.adjust_specific_reagent_ph(product, pH_adjust)
+
+ //record amounts created
reacted_vol += step_add
total_step_added += step_add
@@ -377,14 +384,13 @@
//post reaction checks
if(!(check_fail_states(total_step_added)))
to_delete = TRUE
+ return
//end reactions faster so plumbing is faster
//length is so that plumbing is faster - but it doesn't disable competitive reactions. Basically, competitive reactions will likely reach their step target at the start, so this will disable that. We want to avoid that. But equally, we do want to full stop a holder from reacting asap so plumbing isn't waiting an tick to resolve.
- if((step_add >= step_target_vol) && (length(holder.reaction_list == 1)))
+ if((step_add >= step_target_vol) && (length(holder.reaction_list) == 1))
to_delete = TRUE
- holder.update_total()
-
/*
* Calculates the total sum normalised purity of ALL reagents in a holder
* Currently calculates it irrespective of required reagents at the start, but this should be changed if this is powergamed to required reagents
diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm
index ed7e8349055..5872f5db1ae 100644
--- a/code/modules/reagents/chemistry/holder/holder.dm
+++ b/code/modules/reagents/chemistry/holder/holder.dm
@@ -129,7 +129,6 @@
amount = adjusted_vol
has_split = TRUE
- update_total()
var/cached_total = total_volume
if(cached_total + amount > maximum_volume)
amount = maximum_volume - cached_total //Doesnt fit in. Make it disappear. shouldn't happen. Will happen.
@@ -643,7 +642,7 @@
reagent_volume = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL) //round to this many decimal places
//remove very small amounts of reagents
- if((reagent_volume <= 0.05 && !is_reacting) || reagent_volume <= CHEMICAL_QUANTISATION_LEVEL)
+ if(!reagent_volume || (reagent_volume <= 0.05 && !is_reacting))
//end metabolization
if(isliving(my_atom))
if(reagent.metabolizing)
@@ -663,14 +662,14 @@
//compute volume & ph like we would normally
. += reagent_volume
- total_ph += (reagent.ph * reagent_volume)
+ total_ph += reagent.ph * reagent_volume
//reasign rounded value
reagent.volume = reagent_volume
//assign the final values, rounding up can sometimes cause overflow so bring it down
total_volume = min(round(., CHEMICAL_VOLUME_ROUNDING), maximum_volume)
- if(!.)
+ if(!total_volume)
ph = CHEMICAL_NORMAL_PH
else
ph = clamp(total_ph / total_volume, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH)
diff --git a/code/modules/reagents/chemistry/holder/mob_life.dm b/code/modules/reagents/chemistry/holder/mob_life.dm
index 0692d166d2c..f2d079c1146 100644
--- a/code/modules/reagents/chemistry/holder/mob_life.dm
+++ b/code/modules/reagents/chemistry/holder/mob_life.dm
@@ -57,13 +57,13 @@
if(!owner)
owner = reagent.holder.my_atom
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
var/can_process = reagent_process_flags_valid(owner, reagent)
//If the mob can't process it, remove the reagent at it's normal rate without doing any addictions, overdoses, or on_mob_life() for the reagent
if(!can_process)
reagent.holder.remove_reagent(reagent.type, reagent.metabolization_rate)
return
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(owner && reagent && (!dead || (reagent.chemical_flags & REAGENT_DEAD_PROCESS)))
if(owner.reagent_check(reagent, seconds_per_tick, times_fired))
diff --git a/code/modules/reagents/chemistry/holder/properties.dm b/code/modules/reagents/chemistry/holder/properties.dm
index c714c922da5..b949866a6d4 100644
--- a/code/modules/reagents/chemistry/holder/properties.dm
+++ b/code/modules/reagents/chemistry/holder/properties.dm
@@ -32,7 +32,7 @@
//short cut to break when we have found our one exact type
if(type_check == REAGENT_STRICT_TYPE)
- break
+ return total_amount
return round(total_amount, CHEMICAL_VOLUME_ROUNDING)
diff --git a/code/modules/reagents/chemistry/holder/reactions.dm b/code/modules/reagents/chemistry/holder/reactions.dm
index 3aff4db3d5b..d608314ad00 100644
--- a/code/modules/reagents/chemistry/holder/reactions.dm
+++ b/code/modules/reagents/chemistry/holder/reactions.dm
@@ -190,7 +190,6 @@
if(!LAZYLEN(reaction_list))
finish_reacting()
else
- update_total()
handle_reactions()
/*
@@ -215,13 +214,13 @@
var/reaction_message = equilibrium.reaction.mix_message
if(equilibrium.reaction.mix_sound)
playsound(get_turf(my_atom), equilibrium.reaction.mix_sound, 80, TRUE)
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
//If the reaction pollutes, pollute it here if we have an atom
if(equilibrium.reaction.pollutant_type && my_atom)
var/turf/my_turf = get_turf(my_atom)
if(my_turf) // reactions can happen in nullspace (like inside of a mob's stomach for instance).
my_turf.pollute_turf(equilibrium.reaction.pollutant_type, equilibrium.reaction.pollutant_amount * equilibrium.reacted_vol)
- //SKYRAT EDIT END
+ //NOVA EDIT END
qdel(equilibrium)
update_total()
SEND_SIGNAL(src, COMSIG_REAGENTS_REACTED, .)
@@ -236,8 +235,6 @@
is_reacting = FALSE
LAZYNULL(previous_reagent_list) //reset it to 0 - because any change will be different now.
update_total()
- if(!QDELING(src))
- handle_reactions() //Should be okay without. Each step checks.
/*
* Force stops the current holder/reagents datum from reacting
@@ -347,12 +344,12 @@
my_atom.visible_message(span_notice("[iconhtml] \The [my_atom]'s power is consumed in the reaction."))
extract.name = "used slime extract"
extract.desc = "This extract has been used up."
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
//If the reaction pollutes, pollute it here if we have an atom
if(selected_reaction.pollutant_type && my_atom)
var/turf/my_turf = get_turf(my_atom)
if(my_turf) // just to be safe here
my_turf.pollute_turf(selected_reaction.pollutant_type, selected_reaction.pollutant_amount * multiplier)
- //SKYRAT EDIT END
+ //NOVA EDIT END
selected_reaction.on_reaction(src, null, multiplier)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 2c3dd704235..2559379c94c 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -36,14 +36,14 @@
var/obj/item/reagent_containers/beaker = null
/// Dispensable_reagents is copypasted in plumbing synthesizers. Please update accordingly. (I didn't make it global because that would limit custom chem dispensers)
var/list/dispensable_reagents = list()
- /// These become available once the manipulator has been upgraded to tier 2 (nano) // SKYRAT EDIT CHANGE - ORIGINAL: /// These become available once the manipulator has been upgraded to tier 4 (femto)
+ /// These become available once the manipulator has been upgraded to tier 2 (nano) // NOVA EDIT CHANGE - ORIGINAL: /// These become available once the manipulator has been upgraded to tier 4 (femto)
var/list/upgrade_reagents = list()
- // SKYRAT EDIT ADDITION BEGIN
+ // NOVA EDIT ADDITION BEGIN
/// These become available once the manipulator has been upgraded to tier 3 (pico)
var/list/upgrade2_reagents = list()
/// These become available once the manipulator has been upgraded to tier 4 (femto)
var/list/upgrade3_reagents = list()
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/// These become available once the machine has been emaged
var/list/emagged_reagents = list()
/// Starting purity of the created reagents
@@ -52,12 +52,12 @@
var/list/recording_recipe
/// Saves all the recipes recorded by the machine
var/list/saved_recipes = list()
- // SKYRAT EDIT ADDITION BEGIN
+ // NOVA EDIT ADDITION BEGIN
/// Used for custom transfer amounts
var/list/transferAmounts = list()
/// The custom transfer amount
var/customTransferAmount
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/// The default list of dispensable_reagents
var/static/list/default_dispensable_reagents = list(
@@ -88,7 +88,7 @@
/datum/reagent/fuel,
)
- //SKYRAT EDIT CHANGE BEGIN - ORIGINAL
+ //NOVA EDIT CHANGE BEGIN - ORIGINAL
/*
/// The default list of reagents upgrade_reagents
var/static/list/default_upgrade_reagents = list(
@@ -133,7 +133,7 @@
/datum/reagent/toxin/histamine,
/datum/reagent/medicine/morphine
)
- //SKYRAT EDIT CHANGE END
+ //NOVA EDIT CHANGE END
/obj/machinery/chem_dispenser/Initialize(mapload)
if(dispensable_reagents != null && !dispensable_reagents.len)
@@ -145,7 +145,7 @@
upgrade_reagents = default_upgrade_reagents
if(upgrade_reagents)
upgrade_reagents = sort_list(upgrade_reagents, GLOBAL_PROC_REF(cmp_reagents_asc))
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(upgrade2_reagents != null && !upgrade2_reagents.len)
upgrade2_reagents = default_upgrade2_reagents
if(upgrade2_reagents)
@@ -154,7 +154,7 @@
upgrade3_reagents = default_upgrade3_reagents
if(upgrade3_reagents)
upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc))
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(emagged_reagents != null && !emagged_reagents.len)
emagged_reagents = default_emagged_reagents
@@ -422,7 +422,7 @@
if(is_operational)
recording_recipe = null
return TRUE
- //SKYRAT EDIT ADDITION BEGIN - CHEMISTRY QOL
+ //NOVA EDIT ADDITION BEGIN - CHEMISTRY QOL
if("custom_amount")
if(!beaker)
to_chat(usr, span_warning("Insert a container first!"))
@@ -432,7 +432,7 @@
customTransferAmount = clamp(input(usr, "Please enter your desired transfer amount.", "Transfer amount", 0) as num|null, 0, beaker.volume)
transferAmounts += customTransferAmount
return TRUE
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if("reaction_lookup")
if(beaker)
@@ -465,12 +465,12 @@
/obj/machinery/chem_dispenser/item_interaction(mob/living/user, obj/item/tool, list/modifiers, is_right_clicking)
if(is_reagent_container(tool) && !(tool.item_flags & ABSTRACT) && tool.is_open_container())
- //SKYRAT EDIT ADDITION START - CHEMISTRY QOL
+ //NOVA EDIT ADDITION START - CHEMISTRY QOL
var/obj/item/reagent_containers/container = tool
if(customTransferAmount)
transferAmounts -= customTransferAmount
transferAmounts = container.possible_transfer_amounts
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
if(!user.transferItemToLoc(tool, src))
return ..()
replace_beaker(user, tool)
@@ -516,13 +516,13 @@
recharge_amount *= capacitor.tier
parts_rating += capacitor.tier
for(var/datum/stock_part/servo/servo in component_parts)
- /* SKYRAT EDIT - ORIGINAL
+ /* NOVA EDIT - ORIGINAL
if (servo.tier > 3)
dispensable_reagents |= upgrade_reagents
else
dispensable_reagents -= upgrade_reagents
*/
- //SKYRAT EDIT START
+ //NOVA EDIT START
if (servo.tier > 1)
dispensable_reagents |= upgrade_reagents
else
@@ -537,7 +537,7 @@
dispensable_reagents |= upgrade3_reagents
else
dispensable_reagents -= upgrade3_reagents
- //SKYRAT EDIT END
+ //NOVA EDIT END
parts_rating += servo.tier
powerefficiency = round(newpowereff, 0.01)
@@ -620,7 +620,7 @@
/datum/reagent/consumable/tonic,
/datum/reagent/water,
)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
var/static/list/drink_upgrade_reagents = list(
/datum/reagent/consumable/applejuice,
/datum/reagent/consumable/pumpkinjuice,
@@ -636,7 +636,7 @@
/datum/reagent/consumable/peachjuice,
/datum/reagent/consumable/sol_dry
)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
upgrade_reagents = null
/// The default list of emagged reagents dispensable by the soda dispenser
var/static/list/drink_emagged_reagents = list(
@@ -652,7 +652,7 @@
dispensable_reagents = drinks_dispensable_reagents
if(emagged_reagents != null && !emagged_reagents.len)
emagged_reagents = drink_emagged_reagents
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(upgrade_reagents != null && !upgrade_reagents.len)
upgrade_reagents = drink_upgrade_reagents
if(upgrade_reagents)
@@ -665,7 +665,7 @@
upgrade3_reagents = drink_upgrade3_reagents
if(upgrade3_reagents)
upgrade3_reagents = sort_list(upgrade3_reagents, GLOBAL_PROC_REF(cmp_reagents_asc))
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
. = ..()
AddComponent(/datum/component/simple_rotation)
@@ -729,7 +729,7 @@
/datum/reagent/consumable/ethanol/rice_beer,
/datum/reagent/consumable/ethanol/rum,
/datum/reagent/consumable/ethanol/sake,
- /datum/reagent/consumable/ethanol/synthanol, // SKYRAT EDIT
+ /datum/reagent/consumable/ethanol/synthanol, // NOVA EDIT
/datum/reagent/consumable/ethanol/tequila,
/datum/reagent/consumable/ethanol/triple_sec,
/datum/reagent/consumable/ethanol/vermouth,
@@ -739,8 +739,8 @@
/datum/reagent/consumable/ethanol/yuyake,
)
upgrade_reagents = null
- upgrade2_reagents = null //SKYRAT EDIT
- upgrade3_reagents = null //SKYRAT EDIT
+ upgrade2_reagents = null //NOVA EDIT
+ upgrade3_reagents = null //NOVA EDIT
/// The default list of emagged reagents dispensable by the beer dispenser
var/static/list/beer_emagged_reagents = list(
/datum/reagent/consumable/ethanol,
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index a95f805130a..54b87947ab2 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -1,13 +1,3 @@
-///Tutorial states
-#define TUT_NO_BUFFER 50
-#define TUT_START 1
-#define TUT_HAS_REAGENTS 2
-#define TUT_IS_ACTIVE 3
-#define TUT_IS_REACTING 4
-#define TUT_FAIL 4.5
-#define TUT_COMPLETE 5
-#define TUT_MISSING 10
-
/obj/machinery/chem_heater
name = "reaction chamber" //Maybe this name is more accurate?
density = TRUE
@@ -19,29 +9,24 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
circuit = /obj/item/circuitboard/machine/chem_heater
+ /// The beaker inside this machine
var/obj/item/reagent_containers/beaker = null
+ /// The temperature this heater is trying to acheive
var/target_temperature = 300
+ /// The energy used by the heater to achieve the target temperature
var/heater_coefficient = 0.05
+ /// Is the heater on or off
var/on = FALSE
+ /// How much buffer are we transferig per click
var/dispense_volume = 1
- //The list of active clients using this heater, so that we can update the UI on a reaction_step. I assume there are multiple clients possible.
- var/list/ui_client_list
- ///If the user has the tutorial enabled
- var/tutorial_active = FALSE
- ///What state we're at in the tutorial
- var/tutorial_state = 0
/obj/machinery/chem_heater/Initialize(mapload)
. = ..()
- create_reagents(200, NO_REACT)//Lets save some calculations here
- //TODO: comsig reaction_start and reaction_end to enable/disable the UI autoupdater - this doesn't work presently as there's a hard divide between instant and processed reactions
+ create_reagents(200, NO_REACT)
+ register_context()
-/obj/machinery/chem_heater/deconstruct(disassembled)
- . = ..()
- if(beaker && disassembled)
- UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP)
- beaker.forceMove(drop_location())
- beaker = null
+/obj/machinery/chem_heater/on_deconstruction()
+ beaker?.forceMove(drop_location())
/obj/machinery/chem_heater/Destroy()
if(beaker)
@@ -52,6 +37,7 @@
/obj/machinery/chem_heater/Exited(atom/movable/gone, direction)
. = ..()
if(gone == beaker)
+ UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP)
beaker = null
update_appearance()
@@ -63,7 +49,7 @@
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
return
- if(!can_interact(user) || !user.can_perform_action(src, ALLOW_SILICON_REACH|FORBID_TELEKINESIS_REACH))
+ if(!user.can_perform_action(src, ALLOW_SILICON_REACH | FORBID_TELEKINESIS_REACH))
return
replace_beaker(user)
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
@@ -74,17 +60,27 @@
/obj/machinery/chem_heater/attack_ai_secondary(mob/user, list/modifiers)
return attack_hand_secondary(user, modifiers)
+/**
+ * Replace or eject the beaker inside this machine
+ * Arguments
+ * * mob/living/user - the player operating this machine
+ * * obj/item/reagent_containers/new_beaker - the new beaker to replace the current one if not null else it will just eject
+ */
/obj/machinery/chem_heater/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
- if(!user)
- return FALSE
- if(beaker)
- UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP)
+ PRIVATE_PROC(TRUE)
+
+ if(!QDELETED(beaker))
try_put_in_hand(beaker, user)
- beaker = null
- if(new_beaker)
+
+ if(!QDELETED(new_beaker))
+ if(!user.transferItemToLoc(new_beaker, src))
+ update_appearance()
+ return FALSE
beaker = new_beaker
- RegisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP, PROC_REF(on_reaction_step))
+ RegisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP, TYPE_PROC_REF(/obj/machinery/chem_heater, on_reaction_step))
+
update_appearance()
+
return TRUE
/obj/machinery/chem_heater/RefreshParts()
@@ -93,206 +89,195 @@
for(var/datum/stock_part/micro_laser/micro_laser in component_parts)
heater_coefficient *= micro_laser.tier
+/**
+ * Heats the reagents of the currently inserted beaker only if machine is on & beaker has some reagents inside
+ * Arguments
+ * * seconds_per_tick - passed from process() or from reaction_step()
+ */
+/obj/machinery/chem_heater/proc/heat_reagents(seconds_per_tick)
+ PRIVATE_PROC(TRUE)
+
+ //must be on and beaker must have something inside to heat
+ if(!on || (machine_stat & NOPOWER) || QDELETED(beaker) || !beaker.reagents.total_volume)
+ return FALSE
+
+ //heat the beaker and use some power. we want to use only a small amount of power since this proc gets called frequently
+ beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume)
+ use_power(active_power_usage * seconds_per_tick * 0.3)
+ return TRUE
+
+/obj/machinery/chem_heater/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick)
+ SIGNAL_HANDLER
+
+ //adjust temp
+ heat_reagents(seconds_per_tick)
+
+ //send updates to ui. faster than SStgui.update_uis
+ for(var/datum/tgui/ui in src.open_uis)
+ ui.send_update()
+
+/obj/machinery/chem_heater/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1))
+ return NONE
+
+ if(!QDELETED(beaker))
+ if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe))
+ context[SCREENTIP_CONTEXT_LMB] = "Inject"
+ return CONTEXTUAL_SCREENTIP_SET
+ if(is_reagent_container(held_item) && held_item.is_open_container())
+ context[SCREENTIP_CONTEXT_LMB] = "Replace beaker"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if(is_reagent_container(held_item) && held_item.is_open_container())
+ context[SCREENTIP_CONTEXT_LMB] = "Insert beaker"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(held_item.tool_behaviour == TOOL_SCREWDRIVER)
+ context[SCREENTIP_CONTEXT_LMB] = "Open panel"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR)
+ context[SCREENTIP_CONTEXT_LMB] = "Deconstruct"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ return NONE
+
/obj/machinery/chem_heater/examine(mob/user)
. = ..()
if(in_range(user, src) || isobserver(user))
- . += span_notice("The status display reads: Heating reagents at [heater_coefficient*1000]% speed.")
+ . += span_notice("The status display reads: Heating reagents at [heater_coefficient * 1000]% speed.")
+ if(!QDELETED(beaker))
+ . += span_notice("It has a beaker of [beaker.reagents.total_volume] units capacity.")
+ if(beaker.reagents.is_reacting)
+ . += span_notice("Its contents are currently reacting.")
+ else
+ . += span_warning("There is no beaker inserted.")
+ . += span_notice("Its heating is turned [on ? "On" : "Off"].")
+ . += span_notice("The status display reads: Heating reagents at [heater_coefficient * 1000]% speed.")
+ if(panel_open)
+ . += span_notice("Its panel is open and can now be [EXAMINE_HINT("pried")] apart.")
+ else
+ . += span_notice("Its panel can be [EXAMINE_HINT("pried")] open")
/obj/machinery/chem_heater/process(seconds_per_tick)
- ..()
- //Tutorial logics
- if(tutorial_active)
- switch(tutorial_state)
- if(TUT_NO_BUFFER)
- if(reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer, 5) && reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer, 5))
- tutorial_state = TUT_START
-
- if(TUT_START)
- if(!reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer, 5) || !reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer, 5))
- tutorial_state = TUT_NO_BUFFER
- return
- if(beaker?.reagents.has_reagent(/datum/reagent/mercury, 10) || beaker?.reagents.has_reagent(/datum/reagent/chlorine, 10))
- tutorial_state = TUT_HAS_REAGENTS
- if(TUT_HAS_REAGENTS)
- if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury, 9)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine, 9)))
- tutorial_state = TUT_MISSING
- return
- if(beaker?.reagents.chem_temp > 374)//If they heated it up as asked
- tutorial_state = TUT_IS_ACTIVE
- target_temperature = 375
- beaker.reagents.chem_temp = 375
-
- if(TUT_IS_ACTIVE)
- if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine))) //Slightly concerned that people might take ages to read and it'll react anyways
- tutorial_state = TUT_MISSING
- return
- if(length(beaker?.reagents.reaction_list) == 1)//Only fudge numbers for our intentful reaction
- beaker.reagents.chem_temp = 375
-
- if(target_temperature >= 390)
- tutorial_state = TUT_IS_REACTING
-
- if(TUT_IS_REACTING)
- if(!(beaker?.reagents.has_reagent(/datum/reagent/mercury)) || !(beaker?.reagents.has_reagent(/datum/reagent/chlorine)))
- tutorial_state = TUT_COMPLETE
-
- if(TUT_COMPLETE)
- if(beaker?.reagents.has_reagent(/datum/reagent/consumable/failed_reaction))
- tutorial_state = TUT_FAIL
- return
- if(!beaker?.reagents.has_reagent(/datum/reagent/medicine/calomel))
- tutorial_state = TUT_MISSING
-
- if(machine_stat & NOPOWER)
+ //is_reacting is handled in reaction_step()
+ if(QDELETED(beaker) || beaker.reagents.is_reacting)
return
- if(on)
- if(beaker?.reagents.total_volume)
- if(beaker.reagents.is_reacting)//on_reaction_step() handles this
- return
- //keep constant with the chemical acclimator please
- beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume)
- beaker.reagents.handle_reactions()
- use_power(active_power_usage * seconds_per_tick)
+ if(heat_reagents(seconds_per_tick))
+ //create new reactions after temperature adjust
+ beaker.reagents.handle_reactions()
+
+ //send updates to ui. faster than SStgui.update_uis
+ for(var/datum/tgui/ui in src.open_uis)
+ ui.send_update()
/obj/machinery/chem_heater/wrench_act(mob/living/user, obj/item/tool)
- . = ..()
- default_unfasten_wrench(user, tool)
- return ITEM_INTERACT_SUCCESS
+ . = ITEM_INTERACT_BLOCKING
+ if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN)
+ return ITEM_INTERACT_SUCCESS
-/obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params)
- if(default_deconstruction_screwdriver(user, "mixer0b", "mixer0b", I))
- return
+/obj/machinery/chem_heater/screwdriver_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_deconstruction_screwdriver(user, "mixer0b", "[base_icon_state][beaker ? 1 : 0]b", tool))
+ return ITEM_INTERACT_SUCCESS
- if(default_deconstruction_crowbar(I))
- return
+/obj/machinery/chem_heater/crowbar_act(mob/living/user, obj/item/tool)
+ . = ITEM_INTERACT_BLOCKING
+ if(default_deconstruction_crowbar(tool))
+ return ITEM_INTERACT_SUCCESS
- if(is_reagent_container(I) && !(I.item_flags & ABSTRACT) && I.is_open_container())
- . = TRUE //no afterattack
- var/obj/item/reagent_containers/B = I
- if(!user.transferItemToLoc(B, src))
- return
- replace_beaker(user, B)
- to_chat(user, span_notice("You add [B] to [src]."))
- ui_interact(user)
- update_appearance()
- return
+/obj/machinery/chem_heater/attackby(obj/item/held_item, mob/user, params)
+ if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1))
+ return ..()
if(beaker)
- if(istype(I, /obj/item/reagent_containers/dropper))
- var/obj/item/reagent_containers/dropper/D = I
- D.afterattack(beaker, user, 1)
- return
- if(istype(I, /obj/item/reagent_containers/syringe))
- var/obj/item/reagent_containers/syringe/S = I
- S.afterattack(beaker, user, 1)
- return
- return ..()
+ if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe))
+ var/obj/item/reagent_containers/injector = held_item
+ injector.afterattack(beaker, user, proximity_flag = TRUE)
+ return TRUE
-/obj/machinery/chem_heater/on_deconstruction()
- replace_beaker()
- return ..()
+ if(is_reagent_container(held_item) && held_item.is_open_container())
+ if(replace_beaker(user, held_item))
+ ui_interact(user)
+ balloon_alert(user, "beaker added!")
+ return TRUE
-///Forces a UI update every time a reaction step happens inside of the beaker it contains. This is so the UI is in sync with the reaction since it's important that the output matches the current conditions for pH adjustment and temperature.
-/obj/machinery/chem_heater/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick)
- SIGNAL_HANDLER
- if(on)
- holder.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume * (rand(8,11) * 0.1))//Give it a little wiggle room since we're actively reacting
- for(var/ui_client in ui_client_list)
- var/datum/tgui/ui = ui_client
- if(!ui)
- stack_trace("Warning: UI in UI client list is missing in [src] (chem_heater)")
- remove_ui_client_list(ui)
- continue
- ui.send_update()
+ return ..()
/obj/machinery/chem_heater/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "ChemHeater", name)
ui.open()
- add_ui_client_list(ui)
-
-/obj/machinery/chem_heater/ui_close(mob/user)
- for(var/ui_client in ui_client_list)
- var/datum/tgui/ui = ui_client
- if(ui.user == user)
- remove_ui_client_list(ui)
- return ..()
-
-/*
-*This adds an open ui client to the list - so that it can be force updated from reaction mechanisms.
-* After adding it to the list, it enables a signal incase the ui is deleted - which will call a method to remove it from the list
-* This is mostly to ensure we don't have defunct ui instances stored from any condition.
-*/
-/obj/machinery/chem_heater/proc/add_ui_client_list(new_ui)
- LAZYADD(ui_client_list, new_ui)
- RegisterSignal(new_ui, COMSIG_QDELETING, PROC_REF(on_ui_deletion))
-
-///This removes an open ui instance from the ui list and deregsiters the signal
-/obj/machinery/chem_heater/proc/remove_ui_client_list(old_ui)
- UnregisterSignal(old_ui, COMSIG_QDELETING)
- LAZYREMOVE(ui_client_list, old_ui)
-
-///This catches a signal and uses it to delete the ui instance from the list
-/obj/machinery/chem_heater/proc/on_ui_deletion(datum/tgui/source, force)
- SIGNAL_HANDLER
- remove_ui_client_list(source)
-
-/obj/machinery/chem_heater/ui_assets()
- . = ..() || list()
- . += get_asset_datum(/datum/asset/simple/tutorial_advisors)
/obj/machinery/chem_heater/ui_data(mob/user)
- var/data = list()
- data["targetTemp"] = target_temperature
- data["isActive"] = on
- data["isBeakerLoaded"] = beaker ? 1 : 0
-
- data["currentTemp"] = beaker ? beaker.reagents.chem_temp : null
- data["beakerCurrentVolume"] = beaker ? round(beaker.reagents.total_volume, 0.01) : null
- data["beakerMaxVolume"] = beaker ? beaker.volume : null
- data["currentpH"] = beaker ? round(beaker.reagents.ph, 0.01) : null
- var/upgrade_level = heater_coefficient*10
- data["upgradeLevel"] = upgrade_level
-
- var/list/beaker_contents = list()
- for(var/r in beaker?.reagents.reagent_list)
- var/datum/reagent/reagent = r
- beaker_contents.len++
- beaker_contents[length(beaker_contents)] = list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))
- data["beakerContents"] = beaker_contents
+ . = list()
+ .["targetTemp"] = target_temperature
+ .["isActive"] = on
+ .["upgradeLevel"] = heater_coefficient * 10
+
+ var/list/beaker_data = null
+ var/chem_temp = 0
+ if(!QDELETED(beaker))
+ beaker_data = list()
+ beaker_data["maxVolume"] = beaker.volume
+ beaker_data["transferAmounts"] = beaker.possible_transfer_amounts
+ beaker_data["pH"] = round(beaker.reagents.ph, 0.01)
+ beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01)
+ var/list/beakerContents = list()
+ if(length(beaker.reagents.reagent_list))
+ for(var/datum/reagent/reagent in beaker.reagents.reagent_list)
+ beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list...
+ beaker_data["contents"] = beakerContents
+ chem_temp = beaker.reagents.chem_temp
+ .["beaker"] = beaker_data
+ .["currentTemp"] = chem_temp
var/list/active_reactions = list()
var/flashing = DISABLE_FLASHING //for use with alertAfter - since there is no alertBefore, I set the after to 0 if true, or to the max value if false
for(var/_reaction in beaker?.reagents.reaction_list)
var/datum/equilibrium/equilibrium = _reaction
- if(!length(beaker.reagents.reaction_list))//I'm not sure why when it explodes it causes the gui to fail (it's missing danger (?) )
- stack_trace("how is this happening??")
- continue
if(!equilibrium.reaction.results)//Incase of no result reactions
continue
var/_reagent = equilibrium.reaction.results[1]
var/datum/reagent/reagent = beaker?.reagents.has_reagent(_reagent) //Reactions are named after their primary products
if(!reagent)
continue
+ var/datum/reagents/beaker_reagents = beaker.reagents
+
+ //check for danger levels primirarly overheating
var/overheat = FALSE
var/danger = FALSE
var/purity_alert = 2 //same as flashing
if(reagent.purity < equilibrium.reaction.purity_min)
purity_alert = ENABLE_FLASHING//Because 0 is seen as null
danger = TRUE
- if(!(flashing == ENABLE_FLASHING))//So that the pH meter flashes for ANY reactions out of optimal
- if(equilibrium.reaction.optimal_ph_min > beaker?.reagents.ph || equilibrium.reaction.optimal_ph_max < beaker?.reagents.ph)
+ if(flashing != ENABLE_FLASHING)//So that the pH meter flashes for ANY reactions out of optimal
+ if(equilibrium.reaction.optimal_ph_min > beaker_reagents.ph || equilibrium.reaction.optimal_ph_max < beaker_reagents.ph)
flashing = ENABLE_FLASHING
if(equilibrium.reaction.is_cold_recipe)
- if(equilibrium.reaction.overheat_temp > beaker?.reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT)
+ if(equilibrium.reaction.overheat_temp > beaker_reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT)
danger = TRUE
overheat = TRUE
else
- if(equilibrium.reaction.overheat_temp < beaker?.reagents.chem_temp)
+ if(equilibrium.reaction.overheat_temp < beaker_reagents.chem_temp)
danger = TRUE
overheat = TRUE
+
+ //create ui data
+ active_reactions += list(list(
+ "name" = reagent.name,
+ "danger" = danger,
+ "overheat" = overheat,
+ "purityAlert" = purity_alert,
+ "quality" = equilibrium.reaction_quality,
+ "inverse" = reagent.inverse_chem_val,
+ "minPure" = equilibrium.reaction.purity_min,
+ "reactedVol" = equilibrium.reacted_vol,
+ "targetVol" = round(equilibrium.target_vol, 1)
+ )
+ )
+
+ //additional data for competitive reactions
if(equilibrium.reaction.reaction_flags & REACTION_COMPETITIVE) //We have a compeitive reaction - concatenate the results for the different reactions
for(var/entry in active_reactions)
if(entry["name"] == reagent.name) //If we have multiple reaction methods for the same result - combine them
@@ -300,190 +285,98 @@
entry["targetVol"] = round(equilibrium.target_vol, 1)//Use the first result reagent to name the reaction detected
entry["quality"] = (entry["quality"] + equilibrium.reaction_quality) /2
continue
- active_reactions.len++
- active_reactions[length(active_reactions)] = list("name" = reagent.name, "danger" = danger, "purityAlert" = purity_alert, "quality" = equilibrium.reaction_quality, "overheat" = overheat, "inverse" = reagent.inverse_chem_val, "minPure" = equilibrium.reaction.purity_min, "reactedVol" = equilibrium.reacted_vol, "targetVol" = round(equilibrium.target_vol, 1))//Use the first result reagent to name the reaction detected
- data["activeReactions"] = active_reactions
- data["isFlashing"] = flashing
-
- data["acidicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/acidic_buffer)
- data["basicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/basic_buffer)
- data["dispenseVolume"] = dispense_volume
-
- data["tutorialMessage"] = null
- //Tutorial output
- if(tutorial_active)
- switch(tutorial_state)
- if(TUT_NO_BUFFER)//missing buffer
- data["tutorialMessage"] = {"It looks like you’re a little low on buffers, here’s how to make more:
-
-Acidic buffer: 2 parts Sodium
- 2 parts Hydrogen
- 2 parts Ethanol
- 2 parts Water
-
-Basic buffer: 3 parts Ammonia
- 2 parts Chlorine
- 2 parts Hydrogen
- 2 parts Oxygen
-
-Heat either up to speed up the reaction.
-
-When the reactions are done, refill your chamber by pressing the Draw all buttons, to the right of the respective volume indicators.
-
-To continue with the tutorial, fill both of your acidic and alkaline volumes to at least 5u."}
- if(TUT_START)//Default start
- data["tutorialMessage"] = {"Hello and welcome to the exciting world of chemistry! This help option will teach you the basic of reactions by guiding you through a calomel reaction.
-
-For the majority of reactions, the overheat temperature is 900K, and the pH range is 5-9, though it's always worth looking up the ranges as these are changing. Calomel is no different.
-
-To continue the tutorial, insert a beaker with at least 10u mercury and 10u chlorine added."}
- if(TUT_HAS_REAGENTS) //10u Hg and Cl
- data["tutorialMessage"] = {"Good job! You'll see that at present this isn't reacting. That's because this reaction needs a minimum temperature of 375K.
-
-For the most part the hotter your reaction is, the faster it will react when it’s past it’s minimum temperature. But be careful to not heat it too much! "If your reaction is slow, your temperature is too low"!
-
-When you’re ready, set your temperature to 375K and heat up the beaker to that amount."}
- if(TUT_IS_ACTIVE) //heat 375K
- data["tutorialMessage"] = {"Great! You should see your reaction slowly progressing.
-
-Notice the pH dial on the right; the sum pH should be slowly drifting towards the left on the dial. How pure your solution is at the end depends on how well you keep your reaction within the optimal pH range. The dial will flash if any of the present reactions are outside their optimal. "If you're getting sludge, give your pH a nudge"!
-
-In a moment, we’ll increase the temperature so that our rate is faster. It’s up to you to keep your pH within the limits, so keep an eye on that dial, and get ready to add basic buffer using the injection button to the left of the volume indicator.
-
-To continue set your target temperature to 390K."}
- if(TUT_IS_REACTING) //Heat 390K
- data["tutorialMessage"] = "Stay focused on the reaction! You can do it!"
- if(TUT_FAIL) //Sludge
- data["tutorialMessage"] = "Ah, unfortunately your purity was too low and the reaction fell apart into errant sludge. Don't worry, you can always try again! Be careful though, for some reactions, failing isn't nearly as forgiving."
- if(TUT_COMPLETE) //Complete
- var/datum/reagent/calo = beaker?.reagents.has_reagent(/datum/reagent/medicine/calomel)
- if(!calo)
- tutorial_state = TUT_COMPLETE
- return
- switch(calo.purity)
- if(-INFINITY to 0.25)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. That's pretty close to the fail purity of 0.15 - which can often make some reactions explode. This chem will invert into Toxic sludge when ingested by another person, and will not cause of calomel's normal effects. Sneaky, huh?"
- if(0.25 to 0.6)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Normally, this reaction will resolve above 0.7 without intervention. Are you praticing impure reactions? The lower you go, the higher change you have of getting dangerous effects during a reaction. In some more dangerous reactions, you're riding a fine line between death and an inverse chem, don't forget you can always chill your reaction to give yourself more time to manage it!"
- if(0.6 to 0.75)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Normally, this reaction will resolve above 0.7 without intervention. Did you maybe add too much basic buffer and go past 9? If you like - you're welcome to try again. Just double press the help button!"
- if(0.75 to 0.85)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. You got pretty close to optimal! Feel free to try again if you like by double pressing the help button."
- if(0.75 to 0.99)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. You got pretty close to optimal! Feel free to try again if you like by double pressing the help button, but this is a respectable purity."
- if(0.99 to 1)
- data["tutorialMessage"] = "You did it! Congratulations! I can tell you that your final purity was [calo.purity]. Your calomel is as pure as they come! You've mastered the basics of chemistry, but there's plenty more challenges on the horizon. Good luck!"
- user.client?.give_award(/datum/award/achievement/jobs/chemistry_tut, user)
- data["tutorialMessage"] += "\n\nDid you notice that your temperature increased past 390K while reacting too? That's because this reaction is exothermic (heat producing), so for some reactions you might have to adjust your target to compensate. Oh, and you can check your purity by researching and printing off a chemical analyzer at the medlathe (for now)!"
- if(TUT_MISSING) //Missing
- data["tutorialMessage"] = "Uh oh, something went wrong. Did you take the beaker out, heat it up too fast, or have other things in the beaker? Try restarting the tutorial by double pressing the help button."
-
- return data
-
-/obj/machinery/chem_heater/ui_act(action, params)
+ .["activeReactions"] = active_reactions
+
+ .["isFlashing"] = flashing
+ .["acidicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/acidic_buffer)
+ .["basicBufferVol"] = reagents.get_reagent_amount(/datum/reagent/reaction_agent/basic_buffer)
+ .["dispenseVolume"] = dispense_volume
+
+/obj/machinery/chem_heater/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
+
switch(action)
if("power")
on = !on
- . = TRUE
+ return TRUE
+
if("temperature")
var/target = params["target"]
- if(text2num(target) != null)
- target = text2num(target)
- . = TRUE
- if(.)
- target_temperature = clamp(target, 0, 1000)
+ if(isnull(target))
+ return FALSE
+
+ target = text2num(target)
+ if(isnull(target))
+ return FALSE
+
+ target_temperature = clamp(target, 0, 1000)
+ return TRUE
+
if("eject")
//Eject doesn't turn it off, so you can preheat for beaker swapping
- replace_beaker(usr)
- . = TRUE
+ return replace_beaker(ui.user)
+
if("acidBuffer")
var/target = params["target"]
- if(text2num(target) != null)
- target = text2num(target)
- . = TRUE
- if(.)
- move_buffer("acid", target)
+ if(!target)
+ return FALSE
+
+ target = text2num(target)
+ if(isnull(target))
+ return FALSE
+
+ return move_buffer(/datum/reagent/reaction_agent/acidic_buffer, target)
if("basicBuffer")
var/target = params["target"]
- if(text2num(target) != null)
- target = text2num(target) //Because the input is flipped
- . = TRUE
- if(.)
- move_buffer("basic", target)
+ if(!target)
+ return FALSE
+
+ target = text2num(target)
+ if(isnull(target))
+ return FALSE
+
+ return move_buffer(/datum/reagent/reaction_agent/basic_buffer, target)
if("disp_vol")
var/target = params["target"]
- if(text2num(target) != null)
- target = text2num(target) //Because the input is flipped
- . = TRUE
- if(.)
- dispense_volume = target
- if("help")
- tutorial_active = !tutorial_active
- if(tutorial_active)
- tutorial_state = 1
- return
- tutorial_state = 0
- //Refresh window size
- ui_close(usr)
- ui_interact(usr, null)
-
-
-///Moves a type of buffer from the heater to the beaker, or vice versa
-/obj/machinery/chem_heater/proc/move_buffer(buffer_type, volume)
- if(!beaker)
+ if(!target)
+ return FALSE
+
+ target = text2num(target)
+ if(isnull(target))
+ return FALSE
+
+ dispense_volume = target
+ return TRUE
+
+/**
+ * Injects either acid/base buffer into the beaker
+ * Arguments
+ * * datum/reagent/buffer_type - the type of buffer[acid, base] to inject/withdraw
+ * * volume - how much to volume to inject -ve values means withdraw
+ */
+/obj/machinery/chem_heater/proc/move_buffer(datum/reagent/buffer_type, volume)
+ PRIVATE_PROC(TRUE)
+
+ //no beaker
+ if(QDELETED(beaker))
say("No beaker found!")
- return
- if(buffer_type == "acid")
- if(volume < 0)
- var/datum/reagent/acid_reagent = beaker.reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer)
- if(!acid_reagent)
- say("Unable to find acidic buffer in beaker to draw from! Please insert a beaker containing acidic buffer.")
- return
- var/datum/reagent/acid_reagent_heater = reagents.has_reagent(/datum/reagent/reaction_agent/acidic_buffer)
- var/cur_vol = 0
- if(acid_reagent_heater)
- cur_vol = acid_reagent_heater.volume
- volume = 100 - cur_vol
- beaker.reagents.trans_to(src, volume, target_id = acid_reagent.type)//negative because we're going backwards
- return
- //We must be positive here
- reagents.trans_to(beaker, dispense_volume, target_id = /datum/reagent/reaction_agent/acidic_buffer)
- return
-
- if(buffer_type == "basic")
- if(volume < 0)
- var/datum/reagent/basic_reagent = beaker.reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer)
- if(!basic_reagent)
- say("Unable to find basic buffer in beaker to draw from! Please insert a beaker containing basic buffer.")
- return
- var/datum/reagent/basic_reagent_heater = reagents.has_reagent(/datum/reagent/reaction_agent/basic_buffer)
- var/cur_vol = 0
- if(basic_reagent_heater)
- cur_vol = basic_reagent_heater.volume
- volume = 100 - cur_vol
- beaker.reagents.trans_to(src, volume, target_id = basic_reagent.type)//negative because we're going backwards
- return
- reagents.trans_to(beaker, dispense_volume, target_id = /datum/reagent/reaction_agent/basic_buffer)
- return
-
+ return FALSE
-/obj/machinery/chem_heater/proc/get_purity_color(datum/equilibrium/equilibrium)
- var/_reagent = equilibrium.reaction.results[1]
- var/datum/reagent/reagent = equilibrium.holder.has_reagent(_reagent)
- // Can't be a switch due to http://www.byond.com/forum/post/2750423
- if(reagent.purity in 1 to INFINITY)
- return "blue"
- else if(reagent.purity in 0.8 to 1)
- return "green"
- else if(reagent.purity in reagent.inverse_chem_val to 0.8)
- return "olive"
- else if(reagent.purity in equilibrium.reaction.purity_min to reagent.inverse_chem_val)
- return "orange"
- else if(reagent.purity in -INFINITY to equilibrium.reaction.purity_min)
- return "red"
+ //trying to absorb buffer from currently inserted beaker
+ if(volume < 0)
+ var/datum/reagent/buffer_reagent = reagents.has_reagent(buffer_type)
+ if(!buffer_reagent)
+ var/name = initial(buffer_type.name)
+ say("Unable to find [name] in beaker to draw from! Please insert a beaker containing [name].")
+ return FALSE
+ beaker.reagents.trans_to(src, (reagents.maximum_volume / 2) - buffer_reagent.volume, target_id = buffer_type)
+ return TRUE
+
+ //trying to inject buffer into currently inserted beaker
+ reagents.trans_to(beaker, dispense_volume, target_id = buffer_type)
+ return TRUE
//Has a lot of buffer and is upgraded
/obj/machinery/chem_heater/debug
@@ -505,12 +398,3 @@ To continue set your target temperature to 390K."}
. = ..()
reagents.add_reagent(/datum/reagent/reaction_agent/basic_buffer, 20)
reagents.add_reagent(/datum/reagent/reaction_agent/acidic_buffer, 20)
-
-#undef TUT_NO_BUFFER
-#undef TUT_START
-#undef TUT_HAS_REAGENTS
-#undef TUT_IS_ACTIVE
-#undef TUT_IS_REACTING
-#undef TUT_FAIL
-#undef TUT_COMPLETE
-#undef TUT_MISSING
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 232b99255b7..b263baefb82 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -181,8 +181,8 @@
CAT_TUBES = GLOB.reagent_containers[CAT_TUBES],
CAT_PILLS = GLOB.reagent_containers[CAT_PILLS],
CAT_PATCHES = GLOB.reagent_containers[CAT_PATCHES],
- CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // SKYRAT EDIT ADDITION
- CAT_DARTS = GLOB.reagent_containers[CAT_DARTS], // SKYRAT EDIT ADDITION
+ CAT_HYPOS = GLOB.reagent_containers[CAT_HYPOS], // NOVA EDIT ADDITION
+ CAT_DARTS = GLOB.reagent_containers[CAT_DARTS], // NOVA EDIT ADDITION
)
/obj/machinery/chem_master/ui_assets(mob/user)
diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
index 6177baa269a..686196b73ff 100644
--- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm
@@ -45,16 +45,28 @@
return TRUE
if("amount")
- var/input = text2num(params["amount"])
- if(input)
- amount = input
- return FALSE
+ var/input = params["amount"]
+ if(isnull(input))
+ return FALSE
+
+ input = text2num(input)
+ if(isnull(input))
+ return FALSE
+
+ amount = input
+ return TRUE
if("purity")
- var/input = text2num(params["amount"])
- if(input)
- purity = input
- return FALSE
+ var/input = params["amount"]
+ if(isnull(input))
+ return FALSE
+
+ input = text2num(input)
+ if(isnull(input))
+ return FALSE
+
+ purity = input
+ return TRUE
update_appearance()
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index 272ff5bd687..a8d1765891b 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -77,7 +77,6 @@
/obj/machinery/smoke_machine/process()
- ..()
if(reagents.total_volume == 0)
on = FALSE
update_appearance()
diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
index 793b4a2b2bf..9346f054611 100644
--- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
@@ -213,19 +213,19 @@
inverse_chem = /datum/reagent/inverse/hercuri
inverse_chem_val = 0.3
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC // SKYRAT EDIT ADDITION - Lets hercuri process in synths
+ process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC // NOVA EDIT ADDITION - Lets hercuri process in synths
/datum/reagent/medicine/c2/hercuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/need_mob_update
- // SKYRAT EDIT CHANGE BEGIN -- Adds check for owner_flags; indented the getFireLoss check and everything under it, so synths can get cooled down
+ // NOVA EDIT CHANGE BEGIN -- Adds check for owner_flags; indented the getFireLoss check and everything under it, so synths can get cooled down
var/owner_flags = affected_mob.dna.species.reagent_flags
if (owner_flags & PROCESS_ORGANIC)
if(affected_mob.getFireLoss() > 50)
need_mob_update = affected_mob.adjustFireLoss(-2 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype)
else
need_mob_update = affected_mob.adjustFireLoss(-1.25 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype)
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
affected_mob.adjust_bodytemperature(rand(-25,-5) * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 50)
if(ishuman(affected_mob))
var/mob/living/carbon/human/humi = affected_mob
@@ -526,11 +526,11 @@
if(HAS_TRAIT_FROM(exposed_mob, TRAIT_HUSK, BURN) && carbies.getFireLoss() < UNHUSK_DAMAGE_THRESHOLD && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/synthflesh) + reac_volume >= SYNTHFLESH_UNHUSK_AMOUNT))
carbies.cure_husk(BURN)
carbies.visible_message("A rubbery liquid coats [carbies]'s burns. [carbies] looks a lot healthier!") //we're avoiding using the phrases "burnt flesh" and "burnt skin" here because carbies could be a skeleton or a golem or something
- // SKYRAT EDIT ADDITION BEGIN - non-modular changeling balancing
+ // NOVA EDIT ADDITION BEGIN - non-modular changeling balancing
if(HAS_TRAIT_FROM(exposed_mob, TRAIT_HUSK, CHANGELING_DRAIN) && (carbies.reagents.get_reagent_amount(/datum/reagent/medicine/c2/synthflesh) + reac_volume >= SYNTHFLESH_LING_UNHUSK_AMOUNT))//Costs a little more than a normal husk
carbies.cure_husk(CHANGELING_DRAIN)
carbies.visible_message("A rubbery liquid coats [carbies]'s tissues. [carbies] looks a lot healthier!")
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
/******ORGAN HEALING******/
/*Suffix: -rite*/
@@ -574,7 +574,7 @@
/datum/reagent/medicine/c2/penthrite/on_mob_life(mob/living/carbon/human/affected_mob, seconds_per_tick, times_fired)
. = ..()
var/need_mob_update
- need_mob_update = affected_mob.adjustStaminaLoss(-12.5 * REM * seconds_per_tick, updating_stamina = FALSE) //SKYRAT EDIT ADDITION - COMBAT - makes your heart beat faster, fills you with energy. For miners
+ need_mob_update = affected_mob.adjustStaminaLoss(-12.5 * REM * seconds_per_tick, updating_stamina = FALSE) //NOVA EDIT ADDITION - COMBAT - makes your heart beat faster, fills you with energy. For miners
need_mob_update = affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
if(affected_mob.health <= HEALTH_THRESHOLD_CRIT && affected_mob.health > (affected_mob.crit_threshold + HEALTH_THRESHOLD_FULLCRIT * (2 * normalise_creation_purity()))) //we cannot save someone below our lowered crit threshold.
diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
index 99442273495..0479ed8ea41 100644
--- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
@@ -73,12 +73,12 @@
booze_power *= (total_alcohol_volume / combined_dilute_volume)
// Volume, power, and server alcohol rate effect how quickly one gets drunk
- drinker.adjust_drunk_effect(sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick * 0.25) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: (sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick)
+ drinker.adjust_drunk_effect(sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick * 0.25) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: (sqrt(volume) * booze_power * ALCOHOL_RATE * REM * seconds_per_tick)
if(boozepwr > 0)
var/obj/item/organ/internal/liver/liver = drinker.get_organ_slot(ORGAN_SLOT_LIVER)
var/heavy_drinker_multiplier = (HAS_TRAIT(drinker, TRAIT_HEAVY_DRINKER) ? 0.5 : 1)
if (istype(liver))
- if(liver.apply_organ_damage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/300))) // SKYRAT EDIT CHANGE - Alcohol Tolerance - Original: if((((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/150)))
+ if(liver.apply_organ_damage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/300))) // NOVA EDIT CHANGE - Alcohol Tolerance - Original: if((((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * liver.alcohol_tolerance * heavy_drinker_multiplier * seconds_per_tick, 0))/150)))
return UPDATE_MOB_HEALTH
/datum/reagent/consumable/ethanol/expose_obj(obj/exposed_obj, reac_volume)
@@ -655,7 +655,7 @@
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
. = ..()
if(drinker.blood_volume < BLOOD_VOLUME_NORMAL)
- drinker.blood_volume = min(drinker.blood_volume + (1 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Bloody Mary quickly restores blood loss. // SKYRAT EDIT - Bloodshot is now the go-to drink for bloodloss, not Bloody Mary - ORIGINAL: drinker.blood_volume = min(drinker.blood_volume + (3 * REM * delta_time), BLOOD_VOLUME_NORMAL)
+ drinker.blood_volume = min(drinker.blood_volume + (1 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Bloody Mary quickly restores blood loss. // NOVA EDIT - Bloodshot is now the go-to drink for bloodloss, not Bloody Mary - ORIGINAL: drinker.blood_volume = min(drinker.blood_volume + (3 * REM * delta_time), BLOOD_VOLUME_NORMAL)
/datum/reagent/consumable/ethanol/brave_bull
name = "Brave Bull"
diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
index fa871013ad9..2846492a5f6 100644
--- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
@@ -671,7 +671,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/brain_trauma/hypnosis, // Hypnosis, same reason as obsessed, plus a bug makes it remain even after the neurowhine purges and then turn into "nothing" on the med reading upon a second application
/datum/brain_trauma/special/honorbound, // Designed to be chaplain exclusive
)
- forbiddentraumas += typesof(/datum/brain_trauma/very_special) // SKYRAT EDIT ADDITION - No very special (lewd) quirks gained by inverse neurine
+ forbiddentraumas += typesof(/datum/brain_trauma/very_special) // NOVA EDIT ADDITION - No very special (lewd) quirks gained by inverse neurine
traumalist -= forbiddentraumas
var/obj/item/organ/internal/brain/brain = affected_mob.get_organ_slot(ORGAN_SLOT_BRAIN)
traumalist = shuffle(traumalist)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 4f3ff1c2867..4fd6e42d12f 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1,5 +1,5 @@
/datum/reagent/blood
- data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null, "monkey_origins" = FALSE) // SKYRAT EDIT - Rebalancing blood for Hemophages - ORIGINAL: data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null)
+ data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null, "monkey_origins" = FALSE) // NOVA EDIT - Rebalancing blood for Hemophages - ORIGINAL: data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null)
name = "Blood"
color = "#C80000" // rgb: 200, 0, 0
metabolization_rate = 12.5 * REAGENTS_METABOLISM //fast rate so it disappears fast.
@@ -64,14 +64,14 @@
if(!data || !(data["blood_type"] in get_safe_blood(exposed_carbon.dna.blood_type)))
exposed_carbon.reagents.add_reagent(/datum/reagent/toxin, reac_volume * 0.5)
else
- /* SKYRAT EDIT - Rebalancing blood for Hemophages - ORIGINAL:
+ /* NOVA EDIT - Rebalancing blood for Hemophages - ORIGINAL:
exposed_carbon.blood_volume = min(exposed_carbon.blood_volume + round(reac_volume, 0.1), BLOOD_VOLUME_MAXIMUM)
- */ // ORIGINAL END - SKYRAT EDIT:
+ */ // ORIGINAL END - NOVA EDIT:
// We do a max() here so that being injected with monkey blood when you're past 560u doesn't reset you back to 560
var/max_blood_volume = data["monkey_origins"] ? max(exposed_carbon.blood_volume, BLOOD_VOLUME_NORMAL) : BLOOD_VOLUME_MAXIMUM
exposed_carbon.blood_volume = min(exposed_carbon.blood_volume + round(reac_volume, 0.1), max_blood_volume)
- // SKYRAT EDIT END
+ // NOVA EDIT END
exposed_carbon.reagents.remove_reagent(type, reac_volume) // Because we don't want blood to just lie around in the patient's blood, makes no sense.
@@ -197,7 +197,7 @@
var/cooling_temperature = 2
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_CLEANS
default_container = /obj/item/reagent_containers/cup/glass/waterbottle
- evaporates = TRUE //SKYRAT EDIT ADDITION
+ evaporates = TRUE //NOVA EDIT ADDITION
/datum/glass_style/shot_glass/water
required_drink_type = /datum/reagent/water
@@ -285,7 +285,7 @@
if(methods & VAPOR)
exposed_mob.adjust_wet_stacks(reac_volume * WATER_TO_WET_STACKS_FACTOR_VAPOR) // Spraying someone with water with the hope to put them out is just simply too funny to me not to add it.
- if(!isfeline(exposed_mob)) // SKYRAT EDIT - Feline trait :) - ORIGINAL: if(!isfelinid(exposed_mob))
+ if(!isfeline(exposed_mob)) // NOVA EDIT - Feline trait :) - ORIGINAL: if(!isfelinid(exposed_mob))
return
exposed_mob.incapacitate(1) // startles the felinid, canceling any do_after
@@ -506,7 +506,7 @@
/datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- . = ..()
+
var/need_mob_update = FALSE
if(IS_CULTIST(affected_mob))
affected_mob.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick)
@@ -749,7 +749,7 @@
if(current_cycle >= CYCLES_TO_TURN)
var/datum/species/species_type = race
//affected_mob.set_species(species_type) //ORIGINAL
- affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION
holder.del_reagent(type)
to_chat(affected_mob, span_warning("You've become \a [lowertext(initial(species_type.name))]!"))
return
@@ -813,13 +813,13 @@
to_chat(affected_mob, span_warning("Your jelly shifts and morphs, turning you into another subspecies!"))
var/species_type = pick(subtypesof(/datum/species/jelly))
//affected_mob.set_species(species_type) //ORIGINAL
- affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION
holder.del_reagent(type)
return UPDATE_MOB_HEALTH
if(current_cycle >= CYCLES_TO_TURN) //overwrite since we want subtypes of jelly
var/datum/species/species_type = pick(subtypesof(race))
//affected_mob.set_species(species_type) //ORIGINAL
- affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //SKYRAT EDIT CHANGE - CUSTOMIZATION
+ affected_mob.set_species(species_type, TRUE, FALSE, null, null, null, null, TRUE, TRUE) //NOVA EDIT CHANGE - CUSTOMIZATION
holder.del_reagent(type)
to_chat(affected_mob, span_warning("You've become \a [initial(species_type.name)]!"))
return UPDATE_MOB_HEALTH
@@ -1028,7 +1028,7 @@
/datum/reagent/mercury/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && !isspaceturf(affected_mob.loc))
+ if(!HAS_TRAIT(src, TRAIT_IMMOBILIZED) && isturf(affected_mob.loc) && !isgroundlessturf(affected_mob.loc))
step(affected_mob, pick(GLOB.cardinals))
if(SPT_PROB(3.5, seconds_per_tick))
affected_mob.emote(pick("twitch","drool","moan"))
@@ -1140,7 +1140,7 @@
/datum/reagent/lithium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
- if(!HAS_TRAIT(affected_mob, TRAIT_IMMOBILIZED) && !isspaceturf(affected_mob.loc) && isturf(affected_mob.loc))
+ if(!HAS_TRAIT(affected_mob, TRAIT_IMMOBILIZED) && isturf(affected_mob.loc) && !isgroundlessturf(affected_mob.loc))
step(affected_mob, pick(GLOB.cardinals))
if(SPT_PROB(2.5, seconds_per_tick))
affected_mob.emote(pick("twitch","drool","moan"))
@@ -2572,7 +2572,7 @@
if(target.mind)
var/datum/antagonist/changeling/changeling = target.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
- changeling.adjust_chemicals(-4 * REM * seconds_per_tick) //SKYRAT EDIT - BZ-BUFF-VS-LING - ORIGINAL: changeling.adjust_chemicals(-2 * REM * seconds_per_tick)
+ changeling.adjust_chemicals(-4 * REM * seconds_per_tick) //NOVA EDIT - BZ-BUFF-VS-LING - ORIGINAL: changeling.adjust_chemicals(-2 * REM * seconds_per_tick)
/datum/reagent/pax/peaceborg
name = "Synthpax"
@@ -2751,7 +2751,7 @@
return
var/metal_amount = 0
- var/list/materials_to_transmute = target.get_material_composition(BREAKDOWN_INCLUDE_ALCHEMY)
+ var/list/materials_to_transmute = target.get_material_composition()
for(var/metal_key in materials_to_transmute) //list with what they're made of
metal_amount += materials_to_transmute[metal_key]
@@ -2761,7 +2761,6 @@
var/list/metal_dat = list((metal_ref) = metal_amount)
target.material_flags = applied_material_flags
target.set_custom_materials(metal_dat)
- ADD_TRAIT(target, TRAIT_MAT_TRANSMUTED, type)
/datum/reagent/gravitum
name = "Gravitum"
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index 9342ce11b6e..c7732e0908a 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -60,28 +60,6 @@
///A bitflag var for tagging reagents for the reagent loopup functon
var/reaction_tags = NONE
- //SKYRAT EDIT ADDITION
- ///If defined, it'll emitt that pollutant on reaction
- var/pollutant_type
- ///How much amount per volume of the pollutant shall we emitt if `pollutant_type` is defined
- var/pollutant_amount = 1
- //SKYRAT EDIT END
-
-/datum/chemical_reaction/New()
- . = ..()
- SSticker.OnRoundstart(CALLBACK(src, PROC_REF(update_info)))
-
-/**
- * Updates information during the roundstart
- *
- * This proc is mainly used by explosives but can be used anywhere else
- * You should generally use the special reactions in [/datum/chemical_reaction/randomized]
- * But for simple variable edits, like changing the temperature or adding/subtracting required reagents it is better to use this.
- */
-/datum/chemical_reaction/proc/update_info()
- return
-
-
///REACTION PROCS
/**
@@ -189,7 +167,8 @@
var/datum/reagent/reagent = holder.has_reagent(id)
if(!reagent)
return
- reagent.volume = round((reagent.volume * 0.98), CHEMICAL_QUANTISATION_LEVEL) //Slowly lower yield per tick
+ reagent.volume *= 0.98 //Slowly lower yield per tick
+ holder.update_total()
/**
* Occurs when a reation is too impure (i.e. it's below purity_min)
diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm
index 130e1c2830f..5dc970ec8aa 100644
--- a/code/modules/reagents/chemistry/recipes/medicine.dm
+++ b/code/modules/reagents/chemistry/recipes/medicine.dm
@@ -9,10 +9,10 @@
rate_up_lim = 35
reaction_tags = REACTION_TAG_HEALING | REACTION_TAG_EASY
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
pollutant_type = /datum/pollutant/chemical_vapors
pollutant_amount = 0.2
- //SKYRAT EDIT END
+ //NOVA EDIT END
/datum/chemical_reaction/medicine/leporazine
results = list(/datum/reagent/medicine/leporazine = 2)
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index f1fb70faf38..8e74b0ad6f8 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -15,7 +15,7 @@
/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
- if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL)))
+ if(holder.has_reagent(/datum/reagent/exotic_stabilizer, created_volume / 25))
return
holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume * 2)
..()
@@ -77,11 +77,12 @@
required_temp = 450
strengthdiv = 3
-/datum/chemical_reaction/reagent_explosion/tatp/update_info()
- required_temp = 450 + rand(-49,49) //this gets loaded only on round start
+/datum/chemical_reaction/reagent_explosion/tatp/New()
+ . = ..()
+ required_temp = 450 + rand(-49, 49)
/datum/chemical_reaction/reagent_explosion/tatp/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
- if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 50, CHEMICAL_QUANTISATION_LEVEL))) // we like exotic stabilizer
+ if(holder.has_reagent(/datum/reagent/exotic_stabilizer, created_volume / 50)) // we like exotic stabilizer
return
holder.remove_reagent(/datum/reagent/tatp, created_volume)
..()
@@ -93,12 +94,12 @@
/datum/chemical_reaction/reagent_explosion/tatp_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/strengthdiv_adjust = created_volume / ( 2100 / initial(strengthdiv))
- strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5 ,1.5) //Slightly better than nitroglycerin
- . = ..()
- return
+ strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5, 1.5) //Slightly better than nitroglycerin
+ return ..()
-/datum/chemical_reaction/reagent_explosion/tatp_explosion/update_info()
- required_temp = 550 + rand(-49,49)
+/datum/chemical_reaction/reagent_explosion/tatp_explosion/New()
+ . = ..()
+ required_temp = 550 + rand(-49, 49)
/datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine
required_reagents = list(/datum/reagent/medicine/c2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index d58df6a1d6b..1344fa31cb9 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -240,14 +240,14 @@
log_combat(thrown_by, M, "splashed", R)
reagents.expose(target, TOUCH, splash_multiplier)
reagents.expose(target_turf, TOUCH, (1 - splash_multiplier)) // 1 - splash_multiplier because it's what didn't hit the target
- target_turf.add_liquid_from_reagents(reagents, reagent_multiplier = (1 - splash_multiplier)) // SKYRAT EDIT ADDITION - liquid spills (molotov buff) (huge)
+ target_turf.add_liquid_from_reagents(reagents, reagent_multiplier = (1 - splash_multiplier)) // NOVA EDIT ADDITION - liquid spills (molotov buff) (huge)
else if(bartender_check(target) && thrown)
visible_message(span_notice("[src] lands onto the [target.name] without spilling a single drop."))
return
else
- //SKYRAT EDIT CHANGE START - liquid spills on non-mobs
+ //NOVA EDIT CHANGE START - liquid spills on non-mobs
if(target.can_liquid_spill_on_hit())
target.add_liquid_from_reagents(reagents, thrown_from = src, thrown_to = target)
if(reagents.reagent_list.len && thrown_by)
@@ -256,9 +256,9 @@
message_admins("[ADMIN_LOOKUPFLW(thrown_by)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].")
else
reagents.expose(target, TOUCH)
- //SKYRAT EDIT END
+ //NOVA EDIT END
visible_message("[src] spills its contents all over [target]. ")
- //reagents.expose(target, TOUCH) //SKYRAT EDIT REMOVAL
+ //reagents.expose(target, TOUCH) //NOVA EDIT REMOVAL
if(QDELETED(src))
return
diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm
index ca941be8ca1..ebc224fb18f 100644
--- a/code/modules/reagents/reagent_containers/condiment.dm
+++ b/code/modules/reagents/reagent_containers/condiment.dm
@@ -63,7 +63,7 @@
span_warning("[user] fed you from [src]."))
log_combat(user, M, "fed", reagents.get_reagent_log_string())
- SEND_SIGNAL(M, COMSIG_GLASS_DRANK, src, user) // SKYRAT EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood
+ SEND_SIGNAL(M, COMSIG_GLASS_DRANK, src, user) // NOVA EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood
reagents.trans_to(M, 10, transferred_by = user, methods = INGEST)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
return TRUE
diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm
index 70ad6ca5fdc..c8aa790fa15 100644
--- a/code/modules/reagents/reagent_containers/cups/_cup.dm
+++ b/code/modules/reagents/reagent_containers/cups/_cup.dm
@@ -84,7 +84,7 @@
to_chat(user, span_notice("You swallow a gulp of [src]."))
SEND_SIGNAL(src, COMSIG_GLASS_DRANK, target_mob, user)
- SEND_SIGNAL(target_mob, COMSIG_GLASS_DRANK, src, user) // SKYRAT EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood
+ SEND_SIGNAL(target_mob, COMSIG_GLASS_DRANK, src, user) // NOVA EDIT ADDITION - Hemophages can't casually drink what's not going to regenerate their blood
var/fraction = min(gulp_size/reagents.total_volume, 1)
reagents.trans_to(target_mob, gulp_size, transferred_by = user, methods = INGEST)
checkLiked(fraction, target_mob)
@@ -219,7 +219,7 @@
/obj/item/reagent_containers/cup/beaker
name = "beaker"
- desc = "A beaker. It can hold up to 60 units." //SKYRAT EDIT: Used to say can hold up to 50 units.
+ desc = "A beaker. It can hold up to 60 units." //NOVA EDIT: Used to say can hold up to 50 units.
icon = 'icons/obj/medical/chemical.dmi'
icon_state = "beaker"
inhand_icon_state = "beaker"
@@ -228,8 +228,8 @@
worn_icon_state = "beaker"
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*5)
fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100)
- volume = 60 //SKYRAT EDIT: Addition
- possible_transfer_amounts = list(5,10,15,20,30,60) //SKYRAT EDIT: Addition
+ volume = 60 //NOVA EDIT: Addition
+ possible_transfer_amounts = list(5,10,15,20,30,60) //NOVA EDIT: Addition
/obj/item/reagent_containers/cup/beaker/Initialize(mapload)
. = ..()
@@ -246,24 +246,24 @@
/obj/item/reagent_containers/cup/beaker/large
name = "large beaker"
- desc = "A large beaker. Can hold up to 120 units." //SKYRAT EDIT: Used to say Can hold up to 100 units.
+ desc = "A large beaker. Can hold up to 120 units." //NOVA EDIT: Used to say Can hold up to 100 units.
icon_state = "beakerlarge"
custom_materials = list(/datum/material/glass= SHEET_MATERIAL_AMOUNT*1.25)
- volume = 120 //SKYRAT EDIT: Original value (100)
+ volume = 120 //NOVA EDIT: Original value (100)
amount_per_transfer_from_this = 10
- //possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //SKYRAT EDIT: Original Values
- possible_transfer_amounts = list(5,10,15,20,30,40,60,120) //SKYRAT EDIT: New Values
+ //possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //NOVA EDIT: Original Values
+ possible_transfer_amounts = list(5,10,15,20,30,40,60,120) //NOVA EDIT: New Values
fill_icon_thresholds = list(0, 1, 20, 40, 60, 80, 100)
/obj/item/reagent_containers/cup/beaker/plastic
name = "x-large beaker"
- desc = "An extra-large beaker. Can hold up to 150 units." //SKYRAT EDIT: Used to say Can hold up to 120 units
+ desc = "An extra-large beaker. Can hold up to 150 units." //NOVA EDIT: Used to say Can hold up to 120 units
icon_state = "beakerwhite"
custom_materials = list(/datum/material/glass=SHEET_MATERIAL_AMOUNT*1.25, /datum/material/plastic=SHEET_MATERIAL_AMOUNT * 1.5)
- volume = 150 //SKYRAT EDIT: Original Value (120)
+ volume = 150 //NOVA EDIT: Original Value (120)
amount_per_transfer_from_this = 10
- //possible_transfer_amounts = list(5,10,15,20,25,30,60,120) //SKYRAT EDIT: Original values
- possible_transfer_amounts = list(5,10,15,20,25,30,50,75,150) //SKYRAT EDIT: New Values
+ //possible_transfer_amounts = list(5,10,15,20,25,30,60,120) //NOVA EDIT: Original values
+ possible_transfer_amounts = list(5,10,15,20,25,30,50,75,150) //NOVA EDIT: New Values
fill_icon_thresholds = list(0, 1, 10, 20, 40, 60, 80, 100)
/obj/item/reagent_containers/cup/beaker/meta
@@ -348,7 +348,7 @@
/obj/item/reagent_containers/cup/bucket
name = "bucket"
- desc = "It's a bucket. You can squeeze a mop's contents into it by using right-click." //SKYRAT EDIT CHANGE - ORIGINAL: desc = "It's a bucket."
+ desc = "It's a bucket. You can squeeze a mop's contents into it by using right-click." //NOVA EDIT CHANGE - ORIGINAL: desc = "It's a bucket."
icon = 'icons/obj/service/janitor.dmi'
worn_icon = 'icons/mob/clothing/head/utility.dmi'
icon_state = "bucket"
@@ -360,8 +360,8 @@
custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 2)
w_class = WEIGHT_CLASS_NORMAL
amount_per_transfer_from_this = 20
- possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //SKYRAT EDIT CHANGE
- volume = 100 //SKYRAT EDIT CHANGE
+ possible_transfer_amounts = list(5,10,15,20,25,30,50,100) //NOVA EDIT CHANGE
+ volume = 100 //NOVA EDIT CHANGE
flags_inv = HIDEHAIR
slot_flags = ITEM_SLOT_HEAD
resistance_flags = NONE
@@ -394,7 +394,7 @@
melee = 10
acid = 50
-// SKYRAT EDIT CHANGE START - LIQUIDS
+// NOVA EDIT CHANGE START - LIQUIDS
/* Original
/obj/item/reagent_containers/cup/bucket/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/mop))
@@ -433,7 +433,7 @@
var/obj/item/bot_assembly/cleanbot/new_cleanbot_ass = new(null, src)
user.put_in_hands(new_cleanbot_ass)
return
-// SKYRAT EDIT CHANGE END - LIQUIDS
+// NOVA EDIT CHANGE END - LIQUIDS
/obj/item/reagent_containers/cup/bucket/equipped(mob/user, slot)
. = ..()
diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm
index f8948ae6eea..12a3d023c72 100644
--- a/code/modules/reagents/reagent_containers/cups/drinks.dm
+++ b/code/modules/reagents/reagent_containers/cups/drinks.dm
@@ -15,7 +15,8 @@
/obj/item/reagent_containers/cup/glass/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum, do_splash = TRUE)
. = ..()
if(!.) //if the bottle wasn't caught
- smash(hit_atom, throwingdatum?.thrower, TRUE)
+ var/mob/thrower = throwingdatum?.get_thrower()
+ smash(hit_atom, thrower, TRUE)
/obj/item/reagent_containers/cup/glass/proc/smash(atom/target, mob/thrower, ranged = FALSE, break_top = FALSE)
if(!isGlass)
@@ -314,9 +315,9 @@
return
if(prob(flip_chance)) // landed upright
src.visible_message(span_notice("[src] lands upright!"))
- if(throwingdatum.thrower)
- var/mob/living/living_thrower = throwingdatum.thrower
- living_thrower.add_mood_event("bottle_flip", /datum/mood_event/bottle_flip)
+ var/mob/living/thrower = throwingdatum?.get_thrower()
+ if(thrower)
+ thrower.add_mood_event("bottle_flip", /datum/mood_event/bottle_flip)
else // landed on it's side
animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0)
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 0c9107ab19a..af246ae6e67 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -17,6 +17,8 @@
var/infinite = FALSE
/// If TRUE, won't play a noise when injecting.
var/stealthy = FALSE
+ /// If TRUE, the hypospray will be permanently unusable.
+ var/used_up = FALSE
/obj/item/reagent_containers/hypospray/attack_paw(mob/user, list/modifiers)
return attack_hand(user, modifiers)
@@ -26,8 +28,8 @@
///Handles all injection checks, injection and logging.
/obj/item/reagent_containers/hypospray/proc/inject(mob/living/affected_mob, mob/user)
- if(!reagents.total_volume)
- to_chat(user, span_warning("[src] is empty!"))
+ if(used_up)
+ to_chat(user, span_warning("[src] tip is broken and is now unusable!"))
return FALSE
if(!iscarbon(affected_mob))
return FALSE
@@ -39,7 +41,7 @@
var/contained = english_list(injected)
log_combat(user, affected_mob, "attempted to inject", src, "([contained])")
- if(reagents.total_volume && (ignore_flags || affected_mob.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))) // Ignore flag should be checked first or there will be an error message.
+ if(!used_up && (ignore_flags || affected_mob.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))) // Ignore flag should be checked first or there will be an error message.
to_chat(affected_mob, span_warning("You feel a tiny prick!"))
to_chat(user, span_notice("You inject [affected_mob] with [src]."))
if(!stealthy)
@@ -134,8 +136,8 @@
/obj/item/reagent_containers/hypospray/medipen/inject(mob/living/affected_mob, mob/user)
. = ..()
- if(.)
- reagents.maximum_volume = 0 //Makes them useless afterwards
+ if(. && !reagents.total_volume)
+ used_up = TRUE //Makes them useless afterwards
reagents.flags = NONE
update_appearance()
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index c8efeee6790..14b7abaaa9a 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -74,10 +74,10 @@
. = ..()
if(. && atom_integrity > 0)
if(tank_volume && (damage_flag == BULLET || damage_flag == LASER))
- //SKYRAT EDIT CHANGE
+ //NOVA EDIT CHANGE
var/guaranteed_violent = (damage_flag == BULLET || damage_flag == LASER)
boom(damage_type, guaranteed_violent)
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
if(W.is_refillable())
@@ -159,7 +159,7 @@
* This is most dangerous for fuel tanks, which will explosion().
* Other dispensers will scatter their contents within range.
*/
-/obj/structure/reagent_dispensers/proc/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE
+/obj/structure/reagent_dispensers/proc/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE
if(QDELETED(src))
return // little bit of sanity sauce before we wreck ourselves somehow
var/datum/reagent/fuel/volatiles = reagents.has_reagent(/datum/reagent/fuel)
@@ -243,7 +243,7 @@
icon_state = "water_high" //I was gonna clean my room...
tank_volume = 3000
-/obj/structure/reagent_dispensers/foamtank//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/reagent_dispensers/foamtank//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "firefighting foam tank"
desc = "A tank full of firefighting foam."
icon_state = "foam"
@@ -251,7 +251,7 @@
tank_volume = 500
openable = TRUE
-/obj/structure/reagent_dispensers/fueltank//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/reagent_dispensers/fueltank//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "fuel tank"
desc = "A tank full of industrial welding fuel. Do not consume."
icon_state = "fuel"
@@ -265,33 +265,33 @@
if(check_holidays(APRIL_FOOLS))
icon_state = "fuel_fools"
-/obj/structure/reagent_dispensers/fueltank/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE
+/obj/structure/reagent_dispensers/fueltank/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE
if(damage_type == BURN || guaranteed_violent)
explosion(src, heavy_impact_range = 1, light_impact_range = 5, flame_range = 5)
qdel(src)
else
. = ..()
- //SKYRAT EDIT END
+ //NOVA EDIT END
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B)
- boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE
/obj/structure/reagent_dispensers/fueltank/ex_act()
- boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE
return TRUE
/obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume)
- boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE
/obj/structure/reagent_dispensers/fueltank/zap_act(power, zap_flags)
. = ..() //extend the zap
if(ZAP_OBJ_DAMAGE & zap_flags)
- boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE
/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/projectile/hitting_projectile)
if(hitting_projectile.damage > 0 && ((hitting_projectile.damage_type == BURN) || (hitting_projectile.damage_type == BRUTE)))
log_bomber(hitting_projectile.firer, "detonated a", src, "via projectile")
- boom(guaranteed_violent = TRUE) // SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) // NOVA EDIT CHANGE
return hitting_projectile.on_hit(src, 0)
// we override parent like this because otherwise we won't actually properly log the fact that a projectile caused this welding tank to explode.
@@ -315,7 +315,7 @@
else
user.visible_message(span_danger("[user] catastrophically fails at refilling [user.p_their()] [I.name]!"), span_userdanger("That was stupid of you."))
log_bomber(user, "detonated a", src, "via welding tool")
- boom(guaranteed_violent = TRUE) //SKYRAT EDIT CHANGE
+ boom(guaranteed_violent = TRUE) //NOVA EDIT CHANGE
return
return ..()
@@ -326,13 +326,13 @@
icon_state = "fuel_high"
tank_volume = 5000
-/obj/structure/reagent_dispensers/fueltank/large/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //SKYRAT EDIT CHANGE
+/obj/structure/reagent_dispensers/fueltank/large/boom(damage_type = BRUTE, guaranteed_violent = FALSE) //NOVA EDIT CHANGE
if(damage_type == BURN || guaranteed_violent)
explosion(src, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 7, flame_range = 12)
qdel(src)
else
. = ..()
- //SKYRAT EDIT END
+ //NOVA EDIT END
/// Wall mounted dispeners, like pepper spray or virus food. Not a normal tank, and shouldn't be able to be turned into a plumbed stationary one.
/obj/structure/reagent_dispensers/wall
@@ -354,7 +354,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/peppertank, 3
desc = "IT'S PEPPER TIME, BITCH!"
find_and_hang_on_wall()
-/obj/structure/reagent_dispensers/water_cooler//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/reagent_dispensers/water_cooler//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "liquid cooler"
desc = "A machine that dispenses liquid to drink."
icon = 'icons/obj/machines/vending.dmi'
@@ -424,7 +424,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/reagent_dispensers/wall/virusfood, 30
anchored = TRUE
reagent_id = /datum/reagent/consumable/nutraslop
-/obj/structure/reagent_dispensers/plumbed//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/structure/reagent_dispensers/plumbed//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "stationary water tank"
anchored = TRUE
icon_state = "water_stationary"
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 123d81501fa..cc0b100a1c0 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -3,7 +3,7 @@
#define SEND_PRESSURE (0.05*ONE_ATMOSPHERE)
/obj/machinery/disposal
- icon = 'icons/obj/pipes_n_cables/disposal.dmi' //SKYRAT EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
+ icon = 'icons/obj/pipes_n_cables/disposal.dmi' //NOVA EDIT CHANGE - ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE
density = TRUE
armor_type = /datum/armor/machinery_disposal
max_integrity = 200
@@ -386,7 +386,8 @@
/obj/machinery/disposal/bin/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(isitem(AM) && AM.CanEnterDisposals())
- if((throwingdatum.thrower && HAS_TRAIT(throwingdatum.thrower, TRAIT_THROWINGARM)) || prob(75))
+ var/mob/thrower = throwingdatum?.get_thrower()
+ if((thrower && HAS_TRAIT(thrower, TRAIT_THROWINGARM)) || prob(75))
AM.forceMove(src)
visible_message(span_notice("[AM] lands in [src]."))
update_appearance()
diff --git a/code/modules/requests/request_manager.dm b/code/modules/requests/request_manager.dm
index 41e46aa53c2..dd6d8d42a48 100644
--- a/code/modules/requests/request_manager.dm
+++ b/code/modules/requests/request_manager.dm
@@ -25,7 +25,7 @@ GLOBAL_DATUM_INIT(requests, /datum/request_manager, new)
/// List where requests can be accessed by ID
var/list/requests_by_id = list()
-/datum/request_manager/Destroy(force, ...)
+/datum/request_manager/Destroy(force)
QDEL_LIST(requests)
return ..()
diff --git a/code/modules/research/designs/autolathe/security_designs.dm b/code/modules/research/designs/autolathe/security_designs.dm
index c3a0a082d28..7b2fa09bc0f 100644
--- a/code/modules/research/designs/autolathe/security_designs.dm
+++ b/code/modules/research/designs/autolathe/security_designs.dm
@@ -223,8 +223,8 @@
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/c9mm
-// name = "Ammo Box (9mm)" //SKYRAT EDIT: Original
- name = "Ammo Box (9x25mm Mk.12) (Lethal)" //SKYRAT EDIT: Calibre rename
+// name = "Ammo Box (9mm)" //NOVA EDIT: Original
+ name = "Ammo Box (9x25mm Mk.12) (Lethal)" //NOVA EDIT: Calibre rename
id = "c9mm"
build_type = AUTOLATHE
materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT * 300)
diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm
index 62fd0e7c9e5..867f96e4db5 100644
--- a/code/modules/research/designs/bluespace_designs.dm
+++ b/code/modules/research/designs/bluespace_designs.dm
@@ -50,7 +50,7 @@
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE
)
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
- //autolathe_exportable = FALSE //SKYRAT EDIT REMOVAL
+ //autolathe_exportable = FALSE //NOVA EDIT REMOVAL
/datum/design/desynchronizer
name = "Desynchronizer"
diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm
index 44551c9892a..11e6f026f68 100644
--- a/code/modules/research/designs/machine_designs.dm
+++ b/code/modules/research/designs/machine_designs.dm
@@ -661,7 +661,7 @@
category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SECURITY
)
- departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
+ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY
/datum/design/board/vendor
name = "Vendor Board"
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 8c1bfa246a7..38d9f1700cb 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -1,6 +1,6 @@
//Cyborg
-/* //SKYRAT EDIT REMOVAL BEGIN - Costs lowered and time reduced -
+/* //NOVA EDIT REMOVAL BEGIN - Costs lowered and time reduced -
/datum/design/borg_suit
name = "Cyborg Endoskeleton"
id = "borg_suit"
@@ -77,7 +77,7 @@
category = list(
RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS
)
-*///SKYRAT EDIT REMOVAL END
+*///NOVA EDIT REMOVAL END
//Advanced Robotic Limbs
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 150c69bc21f..9f83ae957ee 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -352,7 +352,7 @@
desc = "A portable, foldable version of the medical bed. Perfect for paramedics or whenever you have mass casualties!"
id = "medicalbed_emergency"
build_type = PROTOLATHE | AWAY_LATHE
- materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5)
+ materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2.7, /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 1.7)
build_path = /obj/item/emergency_bed
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm
index ea617f36428..80844562eb4 100644
--- a/code/modules/research/designs/power_designs.dm
+++ b/code/modules/research/designs/power_designs.dm
@@ -77,7 +77,19 @@
category = list(
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING
)
- departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
+ departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
+
+/datum/design/inducerengi
+ name = "Inducer"
+ desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them."
+ id = "inducerengi"
+ build_type = PROTOLATHE | AWAY_LATHE
+ materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT)
+ build_path = /obj/item/inducer/empty
+ category = list(
+ RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
/datum/design/board/pacman
name = "PACMAN Board"
diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm
index 5783ee36082..3606dd67e2e 100644
--- a/code/modules/research/designs/wiremod_designs.dm
+++ b/code/modules/research/designs/wiremod_designs.dm
@@ -357,15 +357,10 @@
id = "comp_pinpointer"
build_path = /obj/item/circuit_component/pinpointer
-/datum/design/component/bci
- category = list(
- RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_BCI_COMPONENTS
- )
-
-/datum/design/component/bci/bci_action
- name = "BCI Action Component"
- id = "comp_bci_action"
- build_path = /obj/item/circuit_component/equipment_action/bci
+/datum/design/component/equipment_action
+ name = "Equipment Action Component"
+ id = "comp_equip_action"
+ build_path = /obj/item/circuit_component/equipment_action
/datum/design/component/bci/object_overlay
name = "Object Overlay Component"
@@ -417,11 +412,6 @@
id = "comp_filter_list"
build_path = /obj/item/circuit_component/filter_list
-/datum/design/component/mod_action
- name = "MOD Action Component"
- id = "comp_mod_action"
- build_path = /obj/item/circuit_component/equipment_action/mod
-
/datum/design/component/id_getter
name = "ID Getter Component"
id = "comp_id_getter"
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 404a953595d..a1bf7cfa775 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -17,7 +17,7 @@
#define EFFECT_PROB_VERYHIGH 95
#define FAIL 8
-/obj/machinery/rnd/experimentor//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/machinery/rnd/experimentor//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "\improper E.X.P.E.R.I-MENTOR"
desc = "A \"replacement\" for the destructive analyzer with a slight tendency to catastrophically fail."
icon = 'icons/obj/machines/experimentator.dmi'
diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm
index b71bc1d025f..0b3924827fd 100644
--- a/code/modules/research/machinery/_production.dm
+++ b/code/modules/research/machinery/_production.dm
@@ -32,11 +32,8 @@
. = ..()
cached_designs = list()
- materials = AddComponent(
- /datum/component/remote_materials, \
- mapload, \
- mat_container_flags = BREAKDOWN_FLAGS_LATHE, \
- )
+ materials = AddComponent(/datum/component/remote_materials, mapload)
+
AddComponent(
/datum/component/payment, \
0, \
diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm
index 9fbaa28c953..a4874876ba2 100644
--- a/code/modules/research/machinery/departmental_protolathe.dm
+++ b/code/modules/research/machinery/departmental_protolathe.dm
@@ -47,5 +47,5 @@
name = "department protolathe (Security)"
allowed_department_flags = DEPARTMENT_BITFLAG_SECURITY
circuit = /obj/item/circuitboard/machine/protolathe/department/security
- stripe_color = "#486091" //SKYRAT EDIT - ORIGINAL "#DE3A3A"
+ stripe_color = "#486091" //NOVA EDIT - ORIGINAL "#DE3A3A"
payment_department = ACCOUNT_SEC
diff --git a/code/modules/research/machinery/departmental_techfab.dm b/code/modules/research/machinery/departmental_techfab.dm
index 339c98a6222..1217db146a5 100644
--- a/code/modules/research/machinery/departmental_techfab.dm
+++ b/code/modules/research/machinery/departmental_techfab.dm
@@ -43,5 +43,5 @@
name = "department techfab (Security)"
allowed_department_flags = DEPARTMENT_BITFLAG_SECURITY
circuit = /obj/item/circuitboard/machine/techfab/department/security
- stripe_color = "#486091" //SKYRAT EDIT - ORIGINAL "#DE3A3A"
+ stripe_color = "#486091" //NOVA EDIT - ORIGINAL "#DE3A3A"
payment_department = ACCOUNT_SEC
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index 8489e9c7473..8e19be9418e 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -1,7 +1,7 @@
/*Power cells are in code\modules\power\cell.dm
If you create T5+ please take a pass at mech_fabricator.dm. The parts being good enough allows it to go into minus values and create materials out of thin air when printing stuff.*/
-/obj/item/storage/part_replacer//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/storage/part_replacer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "rapid part exchange device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
icon_state = "RPED"
@@ -69,7 +69,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
else
playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, TRUE)
-/obj/item/storage/part_replacer/bluespace//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/storage/part_replacer/bluespace//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "bluespace rapid part exchange device"
desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts."
icon_state = "BS_RPED"
@@ -195,7 +195,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good
new /obj/item/stock_parts/micro_laser(src)
new /obj/item/stock_parts/matter_bin(src)
-/obj/item/storage/part_replacer/cyborg //SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
+/obj/item/storage/part_replacer/cyborg //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "rapid part exchange device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts. This one has an extra large compartment for more parts."
icon_state = "borgrped"
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 733cd707578..c0041aae7d7 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -129,7 +129,6 @@
"universal_scanner",
"voice_analyzer",
"watering_can",
- "gbp_machine", // SKYRAT EDIT ADDITION
)
experiments_to_unlock = list(
/datum/experiment/autopsy/nonhuman,
@@ -854,7 +853,7 @@
design_ids = list(
"assembly_shell",
"bot_shell",
- "comp_mod_action",
+ "comp_equip_action",
"controller_shell",
"dispenser_shell",
"door_shell",
@@ -876,7 +875,6 @@
"bci_implanter",
"bci_shell",
"comp_bar_overlay",
- "comp_bci_action",
"comp_counter_overlay",
"comp_install_detector",
"comp_object_overlay",
@@ -1115,6 +1113,7 @@
"holosignrestaurant",
"holosignbar",
"inducer",
+ "inducerengi",
"tray_goggles",
"holopad",
"vendatray",
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
index 8d849c36569..23daa833838 100644
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ b/code/modules/research/xenobiology/crossbreeding/burning.dm
@@ -36,7 +36,7 @@ Burning extracts:
new_slime.visible_message(span_danger("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!"))
new_slime.set_friendship(user, 20) //Gas, gas, gas
new_slime.bodytemperature = T0C + 400 //We gonna step on the gas.
- new_slime.set_nutrition(new_slime.get_hunger_nutrition()) //Tonight, we fight!
+ new_slime.set_nutrition(new_slime.hunger_nutrition) //Tonight, we fight!
..()
/obj/item/slimecross/burning/orange
diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
index eb49f5dc2c3..ad5750de9ff 100644
--- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm
+++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
@@ -53,7 +53,7 @@ Stabilized extracts:
if (holder.has_status_effect(effectpath))
return
holder.apply_status_effect(effectpath, src)
- STOP_PROCESSING(SSobj,src)
+ return PROCESS_KILL
//Colors and subtypes:
/obj/item/slimecross/stabilized/grey
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 70be6275763..8ebfc5719f6 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -73,7 +73,7 @@
if(target_slime.stat)
to_chat(user, span_warning("The slime is dead!"))
return
- if(!target_slime.is_adult)
+ if(target_slime.life_stage != SLIME_LIFE_STAGE_ADULT)
to_chat(user, span_warning("The slime must be an adult to cross its core!"))
return
if(target_slime.crossbreed_modification && target_slime.crossbreed_modification != crossbreed_modification)
@@ -804,22 +804,22 @@
icon = 'icons/obj/medical/chemical.dmi'
icon_state = "potred"
-/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))//If target is not a slime.
+/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/target, mob/user)
+ if(!isslime(target))//If target is not a slime.
to_chat(user, span_warning("The steroid only works on baby slimes!"))
return ..()
- if(M.is_adult) //Can't steroidify adults
+ if(target.life_stage == SLIME_LIFE_STAGE_ADULT) //Can't steroidify adults
to_chat(user, span_warning("Only baby slimes can use the steroid!"))
return
- if(M.stat)
+ if(target.stat)
to_chat(user, span_warning("The slime is dead!"))
return
- if(M.cores >= 5)
+ if(target.cores >= 5)
to_chat(user, span_warning("The slime already has the maximum amount of extract!"))
return
to_chat(user, span_notice("You feed the slime the steroid. It will now produce one more extract."))
- M.cores++
+ target.cores++
qdel(src)
/obj/item/slimepotion/enhancer
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 33bbdd76f29..a3cda3fda0f 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -3,8 +3,8 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
#define KEYCARD_RED_ALERT "Red Alert"
#define KEYCARD_EMERGENCY_MAINTENANCE_ACCESS "Emergency Maintenance Access"
#define KEYCARD_BSA_UNLOCK "Bluespace Artillery Unlock"
-#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //SKYRAT EDIT
-#define KEYCARD_ENG_OVERRIDE "Engineering Override Access" //SKYRAT EDIT
+#define KEYCARD_PIN_UNRESTRICT "Unrestrict Permit Firing Pins" //NOVA EDIT
+#define KEYCARD_ENG_OVERRIDE "Engineering Override Access" //NOVA EDIT
#define ACCESS_GRANTING_COOLDOWN (30 SECONDS)
@@ -52,8 +52,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
data["red_alert"] = (SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_RED) ? 1 : 0
data["emergency_maint"] = GLOB.emergency_access
data["bsa_unlock"] = GLOB.bsa_unlock
- data["permit_pins"] = (CONFIG_GET(flag/permit_pins) ? TRUE : FALSE) //SKYRAT EDIT
- data["eng_override"] = GLOB.force_eng_override //SKYRAT EDIT
+ data["permit_pins"] = (CONFIG_GET(flag/permit_pins) ? TRUE : FALSE) //NOVA EDIT
+ data["eng_override"] = GLOB.force_eng_override //NOVA EDIT
return data
/obj/machinery/keycard_auth/ui_status(mob/user)
@@ -90,7 +90,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
if(!event_source)
sendEvent(KEYCARD_BSA_UNLOCK)
. = TRUE
- //SKYRAT EDIT START
+ //NOVA EDIT START
if("pin_unrestrict")
if(!event_source)
sendEvent(KEYCARD_PIN_UNRESTRICT)
@@ -99,7 +99,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
if(!event_source)
sendEvent(KEYCARD_ENG_OVERRIDE)
. = TRUE
- //SKYRAT EDIT END
+ //NOVA EDIT END
if("give_janitor_access")
var/mob/living/living_user = usr
if(!living_user || !istype(living_user))
@@ -171,12 +171,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26)
make_maint_all_access()
if(KEYCARD_BSA_UNLOCK)
toggle_bluespace_artillery()
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(KEYCARD_PIN_UNRESTRICT)
toggle_permit_pins()
if(KEYCARD_ENG_OVERRIDE)
toggle_eng_override()
- //SKYRAT EDIT END
+ //NOVA EDIT END
GLOBAL_VAR_INIT(emergency_access, FALSE)
/proc/make_maint_all_access()
@@ -208,5 +208,5 @@ GLOBAL_VAR_INIT(emergency_access, FALSE)
#undef KEYCARD_RED_ALERT
#undef KEYCARD_EMERGENCY_MAINTENANCE_ACCESS
#undef KEYCARD_BSA_UNLOCK
-#undef KEYCARD_PIN_UNRESTRICT //SKYRAT EDIT
-#undef KEYCARD_ENG_OVERRIDE //SKYRAT EDIT
+#undef KEYCARD_PIN_UNRESTRICT //NOVA EDIT
+#undef KEYCARD_ENG_OVERRIDE //NOVA EDIT
diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm
index ea1ba8ed052..1b36b09a8ee 100644
--- a/code/modules/shuttle/arrivals.dm
+++ b/code/modules/shuttle/arrivals.dm
@@ -19,7 +19,7 @@
var/perma_docked = FALSE //highlander with RESPAWN??? OH GOD!!!
var/obj/docking_port/stationary/target_dock // for badminry
- shuttle_sounds = FALSE //SKYRAT EDIT ADDITION
+ shuttle_sounds = FALSE //NOVA EDIT ADDITION
/obj/docking_port/mobile/arrivals/Initialize(mapload)
. = ..()
diff --git a/code/modules/shuttle/battlecruiser_starfury.dm b/code/modules/shuttle/battlecruiser_starfury.dm
index d8dc3c312f7..e95ff4243f5 100644
--- a/code/modules/shuttle/battlecruiser_starfury.dm
+++ b/code/modules/shuttle/battlecruiser_starfury.dm
@@ -135,7 +135,7 @@
*/
/proc/summon_battlecruiser(datum/team/battlecruiser/team)
- var/list/candidates = poll_ghost_candidates("Do you wish to be considered for battlecruiser crew?", ROLE_TRAITOR)
+ var/list/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for battlecruiser crew?", check_jobban = ROLE_TRAITOR, pic_source = /obj/machinery/sleeper/syndie, role_name_text = "battlecruiser crew")
shuffle_inplace(candidates)
var/datum/map_template/ship = SSmapping.map_templates["battlecruiser_starfury.dmm"]
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 73de05a8f37..490570a67e0 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -337,7 +337,7 @@
. = ..()
-/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) // SKYRAT EDIT CHANGE - AUTOTRANSFER - adds silent arg
+/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signal_origin, reason, red_alert, set_coefficient=null, silent=FALSE) // NOVA EDIT CHANGE - AUTOTRANSFER - adds silent arg
if(!isnum(set_coefficient))
set_coefficient = SSsecurity_level.current_security_level.shuttle_call_time_mod
alert_coeff = set_coefficient
@@ -358,10 +358,10 @@
else
SSshuttle.emergency_last_call_loc = null
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
if(silent)
return
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
priority_announce(
text = "The emergency shuttle has been called. [red_alert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [(timeLeft(60 SECONDS))] minutes.[reason][SSshuttle.emergency_last_call_loc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ][SSshuttle.admin_emergency_no_recall ? "\n\nWarning: Shuttle recall subroutines disabled; Recall not possible." : ""]",
title = "Emergency Shuttle Dispatched",
@@ -544,7 +544,6 @@
color_override = "orange",
)
INVOKE_ASYNC(SSticker, TYPE_PROC_REF(/datum/controller/subsystem/ticker, poll_hearts))
- bolt_all_doors() //SKYRAT EDIT ADDITION
SSmapping.mapvote() //If no map vote has been run yet, start one.
if(!is_reserved_level(z))
@@ -598,8 +597,8 @@
supervisor.", "SYSTEM ERROR:", sound_override = 'sound/misc/announce_syndi.ogg')
dock_id(destination_dock)
- unbolt_all_doors() //SKYRAT EDIT ADDITION
- INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(process_eorg_bans)) //SKYRAT EDIT ADDITION
+ unbolt_all_doors() //NOVA EDIT ADDITION
+ INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(process_eorg_bans)) //NOVA EDIT ADDITION
mode = SHUTTLE_ENDGAME
timer = 0
diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm
index d1f54b889d1..c319fa1ae27 100644
--- a/code/modules/shuttle/ferry.dm
+++ b/code/modules/shuttle/ferry.dm
@@ -3,7 +3,7 @@
desc = "A console that controls the transport ferry."
circuit = /obj/item/circuitboard/computer/ferry
shuttleId = "ferry"
- possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE
+ possible_destinations = "ferry_home;ferry_away;ferry_ntf" //NOVA EDIT CHANGE
req_access = list(ACCESS_CENT_GENERAL)
var/allow_silicons = FALSE
var/allow_emag = FALSE
@@ -23,6 +23,6 @@
/obj/machinery/computer/shuttle/ferry/request
name = "ferry console"
circuit = /obj/item/circuitboard/computer/ferry/request
- possible_destinations = "ferry_home;ferry_away;ferry_ntf" //SKYRAT EDIT CHANGE
+ possible_destinations = "ferry_home;ferry_away;ferry_ntf" //NOVA EDIT CHANGE
req_access = list(ACCESS_CENT_GENERAL)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 7c8b26b5d16..70b2df44dd0 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -57,7 +57,7 @@ All ShuttleMove procs go here
if(!shuttle_depth)
CRASH("A turf queued to move via shuttle somehow had no skipover in baseturfs. [src]([type]):[loc]")
- //SKYRAT EDIT ADDITION
+ //NOVA EDIT ADDITION
if(newT.lgroup)
newT.lgroup.remove_from_group(newT)
if(newT.liquids)
@@ -71,7 +71,7 @@ All ShuttleMove procs go here
if(liquids)
liquids.ChangeToNewTurf(newT)
newT.reasses_liquids()
- //SKYRAT EDIT END
+ //NOVA EDIT END
newT.CopyOnTop(src, 1, shuttle_depth, TRUE)
newT.blocks_air = TRUE
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 8be7ee651fb..ec77e0b2ee9 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -492,7 +492,7 @@
///List of shuttle events that can run or are running
var/list/datum/shuttle_event/event_list = list()
- var/admin_forced = FALSE //SKYRAT EDIT ADDITION
+ var/admin_forced = FALSE //NOVA EDIT ADDITION
#define WORLDMAXX_CUTOFF (world.maxx + 1)
#define WORLDMAXY_CUTOFF (world.maxx + 1)
@@ -699,15 +699,15 @@
* Arguments:
* * destination_port - Stationary docking port to move the shuttle to
*/
-/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/destination_port, forced = FALSE) // SKYRAT EDIT ADDITION - Forced check
- if(!check_dock(destination_port) && !forced) // SKYRAT EDIT ADDITION - Forced check
+/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/destination_port, forced = FALSE) // NOVA EDIT ADDITION - Forced check
+ if(!check_dock(destination_port) && !forced) // NOVA EDIT ADDITION - Forced check
testing("check_dock failed on request for [src]")
return
- // SKYRAT EDIT START - Forced check
+ // NOVA EDIT START - Forced check
if(forced)
admin_forced = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(mode == SHUTTLE_IGNITING && destination == destination_port)
return
@@ -730,10 +730,10 @@
if(SHUTTLE_IDLE, SHUTTLE_IGNITING)
destination = destination_port
mode = SHUTTLE_IGNITING
- // SKYRAT EDIT ADD START
+ // NOVA EDIT ADD START
bolt_all_doors()
play_engine_sound(src, TRUE)
- // SKYRAT EDIT ADD END
+ // NOVA EDIT ADD END
setTimer(ignitionTime)
//recall the shuttle to where it was previously
@@ -882,7 +882,7 @@
return
if(rechargeTime)
mode = SHUTTLE_RECHARGING
- unbolt_all_doors() //SKYRAT EDIT ADDITION
+ unbolt_all_doors() //NOVA EDIT ADDITION
setTimer(rechargeTime)
return
if(SHUTTLE_RECALL)
@@ -899,8 +899,8 @@
enterTransit()
return
- admin_forced = FALSE //SKYRAT EDIT ADDITION
- unbolt_all_doors() //SKYRAT EDIT ADDITION
+ admin_forced = FALSE //NOVA EDIT ADDITION
+ unbolt_all_doors() //NOVA EDIT ADDITION
mode = SHUTTLE_IDLE
timer = 0
destination = null
@@ -911,8 +911,8 @@
var/tl = timeLeft(1)
if(tl <= SHUTTLE_RIPPLE_TIME)
create_ripples(destination, tl)
- play_engine_sound(src, FALSE) //SKYRAT EDIT ADDITION
- play_engine_sound(destination, FALSE) //SKYRAT EDIT ADDITION
+ play_engine_sound(src, FALSE) //NOVA EDIT ADDITION
+ play_engine_sound(destination, FALSE) //NOVA EDIT ADDITION
var/obj/docking_port/stationary/S0 = get_docked()
if(istype(S0, /obj/docking_port/stationary/transit) && timeLeft(1) <= PARALLAX_LOOP_TIME)
diff --git a/code/modules/shuttle/shuttle_events/player_controlled.dm b/code/modules/shuttle/shuttle_events/player_controlled.dm
index 40bc29f8017..77fee390a68 100644
--- a/code/modules/shuttle/shuttle_events/player_controlled.dm
+++ b/code/modules/shuttle/shuttle_events/player_controlled.dm
@@ -17,7 +17,7 @@
/// Attempt to grant control of a mob to ghosts before spawning it in. if spawn_anyway_if_no_player = TRUE, we spawn the mob even if there's no ghosts
/datum/shuttle_event/simple_spawner/player_controlled/proc/try_grant_ghost_control(spawn_type)
- var/list/candidates = poll_ghost_candidates(ghost_alert_string + " (Warning: you will not be able to return to your body!)", role_type, FALSE, 10 SECONDS)
+ var/list/candidates = SSpolling.poll_ghost_candidates(ghost_alert_string + " (Warning: you will not be able to return to your body!)", check_jobban = role_type, poll_time = 10 SECONDS, pic_source = spawn_type, role_name_text = "shot at shuttle")
if(!candidates.len && !spawn_anyway_if_no_player)
return
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 9680f829411..071bd4ee430 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
var/pack_cost
var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties
var/list/clean_up_orders = list() // orders to remove since we are done with them
- var/list/forced_briefcases = list() // SKYRAT EDIT ADDITION
+ var/list/forced_briefcases = list() // NOVA EDIT ADDITION
for(var/datum/supply_order/spawning_order in SSshuttle.shopping_list)
if(!empty_turfs.len)
@@ -192,7 +192,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
continue
pack_cost = spawning_order.pack.get_cost()
- if(spawning_order.paying_account && spawning_order.charge_on_purchase) // SKYRAT EDIT CHANGE - ORIGINAL: if(spawning_order.paying_account)
+ if(spawning_order.paying_account && spawning_order.charge_on_purchase) // NOVA EDIT CHANGE - ORIGINAL: if(spawning_order.paying_account)
paying_for_this = spawning_order.paying_account
if(spawning_order.pack.goody)
LAZYADD(goodies_by_buyer[spawning_order.paying_account], spawning_order)
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
cargo.adjust_money(price - pack_cost) //Cargo gets the handling fee
value += pack_cost
- if(!spawning_order.pack.goody && !(spawning_order?.paying_account in forced_briefcases)) // SKYRAT EDIT CHANGE - ORIGINAL : if(!spawning_order.pack.goody)
+ if(!spawning_order.pack.goody && !(spawning_order?.paying_account in forced_briefcases)) // NOVA EDIT CHANGE - ORIGINAL : if(!spawning_order.pack.goody)
var/obj/structure/closet/crate = spawning_order.generate(pick_n_take(empty_turfs))
crate.name += " - #[spawning_order.id]"
@@ -232,22 +232,22 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list(
if(buying_account_orders.len > GOODY_FREE_SHIPPING_MAX) // no free shipping, send a crate
var/obj/structure/closet/crate/secure/owned/our_crate = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs))
our_crate.buyer_account = buying_account
- /// SKYRAT EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE
+ /// NOVA EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE
if(istype(our_crate.buyer_account, /datum/bank_account/department))
our_crate.department_purchase = TRUE
our_crate.department_account = our_crate.buyer_account
- /// SKYRAT EDIT ADDITION END
+ /// NOVA EDIT ADDITION END
our_crate.name = "goody crate - purchased by [buyer]"
miscboxes[buyer] = our_crate
else //free shipping in a case
miscboxes[buyer] = new /obj/item/storage/lockbox/order(pick_n_take(empty_turfs))
var/obj/item/storage/lockbox/order/our_case = miscboxes[buyer]
our_case.buyer_account = buying_account
- /// SKYRAT EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE
+ /// NOVA EDIT ADDITION START - FIXES COMMAND BUDGET CASES BEING UNOPENABLE
if(istype(our_case.buyer_account, /datum/bank_account/department))
our_case.department_purchase = TRUE
our_case.department_account = our_case.buyer_account
- /// SKYRAT EDIT ADDITION END
+ /// NOVA EDIT ADDITION END
miscboxes[buyer].name = "goody case - purchased by [buyer]"
misc_contents[buyer] = list()
diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm
index 6168e94af55..27662943af0 100644
--- a/code/modules/spells/spell_types/right_and_wrong.dm
+++ b/code/modules/spells/spell_types/right_and_wrong.dm
@@ -265,7 +265,7 @@ GLOBAL_LIST_INIT(summoned_magic_objectives, list(
/datum/summon_things_controller/New()
RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(on_latejoin))
-/datum/summon_things_controller/Destroy(force, ...)
+/datum/summon_things_controller/Destroy(force)
. = ..()
UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED)
diff --git a/code/modules/spells/spell_types/tower_of_babel.dm b/code/modules/spells/spell_types/tower_of_babel.dm
index 3c652579b7f..618711a8d95 100644
--- a/code/modules/spells/spell_types/tower_of_babel.dm
+++ b/code/modules/spells/spell_types/tower_of_babel.dm
@@ -29,7 +29,7 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel)
curse_of_babel(target)
-/datum/tower_of_babel/Destroy(force, ...)
+/datum/tower_of_babel/Destroy(force)
. = ..()
UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED)
diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm
index 1d6b546bcb9..426b9133465 100644
--- a/code/modules/station_goals/bsa.dm
+++ b/code/modules/station_goals/bsa.dm
@@ -3,7 +3,7 @@
///BSA unlocked by head ID swipes
GLOBAL_VAR_INIT(bsa_unlock, FALSE)
-/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR BSA_OVERHAUL
+/* NOVA EDIT REMOVAL - MOVED TO MODULAR BSA_OVERHAUL
// Crew has to build a bluespace cannon
// Cargo orders part for high price
// Requires high amount of power
@@ -204,7 +204,6 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE)
/obj/machinery/bsa/full/proc/get_layer()
top_layer = mutable_appearance(icon, layer = ABOVE_MOB_LAYER)
- SET_PLANE_EXPLICIT(top_layer, GAME_PLANE_UPPER, src)
switch(dir)
if(WEST)
top_layer.icon_state = "top_west"
diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm
index 03f69c2664c..83fb1f0ea7f 100644
--- a/code/modules/station_goals/dna_vault.dm
+++ b/code/modules/station_goals/dna_vault.dm
@@ -101,12 +101,11 @@
F.parent = src
fillers += F
- if(SSticker.mode)
- var/datum/station_goal/dna_vault/dna_vault_goal = locate() in GLOB.station_goals
- if (!isnull(dna_vault_goal))
- animals_max = dna_vault_goal.animal_count
- plants_max = dna_vault_goal.plant_count
- dna_max = dna_vault_goal.human_count
+ var/datum/station_goal/dna_vault/dna_vault_goal = locate() in GLOB.station_goals
+ if (!isnull(dna_vault_goal))
+ animals_max = dna_vault_goal.animal_count
+ plants_max = dna_vault_goal.plant_count
+ dna_max = dna_vault_goal.human_count
return ..()
diff --git a/code/modules/station_goals/generate_goals.dm b/code/modules/station_goals/generate_goals.dm
new file mode 100644
index 00000000000..102212c1212
--- /dev/null
+++ b/code/modules/station_goals/generate_goals.dm
@@ -0,0 +1,13 @@
+/// Creates the initial station goals.
+/proc/generate_station_goals(goal_budget)
+ var/list/possible = subtypesof(/datum/station_goal)
+ // Remove all goals that require space if space is not present
+ if(SSmapping.is_planetary())
+ for(var/datum/station_goal/goal as anything in possible)
+ if(initial(goal.requires_space))
+ possible -= goal
+ var/goal_weights = 0
+ while(possible.len && goal_weights < goal_budget)
+ var/datum/station_goal/picked = pick_n_take(possible)
+ goal_weights += initial(picked.weight)
+ GLOB.station_goals += new picked
diff --git a/code/modules/station_goals/meteor_shield.dm b/code/modules/station_goals/meteor_shield.dm
index 7b16606013b..3b87ef74578 100644
--- a/code/modules/station_goals/meteor_shield.dm
+++ b/code/modules/station_goals/meteor_shield.dm
@@ -89,7 +89,7 @@
/obj/machinery/satellite/meteor_shield/process()
if(obj_flags & EMAGGED)
//kills the processing because emagged meteor shields no longer stop meteors in any way
- return ..()
+ return PROCESS_KILL
if(!active)
return
for(var/obj/effect/meteor/meteor_to_destroy in GLOB.meteor_list)
diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index 4c5efe367fe..afbe3f0a8ef 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -1,8 +1,8 @@
/obj/item/disk/surgery/brainwashing
- name = "Surgery Disk" //SKYRAT EDIT: Formerly "Brainwashing Surgery Disk" //Finally I can upload the funny surgery disk without letting everyone in the room know about it!
- desc = "The disk provides instructions on some kind of surgery, but the label has been scratched off..." //Skyrat edit: Moved to Special Desc.
+ name = "Surgery Disk" //NOVA EDIT: Formerly "Brainwashing Surgery Disk" //Finally I can upload the funny surgery disk without letting everyone in the room know about it!
+ desc = "The disk provides instructions on some kind of surgery, but the label has been scratched off..." //NOVA EDIT: Moved to Special Desc.
surgeries = list(/datum/surgery/advanced/brainwashing)
- special_desc_requirement = EXAMINE_CHECK_JOB // Skyrat edit
+ special_desc_requirement = EXAMINE_CHECK_JOB // NOVA EDIT
special_desc_jobs = list("Medical Doctor, Chief Medical Officer, Roboticist") //SKYRAT CHANGE //You mean to tell me the roles that get this role-exclusive item know what it does?
special_desc = "The disk provides instructions on how to impress an order on a brain, making it the primary objective of the patient."
diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm
index d442743c36b..a853cd73ce1 100644
--- a/code/modules/surgery/amputation.dm
+++ b/code/modules/surgery/amputation.dm
@@ -17,7 +17,7 @@
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/sever_limb,
)
- removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs
+ removes_target_bodypart = TRUE // NOVA EDIT ADDITION - Surgically unremovable limbs
/datum/surgery/amputation/can_start(mob/user, mob/living/patient)
if(HAS_TRAIT(patient, TRAIT_NODISMEMBER))
diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm
index 5b0e7c27f11..fdeb50114a3 100644
--- a/code/modules/surgery/bodyparts/_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/_bodyparts.dm
@@ -72,7 +72,7 @@
///Controls if the limb is disabled. TRUE means it is disabled (similar to being removed, but still present for the sake of targeted interactions).
var/bodypart_disabled = FALSE
///Handles limb disabling by damage. If 0 (0%), a limb can't be disabled via damage. If 1 (100%), it is disabled at max limb damage. Anything between is the percentage of damage against maximum limb damage needed to disable the limb.
- var/disabling_threshold_percentage = 1 //SKYRAT EDIT CHANGE - COMBAT - ORIGINAL : var/disabling_threshold_percentage = 0
+ var/disabling_threshold_percentage = 1 //NOVA EDIT CHANGE - COMBAT - ORIGINAL : var/disabling_threshold_percentage = 0
// Damage variables
///A mutiplication of the burn and brute damage that the limb's stored damage contributes to its attached mob's overall wellbeing.
@@ -333,17 +333,17 @@
for(var/datum/wound/wound as anything in wounds)
switch(wound.severity)
if(WOUND_SEVERITY_TRIVIAL)
- // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)].")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL
- check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)].")]" // SKYRAT EDIT - Medical overhaul-ish
+ // check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)].")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL
+ check_list += "\t [span_danger("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)].")]" // NOVA EDIT - Medical overhaul-ish
if(WOUND_SEVERITY_MODERATE)
- // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL
- check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish
+ // check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL
+ check_list += "\t [span_warning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // NOVA EDIT - Medical overhaul-ish
if(WOUND_SEVERITY_SEVERE)
- // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL
- check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // SKYRAT EDIT - Medical overhaul-ish
+ // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL
+ check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!")]" // NOVA EDIT - Medical overhaul-ish
if(WOUND_SEVERITY_CRITICAL)
- // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!!")]" // SKYRAT EDIT - Medical overhaul-ish - ORIGINAL
- check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!!")]" // SKYRAT EDIT - Medical overhaul-ish
+ // check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [lowertext(wound.name)]!!")]" // NOVA EDIT - Medical overhaul-ish - ORIGINAL
+ check_list += "\t [span_boldwarning("Your [name] is suffering [wound.a_or_from] [wound.get_topic_name(owner)]!!")]" // NOVA EDIT - Medical overhaul-ish
for(var/obj/item/embedded_thing in embedded_objects)
var/stuck_word = embedded_thing.isEmbedHarmless() ? "stuck" : "embedded"
@@ -529,7 +529,7 @@
return
// now we have our wounding_type and are ready to carry on with wounds and dealing the actual damage
if(wounding_dmg >= WOUND_MINIMUM_DAMAGE && wound_bonus != CANT_WOUND)
- //SKYRAT EDIT ADDITION - MEDICAL
+ //NOVA EDIT ADDITION - MEDICAL
//This makes it so the more damaged bodyparts are, the more likely they are to get wounds
//However, this bonus isn't applied when the object doesn't pass the initial wound threshold, nor is it when it already has enough wounding dmg
if(wounding_dmg < DAMAGED_BODYPART_BONUS_WOUNDING_BONUS)
@@ -541,7 +541,7 @@
if (istype(current_gauze, /obj/item/stack/medical/gauze))
var/obj/item/stack/medical/gauze/our_gauze = current_gauze
our_gauze.get_hit()
- //SKYRAT EDIT ADDITION END - MEDICAL
+ //NOVA EDIT ADDITION END - MEDICAL
check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source)
for(var/datum/wound/iter_wound as anything in wounds)
@@ -668,12 +668,12 @@
update_disabled()
if(updating_health)
owner.updatehealth()
- //SKYRAT EDIT ADDITION BEGIN - CUSTOMIZATION
+ //NOVA EDIT ADDITION BEGIN - CUSTOMIZATION
//Consider moving this to a new species proc "spec_heal" maybe?
if(owner.stat == DEAD && HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING))
if(owner.health > 50)
owner.revive(FALSE)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
cremation_progress = min(0, cremation_progress - ((brute_dam + burn_dam)*(100/max_damage)))
return update_bodypart_damage_state()
@@ -945,7 +945,7 @@
if(should_draw_greyscale) //Should the limb be colored?
draw_color ||= species_color || (skin_tone ? skintone2hex(skin_tone) : null)
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
var/datum/species/owner_species = human_owner.dna.species
if(owner_species && owner_species.specific_alpha != 255)
@@ -955,7 +955,7 @@
if(aux_zone)
aux_zone_markings = LAZYCOPY(owner_species.body_markings[aux_zone])
markings_alpha = owner_species.markings_alpha
- // SKYRAT EDIT END
+ // NOVA EDIT END
recolor_external_organs()
return TRUE
@@ -1037,13 +1037,13 @@
draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone))
if(draw_color)
- //SKYRAT EDIT BEGIN - Alpha values on limbs //We check if the limb is attached and if the owner has an alpha value to append
+ //NOVA EDIT BEGIN - Alpha values on limbs //We check if the limb is attached and if the owner has an alpha value to append
var/limb_color = alpha != 255 ? "[draw_color][num2hex(alpha, 2)]" : "[draw_color]"
limb.color = limb_color
if(aux_zone)
aux.color = limb_color
- //SKYRAT EDIT END
+ //NOVA EDIT END
//EMISSIVE CODE START
// For some reason this was applied as an overlay on the aux image and limb image before.
@@ -1082,7 +1082,7 @@
if(overlay.layers & external_layer)
. += overlay.get_overlay(external_layer, src)
- // SKYRAT EDIT ADDITION BEGIN - MARKINGS CODE
+ // NOVA EDIT ADDITION BEGIN - MARKINGS CODE
var/override_color
var/atom/offset_spokesman = owner || src
// First, check to see if this bodypart is husked. If so, we don't want to apply our sparkledog colors to the limb.
@@ -1137,7 +1137,7 @@
. += accessory_overlay
if (emissive)
. += emissive
- // SKYRAT EDIT END - MARKINGS CODE END
+ // NOVA EDIT END - MARKINGS CODE END
return .
@@ -1393,8 +1393,8 @@
var/burn_damage = AUGGED_LIMB_EMP_BURN_DAMAGE
if(severity == EMP_HEAVY)
time_needed *= 2
- brute_damage *= 1.3 // SKYRAT EDIT : Balance - Lowers total damage from ~125 Brute to ~30
- burn_damage *= 1.3 // SKYRAT EDIT : Balance - Lowers total damage from ~104 Burn to ~24
+ brute_damage *= 1.3 // NOVA EDIT : Balance - Lowers total damage from ~125 Brute to ~30
+ burn_damage *= 1.3 // NOVA EDIT : Balance - Lowers total damage from ~104 Burn to ~24
receive_damage(brute_damage, burn_damage)
do_sparks(number = 1, cardinal_only = FALSE, source = owner || src)
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index f1cdcba9c80..34afbd625a6 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -68,10 +68,10 @@
chest_owner.add_splatter_floor(chest_owner.loc)
playsound(get_turf(chest_owner), 'sound/misc/splort.ogg', 80, TRUE)
for(var/obj/item/organ/organ as anything in chest_owner.organs)
- // SKYRAT EDIT START - Non-spillable organs
+ // NOVA EDIT START - Non-spillable organs
if(!organ.drop_when_organ_spilling)
continue
- // SKYRAT EDIT END
+ // NOVA EDIT END
var/org_zone = check_zone(organ.zone)
if(org_zone != BODY_ZONE_CHEST)
continue
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index 94551211def..8d4d48bfe6c 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -225,7 +225,7 @@
worn_face_offset.apply_offset(eye_left)
worn_face_offset.apply_offset(eye_right)
- // SKYRAT EDIT ADDITION START - Customization (Emissives and synths)
+ // NOVA EDIT ADDITION START - Customization (Emissives and synths)
if(eyes.eye_icon_state == "None")
eye_left.alpha = 0
eye_right.alpha = 0
@@ -244,7 +244,7 @@
eye_left.overlays += emissive_left
eye_right.overlays += emissive_right
- // SKYRAT EDIT END
+ // NOVA EDIT END
. += eye_left
. += eye_right
diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm
index 12093f71408..15d4db296ee 100644
--- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm
+++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm
@@ -65,7 +65,7 @@
lip_style = human_head_owner.lip_style
lip_color = human_head_owner.lip_color
hairstyle = human_head_owner.hairstyle
- hair_alpha = human_head_owner.hair_alpha ? human_head_owner.hair_alpha : owner_species.hair_alpha // SKYRAT EDIT - Customization - Hair alpha - ORIGINAL: hair_alpha = owner_species.hair_alpha
+ hair_alpha = human_head_owner.hair_alpha ? human_head_owner.hair_alpha : owner_species.hair_alpha // NOVA EDIT - Customization - Hair alpha - ORIGINAL: hair_alpha = owner_species.hair_alpha
hair_color = human_head_owner.hair_color
facial_hairstyle = human_head_owner.facial_hairstyle
facial_hair_alpha = owner_species.facial_hair_alpha
diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm
index d48e6eb5c28..33b32778754 100644
--- a/code/modules/surgery/bodyparts/robot_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm
@@ -269,19 +269,19 @@
if(all_robotic)
owner.add_traits(list(
- /* SKYRAT EDIT REMOVAL BEGIN - Synths are not immune to temperature
+ /* NOVA EDIT REMOVAL BEGIN - Synths are not immune to temperature
TRAIT_RESISTCOLD,
TRAIT_RESISTHEAT,
- SKYRAT EDIT REMOVAL END */
+ NOVA EDIT REMOVAL END */
TRAIT_RESISTLOWPRESSURE,
TRAIT_RESISTHIGHPRESSURE,
), AUGMENTATION_TRAIT)
else
owner.remove_traits(list(
- /* SKYRAT EDIT REMOVAL BEGIN - Synths are not immune to temperature
+ /* NOVA EDIT REMOVAL BEGIN - Synths are not immune to temperature
TRAIT_RESISTCOLD,
TRAIT_RESISTHEAT,
- SKYRAT EDIT REMOVAL END */
+ NOVA EDIT REMOVAL END */
TRAIT_RESISTLOWPRESSURE,
TRAIT_RESISTHIGHPRESSURE,
), AUGMENTATION_TRAIT)
diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
index b606103a48e..6cd42665d45 100644
--- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm
@@ -42,7 +42,7 @@
icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi'
limb_id = SPECIES_LIZARD
-/* SKYRAT EDIT REMOVAL - MOVED TO MODULAR MUTANT_BODYPARTS.DM
+/* NOVA EDIT REMOVAL - MOVED TO MODULAR MUTANT_BODYPARTS.DM
/obj/item/bodypart/leg/left/digitigrade
icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi'
limb_id = BODYPART_ID_DIGITIGRADE
diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
index 3aae6696ed6..574ab49987b 100644
--- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm
@@ -36,7 +36,7 @@
unarmed_damage_low = 1
unarmed_damage_high = 2 //snails are soft and squishy
burn_modifier = 2
- // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT REMOVAL - Moved the movespeed to the shell.
+ // speed_modifier = 3 //disgustingly slow // NOVA EDIT REMOVAL - Moved the movespeed to the shell.
biological_state = (BIO_FLESH|BIO_BLOODED)
/obj/item/bodypart/leg/right/snail
@@ -44,7 +44,7 @@
unarmed_damage_low = 1
unarmed_damage_high = 2 //snails are soft and squishy
burn_modifier = 2
- // speed_modifier = 3 //disgustingly slow // SKYRAT EDIT REMOVAL - Moved the movespeed to the shell.
+ // speed_modifier = 3 //disgustingly slow // NOVA EDIT REMOVAL - Moved the movespeed to the shell.
biological_state = (BIO_FLESH|BIO_BLOODED)
///ABDUCTOR
@@ -260,7 +260,7 @@
limb_id = SPECIES_FLYPERSON
is_dimorphic = FALSE
should_draw_greyscale = FALSE
- head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN // SKYRAT EDIT - Flies deserve hair - ORIGINAL: head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN
+ head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN // NOVA EDIT - Flies deserve hair - ORIGINAL: head_flags = HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN
/obj/item/bodypart/chest/fly
limb_id = SPECIES_FLYPERSON
diff --git a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
index 1431fc197b9..a6dfc027d00 100644
--- a/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
+++ b/code/modules/surgery/bodyparts/species_parts/moth_bodyparts.dm
@@ -1,4 +1,4 @@
-/* SKYRAT EDIT REMOVAL - Moved to modular_skyrat\master_files\code\modules\surgery\bodyparts\species_parts\moth_bodyparts.dm
+/* NOVA EDIT REMOVAL - Moved to modular_nova\master_files\code\modules\surgery\bodyparts\species_parts\moth_bodyparts.dm
/obj/item/bodypart/head/moth
icon = 'icons/mob/human/species/moth/bodyparts.dmi'
icon_state = "moth_head"
@@ -54,4 +54,4 @@
icon_static = 'icons/mob/human/species/moth/bodyparts.dmi'
limb_id = SPECIES_MOTH
should_draw_greyscale = FALSE
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm
index 7b6d7844ee6..748dab1f4ec 100644
--- a/code/modules/surgery/eye_surgery.dm
+++ b/code/modules/surgery/eye_surgery.dm
@@ -22,10 +22,7 @@
/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES)
- if(!target_eyes)
- to_chat(user, span_warning("It's hard to do surgery on someone's eyes when [target.p_they()] [target.p_do()]n't have any."))
- return FALSE
- return TRUE
+ return !isnull(target_eyes)
/datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm
index 37441897527..a587b8dd8ec 100644
--- a/code/modules/surgery/healing.dm
+++ b/code/modules/surgery/healing.dm
@@ -1,6 +1,6 @@
/datum/surgery/healing
target_mobtypes = list(/mob/living)
- requires_bodypart_type = BODYTYPE_ORGANIC //SKYRAT EDIT CHANGE - ORIGINAL VALUE: requires_bodypart_type = FALSE
+ requires_bodypart_type = BODYTYPE_ORGANIC //NOVA EDIT CHANGE - ORIGINAL VALUE: requires_bodypart_type = FALSE
replaced_by = /datum/surgery
surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB
possible_locs = list(BODY_ZONE_CHEST)
diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm
index 6905de5d8db..50f7267a5f4 100644
--- a/code/modules/surgery/limb_augmentation.dm
+++ b/code/modules/surgery/limb_augmentation.dm
@@ -59,7 +59,7 @@
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/replace_limb,
)
- removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs
+ removes_target_bodypart = TRUE // NOVA EDIT ADDITION - Surgically unremovable limbs
//SURGERY STEP SUCCESSES
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 25004d20d20..f2eeb60faa6 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -293,7 +293,7 @@
///only operate on internal organs
/datum/surgery_step/manipulate_organs/internal/can_use_organ(mob/user, obj/item/organ/organ)
- return isinternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // SKYRAT EDIT - Don't show unremovable organs - ORIGINAL: return isinternalorgan(organ)
+ return isinternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // NOVA EDIT - Don't show unremovable organs - ORIGINAL: return isinternalorgan(organ)
///prosthetic surgery gives full effectiveness to crowbars (and hemostats)
/datum/surgery_step/manipulate_organs/internal/mechanic
@@ -307,7 +307,7 @@
///Only operate on external organs
/datum/surgery_step/manipulate_organs/external/can_use_organ(mob/user, obj/item/organ/organ)
- return isexternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // SKYRAT EDIT - Don't show unremovable organs - ORIGINAL: return isexternalorgan(organ)
+ return isexternalorgan(organ) && !(organ.organ_flags & ORGAN_UNREMOVABLE) // NOVA EDIT - Don't show unremovable organs - ORIGINAL: return isexternalorgan(organ)
///prosthetic surgery gives full effectiveness to crowbars (and hemostats)
/datum/surgery_step/manipulate_organs/external/mechanic
diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm
index fd1af3d5f93..dcc713a0991 100644
--- a/code/modules/surgery/organs/external/_external_organ.dm
+++ b/code/modules/surgery/organs/external/_external_organ.dm
@@ -39,8 +39,8 @@
bodypart_overlay = new bodypart_overlay()
- // cache_key = jointext(generate_icon_cache(), "_") // SKYRAT EDIT - Species stuff that Goofball ported from /tg/, apparently. Commented for now, to see if I can make it work without it.
- // SKYRAT EDIT: we have like 145+ fucking dna blocks lmao
+ // cache_key = jointext(generate_icon_cache(), "_") // NOVA EDIT - Species stuff that Goofball ported from /tg/, apparently. Commented for now, to see if I can make it work without it.
+ // NOVA EDIT: we have like 145+ fucking dna blocks lmao
dna_block = GLOB.dna_mutant_bodypart_blocks[preference]
accessory_type = accessory_type ? accessory_type : sprite_accessory_override
@@ -84,11 +84,11 @@
if(bodypart_overlay.imprint_on_next_insertion) //We only want this set *once*
var/feature_name = receiver.dna.features[bodypart_overlay.feature_key]
if (isnull(feature_name))
- bodypart_overlay.set_appearance_from_dna(receiver.dna) // SKYRAT EDIT CHANGE - ORIGINAL: feature_name = receiver.dna.species.external_organs[type]
- // SKYRAT EDIT CHANGE START - Puts the following line in an else block
+ bodypart_overlay.set_appearance_from_dna(receiver.dna) // NOVA EDIT CHANGE - ORIGINAL: feature_name = receiver.dna.species.external_organs[type]
+ // NOVA EDIT CHANGE START - Puts the following line in an else block
else
bodypart_overlay.set_appearance_from_name(feature_name)
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
bodypart_overlay.imprint_on_next_insertion = FALSE
ownerlimb = limb
@@ -200,7 +200,7 @@
slot = ORGAN_SLOT_EXTERNAL_HORNS
preference = "feature_lizard_horns"
- //dna_block = DNA_HORNS_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_HORNS_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_ENAMEL
bodypart_overlay = /datum/bodypart_overlay/mutant/horns
@@ -216,7 +216,7 @@
return TRUE
/datum/bodypart_overlay/mutant/horns/get_global_feature_list()
- return GLOB.sprite_accessories["horns"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.horns_list
+ return GLOB.sprite_accessories["horns"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.horns_list
///The frills of a lizard (like weird fin ears)
/obj/item/organ/external/frills
@@ -228,7 +228,7 @@
slot = ORGAN_SLOT_EXTERNAL_FRILLS
preference = "feature_lizard_frills"
- //dna_block = DNA_FRILLS_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_FRILLS_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/frills
@@ -243,11 +243,11 @@
return FALSE
/datum/bodypart_overlay/mutant/frills/get_global_feature_list()
- return GLOB.sprite_accessories["frills"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.frills_list
+ return GLOB.sprite_accessories["frills"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.frills_list
///Guess what part of the lizard this is?
/obj/item/organ/external/snout
- name = "snout" // SKYRAT EDIT - ORIGINAL: name = "lizard snout"
+ name = "snout" // NOVA EDIT - ORIGINAL: name = "lizard snout"
desc = "Take a closer look at that snout!"
icon_state = "snout"
@@ -257,7 +257,7 @@
preference = "feature_lizard_snout"
external_bodytypes = BODYTYPE_SNOUTED
- //dna_block = DNA_SNOUT_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_SNOUT_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/snout
@@ -272,7 +272,7 @@
return FALSE
/datum/bodypart_overlay/mutant/snout/get_global_feature_list()
- return GLOB.sprite_accessories["snout"] // SKYRAT EDIT - Customization - ORIGINAL : return GLOB.snouts_list
+ return GLOB.sprite_accessories["snout"] // NOVA EDIT - Customization - ORIGINAL : return GLOB.snouts_list
///A moth's antennae
/obj/item/organ/external/antennae
@@ -284,7 +284,7 @@
slot = ORGAN_SLOT_EXTERNAL_ANTENNAE
preference = "feature_moth_antennae"
- //dna_block = DNA_MOTH_ANTENNAE_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_MOTH_ANTENNAE_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/antennae
@@ -348,7 +348,7 @@
burn_datum = fetch_sprite_datum(burn_datum) //turn the path into the singleton instance
/datum/bodypart_overlay/mutant/antennae/get_global_feature_list()
- return GLOB.sprite_accessories["moth_antennae"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.moth_antennae_list
+ return GLOB.sprite_accessories["moth_antennae"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.moth_antennae_list
/datum/bodypart_overlay/mutant/antennae/get_base_icon_state()
return burnt ? burn_datum.icon_state : sprite_datum.icon_state
diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm
index 1d2378a58f9..600ed619e68 100644
--- a/code/modules/surgery/organs/external/spines.dm
+++ b/code/modules/surgery/organs/external/spines.dm
@@ -8,7 +8,7 @@
slot = ORGAN_SLOT_EXTERNAL_SPINES
preference = "feature_lizard_spines"
- //dna_block = DNA_SPINES_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_SPINES_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
bodypart_overlay = /datum/bodypart_overlay/mutant/spines
@@ -36,7 +36,7 @@
var/wagging = FALSE
/datum/bodypart_overlay/mutant/spines/get_global_feature_list()
- return GLOB.sprite_accessories["spines"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.spines_list
+ return GLOB.sprite_accessories["spines"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.spines_list
/datum/bodypart_overlay/mutant/spines/get_base_icon_state()
return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging
diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm
index 3235ddf7dbc..a3105b81b4a 100644
--- a/code/modules/surgery/organs/external/tails.dm
+++ b/code/modules/surgery/organs/external/tails.dm
@@ -7,7 +7,7 @@
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_EXTERNAL_TAIL
- //dna_block = DNA_TAIL_BLOCK // SKYRAT EDIT REMOVAL - Customization - We have our own system to handle DNA.
+ //dna_block = DNA_TAIL_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA.
restyle_flags = EXTERNAL_RESTYLE_FLESH
// defaults to cat, but the parent type shouldn't be created regardless
@@ -87,16 +87,16 @@
///Tail parent type, with wagging functionality
/datum/bodypart_overlay/mutant/tail
layers = EXTERNAL_FRONT|EXTERNAL_BEHIND
- feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_monkey"
+ feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_monkey"
var/wagging = FALSE
/datum/bodypart_overlay/mutant/tail/get_base_icon_state()
return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging
-// SKYRAT EDIT ADDITION - CUSTOMIZATION
+// NOVA EDIT ADDITION - CUSTOMIZATION
/datum/bodypart_overlay/mutant/tail/get_global_feature_list()
return GLOB.sprite_accessories["tail"]
-// SKYRAT EDIT ADDITION END
+// NOVA EDIT ADDITION END
/datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/human)
if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT))
@@ -113,11 +113,11 @@
///Cat tail bodypart overlay
/datum/bodypart_overlay/mutant/tail/cat
- feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_cat"
- // color_source = ORGAN_COLOR_HAIR // SKYRAT EDIT REMOVAL
+ feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_cat"
+ // color_source = ORGAN_COLOR_HAIR // NOVA EDIT REMOVAL
/datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list()
- return GLOB.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.tails_list_human
+ return GLOB.sprite_accessories["tail"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.tails_list_human
/obj/item/organ/external/tail/monkey
bodypart_overlay = /datum/bodypart_overlay/mutant/tail/monkey
@@ -125,7 +125,7 @@
///Monkey tail bodypart overlay
/datum/bodypart_overlay/mutant/tail/monkey
color_source = NONE
- feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_monkey"
+ feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_monkey"
/datum/bodypart_overlay/mutant/tail/monkey/get_global_feature_list()
return GLOB.tails_list_monkey
@@ -167,10 +167,10 @@
///Lizard tail bodypart overlay datum
/datum/bodypart_overlay/mutant/tail/lizard
- feature_key = "tail" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "tail_lizard"
+ feature_key = "tail" // NOVA EDIT - Customization - ORIGINAL: feature_key = "tail_lizard"
/datum/bodypart_overlay/mutant/tail/lizard/get_global_feature_list()
- return GLOB.sprite_accessories["tail"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.tails_list_lizard
+ return GLOB.sprite_accessories["tail"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.tails_list_lizard
/obj/item/organ/external/tail/lizard/fake
name = "fabricated lizard tail"
diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm
index 42e41b70279..58b9a709d87 100644
--- a/code/modules/surgery/organs/external/wings/functional_wings.dm
+++ b/code/modules/surgery/organs/external/wings/functional_wings.dm
@@ -138,17 +138,17 @@
var/open_feature_key = "wingsopen"
/datum/bodypart_overlay/mutant/wings/functional/get_global_feature_list()
- /* SKYRAT EDIT - CUSTOMIZATION - ORIGINAL:
+ /* NOVA EDIT - CUSTOMIZATION - ORIGINAL:
if(wings_open)
return GLOB.wings_open_list
else
return GLOB.wings_list
- */ // ORIGINAL END - SKYRAT EDIT START - CUSTOMIZATION - TODO: Add support for wings_open
+ */ // ORIGINAL END - NOVA EDIT START - CUSTOMIZATION - TODO: Add support for wings_open
if(wings_open)
return GLOB.sprite_accessories["wings_open"]
return GLOB.sprite_accessories["wings"]
- // SKYRAT EDIT END
+ // NOVA EDIT END
///Update our wingsprite to the open wings variant
/datum/bodypart_overlay/mutant/wings/functional/proc/open_wings()
diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm
index 595b907673b..88c1d5670fb 100644
--- a/code/modules/surgery/organs/external/wings/moth_wings.dm
+++ b/code/modules/surgery/organs/external/wings/moth_wings.dm
@@ -5,7 +5,7 @@
preference = "feature_moth_wings"
- //dna_block = DNA_MOTH_WINGS_BLOCK // SKYRAT EDIT REMOVAL
+ //dna_block = DNA_MOTH_WINGS_BLOCK // NOVA EDIT REMOVAL
bodypart_overlay = /datum/bodypart_overlay/mutant/wings/moth
@@ -71,7 +71,7 @@
///Moth wing bodypart overlay, including burn functionality!
/datum/bodypart_overlay/mutant/wings/moth
- feature_key = "wings" // SKYRAT EDIT - Customization - ORIGINAL: feature_key = "moth_wings"
+ feature_key = "wings" // NOVA EDIT - Customization - ORIGINAL: feature_key = "moth_wings"
layers = EXTERNAL_BEHIND | EXTERNAL_FRONT
///Accessory datum of the burn sprite
var/datum/sprite_accessory/burn_datum = /datum/sprite_accessory/moth_wings/burnt_off
@@ -84,11 +84,11 @@
burn_datum = fetch_sprite_datum(burn_datum)
/datum/bodypart_overlay/mutant/wings/moth/get_global_feature_list()
- return GLOB.sprite_accessories["wings"] // SKYRAT EDIT - Customization - ORIGINAL: return GLOB.moth_wings_list
+ return GLOB.sprite_accessories["wings"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.moth_wings_list
/datum/bodypart_overlay/mutant/wings/moth/can_draw_on_bodypart(mob/living/carbon/human/human)
if(!(human.wear_suit?.flags_inv & HIDEMUTWINGS))
- return ..(human, ignore_suit = TRUE) // SKYRAT EDIT - Customization - ORIGINAL: return TRUE
+ return ..(human, ignore_suit = TRUE) // NOVA EDIT - Customization - ORIGINAL: return TRUE
return FALSE
/datum/bodypart_overlay/mutant/wings/moth/get_base_icon_state()
diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm
index b77efe90c2e..b864e0f5b67 100644
--- a/code/modules/surgery/organs/internal/ears/_ears.dm
+++ b/code/modules/surgery/organs/internal/ears/_ears.dm
@@ -68,7 +68,7 @@
visual = TRUE
damage_multiplier = 2
-//SKYRAT EDIT REMOVAL BEGIN - CUSTOMIZATION
+//NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION
/*
/obj/item/organ/internal/ears/cat/on_insert(mob/living/carbon/human/ear_owner)
. = ..()
@@ -85,7 +85,7 @@
ear_owner.dna.species.mutant_bodyparts -= "ears"
ear_owner.update_body()
*/
-//SKYRAT EDIT REMOVAL END
+//NOVA EDIT REMOVAL END
/obj/item/organ/internal/ears/penguin
name = "penguin ears"
diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm
index 5ef52f589ca..f8b3286ff22 100644
--- a/code/modules/surgery/organs/internal/eyes/_eyes.dm
+++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm
@@ -50,7 +50,7 @@
/// indication that the eyes are undergoing some negative effect
var/damaged = FALSE
/// Native FOV that will be applied if a config is enabled
- var/native_fov = FOV_180_DEGREES //SKYRAT EDIT CHANGE
+ var/native_fov = NONE //NOVA EDIT CHANGE - ORIGINAL: var/native_fov = FOV_90_DEGREES
/obj/item/organ/internal/eyes/Insert(mob/living/carbon/eye_recipient, special = FALSE, drop_if_replaced = FALSE)
// If we don't do this before everything else, heterochromia will be reset leading to eye_color_right no longer being accurate
@@ -91,10 +91,10 @@
if(CONFIG_GET(flag/native_fov) && native_fov)
affected_human.add_fov_trait(type, native_fov)
- // SKYRAT EDIT ADDITION - EMISSIVES
+ // NOVA EDIT ADDITION - EMISSIVES
if (affected_human.emissive_eyes)
is_emissive = TRUE
- // SKYRAT EDIT END
+ // NOVA EDIT END
if(call_update)
affected_human.update_body()
@@ -123,7 +123,7 @@
eye_owner.update_tint()
eye_owner.update_sight()
- is_emissive = FALSE // SKYRAT EDIT ADDITION
+ is_emissive = FALSE // NOVA EDIT ADDITION
#define OFFSET_X 1
#define OFFSET_Y 2
@@ -136,16 +136,16 @@
if(isnull(eye_icon_state))
return list()
- var/eye_icon = parent.dna?.species.eyes_icon || 'icons/mob/human/human_face.dmi' // SKYRAT EDIT ADDITION
+ var/eye_icon = parent.dna?.species.eyes_icon || 'icons/mob/human/human_face.dmi' // NOVA EDIT ADDITION
- var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -BODY_LAYER)
- var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -BODY_LAYER)
+ var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer) // NOVA EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -BODY_LAYER)
+ var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer) // NOVA EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -BODY_LAYER)
var/list/overlays = list(eye_left, eye_right)
var/obscured = parent.check_obscured_slots(TRUE)
if(overlay_ignore_lighting && !(obscured & ITEM_SLOT_EYES))
- overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -eyes_layer, alpha = eye_left.alpha) // SKYRAT EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha)
- overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -eyes_layer, alpha = eye_right.alpha) // SKYRAT EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha)
+ overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -eyes_layer, alpha = eye_left.alpha) // NOVA EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha)
+ overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -eyes_layer, alpha = eye_right.alpha) // NOVA EDIT CHANGE - ORIGINAL: overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha)
var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD)
if(my_head)
if(my_head.head_flags & HEAD_EYECOLOR)
@@ -155,7 +155,7 @@
my_head.worn_face_offset.apply_offset(eye_left)
my_head.worn_face_offset.apply_offset(eye_right)
- // SKYRAT EDIT START - Customization (Synths + Emissives)
+ // NOVA EDIT START - Customization (Synths + Emissives)
if(eye_icon_state == "None")
eye_left.alpha = 0
eye_right.alpha = 0
@@ -171,7 +171,7 @@
overlays += emissive_left
overlays += emissive_right
- // SKYRAT EDIT END
+ // NOVA EDIT END
return overlays
@@ -728,7 +728,7 @@
desc = "These eyes seem to have a large range, but might be cumbersome with glasses."
eye_icon_state = "snail_eyes"
icon_state = "snail_eyeballs"
- eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //SKYRAT EDIT - Roundstart Snails
+ eyes_layer = ABOVE_BODY_FRONT_HEAD_LAYER //NOVA EDIT - Roundstart Snails
/obj/item/organ/internal/eyes/jelly
name = "jelly eyes"
diff --git a/code/modules/surgery/organs/internal/heart/_heart.dm b/code/modules/surgery/organs/internal/heart/_heart.dm
index 8a5646d1814..1d3da14fa00 100644
--- a/code/modules/surgery/organs/internal/heart/_heart.dm
+++ b/code/modules/surgery/organs/internal/heart/_heart.dm
@@ -119,7 +119,7 @@
SEND_SOUND(owner, sound('sound/health/fastbeat.ogg', repeat = TRUE, channel = CHANNEL_HEARTBEAT, volume = 40))
beat = BEAT_FAST
- else if(beat == BEAT_SLOW)
+ else if(beat != BEAT_NONE)
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
diff --git a/code/modules/surgery/organs/internal/liver/_liver.dm b/code/modules/surgery/organs/internal/liver/_liver.dm
index 28f74d9cf52..c8515582ac1 100644
--- a/code/modules/surgery/organs/internal/liver/_liver.dm
+++ b/code/modules/surgery/organs/internal/liver/_liver.dm
@@ -1,6 +1,6 @@
#define LIVER_DEFAULT_TOX_TOLERANCE 3 //amount of toxins the liver can filter out
#define LIVER_DEFAULT_TOX_RESISTANCE 1 //lower values lower how harmful toxins are to the liver
-#define LIVER_FAILURE_STAGE_SECONDS 180 //amount of seconds before liver failure reaches a new stage // SKYRAT EDIT CHANGE - Original: 60
+#define LIVER_FAILURE_STAGE_SECONDS 180 //amount of seconds before liver failure reaches a new stage // NOVA EDIT CHANGE - Original: 60
#define MAX_TOXIN_LIVER_DAMAGE 2 //the max damage the liver can receive per second (~1 min at max damage will destroy liver)
/obj/item/organ/internal/liver
@@ -142,7 +142,7 @@
for(var/datum/reagent/toxin/toxin in cached_reagents)
if(toxin.affected_organ_flags && !(organ_flags & toxin.affected_organ_flags)) //this particular toxin does not affect this type of organ
continue
- var/amount = round(toxin.volume, CHEMICAL_QUANTISATION_LEVEL) // this is an optimization
+ var/amount = toxin.volume
if(belly)
amount += belly.reagents.get_reagent_amount(toxin.type)
@@ -304,6 +304,6 @@
#undef HAS_NO_TOXIN
#undef HAS_PAINFUL_TOXIN
#undef LIVER_DEFAULT_TOX_TOLERANCE
-//#undef LIVER_DEFAULT_TOX_RESISTANCE // SKYRAT EDIT REMOVAL - Needed in modular
+//#undef LIVER_DEFAULT_TOX_RESISTANCE // NOVA EDIT REMOVAL - Needed in modular
#undef LIVER_FAILURE_STAGE_SECONDS
#undef MAX_TOXIN_LIVER_DAMAGE
diff --git a/code/modules/surgery/organs/internal/stomach/_stomach.dm b/code/modules/surgery/organs/internal/stomach/_stomach.dm
index 81047ce0d8b..a1d615041e2 100644
--- a/code/modules/surgery/organs/internal/stomach/_stomach.dm
+++ b/code/modules/surgery/organs/internal/stomach/_stomach.dm
@@ -214,7 +214,7 @@
///This gets called after the owner takes a bite of food
/obj/item/organ/internal/stomach/proc/after_eat(atom/edible)
- SEND_SIGNAL(src, COMSIG_STOMACH_AFTER_EAT, edible) // SKYRAT EDIT ADDITION - Hemophage Organs
+ SEND_SIGNAL(src, COMSIG_STOMACH_AFTER_EAT, edible) // NOVA EDIT ADDITION - Hemophage Organs
return
/obj/item/organ/internal/stomach/proc/handle_disgust(mob/living/carbon/human/disgusted, seconds_per_tick, times_fired)
diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm
index 3d3d7240bb9..c0dcf47fbea 100644
--- a/code/modules/surgery/organs/internal/tongue/_tongue.dm
+++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm
@@ -191,7 +191,7 @@
say_mod = "hisses"
taste_sensitivity = 10 // combined nose + tongue, extra sensitive
modifies_speech = TRUE
- languages_native = list(/datum/language/draconic, /datum/language/ashtongue) //SKYRAT EDIT: Ashtongue for Ashwalkers
+ languages_native = list(/datum/language/draconic, /datum/language/ashtongue) //NOVA EDIT: Ashtongue for Ashwalkers
liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS | BUGS
disliked_foodtypes = GRAIN | DAIRY | CLOTH | GROSS
voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"}
@@ -199,7 +199,7 @@
var/static/regex/lizard_hiss = new("s+", "g")
var/static/regex/lizard_hiSS = new("S+", "g")
var/static/regex/lizard_kss = new(@"(\w)x", "g")
- /* // SKYRAT EDIT: REMOVAL
+ /* // NOVA EDIT: REMOVAL
var/static/regex/lizard_kSS = new(@"(\w)X", "g")
*/
var/static/regex/lizard_ecks = new(@"\bx([\-|r|R]|\b)", "g")
@@ -209,12 +209,12 @@
message = lizard_hiss.Replace(message, "sss")
message = lizard_hiSS.Replace(message, "SSS")
message = lizard_kss.Replace(message, "$1kss")
- /* // SKYRAT EDIT: REMOVAL
+ /* // NOVA EDIT: REMOVAL
message = lizard_kSS.Replace(message, "$1KSS")
*/
message = lizard_ecks.Replace(message, "ecks$1")
message = lizard_eckS.Replace(message, "ECKS$1")
- //SKYRAT EDIT START: Adding russian version to autohiss
+ //NOVA EDIT START: Adding russian version to autohiss
if(CONFIG_GET(flag/russian_text_formation))
var/static/regex/lizard_hiss_ru = new("с+", "g")
var/static/regex/lizard_hiSS_ru = new("С+", "g")
@@ -224,7 +224,7 @@
message = replacetext(message, "Ж", "Ш")
message = lizard_hiss_ru.Replace(message, "ссс")
message = lizard_hiSS_ru.Replace(message, "ССС")
- //SKYRAT EDIT END: Adding russian version to autohiss
+ //NOVA EDIT END: Adding russian version to autohiss
speech_args[SPEECH_MESSAGE] = message
/obj/item/organ/internal/tongue/lizard/silver
@@ -586,10 +586,10 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
color = "#96DB00" // TODO proper sprite, rather than recoloured pink tongue
modifies_speech = TRUE
voice_filter = "atempo=0.5" // makes them talk really slow
- liked_foodtypes = VEGETABLES | FRUIT | GROSS | RAW //SKYRAT EDIT - Roundstart Snails - Food Prefs
- disliked_foodtypes = DAIRY | ORANGES | SUGAR //SKYRAT EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus.
+ liked_foodtypes = VEGETABLES | FRUIT | GROSS | RAW //NOVA EDIT - Roundstart Snails - Food Prefs
+ disliked_foodtypes = DAIRY | ORANGES | SUGAR //NOVA EDIT: Roundstart Snails - As it turns out, you can't give a snail processed sugar or citrus.
-/* SKYRAT EDIT START - Roundstart Snails: Less annoying speech.
+/* NOVA EDIT START - Roundstart Snails: Less annoying speech.
/obj/item/organ/internal/tongue/snail/modify_speech(datum/source, list/speech_args)
var/new_message
var/message = speech_args[SPEECH_MESSAGE]
@@ -599,7 +599,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
else
new_message += message[i]
speech_args[SPEECH_MESSAGE] = new_message
-*/ // SKYRAT EDIT END
+*/ // NOVA EDIT END
/obj/item/organ/internal/tongue/ethereal
name = "electric discharger"
diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm
index f0a08585eae..f278121590d 100644
--- a/code/modules/surgery/revival.dm
+++ b/code/modules/surgery/revival.dm
@@ -98,19 +98,19 @@
on_revived(user, target)
return TRUE
- //SKYRAT EDIT CHANGE - DNR TRAIT - need this so that people don't just keep spamming the revival surgery; it runs success just bc the surgery steps are done
+ //NOVA EDIT CHANGE - DNR TRAIT - need this so that people don't just keep spamming the revival surgery; it runs success just bc the surgery steps are done
if(HAS_TRAIT(target, TRAIT_DNR))
target.visible_message(span_warning("...[target.p_they()] lie[target.p_s()] still, unaffected. Further attempts are futile, target.p_theyre() gone."))
else
target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still."))
- //SKYRAT EDIT CHANGE END - DNR TRAIT - ORIGINAL: target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still."))
+ //NOVA EDIT CHANGE END - DNR TRAIT - ORIGINAL: target.visible_message(span_warning("...[target.p_they()] convulse[target.p_s()], then lie[target.p_s()] still."))
return FALSE
/// Called when you have been successfully raised from the dead
/datum/surgery_step/revive/proc/on_revived(mob/surgeon, mob/living/patient)
patient.visible_message(span_notice("...[patient] wakes up, alive and aware!"))
patient.emote("gasp")
- to_chat(patient, "[CONFIG_GET(string/blackoutpolicy)] ") //SKYRAT EDIT ADDITION - BLACKOUT POLICY
+ to_chat(patient, "[CONFIG_GET(string/blackoutpolicy)] ") //NOVA EDIT ADDITION - BLACKOUT POLICY
if(HAS_MIND_TRAIT(surgeon, TRAIT_MORBID) && ishuman(surgeon)) // Contrary to their typical hatred of resurrection, it wouldn't be very thematic if morbid people didn't love playing god
var/mob/living/carbon/human/morbid_weirdo = surgeon
morbid_weirdo.add_mood_event("morbid_revival_success", /datum/mood_event/morbid_revival_success)
diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm
index 3f10087ab8f..526094f2b6f 100644
--- a/code/modules/surgery/surgery_step.dm
+++ b/code/modules/surgery/surgery_step.dm
@@ -64,7 +64,7 @@
return FALSE
#define SURGERY_SLOWDOWN_CAP_MULTIPLIER 2 //increase to make surgery slower but fail less, and decrease to make surgery faster but fail more
-#define SURGERY_SPEEDUP_AREA 0.5 // Skyrat Edit Addition - reward for doing surgery in surgery
+#define SURGERY_SPEEDUP_AREA 0.5 // NOVA EDIT Addition - reward for doing surgery in surgery
///Modifier given to surgery speed for dissected bodies.
#define SURGERY_SPEED_DISSECTION_MODIFIER 0.8
///Modifier given to users with TRAIT_MORBID on certain surgeries
@@ -107,7 +107,7 @@
var/was_sleeping = (target.stat != DEAD && target.IsSleeping())
- // Skyrat Edit Addition - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone)
+ // NOVA EDIT Addition - reward for doing surgery on calm patients, and for using surgery rooms(ie. surgerying alone)
if(was_sleeping || HAS_TRAIT(target, TRAIT_NUMBED) || target.stat == DEAD)
modded_time *= SURGERY_SPEEDUP_AREA
to_chat(user, span_notice("You are able to work faster due to the patient's calm attitude!"))
@@ -119,11 +119,11 @@
if(quiet_enviromnent)
modded_time *= SURGERY_SPEEDUP_AREA
to_chat(user, span_notice("You are able to work faster due to the quiet environment!"))
- // Skyrat Edit End
- // Skyrat Edit: Cyborgs are no longer immune to surgery speedups.
+ // NOVA EDIT End
+ // NOVA EDIT: Cyborgs are no longer immune to surgery speedups.
//if(iscyborg(user))//any immunities to surgery slowdown should go in this check.
//modded_time = time
- // Skyrat Edit End
+ // NOVA EDIT End
if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total.
@@ -150,7 +150,7 @@
surgery.step_in_progress = FALSE
return advance
-#undef SURGERY_SPEEDUP_AREA // SKYRAT EDIT ADDITION
+#undef SURGERY_SPEEDUP_AREA // NOVA EDIT ADDITION
/datum/surgery_step/proc/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
@@ -274,7 +274,7 @@
* * pain_message - The message to be displayed
* * mechanical_surgery - Boolean flag that represents if a surgery step is done on a mechanical limb (therefore does not force scream)
*/
-//SKYRAT EDIT START: Fixes painkillers not actually stopping pain. Adds mood effects to painful surgeries.
+//NOVA EDIT START: Fixes painkillers not actually stopping pain. Adds mood effects to painful surgeries.
/datum/surgery_step/proc/display_pain(mob/living/target, pain_message, mechanical_surgery = FALSE)
if(target.stat >= UNCONSCIOUS) //the unconscious do not worry about pain
return
@@ -288,7 +288,7 @@
target.add_mood_event("severe_surgery", /datum/mood_event/severe_surgery)
if(prob(30))
target.emote("scream")
-//SKYRAT EDIT END
+//NOVA EDIT END
#undef SURGERY_SPEED_DISSECTION_MODIFIER
#undef SURGERY_SPEED_MORBID_CURIOSITY
diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm
index b9a9f27a28a..8be96f27404 100644
--- a/code/modules/tgs/core/core.dm
+++ b/code/modules/tgs/core/core.dm
@@ -42,11 +42,11 @@
var/datum/tgs_version/max_api_version = TgsMaximumApiVersion();
if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter)
- TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.")
+ TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.")
api_datum = /datum/tgs_api/latest
if(!api_datum)
- TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
+ TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
return
TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]")
@@ -107,6 +107,13 @@
if(api)
return api.ApiVersion()
+/world/TgsEngine()
+#ifdef OPENDREAM
+ return TGS_ENGINE_TYPE_OPENDREAM
+#else
+ return TGS_ENGINE_TYPE_BYOND
+#endif
+
/world/TgsInstanceName()
var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs)
if(api)
diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm
index 83420d130a7..616263098fd 100644
--- a/code/modules/tgs/v5/__interop_version.dm
+++ b/code/modules/tgs/v5/__interop_version.dm
@@ -1 +1 @@
-"5.7.0"
+"5.8.0"
diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm
index 48969c0c7d5..1c7d67d20cd 100644
--- a/code/modules/tgs/v5/_defines.dm
+++ b/code/modules/tgs/v5/_defines.dm
@@ -8,7 +8,6 @@
#define DMAPI5_TOPIC_REQUEST_LIMIT 65528
#define DMAPI5_TOPIC_RESPONSE_LIMIT 65529
-#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0
#define DMAPI5_BRIDGE_COMMAND_STARTUP 1
#define DMAPI5_BRIDGE_COMMAND_PRIME 2
#define DMAPI5_BRIDGE_COMMAND_REBOOT 3
@@ -18,6 +17,7 @@
#define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier"
#define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands"
+#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort"
#define DMAPI5_CHUNK "chunk"
#define DMAPI5_CHUNK_PAYLOAD "payload"
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 7226f29bba6..25d49b3e3bd 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -17,6 +17,8 @@
var/list/chat_channels
var/initialized = FALSE
+ var/initial_bridge_request_received = FALSE
+ var/datum/tgs_version/interop_version
var/chunked_requests = 0
var/list/chunked_topics = list()
@@ -25,7 +27,8 @@
/datum/tgs_api/v5/New()
. = ..()
- TGS_DEBUG_LOG("V5 API created")
+ interop_version = version
+ TGS_DEBUG_LOG("V5 API created: [json_encode(args)]")
/datum/tgs_api/v5/ApiVersion()
return new /datum/tgs_version(
@@ -38,8 +41,8 @@
access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER]
var/datum/tgs_version/api_version = ApiVersion()
- version = null
- var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands()))
+ version = null // we want this to be the TGS version, not the interop version
+ var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort()))
if(!istype(bridge_response))
TGS_ERROR_LOG("Failed initial bridge request!")
return FALSE
@@ -53,7 +56,8 @@
TGS_INFO_LOG("DMAPI validation, exiting...")
TerminateWorld()
- version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION])
+ initial_bridge_request_received = TRUE
+ version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates
security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL]
visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY]
instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME]
@@ -102,10 +106,17 @@
initialized = TRUE
return TRUE
+/datum/tgs_api/v5/proc/GetTopicPort()
+#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS)
+ return "[world.opendream_topic_port]"
+#else
+ return null
+#endif
+
/datum/tgs_api/v5/proc/RequireInitialBridgeResponse()
TGS_DEBUG_LOG("RequireInitialBridgeResponse()")
var/logged = FALSE
- while(!version)
+ while(!initial_bridge_request_received)
if(!logged)
TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep")
logged = TRUE
diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm
index 37f58bcdf63..a0ab3598767 100644
--- a/code/modules/tgs/v5/bridge.dm
+++ b/code/modules/tgs/v5/bridge.dm
@@ -48,7 +48,9 @@
var/json = CreateBridgeData(command, data, TRUE)
var/encoded_json = url_encode(json)
- var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
+ var/api_prefix = interop_version.minor >= 8 ? "api/" : ""
+
+ var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
return url
/datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth)
@@ -81,11 +83,16 @@
TGS_ERROR_LOG("Failed bridge request: [bridge_request]")
return
- var/response_json = file2text(export_response["CONTENT"])
- if(!response_json)
+ var/content = export_response["CONTENT"]
+ if(!content)
TGS_ERROR_LOG("Failed bridge request, missing content!")
return
+ var/response_json = file2text(content)
+ if(!response_json)
+ TGS_ERROR_LOG("Failed bridge request, failed to load content!")
+ return
+
var/list/bridge_response = json_decode(response_json)
if(!bridge_response)
TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]")
diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm
index 2ef0c70a97f..05e6c4e1b21 100644
--- a/code/modules/tgs/v5/topic.dm
+++ b/code/modules/tgs/v5/topic.dm
@@ -175,6 +175,7 @@
var/list/reattach_response = TopicResponse(error_message)
reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands()
+ reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort()
return reattach_response
if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK)
diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm
index fd1ed7e4cf5..d531d4b7b9d 100644
--- a/code/modules/tgs/v5/undefs.dm
+++ b/code/modules/tgs/v5/undefs.dm
@@ -8,7 +8,6 @@
#undef DMAPI5_TOPIC_REQUEST_LIMIT
#undef DMAPI5_TOPIC_RESPONSE_LIMIT
-#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE
#undef DMAPI5_BRIDGE_COMMAND_STARTUP
#undef DMAPI5_BRIDGE_COMMAND_PRIME
#undef DMAPI5_BRIDGE_COMMAND_REBOOT
@@ -18,6 +17,7 @@
#undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER
#undef DMAPI5_PARAMETER_CUSTOM_COMMANDS
+#undef DMAPI5_PARAMETER_TOPIC_PORT
#undef DMAPI5_CHUNK
#undef DMAPI5_CHUNK_PAYLOAD
diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm
index 0ea9c45d310..4749ef27872 100644
--- a/code/modules/tgui_input/alert.dm
+++ b/code/modules/tgui_input/alert.dm
@@ -77,7 +77,7 @@
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_alert/Destroy(force, ...)
+/datum/tgui_alert/Destroy(force)
SStgui.close_uis(src)
state = null
QDEL_NULL(buttons)
diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm
index 9204e67ba36..53b264038dc 100644
--- a/code/modules/tgui_input/checkboxes.dm
+++ b/code/modules/tgui_input/checkboxes.dm
@@ -70,7 +70,7 @@
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_checkbox_input/Destroy(force, ...)
+/datum/tgui_checkbox_input/Destroy(force)
SStgui.close_uis(src)
state = null
QDEL_NULL(items)
diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm
index 18525e6b10a..174f16fc7b5 100644
--- a/code/modules/tgui_input/list.dm
+++ b/code/modules/tgui_input/list.dm
@@ -94,7 +94,7 @@
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_list_input/Destroy(force, ...)
+/datum/tgui_list_input/Destroy(force)
SStgui.close_uis(src)
state = null
QDEL_NULL(items)
diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm
index e0a3f1951e5..68998acb033 100644
--- a/code/modules/tgui_input/number.dm
+++ b/code/modules/tgui_input/number.dm
@@ -92,7 +92,7 @@
if(default > max_value)
CRASH("Default value is greater than max value.")
-/datum/tgui_input_number/Destroy(force, ...)
+/datum/tgui_input_number/Destroy(force)
SStgui.close_uis(src)
state = null
return ..()
diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm
index 1185aaa12af..f700a6cdbea 100644
--- a/code/modules/tgui_input/say_modal/modal.dm
+++ b/code/modules/tgui_input/say_modal/modal.dm
@@ -86,7 +86,7 @@
if(!payload?["channel"])
CRASH("No channel provided to an open TGUI-Say")
window_open = TRUE
- if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // SKYRAT EDIT CHANGE (Add LOOC_CHANNEL)
+ if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // NOVA EDIT CHANGE (Add LOOC_CHANNEL)
start_thinking()
if(!client.typing_indicators)
log_speech_indicators("[key_name(client)] started typing at [loc_name(client.mob)], indicators DISABLED.")
diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm
index 3cdfb5057d0..e4c5032e2b3 100644
--- a/code/modules/tgui_input/say_modal/speech.dm
+++ b/code/modules/tgui_input/say_modal/speech.dm
@@ -10,7 +10,7 @@
/datum/tgui_say/proc/alter_entry(payload)
var/entry = payload["entry"]
/// No OOC leaks
- if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // SKYRAT EDIT CHANGE - CUSTOMIZATION
+ if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // NOVA EDIT CHANGE - CUSTOMIZATION
return pick(hurt_phrases)
/// Random trimming for larger sentences
if(length(entry) > 50)
@@ -47,14 +47,14 @@
if(ADMIN_CHANNEL)
client.cmd_admin_say(entry)
return TRUE
- // SKYRAT EDIT ADDITION START - CUSTOMIZATION
+ // NOVA EDIT ADDITION START - CUSTOMIZATION
if(LOOC_CHANNEL)
client.looc(entry)
return TRUE
if(WHIS_CHANNEL)
client.mob.whisper_verb(entry)
return TRUE
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
return FALSE
/**
diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm
index f78ededab5d..f97e0326d58 100644
--- a/code/modules/tgui_input/text.dm
+++ b/code/modules/tgui_input/text.dm
@@ -90,7 +90,7 @@
start_time = world.time
QDEL_IN(src, timeout)
-/datum/tgui_input_text/Destroy(force, ...)
+/datum/tgui_input_text/Destroy(force)
SStgui.close_uis(src)
state = null
return ..()
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
index 49539920920..757fe67d81e 100644
--- a/code/modules/tooltip/tooltip.dm
+++ b/code/modules/tooltip/tooltip.dm
@@ -100,7 +100,7 @@ Notes:
/datum/tooltip/proc/do_hide()
winshow(owner, control, FALSE)
-/datum/tooltip/Destroy(force, ...)
+/datum/tooltip/Destroy(force)
last_target = null
return ..()
diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm
index 53fcd97cffe..9e297e8e829 100644
--- a/code/modules/transport/tram/tram_signals.dm
+++ b/code/modules/transport/tram/tram_signals.dm
@@ -5,7 +5,6 @@
icon = 'icons/obj/tram/crossing_signal.dmi'
icon_state = "crossing-inbound"
base_icon_state = "crossing-inbound"
- plane = GAME_PLANE_UPPER
layer = TRAM_SIGNAL_LAYER
max_integrity = 250
integrity_failure = 0.25
@@ -72,7 +71,7 @@
desc = "Indicates to pedestrians if it's safe to cross the tracks."
icon = 'icons/obj/tram/crossing_signal.dmi'
icon_state = "crossing-inbound"
- plane = GAME_PLANE_UPPER
+ layer = TRAM_SIGNAL_LAYER
max_integrity = 250
integrity_failure = 0.25
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 2.4
diff --git a/code/modules/tutorials/_tutorial.dm b/code/modules/tutorials/_tutorial.dm
index 3baa9ad148b..7819a9e2b85 100644
--- a/code/modules/tutorials/_tutorial.dm
+++ b/code/modules/tutorials/_tutorial.dm
@@ -16,7 +16,7 @@
RegisterSignal(user, COMSIG_QDELETING, PROC_REF(destroy_self))
RegisterSignal(user.client, COMSIG_QDELETING, PROC_REF(destroy_self))
-/datum/tutorial/Destroy(force, ...)
+/datum/tutorial/Destroy(force)
user.client?.screen -= instruction_screen
QDEL_NULL(instruction_screen)
@@ -163,7 +163,7 @@
ASSERT(ispath(tutorial_type, /datum/tutorial))
src.tutorial_type = tutorial_type
-/datum/tutorial_manager/Destroy(force, ...)
+/datum/tutorial_manager/Destroy(force)
if (!force)
stack_trace("Something is trying to destroy [type], which is a singleton")
return QDEL_HINT_LETMELIVE
diff --git a/code/modules/tutorials/tutorials/drop.dm b/code/modules/tutorials/tutorials/drop.dm
index de692edab43..06980b28848 100644
--- a/code/modules/tutorials/tutorials/drop.dm
+++ b/code/modules/tutorials/tutorials/drop.dm
@@ -12,7 +12,7 @@
var/atom/movable/screen/drop_preview
var/obj/last_held_item
-/datum/tutorial/drop/Destroy(force, ...)
+/datum/tutorial/drop/Destroy(force)
last_held_item = null
user.client?.screen -= drop_preview
QDEL_NULL(drop_preview)
diff --git a/code/modules/tutorials/tutorials/switch_hands.dm b/code/modules/tutorials/tutorials/switch_hands.dm
index bf27a9e9d83..f1bcbbb3b71 100644
--- a/code/modules/tutorials/tutorials/switch_hands.dm
+++ b/code/modules/tutorials/tutorials/switch_hands.dm
@@ -19,7 +19,7 @@
hand_to_watch = (user.active_hand_index % user.held_items.len) + 1
-/datum/tutorial/switch_hands/Destroy(force, ...)
+/datum/tutorial/switch_hands/Destroy(force)
user.client?.screen -= hand_preview
QDEL_NULL(hand_preview)
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 491edbcd580..2007e253763 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -273,11 +273,11 @@
#include "weird_food.dm"
#include "wizard_loadout.dm"
#include "worn_icons.dm"
-// SKYRAT EDIT START
+// NOVA EDIT START
#include "~skyrat\automapper.dm"
#include "~skyrat\loadout_dupes.dm"
#include "~skyrat\opposing_force.dm"
-// SKYRAT EDIT END
+// NOVA EDIT END
// END_INCLUDE
#ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter
#include "find_reference_sanity.dm"
diff --git a/code/modules/unit_tests/barsigns.dm b/code/modules/unit_tests/barsigns.dm
index dc667a53ba6..ec4d06b614e 100644
--- a/code/modules/unit_tests/barsigns.dm
+++ b/code/modules/unit_tests/barsigns.dm
@@ -2,22 +2,22 @@
* Test if icon states for each datum actually exist in the DMI.
*/
/datum/unit_test/barsigns_icon
- var/list/blacklisted_sign_types = list(/datum/barsign/fluffy, /datum/barsign/skyrat, /datum/barsign/skyrat/large) // SKYRAT EDIT ADDITION - Modular barsigns // THE FLUFFY FRONTIER EDIT ADDITION - Modular barsigns
+ var/list/blacklisted_sign_types = list(/datum/barsign/fluffy, /datum/barsign/skyrat, /datum/barsign/skyrat/large) // NOVA EDIT ADDITION - Modular barsigns // THE FLUFFY FRONTIER EDIT ADDITION - Modular barsigns
/datum/unit_test/barsigns_icon/Run()
var/obj/machinery/barsign_type = /obj/machinery/barsign
var/icon/barsign_icon = initial(barsign_type.icon)
var/list/barsign_icon_states = icon_states(barsign_icon)
- barsign_icon_states += icon_states(SKYRAT_BARSIGN_FILE) // SKYRAT EDIT ADDITION - Need to check modular barsigns
+ barsign_icon_states += icon_states(SKYRAT_BARSIGN_FILE) // NOVA EDIT ADDITION - Need to check modular barsigns
barsign_icon_states += icon_states(TFF_BARSIGN_FILE) // THE FLUFFY FRONTIER - Need to check modular barsigns
- barsign_icon_states += icon_states(SKYRAT_LARGE_BARSIGN_FILE) // SKYRAT EDIT ADDITION - Need to check modular barsigns
+ barsign_icon_states += icon_states(SKYRAT_LARGE_BARSIGN_FILE) // NOVA EDIT ADDITION - Need to check modular barsigns
// Check every datum real bar sign
for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns))
- // SKYRAT EDIT ADDITION BEGIN - MODULAR BARSIGNS
+ // NOVA EDIT ADDITION BEGIN - MODULAR BARSIGNS
if(sign_type in blacklisted_sign_types)
continue
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/datum/barsign/sign = new sign_type()
if(!(sign.icon_state in barsign_icon_states))
@@ -27,16 +27,16 @@
* Check that bar signs have a name and desc, and that the name is unique.
*/
/datum/unit_test/barsigns_name
- var/list/blacklisted_sign_types = list(/datum/barsign/fluffy, /datum/barsign/skyrat, /datum/barsign/skyrat/large) // SKYRAT EDIT ADDITION - Modular barsigns // THE FLUFFY FRONTIER EDIT ADDITION - Modular barsigns
+ var/list/blacklisted_sign_types = list(/datum/barsign/fluffy, /datum/barsign/skyrat, /datum/barsign/skyrat/large) // NOVA EDIT ADDITION - Modular barsigns // THE FLUFFY FRONTIER EDIT ADDITION - Modular barsigns
/datum/unit_test/barsigns_name/Run()
var/list/existing_names = list()
for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns))
- // SKYRAT EDIT ADDITION BEGIN - MODULAR BARSIGNS
+ // NOVA EDIT ADDITION BEGIN - MODULAR BARSIGNS
if(sign_type in blacklisted_sign_types)
continue
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
var/datum/barsign/sign = new sign_type()
if(!sign.name)
diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm
index 449188a75fd..b209e34aebb 100644
--- a/code/modules/unit_tests/changeling.dm
+++ b/code/modules/unit_tests/changeling.dm
@@ -11,7 +11,7 @@
var/datum/antagonist/changeling/ling_datum = ling.mind.has_antag_datum(/datum/antagonist/changeling)
// Get the ability we're testing
- ling_datum.give_power(/datum/action/changeling/sting/transformation) // SKYRAT EDIT CHANGE - Transformation sting not purchasable here - ORIGINAL : ling_datum.purchase_power(/datum/action/changeling/sting/transformation)
+ ling_datum.give_power(/datum/action/changeling/sting/transformation) // NOVA EDIT CHANGE - Transformation sting not purchasable here - ORIGINAL : ling_datum.purchase_power(/datum/action/changeling/sting/transformation)
var/datum/action/changeling/sting/transformation/sting_action = locate() in ling.actions
sting_action.selected_dna = ling_datum.current_profile
sting_action.sting_duration = 0.5 SECONDS // just makes sure everything settles.
@@ -75,12 +75,12 @@
// The more DNA features and random things we change, the more likely we are to catch something not updating correctly.
// Yeah guess who/what this is, I dare you.
ling.dna.features["mcolor"] = "#886600"
- ling.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features["tail_lizard"] = "Smooth"
- ling.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features["snout"] = "Sharp + Light"
- ling.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list("#292826", "#292826", "#8292826")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features["horns"] = "Curved"
- ling.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Short", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features["frills"] = "Sort"
- ling.dna.mutant_bodyparts["spines"] = list(MUTANT_INDEX_NAME = "Long + Membrane", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // SKYRAT EDIT CHANGE - ORIGINAL: ling.dna.features["spines"] = "Long + Membrane"
- ling.dna.body_markings["chest"] = list("Light Belly" = list("#886600", 0)) // SKYRAT EDIT CHANGE - ORIGINAL : ling.dna.features[body_markings] = list("Light Belly")
+ ling.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["tail_lizard"] = "Smooth"
+ ling.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["snout"] = "Sharp + Light"
+ ling.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Curled", MUTANT_INDEX_COLOR_LIST = list("#292826", "#292826", "#8292826")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["horns"] = "Curved"
+ ling.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Short", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["frills"] = "Sort"
+ ling.dna.mutant_bodyparts["spines"] = list(MUTANT_INDEX_NAME = "Long + Membrane", MUTANT_INDEX_COLOR_LIST = list("#886600", "#886600", "#886600")) // NOVA EDIT CHANGE - ORIGINAL: ling.dna.features["spines"] = "Long + Membrane"
+ ling.dna.body_markings["chest"] = list("Light Belly" = list("#886600", 0)) // NOVA EDIT CHANGE - ORIGINAL : ling.dna.features[body_markings] = list("Light Belly")
ling.dna.features["legs"] = DIGITIGRADE_LEGS
ling.eye_color_left = "#FFFFFF"
ling.eye_color_right = "#FFFFFF"
diff --git a/code/modules/unit_tests/emoting.dm b/code/modules/unit_tests/emoting.dm
index 4eecaca015c..52a63cd70bf 100644
--- a/code/modules/unit_tests/emoting.dm
+++ b/code/modules/unit_tests/emoting.dm
@@ -9,12 +9,12 @@
human.say("*shrug")
TEST_ASSERT_EQUAL(emotes_used, 1, "Human did not shrug")
- //SKYRAT EDIT REMOVAL BEGIN - Following check does not affect us
+ //NOVA EDIT REMOVAL BEGIN - Following check does not affect us
/*
human.say("*beep")
TEST_ASSERT_EQUAL(emotes_used, 1, "Human beeped, when that should be restricted to silicons")
*/
- //SKYRAT EDIT REMOVAL END
+ //NOVA EDIT REMOVAL END
human.setOxyLoss(140)
@@ -23,12 +23,12 @@
human.say("*shrug")
TEST_ASSERT_EQUAL(emotes_used, 1, "Human shrugged while unconscious")
- //SKYRAT EDIT REMOVAL BEGIN - Following check fails due to global cooldown from the above test step (.8s)
+ //NOVA EDIT REMOVAL BEGIN - Following check fails due to global cooldown from the above test step (.8s)
/*
human.say("*deathgasp")
TEST_ASSERT_EQUAL(emotes_used, 2, "Human could not deathgasp while unconscious")
*/
- //SKYRAT EDIT REMOVAL END
+ //NOVA EDIT REMOVAL END
human.key = null
diff --git a/code/modules/unit_tests/inhands.dm b/code/modules/unit_tests/inhands.dm
index 7edda7858f8..a10de4aed18 100644
--- a/code/modules/unit_tests/inhands.dm
+++ b/code/modules/unit_tests/inhands.dm
@@ -3,7 +3,7 @@
var/static/list/possible_icon_states = list()
var/fallback_log_message
var/unset_inhand_var_message
- /// additional_inhands_location is for downstream modularity support. as an example, for skyrat's usage, set additional_inhands_location = "modular_skyrat/master_files/icons/mob/inhands/"
+ /// additional_inhands_location is for downstream modularity support. as an example, for skyrat's usage, set additional_inhands_location = "modular_nova/master_files/icons/mob/inhands/"
/// Make sure this location is also present in tools/deploy.sh
/// If you need additional paths ontop of this second one, you can add another generate_possible_icon_states_list("your/folder/path/inhands/") below the if(additional_inhands_location) block in Run(), and make sure to add that path to tools/deploy.sh as well.
var/additional_inhands_location = null
diff --git a/code/modules/unit_tests/mecha_damage.dm b/code/modules/unit_tests/mecha_damage.dm
index 695f7c4b53d..19735b7bf9b 100644
--- a/code/modules/unit_tests/mecha_damage.dm
+++ b/code/modules/unit_tests/mecha_damage.dm
@@ -30,7 +30,7 @@
// Get a sample laser weapon.
// The captain's laser gun here is chosen primarily because it deals more damage than normal lasers.
var/obj/item/gun/energy/laser/dummy_laser = allocate(/obj/item/gun/energy/laser/captain)
- qdel(dummy_laser.GetComponent(/datum/component/gun_safety)) // SKYRAT EDIT - Safeties on guns make them impossible to shoot :)
+ qdel(dummy_laser.GetComponent(/datum/component/gun_safety)) // NOVA EDIT - Safeties on guns make them impossible to shoot :)
var/obj/item/ammo_casing/laser_ammo = dummy_laser.ammo_type[1]
var/obj/projectile/beam/laser_fired = initial(laser_ammo.projectile_type)
var/expected_laser_damage = round(dummy_laser.projectile_damage_multiplier * initial(laser_fired.damage) * (1 - expected_laser_armor / 100), DAMAGE_PRECISION)
@@ -38,7 +38,7 @@
// Get a sample ballistic weapon.
// The syndicate .357 here is chosen because it does a lot of damage.
var/obj/item/gun/ballistic/dummy_gun = allocate(/obj/item/gun/ballistic/revolver)
- qdel(dummy_gun.GetComponent(/datum/component/gun_safety)) // SKYRAT EDIT - Safeties on guns make them impossible to shoot :)
+ qdel(dummy_gun.GetComponent(/datum/component/gun_safety)) // NOVA EDIT - Safeties on guns make them impossible to shoot :)
var/obj/item/ammo_casing/ballistic_ammo = dummy_gun.magazine.ammo_type
var/obj/projectile/bullet_fired = initial(ballistic_ammo.projectile_type)
var/expected_bullet_damage = round(dummy_gun.projectile_damage_multiplier * initial(bullet_fired.damage) * (1 - expected_bullet_armor / 100), DAMAGE_PRECISION)
diff --git a/code/modules/unit_tests/organ_set_bonus.dm b/code/modules/unit_tests/organ_set_bonus.dm
index a5a31fc6bb4..06d9ba9f2e5 100644
--- a/code/modules/unit_tests/organ_set_bonus.dm
+++ b/code/modules/unit_tests/organ_set_bonus.dm
@@ -25,7 +25,7 @@
for(var/datum/infuser_entry/infuser_entry as anything in GLOB.infuser_entries)
var/output_organs = infuser_entry.output_organs
var/mob/living/carbon/human/lab_rat = allocate(/mob/living/carbon/human/consistent)
- lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) // SKYRAT EDIT - Customization
+ lab_rat.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Plain", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"), MUTANT_INDEX_EMISSIVE_LIST = list(FALSE)) // NOVA EDIT - Customization
var/list/obj/item/organ/inserted_organs = list()
// Attempt to insert entire list of mutant organs for the given infusion_entry.
diff --git a/code/modules/unit_tests/paintings.dm b/code/modules/unit_tests/paintings.dm
index abe3ba9aa97..0a8448a508a 100644
--- a/code/modules/unit_tests/paintings.dm
+++ b/code/modules/unit_tests/paintings.dm
@@ -3,10 +3,10 @@
/datum/unit_test/paintings/Run()
for(var/obj/item/canvas/canvas as anything in typesof(/obj/item/canvas))
- //SKYRAT EDIT START
+ //NOVA EDIT START
if(canvas == /obj/item/canvas/drawingtablet) //This doesn't need frames.
continue
- //SKYRAT EDIT END
+ //NOVA EDIT END
canvas = new canvas
var/canvas_icons = icon_states(canvas.icon)
for(var/frame_type in SSpersistent_paintings.frame_types_by_patronage_tier)
diff --git a/code/modules/unit_tests/projectiles.dm b/code/modules/unit_tests/projectiles.dm
index b6a910cee1c..fad9250cba3 100644
--- a/code/modules/unit_tests/projectiles.dm
+++ b/code/modules/unit_tests/projectiles.dm
@@ -23,11 +23,11 @@
TEST_ASSERT(loaded_bullet, "Ammo casing has no loaded bullet")
gunner.put_in_hands(test_gun, forced=TRUE)
- //SKYRAT EDIT ADDITION BEGIN
+ //NOVA EDIT ADDITION BEGIN
if(test_gun.GetComponent(/datum/component/gun_safety))
qdel(test_gun.GetComponent(/datum/component/gun_safety))
loaded_bullet.wound_bonus = CANT_WOUND //Baseline wounding makes things weird
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
gunner.set_combat_mode(FALSE) // just to make sure we know we're not trying to pistol-whip them
var/expected_damage = loaded_bullet.damage
loaded_bullet.def_zone = BODY_ZONE_CHEST
diff --git a/code/modules/unit_tests/screenshot_humanoids.dm b/code/modules/unit_tests/screenshot_humanoids.dm
index 6e5bcd03a6b..44373018a7a 100644
--- a/code/modules/unit_tests/screenshot_humanoids.dm
+++ b/code/modules/unit_tests/screenshot_humanoids.dm
@@ -5,10 +5,10 @@
// Test lizards as their own thing so we can get more coverage on their features
var/mob/living/carbon/human/lizard = allocate(/mob/living/carbon/human/dummy/consistent)
lizard.dna.features["mcolor"] = "#099"
- lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["tail_lizard"] = "Light Tiger"
- lizard.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["snout"] = "Sharp + Light"
- lizard.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["horns"] = "Simple"
- lizard.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // SKYRAT EDIT - Customization - ORIGINAL: lizard.dna.features["frills"] = "Aquatic"
+ lizard.dna.mutant_bodyparts["tail"] = list(MUTANT_INDEX_NAME = "Light Tiger", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["tail_lizard"] = "Light Tiger"
+ lizard.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Sharp + Light", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["snout"] = "Sharp + Light"
+ lizard.dna.mutant_bodyparts["horns"] = list(MUTANT_INDEX_NAME = "Simple", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["horns"] = "Simple"
+ lizard.dna.mutant_bodyparts["frills"] = list(MUTANT_INDEX_NAME = "Aquatic", MUTANT_INDEX_COLOR_LIST = list("#009999", "#009999", "#009999")) // NOVA EDIT - Customization - ORIGINAL: lizard.dna.features["frills"] = "Aquatic"
lizard.dna.features["legs"] = "Normal Legs"
lizard.set_species(/datum/species/lizard)
lizard.equipOutfit(/datum/outfit/job/engineer)
@@ -16,10 +16,10 @@
// let me have this
var/mob/living/carbon/human/moth = allocate(/mob/living/carbon/human/dummy/consistent)
- moth.dna.features["mcolor"] = "#E5CD99" // SKYRAT EDIT ADDITION - Customization
- moth.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Firewatch", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_antennae"] = "Firewatch"
- moth.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_markings"] = "None"
- moth.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Firewatch)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // SKYRAT EDIT - Customization - ORIGINAL: moth.dna.features["moth_wings"] = "Firewatch"
+ moth.dna.features["mcolor"] = "#E5CD99" // NOVA EDIT ADDITION - Customization
+ moth.dna.mutant_bodyparts["moth_antennae"] = list(MUTANT_INDEX_NAME = "Firewatch", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_antennae"] = "Firewatch"
+ moth.dna.mutant_bodyparts["moth_markings"] = list(MUTANT_INDEX_NAME = "None", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_markings"] = "None"
+ moth.dna.mutant_bodyparts["wings"] = list(MUTANT_INDEX_NAME = "Moth (Firewatch)", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF", "#FFFFFF", "#FFFFFF")) // NOVA EDIT - Customization - ORIGINAL: moth.dna.features["moth_wings"] = "Firewatch"
moth.set_species(/datum/species/moth)
moth.equipOutfit(/datum/outfit/job/cmo, visualsOnly = TRUE)
test_screenshot("[/datum/species/moth]", get_flat_icon_for_all_directions(moth))
@@ -31,9 +31,9 @@
/datum/unit_test/screenshot_humanoids/proc/make_dummy(species, job_outfit)
var/mob/living/carbon/human/dummy/consistent/dummy = allocate(/mob/living/carbon/human/dummy/consistent)
dummy.set_species(species)
- // SKYRAT EDIT ADDITION START - More consistent screenshots
+ // NOVA EDIT ADDITION START - More consistent screenshots
var/datum/species/dummy_species = new species
dummy_species.prepare_human_for_preview(dummy)
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
dummy.equipOutfit(job_outfit, visualsOnly = TRUE)
return dummy
diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png
index 4cdec6cc5b6..6795b571c8f 100644
Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizard.png differ
diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png
index 4cdec6cc5b6..6795b571c8f 100644
Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_wizardmidround.png differ
diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png
index 9f591d0cdba..cfbd40f8db7 100644
Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_vox_primalis.png differ
diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm
index 5a090a59a93..f47fc72fbf3 100644
--- a/code/modules/unit_tests/simple_animal_freeze.dm
+++ b/code/modules/unit_tests/simple_animal_freeze.dm
@@ -8,7 +8,6 @@
/mob/living/simple_animal/bot,
/mob/living/simple_animal/bot/firebot,
/mob/living/simple_animal/bot/floorbot,
- /mob/living/simple_animal/bot/hygienebot,
/mob/living/simple_animal/bot/mulebot,
/mob/living/simple_animal/bot/mulebot/paranormal,
/mob/living/simple_animal/bot/secbot,
diff --git a/code/modules/unit_tests/species_change_clothing.dm b/code/modules/unit_tests/species_change_clothing.dm
index c73da727103..d41d2a24715 100644
--- a/code/modules/unit_tests/species_change_clothing.dm
+++ b/code/modules/unit_tests/species_change_clothing.dm
@@ -9,14 +9,14 @@
morphing_human.equipOutfit(/datum/outfit/job/assistant/consistent)
morphing_human.dna.features["legs"] = DIGITIGRADE_LEGS //you WILL have digitigrade legs
- /* SKYRAT EDIT REMOVAL START - This part of the test is useless as it's behavior that we actually WANT from those shoes, here.
+ /* NOVA EDIT REMOVAL START - This part of the test is useless as it's behavior that we actually WANT from those shoes, here.
var/obj/item/human_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET)
human_shoes.supports_variations_flags = NONE //do not fit lizards at all costs.
morphing_human.set_species(/datum/species/lizard)
var/obj/item/lizard_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET)
// TEST_ASSERT_NOTEQUAL(human_shoes, lizard_shoes, "Lizard still has shoes after changing species.")
- */ // SKYRAT EDIT REMOVAL END
+ */ // NOVA EDIT REMOVAL END
// Testing whether item-species restrictions properly blocks changing into a blacklisted species.
morphing_human.set_species(/datum/species/monkey)
diff --git a/code/modules/unit_tests/strippable.dm b/code/modules/unit_tests/strippable.dm
index 18f521929cd..ff5b055c3fe 100644
--- a/code/modules/unit_tests/strippable.dm
+++ b/code/modules/unit_tests/strippable.dm
@@ -8,7 +8,7 @@
var/datum/strip_menu/strip_menu = allocate(/datum/strip_menu, target, strippable)
- run_loc_floor_bottom_left.luminosity = 6 // SKYRAT EDIT - Making this unit test pass by lighting a turf up.
+ run_loc_floor_bottom_left.luminosity = 6 // NOVA EDIT - Making this unit test pass by lighting a turf up.
var/ui_state = strip_menu.ui_state(user)
diff --git a/code/modules/unit_tests/trauma_granting.dm b/code/modules/unit_tests/trauma_granting.dm
index 26f536d74df..df25ef2be7f 100644
--- a/code/modules/unit_tests/trauma_granting.dm
+++ b/code/modules/unit_tests/trauma_granting.dm
@@ -17,9 +17,9 @@
trauma_blacklist += typesof(/datum/brain_trauma/special/imaginary_friend)
// Requires a obsession target
trauma_blacklist += typesof(/datum/brain_trauma/special/obsessed)
- //SKYRAT EDIT START
+ //NOVA EDIT START
trauma_blacklist += typesof(/datum/brain_trauma/very_special/induced_hypnosis) // Requires an object to properly work
- //SKYRAT EDIT END
+ //NOVA EDIT END
for(var/datum/brain_trauma/trauma as anything in typesof(/datum/brain_trauma) - trauma_blacklist)
if(trauma == initial(trauma.abstract_type))
diff --git a/code/modules/unit_tests/turf_icons.dm b/code/modules/unit_tests/turf_icons.dm
index e7b7d722ffb..814c09827b5 100644
--- a/code/modules/unit_tests/turf_icons.dm
+++ b/code/modules/unit_tests/turf_icons.dm
@@ -1,6 +1,6 @@
/// Makes sure turf icons actually exist. :)
/datum/unit_test/turf_icons
- var/modular_mineral_turf_file = 'modular_skyrat/modules/xenoarch/icons/mining.dmi' //= 'icons/turf/mining.dmi' //MODULARITY SUPPORT - insert your snowflake MAP_SWITCH icon file here if you use that define. // SKYRAT EDIT - Added our modular file here (thanks)
+ var/modular_mineral_turf_file = 'modular_nova/modules/xenoarch/icons/mining.dmi' //= 'icons/turf/mining.dmi' //MODULARITY SUPPORT - insert your snowflake MAP_SWITCH icon file here if you use that define. // NOVA EDIT - Added our modular file here (thanks)
/datum/unit_test/turf_icons/Run()
for(var/turf/turf_path as anything in (subtypesof(/turf) - typesof(/turf/closed/mineral)))
@@ -28,10 +28,10 @@
var/list/ignored_types = list()
//ignored_types += typesof(YOUR_DOWNSTREAM_TYPEPATH(s)_HERE) //MODULARITY SUPPORT. If you have snowflake typepaths that are blacklisted in, for example, create & destroy unit test because they require certain SS's being init, use this to blacklist them.
- //SKYRAT EDIT START
+ //NOVA EDIT START
ignored_types += typesof(/turf/open/openspace/ocean)
ignored_types += typesof(/turf/open/floor/plating/ocean)
- // SKYRAT EDIT END
+ // NOVA EDIT END
for(var/turf/open/open_turf_path as anything in (subtypesof(/turf/open) - ignored_types))
diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm
index 2ad1f182215..078e7ffc32d 100644
--- a/code/modules/unit_tests/unit_test.dm
+++ b/code/modules/unit_tests/unit_test.dm
@@ -320,7 +320,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests())
returnable_list += typesof(/turf/open/space/openspace)
returnable_list += typesof(/turf/open/openspace)
- //SKYRAT EDIT ADDITION START - OUR UNCREATABLES DOWN HERE
+ //NOVA EDIT ADDITION START - OUR UNCREATABLES DOWN HERE
//Not designed to be spawned without a turf.
returnable_list += typesof(/obj/effect/abstract/liquid_turf)
//Not designed to be spawned individually.
@@ -334,7 +334,7 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests())
// These two are locked to one type only, and shouldn't be widely available, hence why they runtime otherwise.
// Can't be bothered adding more to them.
returnable_list += list(/obj/item/organ/external/neck_accessory, /obj/item/organ/external/head_accessory)
- //SKYRAT EDIT ADDITION END
+ //NOVA EDIT ADDITION END
return returnable_list
diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm
index 6fa148529b4..e8fd6048c1c 100644
--- a/code/modules/uplink/uplink_devices.dm
+++ b/code/modules/uplink/uplink_devices.dm
@@ -110,12 +110,12 @@
// Multitool uplink
////obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20, datum/uplink_handler/uplink_handler_override = null) //ORIGINAL
-/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //SKYRAT EDIT CHANGE
+/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //NOVA EDIT CHANGE
. = ..()
AddComponent(/datum/component/uplink, owner, FALSE, TRUE, UPLINK_TRAITORS, tc_amount)
// Pen uplink
///obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20, datum/uplink_handler/uplink_handler_override = null) //ORIGINAL
-/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //SKYRAT EDIT CHANGE
+/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 35, datum/uplink_handler/uplink_handler_override = null) //NOVA EDIT CHANGE
. = ..()
AddComponent(/datum/component/uplink, owner, TRUE, FALSE, UPLINK_TRAITORS, tc_amount)
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 2c060b6ff98..32783504fe8 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -137,6 +137,10 @@
to_chat(user, span_boldnotice("[A] materializes onto the floor!"))
return A
+///For special overrides if an item can be bought or not.
+/datum/uplink_item/proc/can_be_bought(datum/uplink_handler/source)
+ return TRUE
+
/datum/uplink_category/discounts
name = "Discounted Gear"
weight = -1
diff --git a/code/modules/uplink/uplink_items/contractor.dm b/code/modules/uplink/uplink_items/contractor.dm
new file mode 100644
index 00000000000..1364f8b088b
--- /dev/null
+++ b/code/modules/uplink/uplink_items/contractor.dm
@@ -0,0 +1,109 @@
+/datum/uplink_category/contractor
+ name = "Contractor"
+ weight = 10
+
+/datum/uplink_item/bundles_tc/contract_kit
+ name = "Contract Kit"
+ desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC \
+ and cash payouts. Upon purchase, you'll be granted your own contract uplink embedded within the supplied \
+ tablet computer. Additionally, you'll be granted standard contractor gear to help with your mission - \
+ comes supplied with the tablet, specialised space suit, chameleon jumpsuit and mask, agent card, \
+ specialised contractor baton, and three randomly selected low cost items. \
+ Can include otherwise unobtainable items."
+ item = /obj/item/storage/box/syndicate/contract_kit
+ category = /datum/uplink_category/contractor
+ cost = 20
+ purchasable_from = UPLINK_INFILTRATORS
+
+/datum/uplink_item/bundles_tc/contract_kit/purchase(mob/user, datum/uplink_handler/uplink_handler, atom/movable/source)
+ . = ..()
+ for(var/uplink_items in subtypesof(/datum/uplink_item/contractor))
+ var/datum/uplink_item/uplink_item = new uplink_items
+ uplink_handler.extra_purchasable += uplink_item
+
+/datum/uplink_item/contractor
+ restricted = TRUE
+ category = /datum/uplink_category/contractor
+ purchasable_from = NONE //they will be added to extra_purchasable
+
+//prevents buying contractor stuff before you make an account.
+/datum/uplink_item/contractor/can_be_bought(datum/uplink_handler/uplink_handler)
+ if(!uplink_handler.contractor_hub)
+ return FALSE
+ return ..()
+
+/datum/uplink_item/contractor/reroll
+ name = "Contract Reroll"
+ desc = "Request a reroll of your current contract list. Will generate a new target, \
+ payment, and dropoff for the contracts you currently have available."
+ item = /obj/effect/gibspawner/generic
+ limited_stock = 2
+ cost = 0
+
+/datum/uplink_item/contractor/reroll/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source)
+ //We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets.
+ var/list/new_target_list = list()
+ for(var/datum/syndicate_contract/contract_check in uplink_handler.contractor_hub.assigned_contracts)
+ if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE)
+ if (contract_check.contract.target)
+ new_target_list.Add(contract_check.contract.target)
+ continue
+
+ //Reroll contracts without duplicates
+ for(var/datum/syndicate_contract/rerolling_contract in uplink_handler.contractor_hub.assigned_contracts)
+ if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE)
+ continue
+
+ rerolling_contract.generate(new_target_list)
+ new_target_list.Add(rerolling_contract.contract.target)
+
+ //Set our target list with the new set we've generated.
+ uplink_handler.contractor_hub.assigned_targets = new_target_list
+ return source //for log icon
+
+/datum/uplink_item/contractor/pinpointer
+ name = "Contractor Pinpointer"
+ desc = "A pinpointer that finds targets even without active suit sensors. \
+ Due to taking advantage of an exploit within the system, it can't pinpoint \
+ to the same accuracy as the traditional models. \
+ Becomes permanently locked to the user that first activates it."
+ item = /obj/item/pinpointer/crew/contractor
+ limited_stock = 2
+ cost = 1
+
+/datum/uplink_item/contractor/extraction_kit
+ name = "Fulton Extraction Kit"
+ desc = "For getting your target across the station to those difficult dropoffs. \
+ Place the beacon somewhere secure, and link the pack. \
+ Activating the pack on your target will send them over to the beacon - \
+ make sure they're not just going to run away though!"
+ item = /obj/item/storage/box/contractor/fulton_extraction
+ limited_stock = 1
+ cost = 1
+
+/datum/uplink_item/contractor/partner
+ name = "Reinforcements"
+ desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, \
+ we'll send them down to assist you immediately. If no units are free, we give a full refund."
+ item = /obj/effect/gibspawner/generic
+ limited_stock = 1
+ cost = 2
+
+/datum/uplink_item/contractor/partner/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source)
+ to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents..."))
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ question = "Do you want to play as the Contractor Support Unit for [user.real_name]?",
+ check_jobban = ROLE_TRAITOR,
+ role = ROLE_TRAITOR,
+ poll_time = 10 SECONDS,
+ ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT,
+ pic_source = /obj/item/modular_computer/pda/syndicate_contract_uplink,
+ role_name_text = "contractor support unit",
+ )
+ if(!LAZYLEN(candidates))
+ to_chat(user, span_notice("No available agents at this time, please try again later."))
+ limited_stock++
+ return //bobux no icon
+ var/mob/dead/observer/selected_player = pick(candidates)
+ uplink_handler.contractor_hub.contractor_teammate = spawn_contractor_partner(user, selected_player.key)
+ return source //for log icon
diff --git a/code/modules/uplink/uplink_items/device_tools.dm b/code/modules/uplink/uplink_items/device_tools.dm
index c698a46761b..a4862ae4e2e 100644
--- a/code/modules/uplink/uplink_items/device_tools.dm
+++ b/code/modules/uplink/uplink_items/device_tools.dm
@@ -66,8 +66,8 @@
cost = 1
surplus = 20
-/* // SKYRAT EDIT REMOVAL
-/datum/uplink_item/device_tools/briefcase_launchpad
+/* // NOVA EDIT REMOVAL
+/datum/uplink_item/device_tools/briefcase_launchpad
name = "Briefcase Launchpad"
desc = "A briefcase containing a launchpad, a device able to teleport items and people to and from targets up to eight tiles away from the briefcase. \
Also includes a remote control, disguised as an ordinary folder. Touch the briefcase with the remote to link it."
@@ -83,7 +83,7 @@
Comes with 4 charges, recharges randomly. Warranty null and void if exposed to an electromagnetic pulse."
item = /obj/item/storage/box/syndie_kit/syndicate_teleporter
cost = 8
-*/ //END SKYRAT EDIT
+*/ //END NOVA EDIT
/datum/uplink_item/device_tools/camera_app
name = "SyndEye Program"
@@ -177,7 +177,7 @@
cost = 3
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
-/* SKYRAT EDIT REMOVAL - It's laggy and doesn't really add much roleplay value
+/* NOVA EDIT REMOVAL - It's laggy and doesn't really add much roleplay value
/datum/uplink_item/device_tools/suspiciousphone
name = "Protocol CRAB-17 Phone"
desc = "The Protocol CRAB-17 Phone, a phone borrowed from an unknown third party, it can be used to crash the space market, funneling the losses of the crew to your bank account.\
@@ -186,7 +186,7 @@
restricted = TRUE
cost = 7
limited_stock = 1
-*/ // SKYRAT EDIT REMOVAL END
+*/ // NOVA EDIT REMOVAL END
/datum/uplink_item/device_tools/binary
name = "Binary Translator Key"
diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm
index 59a44325673..8a2c33f43ae 100644
--- a/code/modules/uplink/uplink_items/explosive.dm
+++ b/code/modules/uplink/uplink_items/explosive.dm
@@ -35,7 +35,7 @@
item = /obj/item/storage/backpack/duffelbag/syndie/x4
cost = 4
cant_discount = TRUE
-/* //SKYRAT EDIT REMOVAL START
+/* //NOVA EDIT REMOVAL START
/datum/uplink_item/explosives/detomatix
name = "Detomatix disk"
desc = "When inserted into a tablet, this cartridge gives you four opportunities to \
diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm
index 2467cd35a35..a0b189bd220 100644
--- a/code/modules/uplink/uplink_items/job.dm
+++ b/code/modules/uplink/uplink_items/job.dm
@@ -324,7 +324,7 @@
surplus = 10
*/
-// SKYRAT EDIT END
+// NOVA EDIT END
/datum/uplink_item/role_restricted/blastcannon
name = "Blast Cannon"
desc = "A highly specialized weapon, the Blast Cannon is actually relatively simple. It contains an attachment for a tank transfer valve mounted to an angled pipe specially constructed \
diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm
index 341a33baa6a..6b31c9d90b2 100644
--- a/code/modules/uplink/uplink_items/nukeops.dm
+++ b/code/modules/uplink/uplink_items/nukeops.dm
@@ -245,7 +245,7 @@
/datum/uplink_item/weapon_kits/high_cost/machinegun
name = "L6 Squad Automatic Weapon (Moderate)"
desc = "A fully-loaded Scarborough Arms belt-fed machine gun. \
- This deadly weapon has a 50-round box chambered for 7.12x82mm ammunition." //SKYRAT EDIT - AUSSEC TO SCARBOROUGH
+ This deadly weapon has a 50-round box chambered for 7.12x82mm ammunition." //NOVA EDIT - AUSSEC TO SCARBOROUGH
item = /obj/item/gun/ballistic/automatic/l6_saw
/datum/uplink_item/ammo_nuclear/basic/machinegun
diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm
index 5fec0fdefce..1f1bcf4b5d0 100644
--- a/code/modules/uplink/uplink_items/stealthy.dm
+++ b/code/modules/uplink/uplink_items/stealthy.dm
@@ -101,4 +101,5 @@
item = /obj/item/melee/baton/telescopic/contractor_baton
cost = 12
surplus = 50
+ limited_stock = 1
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm
index fe79feff66b..3e810c03073 100644
--- a/code/modules/vehicles/_vehicle.dm
+++ b/code/modules/vehicles/_vehicle.dm
@@ -6,7 +6,6 @@
max_integrity = 300
armor_type = /datum/armor/obj_vehicle
layer = VEHICLE_LAYER
- plane = GAME_PLANE // SKYRAT EDIT - ORIGINAL: plane = GAME_PLANE_FOV_HIDDEN
density = TRUE
anchored = FALSE
blocks_emissive = EMISSIVE_BLOCK_GENERIC
@@ -191,5 +190,5 @@
. = ..()
if(trailer && .)
var/dir_to_move = get_dir(trailer.loc, old_loc)
- trailer.glide_size = glide_size //SKYRAT EDIT: Carts
+ trailer.glide_size = glide_size //NOVA EDIT: Carts
step(trailer, dir_to_move)
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index b72449de091..aa9a963a101 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -59,22 +59,18 @@
turret.pixel_x = base_pixel_x
turret.pixel_y = base_pixel_y + 4
turret.layer = ABOVE_MOB_LAYER
- SET_PLANE(turret, GAME_PLANE_UPPER, our_turf)
if(EAST)
turret.pixel_x = base_pixel_x - 12
turret.pixel_y = base_pixel_y + 4
turret.layer = OBJ_LAYER
- SET_PLANE(turret, GAME_PLANE, our_turf)
if(SOUTH)
turret.pixel_x = base_pixel_x
turret.pixel_y = base_pixel_y + 4
turret.layer = OBJ_LAYER
- SET_PLANE(turret, GAME_PLANE, our_turf)
if(WEST)
turret.pixel_x = base_pixel_x + 12
turret.pixel_y = base_pixel_y + 4
turret.layer = OBJ_LAYER
- SET_PLANE(turret, GAME_PLANE, our_turf)
/obj/vehicle/ridden/atv/welder_act(mob/living/user, obj/item/W)
if(user.combat_mode)
diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm
index 5dcb5e64e06..d971b82a856 100644
--- a/code/modules/vehicles/mecha/_mecha.dm
+++ b/code/modules/vehicles/mecha/_mecha.dm
@@ -267,6 +267,7 @@
equip_by_category[key] -= path
AddElement(/datum/element/falling_hazard, damage = 80, wound_bonus = 10, hardhat_safety = FALSE, crushes = TRUE)
+ AddElement(/datum/element/hostile_machine)
/obj/vehicle/sealed/mecha/Destroy()
for(var/ejectee in occupants)
@@ -576,7 +577,7 @@
if(!enclosed && occupant?.incapacitated()) //no sides mean it's easy to just sorta fall out if you're incapacitated.
mob_exit(occupant, randomstep = TRUE) //bye bye
continue
- if(cell)
+ if(cell && cell.maxcharge)
var/cellcharge = cell.charge/cell.maxcharge
switch(cellcharge)
if(0.75 to INFINITY)
@@ -589,6 +590,8 @@
occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/lowcell/mech, 3)
else
occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/emptycell/mech)
+ else
+ occupant.throw_alert(ALERT_CHARGE, /atom/movable/screen/alert/nocell)
var/integrity = atom_integrity/max_integrity*100
switch(integrity)
if(30 to 45)
diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
index 1aa4223b98c..c784219e3c3 100644
--- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
+++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
@@ -147,7 +147,6 @@
chassis.movedelay = 1
chassis.density = FALSE
chassis.layer = ABOVE_ALL_MOB_LAYER
- SET_PLANE(chassis, GAME_PLANE_UPPER_FOV_HIDDEN, launch_turf)
animate(chassis, alpha = 0, time = 8, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL)
animate(chassis, pixel_z = 400, time = 10, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) //Animate our rising mech (just like pods hehe)
addtimer(CALLBACK(src, PROC_REF(begin_landing)), 2 SECONDS)
diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm
index c3e5abc39f0..c4acded7994 100644
--- a/code/modules/vehicles/mecha/mech_fabricator.dm
+++ b/code/modules/vehicles/mecha/mech_fabricator.dm
@@ -50,11 +50,7 @@
var/list/datum/design/cached_designs
/obj/machinery/mecha_part_fabricator/Initialize(mapload)
- rmat = AddComponent( \
- /datum/component/remote_materials, \
- mapload && link_on_init, \
- mat_container_flags = BREAKDOWN_FLAGS_LATHE \
- )
+ rmat = AddComponent(/datum/component/remote_materials, mapload && link_on_init)
cached_designs = list()
RefreshParts() //Recalculating local material sizes if the fab isn't linked
return ..()
diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm
index 22db0771809..9ae35d8ff4b 100644
--- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm
+++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm
@@ -72,7 +72,6 @@
to_chat(occupants, span_danger("You have been forcibly ejected!"))
for(var/ejectee in occupants)
mob_exit(ejectee, silent = TRUE, randomstep = TRUE, forced = TRUE) //IT IS MINE, NOW. SUCK IT, RD!
- AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES.
if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech.
AI = card.AI
diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm
index 39b78b99f62..7ef79cb89cf 100644
--- a/code/modules/vehicles/pimpin_ride.dm
+++ b/code/modules/vehicles/pimpin_ride.dm
@@ -14,6 +14,7 @@
/obj/vehicle/ridden/janicart/Initialize(mapload)
. = ..()
+ register_context()
update_appearance()
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/janicart)
GLOB.janitor_devices += src
@@ -85,6 +86,44 @@
if (!.)
try_remove_bag(user)
+/obj/vehicle/ridden/janicart/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ . = ..()
+
+ if(!held_item)
+ if(occupant_amount() > 0)
+ context[SCREENTIP_CONTEXT_LMB] = "Dismount"
+ context[SCREENTIP_CONTEXT_RMB] = "Dismount"
+ if(trash_bag)
+ context[SCREENTIP_CONTEXT_RMB] = "Remove trash bag"
+ if(is_key(inserted_key) && occupants.Find(user))
+ context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove key"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if(trash_bag)
+ context[SCREENTIP_CONTEXT_LMB] = "Remove trash bag"
+ context[SCREENTIP_CONTEXT_RMB] = "Remove trash bag"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(istype(held_item, /obj/item/storage/bag/trash) && !trash_bag)
+ context[SCREENTIP_CONTEXT_LMB] = "Add trash bag"
+ context[SCREENTIP_CONTEXT_RMB] = "Add trash bag"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(istype(held_item, /obj/item/janicart_upgrade) && !installed_upgrade)
+ context[SCREENTIP_CONTEXT_LMB] = "Install upgrade"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(istype(held_item, /obj/item/screwdriver) && installed_upgrade)
+ context[SCREENTIP_CONTEXT_LMB] = "Remove upgrade"
+ return CONTEXTUAL_SCREENTIP_SET
+
+ if(is_key(held_item) && !is_key(inserted_key))
+ context[SCREENTIP_CONTEXT_LMB] = "Insert key"
+ context[SCREENTIP_CONTEXT_RMB] = "Insert key"
+ return CONTEXTUAL_SCREENTIP_SET
+ else if (trash_bag)
+ context[SCREENTIP_CONTEXT_LMB] = "Insert into trash bag"
+ context[SCREENTIP_CONTEXT_RMB] = "Insert into trash bag"
+ return CONTEXTUAL_SCREENTIP_SET
/**
* Called if the attached bag is being qdeleted, ensures appearance is maintained properly
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index a6177c0a77d..e7cc2a3f767 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -746,7 +746,6 @@
tilted = TRUE
tilted_rotation = picked_rotation
layer = ABOVE_MOB_LAYER
- SET_PLANE_IMPLICIT(src, GAME_PLANE_UPPER)
if(get_turf(fatty) != get_turf(src))
throw_at(get_turf(fatty), 1, 1, spin = FALSE, quickstart = FALSE)
@@ -901,8 +900,8 @@
weighted_crits[CRUSH_CRIT_SHATTER_LEGS] = 100
weighted_crits[CRUSH_CRIT_PARAPALEGIC] = 80
- //weighted_crits[CRUSH_CRIT_HEADGIB] = 20 // SKYRAT EDIT REMOVAL
- weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 80 // SKYRAT EDIT CHANGE - ORIGINAL: weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 100
+ //weighted_crits[CRUSH_CRIT_HEADGIB] = 20 // NOVA EDIT REMOVAL
+ weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 80 // NOVA EDIT CHANGE - ORIGINAL: weighted_crits[CRUSH_CRIT_SQUISH_LIMB] = 100
return weighted_crits
@@ -1016,7 +1015,6 @@
tilted = FALSE
layer = initial(layer)
- SET_PLANE_IMPLICIT(src, initial(plane))
var/matrix/to_turn = turn(transform, -tilted_rotation)
animate(src, transform = to_turn, 0.2 SECONDS)
@@ -1041,10 +1039,10 @@
LAZYADD(product_datum.returned_products, inserted_item)
return
- if(vending_machine_input[format_text(inserted_item.name)])
- vending_machine_input[format_text(inserted_item.name)]++
+ if(vending_machine_input[inserted_item.type])
+ vending_machine_input[inserted_item.type]++
else
- vending_machine_input[format_text(inserted_item.name)] = 1
+ vending_machine_input[inserted_item.type] = 1
loaded_items++
/obj/machinery/vending/unbuckle_mob(mob/living/buckled_mob, force = FALSE, can_fall = TRUE)
@@ -1208,11 +1206,12 @@
for (var/datum/data/vending_product/product_record as anything in product_records + coin_records + hidden_records)
var/list/product_data = list(
name = product_record.name,
+ path = replacetext(replacetext("[product_record.product_path]", "/obj/item/", ""), "/", "-"),
amount = product_record.amount,
colorable = product_record.colorable,
)
- .["stock"][product_record.name] = product_data
+ .["stock"][product_data["path"]] = product_data
.["extended_inventory"] = extended_inventory
@@ -1342,7 +1341,7 @@
sec_radio = new (src)
sec_radio.set_listening(FALSE)
sec_radio.set_frequency(FREQ_SECURITY)
- sec_radio.talk_into(src, "SECURITY ALERT: [usr] recorded attempting to purchase [item_record.name] in [get_area(src)]. Please watch for substance abuse.", FREQ_SECURITY) // SKYRAT EDIT CHANGE
+ sec_radio.talk_into(src, "SECURITY ALERT: [usr] recorded attempting to purchase [item_record.name] in [get_area(src)]. Please watch for substance abuse.", FREQ_SECURITY) // NOVA EDIT CHANGE
GLOB.narcd_underages += usr
flick(icon_deny,src)
vend_ready = TRUE
@@ -1601,12 +1600,12 @@
. = ..()
.["access"] = compartmentLoadAccessCheck(user)
.["vending_machine_input"] = list()
- for (var/stocked_item in vending_machine_input)
+ for (var/obj/item/stocked_item as anything in vending_machine_input)
if(vending_machine_input[stocked_item] > 0)
var/base64
var/price = 0
for(var/obj/item/stored_item in contents)
- if(format_text(stored_item.name) == stocked_item)
+ if(stored_item.type == stocked_item)
price = stored_item.custom_price
if(!base64) //generate an icon of the item to use in UI
if(base64_cache[stored_item.type])
@@ -1616,7 +1615,8 @@
base64_cache[stored_item.type] = base64
break
var/list/data = list(
- name = stocked_item,
+ path = stocked_item,
+ name = initial(stocked_item.name),
price = price,
img = base64,
amount = vending_machine_input[stocked_item],
@@ -1631,8 +1631,8 @@
switch(action)
if("dispense")
if(isliving(usr))
- vend_act(usr, params["item"])
- vend_ready = TRUE
+ vend_act(usr, params)
+ vend_ready = TRUE
return TRUE
/obj/machinery/vending/custom/attackby(obj/item/attack_item, mob/user, params)
@@ -1670,9 +1670,10 @@
* Updating stock, account transactions, alerting users.
* @return -- TRUE if a valid condition was met, FALSE otherwise.
*/
-/obj/machinery/vending/custom/proc/vend_act(mob/living/user, choice)
+/obj/machinery/vending/custom/proc/vend_act(mob/living/user, list/params)
if(!vend_ready)
return
+ var/obj/item/choice = text2path(params["item"]) // typepath is a string coming from javascript, we need to convert it back
var/obj/item/dispensed_item
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
vend_ready = FALSE
@@ -1681,8 +1682,8 @@
flick(icon_deny, src)
return TRUE
var/datum/bank_account/payee = id_card.registered_account
- for(var/obj/stock in contents)
- if(format_text(stock.name) == choice)
+ for(var/obj/item/stock in contents)
+ if(istype(stock, choice))
dispensed_item = stock
break
if(!dispensed_item)
diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm
index 23a005abe16..3d7c3f75133 100644
--- a/code/modules/vending/engivend.dm
+++ b/code/modules/vending/engivend.dm
@@ -23,7 +23,7 @@
)
premium = list(
/obj/item/storage/belt/utility = 3,
- ///obj/item/construction/rcd/loaded = 2, // SKYRAT EDIT REMOVAL
+ ///obj/item/construction/rcd/loaded = 2, // NOVA EDIT REMOVAL
/obj/item/storage/box/smart_metal_foam = 1,
)
refill_canister = /obj/item/vending_refill/engivend
diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm
index 1a2589fcdf1..d8229121490 100644
--- a/code/modules/vending/sustenance.dm
+++ b/code/modules/vending/sustenance.dm
@@ -44,11 +44,11 @@
if(isliving(user))
var/mob/living/living_user = user
if(!(machine_stat & NOPOWER) && !istype(living_user.get_idcard(TRUE), /obj/item/card/id/advanced/prisoner))
- speak("No valid labor points account found. Vending is not permitted.")
+ speak("No valid prisoner account found. Vending is not permitted.")
return
return ..()
-/obj/machinery/vending/sustenance/proceed_payment(obj/item/card/id/paying_id_card, datum/data/vending_product/product_to_vend, price_to_use)
+/obj/machinery/vending/sustenance/labor_camp/proceed_payment(obj/item/card/id/paying_id_card, datum/data/vending_product/product_to_vend, price_to_use)
if(!istype(paying_id_card, /obj/item/card/id/advanced/prisoner))
speak("I don't take bribes! Pay with labor points!")
return FALSE
@@ -66,7 +66,7 @@
paying_scum_id.points -= price_to_use
return TRUE
-/obj/machinery/vending/sustenance/fetch_balance_to_use(obj/item/card/id/passed_id)
+/obj/machinery/vending/sustenance/labor_camp/fetch_balance_to_use(obj/item/card/id/passed_id)
if(!istype(passed_id, /obj/item/card/id/advanced/prisoner))
return null //no points balance - no balance at all
var/obj/item/card/id/advanced/prisoner/paying_scum_id = passed_id
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index 24c619012cd..6c4038067d0 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -14,7 +14,7 @@
icon_state = "secdrobe"
product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
vend_reply = "Thank you for using the SecDrobe!"
- /* SKYRAT EDIT - LISTS OVERRIDDEN IN 'modular_skyrat\modules\sec_haul\code\misc\vending.dm'
+ /* NOVA EDIT - LISTS OVERRIDDEN IN 'modular_nova\modules\sec_haul\code\misc\vending.dm'
products = list(
/obj/item/clothing/head/beret/sec = 3,
/obj/item/clothing/head/soft/sec = 3,
@@ -642,6 +642,7 @@
/obj/item/clothing/under/rank/security/detective = 2,
/obj/item/clothing/under/rank/security/detective/skirt = 2,
/obj/item/clothing/suit/jacket/det_suit = 2,
+ /obj/item/clothing/suit/jacket/det_suit/brown = 2,
/obj/item/clothing/shoes/sneakers/brown = 2,
/obj/item/clothing/gloves/latex = 2,
/obj/item/clothing/gloves/color/black = 2,
diff --git a/code/modules/wiremod/components/abstract/equpiment_action.dm b/code/modules/wiremod/components/abstract/equpiment_action.dm
deleted file mode 100644
index 17f931ae5e3..00000000000
--- a/code/modules/wiremod/components/abstract/equpiment_action.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-/obj/item/circuit_component/equipment_action
- display_name = "Abstract Equipment Action"
- desc = "You shouldn't be seeing this."
-
- /// The icon of the button
- var/datum/port/input/option/icon_options
-
- /// The name to use for the button
- var/datum/port/input/button_name
-
- /// Called when the user presses the button
- var/datum/port/output/signal
-
-/obj/item/circuit_component/equipment_action/Initialize(mapload, default_icon)
- . = ..()
-
- if (!isnull(default_icon))
- icon_options.set_input(default_icon)
-
- button_name = add_input_port("Name", PORT_TYPE_STRING)
-
- signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
-
-/obj/item/circuit_component/equipment_action/populate_options()
- var/static/action_options = list(
- "Blank",
-
- "One",
- "Two",
- "Three",
- "Four",
- "Five",
-
- "Blood",
- "Bomb",
- "Brain",
- "Brain Damage",
- "Cross",
- "Electricity",
- "Exclamation",
- "Heart",
- "Id",
- "Info",
- "Injection",
- "Magnetism",
- "Minus",
- "Network",
- "Plus",
- "Power",
- "Question",
- "Radioactive",
- "Reaction",
- "Repair",
- "Say",
- "Scan",
- "Shield",
- "Skull",
- "Sleep",
- "Wireless",
- )
-
- icon_options = add_option_port("Icon", action_options)
-
-/obj/item/circuit_component/equipment_action/proc/update_action()
- return
diff --git a/code/modules/wiremod/components/action/equpiment_action.dm b/code/modules/wiremod/components/action/equpiment_action.dm
new file mode 100644
index 00000000000..54150ca44d6
--- /dev/null
+++ b/code/modules/wiremod/components/action/equpiment_action.dm
@@ -0,0 +1,92 @@
+/obj/item/circuit_component/equipment_action
+ display_name = "Equipment Action"
+ desc = "Represents an action the user can take when using supported shells."
+ required_shells = list(/obj/item/organ/internal/cyberimp/bci, /obj/item/mod/module/circuit)
+
+ /// The icon of the button
+ var/datum/port/input/option/icon_options
+
+ /// The name to use for the button
+ var/datum/port/input/button_name
+
+ /// The mob who activated their granted action
+ var/datum/port/output/user
+
+ /// Called when the user presses the button
+ var/datum/port/output/signal
+
+ /// An assoc list of datum REF()s, linked to the actions granted.
+ var/list/granted_to = list()
+
+/obj/item/circuit_component/equipment_action/Initialize(mapload, default_icon)
+ . = ..()
+
+ if (!isnull(default_icon))
+ icon_options.set_input(default_icon)
+
+ button_name = add_input_port("Name", PORT_TYPE_STRING)
+
+ user = add_output_port("User", PORT_TYPE_USER)
+ signal = add_output_port("Signal", PORT_TYPE_SIGNAL)
+
+/obj/item/circuit_component/equipment_action/Destroy()
+ QDEL_LIST_ASSOC_VAL(granted_to)
+ return ..()
+
+/obj/item/circuit_component/equipment_action/populate_options()
+ var/static/action_options = list(
+ "Blank",
+
+ "One",
+ "Two",
+ "Three",
+ "Four",
+ "Five",
+
+ "Blood",
+ "Bomb",
+ "Brain",
+ "Brain Damage",
+ "Cross",
+ "Electricity",
+ "Exclamation",
+ "Heart",
+ "Id",
+ "Info",
+ "Injection",
+ "Magnetism",
+ "Minus",
+ "Network",
+ "Plus",
+ "Power",
+ "Question",
+ "Radioactive",
+ "Reaction",
+ "Repair",
+ "Say",
+ "Scan",
+ "Shield",
+ "Skull",
+ "Sleep",
+ "Wireless",
+ )
+
+ icon_options = add_option_port("Icon", action_options)
+
+/obj/item/circuit_component/equipment_action/register_shell(atom/movable/shell)
+ . = ..()
+ SEND_SIGNAL(shell, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, src)
+
+/obj/item/circuit_component/equipment_action/unregister_shell(atom/movable/shell)
+ . = ..()
+ SEND_SIGNAL(shell, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, src)
+
+/obj/item/circuit_component/equipment_action/input_received(datum/port/input/port)
+ if (length(granted_to))
+ update_actions()
+
+/obj/item/circuit_component/equipment_action/proc/update_actions()
+ for(var/ref in granted_to)
+ var/datum/action/granted_action = granted_to[ref]
+ granted_action.name = button_name.value || "Action"
+ granted_action.button_icon_state = "bci_[replacetextEx(lowertext(icon_options.value), " ", "_")]"
diff --git a/code/modules/wiremod/components/action/speech.dm b/code/modules/wiremod/components/action/speech.dm
index 4bf735cf82b..0e2936bcfbf 100644
--- a/code/modules/wiremod/components/action/speech.dm
+++ b/code/modules/wiremod/components/action/speech.dm
@@ -31,5 +31,5 @@
if(message.value)
var/atom/movable/shell = parent.shell
- shell.say(message.value, forced = "circuit speech | [key_name(parent.get_creator())]")
+ shell.say(message.value, forced = "circuit speech | [parent.get_creator()]")
TIMER_COOLDOWN_START(shell, COOLDOWN_CIRCUIT_SPEECH, speech_cooldown)
diff --git a/code/modules/wiremod/components/atom/matscanner.dm b/code/modules/wiremod/components/atom/matscanner.dm
index bbc36bb9789..eb23efddb3a 100644
--- a/code/modules/wiremod/components/atom/matscanner.dm
+++ b/code/modules/wiremod/components/atom/matscanner.dm
@@ -34,10 +34,7 @@
if(!istype(entity) || !IN_GIVEN_RANGE(location, entity, max_range))
result.set_output(null)
return
- var/breakdown_flags = BREAKDOWN_INCLUDE_ALCHEMY
- if(break_down_alloys.value)
- breakdown_flags |= BREAKDOWN_ALLOYS
- var/list/composition = entity.get_material_composition(breakdown_flags)
+ var/list/composition = entity.get_material_composition()
var/list/composition_but_with_string_keys = list()
for(var/datum/material/material as anything in composition)
composition_but_with_string_keys[material.name] = composition[material]
diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm
index 25c684c5a28..3fb736540ec 100644
--- a/code/modules/wiremod/core/component_printer.dm
+++ b/code/modules/wiremod/core/component_printer.dm
@@ -22,11 +22,7 @@
/obj/machinery/component_printer/Initialize(mapload)
. = ..()
- materials = AddComponent( \
- /datum/component/remote_materials, \
- mapload, \
- mat_container_flags = BREAKDOWN_FLAGS_LATHE, \
- )
+ materials = AddComponent(/datum/component/remote_materials, mapload)
/obj/machinery/component_printer/LateInitialize()
. = ..()
@@ -323,11 +319,7 @@
/obj/machinery/module_duplicator/Initialize(mapload)
. = ..()
- materials = AddComponent( \
- /datum/component/remote_materials, \
- mapload, \
- mat_container_flags = BREAKDOWN_FLAGS_LATHE, \
- )
+ materials = AddComponent(/datum/component/remote_materials, mapload)
/obj/machinery/module_duplicator/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm
index c3ac3154d2d..c30c7e629f2 100644
--- a/code/modules/wiremod/shell/brain_computer_interface.dm
+++ b/code/modules/wiremod/shell/brain_computer_interface.dm
@@ -10,8 +10,11 @@
/obj/item/organ/internal/cyberimp/bci/Initialize(mapload)
. = ..()
+ RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, PROC_REF(action_comp_registered))
+ RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, PROC_REF(action_comp_unregistered))
+
var/obj/item/integrated_circuit/circuit = new(src)
- circuit.add_component(new /obj/item/circuit_component/equipment_action/bci(null, "One"))
+ circuit.add_component(new /obj/item/circuit_component/equipment_action(null, "One"))
AddComponent(/datum/component/shell, list(
new /obj/item/circuit_component/bci_core,
@@ -33,41 +36,17 @@
else
return ..()
-/obj/item/circuit_component/equipment_action/bci
- display_name = "BCI Action"
- desc = "Represents an action the user can take when implanted with the brain-computer interface."
- required_shells = list(/obj/item/organ/internal/cyberimp/bci)
-
- /// A reference to the action button itself
- var/datum/action/innate/bci_action/bci_action
-
-/obj/item/circuit_component/equipment_action/bci/Destroy()
- QDEL_NULL(bci_action)
- return ..()
-
-/obj/item/circuit_component/equipment_action/bci/register_shell(atom/movable/shell)
- . = ..()
- var/obj/item/organ/internal/cyberimp/bci/bci = shell
- if(istype(bci))
- bci_action = new(src)
- update_action()
-
- bci.actions += list(bci_action)
-
-/obj/item/circuit_component/equipment_action/bci/unregister_shell(atom/movable/shell)
- var/obj/item/organ/internal/cyberimp/bci/bci = shell
- if(istype(bci))
- bci.actions -= bci_action
- QDEL_NULL(bci_action)
- return ..()
-
-/obj/item/circuit_component/equipment_action/bci/input_received(datum/port/input/port)
- if (!isnull(bci_action))
- update_action()
+/obj/item/organ/internal/cyberimp/bci/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+ SIGNAL_HANDLER
+ LAZYADD(actions, new/datum/action/innate/bci_action(src, action_comp))
-/obj/item/circuit_component/equipment_action/bci/update_action()
- bci_action.name = button_name.value
- bci_action.button_icon_state = "bci_[replacetextEx(lowertext(icon_options.value), " ", "_")]"
+/obj/item/organ/internal/cyberimp/bci/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+ SIGNAL_HANDLER
+ var/datum/action/innate/bci_action/action = action_comp.granted_to[REF(src)]
+ if(!istype(action))
+ return
+ LAZYREMOVE(actions, action)
+ QDEL_LIST_ASSOC_VAL(action_comp.granted_to)
/datum/action/innate/bci_action
name = "Action"
@@ -75,20 +54,23 @@
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "bci_power"
- var/obj/item/circuit_component/equipment_action/bci/circuit_component
+ var/obj/item/organ/internal/cyberimp/bci/bci
+ var/obj/item/circuit_component/equipment_action/circuit_component
-/datum/action/innate/bci_action/New(obj/item/circuit_component/equipment_action/bci/circuit_component)
+/datum/action/innate/bci_action/New(obj/item/organ/internal/cyberimp/bci/_bci, obj/item/circuit_component/equipment_action/circuit_component)
..()
-
+ bci = _bci
+ circuit_component.granted_to[REF(_bci)] = src
src.circuit_component = circuit_component
/datum/action/innate/bci_action/Destroy()
- circuit_component.bci_action = null
+ circuit_component.granted_to -= REF(bci)
circuit_component = null
return ..()
/datum/action/innate/bci_action/Activate()
+ circuit_component.user.set_output(owner)
circuit_component.signal.set_output(COMPONENT_SIGNAL)
/obj/item/circuit_component/bci_core
diff --git a/code/modules/wiremod/shell/module.dm b/code/modules/wiremod/shell/module.dm
index 4201c6afb17..6f9a3dda93b 100644
--- a/code/modules/wiremod/shell/module.dm
+++ b/code/modules/wiremod/shell/module.dm
@@ -10,8 +10,15 @@
/// A reference to the shell component, used to access the shell and its attached circuit
var/datum/component/shell/shell
+ /// List of installed action components
+ var/list/obj/item/circuit_component/equipment_action/action_comps = list()
+
/obj/item/mod/module/circuit/Initialize(mapload)
. = ..()
+
+ RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_REGISTERED, PROC_REF(action_comp_registered))
+ RegisterSignal(src, COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED, PROC_REF(action_comp_unregistered))
+
shell = AddComponent(/datum/component/shell, \
list(new /obj/item/circuit_component/mod_adapter_core()), \
capacity = SHELL_CAPACITY_LARGE, \
@@ -22,6 +29,17 @@
if(drain_power(amount))
. = COMPONENT_OVERRIDE_POWER_USAGE
+/obj/item/mod/module/circuit/proc/action_comp_registered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+ SIGNAL_HANDLER
+ action_comps += action_comp
+
+/obj/item/mod/module/circuit/proc/action_comp_unregistered(datum/source, obj/item/circuit_component/equipment_action/action_comp)
+ SIGNAL_HANDLER
+ action_comps -= action_comp
+ for(var/ref in action_comp.granted_to)
+ unpin_action(action_comp, locate(ref))
+ QDEL_LIST_ASSOC_VAL(action_comp.granted_to)
+
/obj/item/mod/module/circuit/on_install()
if(!shell?.attached_circuit)
return
@@ -30,6 +48,9 @@
/obj/item/mod/module/circuit/on_uninstall(deleting = FALSE)
if(!shell?.attached_circuit)
return
+ for(var/obj/item/circuit_component/equipment_action/action_comp in action_comps)
+ for(var/ref in action_comp.granted_to)
+ unpin_action(action_comp, locate(ref))
UnregisterSignal(shell?.attached_circuit, COMSIG_CIRCUIT_PRE_POWER_USAGE)
/obj/item/mod/module/circuit/on_use()
@@ -38,38 +59,79 @@
return
if(!shell.attached_circuit)
return
- var/list/action_components = shell.attached_circuit.get_all_contents_type(/obj/item/circuit_component/equipment_action/mod)
- if(!action_components.len)
- shell.attached_circuit.interact(mod.wearer)
+ shell.attached_circuit?.interact(mod.wearer)
+
+/obj/item/mod/module/circuit/get_configuration(mob/user)
+ . = ..()
+ var/unnamed_action_index = 1
+ for(var/obj/item/circuit_component/equipment_action/action_comp in action_comps)
+ .[REF(action_comp)] = add_ui_configuration(action_comp.button_name.value || "Unnamed Action [unnamed_action_index++]", "pin", !!action_comp.granted_to[REF(user)])
+
+/obj/item/mod/module/circuit/configure_edit(key, value)
+ . = ..()
+ var/obj/item/circuit_component/equipment_action/action_comp = locate(key) in action_comps
+ if(!istype(action_comp))
+ return
+ if(text2num(value))
+ pin_action(action_comp, usr)
+ else
+ unpin_action(action_comp, usr)
+
+/obj/item/mod/module/circuit/proc/pin_action(obj/item/circuit_component/equipment_action/action_comp, mob/user)
+ if(!istype(user))
return
- var/list/repeat_name_counts = list("Access Circuit" = 1)
- var/list/display_names = list()
- var/list/radial_options = list()
- for(var/obj/item/circuit_component/equipment_action/mod/action_component in action_components)
- var/action_name = action_component.button_name.value
- if(!repeat_name_counts[action_name])
- repeat_name_counts[action_name] = 0
- repeat_name_counts[action_name]++
- if(repeat_name_counts[action_name] > 1)
- action_name += " ([repeat_name_counts[action_name]])"
- display_names[action_name] = REF(action_component)
- var/option_icon_state = "bci_[replacetextEx(lowertext(action_component.icon_options.value), " ", "_")]"
- radial_options += list("[action_name]" = image('icons/mob/actions/actions_items.dmi', option_icon_state))
- radial_options += list("Access Circuit" = image(shell.attached_circuit))
- var/selected_option = show_radial_menu(mod.wearer, src, radial_options, custom_check = FALSE, require_near = TRUE)
- if(!selected_option)
+ if(action_comp.granted_to[REF(user)]) // Sanity check - don't pin an action for a mob that has already pinned it
return
- if(!mod || !mod.wearer || !mod.active || mod.activating)
+ mod.add_item_action(new/datum/action/item_action/mod/pinnable/circuit(mod, user, src, action_comp))
+
+/obj/item/mod/module/circuit/proc/unpin_action(obj/item/circuit_component/equipment_action/action_comp, mob/user)
+ var/datum/action/item_action/mod/pinnable/circuit/action = action_comp.granted_to[REF(user)]
+ if(!istype(action))
return
- if(selected_option == "Access Circuit")
- shell.attached_circuit?.interact(mod.wearer)
- else
- var/component_reference = display_names[selected_option]
- var/obj/item/circuit_component/equipment_action/mod/selected_component = locate(component_reference) in shell.attached_circuit.contents
- if(!istype(selected_component))
- return
- selected_component.signal.set_output(COMPONENT_SIGNAL)
+ qdel(action)
+/datum/action/item_action/mod/pinnable/circuit
+ button_icon = 'icons/mob/actions/actions_items.dmi'
+ button_icon_state = "bci_blank"
+
+ /// A reference to the module containing this action's component
+ var/obj/item/mod/module/circuit/module
+
+ /// A reference to the component this action triggers.
+ var/obj/item/circuit_component/equipment_action/circuit_component
+
+/datum/action/item_action/mod/pinnable/circuit/New(Target, mob/user, obj/item/mod/module/circuit/linked_module, obj/item/circuit_component/equipment_action/action_comp)
+ . = ..()
+ module = linked_module
+ action_comp.granted_to[REF(user)] = src
+ circuit_component = action_comp
+ name = action_comp.button_name.value
+ button_icon_state = "bci_[replacetextEx(lowertext(action_comp.icon_options.value), " ", "_")]"
+
+/datum/action/item_action/mod/pinnable/circuit/Destroy()
+ circuit_component.granted_to -= REF(pinner)
+ circuit_component = null
+
+ return ..()
+
+/datum/action/item_action/mod/pinnable/circuit/Trigger(trigger_flags)
+ . = ..()
+ if(!.)
+ return
+ var/obj/item/mod/control/mod = module.mod
+ if(!istype(mod))
+ return
+ if(!mod.active || mod.activating)
+ if(mod.wearer)
+ module.balloon_alert(mod.wearer, "not active!")
+ return
+ circuit_component.user.set_output(owner)
+ circuit_component.signal.set_output(COMPONENT_SIGNAL)
+
+/// If the guy whose UI we are pinned to got deleted
+/datum/action/item_action/mod/pinnable/circuit/pinner_deleted()
+ module?.action_comps[circuit_component] -= REF(pinner)
+ . = ..()
/obj/item/circuit_component/mod_adapter_core
display_name = "MOD circuit adapter core"
@@ -237,8 +299,3 @@
if(!attached_module.mod?.wearer)
return
wearer.set_output(attached_module.mod.wearer)
-
-/obj/item/circuit_component/equipment_action/mod
- display_name = "MOD action"
- desc = "Represents an action the user can take when wearing the MODsuit."
- required_shells = list(/obj/item/mod/module/circuit)
diff --git a/code/world.dm b/code/world.dm
index ad1f5261d09..7222dcbd633 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -17,8 +17,8 @@
hub_password = "kMZy3U5jJHSiBQjr"
name = "/tg/ Station 13"
fps = 20
- cache_lifespan = 0 // SKYRAT EDIT - Makes sure TTS shit isnt kept past rounds
- //map_format = SIDE_MAP // SKYRAT EDIT - TODO: WALLENING - REMOVE THIS (hopefully the visual z-fighting issues will have been ironed out by then)
+ cache_lifespan = 0 // NOVA EDIT - Makes sure TTS shit isnt kept past rounds
+ //map_format = SIDE_MAP // NOVA EDIT - TODO: WALLENING - REMOVE THIS (hopefully the visual z-fighting issues will have been ironed out by then)
#ifdef FIND_REF_NO_CHECK_TICK
loop_checks = FALSE
#endif
diff --git a/config/game_options.txt b/config/game_options.txt
index f4d947a2c46..51cc96c3bb1 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -251,7 +251,7 @@ SPECIFIED_LAWS asimovpp
## See datums\ai_laws.dm for the full law lists
## standard-ish laws. These are fairly ok to run
-#SKYRAT EDIT ADDITION BEGIN
+#NOVA EDIT ADDITION BEGIN
RANDOM_LAWS armadyne_safeguard
RANDOM_LAWS asimov
RANDOM_LAWS asimovpp
@@ -289,10 +289,10 @@ LAW_WEIGHT custom,0
## standard-ish laws. These are fairly ok to run
## Unique AI station trait uses weights so we don't want asimov
-#SKYRAT EDIT ADDITION BEGIN
+#NOVA EDIT ADDITION BEGIN
LAW_WEIGHT armadyne_safeguard,40
LAW_WEIGHT dagothbot,8
-#SKYRAT EDIT ADDITION END
+#NOVA EDIT ADDITION END
LAW_WEIGHT asimov,0
LAW_WEIGHT asimovpp,5
LAW_WEIGHT paladin,5
diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt
index 7d87495f60b..d4fa3f49b5c 100644
--- a/config/iceruinblacklist.txt
+++ b/config/iceruinblacklist.txt
@@ -5,7 +5,7 @@
##RESPAWN
#_maps/RandomRuins/AnywhereRuins/golem_ship.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/IceRuins/icemoon_underground_syndicate_base1_skyrat.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/IceRuins/icemoon_underground_syndicate_base1_skyrat.dmm
##MEGAFAUNA
#_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm
diff --git a/config/lavaruinblacklist.txt b/config/lavaruinblacklist.txt
index 2c0642bffac..42e0880a75a 100644
--- a/config/lavaruinblacklist.txt
+++ b/config/lavaruinblacklist.txt
@@ -12,7 +12,7 @@
##RESPAWN
#_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm
_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1_skyrat.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1_skyrat.dmm
#_maps/RandomRuins/LavaRuins/skyrat/lavaland_surface_ash_walker1_skyrat.dmm
#_maps/RandomRuins/AnywhereRuins/golem_ship.dmm
diff --git a/config/rockplanet.txt b/config/rockplanet.txt
index 1def7619f62..c464b5756ee 100644
--- a/config/rockplanet.txt
+++ b/config/rockplanet.txt
@@ -1,17 +1,17 @@
#Listing maps here will blacklist them from generating on LV-669.
#Maps must be the full path to them
-#A list of maps valid to blacklist can be found in modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins (MOVED FROM _maps\skyrat\RandomRuins\AsteroidRuins)
+#A list of maps valid to blacklist can be found in modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins (MOVED FROM _maps\skyrat\RandomRuins\AsteroidRuins)
#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/throwback.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/crashedshuttle.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/cozycabin.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/biodome.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/xenohive.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/factory.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/throwback.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/crashedshuttle.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/cozycabin.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/biodome.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/xenohive.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/factory.dmm
#Abandoned Structures (lootless, mostly fluff)
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_a.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_b.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_c.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_d.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_a.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_b.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_c.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/RockplanetRuins/abandoned_d.dmm
diff --git a/config/skyrat/skyrat_config.txt b/config/skyrat/skyrat_config.txt
index 46fd5fa1a8b..deb7f925ea8 100644
--- a/config/skyrat/skyrat_config.txt
+++ b/config/skyrat/skyrat_config.txt
@@ -121,7 +121,7 @@ LORECASTER_DELAY 18000
# DISABLE_SUICIDE
## The link to the policy wiki page for primitive catgirls
-ICECATS_POLICY_LINK "https://wiki.skyrat13.com/index.php/Ghost_Role_policy#Icewalkers"
+ICECATS_POLICY_LINK "https://wiki.novasector13.com/index.php/Ghost_Role_policy#Icewalkers"
## What is the maximum size (in percents) we want people to be able to use with the size collar?
SIZE_COLLAR_MAXIMUM 400
diff --git a/config/spaceruinblacklist.txt b/config/spaceruinblacklist.txt
index 457aeee3600..275ef15c9bd 100644
--- a/config/spaceruinblacklist.txt
+++ b/config/spaceruinblacklist.txt
@@ -90,6 +90,6 @@
#_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm
#_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm
#_maps/RandomRuins/SpaceRuins/skyrat/drones_derelict.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/SpaceRuins/forgottenship_skyrat.dmm
-#modular_skyrat/modules/mapping/_maps/RandomRuins/SpaceRuins/shuttle8532.dmm
-#modular_skyrat/modules/ruins/maps/space/dangerous_research.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/SpaceRuins/forgottenship_skyrat.dmm
+#modular_nova/modules/mapping/_maps/RandomRuins/SpaceRuins/shuttle8532.dmm
+#modular_nova/modules/ruins/maps/space/dangerous_research.dmm
diff --git a/html/changelogs/archive/2021-08.yml b/html/changelogs/archive/2021-08.yml
index 55620b041eb..a68281ad0cf 100644
--- a/html/changelogs/archive/2021-08.yml
+++ b/html/changelogs/archive/2021-08.yml
@@ -601,7 +601,7 @@
2021-08-21:
GoldenAlpharex:
- code_imp: Skyrat coders will now be able to have the building tool detect their
- modifications in the modular_skyrat directory, helping them re-compile with
+ modifications in the modular_nova directory, helping them re-compile with
less pain involved.
MMMiracles:
- bugfix: Solar assemblies can no longer be built on top of existing solar panels.
diff --git a/html/changelogs/archive/2022-05.yml b/html/changelogs/archive/2022-05.yml
index 77817940d2c..9d7ecc9f5bb 100644
--- a/html/changelogs/archive/2022-05.yml
+++ b/html/changelogs/archive/2022-05.yml
@@ -620,7 +620,7 @@
2022-05-12:
ErdinyoBarboza:
- rscadd: Vintorez, PCR-9, Pitbull and DTR-6 came back in ballistic flavor
- - rscdel: Removed hardlight guns (modular_skyrat\modules\goofsec\code\projectiles.dm)
+ - rscdel: Removed hardlight guns (modular_nova\modules\goofsec\code\projectiles.dm)
- balance: Dozer now uses 9x25mm for its namesake.
- balance: Zeta-6 now uses 10mm Magnum.
- bugfix: 9x19mm now is properly defined and cant be loaded to 9x25mm magazines
diff --git a/html/changelogs/archive/2022-10.yml b/html/changelogs/archive/2022-10.yml
index 09458244f3a..18299b42105 100644
--- a/html/changelogs/archive/2022-10.yml
+++ b/html/changelogs/archive/2022-10.yml
@@ -390,7 +390,7 @@
- rscadd: (Re)Added the totally new and unique "Cavalry Uniform" (originally Dutch
Assistant) and "Buttondown Shirt with Double-breasted Vest" (originally Victorian
Vest)
- - imageadd: You can now see food inside the microwave. (Skyrat edition!)
+ - imageadd: You can now see food inside the microwave. (NOVA EDITion!)
ShizCalev:
- bugfix: Fixed lighting overlays from an item sometimes showing up on inventory
slots / backpack slots instead of from the mob holding them.
diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml
index 01676bd047e..8a7e370f82a 100644
--- a/html/changelogs/archive/2023-07.yml
+++ b/html/changelogs/archive/2023-07.yml
@@ -291,7 +291,7 @@
- spellcheck: Context tooltips too small, too big... just right?
vinylspiders:
- bugfix: Miner's Salve will no longer cause permanent numbness
- - refactor: cleans up medicine.dm and removes some Skyrat edits in medicine_reagents.dm
+ - refactor: cleans up medicine.dm and removes some NOVA EDITs in medicine_reagents.dm
- bugfix: slimes who use the Alter Form action to get taur bodies will now properly
hide shoes like they're supposed to
- qol: slimes who use Alter Form will automatically have their clothing icons updated
diff --git a/html/changelogs/archive/2023-08.yml b/html/changelogs/archive/2023-08.yml
index cd0ea66cfbb..c2db8776966 100644
--- a/html/changelogs/archive/2023-08.yml
+++ b/html/changelogs/archive/2023-08.yml
@@ -1141,7 +1141,7 @@
- bugfix: Healium sleep now respects sleep immunity
vinylspiders:
- bugfix: interdyne siphon vents will siphon properly again
- - refactor: moves ALL of the skyrat edits out of modules/research/techweb/all_nodes.dm
+ - refactor: moves ALL of the NOVA EDITs out of modules/research/techweb/all_nodes.dm
and into modular overrides
xXPawnStarrXx:
- rscadd: Added new crafting options to throwing wheels
diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml
index 70e6ecfe327..57265cc0bb5 100644
--- a/html/changelogs/archive/2023-12.yml
+++ b/html/changelogs/archive/2023-12.yml
@@ -888,6 +888,41 @@
sqnztb:
- bugfix: blueshift - corrects some request console names, virology's outlet now
sends to space, and R&D now has a proper R&D console instead of a civilian one.
+2023-12-27:
+ BurgerBB:
+ - balance: Miasma is now filtered through gas mask filters, at medium strength.
+ ChakatStormCloud:
+ - bugfix: Synths now properly regenerate blood volume with oil
+ GreytideSkye:
+ - refactor: LustWish interns, fed up with 5e Grappling Rules, explicitly clarified
+ what is a restraint and what is a structure.
+ Jolly:
+ - image: Colored labcoats have been GAGSed! Please report any weird oddities on
+ Github.
+ - bugfix: The coroners lab coat is no longer offset by one pixel.
+ SkyratBot:
+ - bugfix: the boozeomat ui will stop duplicating space beer bottles
+ - refactor: refactored vending machine backend to have unique keys for their data
+ structures. should fix bugs related to items that happen to have the same name.
+ - rscadd: Nightmares retain their ability to dodge projectiles for a brief period
+ after leaving a dark area, meaning it is now possible to dodge lasers.
+ - qol: Nightmares and Shadow People now receive a screen alert when they are in
+ a sufficiently dark location that their abilities are active.
+ - bugfix: Reactions whose temps/ph values fall way below their optimal values no
+ longer restart & prevents infinite loops. Made reaction code slightly faster
+ - rscadd: Added new GaGs santahats.
+ - bugfix: Injecting yourself twice with a luxury medipen in pressure doesn't runtime
+ and mechs with a cell with no max charge won't runtime.
+ - refactor: Gives hyposprays a var to check if they're fully used up rather than
+ setting total_volume to 0.
+ StrangeWeirdKitten:
+ - config: The headshot is no longer vetted or donor locked
+ vinylspiders:
+ - qol: loadout menu has a search function and is zebra-styled for readability.
+ - code_imp: improved performance of the loadout menu
+ - bugfix: removed nonfunctional tutorial button
+ xXPawnStarrXx:
+ - image: Made Skyrat Christmas clothes GAGS compatable.
2023-12-28:
KannaLisvern:
- rscadd: Added a new ERP emote. *lewdmoan
@@ -913,6 +948,301 @@
zeroisthebiggay:
- bugfix: '''A whole bunch of spiders in a SWAT suit'' to ''A whole bunch of spiders
in a MODsuit'''
+ A.C.M.O.:
+ - bugfix: Fixed Personal AI cards, allowing them to wake up from sleep.
+ BurgerBB:
+ - balance: Miasma is now filtered through gas mask filters, at medium strength.
+ GalaxiaBot:
+ - bugfix: Fixed integrated circuit UI breaking.
+ - bugfix: Cut down a significant amount of time that caused the start of rounds
+ to lag.
+ - bugfix: Fixed a bug that would give you the chat message "/datum/element/damage_threshold
+ looks unharmed!"
+ - bugfix: mat container displays correct number of sheets inserted for alloy materials.
+ - bugfix: remote materials now properly respect the `MATCONTAINER_NO_INSERT` flag.
+ - code_imp: removes material breakdown flags and related traits.
+ - code_imp: adds helper proc to insert materials via the remote material component
+ with proper context.
+ - bugfix: fixes a hard del with thrown items
+ - qol: Head of Security beret added to their garmet bag
+ - qol: Head of Security bowman added to their locker
+ - qol: Wendigo Cave ruin gets an aesthetic refresh
+ - bugfix: Wendigos (Wendigi?) no longer attack corpses
+ - bugfix: Camera console search should update automatically
+ - bugfix: Autolathe search should now properly show designs
+ - rscadd: You can now look up and down through the IC menu
+ - rscadd: Added the 'Coupon Master' program for the PDA. Install it to receive periodical,
+ redeemable coupons for several cargo packs. Requires NTnet connection and the
+ messenger enabled to work.
+ - rscadd: Coupons are no longer only limited to goodies, but may also apply discount
+ to some other packs as well.
+ - bugfix: Regal rats (and others), won't be punished by the automute system for
+ repeating the same command several times.
+ - bugfix: debug chem heater now withdraws more than 100 units from its inserted
+ beaker.
+ - bugfix: chem heater has correct overlay when its panel is closed with a screwdriver
+ while a beaker is inside.
+ - qol: added more examines and tooltips for the chem heater.
+ - code_imp: converted chem heater UI to typescript. removed unused procs, vars,
+ ui tracking code. Added auto doc for everything.
+ - refactor: removed chem heater tutorial help button & its related reward, chem
+ heater code has been optimized as a whole.
+ - balance: Cyborg lover has been replaced with Transhumanist. Transhumanists start
+ with a robotic limb and get mood buffs by being near to silicon-based lifeforms.
+ However, they get mood debuffs by being near organics, so there is a tradeoff
+ to taking this quirk. The cost for this quirk has been reduced from 2 to 0.
+ - bugfix: fixes a potential mob hard del with cardboard boxes
+ - rscadd: Added weapon recharger boards to designs available to print on sec techfab.
+ - bugfix: polymorphing into drone no longer gibs
+ - rscadd: Adds a mint condition clear PDA to the Goodies menu for 100,000 credits.
+ - qol: You can now build multiple pipe layers with the RPD, with just 1 click!
+ - bugfix: plumbing rcd ui no longer has any graphical glitches
+ - bugfix: the boozeomat ui will stop duplicating space beer bottles
+ - refactor: refactored vending machine backend to have unique keys for their data
+ structures. should fix bugs related to items that happen to have the same name.
+ - rscadd: Canisters now have wires! You can pulse wires to do various canister functions
+ like opening/closing the valve. Make sure it has a cell though.
+ - rscadd: You can rig assembly combos (igniter-timer, prox-signaler, etc.) onto
+ canisters
+ - qol: Canisters now have screentips
+ - bugfix: LUA editor should be usable again
+ - bugfix: Camera circuits actually print pictures again!
+ - qol: Camera circuits can now take pictures while on a carbon, whether held, hung
+ around the neck, or sneakily hidden in either pocket. When held they try to
+ deposit their pictures into the holder's hands if possible.
+ - bugfix: Camera circuits should now actually use the camera's x axis picture size,
+ rather than using the camera's y axis picture size setting for both axis.
+ - rscadd: Adds a brown suit jacket to the detective's vendor
+ - image: Adds a new sprite for the a brown detective suit jacket
+ - balance: Ai's using the mech domination ability can now eject from the mech
+ - spellcheck: changes mutiline text to multiline text in vv
+ - bugfix: Injecting yourself twice with a luxury medipen in pressure doesn't runtime
+ and mechs with a cell with no max charge won't runtime.
+ - refactor: Gives hyposprays a var to check if they're fully used up rather than
+ setting total_volume to 0.
+ - qol: MOD wearers and internal AIs can pin the individual actions in a MOD circuit
+ module in a similar way to how they can pin modules. Circuit module actions
+ can be pinned from the configuration menu of the circuit
+ - refactor: The MOD action and BCI action components have been merged into one component
+ - the Equipment Action component.
+ - bugfix: fixing damaged sandy dirt lacking an icon
+ - bugfix: AI voice changer UI should show defaults properly
+ - bugfix: NTOS Software Hub should focus on the input immediately now
+ - bugfix: Ore container UI should autofocus on the search bar now
+ - bugfix: Vend-a-tray registration text should display as intended
+ - code_imp: removed excess calls to `update_total()` making reaction code slightly
+ faster.
+ - code_imp: removed excessive use of chemical constants (quantisation & rounding
+ constants) in places where they were not needed i.e. plumbing buffer, reaction
+ chamber, pyrotechnics & the liver.
+ GoldenAlpharex:
+ - bugfix: We're Nova Sector now!
+ - qol: Map votes are once again going to respect the majority vote, instead of being
+ a weighted random vote.
+ Jolly:
+ - rscdel: '[North Star] Removed the prison cryo auto mapper template, as this is
+ automatically handled by code. If there''s any issues in the future please report
+ them on Github!'
+ - rscdel: '{Automapper] Removed the logic for spawning prison privacy curtains.
+ This doesn''t affect 4/5 base /tg/ station maps.'
+ - rscadd: 'New quirk for those who hate their appendix: Appendicitis Survivor! A
+ positive (-2) quirk.'
+ KannaLisvern:
+ - qol: Removed Bluespace Crystals and Diamonds from medical emergency bed's recipe.
+ LT3:
+ - qol: TGUI will now wait longer trying to reconnect to a new round
+ Lutowski:
+ - rscadd: Void Raptor pharmacy and lab is slightly more spacious and prettier.
+ - qol: Chem vendor moved from pharmacy to chemistry lab on Void Raptor.
+ Melbert:
+ - bugfix: Fixed some occasions in which heartbeat SFX will continue on revival for
+ longer than expected
+ MelokGleb and KREKS:
+ - image: modified wizard weapon textures
+ NovaBot13:
+ - rscdel: Removes the wires from canisters. It's a cool idea, but cheap controlled
+ maxcaps are bad actually
+ Paxilmaniac:
+ - qol: The names and descriptions of every paxilmaniac weapon have been improved
+ to be shorter (names) and mention at least what bullet the weapon fires (description)
+ - qol: Every weapon with an extended description has a hint in its normal examine
+ telling you that you can look further to get more info on the weapon
+ - code_imp: Two instances of now-deleted weapons paths (which i found out about
+ through someone getting one in a christmas tree) existing due to manufacturer
+ examines of all things have been cleaned up, players wont notice this one i
+ think
+ Rhials:
+ - qol: Obsessed crewmembers are now displayed in the orbit panel.
+ - qol: The Paradox Clone orbit menu tab is now white. Neat!
+ Ryll/Shaps:
+ - balance: Yawns are less likely to propagate
+ goobliner:
+ - rscadd: You can now pick common with the bilingual trait.
+ honkpocket:
+ - rscadd: Chitter emote has a different sound effect, unless you're a moth
+ - bugfix: The bokken's deflects now also have a visual indicator
+ nikothedude:
+ - rscadd: Pet owners can now name and describe their pet
+ vinylspiders:
+ - qol: NTNet Downloader now has a search bar, and programs are now better sorted.
+ - bugfix: Fixed the surgery menu spamming chat messages when on the eyes section
+ of a player with no eyes.
+ - bugfix: mercury & lithium will no longer make you randomly move outside of cryotubes
+ or in ground less turfs (space, water, lava etc)
+ - rscadd: basic bots can now display their paths on huds
+ - bugfix: medbots can research healing again
+ - refactor: Ghost roles now offer ghosts a clickable poll button. Ghosts can select
+ a role, deselect it, alt-click it for "Never For This Round", can cancel "Never",
+ can see the countdown, and can see how many other people are signed up for the
+ role poll.
+ - rscadd: PDAs with a dead power cell are now limited to using their Messenger app.
+ - bugfix: Microwaves now stop charging PDAs if the cell was removed mid-charge.
+ - bugfix: Microwaves can now charge laptops.
+ - bugfix: PDA Flashlights can't be turned on while the PDA is dead.
+ - bugfix: You can now hold a laptop up to a camera (if it has a notekeeper app installed)
+ like PDAs already could.
+ - rscadd: Infiltrators (Latejoin/Midround traitors) can now buy and use Contract
+ kits again.
+ - rscdel: Contractor baton can now only be purchased once.
+ - bugfix: lab coats no longer have directional sprites when thrown
+ - rscadd: Added a "postal workers strike" negative station trait. In the case of
+ holidays and sunday though, it'll be a "postal system overtime" instead.
+ - bugfix: clockcult slab now lets you change tabs once again
+ - spellcheck: Fixes a typo in chat message when starting a Death Knell with the
+ Vorpal Scythe
+ - admin: Adds logging for the death knell, both when starts and when it is completed
+ successfully.
+ - bugfix: NTOS Messenger should search as you type now
+ wiverns:
+ - rscdel: Cured the fear of santa in claustrophobes
+ yooriss:
+ - rscadd: Right clicking with shoulder holsters on any suit slot item will now attempt
+ to fit the holster to that item, allowing it to be worn in its suit storage
+ slot afterwards. Holsters can also be renamed and customized with a pen, too!
+ - rscadd: The Chaplain's vendor equipment can now be renamed and customized with
+ a pen to better suit their themes/religion. Never go without your trusty bible
+ again!
+ - balance: The sacred waters of the Icewalker's Hearth now ensure that polypore
+ mushrooms and embershrooms are always available for intrepid botanists to use
+ in their concoctions.
+ - rscadd: Watermelon and grass seeds are now available in the Hearth's seed stores.
+2023-12-29:
+ A.C.M.O.:
+ - bugfix: Fixed the Automatic Robotic Factory, making its cooldown timers visible
+ to ghosts.
+ - bugfix: Fixed the Automatic Robotic Factory to stop processing when it breaks
+ or loses power.
+ - balance: Balanced the Automatic Robotic Factory by adding a 60 second cooldown
+ for spawning cyborgs.
+ HalcyonicWolf:
+ - image: modified many sprites for Vox Primalis, they will have a broader wardrobe
+ now
+ NovaBot13:
+ - spellcheck: changes some let's to lets
+ - bugfix: Fixed a lot of missing/broken images, such as emojis, language icons,
+ commendation hearts, icons in R&D menu, etc.
+ - bugfix: reduces lag in the tgui textarea input boxes
+ - bugfix: Dear mappers, the light debugger tool no longer deletes dragged wall lights
+ - bugfix: Fixed "was shocked by /datum/component/energized" message.
+ - bugfix: reaction chamber open its UI when inserting/removing beakers from it
+ - bugfix: reaction chamber triggers new reactions & updates UI more often during
+ heating
+ - bugfix: instant and normal reactions now get triggered more often so for e.g.
+ more plastic sheets from polymer reactions or more reactions occur when there
+ are multiple reagents present
+ - bugfix: NTOS Messenger should clear on enter now
+ - bugfix: Off station ORM's can redeem points again.
+ - rscadd: Add 50% graffiti speed boost to tagger quirk
+ - bugfix: Fix time duration of large graffiti not applying properly
2023-12-30:
Iajret:
- rscadd: Added some new year decoration
+ Ghommie, 13spacemen:
+ - bugfix: Signing or removing your candidature from ghost roles now properly updates
+ the screen button for it.
+ Kyogon:
+ - rscadd: Re-Adds Cat Scream to the list of available screams to choose in character
+ creation
+ NovaBot13:
+ - bugfix: Poll alert buttons candidate number should be more responsive
+ OrionTheFox:
+ - bugfix: fixed some missing scrollbar icons in the Cyborg UI
+ ReturnToZender:
+ - bugfix: JSX files, when edited, cause TGUI to recompile on build
+ Thlumyn:
+ - bugfix: ghost cafe bathroom turfs are no longer solid black blocks of missing
+ icon-ness
+ mogeoko:
+ - bugfix: Atmospherics components will now move air into connected pipeline on deconstruction
+ if possible. Otherwise, air will be released to the outside from open nodes.
+ - bugfix: Unsafe pressure release on atmos components will now work the same way
+ it does in the normal pipes if there is an empty node with air.
+ - bugfix: The HFR user interface would close when the machine is shut down.
+ - bugfix: Atmospherics machinery will now share air from nodes after being rotated
+ and reconnected to pipenet.
+2023-12-31:
+ Echomori:
+ - bugfix: trying to move up or down while controlling an advanced camera console
+ now properly moves the camera up or down, not your body
+ GoldenAlpharex:
+ - bugfix: Vending machines now display the proper color customization options and
+ item quantities again!
+ GoldenAlpharex, Crumpaloo for the sprites:
+ - rscadd: Nanotrasen's Fashion Department released some new masquerade masks, available
+ in single or split colors, with an optional feather! They can be found in every
+ AutoDrobe, and they were even approved to be brought from home!
+ - image: Said masquerade masks are available for all head shapes, whether it be
+ the standard, the snouted, the Teshari, the Vox and even the Vox Primalis!
+ LT3:
+ - bugfix: Fixed BYOND membership status being available to non-BYOND members
+ Melbert:
+ - bugfix: Lizards now show a proper description in the magic mirror
+ NovaBot13:
+ - bugfix: Holodeck monkeys are properly cleaned up now
+ - bugfix: Holodeck monkeys have organs now
+ - bugfix: Bot launchpads can deploy cleanbots and medibots again.
+ - spellcheck: Clarified the message when failling to recall a bot.
+ - bugfix: fishing up a spawner will now give you the spawned item instead of a broken,
+ undeletable spawner object
+ - code_imp: adds a warning to the stack trace when something tries to forceMove()
+ a qdeleted spawner
+ - qol: makes modal list uis autofocus
+ - bugfix: fixes textarea input boxes not updating on prop change (such as changing
+ tabs)
+ - bugfix: chem heater now shows the new value of its buffer dispense volume immediately
+ when it gets changed.
+ - bugfix: debug chem synthesizer now shows the new values of amount & purity immediately
+ when it gets changed.
+ - bugfix: The transhumanist quirk now should work as intended.
+ - bugfix: Dimensional anomlies converting airlocks preserves the old name
+ OrionTheFox:
+ - qol: After complaints of excess rusting, CC has finally installed some dehumidifiers
+ in their stations! (SSDecay will no longer rust tiles)
+ - bugfix: Due to new maintenance measures, the Tram rail-line should no longer rarely
+ start the shift with damage. (SSDecay will no longer destroy Tram tiles)
+ PapaMichael:
+ - sound: added *gaspshock emote sound effect to felinids
+ Paxilmaniac:
+ - bugfix: prefab windows from the colony lathe are now fulltile as intended
+ - bugfix: prefab walls made through right click no longer create the black void
+ of nothing when they are made
+ - qol: prefab floor tiles now have a (x4) next to them to show that they made four
+ per operation
+ - qol: plastic wall panels can now be used on grilles to directly make windows
+ - sound: the soundloop for anything using the air conditioner sound has been halved
+ in volume
+ - rscadd: the colony lathe can now make ore silos, these beep when materials are
+ drawn or added
+ - rscadd: the colony lathe can now also make mini wind turbines, these make a tiny
+ trickle of power when placed outdoors in an atmosphere, however can make significantly
+ more power if a storm rolls through the area they are placed
+ Rhials:
+ - code_imp: Unholy water no longer calls parent twice in on_mob_life().
+ honkpocket:
+ - rscdel: Shuttles no longer bolt their doors on transit
+ - balance: Contractor midrounds now spawn with their chosen character quirks
+ - balance: Contractor midrounds now have a uniform with less projectile armor, but
+ gain some wounding, thermo and acid armor
+ - qol: Contractor midrounds their uniform now abides to the character's uniform
+ preference
+ - bugfix: fixed the confetti loaded shotgun shells
diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml
new file mode 100644
index 00000000000..98b5f4a1383
--- /dev/null
+++ b/html/changelogs/archive/2024-01.yml
@@ -0,0 +1,93 @@
+2024-01-01:
+ NovaBot13:
+ - qol: added screentips to the janicart (pimpin' ride)
+ - bugfix: The sustenance vendor in perma actually serves food now
+ - bugfix: Dropdowns and pop-up menus have been rewritten. This should fix an issue
+ where dropdown text was accidentally scrolling if hovered. Please report any
+ issues on the repo
+ - rscadd: Atmos Holofan projectors can be right-clicked inhand to make their holograms
+ more transparent
+ - bugfix: Cyborgs do not deathgasp twice when dying anymore
+ - bugfix: fixed fire extinguisher cabinets not appearing opened after removing the
+ fire extinguisher from them
+ - refactor: hygeinebots are now basic bots. please report all the bugs
+ - bugfix: fixes hygenebots not being able to patrol
+ - rscadd: hygeinebots can now be controlled by Players
+ SomeRandomOwl:
+ - qol: PAI's now have a larger limit for their OOC notes and description, they can
+ now put up to 500 characters for both
+ - bugfix: NIFsoft settings panel now works once again
+2024-01-02:
+ FearfulFurnishing:
+ - rscadd: Add bone dice, a d6 that can be crafted using a bone.
+ Lutowski:
+ - rscadd: Sunflower crown, poppy crown, lily crown and floral garland added to loadout.
+ - rscadd: Black Gas Mask added to loadout.
+ Melbert:
+ - refactor: Refactored the area transformation colossus crystal effect to use the
+ same system dimensional anomalies use. That means the colossus crystal now has
+ access to some dimensional themes (bamboo, plasma, glass) and the dimensional
+ anomaly now has access to some colossus themes (jungle, alien).
+ NovaBot13:
+ - rscadd: 69(roughly?) new vox phrases
+ - bugfix: Fixed footstep sounds.
+ - qol: The "Explosive Planted" alert for C4 actually shows the C4
+ - qol: Gas analyzer can scan adjacent turfs. No more roasting yourself just to scan
+ your burn mix.
+ - bugfix: Protolathe input should feel more responsive.
+ - rscadd: Added new lizard variants of existing foods for equality of edibility.
+ - qol: made pickle jars reusable and vinegar craftable.
+ - bugfix: Having an inorganic chest/legs no longer makes you drop your ID, belt
+ or pocketed stuff upon losing your jumpsuit
+ - bugfix: you can set the chemical reaction chamber temps to 0k again
+ - bugfix: used higher rounding value for reactions thus you get full volumes especially
+ for endothermic reactions(no more 99.99 but 100 units).
+ - bugfix: chem heater now applies heat per reaction step and sends updates to UI
+ more frequently
+ - qol: Toggling an armour booster module on a MODsuit now gives a balloon alert
+ making the tradeoffs more clear.
+ - bugfix: slamming through a glass table while previously on a table no longer gives
+ you a negative offset.
+ - rscadd: A new heretic path opens up! Gaze up at the great sky for the path of
+ the moon opens and the lie shall be slain in pursuit of ultimate truth!
+ - bugfix: Fixes the syndicate delusion not working
+ Paxilmaniac:
+ - sound: The headset radio sound no longer reaches 17 entire tiles away from you
+ - code_imp: Some of the code around headset sounds has been improved a bit
+ - bugfix: Wind turbines will now correctly connect to a wire that was placed before
+ they were
+2024-01-03:
+ NovaBot13:
+ - bugfix: turbine now shuts itself off when the room apc loses power or if it gets
+ damaged. Also uses a small amount of power for operation of internal electronics,
+ the green light & other stuff
+ - bugfix: No more runtime in turbine computer when parts are not fully connected
+ - qol: adds screentips & examines for turbine
+ - code_imp: removed unused vars, auto doc procs and cleans up some code in turbine
+ - refactor: attack_slime is completely gone
+ - refactor: slime lifestate changes now have less boilerplate code
+ - balance: baby slimes do a bit of a less damage on the low end, but all slime damage
+ is much more consistent
+ - balance: instead of taking half brute damage, cyborgs are now immune to slime's
+ melee attacks. Charged slimes attacking cyborgs now lose a bit of charge. They
+ still get massive damage from charged slimes, and every slime attack flashes
+ them.
+ - bugfix: slimes can now properly drain basic mobs and simple animals that they
+ can damage
+ - bugfix: slimes can drift in zero gravity
+ - image: Throwing things has now a sprite animation forward your target.
+ - sound: Throwing things also has a sound accompagnying it.
+ - spellcheck: Dwarves don't throw things hard like hulks. Instead their throws are
+ described as "flimsily".
+ - image: resprited the Pirate/Sailor costumes, the pirate jacket, and the pirate
+ spacesuit
+ - bugfix: Fixed integrated circuit speech logging
+ Vishenka0704:
+ - admin: The ability to export a part(or z-level) of the map has been added.
+ vinylspiders:
+ - bugfix: fixes a rare bug that could result in spawning without any equipment
+ - spellcheck: updates discord url in panic bunker message
+ - admin: opfor panel 'approve objective' button is no longer annoyingly in the way
+ of the objective title text
+ - qol: when you send a message as an admin via the opfor panel and no one is handling
+ the opfor, it will automatically mark you as handling it
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 0dd945ff37e..1be88105380 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/effects/eldritch.dmi b/icons/effects/eldritch.dmi
index 8b7738f3b46..91fa9ff4f53 100644
Binary files a/icons/effects/eldritch.dmi and b/icons/effects/eldritch.dmi differ
diff --git a/icons/effects/fov/field_of_view.dmi b/icons/effects/fov/field_of_view.dmi
index 8086773d140..8a15ae18a92 100644
Binary files a/icons/effects/fov/field_of_view.dmi and b/icons/effects/fov/field_of_view.dmi differ
diff --git a/icons/effects/mouse_pointers/moon_target.dmi b/icons/effects/mouse_pointers/moon_target.dmi
new file mode 100644
index 00000000000..d89cab42aa1
Binary files /dev/null and b/icons/effects/mouse_pointers/moon_target.dmi differ
diff --git a/icons/effects/mouse_pointers/scope_hide.dmi b/icons/effects/mouse_pointers/scope_hide.dmi
deleted file mode 100644
index a6182e8fc5f..00000000000
Binary files a/icons/effects/mouse_pointers/scope_hide.dmi and /dev/null differ
diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi
index 593a3878c2e..dc95d505ce6 100755
Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ
diff --git a/icons/hud/screen_full.dmi b/icons/hud/screen_full.dmi
index 54931085b74..ac33631e1a0 100644
Binary files a/icons/hud/screen_full.dmi and b/icons/hud/screen_full.dmi differ
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index dd794c02aaa..7d56918846b 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ
diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi
index 747b57949be..ac7575d279b 100644
Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index e789546f1e8..fbe6871c92e 100644
Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ
diff --git a/icons/mob/clothing/head/costume.dmi b/icons/mob/clothing/head/costume.dmi
index 3c5ea17b19d..06de36df19a 100644
Binary files a/icons/mob/clothing/head/costume.dmi and b/icons/mob/clothing/head/costume.dmi differ
diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi
index aafab9558a3..fcfdb55f522 100644
Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ
diff --git a/icons/mob/clothing/suits/costume.dmi b/icons/mob/clothing/suits/costume.dmi
index bf4bbe310d2..3cd5770fb9a 100644
Binary files a/icons/mob/clothing/suits/costume.dmi and b/icons/mob/clothing/suits/costume.dmi differ
diff --git a/icons/mob/clothing/suits/jacket.dmi b/icons/mob/clothing/suits/jacket.dmi
index a6f25d91c59..fa93a85c7c6 100644
Binary files a/icons/mob/clothing/suits/jacket.dmi and b/icons/mob/clothing/suits/jacket.dmi differ
diff --git a/icons/mob/clothing/suits/labcoat.dmi b/icons/mob/clothing/suits/labcoat.dmi
index f499203c95e..37cb0e8696b 100644
Binary files a/icons/mob/clothing/suits/labcoat.dmi and b/icons/mob/clothing/suits/labcoat.dmi differ
diff --git a/icons/mob/clothing/suits/spacesuit.dmi b/icons/mob/clothing/suits/spacesuit.dmi
index 4bc2d8cd7f9..3c381ecd56f 100644
Binary files a/icons/mob/clothing/suits/spacesuit.dmi and b/icons/mob/clothing/suits/spacesuit.dmi differ
diff --git a/icons/mob/clothing/under/costume.dmi b/icons/mob/clothing/under/costume.dmi
index c8fd87f5272..26e8eec9f20 100644
Binary files a/icons/mob/clothing/under/costume.dmi and b/icons/mob/clothing/under/costume.dmi differ
diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi
index 8a6bab69776..5d4d7c9e768 100644
Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ
diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi
index 251458590bd..6cd0f2acebc 100644
Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/staves_lefthand.dmi b/icons/mob/inhands/weapons/staves_lefthand.dmi
index 6e34949c9d5..83504696b61 100644
Binary files a/icons/mob/inhands/weapons/staves_lefthand.dmi and b/icons/mob/inhands/weapons/staves_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/staves_righthand.dmi b/icons/mob/inhands/weapons/staves_righthand.dmi
index df52d4d4198..c83e0eed3ab 100644
Binary files a/icons/mob/inhands/weapons/staves_righthand.dmi and b/icons/mob/inhands/weapons/staves_righthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi
index 7544d3cbaf2..e0a33fbcee3 100644
Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi
index 300e4c2e616..fcdac64bdca 100644
Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ
diff --git a/icons/mob/nonhuman-player/eldritch_mobs.dmi b/icons/mob/nonhuman-player/eldritch_mobs.dmi
index 4e640694b2a..18e50d727ae 100644
Binary files a/icons/mob/nonhuman-player/eldritch_mobs.dmi and b/icons/mob/nonhuman-player/eldritch_mobs.dmi differ
diff --git a/icons/obj/antags/contractor_tablet.dmi b/icons/obj/antags/contractor_tablet.dmi
deleted file mode 100644
index ae3cb579e2b..00000000000
Binary files a/icons/obj/antags/contractor_tablet.dmi and /dev/null differ
diff --git a/icons/obj/antags/eldritch.dmi b/icons/obj/antags/eldritch.dmi
index d59bf3dbdeb..7f6af6bfe2e 100644
Binary files a/icons/obj/antags/eldritch.dmi and b/icons/obj/antags/eldritch.dmi differ
diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi
index 0a2bd33c4e4..5ccdf2c186f 100644
Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ
diff --git a/icons/obj/clothing/head/costume.dmi b/icons/obj/clothing/head/costume.dmi
index f676b1c6973..3cfbd3d21ef 100644
Binary files a/icons/obj/clothing/head/costume.dmi and b/icons/obj/clothing/head/costume.dmi differ
diff --git a/icons/obj/clothing/suits/costume.dmi b/icons/obj/clothing/suits/costume.dmi
index 0c08b97605d..ad68aea553f 100644
Binary files a/icons/obj/clothing/suits/costume.dmi and b/icons/obj/clothing/suits/costume.dmi differ
diff --git a/icons/obj/clothing/suits/jacket.dmi b/icons/obj/clothing/suits/jacket.dmi
index dc507017cd2..30e1a99d9ee 100644
Binary files a/icons/obj/clothing/suits/jacket.dmi and b/icons/obj/clothing/suits/jacket.dmi differ
diff --git a/icons/obj/clothing/suits/labcoat.dmi b/icons/obj/clothing/suits/labcoat.dmi
index fa404813e40..430d11d5f96 100644
Binary files a/icons/obj/clothing/suits/labcoat.dmi and b/icons/obj/clothing/suits/labcoat.dmi differ
diff --git a/icons/obj/clothing/suits/spacesuit.dmi b/icons/obj/clothing/suits/spacesuit.dmi
index de9c1242767..84f84ac978e 100644
Binary files a/icons/obj/clothing/suits/spacesuit.dmi and b/icons/obj/clothing/suits/spacesuit.dmi differ
diff --git a/icons/obj/clothing/under/costume.dmi b/icons/obj/clothing/under/costume.dmi
index bf60bb0a445..b58f96b82d9 100644
Binary files a/icons/obj/clothing/under/costume.dmi and b/icons/obj/clothing/under/costume.dmi differ
diff --git a/icons/obj/food/frozen_treats.dmi b/icons/obj/food/frozen_treats.dmi
index b5b91520e8c..5c27454bd3f 100644
Binary files a/icons/obj/food/frozen_treats.dmi and b/icons/obj/food/frozen_treats.dmi differ
diff --git a/icons/obj/food/lizard.dmi b/icons/obj/food/lizard.dmi
index 7cc7bf0fcf9..15bed265e2f 100644
Binary files a/icons/obj/food/lizard.dmi and b/icons/obj/food/lizard.dmi differ
diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi
index 07bc507b847..66761ee2029 100644
Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ
diff --git a/icons/obj/modular_pda.dmi b/icons/obj/modular_pda.dmi
index b43be78e717..6dfe29add9e 100644
Binary files a/icons/obj/modular_pda.dmi and b/icons/obj/modular_pda.dmi differ
diff --git a/icons/obj/signs.dmi b/icons/obj/signs.dmi
index 9ece919c213..78cc96fabbc 100644
Binary files a/icons/obj/signs.dmi and b/icons/obj/signs.dmi differ
diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi
index 274af66c820..9bc8f4d2c27 100644
Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ
diff --git a/icons/obj/toys/dice.dmi b/icons/obj/toys/dice.dmi
index 26cf08af5b9..d41e503242d 100644
Binary files a/icons/obj/toys/dice.dmi and b/icons/obj/toys/dice.dmi differ
diff --git a/icons/obj/weapons/guns/magic.dmi b/icons/obj/weapons/guns/magic.dmi
index 53217ef461b..90eb4bdc669 100644
Binary files a/icons/obj/weapons/guns/magic.dmi and b/icons/obj/weapons/guns/magic.dmi differ
diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi
index 168f9fb716c..a4c321a0543 100644
Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ
diff --git a/icons/obj/weapons/khopesh.dmi b/icons/obj/weapons/khopesh.dmi
index ab7a0c252cb..ba9ef545f14 100644
Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ
diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi
index 5f6626c7993..619ef96dda9 100644
Binary files a/icons/ui_icons/achievements/achievements.dmi and b/icons/ui_icons/achievements/achievements.dmi differ
diff --git a/icons/ui_icons/advisors/chem_help_advisor.gif b/icons/ui_icons/advisors/chem_help_advisor.gif
deleted file mode 100644
index 47709c8ce4c..00000000000
Binary files a/icons/ui_icons/advisors/chem_help_advisor.gif and /dev/null differ
diff --git a/modular_skyrat/master_files/code/_globalvars/configuration.dm b/modular_nova/master_files/code/_globalvars/configuration.dm
similarity index 100%
rename from modular_skyrat/master_files/code/_globalvars/configuration.dm
rename to modular_nova/master_files/code/_globalvars/configuration.dm
diff --git a/modular_nova/master_files/code/_globalvars/lists/ambience.dm b/modular_nova/master_files/code/_globalvars/lists/ambience.dm
new file mode 100644
index 00000000000..f67aa5e1019
--- /dev/null
+++ b/modular_nova/master_files/code/_globalvars/lists/ambience.dm
@@ -0,0 +1,6 @@
+GLOBAL_LIST_INIT(generic_ambience, list(
+ 'modular_nova/master_files/sound/ambience/ambigen1.ogg', 'modular_nova/master_files/sound/ambience/ambigen2.ogg',
+ 'modular_nova/master_files/sound/ambience/ambigen3.ogg', 'modular_nova/master_files/sound/ambience/ambigen4.ogg',
+ 'modular_nova/master_files/sound/ambience/ambigen5.ogg', 'modular_nova/master_files/sound/ambience/ambigen6.ogg',
+ 'modular_nova/master_files/sound/ambience/ambigen7.ogg', 'modular_nova/master_files/sound/ambience/ambigen8.ogg',
+ 'modular_nova/master_files/sound/ambience/ambigen9.ogg'))
diff --git a/modular_skyrat/master_files/code/_globalvars/lists/chat.dm b/modular_nova/master_files/code/_globalvars/lists/chat.dm
similarity index 100%
rename from modular_skyrat/master_files/code/_globalvars/lists/chat.dm
rename to modular_nova/master_files/code/_globalvars/lists/chat.dm
diff --git a/modular_skyrat/master_files/code/_globalvars/religion.dm b/modular_nova/master_files/code/_globalvars/religion.dm
similarity index 100%
rename from modular_skyrat/master_files/code/_globalvars/religion.dm
rename to modular_nova/master_files/code/_globalvars/religion.dm
diff --git a/modular_skyrat/master_files/code/_onclick/cyborg.dm b/modular_nova/master_files/code/_onclick/cyborg.dm
similarity index 100%
rename from modular_skyrat/master_files/code/_onclick/cyborg.dm
rename to modular_nova/master_files/code/_onclick/cyborg.dm
diff --git a/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm b/modular_nova/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm
similarity index 100%
rename from modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm
rename to modular_nova/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm
diff --git a/modular_skyrat/master_files/code/controllers/subsystem/dbcore.dm b/modular_nova/master_files/code/controllers/subsystem/dbcore.dm
similarity index 100%
rename from modular_skyrat/master_files/code/controllers/subsystem/dbcore.dm
rename to modular_nova/master_files/code/controllers/subsystem/dbcore.dm
diff --git a/modular_skyrat/master_files/code/controllers/subsystem/events.dm b/modular_nova/master_files/code/controllers/subsystem/events.dm
similarity index 100%
rename from modular_skyrat/master_files/code/controllers/subsystem/events.dm
rename to modular_nova/master_files/code/controllers/subsystem/events.dm
diff --git a/modular_skyrat/master_files/code/controllers/subsystem/language.dm b/modular_nova/master_files/code/controllers/subsystem/language.dm
similarity index 100%
rename from modular_skyrat/master_files/code/controllers/subsystem/language.dm
rename to modular_nova/master_files/code/controllers/subsystem/language.dm
diff --git a/modular_skyrat/master_files/code/datums/ai_laws.dm b/modular_nova/master_files/code/datums/ai_laws.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/ai_laws.dm
rename to modular_nova/master_files/code/datums/ai_laws.dm
diff --git a/modular_skyrat/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm b/modular_nova/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm
rename to modular_nova/master_files/code/datums/bodypart_overlays/bodypart_overlay.dm
diff --git a/modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
rename to modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
diff --git a/modular_skyrat/master_files/code/datums/components/crafting.dm b/modular_nova/master_files/code/datums/components/crafting.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/crafting.dm
rename to modular_nova/master_files/code/datums/components/crafting.dm
diff --git a/modular_skyrat/master_files/code/datums/components/damage_tracker.dm b/modular_nova/master_files/code/datums/components/damage_tracker.dm
similarity index 98%
rename from modular_skyrat/master_files/code/datums/components/damage_tracker.dm
rename to modular_nova/master_files/code/datums/components/damage_tracker.dm
index f35cc531f9a..8485d20be08 100644
--- a/modular_skyrat/master_files/code/datums/components/damage_tracker.dm
+++ b/modular_nova/master_files/code/datums/components/damage_tracker.dm
@@ -50,7 +50,7 @@
update_damage_values()
-/datum/component/damage_tracker/Destroy(force, silent)
+/datum/component/damage_tracker/Destroy(force)
if(reapply_damage_on_removal)
reapply_damage()
diff --git a/modular_skyrat/master_files/code/datums/components/fullauto.dm b/modular_nova/master_files/code/datums/components/fullauto.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/fullauto.dm
rename to modular_nova/master_files/code/datums/components/fullauto.dm
diff --git a/modular_skyrat/master_files/code/datums/components/grillable.dm b/modular_nova/master_files/code/datums/components/grillable.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/grillable.dm
rename to modular_nova/master_files/code/datums/components/grillable.dm
diff --git a/modular_skyrat/master_files/code/datums/components/leash.dm b/modular_nova/master_files/code/datums/components/leash.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/leash.dm
rename to modular_nova/master_files/code/datums/components/leash.dm
diff --git a/modular_skyrat/master_files/code/datums/components/shielded_suit.dm b/modular_nova/master_files/code/datums/components/shielded_suit.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/shielded_suit.dm
rename to modular_nova/master_files/code/datums/components/shielded_suit.dm
diff --git a/modular_skyrat/master_files/code/datums/components/tippable.dm b/modular_nova/master_files/code/datums/components/tippable.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/components/tippable.dm
rename to modular_nova/master_files/code/datums/components/tippable.dm
diff --git a/modular_skyrat/master_files/code/datums/emotes.dm b/modular_nova/master_files/code/datums/emotes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/emotes.dm
rename to modular_nova/master_files/code/datums/emotes.dm
diff --git a/modular_skyrat/master_files/code/datums/ert.dm b/modular_nova/master_files/code/datums/ert.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/ert.dm
rename to modular_nova/master_files/code/datums/ert.dm
diff --git a/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm b/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm
new file mode 100644
index 00000000000..e414ff82a72
--- /dev/null
+++ b/modular_nova/master_files/code/datums/greyscale/config_types/greyscale_configs.dm
@@ -0,0 +1,3 @@
+/datum/greyscale_config/sneakers_marisa/worn/digi
+ name = "Marisa Sneakers (Worn Digi)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi'
diff --git a/modular_nova/master_files/code/datums/id_trim/jobs.dm b/modular_nova/master_files/code/datums/id_trim/jobs.dm
new file mode 100644
index 00000000000..570a4404a2d
--- /dev/null
+++ b/modular_nova/master_files/code/datums/id_trim/jobs.dm
@@ -0,0 +1,108 @@
+// MODULAR ID TRIM ACCESS OVERRIDES GO HERE!!
+
+//(Most) of Security has inverted IDs, with custom blue-on-black icons. This is to distinguish them from their head, who has a white-on-blue icon
+/datum/id_trim/job/head_of_security
+ subdepartment_color = COLOR_ASSEMBLY_BLACK
+
+/datum/id_trim/job/warden
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ department_color = COLOR_ASSEMBLY_BLACK
+ subdepartment_color = COLOR_ASSEMBLY_BLACK
+
+/datum/id_trim/job/security_officer
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ department_color = COLOR_ASSEMBLY_BLACK
+ subdepartment_color = COLOR_ASSEMBLY_BLACK
+
+/datum/id_trim/job/detective
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ department_color = COLOR_ASSEMBLY_BLACK
+ subdepartment_color = COLOR_ASSEMBLY_BLACK
+
+
+/datum/id_trim/job/chief_engineer/New()
+ . = ..()
+
+ minimal_access |= ACCESS_WEAPONS
+
+/datum/id_trim/job/atmospheric_technician/New()
+ . = ..()
+
+ minimal_access |= ACCESS_ENGINE_EQUIP
+
+/datum/id_trim/job/chief_medical_officer/New()
+ . = ..()
+
+ minimal_access |= ACCESS_WEAPONS
+
+/datum/id_trim/job/research_director/New()
+ . = ..()
+
+ minimal_access |= ACCESS_WEAPONS
+
+
+/datum/id_trim/job/head_of_personnel/New()
+ . = ..()
+
+ minimal_access |= ACCESS_WEAPONS
+
+/datum/id_trim/job/blueshield
+ assignment = "Blueshield"
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ trim_state = "trim_blueshield"
+ department_color = COLOR_COMMAND_BLUE
+ subdepartment_color = COLOR_CENTCOM_BLUE // Not the other way around. I think.
+ sechud_icon_state = SECHUD_BLUESHIELD
+ extra_access = list(ACCESS_BRIG, ACCESS_CARGO, ACCESS_COURT, ACCESS_GATEWAY, ACCESS_SECURITY)
+ minimal_access = list(
+ ACCESS_BRIG_ENTRANCE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, ACCESS_DETECTIVE, ACCESS_ENGINEERING,
+ ACCESS_MAINT_TUNNELS, ACCESS_MEDICAL, ACCESS_RC_ANNOUNCE, ACCESS_RESEARCH, ACCESS_WEAPONS,
+ )
+ minimal_wildcard_access = list(ACCESS_CAPTAIN)
+ template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
+
+/datum/id_trim/job/nanotrasen_consultant
+ assignment = "Nanotrasen Consultant"
+ trim_state = "trim_centcom"
+ department_color = COLOR_GREEN
+ subdepartment_color = COLOR_GREEN
+ sechud_icon_state = SECHUD_NT_CONSULTANT
+ extra_access = list()
+ minimal_access = list(
+ ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE, ACCESS_BAR, ACCESS_BRIG_ENTRANCE,
+ ACCESS_CENT_GENERAL, ACCESS_CHANGE_IDS, ACCESS_CHAPEL_OFFICE, ACCESS_COMMAND, ACCESS_CONSTRUCTION,
+ ACCESS_CREMATORIUM, ACCESS_COURT, ACCESS_ENGINEERING, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_HOP, ACCESS_HYDROPONICS,
+ ACCESS_JANITOR, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS,
+ ACCESS_MEDICAL, ACCESS_MECH_ENGINE, ACCESS_MECH_MEDICAL, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY,
+ ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE,
+ ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_VAULT, ACCESS_WEAPONS
+ )
+ minimal_wildcard_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL)
+ template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
+
+/datum/id_trim/job/corrections_officer
+ assignment = "Corrections Officer"
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ trim_state = "trim_corrections_officer"
+ department_color = COLOR_ASSEMBLY_BLACK
+ subdepartment_color = COLOR_ASSEMBLY_BLACK
+ sechud_icon_state = SECHUD_CORRECTIONS_OFFICER
+ extra_access = list()
+ minimal_access = list(
+ ACCESS_BRIG, ACCESS_BRIG_ENTRANCE, ACCESS_COURT,
+ ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_WEAPONS
+ )
+ template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOS)
+ job = /datum/job/corrections_officer
+
+/datum/id_trim/job/barber
+ assignment = "Barber"
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ trim_state = "trim_barber"
+ department_color = COLOR_SERVICE_LIME
+ subdepartment_color = COLOR_SERVICE_LIME
+ sechud_icon_state = SECHUD_BARBER
+ extra_access = list()
+ minimal_access = list(ACCESS_BARBER, ACCESS_MAINT_TUNNELS, ACCESS_SERVICE, ACCESS_THEATRE)
+ template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOP)
+ job = /datum/job/barber
diff --git a/modular_skyrat/master_files/code/datums/id_trim/solfed.dm b/modular_nova/master_files/code/datums/id_trim/solfed.dm
similarity index 90%
rename from modular_skyrat/master_files/code/datums/id_trim/solfed.dm
rename to modular_nova/master_files/code/datums/id_trim/solfed.dm
index ccd7548b508..39eb80f2b39 100644
--- a/modular_skyrat/master_files/code/datums/id_trim/solfed.dm
+++ b/modular_nova/master_files/code/datums/id_trim/solfed.dm
@@ -1,5 +1,5 @@
/datum/id_trim/solfed
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
assignment = "SolFed"
trim_state = "trim_solfed"
department_color = COLOR_SOLFED_GOLD
@@ -38,7 +38,7 @@
sechud_icon_state = SECHUD_SOLFED_LIASON
/datum/id_trim/space_police // Overrides the normal /tg/ ERTSEC Icon, these guys aren't NT!
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_spacepolice"
department_color = COLOR_CENTCOM_BLUE // why did these guys get this but the other modular id trims didn't. what
subdepartment_color = COLOR_SECURITY_RED
diff --git a/modular_nova/master_files/code/datums/id_trim/syndicate.dm b/modular_nova/master_files/code/datums/id_trim/syndicate.dm
new file mode 100644
index 00000000000..503ff6e59fa
--- /dev/null
+++ b/modular_nova/master_files/code/datums/id_trim/syndicate.dm
@@ -0,0 +1,100 @@
+/// SYNDICATE ID TRIMS
+/datum/id_trim/syndicom/skyrat
+
+// Note: These two are only left here because of the old Cybersun code.
+/datum/id_trim/syndicom/skyrat/crew
+ assignment = "Syndicate Operative"
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
+
+/datum/id_trim/syndicom/skyrat/captain
+ assignment = "Syndicate Ship Captain"
+ trim_state = "trim_captain"
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
+
+/// DS-2
+
+/datum/id_trim/syndicom/skyrat/ds2
+ assignment = "DS-2 Operative"
+ trim_state = "trim_unknown"
+ department_color = COLOR_ASSEMBLY_BLACK
+ subdepartment_color = COLOR_SYNDIE_RED
+ threat_modifier = 5 // Matching the syndicate threat level since DS2 is a syndicate station.
+
+/datum/id_trim/syndicom/skyrat/ds2/prisoner
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' // I can't put this on the basetype AAAAAA
+ assignment = "DS-2 Hostage"
+ trim_state = "trim_ds2prisoner"
+ subdepartment_color = COLOR_MAROON
+ sechud_icon_state = SECHUD_DS2_PRISONER
+
+/datum/id_trim/syndicom/skyrat/ds2/miner
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Mining Officer"
+ trim_state = "trim_ds2miningofficer"
+ sechud_icon_state = SECHUD_DS2_MININGOFFICER
+
+/datum/id_trim/syndicom/skyrat/ds2/syndicatestaff
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 General Staff"
+ trim_state = "trim_ds2generalstaff"
+ sechud_icon_state = SECHUD_DS2_GENSTAFF
+
+/datum/id_trim/syndicom/skyrat/ds2/researcher
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Researcher"
+ trim_state = "trim_ds2researcher"
+ sechud_icon_state = SECHUD_DS2_RESEARCHER
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
+
+/datum/id_trim/syndicom/skyrat/ds2/enginetechnician
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Engine Technician"
+ trim_state = "trim_ds2enginetech"
+ sechud_icon_state = SECHUD_DS2_ENGINETECH
+
+/datum/id_trim/syndicom/skyrat/ds2/medicalofficer
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Medical Officer"
+ trim_state = "trim_ds2medicalofficer"
+ sechud_icon_state = SECHUD_DS2_DOCTOR
+
+/datum/id_trim/syndicom/skyrat/ds2/masteratarms
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Master At Arms"
+ trim_state = "trim_ds2masteratarms"
+ sechud_icon_state = SECHUD_DS2_MASTERATARMS
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
+
+/datum/id_trim/syndicom/skyrat/ds2/brigofficer
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Brig Officer"
+ trim_state = "trim_ds2brigofficer"
+ sechud_icon_state = SECHUD_DS2_BRIGOFFICER
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
+
+/datum/id_trim/syndicom/skyrat/ds2/corporateliasion // DS2 HoP
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Corporate Liaison"
+ trim_state = "trim_ds2corporateliaison"
+ sechud_icon_state = SECHUD_DS2_CORPLIAISON
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
+
+/datum/id_trim/syndicom/skyrat/ds2/stationadmiral
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "DS-2 Admiral"
+ trim_state = "trim_ds2admiral"
+ sechud_icon_state = SECHUD_DS2_ADMIRAL
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
+
+/// Interdyne
+
+/datum/id_trim/syndicom/skyrat/interdyne
+ assignment = "Interdyne Operative"
+
+/datum/id_trim/syndicom/skyrat/interdyne/deckofficer
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "Deck Officer"
+ trim_state = "trim_deckofficer"
+ department_color = COLOR_COMMAND_BLUE
+ subdepartment_color = COLOR_CARGO_BROWN
+ access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
diff --git a/modular_skyrat/master_files/code/datums/keybinding/mob.dm b/modular_nova/master_files/code/datums/keybinding/mob.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/keybinding/mob.dm
rename to modular_nova/master_files/code/datums/keybinding/mob.dm
diff --git a/modular_skyrat/master_files/code/datums/mind/_mind.dm b/modular_nova/master_files/code/datums/mind/_mind.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mind/_mind.dm
rename to modular_nova/master_files/code/datums/mind/_mind.dm
diff --git a/modular_skyrat/master_files/code/datums/mood_events/drink_events.dm b/modular_nova/master_files/code/datums/mood_events/drink_events.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mood_events/drink_events.dm
rename to modular_nova/master_files/code/datums/mood_events/drink_events.dm
diff --git a/modular_skyrat/master_files/code/datums/mood_events/generic_negative_events.dm b/modular_nova/master_files/code/datums/mood_events/generic_negative_events.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mood_events/generic_negative_events.dm
rename to modular_nova/master_files/code/datums/mood_events/generic_negative_events.dm
diff --git a/modular_skyrat/master_files/code/datums/mood_events/needs_events.dm b/modular_nova/master_files/code/datums/mood_events/needs_events.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mood_events/needs_events.dm
rename to modular_nova/master_files/code/datums/mood_events/needs_events.dm
diff --git a/modular_skyrat/master_files/code/datums/mutations/_mutations.dm b/modular_nova/master_files/code/datums/mutations/_mutations.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mutations/_mutations.dm
rename to modular_nova/master_files/code/datums/mutations/_mutations.dm
diff --git a/modular_skyrat/master_files/code/datums/mutations/chameleon.dm b/modular_nova/master_files/code/datums/mutations/chameleon.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mutations/chameleon.dm
rename to modular_nova/master_files/code/datums/mutations/chameleon.dm
diff --git a/modular_skyrat/master_files/code/datums/mutations/hulk.dm b/modular_nova/master_files/code/datums/mutations/hulk.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/mutations/hulk.dm
rename to modular_nova/master_files/code/datums/mutations/hulk.dm
diff --git a/modular_skyrat/master_files/code/datums/outfit.dm b/modular_nova/master_files/code/datums/outfit.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/outfit.dm
rename to modular_nova/master_files/code/datums/outfit.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/_quirk.dm b/modular_nova/master_files/code/datums/quirks/_quirk.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/_quirk.dm
rename to modular_nova/master_files/code/datums/quirks/_quirk.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/all_nighter.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/all_nighter.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/all_nighter.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/all_nighter.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/blooddeficiency.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/brainproblems.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/brainproblems.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/brainproblems.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/brainproblems.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/gifted.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/gifted.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/gifted.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/gifted.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm
rename to modular_nova/master_files/code/datums/quirks/negative_quirks/nerve_staple.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/neutral_quirks/equipping.dm b/modular_nova/master_files/code/datums/quirks/neutral_quirks/equipping.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/neutral_quirks/equipping.dm
rename to modular_nova/master_files/code/datums/quirks/neutral_quirks/equipping.dm
diff --git a/modular_skyrat/master_files/code/datums/quirks/neutral_quirks/lungs.dm b/modular_nova/master_files/code/datums/quirks/neutral_quirks/lungs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/quirks/neutral_quirks/lungs.dm
rename to modular_nova/master_files/code/datums/quirks/neutral_quirks/lungs.dm
diff --git a/modular_skyrat/master_files/code/datums/records/record.dm b/modular_nova/master_files/code/datums/records/record.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/records/record.dm
rename to modular_nova/master_files/code/datums/records/record.dm
diff --git a/modular_skyrat/master_files/code/datums/station_traits/negative_traits.dm b/modular_nova/master_files/code/datums/station_traits/negative_traits.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/station_traits/negative_traits.dm
rename to modular_nova/master_files/code/datums/station_traits/negative_traits.dm
diff --git a/modular_skyrat/master_files/code/datums/storage/storage.dm b/modular_nova/master_files/code/datums/storage/storage.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/storage/storage.dm
rename to modular_nova/master_files/code/datums/storage/storage.dm
diff --git a/modular_skyrat/master_files/code/datums/storage/subtypes/pockets.dm b/modular_nova/master_files/code/datums/storage/subtypes/pockets.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/storage/subtypes/pockets.dm
rename to modular_nova/master_files/code/datums/storage/subtypes/pockets.dm
diff --git a/modular_skyrat/master_files/code/datums/traits/good.dm b/modular_nova/master_files/code/datums/traits/good.dm
similarity index 83%
rename from modular_skyrat/master_files/code/datums/traits/good.dm
rename to modular_nova/master_files/code/datums/traits/good.dm
index 1a5a6d9d26e..aa71af7edeb 100644
--- a/modular_skyrat/master_files/code/datums/traits/good.dm
+++ b/modular_nova/master_files/code/datums/traits/good.dm
@@ -128,3 +128,42 @@
lose_text = span_danger("Somehow, you've completely cleaned yourself of glitter..")
medical_record_text = "Patient seems to be looking fabulous."
icon = FA_ICON_HAND_SPARKLES
+
+/datum/quirk/no_appendix
+ name = "Appendicitis Survivor"
+ desc = "You had a run in with appendicitis in the past and no longer have an appendix."
+ icon = FA_ICON_NOTES_MEDICAL
+ value = 2
+ gain_text = span_notice("You no longer have an appendix.")
+ lose_text = span_danger("Your appendix has magically.. regrown?")
+ medical_record_text = "Patient had appendicitis in the past and has had their appendix surgically removed."
+ /// The mob's original appendix
+ var/obj/item/organ/internal/appendix/old_appendix
+
+/datum/quirk/no_appendix/post_add()
+ var/mob/living/carbon/carbon_quirk_holder = quirk_holder
+ old_appendix = carbon_quirk_holder.get_organ_slot(ORGAN_SLOT_APPENDIX)
+
+ if(isnull(old_appendix))
+ return
+
+ old_appendix.Remove(carbon_quirk_holder, special = TRUE)
+ old_appendix.moveToNullspace()
+
+ STOP_PROCESSING(SSobj, old_appendix)
+
+/datum/quirk/no_appendix/remove()
+ var/mob/living/carbon/carbon_quirk_holder = quirk_holder
+
+ if(isnull(old_appendix))
+ return
+
+ var/obj/item/organ/internal/appendix/current_appendix = carbon_quirk_holder.get_organ_slot(ORGAN_SLOT_APPENDIX)
+
+ // if we have not gained an appendix already, put the old one back
+ if(isnull(current_appendix))
+ old_appendix.Insert(carbon_quirk_holder, special = TRUE)
+ else
+ qdel(old_appendix)
+
+ old_appendix = null
diff --git a/modular_skyrat/master_files/code/datums/traits/negative.dm b/modular_nova/master_files/code/datums/traits/negative.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/traits/negative.dm
rename to modular_nova/master_files/code/datums/traits/negative.dm
diff --git a/modular_skyrat/master_files/code/datums/traits/neutral.dm b/modular_nova/master_files/code/datums/traits/neutral.dm
similarity index 98%
rename from modular_skyrat/master_files/code/datums/traits/neutral.dm
rename to modular_nova/master_files/code/datums/traits/neutral.dm
index 432fa728f03..ca1c43a5f39 100644
--- a/modular_skyrat/master_files/code/datums/traits/neutral.dm
+++ b/modular_nova/master_files/code/datums/traits/neutral.dm
@@ -4,7 +4,7 @@ GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay())
/proc/generate_DNR_trait_overlay()
RETURN_TYPE(/mutable_appearance)
- var/mutable_appearance/DNR_trait_overlay = mutable_appearance('modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi', "DNR", FLY_LAYER)
+ var/mutable_appearance/DNR_trait_overlay = mutable_appearance('modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi', "DNR", FLY_LAYER)
DNR_trait_overlay.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
return DNR_trait_overlay
@@ -119,7 +119,7 @@ GLOBAL_VAR_INIT(DNR_trait_overlay, generate_DNR_trait_overlay())
/obj/item/paper/joker
name = "disability card"
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
icon_state = "joker"
desc = "Smile, though your heart is aching."
default_raw_text = "\
diff --git a/modular_skyrat/master_files/code/datums/votes/_vote_datum.dm b/modular_nova/master_files/code/datums/votes/_vote_datum.dm
similarity index 100%
rename from modular_skyrat/master_files/code/datums/votes/_vote_datum.dm
rename to modular_nova/master_files/code/datums/votes/_vote_datum.dm
diff --git a/modular_nova/master_files/code/datums/votes/map_vote.dm b/modular_nova/master_files/code/datums/votes/map_vote.dm
new file mode 100644
index 00000000000..10dea54b2fd
--- /dev/null
+++ b/modular_nova/master_files/code/datums/votes/map_vote.dm
@@ -0,0 +1,3 @@
+//Map votes shouldn't be using weighted random
+/datum/vote/map_vote
+ winner_method = VOTE_WINNER_METHOD_SIMPLE
diff --git a/modular_skyrat/master_files/code/game/atoms.dm b/modular_nova/master_files/code/game/atoms.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/atoms.dm
rename to modular_nova/master_files/code/game/atoms.dm
diff --git a/modular_skyrat/master_files/code/game/effects/spawners/random/structure.dm b/modular_nova/master_files/code/game/effects/spawners/random/structure.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/effects/spawners/random/structure.dm
rename to modular_nova/master_files/code/game/effects/spawners/random/structure.dm
diff --git a/modular_nova/master_files/code/game/gamemodes/dynamic.dm b/modular_nova/master_files/code/game/gamemodes/dynamic.dm
new file mode 100644
index 00000000000..3776c016ece
--- /dev/null
+++ b/modular_nova/master_files/code/game/gamemodes/dynamic.dm
@@ -0,0 +1,78 @@
+#define MIN_MIDROUND_COST 20
+#define ALT_MIDROUND_LOWER_TIME 4500
+#define ALT_MIDROUND_UPPER_TIME 10500
+
+// A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof)
+/datum/controller/subsystem/dynamic/proc/send_trait_report()
+ . = "Central Command Status Summary "
+
+ var/greenshift = GLOB.dynamic_forced_extended || (threat_level < MIN_MIDROUND_COST && shown_threat < MIN_MIDROUND_COST) // if both shown and real threat are below any ruleset, its greenshift time
+ generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget))
+
+ if(GLOB.station_goals.len > 0)
+ . = "No assigned goals. "
+ else
+ var/list/texts = list("Special Orders for [station_name()]: ")
+ for(var/datum/station_goal/station_goal as anything in GLOB.station_goals)
+ station_goal.on_report()
+ texts += station_goal.get_report()
+
+ . += texts.Join(" ")
+ if(!SSstation.station_traits.len)
+ . = "No identified shift divergencies. "
+ else
+ var/list/trait_list_strings = list()
+ for(var/datum/station_trait/station_trait as anything in SSstation.station_traits)
+ if(!station_trait.show_in_report)
+ continue
+ trait_list_strings += "[station_trait.get_report()] "
+ if(trait_list_strings.len > 0)
+ . += "Identified shift divergencies: " + trait_list_strings.Join()
+
+ . += " This concludes your shift-start evaluation. Have a secure shift! \
+ This label certifies an Intern has reviewed the above before sending. This document is the property of Nanotrasen Corporation.
"
+
+ print_command_report(., "Central Command Status Summary", announce = FALSE)
+ priority_announce("Hello, crew of [station_name()]. Our intern has finished their shift-start divergency and goals evaluation, which has been sent to your communications console. Have a secure shift!", "Divergency Report", SSstation.announcer.get_rand_report_sound())
+
+/datum/controller/subsystem/dynamic
+ /// Desired median point for midrounds, plus or minus the midround_roll_distance.
+ var/midround_median_frequency = 36000
+
+/// Divides threat budget based on the server config
+/datum/controller/subsystem/dynamic/generate_budgets()
+ if(CONFIG_GET(flag/split_threat_budget))
+ return ..()
+
+ round_start_budget = 0
+ initial_round_start_budget = 0
+ mid_round_budget = threat_level
+
+/// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection.
+/datum/controller/subsystem/dynamic/get_heavy_midround_injection_chance(dry_run)
+ var/next_midround_roll = next_midround_injection() - SSticker.round_start_time
+
+ var/heavy_coefficient = CLAMP01((next_midround_roll - midround_light_upper_bound) / (midround_heavy_lower_bound - midround_light_upper_bound))
+
+ return 100 * heavy_coefficient
+
+/// Determines the next midround injection attempt based on the set median and roll distance.
+/datum/controller/subsystem/dynamic/next_midround_injection()
+ if(!isnull(next_midround_injection))
+ return next_midround_injection
+
+ if(last_midround_injection_attempt == 0)
+ last_midround_injection_attempt = SSticker.round_start_time
+
+ next_midround_injection = last_midround_injection_attempt + rand((midround_median_frequency - midround_roll_distance), (midround_median_frequency + midround_roll_distance))
+
+ return next_midround_injection
+
+/// If a midround injection fails to run, this can be called by the particular rule (if required) to attempt an alternate.
+/datum/controller/subsystem/dynamic/proc/alternate_midround_injection()
+ next_midround_injection = world.time + rand(ALT_MIDROUND_LOWER_TIME, ALT_MIDROUND_UPPER_TIME)
+ log_dynamic_and_announce("Alternate midround injection in [DisplayTimeText(next_midround_injection - world.time)]")
+
+#undef MIN_MIDROUND_COST
+#undef ALT_MIDROUND_LOWER_TIME
+#undef ALT_MIDROUND_UPPER_TIME
diff --git a/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
new file mode 100644
index 00000000000..1310c8bd49c
--- /dev/null
+++ b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -0,0 +1,3 @@
+/// Fired when there are no valid candidates. Try another roll after a delay.
+/datum/dynamic_ruleset/midround/from_ghosts/attempt_replacement()
+ SSdynamic.alternate_midround_injection()
diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
rename to modular_nova/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
diff --git a/modular_skyrat/master_files/code/game/gamemodes/objective.dm b/modular_nova/master_files/code/game/gamemodes/objective.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/gamemodes/objective.dm
rename to modular_nova/master_files/code/game/gamemodes/objective.dm
diff --git a/modular_skyrat/master_files/code/game/machinery/deployable.dm b/modular_nova/master_files/code/game/machinery/deployable.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/machinery/deployable.dm
rename to modular_nova/master_files/code/game/machinery/deployable.dm
diff --git a/modular_nova/master_files/code/game/machinery/doors/firedoor.dm b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm
new file mode 100644
index 00000000000..a05589daf99
--- /dev/null
+++ b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm
@@ -0,0 +1,45 @@
+/obj/machinery/door/firedoor/AltClick(mob/user)
+ . = ..()
+ if(!user.can_perform_action(src))
+ return
+ try_manual_override(user)
+
+/obj/machinery/door/firedoor/examine(mob/user)
+ . = ..()
+ . += span_notice("Alt-click the door to use the manual override.")
+
+/obj/machinery/door/proc/try_manual_override(mob/user)
+ if(density && !welded && !operating)
+ balloon_alert(user, "opening...")
+ if(do_after(user, 10 SECONDS, target = src))
+ try_to_crowbar(null, user)
+ return TRUE
+ return FALSE
+
+/obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user)
+ if(welded || operating)
+ balloon_alert(user, "opening failed!")
+ return
+
+ if(density)
+ open()
+ else
+ close()
+
+/obj/machinery/door/firedoor/heavy/closed
+ icon_state = "door_closed"
+ density = TRUE
+ alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
+
+/obj/machinery/door/firedoor/solid
+ name = "solid emergency shutter"
+ desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands."
+ icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi'
+ glass = FALSE
+
+/obj/machinery/door/firedoor/solid/closed
+ icon_state = "door_closed"
+ density = TRUE
+ opacity = TRUE
+ alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
+
diff --git a/modular_skyrat/master_files/code/game/machinery/hologram.dm b/modular_nova/master_files/code/game/machinery/hologram.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/machinery/hologram.dm
rename to modular_nova/master_files/code/game/machinery/hologram.dm
diff --git a/modular_skyrat/master_files/code/game/machinery/limbgrower.dm b/modular_nova/master_files/code/game/machinery/limbgrower.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/machinery/limbgrower.dm
rename to modular_nova/master_files/code/game/machinery/limbgrower.dm
diff --git a/modular_skyrat/master_files/code/game/machinery/suit_storage.dm b/modular_nova/master_files/code/game/machinery/suit_storage.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/machinery/suit_storage.dm
rename to modular_nova/master_files/code/game/machinery/suit_storage.dm
diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/humans.dm b/modular_nova/master_files/code/game/objects/effects/decals/cleanable/humans.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/humans.dm
rename to modular_nova/master_files/code/game/objects/effects/decals/cleanable/humans.dm
diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/misc.dm b/modular_nova/master_files/code/game/objects/effects/decals/cleanable/misc.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/effects/decals/cleanable/misc.dm
rename to modular_nova/master_files/code/game/objects/effects/decals/cleanable/misc.dm
diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/remains.dm b/modular_nova/master_files/code/game/objects/effects/decals/remains.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/effects/decals/remains.dm
rename to modular_nova/master_files/code/game/objects/effects/decals/remains.dm
diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/markings.dm b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/markings.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/markings.dm
rename to modular_nova/master_files/code/game/objects/effects/decals/turfdecals/markings.dm
diff --git a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm
similarity index 99%
rename from modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm
rename to modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm
index 4b49d74f431..480f9eaf380 100644
--- a/modular_skyrat/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm
+++ b/modular_nova/master_files/code/game/objects/effects/decals/turfdecals/tilecoloring.dm
@@ -99,4 +99,4 @@
/obj/effect/turf_decal/trimline/red/real_red/filled/shrink_ccw
icon_state = "trimline_shrink_ccw"
-// Skyrat Edit: End
+// NOVA EDIT: End
diff --git a/modular_skyrat/master_files/code/game/objects/items.dm b/modular_nova/master_files/code/game/objects/items.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items.dm
rename to modular_nova/master_files/code/game/objects/items.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/AI_modules.dm b/modular_nova/master_files/code/game/objects/items/AI_modules.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/AI_modules.dm
rename to modular_nova/master_files/code/game/objects/items/AI_modules.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/RCD.dm b/modular_nova/master_files/code/game/objects/items/RCD.dm
similarity index 97%
rename from modular_skyrat/master_files/code/game/objects/items/RCD.dm
rename to modular_nova/master_files/code/game/objects/items/RCD.dm
index 87606cd147e..1eef52a7924 100644
--- a/modular_skyrat/master_files/code/game/objects/items/RCD.dm
+++ b/modular_nova/master_files/code/game/objects/items/RCD.dm
@@ -1,7 +1,7 @@
/obj/item/construction/rcd/arcd/mattermanipulator
name = "matter manipulator"
desc = "A strange, familiar yet distinctly different analogue to the Nanotrasen standard RCD. Works at range, and can deconstruct reinforced walls. Reload using metal, glass, or plasteel."
- icon = 'modular_skyrat/master_files/icons/obj/tools.dmi'
+ icon = 'modular_nova/master_files/icons/obj/tools.dmi'
icon_state = "rcd"
worn_icon_state = "RCD"
ranged = TRUE
diff --git a/modular_nova/master_files/code/game/objects/items/cards_ids.dm b/modular_nova/master_files/code/game/objects/items/cards_ids.dm
new file mode 100644
index 00000000000..53a5ccdcdfb
--- /dev/null
+++ b/modular_nova/master_files/code/game/objects/items/cards_ids.dm
@@ -0,0 +1,25 @@
+// GENERIC
+/obj/item/card/id/advanced/silver/generic
+ name = "generic silver identification card"
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ icon_state = "card_silvergen"
+ assigned_icon_state = null
+
+/obj/item/card/id/advanced/gold/generic
+ name = "generic gold identification card"
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ icon_state = "card_goldgen"
+ assigned_icon_state = null
+
+// DS2
+/obj/item/card/id/advanced/prisoner/ds2
+ name = "syndicate prisoner card"
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ icon_state = "card_ds2prisoner"
+
+// SOLFED
+/obj/item/card/id/advanced/solfed
+ name = "solfed identification card"
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ icon_state = "card_solfed"
+ assigned_icon_state = "assigned_solfed"
diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm b/modular_nova/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm
rename to modular_nova/master_files/code/game/objects/items/devices/anomaly_neutralizer.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/chameleonproj.dm b/modular_nova/master_files/code/game/objects/items/devices/chameleonproj.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/devices/chameleonproj.dm
rename to modular_nova/master_files/code/game/objects/items/devices/chameleonproj.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/laserpointer.dm b/modular_nova/master_files/code/game/objects/items/devices/laserpointer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/devices/laserpointer.dm
rename to modular_nova/master_files/code/game/objects/items/devices/laserpointer.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/mod_link.dm b/modular_nova/master_files/code/game/objects/items/devices/mod_link.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/devices/mod_link.dm
rename to modular_nova/master_files/code/game/objects/items/devices/mod_link.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/devices/traitordevices.dm b/modular_nova/master_files/code/game/objects/items/devices/traitordevices.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/devices/traitordevices.dm
rename to modular_nova/master_files/code/game/objects/items/devices/traitordevices.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/dyekit.dm b/modular_nova/master_files/code/game/objects/items/dyekit.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/dyekit.dm
rename to modular_nova/master_files/code/game/objects/items/dyekit.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm b/modular_nova/master_files/code/game/objects/items/hhmirror.dm
similarity index 97%
rename from modular_skyrat/master_files/code/game/objects/items/hhmirror.dm
rename to modular_nova/master_files/code/game/objects/items/hhmirror.dm
index bc8ef6c0724..70c846c2130 100644
--- a/modular_skyrat/master_files/code/game/objects/items/hhmirror.dm
+++ b/modular_nova/master_files/code/game/objects/items/hhmirror.dm
@@ -1,7 +1,7 @@
/obj/item/hhmirror
name = "handheld mirror"
desc = "A handheld mirror."
- icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirror"
/obj/item/hhmirror/attack_self(mob/user)
@@ -12,7 +12,7 @@
/obj/item/hhmirror/fullmagic
name = "full handheld magic mirror"
desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description.
- icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirrormagic"
var/list/races_blacklist = list(SPECIES_SKELETON, "agent", "angel", SPECIES_ZOMBIE, "clockwork golem servant", SPECIES_MUSHROOM, "memezombie")
var/list/choosable_races = list()
@@ -138,7 +138,7 @@
/obj/item/hhmirror/wracemagic
name = "raceless handheld magic mirror"
desc = "A handheld mirror that allows you to change your... self?" // Later, maybe add a charge to the description.
- icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirrormagic"
var/charges = 4
diff --git a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm b/modular_nova/master_files/code/game/objects/items/holy_weapons.dm
similarity index 94%
rename from modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm
rename to modular_nova/master_files/code/game/objects/items/holy_weapons.dm
index 114114bf09a..2316ab3ff76 100644
--- a/modular_skyrat/master_files/code/game/objects/items/holy_weapons.dm
+++ b/modular_nova/master_files/code/game/objects/items/holy_weapons.dm
@@ -1,6 +1,6 @@
/obj/item/clothing/head/helmet/chaplain/bland
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi'
name = "crusader helmet"
desc = "Helfen, Wehren, Heilen."
icon_state = "knight_generic"
@@ -11,8 +11,8 @@
)
/obj/item/clothing/suit/chaplainsuit/armor/templar/generic
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi'
desc = "Protect the weak and defenceless, live by honor and glory, and fight for the welfare of all!"
icon_state = "knight_generic"
unique_reskin = list(
@@ -116,7 +116,7 @@
/obj/item/nullrod/rosary
name = "prayer beads"
desc = "A set of prayer beads used by many of the more traditional religions in space"
- icon = 'modular_skyrat/modules/chaplain/icons/holy_weapons.dmi'
+ icon = 'modular_nova/modules/chaplain/icons/holy_weapons.dmi'
icon_state = "rosary"
worn_icon_state = "nullrod"
force = 4
diff --git a/modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm b/modular_nova/master_files/code/game/objects/items/oxygen_candle.dm
similarity index 95%
rename from modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm
rename to modular_nova/master_files/code/game/objects/items/oxygen_candle.dm
index 0c846c461b6..3d0fc17d599 100644
--- a/modular_skyrat/master_files/code/game/objects/items/oxygen_candle.dm
+++ b/modular_nova/master_files/code/game/objects/items/oxygen_candle.dm
@@ -3,7 +3,7 @@
/obj/item/oxygen_candle
name = "oxygen candle"
desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side.\nA small label reads 'WARNING: NOT FOR LIGHTING USE. WILL IGNITE FLAMMABLE GASSES' "
- icon = 'modular_skyrat/master_files/icons/obj/oxygen_candle.dmi'
+ icon = 'modular_nova/master_files/icons/obj/oxygen_candle.dmi'
icon_state = "oxycandle"
w_class = WEIGHT_CLASS_SMALL
light_color = LIGHT_COLOR_LAVA // Very warm chemical burn
diff --git a/modular_skyrat/master_files/code/game/objects/items/religion.dm b/modular_nova/master_files/code/game/objects/items/religion.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/religion.dm
rename to modular_nova/master_files/code/game/objects/items/religion.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm b/modular_nova/master_files/code/game/objects/items/scratchingstone.dm
similarity index 86%
rename from modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm
rename to modular_nova/master_files/code/game/objects/items/scratchingstone.dm
index ac1fd624429..f9fc991d697 100644
--- a/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm
+++ b/modular_nova/master_files/code/game/objects/items/scratchingstone.dm
@@ -1,6 +1,6 @@
/obj/item/scratching_stone
name = "scratching stone"
- icon = 'modular_skyrat/master_files/icons/obj/kitchen.dmi'
+ icon = 'modular_nova/master_files/icons/obj/kitchen.dmi'
icon_state = "scratchingstone"
desc = "A specialized kind of whetstone, made of unknown alloys to hone a cyborg mercenary's claws to the best they can be. This one looks like a shitty second-hand sold by razorkids. It's got like, what, maybe one use left?"
force = 5
diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm
rename to modular_nova/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm
diff --git a/modular_nova/master_files/code/game/objects/items/storage/backpack.dm b/modular_nova/master_files/code/game/objects/items/storage/backpack.dm
new file mode 100644
index 00000000000..012b50ae048
--- /dev/null
+++ b/modular_nova/master_files/code/game/objects/items/storage/backpack.dm
@@ -0,0 +1,156 @@
+/obj/item/storage/backpack/satchel/flat/PopulateContents()
+ var/contraband_list = list(
+ /obj/item/storage/belt/utility/syndicate = 1,
+ /obj/item/storage/toolbox/syndicate = 7,
+ /obj/item/card/id/advanced/chameleon = 6,
+ /obj/item/stack/spacecash/c5000 = 3,
+ /obj/item/stack/telecrystal = 2,
+ /obj/item/storage/belt/military = 12,
+ /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 8,
+ /obj/item/storage/box/fireworks/dangerous = 11,
+ /obj/item/clothing/mask/gas/syndicate = 10,
+ /obj/item/vending_refill/donksoft = 13,
+ /obj/item/ammo_box/foambox/riot = 11,
+ /obj/item/soap/syndie = 7,
+ /obj/item/reagent_containers/crackbrick = 5,
+ /obj/item/reagent_containers/crack = 10,
+ /obj/item/reagent_containers/cocaine = 9,
+ /obj/item/reagent_containers/cocainebrick = 4,
+ /obj/item/reagent_containers/hashbrick = 13, //not contraband, but it'll be good padding, and there'll still be a black market for bulk goods
+ /obj/item/reagent_containers/heroin = 8,
+ /obj/item/reagent_containers/heroinbrick = 3,
+ /obj/item/reagent_containers/blacktar = 12,
+ /obj/item/storage/pill_bottle/stimulant = 9, //ephedrine and coffee. Can actually change whether someone gets out of a runaway situation
+ /obj/item/clothing/mask/cigarette/pipe/crackpipe = 15,
+ /obj/item/toy/cards/deck/syndicate = 10, //1tc, not balance breaking, small but premium commodity
+ /obj/item/reagent_containers/cup/bottle/morphine = 8,
+ /obj/item/reagent_containers/syringe/contraband/methamphetamine = 12,
+ /obj/item/clothing/glasses/sunglasses = 5, //can already be achieved in an arguably better form with just some hacking
+ )
+
+ for(var/i in 1 to 3)
+ var/contraband_type = pick_weight(contraband_list)
+ contraband_list -= contraband_type
+ new contraband_type(src)
+
+/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents()
+ new /obj/item/stack/tile/iron/base(src)
+ new /obj/item/crowbar(src)
+
+/*
+ * Messenger Bag Types
+ */
+
+/obj/item/storage/backpack/messenger
+ name = "messenger bag"
+ desc = "A trendy looking messenger bag; sometimes known as a courier bag. Fashionable and portable."
+ icon_state = "messenger"
+ inhand_icon_state = "messenger"
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+
+/obj/item/storage/backpack/messenger/eng
+ name = "industrial messenger bag"
+ desc = "A tough messenger bag made of advanced treated leather for fireproofing. It also has more pockets than usual."
+ icon_state = "messenger_engineering"
+ inhand_icon_state = "messenger_engineering"
+ resistance_flags = FIRE_PROOF
+
+/obj/item/storage/backpack/messenger/med
+ name = "medical messenger bag"
+ desc = "A sterile messenger bag well loved by medics for its portability and sleek profile."
+ icon_state = "messenger_medical"
+ inhand_icon_state = "messenger_medical"
+
+/obj/item/storage/backpack/messenger/vir
+ name = "virologist messenger bag"
+ desc = "A sterile messenger bag with virologist colours, useful for deploying biohazards in record times."
+ icon_state = "messenger_virology"
+ inhand_icon_state = "messenger_virology"
+
+/obj/item/storage/backpack/messenger/chem
+ name = "chemist messenger bag"
+ desc = "A sterile messenger bag with chemist colours, good for getting to your alleyway deals on time."
+ icon_state = "messenger_chemistry"
+ inhand_icon_state = "messenger_chemistry"
+
+/obj/item/storage/backpack/messenger/coroner
+ name = "coroner messenger bag"
+ desc = "A messenger bag used to sneak your way out of graveyards at a good pace."
+ icon_state = "messenger_coroner"
+ inhand_icon_state = "messenger_coroner"
+
+/obj/item/storage/backpack/messenger/gen
+ name = "geneticist messenger bag"
+ desc = "A sterile messenger bag with geneticist colours, making a remarkably cute accessory for hulks."
+ icon_state = "messenger_genetics"
+ inhand_icon_state = "messenger_genetics"
+
+/obj/item/storage/backpack/messenger/science
+ name = "scientist messenger bag"
+ desc = "Useful for holding research materials, and for speeding your way to different scan objectives."
+ icon_state = "messenger_science"
+ inhand_icon_state = "messenger_science"
+
+/obj/item/storage/backpack/messenger/hyd
+ name = "botanist messenger bag"
+ desc = "A messenger bag made of all natural fibers, great for getting to the sesh in time."
+ icon_state = "messenger_hydroponics"
+ inhand_icon_state = "messenger_hydroponics"
+
+/obj/item/storage/backpack/messenger/sec
+ name = "security messenger bag"
+ desc = "A robust messenger bag for security related needs."
+ icon_state = "messenger_security_black"
+ inhand_icon_state = "messenger_security_black"
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Black Variant" = list(
+ RESKIN_ICON_STATE = "messenger_security_black",
+ RESKIN_WORN_ICON_STATE = "messenger_security_black",
+ RESKIN_INHAND_STATE = "messenger_security_black",
+ ),
+ "White Variant" = list(
+ RESKIN_ICON_STATE = "messenger_security_white",
+ RESKIN_WORN_ICON_STATE = "messenger_security_white",
+ RESKIN_INHAND_STATE = "messenger_security_white",
+ ),
+ )
+
+/obj/item/storage/backpack/messenger/explorer
+ name = "explorer messenger bag"
+ desc = "A robust messenger bag for stashing your loot, as well as making a remarkably cute accessory for your drakebone armor."
+ icon_state = "messenger_explorer"
+ inhand_icon_state = "messenger_explorer"
+
+/obj/item/storage/backpack/messenger/cap
+ name = "captain's messenger bag"
+ desc = "An exclusive messenger bag for NanoTrasen officers, made of real whaleleather."
+ icon_state = "messenger_captain"
+ inhand_icon_state = "messenger_captain"
+
+/obj/item/storage/backpack/messenger/head_of_personnel
+ name = "head of personnel's messenger bag"
+ desc = "A exclusive messenger bag issued to Nanotrasen's finest second, with great storage space for all that paperwork you have planned."
+ icon_state = "messenger_hop"
+ inhand_icon_state = "messenger_hop"
+
+/obj/item/storage/backpack/messenger/blueshield
+ name = "blueshield's messenger bag'"
+ desc = "A robust messenger bag issued to Nanotrasen's finest guard dogs, with extra TACTICAL POCKETS. Whatever that even means."
+ icon_state = "messenger_blueshield"
+ inhand_icon_state = "messenger_blueshield"
+
+/obj/item/storage/backpack/messenger/science/robo
+ name = "robotics messenger bag"
+ desc = "A sleek, industrial-strength messenger bag issued to robotics personnel. Smells faintly of oil; a fashionably mobile choice for fashionably sedentary mechanics."
+ icon_state = "messenger_robo"
+ inhand_icon_state = "messenger_robo"
+
+/obj/item/storage/backpack/messenger/clown
+ name = "Giggles von Honkerton Jr."
+ desc = "The latest in storage 'technology' from Honk Co. Hey, how does this fit so much with such a small profile anyway? The wearer will definitely never tell you."
+ icon_state = "messenger_clown"
+ inhand_icon_state = "messenger_clown"
diff --git a/modular_skyrat/master_files/code/game/objects/items/storage/boxes.dm b/modular_nova/master_files/code/game/objects/items/storage/boxes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/storage/boxes.dm
rename to modular_nova/master_files/code/game/objects/items/storage/boxes.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/tools/weldingtool.dm b/modular_nova/master_files/code/game/objects/items/tools/weldingtool.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/tools/weldingtool.dm
rename to modular_nova/master_files/code/game/objects/items/tools/weldingtool.dm
diff --git a/modular_skyrat/master_files/code/game/objects/items/wiki_manuals.dm b/modular_nova/master_files/code/game/objects/items/wiki_manuals.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/items/wiki_manuals.dm
rename to modular_nova/master_files/code/game/objects/items/wiki_manuals.dm
diff --git a/modular_skyrat/master_files/code/game/objects/objs.dm b/modular_nova/master_files/code/game/objects/objs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/objs.dm
rename to modular_nova/master_files/code/game/objects/objs.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm b/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm
rename to modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/cargo.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/security.dm b/modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/security.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/crates_lockers/secure/security.dm
rename to modular_nova/master_files/code/game/objects/structures/crates_lockers/secure/security.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/mannequin.dm b/modular_nova/master_files/code/game/objects/structures/mannequin.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/mannequin.dm
rename to modular_nova/master_files/code/game/objects/structures/mannequin.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/mirror.dm b/modular_nova/master_files/code/game/objects/structures/mirror.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/mirror.dm
rename to modular_nova/master_files/code/game/objects/structures/mirror.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/railings.dm b/modular_nova/master_files/code/game/objects/structures/railings.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/railings.dm
rename to modular_nova/master_files/code/game/objects/structures/railings.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm b/modular_nova/master_files/code/game/objects/structures/sauna_oven.dm
similarity index 98%
rename from modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm
rename to modular_nova/master_files/code/game/objects/structures/sauna_oven.dm
index 709a391355c..6b98610041c 100644
--- a/modular_skyrat/master_files/code/game/objects/structures/sauna_oven.dm
+++ b/modular_nova/master_files/code/game/objects/structures/sauna_oven.dm
@@ -7,7 +7,7 @@
/obj/structure/sauna_oven
name = "sauna oven"
desc = "A modest sauna oven with rocks. Add some fuel, pour some water and enjoy the moment."
- icon = 'modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi'
+ icon = 'modular_nova/master_files/icons/obj/structures/sauna_oven.dmi'
icon_state = "sauna_oven"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/master_files/code/game/objects/structures/tables_racks.dm b/modular_nova/master_files/code/game/objects/structures/tables_racks.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/tables_racks.dm
rename to modular_nova/master_files/code/game/objects/structures/tables_racks.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm b/modular_nova/master_files/code/game/objects/structures/towel_bins.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm
rename to modular_nova/master_files/code/game/objects/structures/towel_bins.dm
diff --git a/modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm b/modular_nova/master_files/code/game/objects/structures/trash_pile.dm
similarity index 98%
rename from modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm
rename to modular_nova/master_files/code/game/objects/structures/trash_pile.dm
index 3232ba6acc4..73c09c1e76d 100644
--- a/modular_skyrat/master_files/code/game/objects/structures/trash_pile.dm
+++ b/modular_nova/master_files/code/game/objects/structures/trash_pile.dm
@@ -1,7 +1,7 @@
/obj/structure/trash_pile
name = "trash pile"
desc = "A heap of garbage, but maybe there's something interesting inside?"
- icon = 'modular_skyrat/master_files/icons/obj/trash_piles.dmi'
+ icon = 'modular_nova/master_files/icons/obj/trash_piles.dmi'
icon_state = "randompile"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/master_files/code/game/objects/structures/watercloset.dm b/modular_nova/master_files/code/game/objects/structures/watercloset.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/objects/structures/watercloset.dm
rename to modular_nova/master_files/code/game/objects/structures/watercloset.dm
diff --git a/modular_nova/master_files/code/game/sound.dm b/modular_nova/master_files/code/game/sound.dm
new file mode 100644
index 00000000000..24bfca732d8
--- /dev/null
+++ b/modular_nova/master_files/code/game/sound.dm
@@ -0,0 +1,214 @@
+/proc/get_sfx_skyrat(soundin)
+ if(istext(soundin))
+ switch(soundin)
+ if(SFX_KEYBOARD)
+ soundin = pick(
+ 'modular_nova/modules/aesthetics/computer/sound/keypress1.ogg',
+ 'modular_nova/modules/aesthetics/computer/sound/keypress2.ogg',
+ 'modular_nova/modules/aesthetics/computer/sound/keypress3.ogg',
+ 'modular_nova/modules/aesthetics/computer/sound/keypress4.ogg',
+ 'modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg',
+ )
+ if(SFX_BULLET_IMPACT_METAL) // This is the one that will be used most, it is extensive.
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg',
+ )
+ if(SFX_BULLET_IMPACT_FLESH)
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg',
+ )
+ if(SFX_BULLET_IMPACT_ICE)
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg',
+ )
+ if(SFX_BULLET_IMPACT_WOOD)
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg',
+ )
+ if(SFX_BULLET_IMPACT_CONCRETE)
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg',
+ )
+ if(SFX_BULLET_IMPACT_GLASS)
+ soundin = pick(
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg',
+ 'modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg',
+ )
+ if("punch")
+ soundin = pick('modular_nova/master_files/sound/weapons/punch1.ogg', 'modular_nova/master_files/sound/weapons/punch3.ogg')
+ if ("explosion")
+ soundin = pick(
+ 'modular_nova/modules/black_mesa/sound/explosions/explode1.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode2.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode3.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode4.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode5.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode6.ogg',
+ 'modular_nova/modules/black_mesa/sound/explosions/explode7.ogg',
+ )
+ return soundin
+
+// This is an atom level variable to prevent extensive typechecking for impacts.
+/atom
+ // The sound we make if hit.
+ var/impact_sound = SFX_BULLET_IMPACT_METAL
+
+
+// TURFS
+/turf/closed/wall/ice
+ impact_sound = SFX_BULLET_IMPACT_ICE
+
+/turf/closed/wall/mineral/snow
+ impact_sound = SFX_BULLET_IMPACT_ICE
+
+/turf/closed/wall/mineral/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/turf/closed/wall/mineral/bamboo
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/turf/closed/wall/mineral/sandstone
+ impact_sound = SFX_BULLET_IMPACT_CONCRETE
+
+/turf/closed/wall/vault/rock
+ impact_sound = SFX_BULLET_IMPACT_CONCRETE
+
+/turf/closed/wall/vault/sandstone
+ impact_sound = SFX_BULLET_IMPACT_CONCRETE
+
+/turf/closed/wall/rock
+ impact_sound = SFX_BULLET_IMPACT_CONCRETE
+
+/turf/closed/wall/mineral/diamond
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/turf/closed/wall/mineral/plasma
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+// MOBS
+/mob/living
+ impact_sound = SFX_BULLET_IMPACT_FLESH
+
+// STRUCTURES
+/obj/structure/window
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/glass
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/reinforced/rglass
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/reinforced/plasmarglass
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/reinforced/plastitaniumglass
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/reinforced/titaniumglass
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/structure/table/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/barricade/wooden
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/chair/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/closet/crate/wooden
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/door_assembly/door_assembly_wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/falsewall/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/table_frame/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/deployable_barricade/wooden
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/structure/statue/snow
+ impact_sound = SFX_BULLET_IMPACT_ICE
+
+/obj/structure/deployable_barricade/snow
+ impact_sound = SFX_BULLET_IMPACT_ICE
+
+
+
+// MACHINERY
+/obj/machinery/door/window
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/machinery/computer
+ impact_sound = SFX_BULLET_IMPACT_GLASS
+
+/obj/machinery/door/airlock/wood
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
+/obj/machinery/computer/security/wooden_tv
+ impact_sound = SFX_BULLET_IMPACT_WOOD
+
diff --git a/modular_skyrat/master_files/code/game/turfs/closed/_closed.dm b/modular_nova/master_files/code/game/turfs/closed/_closed.dm
similarity index 80%
rename from modular_skyrat/master_files/code/game/turfs/closed/_closed.dm
rename to modular_nova/master_files/code/game/turfs/closed/_closed.dm
index 74e431b00a7..0bca07fcbab 100644
--- a/modular_skyrat/master_files/code/game/turfs/closed/_closed.dm
+++ b/modular_nova/master_files/code/game/turfs/closed/_closed.dm
@@ -1,5 +1,5 @@
/turf/closed/indestructible/steel
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi'
+ icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
smoothing_flags = SMOOTH_BITMASK
diff --git a/modular_skyrat/master_files/code/game/turfs/open/floor/iron_floor.dm b/modular_nova/master_files/code/game/turfs/open/floor/iron_floor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/turfs/open/floor/iron_floor.dm
rename to modular_nova/master_files/code/game/turfs/open/floor/iron_floor.dm
diff --git a/modular_skyrat/master_files/code/game/turfs/open/space/space.dm b/modular_nova/master_files/code/game/turfs/open/space/space.dm
similarity index 100%
rename from modular_skyrat/master_files/code/game/turfs/open/space/space.dm
rename to modular_nova/master_files/code/game/turfs/open/space/space.dm
diff --git a/modular_skyrat/master_files/code/modules/admin/admin.dm b/modular_nova/master_files/code/modules/admin/admin.dm
similarity index 95%
rename from modular_skyrat/master_files/code/modules/admin/admin.dm
rename to modular_nova/master_files/code/modules/admin/admin.dm
index 86f86bc7e12..951f3a87839 100644
--- a/modular_skyrat/master_files/code/modules/admin/admin.dm
+++ b/modular_nova/master_files/code/modules/admin/admin.dm
@@ -31,8 +31,8 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE)
/datum/admin_help/ClosureLinks(ref_src)
. = ..()
- . += " (HANDLE )" //SKYRAT EDIT ADDITION
- . += " (PING MUTE )" //SKYRAT EDIT ADDITION
+ . += " (HANDLE )" //NOVA EDIT ADDITION
+ . += " (PING MUTE )" //NOVA EDIT ADDITION
. += " (MHELP )"
//Let the initiator know their ahelp is being handled
@@ -66,12 +66,12 @@ GLOBAL_VAR_INIT(dchat_allowed, TRUE)
/datum/admin_help/proc/convert_to_mentorhelp(key_name = key_name_admin(usr))
if(state != AHELP_ACTIVE)
return FALSE
-
+
if(handler && handler != usr.ckey)
var/response = tgui_alert(usr, "This ticket is already being handled by [handler]. Do you want to continue?", "Ticket already assigned", list("Yes", "No"))
if(!response || response == "No")
return FALSE
-
+
add_verb(initiator, /client/verb/mentorhelp) // Way to override mentorhelp cooldown.
to_chat(initiator, span_adminhelp("Your ticket was converted to Mentorhelp"))
diff --git a/modular_skyrat/master_files/code/modules/antagonists/_common/antag_datum.dm b/modular_nova/master_files/code/modules/antagonists/_common/antag_datum.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/_common/antag_datum.dm
rename to modular_nova/master_files/code/modules/antagonists/_common/antag_datum.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/ashwalker/ashwalker.dm b/modular_nova/master_files/code/modules/antagonists/ashwalker/ashwalker.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/ashwalker/ashwalker.dm
rename to modular_nova/master_files/code/modules/antagonists/ashwalker/ashwalker.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm b/modular_nova/master_files/code/modules/antagonists/changeling/changeling.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/changeling/changeling.dm
rename to modular_nova/master_files/code/modules/antagonists/changeling/changeling.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm b/modular_nova/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm
rename to modular_nova/master_files/code/modules/antagonists/changeling/powers/tiny_prick.dm
diff --git a/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm b/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm
new file mode 100644
index 00000000000..64e46455e03
--- /dev/null
+++ b/modular_nova/master_files/code/modules/antagonists/cult/cult_items.dm
@@ -0,0 +1,2 @@
+/obj/item/clothing/suit/hooded/cultrobes
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi'
diff --git a/modular_skyrat/master_files/code/modules/antagonists/ert/ert.dm b/modular_nova/master_files/code/modules/antagonists/ert/ert.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/ert/ert.dm
rename to modular_nova/master_files/code/modules/antagonists/ert/ert.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_outfits.dm b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_outfits.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_outfits.dm
rename to modular_nova/master_files/code/modules/antagonists/pirate/pirate_outfits.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
rename to modular_nova/master_files/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm b/modular_nova/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm
rename to modular_nova/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm
diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm b/modular_nova/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm
rename to modular_nova/master_files/code/modules/antagonists/traitor/objectives/smuggling.dm
diff --git a/modular_skyrat/master_files/code/modules/assembly/flash.dm b/modular_nova/master_files/code/modules/assembly/flash.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/assembly/flash.dm
rename to modular_nova/master_files/code/modules/assembly/flash.dm
diff --git a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm b/modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm
similarity index 88%
rename from modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm
rename to modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm
index 5e04d6c1401..0665b4b14a2 100644
--- a/modular_skyrat/master_files/code/modules/asset_cache/assets/plumbing.dm
+++ b/modular_nova/master_files/code/modules/asset_cache/assets/plumbing.dm
@@ -4,7 +4,7 @@
//load only what we need from the icon files,format is icon_file_name = list of icon_states we need from this file
var/list/essentials = list(
- 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi' = list(
+ 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi' = list(
"drain",
"active_input",
"active_output",
diff --git a/modular_skyrat/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm b/modular_nova/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm
rename to modular_nova/master_files/code/modules/atmospherics/machinery/pipes/pipes.dm
diff --git a/modular_skyrat/master_files/code/modules/bitrunning/orders/disks.dm b/modular_nova/master_files/code/modules/bitrunning/orders/disks.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/bitrunning/orders/disks.dm
rename to modular_nova/master_files/code/modules/bitrunning/orders/disks.dm
diff --git a/modular_skyrat/master_files/code/modules/bitrunning/orders/tech.dm b/modular_nova/master_files/code/modules/bitrunning/orders/tech.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/bitrunning/orders/tech.dm
rename to modular_nova/master_files/code/modules/bitrunning/orders/tech.dm
diff --git a/modular_nova/master_files/code/modules/buildmode/bm_mode.dm b/modular_nova/master_files/code/modules/buildmode/bm_mode.dm
new file mode 100644
index 00000000000..534bb9cd057
--- /dev/null
+++ b/modular_nova/master_files/code/modules/buildmode/bm_mode.dm
@@ -0,0 +1,4 @@
+/datum/buildmode_mode
+ ///this variable serves to separate icons due to modularity. The default path to button icons is /tg/.
+ // skyrat path - 'modular_nova/master_files/icons/misc/buildmode.dmi'
+ var/button_icon = 'icons/misc/buildmode.dmi'
diff --git a/modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm b/modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm
similarity index 84%
rename from modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm
rename to modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm
index 2e68e2c2c2a..93c81f425c7 100644
--- a/modular_skyrat/master_files/code/modules/buildmode/submodes/offercontrol.dm
+++ b/modular_nova/master_files/code/modules/buildmode/submodes/offercontrol.dm
@@ -1,6 +1,6 @@
/datum/buildmode_mode/offercontrol
key = "offercontrol"
- button_icon = 'modular_skyrat/master_files/icons/misc/buildmode.dmi' // if you are making a modular build mode, use this icon path.
+ button_icon = 'modular_nova/master_files/icons/misc/buildmode.dmi' // if you are making a modular build mode, use this icon path.
/datum/buildmode_mode/offercontrol/show_help(client/target_client)
to_chat(target_client, span_notice("***********************************************************\n\
diff --git a/modular_skyrat/master_files/code/modules/cargo/bounties/medical.dm b/modular_nova/master_files/code/modules/cargo/bounties/medical.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/bounties/medical.dm
rename to modular_nova/master_files/code/modules/cargo/bounties/medical.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/exports/tools.dm b/modular_nova/master_files/code/modules/cargo/exports/tools.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/exports/tools.dm
rename to modular_nova/master_files/code/modules/cargo/exports/tools.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/exports/traitor.dm b/modular_nova/master_files/code/modules/cargo/exports/traitor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/exports/traitor.dm
rename to modular_nova/master_files/code/modules/cargo/exports/traitor.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/goodies.dm b/modular_nova/master_files/code/modules/cargo/goodies.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/goodies.dm
rename to modular_nova/master_files/code/modules/cargo/goodies.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/markets/market_items/weapons.dm b/modular_nova/master_files/code/modules/cargo/markets/market_items/weapons.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/markets/market_items/weapons.dm
rename to modular_nova/master_files/code/modules/cargo/markets/market_items/weapons.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/orderconsole.dm b/modular_nova/master_files/code/modules/cargo/orderconsole.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/orderconsole.dm
rename to modular_nova/master_files/code/modules/cargo/orderconsole.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/general.dm b/modular_nova/master_files/code/modules/cargo/packs/general.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/packs/general.dm
rename to modular_nova/master_files/code/modules/cargo/packs/general.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/security.dm b/modular_nova/master_files/code/modules/cargo/packs/security.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/packs/security.dm
rename to modular_nova/master_files/code/modules/cargo/packs/security.dm
diff --git a/modular_skyrat/master_files/code/modules/cargo/packs/service.dm b/modular_nova/master_files/code/modules/cargo/packs/service.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/cargo/packs/service.dm
rename to modular_nova/master_files/code/modules/cargo/packs/service.dm
diff --git a/modular_skyrat/master_files/code/modules/client/playtime.dm b/modular_nova/master_files/code/modules/client/playtime.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/playtime.dm
rename to modular_nova/master_files/code/modules/client/playtime.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences.dm b/modular_nova/master_files/code/modules/client/preferences.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences.dm
rename to modular_nova/master_files/code/modules/client/preferences.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/_admin.dm b/modular_nova/master_files/code/modules/client/preferences/_admin.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/_admin.dm
rename to modular_nova/master_files/code/modules/client/preferences/_admin.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/_preference.dm b/modular_nova/master_files/code/modules/client/preferences/_preference.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/_preference.dm
rename to modular_nova/master_files/code/modules/client/preferences/_preference.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/auto_dementor.dm b/modular_nova/master_files/code/modules/client/preferences/auto_dementor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/auto_dementor.dm
rename to modular_nova/master_files/code/modules/client/preferences/auto_dementor.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/be_antag.dm b/modular_nova/master_files/code/modules/client/preferences/be_antag.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/be_antag.dm
rename to modular_nova/master_files/code/modules/client/preferences/be_antag.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/body_size.dm b/modular_nova/master_files/code/modules/client/preferences/body_size.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/body_size.dm
rename to modular_nova/master_files/code/modules/client/preferences/body_size.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm b/modular_nova/master_files/code/modules/client/preferences/brain.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/brain.dm
rename to modular_nova/master_files/code/modules/client/preferences/brain.dm
diff --git a/modular_nova/master_files/code/modules/client/preferences/clothing.dm b/modular_nova/master_files/code/modules/client/preferences/clothing.dm
new file mode 100644
index 00000000000..7da9a8ab77c
--- /dev/null
+++ b/modular_nova/master_files/code/modules/client/preferences/clothing.dm
@@ -0,0 +1,84 @@
+/datum/preference/choiced/socks/compile_constant_data()
+ var/list/data = ..()
+
+ data[SUPPLEMENTAL_FEATURE_KEY] = "socks_color"
+
+ return data
+
+/datum/preference/choiced/socks/is_accessible(datum/preferences/preferences)
+ if (!..(preferences))
+ return FALSE
+
+ var/species_type = preferences.read_preference(/datum/preference/choiced/species)
+ var/datum/species/species = new species_type
+ return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
+
+/datum/preference/choiced/undershirt/compile_constant_data()
+ var/list/data = ..()
+
+ data[SUPPLEMENTAL_FEATURE_KEY] = "undershirt_color"
+
+ return data
+
+/datum/preference/choiced/undershirt/is_accessible(datum/preferences/preferences)
+ if (!..(preferences))
+ return FALSE
+
+ var/species_type = preferences.read_preference(/datum/preference/choiced/species)
+ var/datum/species/species = new species_type
+ return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
+
+/datum/preference/choiced/underwear/is_accessible(datum/preferences/preferences)
+ if (!..(preferences))
+ return FALSE
+
+ var/species_type = preferences.read_preference(/datum/preference/choiced/species)
+ var/datum/species/species = new species_type
+ return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
+
+/datum/preference/choiced/bra
+ savefile_key = "bra"
+ savefile_identifier = PREFERENCE_CHARACTER
+ main_feature_name = "Bra"
+ category = PREFERENCE_CATEGORY_CLOTHING
+ should_generate_icons = TRUE
+
+/datum/preference/choiced/bra/init_possible_values()
+ return assoc_to_keys_features(GLOB.bra_list)
+
+/datum/preference/choiced/bra/icon_for(value)
+ var/static/icon/body
+ if (isnull(body))
+ body = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm")
+ body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY)
+ body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY)
+ body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY)
+ body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
+
+ var/icon/icon_with_bra = icon(body)
+
+ if (value != "Nude")
+ var/datum/sprite_accessory/accessory = GLOB.bra_list[value]
+ icon_with_bra.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY)
+
+ icon_with_bra.Crop(10, 11, 22, 23) // NOVA EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
+ icon_with_bra.Scale(32, 32)
+ return icon_with_bra
+
+/datum/preference/choiced/bra/apply_to_human(mob/living/carbon/human/target, value)
+ target.bra = value
+
+/datum/preference/choiced/bra/compile_constant_data()
+ var/list/data = ..()
+
+ data[SUPPLEMENTAL_FEATURE_KEY] = "bra_color"
+
+ return data
+
+/datum/preference/choiced/bra/is_accessible(datum/preferences/preferences)
+ if (!..(preferences))
+ return FALSE
+
+ var/species_type = preferences.read_preference(/datum/preference/choiced/species)
+ var/datum/species/species = new species_type
+ return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/delete_sparks.dm b/modular_nova/master_files/code/modules/client/preferences/delete_sparks.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/delete_sparks.dm
rename to modular_nova/master_files/code/modules/client/preferences/delete_sparks.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/emote_overlay.dm b/modular_nova/master_files/code/modules/client/preferences/emote_overlay.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/emote_overlay.dm
rename to modular_nova/master_files/code/modules/client/preferences/emote_overlay.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/emote_panel.dm b/modular_nova/master_files/code/modules/client/preferences/emote_panel.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/emote_panel.dm
rename to modular_nova/master_files/code/modules/client/preferences/emote_panel.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm b/modular_nova/master_files/code/modules/client/preferences/erp_preferences.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/erp_preferences.dm
rename to modular_nova/master_files/code/modules/client/preferences/erp_preferences.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm b/modular_nova/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm
rename to modular_nova/master_files/code/modules/client/preferences/face_cursor_combat_mode.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm b/modular_nova/master_files/code/modules/client/preferences/flavor_text.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/flavor_text.dm
rename to modular_nova/master_files/code/modules/client/preferences/flavor_text.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/genitals.dm b/modular_nova/master_files/code/modules/client/preferences/genitals.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/genitals.dm
rename to modular_nova/master_files/code/modules/client/preferences/genitals.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/ghost.dm b/modular_nova/master_files/code/modules/client/preferences/ghost.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/ghost.dm
rename to modular_nova/master_files/code/modules/client/preferences/ghost.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm b/modular_nova/master_files/code/modules/client/preferences/headshot.dm
similarity index 89%
rename from modular_skyrat/master_files/code/modules/client/preferences/headshot.dm
rename to modular_nova/master_files/code/modules/client/preferences/headshot.dm
index 44351be0fcf..58992869073 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/headshot.dm
+++ b/modular_nova/master_files/code/modules/client/preferences/headshot.dm
@@ -47,10 +47,3 @@
stored_link[usr?.ckey] = value
usr?.client?.prefs.headshot = value
return TRUE
-
-/datum/preference/text/headshot/is_accessible(datum/preferences/preferences)
- if(isnull(usr)) // Joining at roundstart
- return ..()
- if(!SSplayer_ranks.is_veteran(usr?.client) && !GLOB.donator_list[usr?.ckey] && !is_admin(usr?.client))
- return FALSE
- return ..()
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/laugh.dm b/modular_nova/master_files/code/modules/client/preferences/laugh.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/laugh.dm
rename to modular_nova/master_files/code/modules/client/preferences/laugh.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/loadout_override_preference.dm b/modular_nova/master_files/code/modules/client/preferences/loadout_override_preference.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/loadout_override_preference.dm
rename to modular_nova/master_files/code/modules/client/preferences/loadout_override_preference.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/looc.dm b/modular_nova/master_files/code/modules/client/preferences/looc.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/looc.dm
rename to modular_nova/master_files/code/modules/client/preferences/looc.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/languages.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm
rename to modular_nova/master_files/code/modules/client/preferences/middleware/languages.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
rename to modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm
rename to modular_nova/master_files/code/modules/client/preferences/middleware/species_additional_changes.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm b/modular_nova/master_files/code/modules/client/preferences/mutant_parts.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/mutant_parts.dm
rename to modular_nova/master_files/code/modules/client/preferences/mutant_parts.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm b/modular_nova/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm
rename to modular_nova/master_files/code/modules/client/preferences/out_of_combat_fov_darkness.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/quirks/death_consequences.dm b/modular_nova/master_files/code/modules/client/preferences/quirks/death_consequences.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/quirks/death_consequences.dm
rename to modular_nova/master_files/code/modules/client/preferences/quirks/death_consequences.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/scream.dm b/modular_nova/master_files/code/modules/client/preferences/scream.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/scream.dm
rename to modular_nova/master_files/code/modules/client/preferences/scream.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm b/modular_nova/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm
rename to modular_nova/master_files/code/modules/client/preferences/species_features/digitigrade_legs.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm b/modular_nova/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm
rename to modular_nova/master_files/code/modules/client/preferences/species_features/generate_side_shots.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/tgui_prefs_migration.dm b/modular_nova/master_files/code/modules/client/preferences/tgui_prefs_migration.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/tgui_prefs_migration.dm
rename to modular_nova/master_files/code/modules/client/preferences/tgui_prefs_migration.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm b/modular_nova/master_files/code/modules/client/preferences/underwear_color.dm
similarity index 93%
rename from modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm
rename to modular_nova/master_files/code/modules/client/preferences/underwear_color.dm
index f7e5a86d5ea..1900acec170 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/underwear_color.dm
+++ b/modular_nova/master_files/code/modules/client/preferences/underwear_color.dm
@@ -1,4 +1,4 @@
-// THIS FILE HAS BEEN EDITED BY SKYRAT EDIT
+// THIS FILE HAS BEEN EDITED BY NOVA EDIT
/datum/preference/color/underwear_color
savefile_key = "underwear_color"
@@ -16,7 +16,7 @@
var/datum/species/species = new species_type
return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
-// SKYRAT EDIT ADDITION BEGIN - Colorable Undershirt/Socks
+// NOVA EDIT ADDITION BEGIN - Colorable Undershirt/Socks
/datum/preference/color/undershirt_color
savefile_key = "undershirt_color"
savefile_identifier = PREFERENCE_CHARACTER
@@ -48,7 +48,7 @@
var/species_type = preferences.read_preference(/datum/preference/choiced/species)
var/datum/species/species = new species_type
return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
-// SKYRAT EDIT ADDITION END - Colorable Undershirt/Socks
+// NOVA EDIT ADDITION END - Colorable Undershirt/Socks
/datum/preference/color/bra_color
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/voice.dm b/modular_nova/master_files/code/modules/client/preferences/voice.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences/voice.dm
rename to modular_nova/master_files/code/modules/client/preferences/voice.dm
diff --git a/modular_skyrat/master_files/code/modules/client/preferences_savefile.dm b/modular_nova/master_files/code/modules/client/preferences_savefile.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/client/preferences_savefile.dm
rename to modular_nova/master_files/code/modules/client/preferences_savefile.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/anthro_clothes.dm b/modular_nova/master_files/code/modules/clothing/anthro_clothes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/anthro_clothes.dm
rename to modular_nova/master_files/code/modules/clothing/anthro_clothes.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm
similarity index 95%
rename from modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm
rename to modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm
index ebad5b1ea19..a75b6c1b5c8 100644
--- a/modular_skyrat/master_files/code/modules/clothing/back/antigravityharness.dm
+++ b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm
@@ -7,15 +7,15 @@
#define EXTRAGRAVITY_STATE "gravityharness-extra"
/obj/item/gravity_harness
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
name = "gravity suspension harness"
desc = "A bootleg derivative of common Skrellian construction equipment, manufactured and heavily used by Deep Spacer tribes, this harness employs suspensor tech to either nullify or magnify gravity around the wearer."
slot_flags = ITEM_SLOT_BACK
icon_state = "gravityharness-off"
worn_icon_state = "gravityharness-off"
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi'
actions_types = list(/datum/action/item_action/toggle_mode)
w_class = WEIGHT_CLASS_HUGE
/// The current operating mode
@@ -122,7 +122,7 @@
new /obj/effect/temp_visual/mook_dust/robot(get_turf(src))
ADD_TRAIT(user, TRAIT_NEGATES_GRAVITY, CLOTHING_TRAIT)
- playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25)
+ playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25)
to_chat(user, span_notice("[src] shudders and hisses, projecting a local extra-gravity field."))
gravity_on = TRUE
icon_state = EXTRAGRAVITY_STATE
@@ -131,7 +131,7 @@
if(MODE_GRAVOFF)
if(!user.has_gravity() && mode != MODE_GRAVOFF)
new /obj/effect/temp_visual/mook_dust/robot(get_turf(src))
- playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25)
+ playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25)
to_chat(user, span_notice("[src] lets out a soft whine as your suspension field dissipates, gravity around you normalizing."))
mode = MODE_GRAVOFF
diff --git a/modular_skyrat/master_files/code/modules/clothing/base_clothes.dm b/modular_nova/master_files/code/modules/clothing/base_clothes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/base_clothes.dm
rename to modular_nova/master_files/code/modules/clothing/base_clothes.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/chameleon.dm b/modular_nova/master_files/code/modules/clothing/chameleon.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/chameleon.dm
rename to modular_nova/master_files/code/modules/clothing/chameleon.dm
diff --git a/modular_nova/master_files/code/modules/clothing/clothing.dm b/modular_nova/master_files/code/modules/clothing/clothing.dm
new file mode 100644
index 00000000000..bc547fa3b3d
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/clothing.dm
@@ -0,0 +1,62 @@
+GLOBAL_LIST_EMPTY(taur_clothing_icons)
+
+/obj/item/clothing
+ blocks_emissive = EMISSIVE_BLOCK_UNIQUE
+ /// For clothing that does not have body_parts_covered = CHEST /etc but that we would still like to be able to attach an accessory to
+ var/attachment_slot_override = NONE
+
+/obj/item/clothing/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
+ if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:(
+ return
+
+ return ..()
+
+/**
+ * Proc to generate a taur variation of clothes, with the intent of caching them.
+ * It is meant for suits and uniforms at the moment, to cut out the bottom half so that
+ * it doesn't look too out of place.
+ *
+ * Arguments:
+ * * index - The index at which the icon will be stored. Overwrites existing icons if there was one,
+ * do your checks before calling this proc.
+ * * icon_to_process (/icon) - The icon we want to run through the process of masking off the bottom part of.
+ * * icon_state - The icon_state of the icon we're being given, to obtain a proper icon object.
+ *
+ * Add a `taur_type` here if you ever want to add different cropping options, for whatever reason.
+ */
+/proc/generate_taur_clothing(index, icon/icon_to_process, icon_state)
+ var/icon/taur_clothing_icon = icon("icon" = icon_to_process, "icon_state" = icon_state)
+ var/taur_icon_state = "taur" // Leaving this here in case we ever want to have different ones
+ var/icon/taur_cropping_mask = icon("icon" = 'modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi', "icon_state" = taur_icon_state)
+ taur_clothing_icon.Blend(taur_cropping_mask, ICON_MULTIPLY)
+ taur_clothing_icon = fcopy_rsc(taur_clothing_icon)
+ GLOB.taur_clothing_icons[index] = taur_clothing_icon
+
+/**
+ * Proc that handles returning a mutable appearance that can fit on a taur body without looking too janky!
+ *
+ * It will check the cache to see if there was already an icon created for the taur version of that item,
+ * and will generate one if there was none, and will return the proper icon straight from `GLOB.taur_clothing_icons`,
+ * to avoid expensive icon operations.
+ *
+ * Arguments:
+ * * icon_state - The icon state that was used to create the icon that will now be processed.
+ * Used to store the taur icon in the cache.
+ * * icon_to_process (/icon) - The icon that we want to process. Do note that this is already
+ * an icon, and NOT an icon file, because we want to be able to operate on icons that have been
+ * modified to fit female bodytypes, for instance.
+ * * layer - The layer we want the mutable appearance to be on.
+ * * female_type - The `female_flags` of the clothing item used to generate the icon that
+ * we're operating on, if appropriate, to allow the caching of female-fitted uniforms.
+ * * greyscale_colors - The colors of the icon if it was a greyscale one, to make this GAGS-compatible.
+ *
+ * Returns a taur-compatible mutable_appearance!
+ */
+/proc/wear_taur_version(icon_state, icon/icon_to_process, layer, female_type, greyscale_colors)
+ RETURN_TYPE(/mutable_appearance)
+
+ var/index = "[icon_state]-[greyscale_colors]-[female_type]"
+ var/icon/taur_clothing_icon = GLOB.taur_clothing_icons[index]
+ if(!taur_clothing_icon) //Create standing/laying icons if they don't exist
+ generate_taur_clothing(index, icon_to_process, icon_state)
+ return mutable_appearance(GLOB.taur_clothing_icons[index], layer = -layer)
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/eyes.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/head.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/head.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/head.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/head.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/mask.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/shoes.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/suit.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/under.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/clothing_variation_overrides/under.dm
rename to modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/glasses/_glasses.dm b/modular_nova/master_files/code/modules/clothing/glasses/_glasses.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/glasses/_glasses.dm
rename to modular_nova/master_files/code/modules/clothing/glasses/_glasses.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm b/modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm
similarity index 84%
rename from modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm
rename to modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm
index 757e9f6cac4..13b22546e25 100644
--- a/modular_skyrat/master_files/code/modules/clothing/glasses/nerve_staple.dm
+++ b/modular_nova/master_files/code/modules/clothing/glasses/nerve_staple.dm
@@ -1,9 +1,9 @@
/obj/item/clothing/glasses/nerve_staple
name = "\proper a nerve staple"
desc = "A horrific looking device that is stapled into your face"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
icon_state = "nerve_staple"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
worn_icon_state = "nerve_staple"
resistance_flags = FIRE_PROOF | ACID_PROOF
clothing_traits = list(TRAIT_PACIFISM)
diff --git a/modular_skyrat/master_files/code/modules/clothing/head/_head.dm b/modular_nova/master_files/code/modules/clothing/head/_head.dm
similarity index 85%
rename from modular_skyrat/master_files/code/modules/clothing/head/_head.dm
rename to modular_nova/master_files/code/modules/clothing/head/_head.dm
index 0c861e4c5db..6b25cd4be98 100644
--- a/modular_skyrat/master_files/code/modules/clothing/head/_head.dm
+++ b/modular_nova/master_files/code/modules/clothing/head/_head.dm
@@ -31,23 +31,23 @@
UnregisterSignal(user, COMSIG_CARBON_UNEQUIP_HAT)
/obj/item/clothing/head/bio_hood
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi'
/obj/item/clothing/head/helmet
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi'
/obj/item/clothing/head/helmet/toggleable/riot
flags_inv = HIDEEARS|HIDEFACE //Removes HIDESNOUT so that transparent helmets still show the snout
/obj/item/clothing/head/helmet/space
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR //Removes HIDESNOUT so that transparent helmets still show the snout
/obj/item/clothing/head/helmet/chaplain
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi'
/obj/item/clothing/head/collectable/welding
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
supports_variations_flags = CLOTHING_SNOUTED_VARIATION
//Re-adds HIDESNOUT to whatever needs it, and marks them CLOTHING_NO_VARIATION so they don't look for muzzled sprites
diff --git a/modular_nova/master_files/code/modules/clothing/head/akula_official.dm b/modular_nova/master_files/code/modules/clothing/head/akula_official.dm
new file mode 100644
index 00000000000..73f59e716c7
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/head/akula_official.dm
@@ -0,0 +1,20 @@
+/obj/item/clothing/head/hats/caphat/azulean
+ icon_state = "oldbloodcap"
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi'
+
+/obj/item/clothing/head/hats/caphat/azulean/old_blood
+ name = "\improper Oldblood's royal cap"
+ desc = "A peaked cap typically seen on nobles and high-rankers of the Agurkrral Royal Navy, this service hat has a long history in the Old Principalities. \
+ Comfortable and lightweight, the purpose of this cap has gradually shifted to becoming yet another method to flex rank. \n\n\
+ Threaded gold is often seen in the campaign cords attached to it, and the emblems on them grow more and more complex based on ranking; \
+ and of course, importance to the King."
+ icon_state = "oldbloodcap"
+
+/obj/item/clothing/head/hats/caphat/azulean/upstart
+ name = "\improper Upstart's noble cap"
+ desc = "A peaked cap widely seen across the New Principalities. \n\
+ Combining ideas from both the NRI and the Old Principalities, this cloneleather cap was made to be both inexpensive and easier to maintain than the elaborate headpieces worn by the older nobility. \
+ Border princes of all make and model are known to put their own personal emblems on these instead of any coherent ranking system, \
+ and the cap features a wider brim in order to shield Azulean eyes from the alien suns they intend to grasp."
+ icon_state = "upstartcap"
diff --git a/modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm b/modular_nova/master_files/code/modules/clothing/head/cowboy.dm
similarity index 96%
rename from modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm
rename to modular_nova/master_files/code/modules/clothing/head/cowboy.dm
index 5e20ad1bfd5..95b6813805a 100644
--- a/modular_skyrat/master_files/code/modules/clothing/head/cowboy.dm
+++ b/modular_nova/master_files/code/modules/clothing/head/cowboy.dm
@@ -4,8 +4,8 @@
/obj/item/clothing/head/cowboy/skyrat
name = "SR COWBOY HAT DEBUG"
desc = "REPORT THIS IF FOUND"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
icon_state = null //Keeps this from showing up under the chameleon hat
worn_icon_state = null //TG defaults this to "hunter" and breaks our items
flags_inv = SHOWSPRITEEARS
diff --git a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm b/modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm
similarity index 94%
rename from modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm
rename to modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm
index 1c4c286fa85..5b8ed86ec4b 100644
--- a/modular_skyrat/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm
+++ b/modular_nova/master_files/code/modules/clothing/head/monkey_magnification_helmet.dm
@@ -56,7 +56,15 @@
/obj/item/clothing/head/helmet/monkey_sentience/proc/connect(mob/user)
polling = TRUE
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a mind magnified monkey?", ROLE_MONKEY_HELMET, null, 5 SECONDS, magnification, POLL_IGNORE_MONKEY_HELMET)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob(
+ "Do you want to play as a mind magnified monkey?",
+ ROLE_MONKEY_HELMET,
+ poll_time = 5 SECONDS,
+ target_mob = magnification,
+ ignore_category = POLL_IGNORE_MONKEY_HELMET,
+ pic_source = magnification,
+ role_name_text = "mind magnified [magnification.real_name]",
+ )
polling = FALSE
if(!magnification)
return
diff --git a/modular_skyrat/master_files/code/modules/clothing/masks/_masks.dm b/modular_nova/master_files/code/modules/clothing/masks/_masks.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/masks/_masks.dm
rename to modular_nova/master_files/code/modules/clothing/masks/_masks.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/outfits/ert.dm b/modular_nova/master_files/code/modules/clothing/outfits/ert.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/outfits/ert.dm
rename to modular_nova/master_files/code/modules/clothing/outfits/ert.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/outfits/standard.dm b/modular_nova/master_files/code/modules/clothing/outfits/standard.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/outfits/standard.dm
rename to modular_nova/master_files/code/modules/clothing/outfits/standard.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/bananashoes.dm b/modular_nova/master_files/code/modules/clothing/shoes/bananashoes.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/shoes/bananashoes.dm
rename to modular_nova/master_files/code/modules/clothing/shoes/bananashoes.dm
diff --git a/modular_nova/master_files/code/modules/clothing/shoes/boots.dm b/modular_nova/master_files/code/modules/clothing/shoes/boots.dm
new file mode 100644
index 00000000000..474202c04dc
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/shoes/boots.dm
@@ -0,0 +1,3 @@
+/obj/item/clothing/shoes/workboots/mining
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi' // To keep the old version before #8911
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi' // To keep the old version before #8911
diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/sneakers.dm b/modular_nova/master_files/code/modules/clothing/shoes/sneakers.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/shoes/sneakers.dm
rename to modular_nova/master_files/code/modules/clothing/shoes/sneakers.dm
diff --git a/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm b/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm
new file mode 100644
index 00000000000..194a7b02f86
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/shoes/wheelys.dm
@@ -0,0 +1,4 @@
+/obj/item/clothing/shoes/wheelys
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi'
diff --git a/modular_nova/master_files/code/modules/clothing/suits/_suits.dm b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm
new file mode 100644
index 00000000000..f2d6570c1e2
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm
@@ -0,0 +1,26 @@
+/obj/item/clothing/suit
+ /// Does this object get cropped when worn by a taur on their suit or uniform slot?
+ var/gets_cropped_on_taurs = TRUE
+
+//Define worn_icon_digi below here for suits so we don't have to make whole new .dm files for each
+/obj/item/clothing/suit/armor
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi'
+
+/obj/item/clothing/suit/bio_suit
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi'
+
+/obj/item/clothing/suit/wizrobe
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi'
+ gets_cropped_on_taurs = FALSE
+
+/obj/item/clothing/suit/toggle/labcoat
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi'
+
+/obj/item/clothing/suit/space
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
+
+/obj/item/clothing/suit/chaplainsuit
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi'
+
+/obj/item/clothing/suit/hooded/chaplainsuit
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi'
diff --git a/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm b/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm
new file mode 100644
index 00000000000..7cf5d0d2092
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/suits/labcoat.dm
@@ -0,0 +1,62 @@
+/obj/item/clothing/suit/toggle/labcoat
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/toggle/labcoat/skyrat
+ name = "SR LABCOAT SUIT DEBUG"
+ desc = "REPORT THIS IF FOUND"
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi'
+ icon_state = null //Keeps this from showing up under the chameleon hat
+
+/obj/item/clothing/suit/toggle/labcoat/skyrat/rd
+ name = "research directors labcoat"
+ desc = "A Nanotrasen standard labcoat for certified Research Directors. It has an extra plastic-latex lining on the outside for more protection from chemical and viral hazards."
+ icon_state = "labcoat_rd"
+ body_parts_covered = CHEST|ARMS|LEGS
+ armor_type = /datum/armor/skyrat_rd
+
+/datum/armor/skyrat_rd
+ melee = 5
+ bio = 80
+ fire = 80
+ acid = 70
+
+/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis
+ name = "high vis labcoat"
+ desc = "A high visibility vest for emergency responders, intended to draw attention away from the blood."
+ icon_state = "labcoat_highvis"
+ blood_overlay_type = "armor"
+
+/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
+ . = ..()
+ if(!isinhands)
+ . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha)
+
+/obj/item/clothing/suit/toggle/labcoat/hospitalgown //Intended to keep patients modest while still allowing for surgeries
+ name = "hospital gown"
+ desc = "A complicated drapery with an assortment of velcros and strings, designed to keep a patient modest during medical stay and surgeries."
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#478294#478294#478294#478294"
+ toggle_noun = "drapes"
+ body_parts_covered = NONE //Allows surgeries despite wearing it; hiding genitals is handled in /datum/sprite_accessory/genital/is_hidden() (Only place it'd work sadly)
+ armor_type = /datum/armor/none
+ equip_delay_other = 8
+
+/obj/item/clothing/suit/toggle/labcoat/roboticist //Overwrite the TG Roboticist labcoat to Black and Red (not the Interdyne labcoat though)
+ greyscale_colors = "#2D2D33#88242D#88242D#88242D"
+
+/obj/item/clothing/suit/toggle/labcoat/medical //Renamed version of the Genetics labcoat for more generic medical purposes; just a subtype of /labcoat/ for the TG files
+ name = "medical labcoat"
+ desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
+ icon_state = "labcoat_job"
+ greyscale_config = /datum/greyscale_config/labcoat
+ greyscale_config_worn = /datum/greyscale_config/labcoat/worn
+ greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2"
+
+/obj/item/clothing/suit/toggle/labcoat/Initialize(mapload)
+ . = ..()
+ allowed += list(
+ /obj/item/handheld_soulcatcher,
+ )
diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm b/modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm
similarity index 90%
rename from modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm
rename to modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm
index 0b78049a650..eece468d77d 100644
--- a/modular_skyrat/master_files/code/modules/clothing/suits/skinsuits.dm
+++ b/modular_nova/master_files/code/modules/clothing/suits/skinsuits.dm
@@ -8,8 +8,8 @@
An attached Shoredress helm is often used in conjunction with a third-party oxygen supply to allow one to breathe, \
and open pores in the suit allow the body to be cooled by the perspiration of internal water. \n\
These suits are reputable among orbital workers for having very little interference with movement, and easy storage by simply folding them inside of any bubble-shaped helmet."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/akula.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi'
icon_state = "skinsuit"
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -35,8 +35,8 @@
and for what remains to stay in the frame. These are typically made of up to four layers of the stuff, working unintentionally to ensure the faces of their wearers are difficult to identify. \n\n\
In addition, the interlayer gives the helms sound insulation properties, and the ability to block UV radiation. \
These helmets are known for being distinctly uncomfortable in comparison to their civilian counterparts; cramped and with only the most barebones climate control tech."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/akula.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula.dmi'
icon_state = "skinsuithelmet"
/obj/item/clothing/head/helmet/space/skinsuit_helmet/Initialize(mapload)
@@ -54,8 +54,8 @@
Having sparse plating around the wearer's arms and legs, boarding teams are encouraged after their pod lands to do one thing: \
make use of their rapid movement, and render their enemies past tense. The armor is relatively hardy against ranged weapons, \
but the alloys involved are primarily constructed around resisting strikes from boarding axes, lances, and other common pirate-repellant weapons."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/akula.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/akula.dmi'
icon_state = "skinsuitarmor"
base_icon_state = "skinsuitarmor"
diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm b/modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm
similarity index 90%
rename from modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm
rename to modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm
index 3809733a3a5..b5697b2bd78 100644
--- a/modular_skyrat/master_files/code/modules/clothing/suits/wintercoats.dm
+++ b/modular_nova/master_files/code/modules/clothing/suits/wintercoats.dm
@@ -5,15 +5,15 @@
/obj/item/clothing/suit/hooded/wintercoat/skyrat
name = "assistant's formal winter coat"
desc = "A dark gray winter coat with bronze-gold detailing, and a zipper in the shape of a toolbox."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi'
icon_state = "coataformal"
hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat
//Hood Basetype (The Assistant's Formal Coat Hood)
/obj/item/clothing/head/hooded/winterhood/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi'
icon_state = "hood_aformal"
//Bartender
diff --git a/modular_skyrat/master_files/code/modules/clothing/towels.dm b/modular_nova/master_files/code/modules/clothing/towels.dm
similarity index 97%
rename from modular_skyrat/master_files/code/modules/clothing/towels.dm
rename to modular_nova/master_files/code/modules/clothing/towels.dm
index d9d4132dc6b..2712db1a267 100644
--- a/modular_skyrat/master_files/code/modules/clothing/towels.dm
+++ b/modular_nova/master_files/code/modules/clothing/towels.dm
@@ -10,15 +10,15 @@
#define TOWEL_USED "used"
/// Icon path to the obj icon of the towel.
-#define TOWEL_OBJ_ICON 'modular_skyrat/master_files/icons/obj/clothing/towel.dmi'
+#define TOWEL_OBJ_ICON 'modular_nova/master_files/icons/obj/clothing/towel.dmi'
/// Icon path to the worn icon of the towel.
-#define TOWEL_WORN_ICON 'modular_skyrat/master_files/icons/mob/clothing/towel.dmi'
+#define TOWEL_WORN_ICON 'modular_nova/master_files/icons/mob/clothing/towel.dmi'
/// Icon path to the worn icon of the towel for digitigrades.
-#define TOWEL_WORN_ICON_DIGI 'modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi'
+#define TOWEL_WORN_ICON_DIGI 'modular_nova/master_files/icons/mob/clothing/towel_digi.dmi'
/// Icon path to the left-hand inhand icons of the towel.
-#define TOWEL_LEFTHAND_ICON 'modular_skyrat/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi'
+#define TOWEL_LEFTHAND_ICON 'modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi'
/// Icon path to the right-hand inhand icons of the towel.
-#define TOWEL_RIGHTHAND_ICON 'modular_skyrat/master_files/icons/mob/inhands/clothing/towel_righthand.dmi'
+#define TOWEL_RIGHTHAND_ICON 'modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi'
/// How much cloth goes into a towel.
#define TOWEL_CLOTH_AMOUNT 2
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/_under.dm b/modular_nova/master_files/code/modules/clothing/under/_under.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/under/_under.dm
rename to modular_nova/master_files/code/modules/clothing/under/_under.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/accessories.dm b/modular_nova/master_files/code/modules/clothing/under/accessories.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/clothing/under/accessories.dm
rename to modular_nova/master_files/code/modules/clothing/under/accessories.dm
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm b/modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm
similarity index 97%
rename from modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm
rename to modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm
index 569a268ae96..2baffc881bd 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/akula_jobs.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/akula_jobs.dm
@@ -1,5 +1,5 @@
/// The DMI containing the tail overlay sprites
-#define TAIL_OVERLAY_DMI 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi'
+#define TAIL_OVERLAY_DMI 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi'
/// The proper layer to render the tail overlays onto
#define TAIL_OVERLAY_LAYER 5.9
@@ -15,8 +15,8 @@
a great many chemicals or even drinks have been loaded in by adventurous or careless explorers of the New Principalities-- at fantastic personal risk to their gills. "
icon_state = "default"
base_icon_state = "default"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/akula.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/akula.dmi'
armor_type = /datum/armor/clothing_under/wetsuit
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
can_adjust = FALSE
@@ -198,8 +198,8 @@
The 'flexiglass' glass comprising the unit is chemically strengthened to be thin, light, and damage-resistant, but capable of bending even in half without shattering; all to allow you to touch your face. \n\
Some have taken to putting electronic displays around the face to help express emotion, or to signal nonverbally. \
These helms are normally attached to Shoredresses or Stardresses, but comes with a fitted neoprene collar to allow wear on essentially anything."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/akula.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/akula.dmi'
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | STACKABLE_HELMET_EXEMPT | HEADINTERNALS
icon_state = "helmet"
inhand_icon_state = "helmet"
diff --git a/modular_nova/master_files/code/modules/clothing/under/akula_official.dm b/modular_nova/master_files/code/modules/clothing/under/akula_official.dm
new file mode 100644
index 00000000000..2179fbbcfe6
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/akula_official.dm
@@ -0,0 +1,35 @@
+/obj/item/clothing/under/rank/azulean
+ icon_state = "oldblood"
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi'
+ female_sprite_flags = NO_FEMALE_UNIFORM
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/under/rank/azulean/old_blood
+ name = "\improper Agurkrral Oldblood's royal regalia"
+ desc = "A service dress uniform of the Old Principalities of Agurkrral, a fashion shared by the majority of the nobility. \
+ These outfits are known to normally be accessorized with gold trims and other rare metals, \
+ constructed and treated specially for use in underwater environments; the dwellings of most of the crown's old guard. \n\n\
+ Actual fish-leather is often used for the subtle pattern of scaling, and to ensure proper hydrodynamics while swimming. \
+ Due to being constructed for comfort and flash rather than practicality, the technology used in Shoredresses to hydrate the wearer could not be implemented; \
+ only a mount for a Shoredress's helm."
+ icon_state = "oldblood"
+
+/obj/item/clothing/under/rank/azulean/old_blood/skirt
+ name = "\improper Agurkrral Oldblood's royal regalia"
+ icon_state = "oldblood_skirt"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+
+/obj/item/clothing/under/rank/azulean/upstart
+ name = "\improper Agurkrral Upstart's noble getup"
+ desc = "Patterned off the dress uniforms of the Old Principalities, this sort of style belongs to the border princes of the New Principalities. \
+ These outfits rebuke tradition to incorporate the use of imported leather, using reinforced clasps instead of shiny golden buttons. \n\n\
+ Few decorations are normally seen in these clothing, owing to the tendency of their wearers to 'gallivant.' \
+ Due to being constructed for a degree of expendability, the technology used in Shoredresses to hydrate the wearer is \
+ an extremely rare sight in these outfits; only the mount for a Shoredress's helm."
+ icon_state = "upstart"
+
+/obj/item/clothing/under/rank/azulean/upstart/skirt
+ name = "\improper Agurkrral Upstart's noble getup"
+ icon_state = "upstart_skirt"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
diff --git a/modular_nova/master_files/code/modules/clothing/under/color.dm b/modular_nova/master_files/code/modules/clothing/under/color.dm
new file mode 100644
index 00000000000..3cf741a1050
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/color.dm
@@ -0,0 +1,17 @@
+/obj/item/clothing/under/color
+ greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/worn/monkey
+
+/obj/item/clothing/under/color/rainbow
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi'
+
+/**
+ * Random jumpsuit is the preferred style of the wearer if loaded as an outfit.
+ * This is cleaner than creating a ../skirt variant as skirts are precached into SSwardrobe
+ * and that causes runtimes for runtimes for this class as it qdels on Initialize.
+ */
+/obj/item/clothing/under/color/random/proc/get_random_variant()
+ var/mob/living/carbon/human/wearer = loc
+ if(istype(wearer) && wearer.jumpsuit_style == PREF_SKIRT)
+ return get_random_jumpskirt()
+
+ return get_random_jumpsuit()
diff --git a/modular_nova/master_files/code/modules/clothing/under/costume.dm b/modular_nova/master_files/code/modules/clothing/under/costume.dm
new file mode 100644
index 00000000000..b8cd52e2750
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/costume.dm
@@ -0,0 +1,138 @@
+/obj/item/clothing/under/costume
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+/obj/item/clothing/under/costume/russian_officer
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi'
+
+/obj/item/clothing/under/costume/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+ can_adjust = FALSE
+
+//My least favorite file. Just... try to keep it sorted. And nothing over the top
+
+/*
+* UNSORTED
+*/
+/obj/item/clothing/under/costume/skyrat/cavalry
+ name = "cavalry uniform"
+ desc = "Dedicate yourself to something better. To loyalty, honour, for it only dies when everyone abandons it."
+ icon_state = "cavalry" //specifically an 1890s US Army Cavalry Uniform
+
+/obj/item/clothing/under/costume/deckers/alt //not even going to bother re-pathing this one because its such a unique case of 'TGs item has something but this alt doesnt'
+ name = "deckers maskless outfit"
+ desc = "A decker jumpsuit with neon blue coloring."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+ icon_state = "decking_jumpsuit"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/costume/skyrat/bathrobe
+ name = "bathrobe"
+ desc = "A warm fluffy bathrobe, perfect for relaxing after finally getting clean."
+ icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi'
+ icon_state = "robes"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ greyscale_colors = "#ffffff"
+ greyscale_config = /datum/greyscale_config/bathrobe
+ greyscale_config_worn = /datum/greyscale_config/bathrobe/worn
+ greyscale_config_worn_teshari = /datum/greyscale_config/bathrobe/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/bathrobe/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/bathrobe/worn/oldvox
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ greyscale_colors = "#434d7a" //THATS RIGHT, FUCK YOU! THE BATHROBE CAN BE RECOLORED!
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/*
+* LUNAR AND JAPANESE CLOTHES
+*/
+
+/obj/item/clothing/under/costume/skyrat/qipao
+ name = "qipao"
+ desc = "A qipao, traditionally worn in ancient Earth China by women during social events and lunar new years."
+ icon_state = "qipao"
+ body_parts_covered = CHEST|GROIN|LEGS
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ greyscale_colors = "#2b2b2b"
+ greyscale_config = /datum/greyscale_config/qipao
+ greyscale_config_worn = /datum/greyscale_config/qipao/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/qipao/worn/digi
+ flags_1 = IS_PLAYER_COLORABLE_1
+ gets_cropped_on_taurs = FALSE
+
+/obj/item/clothing/under/costume/skyrat/cheongsam
+ name = "cheongsam"
+ desc = "A cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years."
+ icon_state = "cheongsam"
+ body_parts_covered = CHEST|GROIN|LEGS
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ greyscale_colors = "#2b2b2b"
+ greyscale_config = /datum/greyscale_config/cheongsam
+ greyscale_config_worn = /datum/greyscale_config/cheongsam/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/cheongsam/worn/digi
+ flags_1 = IS_PLAYER_COLORABLE_1
+ gets_cropped_on_taurs = FALSE
+
+/obj/item/clothing/under/costume/skyrat/yukata
+ name = "yukata"
+ desc = "A traditional ancient Earth Japanese yukata, typically worn in casual settings."
+ icon_state = "yukata"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ greyscale_colors = "#2b2b2b"
+ greyscale_config = /datum/greyscale_config/yukata
+ greyscale_config_worn = /datum/greyscale_config/yukata/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/yukata/worn/digi
+ flags_1 = IS_PLAYER_COLORABLE_1
+ gets_cropped_on_taurs = FALSE
+
+/obj/item/clothing/under/costume/skyrat/kamishimo
+ name = "kamishimo"
+ desc = "A traditional ancient Earth Japanese Kamishimo."
+ icon_state = "kamishimo"
+
+/obj/item/clothing/under/costume/skyrat/kimono
+ name = "fancy kimono"
+ desc = "A traditional ancient Earth Japanese Kimono. Longer and fancier than a yukata."
+ icon_state = "kimono"
+ body_parts_covered = CHEST|GROIN|ARMS
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+
+/*
+* CHRISTMAS CLOTHES
+*/
+
+/obj/item/clothing/under/costume/skyrat/christmas
+ name = "christmas costume"
+ desc = "Can you believe it guys? Christmas. Just a lightyear away!" //Lightyear is a measure of distance I hate it being used for this joke :(
+ icon_state = "christmas_male"
+ greyscale_colors = "#cc0f0f#c4c2c2"
+ greyscale_config = /datum/greyscale_config/chrimbo
+ greyscale_config_worn = /datum/greyscale_config/chrimbo/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/chrimbo/worn/digi
+ body_parts_covered = CHEST|GROIN|ARMS
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/under/costume/skyrat/christmas/green
+ name = "green christmas costume"
+ desc = "4:00, wallow in self-pity. 4:30, stare into the abyss. 5:00, solve world hunger, tell no one. 5:30, jazzercize; 6:30, dinner with me. I can't cancel that again. 7:00, wrestle with my self-loathing. I'm booked. Of course, if I bump the loathing to 9, I could still be done in time to lay in bed, stare at the ceiling and slip slowly into madness."
+ greyscale_colors = "#1a991a#c4c2c2"
+
+/obj/item/clothing/under/costume/skyrat/christmas/croptop
+ name = "sexy christmas costume"
+ desc = "About 550 years since the release of Mariah Carey's \"All I Want For Christmas is You\", society has yet to properly recover from its repercussions. Some still keep a gun as their christmas mantlepiece, just in case she's heard singing on their rooftop late in the night..."
+ icon_state = "christmas_female"
+ greyscale_colors = "#cc0f0f#c4c2c2"
+ greyscale_config = /datum/greyscale_config/chrimbo
+ greyscale_config_worn = /datum/greyscale_config/chrimbo/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/chrimbo/worn/digi
+ body_parts_covered = CHEST|GROIN
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/under/costume/skyrat/christmas/croptop/green
+ name = "sexy green christmas costume"
+ desc = "Stupid. Ugly. Out of date. If I can't find something nice to wear I'm not going."
+ greyscale_colors = "#1a991a#c4c2c2"
diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm
new file mode 100644
index 00000000000..2152142d7b3
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm
@@ -0,0 +1,116 @@
+/obj/item/clothing/under/rank/cargo
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi'
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi'
+
+// Add a /obj/item/clothing/under/rank/cargo/miner/skyrat if you add miner uniforms
+
+/*
+* CARGO TECH
+*/
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/utility
+ name = "supply utility uniform"
+ desc = "A utility uniform worn by employees of the Supply department."
+ icon_state = "util_cargo"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/utility/syndicate
+ armor_type = /datum/armor/clothing_under/utility_syndicate
+ has_sensor = NO_SENSORS
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/long
+ name = "cargo technician's long jumpsuit"
+ desc = "For crate-pushers who'd rather protect their legs than show them off."
+ icon_state = "cargo_long"
+ alt_covers_chest = FALSE
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka
+ name = "supply gorka"
+ desc = "A rugged, utilitarian gorka worn by the Supply department."
+ icon_state = "gorka_cargo"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck
+ name = "supply turtleneck"
+ desc = "A snug turtleneck sweater worn by the Supply department.."
+ icon_state = "turtleneck_cargo"
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt
+ name = "supply skirtleneck"
+ desc = "A snug turtleneck sweater worn by Supply, this time with a skirt attached!"
+ icon_state = "skirtleneck"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/evil
+ name = "black cargo uniform"
+ desc = "A standard cargo uniform with a more... Venerable touch to it."
+ icon_state = "qmsynd"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/cargo/tech/skyrat/casualman
+ name = "cargo technician casualwear"
+ desc = "A pair of stylish black jeans and a regular sweater for the relaxed technician."
+ icon_state = "cargotechjean"
+ can_adjust = FALSE
+
+/*
+* QUARTERMASTER
+*/
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/gorka
+ name = "quartermaster's gorka"
+ desc = "A rugged, utilitarian gorka with silver markings. Unlike the regular employees', this one is lined with silk on the inside."
+ icon_state = "gorka_qm"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck
+ name = "quartermaster's turtleneck"
+ desc = "A snug turtleneck sweater worn by the Quartermaster, characterized by the expensive-looking pair of suit pants."
+ icon_state = "turtleneck_qm"
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt
+ name = "quartermaster's skirtleneck"
+ desc = "A snug turtleneck sweater worn by the Quartermaster, as shown by the elegant double-lining of its silk skirt."
+ icon_state = "skirtleneckQM"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/syndie
+ name = "deck officer's jumpsuit"
+ desc = "A dark suit with a classic cargo vest. For the ultimate master of all things paper."
+ icon_state = "qmsynd"
+ has_sensor = NO_SENSORS
+ armor_type = /datum/armor/clothing_under/skyrat_syndie
+ can_adjust = FALSE
+
+/datum/armor/clothing_under/skyrat_syndie
+ melee = 10
+ fire = 50
+ acid = 40
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/formal
+ name = "quartermaster's formal jumpsuit"
+ desc = "A western-like alternate uniform for the old fashioned QM."
+ icon_state = "supply_chief"
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt
+ name = "quartermaster's formal jumpskirt"
+ desc = "A western-like alternate uniform for the old fashioned QM. Skirt included!"
+ icon_state = "supply_chief_skirt"
+ can_adjust = FALSE
+ body_parts_covered = CHEST|GROIN|ARMS
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/under/rank/cargo/qm/skyrat/casual
+ name = "quartermaster's casualwear"
+ desc = "A brown jacket with matching trousers for the relaxed Quartermaster."
+ icon_state = "qmc"
diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm
new file mode 100644
index 00000000000..dc4f380d033
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm
@@ -0,0 +1,35 @@
+//This file is for any station-aligned or neutral factions, not JUST Nanotrasen.
+//Try to keep them all a subtype of centcom/skyrat, for file sorting and balance - all faction representatives should have the same/similarly armored uniforms
+
+/obj/item/clothing/under/rank/centcom
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
+
+/obj/item/clothing/under/rank/centcom/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi'
+
+/*
+* NANOTRASEN
+*/
+//Check modular_nova\modules\nanotrasen_naval_command\code\clothing.dm for more of these! (Or, currently, ALL of these.)
+
+/*
+* LOPLAND
+*/
+/obj/item/clothing/under/rank/centcom/skyrat/lopland
+ name = "\improper Lopland corporate uniform"
+ desc = "A sleek jumpsuit worn by Lopland corporate. Its surprisingly well padded."
+ icon_state = "lopland_shirt"
+ worn_icon_state = "lopland_shirt"
+
+/obj/item/clothing/under/rank/centcom/skyrat/lopland/instructor
+ name = "\improper Lopland instructor's uniform"
+ desc = "A over-the-top, militaristic jumpsuit worn by Lopland-certified instructors, with a big Lopland logo slapped on the back. The amount of pockets could make a space marine cry."
+ icon_state = "lopland_tac"
+ worn_icon_state = "lopland_tac"
+
+
+/*
+* MISC
+*/
+// pizza and other misc ERTs in this file too?
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm
similarity index 84%
rename from modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm
rename to modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm
index b3bb1e22fbc..fb7e7f53417 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm
@@ -1,15 +1,15 @@
/obj/item/clothing/under/rank/civilian
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi' //Anything that was in TG's civilian.dmi, should be in our civilian_digi.dmi
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi' //Anything that was in TG's civilian.dmi, should be in our civilian_digi.dmi
/obj/item/clothing/under/rank/civilian/lawyer // Lawyers' suits are in TG's suits.dmi
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi'
/obj/item/clothing/under/rank/civilian/lawyer/bluesuit // EXCEPT THIS ONE.
greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi
/obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi'
can_adjust = FALSE //Just gonna set it to default for ease
//TG's files separate this into Civilian, Clown/Mime, and Curator. We wont have as many, so all Service goes into this file.
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm
similarity index 94%
rename from modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm
rename to modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm
index 57ea575e1c1..5f0a60a26ba 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/civilian/suits.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm
@@ -1,10 +1,10 @@
/obj/item/clothing/under/suit
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi' //Anything that was in TG's suits.dmi, should be in our suits_digi.dmi
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' //Anything that was in TG's suits.dmi, should be in our suits_digi.dmi
/obj/item/clothing/under/suit/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi'
//DO NOT ADD A /obj/item/clothing/under/rank/civilian/lawyer/skyrat. USE /obj/item/clothing/under/suit/skyrat FOR MODULAR SUITS
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm
similarity index 87%
rename from modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm
rename to modular_nova/master_files/code/modules/clothing/under/jobs/command.dm
index 81742893dd7..fae6e935e4e 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm
@@ -1,10 +1,10 @@
/obj/item/clothing/under/rank/captain
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi' //Anything that was in TG's captain.dmi, should be in our command_digi.dmi
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' //Anything that was in TG's captain.dmi, should be in our command_digi.dmi
//NOTE - TG uses "captain.dmi"; because we have a few non-captain items going in here for ease of access, this will just be "command.dmi"
/obj/item/clothing/under/rank/captain/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi'
/*
* CAPTAIN
@@ -36,9 +36,9 @@
//on-station often.
/obj/item/clothing/under/rank/blueshield
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi'
name = "blueshield's suit"
desc = "A classic bodyguard's suit, with custom-fitted Blueshield-Blue cuffs and a Nanotrasen insignia over one of the pockets."
icon_state = "blueshield"
@@ -88,9 +88,9 @@
//See Blueshield note - tl;dr, this role is a station role, while Centcom.dmi is more event roles
/obj/item/clothing/under/rank/nanotrasen_consultant
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/command.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/command.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/command.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/command.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi'
desc = "It's a green jumpsuit with some gold markings denoting the rank of \"Nanotrasen Consultant\"."
name = "nanotrasen consultant's jumpsuit"
icon_state = "nt_consultant"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm
similarity index 80%
rename from modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm
rename to modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm
index 39bb100eeb7..2cfd097be4e 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm
@@ -1,17 +1,17 @@
/obj/item/clothing/under/rank/engineering
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi
/obj/item/clothing/under/rank/engineering/engineer/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi'
/obj/item/clothing/under/rank/engineering/chief_engineer/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi'
/obj/item/clothing/under/rank/engineering/atmospheric_technician/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi'
/*
* ENGINEER
diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm
new file mode 100644
index 00000000000..32f2f521c42
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm
@@ -0,0 +1,102 @@
+/obj/item/clothing/under/rank/medical
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi
+
+/obj/item/clothing/under/rank/medical/doctor/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+
+
+/obj/item/clothing/under/rank/medical/scrubs/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+ icon_state = "scrubswhite" // Because for some reason TG's scrubs dont have an icon on their basetype
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub."
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
+
+/obj/item/clothing/under/rank/medical/chemist/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+
+// Add a 'medical/virologist/skyrat' here if you make Virologist uniforms
+
+/obj/item/clothing/under/rank/medical/paramedic/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+
+/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+
+/*
+* DOCTOR
+*/
+
+/obj/item/clothing/under/rank/medical/doctor/skyrat/utility
+ name = "medical utility uniform"
+ desc = "A utility uniform worn by Medical doctors."
+ icon_state = "util_med"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
+
+/obj/item/clothing/under/rank/medical/doctor/skyrat/utility/syndicate
+ armor_type = /datum/armor/clothing_under/utility_syndicate
+ has_sensor = NO_SENSORS
+
+/*
+* SCRUBS
+*/
+
+/obj/item/clothing/under/rank/medical/scrubs/skyrat/red
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a deep red."
+ icon_state = "scrubsred"
+
+/obj/item/clothing/under/rank/medical/scrubs/skyrat/white
+ desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a cream white colour."
+ icon_state = "scrubswhite"
+
+/*
+* CHEMIST
+*/
+
+/obj/item/clothing/under/rank/medical/chemist/skyrat/formal
+ name = "chemist's formal jumpsuit"
+ desc = "A white shirt with left-aligned buttons and an orange stripe, lined with protection against chemical spills."
+ icon_state = "pharmacologist"
+
+/obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt
+ name = "chemist's formal jumpskirt"
+ icon_state = "pharmacologist_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ gets_cropped_on_taurs = FALSE
+
+/obj/item/clothing/under/rank/medical/chemist/skirt
+ gets_cropped_on_taurs = FALSE
+
+/*
+* PARAMEDIC
+*/
+
+/obj/item/clothing/under/rank/medical/paramedic/skyrat/light
+ name = "light paramedic uniform"
+ desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has the reflective strips removed."
+ icon_state = "paramedic_light"
+
+/obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt
+ name = "light paramedic skirt"
+ desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has had it's legs replaced with a skirt."
+ icon_state = "paramedic_light_skirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/*
+* CHIEF MEDICAL OFFICER
+*/
+
+/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial //Rank pins of the Brigadier General
+ desc = "A teal, sterile naval suit with a rank badge denoting the Officer of the Medical Corps. Doesn't protect against blaster fire."
+ name = "chief medical officer's naval jumpsuit"
+ icon_state = "impcmo"
diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm
new file mode 100644
index 00000000000..26d27312919
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm
@@ -0,0 +1,101 @@
+/obj/item/clothing/under/rank/rnd
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
+
+/obj/item/clothing/under/rank/rnd/scientist/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+
+/obj/item/clothing/under/rank/rnd/roboticist/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+
+/obj/item/clothing/under/rank/rnd/research_director/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+
+// Add a 'rnd/geneticist/skyrat' if you make Geneticist uniforms
+
+/*
+* SCIENTIST
+*/
+
+/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility
+ name = "science utility uniform"
+ desc = "A utility uniform worn by NT-certified Science staff."
+ icon_state = "util_sci"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate
+ desc = "A utility uniform worn by Science staff."
+ armor_type = /datum/armor/clothing_under/utility_syndicate
+ has_sensor = NO_SENSORS
+
+/obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience
+ name = "science team uniform"
+ desc = "A simple semi-formal uniform consisting of a grayish-blue shirt and off-white slacks, paired with a ridiculous, but mandatory, tie."
+ icon_state = "hl_scientist"
+ can_adjust = FALSE
+
+/*
+* ROBOTICIST
+*/
+
+/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek
+ name = "sleek roboticst jumpsuit"
+ desc = "A sleek version of the roboticist uniform, complete with amber sci-fi stripes."
+ icon_state = "robosleek"
+ can_adjust = FALSE
+
+/*
+* RESEARCH DIRECTOR
+*/
+
+/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit
+ name = "research director's jumpsuit"
+ desc = "A shiny nano-weave uniform for those holding the title of \"Research Director\". Its fabric provides minor protection from biological contaminants."
+ icon_state = "director_jumpsuit"
+ can_adjust = TRUE
+ alt_covers_chest = TRUE
+
+/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit
+ name = "research director's jumpskirt"
+ icon_state = "director_jumpskirt"
+ body_parts_covered = CHEST|GROIN|ARMS
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial //Rank pins of the Major General
+ desc = "An off-white naval suit over black pants, with a rank badge denoting the Officer of the Internal Science Division. It's a peaceful life."
+ name = "research director's naval jumpsuit"
+ icon_state = "imprd"
+
+/*
+* OVERRIDES
+* ORION TODO: look over these when TG finishes their science resprites (any day now...)
+*/
+
+/obj/item/clothing/under/rank/rnd/scientist
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+ icon_state = "science_new"
+
+/obj/item/clothing/under/rank/rnd/scientist/skirt
+ icon_state = "sciwhite_skirt_new"
+
+/obj/item/clothing/under/rank/rnd/roboticist
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+ icon_state = "robotics_new"
+
+/obj/item/clothing/under/rank/rnd/roboticist/skirt
+ icon_state = "robotics_skirt_new"
+
+/obj/item/clothing/under/rank/rnd/geneticist
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi'
+ icon_state = "genetics_new"
+
+/obj/item/clothing/under/rank/rnd/geneticist/skirt
+ icon_state = "geneticswhite_skirt_new"
diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm
new file mode 100644
index 00000000000..0599b18567f
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm
@@ -0,0 +1,64 @@
+/obj/item/clothing/under/rank/security
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi' // Anything that was in the security.dmi, should be in the security_digi.dmi
+
+/obj/item/clothing/under/rank/security/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
+
+/obj/item/clothing/under/rank/security/head_of_security/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
+
+//DEBATE MOVING *ALL* SECURITY STUFF HERE? Even overrides, at least as a like, sub-file?
+
+/*
+* SECURITY OFFICER
+*/
+
+/obj/item/clothing/under/rank/security/skyrat/utility
+ name = "security utility uniform"
+ desc = "A utility uniform worn by Lopland-certified Security officers."
+ icon_state = "util_sec"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/security/skyrat/utility/redsec
+ desc = "A utility uniform worn by trained Security officers."
+ icon_state = "util_sec_old"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate
+ armor_type = /datum/armor/clothing_under/redsec_syndicate
+ has_sensor = NO_SENSORS
+
+/obj/item/clothing/under/rank/security/peacekeeper/trousers
+ name = "security trousers"
+ desc = "Some Peacekeeper-blue combat trousers. Probably should pair it with a vest for safety."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
+ icon_state = "workpants_blue"
+ body_parts_covered = GROIN|LEGS
+ can_adjust = FALSE
+ female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS
+
+/*
+* HEAD OF SECURITY
+*/
+
+/datum/armor/clothing_under/redsec_syndicate
+ melee = 10
+ fire = 50
+ acid = 40
+
+/obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial //Rank pins of the Grand General
+ desc = "A tar black naval suit and a rank badge denoting the Officer of The Internal Security Division. Be careful your underlings don't bump their head on a door."
+ name = "head of security's naval jumpsuit"
+ icon_state = "imphos"
+
+/*
+* PRISONER
+*/
+
+/obj/item/clothing/under/rank/prisoner
+ greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/prison/worn/monkey
diff --git a/modular_nova/master_files/code/modules/clothing/under/misc.dm b/modular_nova/master_files/code/modules/clothing/under/misc.dm
new file mode 100644
index 00000000000..504e64355ed
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/misc.dm
@@ -0,0 +1,64 @@
+//DO NOT ADD TO THIS FILE UNLESS THE SITUATION IS DIRE
+//MISC FILES = UNSORTED FILES. EVEN TG HATES THIS ONE.
+
+/obj/item/clothing/under/misc
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi'
+
+/obj/item/clothing/under/misc/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/misc.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/misc.dmi'
+ can_adjust = FALSE
+
+/*
+ Do we even bother sorting these? We don't want to use the file, it's for emergencies and in-betweens.
+ Just... don't lose your stuff.
+*/
+
+/obj/item/clothing/under/misc/skyrat/gear_harness
+ name = "gear harness"
+ desc = "A simple, inconspicuous harness replacement for a jumpsuit."
+ icon_state = "gear_harness"
+ body_parts_covered = NONE
+ attachment_slot_override = CHEST
+ can_adjust = FALSE
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/under/misc/skyrat/gear_harness/eve
+ name = "collection of leaves"
+ desc = "Three leaves, designed to cover the nipples and genetalia of the wearer. A foe so proud will first the weaker seek."
+ icon_state = "eve"
+ body_parts_covered = CHEST|GROIN
+
+/obj/item/clothing/under/misc/skyrat/gear_harness/adam
+ name = "leaf"
+ desc = "A single leaf, designed to cover the genitalia of the wearer. Seek not temptation."
+ icon_state = "adam"
+ body_parts_covered = GROIN
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+
+/obj/item/clothing/under/misc/skyrat/taccas
+ name = "tacticasual uniform"
+ desc = "A white wifebeater on top of some cargo pants. For when you need to carry various beers."
+ icon_state = "tac_s"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+/obj/item/clothing/under/misc/skyrat/mechanic
+ name = "mechanic's overalls"
+ desc = "An old-fashioned pair of brown overalls, along with assorted pockets and belt-loops."
+ icon_state = "mechanic"
+
+/obj/item/clothing/under/misc/skyrat/utility
+ name = "general utility uniform"
+ desc = "A utility uniform worn by civilian-ranked crew."
+ icon_state = "utility"
+ body_parts_covered = CHEST|ARMS|GROIN|LEGS
+ can_adjust = FALSE
+
+/obj/item/clothing/under/misc/skyrat/utility/syndicate
+ armor_type = /datum/armor/clothing_under/utility_syndicate
+ has_sensor = NO_SENSORS
+
+/datum/armor/clothing_under/utility_syndicate
+ melee = 10
+ fire = 50
+ acid = 40
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm
similarity index 90%
rename from modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm
rename to modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm
index 3bc3d7c2a7b..647425b70d0 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/shorts_pants.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm
@@ -1,4 +1,4 @@
-#define SHORTS_PANTS_SHIRTS_DIGIFILE 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi'
+#define SHORTS_PANTS_SHIRTS_DIGIFILE 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi'
/obj/item/clothing/under/pants
worn_icon_digi = SHORTS_PANTS_SHIRTS_DIGIFILE
@@ -8,12 +8,12 @@
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION //That's right, TG, I have icons for ALL of these!! Mwahahaha!!!!
/obj/item/clothing/under/pants/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
/obj/item/clothing/under/shorts/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
//Need to reset all these so our custom stuff can choose independently to be greyscale or not. TG putting these on the basetype was kinda gross.
greyscale_config = null
greyscale_config_worn = null
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm b/modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm
similarity index 94%
rename from modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm
rename to modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm
index 224bd78eccd..c93ebb10f3f 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/skirts_dresses.dm
+++ b/modular_nova/master_files/code/modules/clothing/under/skirts_dresses.dm
@@ -1,4 +1,4 @@
-#define SKIRTS_DRESSES_DIGIFILE 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi'
+#define SKIRTS_DRESSES_DIGIFILE 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi'
/obj/item/clothing/under/dress
body_parts_covered = CHEST|GROIN //For reference
@@ -9,12 +9,12 @@
//God bless the skirt being a subtype of the dress, only need one worn_digi_icon definition
/obj/item/clothing/under/dress/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
/obj/item/clothing/under/dress/skirt/skyrat //Just so they can stay under TG's skirts in case code needs subtypes of them (also SDMM dropdown looks nicer like this)
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
//TG's icons only have a dress.dmi, but that means its not ABC-sorted to be beside shorts_pants_shirts.dmi. So its skirts_dresses for us.
diff --git a/modular_nova/master_files/code/modules/clothing/under/syndicate.dm b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm
new file mode 100644
index 00000000000..50204eda5b3
--- /dev/null
+++ b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm
@@ -0,0 +1,139 @@
+#define RESKIN_CHARCOAL "Charcoal"
+#define RESKIN_NT "NT Blue"
+#define RESKIN_SYNDIE "Syndicate Red"
+
+/obj/item/clothing/under/syndicate
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi' // Anything that was in the syndicate.dmi, should be in the syndicate_digi.dmi
+
+/obj/item/clothing/under/syndicate/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi'
+ //These are pre-set for ease and reference, as syndie under items SHOULDNT have sensors and should have similar stats; also its better to start with adjust = false
+ has_sensor = NO_SENSORS
+ can_adjust = FALSE
+
+//Related files:
+// modular_nova\modules\Syndie_edits\code\syndie_edits.dm (this has the Overalls and non-Uniforms)
+// modular_nova\modules\novaya_ert\code\uniform.dm (NRI uniform(s))
+
+/*
+* TACTICOOL
+*/
+
+//This is an overwrite, not a fully new item, but still fits best here.
+
+/obj/item/clothing/under/syndicate/tacticool //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available.
+ name = "tacticool turtleneck"
+ desc = "A snug turtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' //Since its an overwrite it needs new icon linking. Woe.
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi'
+ icon_state = "tactifool_blue"
+ inhand_icon_state = "b_suit"
+ can_adjust = TRUE
+ has_sensor = HAS_SENSORS
+ armor_type = /datum/armor/clothing_under/none
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ unique_reskin = list(
+ RESKIN_NT = "tactifool_blue",
+ RESKIN_CHARCOAL = "tactifool"
+ )
+ resistance_flags = FLAMMABLE
+
+/obj/item/clothing/under/syndicate/tacticool/reskin_obj(mob/M)
+ ..()
+ if(current_skin && current_skin == RESKIN_CHARCOAL)
+ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." //Default decription of the normal tacticool
+ inhand_icon_state = "bl_suit" //May as well, while we're updating it
+
+/obj/item/clothing/under/syndicate/tacticool/skirt //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available.
+ name = "tacticool skirtleneck"
+ desc = "A snug skirtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-."
+ icon_state = "tactifool_blue_skirt"
+ armor_type = /datum/armor/clothing_under/none
+ body_parts_covered = CHEST|GROIN|ARMS
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ unique_reskin = list(
+ RESKIN_NT = "tactifool_blue_skirt",
+ RESKIN_CHARCOAL = "tactifool_skirt"
+ )
+
+/obj/item/clothing/under/syndicate/bloodred/sleepytime/sensors //Halloween-only
+ has_sensor = HAS_SENSORS
+ armor_type = /datum/armor/clothing_under/none
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+/obj/item/clothing/under/syndicate/skyrat/baseball
+ name = "syndicate baseball tee"
+ desc = "Aaand the Syndicate Snakes are up to bat, ready for one of their signature nuclear home-runs! Lets show these corpos a good time." //NT pitches their plasma/bluespace(something)
+ icon_state = "syndicate_baseball"
+
+/*
+* TACTICAL (Real)
+*/
+//The red alts, for BLATANTLY syndicate stuff (Like DS2)
+// (Multiple non-syndicate things use the base tactical turtleneck, they cant have it red nor reskinnable. OUR version, however, can be.)
+/obj/item/clothing/under/syndicate/skyrat/tactical
+ name = "tactical turtleneck"
+ desc = "A snug syndicate-red turtleneck with charcoal-black cargo pants. Good luck arguing allegiance with this on."
+ icon_state = "syndicate_red"
+ inhand_icon_state = "r_suit"
+ can_adjust = TRUE
+ alt_covers_chest = TRUE
+ armor_type = /datum/armor/clothing_under/syndicate
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ unique_reskin = list(
+ RESKIN_SYNDIE = "syndicate_red",
+ RESKIN_CHARCOAL = "syndicate"
+ )
+
+/obj/item/clothing/under/syndicate/skyrat/tactical/reskin_obj(mob/M)
+ ..()
+ if(current_skin && current_skin == RESKIN_CHARCOAL)
+ desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." //(Digital camo? Brown? What?)
+ inhand_icon_state = "bl_suit"
+
+/obj/item/clothing/under/syndicate/skyrat/tactical/skirt
+ name = "tactical skirtleneck"
+ desc = "A snug syndicate-red skirtleneck with a charcoal-black skirt. Good luck arguing allegiance with this on."
+ icon_state = "syndicate_red_skirt"
+ inhand_icon_state = "r_suit"
+ female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
+ dying_key = DYE_REGISTRY_JUMPSKIRT
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ unique_reskin = list(
+ RESKIN_SYNDIE = "syndicate_red_skirt",
+ RESKIN_CHARCOAL = "syndicate_skirt"
+ )
+
+/obj/item/clothing/under/syndicate/skyrat/tactical/skirt/reskin_obj(mob/M)
+ ..()
+ if(current_skin && current_skin == RESKIN_CHARCOAL)
+ desc = "A non-descript and slightly suspicious looking skirtleneck."
+ inhand_icon_state = "bl_suit"
+
+/*
+* ENCLAVE
+*/
+/obj/item/clothing/under/syndicate/skyrat/enclave
+ name = "neo-American sergeant uniform"
+ desc = "Throughout the stars, rumors of mad scientists and angry drill sergeants run rampant; of creatures in armor black as night, being led by men or women wearing this uniform. They share one thing: a deep, natonalistic zeal of the dream of America."
+ icon_state = "enclave"
+ can_adjust = TRUE
+ armor_type = /datum/armor/clothing_under/none
+
+/obj/item/clothing/under/syndicate/skyrat/enclave/officer
+ name = "neo-American officer uniform"
+ icon_state = "enclaveo"
+
+/obj/item/clothing/under/syndicate/skyrat/enclave/real
+ armor_type = /datum/armor/clothing_under/syndicate
+
+/obj/item/clothing/under/syndicate/skyrat/enclave/real/officer
+ name = "neo-American officer uniform"
+ icon_state = "enclaveo"
+
+#undef RESKIN_CHARCOAL
+#undef RESKIN_NT
+#undef RESKIN_SYNDIE
diff --git a/modular_skyrat/master_files/code/modules/events/_event.dm b/modular_nova/master_files/code/modules/events/_event.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/events/_event.dm
rename to modular_nova/master_files/code/modules/events/_event.dm
diff --git a/modular_skyrat/master_files/code/modules/experisci/experiment.dm b/modular_nova/master_files/code/modules/experisci/experiment.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/experisci/experiment.dm
rename to modular_nova/master_files/code/modules/experisci/experiment.dm
diff --git a/modular_skyrat/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm b/modular_nova/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm
rename to modular_nova/master_files/code/modules/food_and_drinks/recipes/food_mixtures.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/departments/departments.dm b/modular_nova/master_files/code/modules/jobs/departments/departments.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/departments/departments.dm
rename to modular_nova/master_files/code/modules/jobs/departments/departments.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/_job.dm b/modular_nova/master_files/code/modules/jobs/job_types/_job.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/_job.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/_job.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/_job_attire.dm b/modular_nova/master_files/code/modules/jobs/job_types/_job_attire.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/_job_attire.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/_job_attire.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/atmospheric_technician.dm b/modular_nova/master_files/code/modules/jobs/job_types/atmospheric_technician.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/atmospheric_technician.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/atmospheric_technician.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/blackmarket.dm b/modular_nova/master_files/code/modules/jobs/job_types/blackmarket.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/blackmarket.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/blackmarket.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/botanist.dm b/modular_nova/master_files/code/modules/jobs/job_types/botanist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/botanist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/botanist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/captain.dm b/modular_nova/master_files/code/modules/jobs/job_types/captain.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/captain.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/captain.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chaplain.dm b/modular_nova/master_files/code/modules/jobs/job_types/chaplain.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/chaplain.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/chaplain.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chemist.dm b/modular_nova/master_files/code/modules/jobs/job_types/chemist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/chemist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/chemist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chief_engineer.dm b/modular_nova/master_files/code/modules/jobs/job_types/chief_engineer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/chief_engineer.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/chief_engineer.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/chief_medical_officer.dm b/modular_nova/master_files/code/modules/jobs/job_types/chief_medical_officer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/chief_medical_officer.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/chief_medical_officer.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/clown.dm b/modular_nova/master_files/code/modules/jobs/job_types/clown.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/clown.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/clown.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/coroner.dm b/modular_nova/master_files/code/modules/jobs/job_types/coroner.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/coroner.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/coroner.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/curator.dm b/modular_nova/master_files/code/modules/jobs/job_types/curator.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/curator.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/curator.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/cyborg.dm b/modular_nova/master_files/code/modules/jobs/job_types/cyborg.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/cyborg.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/cyborg.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/ds2.dm b/modular_nova/master_files/code/modules/jobs/job_types/ds2.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/ds2.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/ds2.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/freighter_crew.dm b/modular_nova/master_files/code/modules/jobs/job_types/freighter_crew.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/freighter_crew.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/freighter_crew.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/geneticist.dm b/modular_nova/master_files/code/modules/jobs/job_types/geneticist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/geneticist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/geneticist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/ghostcafe.dm b/modular_nova/master_files/code/modules/jobs/job_types/ghostcafe.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/ghostcafe.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/ghostcafe.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/head_of_personnel.dm b/modular_nova/master_files/code/modules/jobs/job_types/head_of_personnel.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/head_of_personnel.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/head_of_personnel.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/head_of_security.dm b/modular_nova/master_files/code/modules/jobs/job_types/head_of_security.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/head_of_security.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/head_of_security.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm b/modular_nova/master_files/code/modules/jobs/job_types/janitor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/janitor.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/janitor.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/medical_doctor.dm b/modular_nova/master_files/code/modules/jobs/job_types/medical_doctor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/medical_doctor.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/medical_doctor.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/mime.dm b/modular_nova/master_files/code/modules/jobs/job_types/mime.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/mime.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/mime.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/paramedic.dm b/modular_nova/master_files/code/modules/jobs/job_types/paramedic.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/paramedic.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/paramedic.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/psychologist.dm b/modular_nova/master_files/code/modules/jobs/job_types/psychologist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/psychologist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/psychologist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/research_director.dm b/modular_nova/master_files/code/modules/jobs/job_types/research_director.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/research_director.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/research_director.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/roboticist.dm b/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/roboticist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/scientist.dm b/modular_nova/master_files/code/modules/jobs/job_types/scientist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/scientist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/scientist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/security_officer.dm b/modular_nova/master_files/code/modules/jobs/job_types/security_officer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/security_officer.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/security_officer.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/shaft_miner.dm b/modular_nova/master_files/code/modules/jobs/job_types/shaft_miner.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/shaft_miner.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/shaft_miner.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/station_engineer.dm b/modular_nova/master_files/code/modules/jobs/job_types/station_engineer.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/station_engineer.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/station_engineer.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/tarkon.dm b/modular_nova/master_files/code/modules/jobs/job_types/tarkon.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/tarkon.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/tarkon.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/virologist.dm b/modular_nova/master_files/code/modules/jobs/job_types/virologist.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/virologist.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/virologist.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/job_types/warden.dm b/modular_nova/master_files/code/modules/jobs/job_types/warden.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/job_types/warden.dm
rename to modular_nova/master_files/code/modules/jobs/job_types/warden.dm
diff --git a/modular_skyrat/master_files/code/modules/jobs/off_duty_check.dm b/modular_nova/master_files/code/modules/jobs/off_duty_check.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/jobs/off_duty_check.dm
rename to modular_nova/master_files/code/modules/jobs/off_duty_check.dm
diff --git a/modular_skyrat/master_files/code/modules/language/language.dm b/modular_nova/master_files/code/modules/language/language.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/language/language.dm
rename to modular_nova/master_files/code/modules/language/language.dm
diff --git a/modular_skyrat/master_files/code/modules/language/language_holder.dm b/modular_nova/master_files/code/modules/language/language_holder.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/language/language_holder.dm
rename to modular_nova/master_files/code/modules/language/language_holder.dm
diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_debug.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_debug.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_debug.dm
rename to modular_nova/master_files/code/modules/logging/categories/log_category_debug.dm
diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_game.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_game.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_game.dm
rename to modular_nova/master_files/code/modules/logging/categories/log_category_game.dm
diff --git a/modular_skyrat/master_files/code/modules/logging/categories/log_category_uplink.dm b/modular_nova/master_files/code/modules/logging/categories/log_category_uplink.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/logging/categories/log_category_uplink.dm
rename to modular_nova/master_files/code/modules/logging/categories/log_category_uplink.dm
diff --git a/modular_skyrat/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/modular_nova/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
rename to modular_nova/master_files/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm
diff --git a/modular_skyrat/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm b/modular_nova/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm
rename to modular_nova/master_files/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_cytology.dm
diff --git a/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm b/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm
new file mode 100644
index 00000000000..ee4bfe64d04
--- /dev/null
+++ b/modular_nova/master_files/code/modules/mining/equipment/explorer_gear.dm
@@ -0,0 +1,11 @@
+/obj/item/clothing/suit/hooded/cloak/drake
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi'
+
+/obj/item/clothing/suit/hooded/cloak/goliath
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi'
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/head/hooded/cloakhood/goliath
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
diff --git a/modular_skyrat/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm b/modular_nova/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm
rename to modular_nova/master_files/code/modules/mob/dead/new_player/latejoin_menu.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm b/modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm
similarity index 98%
rename from modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm
rename to modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm
index c2b04c99382..f009ad46efe 100644
--- a/modular_skyrat/master_files/code/modules/mob/dead/new_player/preferences_setup.dm
+++ b/modular_nova/master_files/code/modules/mob/dead/new_player/preferences_setup.dm
@@ -8,7 +8,7 @@
switch(preview_pref)
if(PREVIEW_PREF_JOB)
mannequin.underwear_visibility = NONE
- if(preview_job) // SKYRAT EDIT CHANGE
+ if(preview_job) // NOVA EDIT CHANGE
// Silicons only need a very basic preview since there is no customization for them.
if (istype(preview_job, /datum/job/ai))
return image('icons/mob/silicon/ai.dmi', icon_state = resolve_ai_icon(read_preference(/datum/preference/choiced/ai_core_display)), dir = SOUTH)
@@ -36,7 +36,7 @@
if(gent)
gent.aroused = AROUSAL_FULL
gent.update_sprite_suffix()
-
+
// Apply visual quirks
// Yes we do it every time because it needs to be done after job gear
if(SSquirks?.initialized)
diff --git a/modular_skyrat/master_files/code/modules/mob/living/blood.dm b/modular_nova/master_files/code/modules/mob/living/blood.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/blood.dm
rename to modular_nova/master_files/code/modules/mob/living/blood.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm b/modular_nova/master_files/code/modules/mob/living/carbon/death.dm
similarity index 81%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/death.dm
index e7c3348e585..7d3c7ac33d7 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/carbon/death.dm
+++ b/modular_nova/master_files/code/modules/mob/living/carbon/death.dm
@@ -1,4 +1,4 @@
-// By temporarily removing the unspillable organs before calling the parent proc we can avoid Skyrat edits and make this less likely to break in the future
+// By temporarily removing the unspillable organs before calling the parent proc we can avoid NOVA EDITs and make this less likely to break in the future
/mob/living/carbon/spill_organs(drop_bitflags)
var/list/held_organs = list()
for(var/obj/item/organ/organ as anything in organs)
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/death.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/death.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human/death.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/lizardpeople.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/podpeople.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm
similarity index 77%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm
index 7d145267b94..1e056fb9ab1 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm
+++ b/modular_nova/master_files/code/modules/mob/living/carbon/human/species_type/snail.dm
@@ -1,12 +1,12 @@
#define SHELL_TRANSPARENCY_ALPHA 90
/datum/species/snail
- eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi' //This is to consolidate our icons and prevent future calamity.
+ eyes_icon = 'modular_nova/modules/organs/icons/snail_eyes.dmi' //This is to consolidate our icons and prevent future calamity.
mutantliver = /obj/item/organ/internal/liver/snail //This is just a better liver to deal with toxins, it's a thematic thing.
mutantheart = /obj/item/organ/internal/heart/snail //This gives them the shell buff where they take less damage from behind, and their heart's more durable.
exotic_blood = null
- eyes_icon = 'modular_skyrat/modules/organs/icons/snail_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/organs/icons/snail_eyes.dmi'
/datum/species/snail/on_species_gain(mob/living/carbon/new_snailperson, datum/species/old_species, pref_load)
. = ..()
@@ -24,9 +24,9 @@
uses_advanced_reskins = TRUE
unique_reskin = list(
"Conical Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "coneshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "coneshell"
),
"Round Shell" = list(
@@ -36,57 +36,57 @@
RESKIN_WORN_ICON_STATE = "snailshell"
),
"Cinnamon Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "cinnamonshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "cinnamonshell"
),
"Caramel Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "caramelshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "caramelshell"
),
"Metal Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "mechashell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "mechashell"
),
"Pyramid Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "pyramidshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "pyramidshell"
),
"Ivory Pyramid Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "pyramidshellwhite",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "pyramidshellwhite"
),
"Spiral Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "spiralshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "spiralshell"
),
"Ivory Spiral Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "spiralshellwhite",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "spiralshellwhite"
),
"Rocky Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "rockshell",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "rockshell"
),
"Ivory Rocky Shell" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi',
RESKIN_ICON_STATE = "rockshellwhite",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "rockshellwhite"
),
)
diff --git a/modular_skyrat/master_files/code/modules/mob/living/carbon/human_helpers.dm b/modular_nova/master_files/code/modules/mob/living/carbon/human_helpers.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/carbon/human_helpers.dm
rename to modular_nova/master_files/code/modules/mob/living/carbon/human_helpers.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm b/modular_nova/master_files/code/modules/mob/living/emote_popup.dm
similarity index 97%
rename from modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm
rename to modular_nova/master_files/code/modules/mob/living/emote_popup.dm
index 240cdd7706c..bdaa0b2c388 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/emote_popup.dm
+++ b/modular_nova/master_files/code/modules/mob/living/emote_popup.dm
@@ -1,5 +1,5 @@
/obj/effect/overlay/emote_popup
- icon = 'modular_skyrat/master_files/icons/mob/popup_flicks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/popup_flicks.dmi'
icon_state = "combat"
layer = FLY_LAYER
plane = GAME_PLANE
diff --git a/modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm b/modular_nova/master_files/code/modules/mob/living/examine_tgui.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm
rename to modular_nova/master_files/code/modules/mob/living/examine_tgui.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/human/monkey.dm b/modular_nova/master_files/code/modules/mob/living/human/monkey.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/human/monkey.dm
rename to modular_nova/master_files/code/modules/mob/living/human/monkey.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/human/species.dm b/modular_nova/master_files/code/modules/mob/living/human/species.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/human/species.dm
rename to modular_nova/master_files/code/modules/mob/living/human/species.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/living.dm b/modular_nova/master_files/code/modules/mob/living/living.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/living.dm
rename to modular_nova/master_files/code/modules/mob/living/living.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/living_defines.dm b/modular_nova/master_files/code/modules/mob/living/living_defines.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/living_defines.dm
rename to modular_nova/master_files/code/modules/mob/living/living_defines.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/living_movement.dm b/modular_nova/master_files/code/modules/mob/living/living_movement.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/living_movement.dm
rename to modular_nova/master_files/code/modules/mob/living/living_movement.dm
diff --git a/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm b/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm
new file mode 100644
index 00000000000..147b7f38285
--- /dev/null
+++ b/modular_nova/master_files/code/modules/mob/living/sillicon/robot.dm
@@ -0,0 +1,95 @@
+// Smoke particle effect for heavy-duty cyborgs
+/datum/component/robot_smoke
+
+/datum/component/robot_smoke/RegisterWithParent()
+ add_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke)
+ RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(dir_change))
+
+/datum/component/robot_smoke/UnregisterFromParent()
+ remove_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke)
+ UnregisterSignal(parent, COMSIG_ATOM_DIR_CHANGE)
+
+/datum/component/robot_smoke/Destroy()
+ return ..()
+
+/datum/component/robot_smoke/proc/dir_change(datum/source, olddir, newdir)
+ SIGNAL_HANDLER
+
+ var/atom/movable/movable_parent = parent
+
+ if(!movable_parent.particles)
+ return
+
+ var/truedir = movable_parent.dir
+ if(newdir && (truedir != newdir))
+ truedir = newdir
+
+ switch(truedir)
+ if(NORTH)
+ movable_parent.particles.position = list(-6, 12, 0)
+ movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2))
+ if(EAST)
+ movable_parent.particles.position = list(-6, 12, 0)
+ movable_parent.particles.drift = generator("vector", list(0, 0.4), list(-0.8, 0.2))
+ if(SOUTH)
+ movable_parent.particles.position = list(5, 12, 0)
+ movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2))
+ if(WEST)
+ movable_parent.particles.position = list(6, 12, 0)
+ movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.8, -0.2))
+
+
+/mob/living/silicon/robot/proc/toggle_smoke()
+ set name = "Toggle smoke"
+ set category = "AI Commands"
+
+ if(particles)
+ dissipate()
+ else if (!stat && !robot_resting)
+ do_jitter_animation(10)
+ playsound(src, 'modular_nova/master_files/sound/effects/robot_smoke.ogg', 50)
+ particles = new /particles/smoke/robot()
+
+/mob/living/silicon/robot/proc/dissipate()
+ particles.spawning = 0
+ addtimer(CALLBACK(src, PROC_REF(particles_qdel)), 1.5 SECONDS)
+
+/mob/living/silicon/robot/proc/particles_qdel()
+ QDEL_NULL(particles)
+
+/mob/living/silicon/robot/death()
+ . = ..()
+ if(GetComponent(/datum/component/robot_smoke))
+ dissipate()
+
+/mob/living/silicon/robot/robot_lay_down()
+ . = ..()
+
+ if(GetComponent(/datum/component/robot_smoke))
+ if(robot_resting)
+ dissipate()
+ else
+ return
+
+// The smoke
+/particles/smoke/robot
+ spawning = 0.4
+ lifespan = 1 SECONDS
+ fade = 0.75 SECONDS
+ position = list(5, 12, 0)
+ velocity = list(0, 0.2, 0)
+ friction = 0.35
+ scale = 0.5
+ grow = 0.1
+ spin = generator("num", -20, 20)
+
+// Another smoke effect
+/obj/effect/temp_visual/mook_dust/robot
+ icon = 'modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi'
+ icon_state = "impact_cloud"
+ color = "#a9a9a93c"
+
+/obj/effect/temp_visual/mook_dust/robot/table
+ color = "#ffffffc2"
+ pixel_y = -8
+ layer = ABOVE_MOB_LAYER
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm
similarity index 98%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm
index 28f8f3994b6..313fe8317ad 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/bumbles.dm
@@ -1,7 +1,7 @@
/mob/living/basic/pet/bumbles
name = "Bumbles"
desc = "Bumbles, the very humble bumblebee."
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
icon_state = "bumbles"
icon_living = "bumbles"
icon_dead = "bumbles_dead"
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm
similarity index 97%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm
index 27d1aabb67b..2c4ca2ac792 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm
@@ -1,7 +1,7 @@
/mob/living/basic/pet/dog/markus
name = "\proper Markus"
desc = "The supply department's overfed yet still beloved dog."
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
icon_state = "markus"
icon_dead = "markus_dead"
icon_living = "markus"
@@ -59,12 +59,12 @@
. = ..()
var/location = get_turf(holder.my_atom)
new /mob/living/basic/pet/dog/markus(location)
- playsound(location, 'modular_skyrat/master_files/sound/effects/dorime.ogg', vol = 100, vary = FALSE, extrarange = 7)
+ playsound(location, 'modular_nova/master_files/sound/effects/dorime.ogg', vol = 100, vary = FALSE, extrarange = 7)
/mob/living/basic/pet/dog/corgi/borgi
name = "E-N"
desc = "It's a borgi."
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
icon_state = "borgi"
icon_living = "borgi"
icon_dead = "borgi_dead"
@@ -337,7 +337,7 @@
/mob/living/basic/pet/dog/dobermann
name = "\improper dobermann"
desc = "A larger breed of dog."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "dobber"
icon_dead = "dobbydead"
icon_living = "dobber"
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm
similarity index 98%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm
index 37829815def..b210d39c1e8 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/pet/poppy
name = "Poppy the Safety Inspector"
desc = "Safety first!"
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
icon_state = "poppypossum"
icon_living = "poppypossum"
icon_dead = "poppypossum_dead"
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm
similarity index 95%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm
index e804bb3af5f..c5a436a577e 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/syndicatefox.dm
@@ -7,7 +7,7 @@
unique_pet = TRUE
ai_controller = /datum/ai_controller/basic_controller/dog
desc = "It's a Cybersun MiniVix robotic model wearing a microsized syndicate MODsuit and a cute little cap. Quite pretty."
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
icon_state = "syndifox"
icon_living = "syndifox"
icon_dead = "syndifox_dead"
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/bubblegum.dm
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm
similarity index 93%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm
index 85c3c90351a..33ce527bf2c 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm
@@ -3,47 +3,47 @@
/mob/living/basic/trooper/syndicate/melee/anthro
name = "Syndicate Shanker"
desc = "An anthromorphic red panda member of the Syndicate, wielding a knife."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndiredpan"
icon_living = "syndiredpan"
/mob/living/basic/trooper/syndicate/melee/sword/anthro
name = "Syndicate Sword Beast"
desc = "An anthromorphic fennec member of the Syndicate, wielding an energy sword and shield."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndifennec"
icon_living = "syndifennec"
/mob/living/basic/trooper/syndicate/ranged/anthro
name = "Syndicate Pistoleer"
desc = "An anthromorphic member of the Syndicate, wielding a pistol."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndisquirrel"
icon_living = "syndisquirrel"
/mob/living/basic/trooper/syndicate/ranged/smg/anthro
name = "Syndicate Rapid Gunnder"
desc = "A moth-person member of the Syndicate, wielding an SMG."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndimoth"
icon_living = "syndimoth"
/mob/living/basic/trooper/syndicate/melee/space/anthro/lizard
name = "Syndicate Commando Lizard"
desc = "A reptilian member of the Syndicate!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndilizard"
icon_living = "syndilizard"
/mob/living/basic/trooper/syndicate/ranged/space/anthro/cat
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndicat"
icon_living = "syndicat"
name = "Syndicate Commando Feline"
desc = "An anthromorphic feline member of the Syndicate."
/mob/living/basic/trooper/syndicate/ranged/shotgun/space/stormtrooper/anthro/fox
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "syndifox"
icon_living = "syndifox"
name = "Syndicate Stormtrooper Fox"
@@ -53,7 +53,7 @@
/mob/living/simple_animal/hostile/cult
name = "Blood Cultist"
desc = "A follower of the Blood Mother."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "cult"
icon_living = "cult"
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
@@ -169,7 +169,7 @@
/mob/living/simple_animal/hostile/cult/magic
name = "Cult Blood Mage"
desc = "A cultist with command over blood magic."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "cultmage"
icon_living = "cultmage"
move_to_delay = 10
@@ -219,7 +219,7 @@
/mob/living/simple_animal/hostile/looter
name = "Looter"
desc = "One of the many random looters or bandits of the frontiers. This one is carrying a pipe."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "scavpipe"
icon_living = "scavpipe"
loot = list(/obj/effect/spawner/random/maintenance/three)
@@ -243,7 +243,7 @@
/mob/living/simple_animal/hostile/looter/big
name = "Big Looter"
desc = "One of the many random looters of the frontiers. This guy is big, fat, and angry."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "fatscav"
icon_living = "fatscav"
loot = list(/obj/effect/spawner/random/maintenance/six)
@@ -276,7 +276,7 @@
ranged = 1
retreat_distance = 5
minimum_distance = 5
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "scavshotgun"
icon_living = "scavshotgun"
maxHealth = 90
@@ -317,7 +317,7 @@
/mob/living/simple_animal/hostile/evilborg
name = "Malfunctioning Cyborg"
desc = "A small cyborg unit, hacked or malfunctioning. It is likely hostile."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotold"
icon_living = "evilbotold"
gender = NEUTER
@@ -348,7 +348,7 @@
/mob/living/simple_animal/hostile/evilborg/heavy
name = "Malfunctioning Heavy Cyborg"
desc = "A large cyborg unit, hacked or malfunctioning. It- oh my god is that a chainsaw?!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotheavy"
icon_living = "evilbotheavy"
health = 125
@@ -362,7 +362,7 @@
/mob/living/simple_animal/hostile/evilborg/peace
name = "Malfunctioning Peacekeeper Cyborg"
desc = "A cyborg unit, hacked or malfunctioning. This is a Peacekeeper model."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotpeace"
icon_living = "evilbotpeace"
health = 90
@@ -376,7 +376,7 @@
/mob/living/simple_animal/hostile/evilborg/engi
name = "Malfunctioning Engineering Cyborg"
desc = "An engineering cyborg unit, hacked or malfunctioning- Oh shit that's a plasma bar."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotengi"
icon_living = "evilbotengi"
health = 100
@@ -391,7 +391,7 @@
/mob/living/simple_animal/hostile/evilborg/sec
name = "Malfunctioning Security Cyborg"
desc = "A security cyborg unit, hacked or malfunctioning. There are two guns attached to it."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotsec"
icon_living = "evilbotsec"
casingtype = /obj/item/ammo_casing/c45
@@ -408,7 +408,7 @@
/mob/living/simple_animal/hostile/evilborg/roomba
name = "Malfunctioning Roomba Cyborg"
desc = "A roomba, hacked or malfunctioning- OW MY FOOT!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "evilbotroomba"
icon_living = "evilbotroomba"
health = 80
@@ -422,7 +422,7 @@
/mob/living/simple_animal/hostile/evilborg/dog
name = "Malfunctioning Canine Cyborg"
desc = "A canine-borg, hacked or malfunctioning. This one appears to be a mining variant."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs64x32.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs64x32.dmi'
icon_state = "evilbotmine"
icon_living = "evilbotmine"
health = 115
@@ -436,7 +436,7 @@
/mob/living/simple_animal/hostile/evilborg/dogstrong
name = "Corrupt Hound"
desc = "A canine-borg, hacked or malfunctioning. This one is large, imposing, and can pack a big punch."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs64x32.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs64x32.dmi'
icon_state = "evilbotelite" // ported from VORE
icon_living = "evilbotelite"
health = 130
@@ -450,7 +450,7 @@
/mob/living/simple_animal/hostile/evilborg/bigguy
name = "Malfunctioning Military robot"
desc = "A military robot unit, hacked or malfunctioning. This one looks really tough.."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "sentrybot"
icon_living = "sentrybot"
casingtype = /obj/item/ammo_casing/c45
@@ -467,7 +467,7 @@
/mob/living/simple_animal/hostile/evilborg/protect
name = "Malfunctioning Standard Robot"
desc = "A civlian model robot, hacked or malfunctioning with mechanical claw arms."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "protectbot"
icon_living = "protectbot"
health = 100
@@ -483,7 +483,7 @@
/mob/living/simple_animal/hostile/bigcrab
name = "giant crab"
desc = "Clickity Clack!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "giantcrab"
icon_living = "giantcrab"
icon_dead = "giantcrab_d"
@@ -519,7 +519,7 @@
/mob/living/simple_animal/hostile/trog
name = "mutated human"
desc = "Either some kind of experiment gone wrong, or the result of mutations from plasma exposure."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "trog"
icon_living = "trog"
icon_dead = "trog_dead"
@@ -558,7 +558,7 @@
/mob/living/simple_animal/hostile/plantmutant
name = "plant mutant"
desc = "Some sort of humanoid mutated by plants or fungus spores into a horrific monster."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "plantmonster"
icon_living = "plantmonster"
icon_dead = "plantmonster_dead"
@@ -596,7 +596,7 @@
/mob/living/simple_animal/hostile/cazador
name = "cazador"
desc = "You feel a little whoozy..."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "cazador"
icon_living = "cazador"
icon_dead = "cazador_dead"
@@ -635,7 +635,7 @@
/mob/living/simple_animal/hostile/mutantliz
name = "mutant lizard"
desc = "A large, mutated lizard-creature with jagged teeth and sharp claws."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs64x64.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs64x64.dmi'
icon_state = "mutantliz"
icon_living = "mutantliz"
icon_dead = "mutantliz_d"
@@ -670,7 +670,7 @@
/mob/living/simple_animal/hostile/scorpion
name = "big scorpion"
desc = "An abnormally large scorpion. Watch that stinger!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "scorpion"
icon_living = "scorpion"
icon_dead = "scorpion_d"
@@ -702,7 +702,7 @@
/mob/living/simple_animal/hostile/syndimouse
name = "Syndicate Mousepretive"
desc = "A mouse in a Syndicate combat MODsuit, built for mice!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "mouse_operative"
icon_living = "mouse_operative"
icon_dead = "mouse_operative_dead"
@@ -742,7 +742,7 @@
/mob/living/simple_animal/hostile/mannequin
name = "living mannequin"
desc = "A strange, living, wooden mannequin. Spooky!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "mannequin"
icon_living = "mannequin"
mob_biotypes = MOB_UNDEAD
@@ -773,7 +773,7 @@
/mob/living/simple_animal/hostile/engorge
name = "Talon Demon"
desc = "A demonic creature that moves relatively fast, but doesn't do a lot of damage."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "engorgedemon"
icon_living = "engorgedemon"
icon_dead = "demondead"
@@ -808,7 +808,7 @@
/mob/living/simple_animal/hostile/devourdem
name = "Devour Lord"
desc = "This creature is terror itself, a manifestation of the raw hunger and avarice of mortals."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs32x64.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs32x64.dmi'
icon_state = "devourdemon"
icon_living = "devourdemon"
icon_dead = "demondead"
@@ -845,7 +845,7 @@
/mob/living/simple_animal/hostile/vox
name = "Vox Raider"
desc = "Vox are typically one of two things. Shady traders or hostile raiders. This one seems to be pretty hostile."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "vox"
icon_living = "vox"
icon_dead = "voxdead"
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm
similarity index 86%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm
index 03e34e029f3..f097f07a742 100644
--- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm
+++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/hostile/zombie.dm
@@ -7,7 +7,7 @@
/mob/living/simple_animal/hostile/zombie/cheesezombie
name = "Cheese Zombie"
desc = "Oh God it stinks!!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "cheesezomb"
icon_living = "cheesezomb"
maxHealth = 100
diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/simple_animal.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/simple_animal.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob/living/simple_animal/simple_animal.dm
rename to modular_nova/master_files/code/modules/mob/living/simple_animal/simple_animal.dm
diff --git a/modular_nova/master_files/code/modules/mob/login.dm b/modular_nova/master_files/code/modules/mob/login.dm
new file mode 100644
index 00000000000..96c9a6c2d2b
--- /dev/null
+++ b/modular_nova/master_files/code/modules/mob/login.dm
@@ -0,0 +1,10 @@
+/mob/Login()
+ . = ..()
+
+ if(!.)
+ return FALSE
+
+ if(SSplayer_ranks.initialized)
+ SSplayer_ranks.update_prefs_donator_status(client?.prefs)
+
+ return TRUE
diff --git a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm b/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
rename to modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm
diff --git a/modular_nova/master_files/code/modules/mod/mod_clothes.dm b/modular_nova/master_files/code/modules/mod/mod_clothes.dm
new file mode 100644
index 00000000000..54076643c23
--- /dev/null
+++ b/modular_nova/master_files/code/modules/mod/mod_clothes.dm
@@ -0,0 +1,22 @@
+// MODsuit-related overrides for our digitigrade sprites and such
+/obj/item/clothing/head/mod
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/mod.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi'
+
+/obj/item/clothing/suit/mod
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/mod.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi'
+
+/obj/item/clothing/gloves/mod
+ supports_variations_flags = NONE
+ worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi'
+
+/obj/item/clothing/shoes/mod
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/mod.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod.dmi'
+
+/obj/item/mod/control
+ worn_icon_better_vox = 'modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi'
diff --git a/modular_skyrat/master_files/code/modules/mod/mod_types.dm b/modular_nova/master_files/code/modules/mod/mod_types.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mod/mod_types.dm
rename to modular_nova/master_files/code/modules/mod/mod_types.dm
diff --git a/modular_skyrat/master_files/code/modules/mod/modules/_module.dm b/modular_nova/master_files/code/modules/mod/modules/_module.dm
similarity index 95%
rename from modular_skyrat/master_files/code/modules/mod/modules/_module.dm
rename to modular_nova/master_files/code/modules/mod/modules/_module.dm
index 829489d88f3..def83390136 100644
--- a/modular_skyrat/master_files/code/modules/mod/modules/_module.dm
+++ b/modular_nova/master_files/code/modules/mod/modules/_module.dm
@@ -64,7 +64,7 @@
icon_to_use = worn_icon_vox
if(suit_supports_variations_flags && (supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION))
- icon_to_use = 'modular_skyrat/master_files/icons/mob/mod.dmi'
+ icon_to_use = 'modular_nova/master_files/icons/mob/mod.dmi'
icon_state_to_use = "[module_icon_state]_digi"
var/add_overlay = TRUE
@@ -78,14 +78,14 @@
. += module_icon
if(has_head_sprite)
- icon_to_use = 'modular_skyrat/master_files/icons/mob/mod.dmi'
+ icon_to_use = 'modular_nova/master_files/icons/mob/mod.dmi'
icon_state_to_use = "[module_icon_state]_head"
if(suit_supports_variations_flags && (supports_variations_flags & CLOTHING_SNOUTED_VARIATION))
icon_state_to_use = "[icon_state_to_use]_muzzled"
if(is_new_vox)
- icon_to_use = 'modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi'
+ icon_to_use = 'modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi'
icon_state_to_use = module_icon_state
var/mutable_appearance/additional_module_icon = mutable_appearance(icon_to_use, icon_state_to_use, layer = standing.layer + 0.1)
diff --git a/modular_skyrat/master_files/code/modules/mod/modules/modules_antag.dm b/modular_nova/master_files/code/modules/mod/modules/modules_antag.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mod/modules/modules_antag.dm
rename to modular_nova/master_files/code/modules/mod/modules/modules_antag.dm
diff --git a/modular_skyrat/master_files/code/modules/mod/modules/modules_supply.dm b/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/mod/modules/modules_supply.dm
rename to modular_nova/master_files/code/modules/mod/modules/modules_supply.dm
diff --git a/modular_skyrat/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm b/modular_nova/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm
rename to modular_nova/master_files/code/modules/modular_computers/computers/item/laptop_presets.dm
diff --git a/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
new file mode 100644
index 00000000000..061d421afd5
--- /dev/null
+++ b/modular_nova/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
@@ -0,0 +1,3 @@
+// Makes camera app readily available to crew
+/datum/computer_file/program/maintenance/camera
+ program_flags = PROGRAM_ON_NTNET_STORE
diff --git a/modular_skyrat/master_files/code/modules/pai/card.dm b/modular_nova/master_files/code/modules/pai/card.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/pai/card.dm
rename to modular_nova/master_files/code/modules/pai/card.dm
diff --git a/modular_skyrat/master_files/code/modules/paperwork/employment_contract.dm b/modular_nova/master_files/code/modules/paperwork/employment_contract.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/paperwork/employment_contract.dm
rename to modular_nova/master_files/code/modules/paperwork/employment_contract.dm
diff --git a/modular_nova/master_files/code/modules/paperwork/stamps.dm b/modular_nova/master_files/code/modules/paperwork/stamps.dm
new file mode 100644
index 00000000000..b8e6861951e
--- /dev/null
+++ b/modular_nova/master_files/code/modules/paperwork/stamps.dm
@@ -0,0 +1,82 @@
+/obj/item/stamp/cat
+ name = "\improper Official Cat Stamp"
+ desc = "A rubber stamp for stamping documents of questionable importance."
+ icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi'
+ icon_state = "stamp-cat_blue"
+ inhand_icon_state = "stamp"
+// Radial menu options
+ var/static/cat_blue = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_blue")
+ var/static/paw_blue = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_blue")
+ var/static/cat_red = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_red")
+ var/static/paw_red = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_red")
+ var/static/cat_orange = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_orange")
+ var/static/paw_orange = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_orange")
+ var/static/cat_green = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_green")
+ var/static/paw_green = image(icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_green")
+// Choices for the radial menu
+ var/static/list/radial_options = list(
+ "cat_blue" = cat_blue,
+ "paw_blue" = paw_blue,
+ "cat_red" = cat_red,
+ "paw_red" = paw_red,
+ "cat_orange" = cat_orange,
+ "paw_orange" = paw_orange,
+ "cat_green" = cat_green,
+ "paw_green" = paw_green
+ )
+
+/obj/item/stamp/cat/ui_interact(mob/user)
+ . = ..()
+ var/choice = show_radial_menu(user, src, radial_options)
+ switch(choice)
+ if("cat_blue")
+ icon_state = "stamp-cat_blue"
+ dye_color = DYE_HOP
+ name = "\improper Official Cat Stamp"
+ if("paw_blue")
+ icon_state = "stamp-paw_blue"
+ dye_color = DYE_HOP
+ name = "\improper Paw Stamp"
+
+ if("cat_red")
+ icon_state = "stamp-cat_red"
+ dye_color = DYE_HOS
+ name = "\improper Official Cat Stamp"
+ if("paw_red")
+ icon_state = "stamp-paw_red"
+ dye_color = DYE_HOS
+ name = "\improper Paw Stamp"
+
+ if("cat_orange")
+ icon_state = "stamp-cat_orange"
+ dye_color = DYE_QM
+ name = "\improper Official Cat Stamp"
+ if("paw_orange")
+ icon_state = "stamp-paw_orange"
+ dye_color = DYE_QM
+ name = "\improper Paw Stamp"
+
+ if("cat_green")
+ icon_state = "stamp-cat_green"
+ dye_color = DYE_CENTCOM
+ name = "\improper Official Cat Stamp"
+ if("paw_green")
+ icon_state = "stamp-paw_green"
+ dye_color = DYE_CENTCOM
+ name = "\improper Paw Stamp"
+
+ else
+ return
+
+/obj/item/stamp/nri
+ name = "\improper Novaya Rossiyskaya Imperia stamp"
+ desc = "A rubber stamp for stamping important documents. Used in various NRI documents."
+ icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi'
+ icon_state = "stamp-nri"
+ dye_color = DYE_CENTCOM
+
+/obj/item/stamp/solfed
+ name = "\improper Solar Federation stamp"
+ icon = 'modular_nova/master_files/icons/obj/bureaucracy.dmi'
+ icon_state = "stamp-solfed"
+ dye_color = DYE_CE
diff --git a/modular_skyrat/master_files/code/modules/power/cable.dm b/modular_nova/master_files/code/modules/power/cable.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/power/cable.dm
rename to modular_nova/master_files/code/modules/power/cable.dm
diff --git a/modular_skyrat/master_files/code/modules/power/lighting/light_mapping_helpers.dm b/modular_nova/master_files/code/modules/power/lighting/light_mapping_helpers.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/power/lighting/light_mapping_helpers.dm
rename to modular_nova/master_files/code/modules/power/lighting/light_mapping_helpers.dm
diff --git a/modular_skyrat/master_files/code/modules/power/powernet.dm b/modular_nova/master_files/code/modules/power/powernet.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/power/powernet.dm
rename to modular_nova/master_files/code/modules/power/powernet.dm
diff --git a/modular_skyrat/master_files/code/modules/power/singularity/containment_field.dm b/modular_nova/master_files/code/modules/power/singularity/containment_field.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/power/singularity/containment_field.dm
rename to modular_nova/master_files/code/modules/power/singularity/containment_field.dm
diff --git a/modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm
rename to modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/shotgun.dm
diff --git a/modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm b/modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm
rename to modular_nova/master_files/code/modules/projectiles/boxes_magazines/external/smg.dm
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic.dm
rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic.dm
diff --git a/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm
new file mode 100644
index 00000000000..d65b0143749
--- /dev/null
+++ b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm
@@ -0,0 +1,8 @@
+/obj/item/gun/ballistic/bow
+ item_flags = NEEDS_PERMIT
+ trigger_guard = TRIGGER_GUARD_ALLOW_ALL
+
+/obj/item/gun/ballistic/bow/attack_self(mob/user)
+ . = ..()
+ if(chambered)
+ playsound(src, 'modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0)
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm
rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm
diff --git a/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm
new file mode 100644
index 00000000000..32d7b5928ff
--- /dev/null
+++ b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm
@@ -0,0 +1,7 @@
+/obj/item/gun/ballistic/bow/longbow
+ worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi'
+ slot_flags = ITEM_SLOT_BACK
+ icon_state = "bow"
+ inhand_icon_state = "bow"
+ base_icon_state = "bow"
+ worn_icon_state = "bow"
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/revolver.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/revolver.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/revolver.dm
rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic/revolver.dm
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm b/modular_nova/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm
rename to modular_nova/master_files/code/modules/projectiles/guns/ballistic/suppressor.dm
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/energy.dm b/modular_nova/master_files/code/modules/projectiles/guns/energy.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/projectiles/guns/energy.dm
rename to modular_nova/master_files/code/modules/projectiles/guns/energy.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/bottle.dm b/modular_nova/master_files/code/modules/reagents/bottle.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/bottle.dm
rename to modular_nova/master_files/code/modules/reagents/bottle.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/colors.dm b/modular_nova/master_files/code/modules/reagents/chemistry/colors.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/chemistry/colors.dm
rename to modular_nova/master_files/code/modules/reagents/chemistry/colors.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/holder.dm b/modular_nova/master_files/code/modules/reagents/chemistry/holder.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/chemistry/holder.dm
rename to modular_nova/master_files/code/modules/reagents/chemistry/holder.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/chemistry/reagents.dm b/modular_nova/master_files/code/modules/reagents/chemistry/reagents.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/chemistry/reagents.dm
rename to modular_nova/master_files/code/modules/reagents/chemistry/reagents.dm
diff --git a/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm b/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm
new file mode 100644
index 00000000000..e710b9d0eac
--- /dev/null
+++ b/modular_nova/master_files/code/modules/reagents/chemistry/recipes.dm
@@ -0,0 +1,6 @@
+// Pollution vars
+/datum/chemical_reaction
+ /// If defined, it'll emit that pollutant on reaction
+ var/pollutant_type
+ /// How much amount per volume of the pollutant shall we emit if `pollutant_type` is defined
+ var/pollutant_amount = 1
diff --git a/modular_skyrat/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm b/modular_nova/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm
rename to modular_nova/master_files/code/modules/reagents/medicine_reagents/medicine_reagents.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/reagent_containers.dm b/modular_nova/master_files/code/modules/reagents/reagent_containers.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/reagent_containers.dm
rename to modular_nova/master_files/code/modules/reagents/reagent_containers.dm
diff --git a/modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm b/modular_nova/master_files/code/modules/reagents/withdrawal/generic_addictions.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/reagents/withdrawal/generic_addictions.dm
rename to modular_nova/master_files/code/modules/reagents/withdrawal/generic_addictions.dm
diff --git a/modular_skyrat/master_files/code/modules/religion/religious_sects.dm b/modular_nova/master_files/code/modules/religion/religious_sects.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/religion/religious_sects.dm
rename to modular_nova/master_files/code/modules/religion/religious_sects.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/biogenerator_designs.dm b/modular_nova/master_files/code/modules/research/designs/biogenerator_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/biogenerator_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/biogenerator_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm b/modular_nova/master_files/code/modules/research/designs/limbgrower_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/limbgrower_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/limbgrower_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/mechfabricator_designs.dm b/modular_nova/master_files/code/modules/research/designs/mechfabricator_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/mechfabricator_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/mechfabricator_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/medical_designs.dm b/modular_nova/master_files/code/modules/research/designs/medical_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/medical_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/medical_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm b/modular_nova/master_files/code/modules/research/designs/misc_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/misc_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/misc_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/designs/tool_designs.dm b/modular_nova/master_files/code/modules/research/designs/tool_designs.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/designs/tool_designs.dm
rename to modular_nova/master_files/code/modules/research/designs/tool_designs.dm
diff --git a/modular_skyrat/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm b/modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm
rename to modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm
diff --git a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm
similarity index 99%
rename from modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
rename to modular_nova/master_files/code/modules/research/techweb/all_nodes.dm
index 3a7d072b7fa..5ee944941e9 100644
--- a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
+++ b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm
@@ -30,6 +30,7 @@
design_ids += list(
"polarizer",
"vox_gas_filter",
+ "gbp_machine",
)
return ..()
diff --git a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm b/modular_nova/master_files/code/modules/shuttle/shuttle.dm
similarity index 89%
rename from modular_skyrat/master_files/code/modules/shuttle/shuttle.dm
rename to modular_nova/master_files/code/modules/shuttle/shuttle.dm
index 257d8fb8846..896dcf37bd1 100644
--- a/modular_skyrat/master_files/code/modules/shuttle/shuttle.dm
+++ b/modular_nova/master_files/code/modules/shuttle/shuttle.dm
@@ -2,9 +2,9 @@
/// Does this shuttle play sounds upon landing and takeoff?
var/shuttle_sounds = TRUE
/// The take off sound to be played
- var/takeoff_sound = sound('modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg')
+ var/takeoff_sound = sound('modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg')
/// The landing sound to be played
- var/landing_sound = sound('modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg')
+ var/landing_sound = sound('modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg')
/// The sound range coeff for the landing and take off sound effect
var/sound_range = 20
diff --git a/modular_skyrat/master_files/code/modules/shuttle/shuttle_events/meteors.dm b/modular_nova/master_files/code/modules/shuttle/shuttle_events/meteors.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/shuttle/shuttle_events/meteors.dm
rename to modular_nova/master_files/code/modules/shuttle/shuttle_events/meteors.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/bodyparts/_bodyparts.dm b/modular_nova/master_files/code/modules/surgery/bodyparts/_bodyparts.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/bodyparts/_bodyparts.dm
rename to modular_nova/master_files/code/modules/surgery/bodyparts/_bodyparts.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm b/modular_nova/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm
rename to modular_nova/master_files/code/modules/surgery/organs/external/wings/functional_wings.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/external/wings/wings.dm b/modular_nova/master_files/code/modules/surgery/organs/external/wings/wings.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/organs/external/wings/wings.dm
rename to modular_nova/master_files/code/modules/surgery/organs/external/wings/wings.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm b/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm
rename to modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/organs/tongue.dm b/modular_nova/master_files/code/modules/surgery/organs/tongue.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/organs/tongue.dm
rename to modular_nova/master_files/code/modules/surgery/organs/tongue.dm
diff --git a/modular_skyrat/master_files/code/modules/surgery/surgery.dm b/modular_nova/master_files/code/modules/surgery/surgery.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/surgery/surgery.dm
rename to modular_nova/master_files/code/modules/surgery/surgery.dm
diff --git a/modular_skyrat/master_files/code/modules/vehicles/sealed.dm b/modular_nova/master_files/code/modules/vehicles/sealed.dm
similarity index 100%
rename from modular_skyrat/master_files/code/modules/vehicles/sealed.dm
rename to modular_nova/master_files/code/modules/vehicles/sealed.dm
diff --git a/modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm b/modular_nova/master_files/code/modules/vehicles/snowmobile.dm
similarity index 89%
rename from modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm
rename to modular_nova/master_files/code/modules/vehicles/snowmobile.dm
index 81ad9c4a140..aea76f314a3 100644
--- a/modular_skyrat/master_files/code/modules/vehicles/snowmobile.dm
+++ b/modular_nova/master_files/code/modules/vehicles/snowmobile.dm
@@ -2,7 +2,7 @@
name = "snowmobile"
desc = "A tracked vehicle designed for use in the snow, it looks like it would have difficulty moving elsewhere, however."
icon_state = "snowmobile"
- icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi'
+ icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi'
var/static/list/snow_typecache = typecacheof(list(/turf/open/misc/asteroid/snow/icemoon, /turf/open/floor/plating/snowed/smoothed/icemoon))
/obj/vehicle/ridden/atv/snowmobile/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
@@ -19,7 +19,7 @@
name = "security snowmobile"
desc = "For when you want to look like even more of a tool than riding a secway."
icon_state = "snowcurity"
- icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi'
+ icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi'
key_type = /obj/item/key/security
/datum/component/riding/vehicle/atv/snowmobile/snowcurity
@@ -40,5 +40,5 @@
name = "snowmobile"
desc = "A tracked vehicle designed for use in the snow, emblazened with Syndicate colors."
icon_state = "syndimobile"
- icon = 'modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi'
+ icon = 'modular_nova/master_files/icons/obj/vehicles/vehicles.dmi'
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi b/modular_nova/master_files/icons/donator/mob/clothing/belt.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/belt.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi b/modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi b/modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi b/modular_nova/master_files/icons/donator/mob/clothing/feet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/feet.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi b/modular_nova/master_files/icons/donator/mob/clothing/hands.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/hands.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi b/modular_nova/master_files/icons/donator/mob/clothing/head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/head.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi b/modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi b/modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi b/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/mask.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi b/modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi b/modular_nova/master_files/icons/donator/mob/clothing/neck.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/neck.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi b/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/suit.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi
rename to modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi
rename to modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi
diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi b/modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi
rename to modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi b/modular_nova/master_files/icons/donator/obj/clothing/belts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/belts.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi b/modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi b/modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi b/modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi b/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/hats.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi b/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/masks.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi b/modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi b/modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi b/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/suits.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi
rename to modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/custom.dmi b/modular_nova/master_files/icons/donator/obj/custom.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/custom.dmi
rename to modular_nova/master_files/icons/donator/obj/custom.dmi
diff --git a/modular_skyrat/master_files/icons/donator/obj/kits.dmi b/modular_nova/master_files/icons/donator/obj/kits.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/donator/obj/kits.dmi
rename to modular_nova/master_files/icons/donator/obj/kits.dmi
diff --git a/modular_skyrat/master_files/icons/effects/overlay_effects.dmi b/modular_nova/master_files/icons/effects/overlay_effects.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/effects/overlay_effects.dmi
rename to modular_nova/master_files/icons/effects/overlay_effects.dmi
diff --git a/modular_skyrat/master_files/icons/effects/tele_effects.dmi b/modular_nova/master_files/icons/effects/tele_effects.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/effects/tele_effects.dmi
rename to modular_nova/master_files/icons/effects/tele_effects.dmi
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects.dmi b/modular_nova/master_files/icons/effects/turf_effects.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/effects/turf_effects.dmi
rename to modular_nova/master_files/icons/effects/turf_effects.dmi
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_64.dmi b/modular_nova/master_files/icons/effects/turf_effects_64.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/effects/turf_effects_64.dmi
rename to modular_nova/master_files/icons/effects/turf_effects_64.dmi
diff --git a/modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi b/modular_nova/master_files/icons/effects/turf_effects_icons.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi
rename to modular_nova/master_files/icons/effects/turf_effects_icons.dmi
diff --git a/modular_skyrat/master_files/icons/emoji.dmi b/modular_nova/master_files/icons/emoji.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/emoji.dmi
rename to modular_nova/master_files/icons/emoji.dmi
diff --git a/modular_skyrat/master_files/icons/hud/actions.dmi b/modular_nova/master_files/icons/hud/actions.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/hud/actions.dmi
rename to modular_nova/master_files/icons/hud/actions.dmi
diff --git a/modular_skyrat/master_files/icons/hud/lobby/bottom_buttons.dmi b/modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/hud/lobby/bottom_buttons.dmi
rename to modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi
diff --git a/modular_skyrat/master_files/icons/import.dmi b/modular_nova/master_files/icons/import.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/import.dmi
rename to modular_nova/master_files/icons/import.dmi
diff --git a/modular_skyrat/master_files/icons/misc/buildmode.dmi b/modular_nova/master_files/icons/misc/buildmode.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/misc/buildmode.dmi
rename to modular_nova/master_files/icons/misc/buildmode.dmi
diff --git a/modular_skyrat/master_files/icons/misc/language.dmi b/modular_nova/master_files/icons/misc/language.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/misc/language.dmi
rename to modular_nova/master_files/icons/misc/language.dmi
diff --git a/modular_skyrat/master_files/icons/mob/64x32_blood.dmi b/modular_nova/master_files/icons/mob/64x32_blood.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/64x32_blood.dmi
rename to modular_nova/master_files/icons/mob/64x32_blood.dmi
diff --git a/modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi b/modular_nova/master_files/icons/mob/64x32_item_damage.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/64x32_item_damage.dmi
rename to modular_nova/master_files/icons/mob/64x32_item_damage.dmi
diff --git a/modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi b/modular_nova/master_files/icons/mob/64x64_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi
rename to modular_nova/master_files/icons/mob/64x64_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/64x64_righthand.dmi b/modular_nova/master_files/icons/mob/64x64_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/64x64_righthand.dmi
rename to modular_nova/master_files/icons/mob/64x64_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/a.dmi b/modular_nova/master_files/icons/mob/a.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/a.dmi
rename to modular_nova/master_files/icons/mob/a.dmi
diff --git a/modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi b/modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi
rename to modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi
diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_items.dmi b/modular_nova/master_files/icons/mob/actions/actions_items.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/actions/actions_items.dmi
rename to modular_nova/master_files/icons/mob/actions/actions_items.dmi
diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi b/modular_nova/master_files/icons/mob/actions/actions_nif.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi
rename to modular_nova/master_files/icons/mob/actions/actions_nif.dmi
diff --git a/modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi b/modular_nova/master_files/icons/mob/actions/actions_slime.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi
rename to modular_nova/master_files/icons/mob/actions/actions_slime.dmi
diff --git a/modular_skyrat/master_files/icons/mob/agateraminhandsleft.dmi b/modular_nova/master_files/icons/mob/agateraminhandsleft.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/agateraminhandsleft.dmi
rename to modular_nova/master_files/icons/mob/agateraminhandsleft.dmi
diff --git a/modular_skyrat/master_files/icons/mob/agateraminhandsright.dmi b/modular_nova/master_files/icons/mob/agateraminhandsright.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/agateraminhandsright.dmi
rename to modular_nova/master_files/icons/mob/agateraminhandsright.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi b/modular_nova/master_files/icons/mob/augmentation/bshipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/bshipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi b/modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi b/modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi b/modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi b/modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi b/modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi b/modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi b/modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi
rename to modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/heterochromia.dmi b/modular_nova/master_files/icons/mob/body_markings/heterochromia.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/heterochromia.dmi
rename to modular_nova/master_files/icons/mob/body_markings/heterochromia.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/other_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/other_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi b/modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi
rename to modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi b/modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi
rename to modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi b/modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi
rename to modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi b/modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi
rename to modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi
diff --git a/modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi b/modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi
rename to modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/accessories.dmi b/modular_nova/master_files/icons/mob/clothing/accessories.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/accessories.dmi
rename to modular_nova/master_files/icons/mob/clothing/accessories.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/back.dmi b/modular_nova/master_files/icons/mob/clothing/back.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/back.dmi
rename to modular_nova/master_files/icons/mob/clothing/back.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/belt.dmi b/modular_nova/master_files/icons/mob/clothing/belt.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/belt.dmi
rename to modular_nova/master_files/icons/mob/clothing/belt.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/belt_mirror.dmi b/modular_nova/master_files/icons/mob/clothing/belt_mirror.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/belt_mirror.dmi
rename to modular_nova/master_files/icons/mob/clothing/belt_mirror.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/ears.dmi b/modular_nova/master_files/icons/mob/clothing/ears.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/ears.dmi
rename to modular_nova/master_files/icons/mob/clothing/ears.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/eyes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/eyes.dmi
rename to modular_nova/master_files/icons/mob/clothing/eyes.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/eyes_vox.dmi b/modular_nova/master_files/icons/mob/clothing/eyes_vox.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/eyes_vox.dmi
rename to modular_nova/master_files/icons/mob/clothing/eyes_vox.dmi
diff --git a/modular_nova/master_files/icons/mob/clothing/feet.dmi b/modular_nova/master_files/icons/mob/clothing/feet.dmi
new file mode 100644
index 00000000000..563d63d374e
Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/feet.dmi differ
diff --git a/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi b/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi
new file mode 100644
index 00000000000..2c5f223792d
Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/feet_digi.dmi differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/hands.dmi b/modular_nova/master_files/icons/mob/clothing/hands.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/hands.dmi
rename to modular_nova/master_files/icons/mob/clothing/hands.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head.dmi b/modular_nova/master_files/icons/mob/clothing/head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head.dmi
rename to modular_nova/master_files/icons/mob/clothing/head.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi b/modular_nova/master_files/icons/mob/clothing/head/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/akula.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/akula.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi b/modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/akula_official.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/bio_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/bio_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/chaplain.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi b/modular_nova/master_files/icons/mob/clothing/head/costume.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/costume.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi b/modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi b/modular_nova/master_files/icons/mob/clothing/head/helmet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/helmet.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi b/modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi b/modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/spacehelm_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi b/modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi
rename to modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi b/modular_nova/master_files/icons/mob/clothing/head_vox.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi
rename to modular_nova/master_files/icons/mob/clothing/head_vox.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/mask.dmi b/modular_nova/master_files/icons/mob/clothing/mask.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/mask.dmi
rename to modular_nova/master_files/icons/mob/clothing/mask.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi b/modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi
rename to modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/neck.dmi b/modular_nova/master_files/icons/mob/clothing/neck.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/neck.dmi
rename to modular_nova/master_files/icons/mob/clothing/neck.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/monkey/uniform.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/monkey/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/accessories.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/accessories.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/back.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/back.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/ears.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/ears.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/eyes.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/eyes.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/feet.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/feet_64.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/hands.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/hands.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/neck.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/neck.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/feet_64.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi
rename to modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit.dmi b/modular_nova/master_files/icons/mob/clothing/suit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suit.dmi
rename to modular_nova/master_files/icons/mob/clothing/suit.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suit_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suit_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_hoof.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_hoof.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_hoof.dmi
rename to modular_nova/master_files/icons/mob/clothing/suit_taur_hoof.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_paw.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_paw.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_paw.dmi
rename to modular_nova/master_files/icons/mob/clothing/suit_taur_paw.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suit_taur_snake.dmi b/modular_nova/master_files/icons/mob/clothing/suit_taur_snake.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suit_taur_snake.dmi
rename to modular_nova/master_files/icons/mob/clothing/suit_taur_snake.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi b/modular_nova/master_files/icons/mob/clothing/suits/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/akula.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/akula.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi b/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/armor.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/bio_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/chaplain.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi b/modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/labcoat.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/labcoat_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi b/modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/suits/wizard_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi b/modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi
rename to modular_nova/master_files/icons/mob/clothing/taur_masking_helpers.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/towel.dmi b/modular_nova/master_files/icons/mob/clothing/towel.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/towel.dmi
rename to modular_nova/master_files/icons/mob/clothing/towel.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi b/modular_nova/master_files/icons/mob/clothing/towel_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/towel_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/towel_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi b/modular_nova/master_files/icons/mob/clothing/under/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/akula.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/akula.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi b/modular_nova/master_files/icons/mob/clothing/under/cargo.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/cargo.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi b/modular_nova/master_files/icons/mob/clothing/under/centcom.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/centcom.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi b/modular_nova/master_files/icons/mob/clothing/under/civilian.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/civilian.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/command.dmi b/modular_nova/master_files/icons/mob/clothing/under/command.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/command.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/command.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/command_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi
diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi
new file mode 100644
index 00000000000..8439d78c6e1
Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi differ
diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi
new file mode 100644
index 00000000000..bd1262a82c8
Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi b/modular_nova/master_files/icons/mob/clothing/under/engineering.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/engineering.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/medical.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi b/modular_nova/master_files/icons/mob/clothing/under/misc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/misc.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/misc_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi b/modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/rnd.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/security.dmi b/modular_nova/master_files/icons/mob/clothing/under/security.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/security.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/security.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi b/modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/skirts_dresses_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/suits.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi b/modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/underwear.dmi b/modular_nova/master_files/icons/mob/clothing/underwear.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/underwear.dmi
rename to modular_nova/master_files/icons/mob/clothing/underwear.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform.dmi b/modular_nova/master_files/icons/mob/clothing/uniform.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/uniform.dmi
rename to modular_nova/master_files/icons/mob/clothing/uniform.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi
rename to modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_hoof.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_hoof.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_hoof.dmi
rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_hoof.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_paw.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_paw.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_paw.dmi
rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_paw.dmi
diff --git a/modular_skyrat/master_files/icons/mob/clothing/uniform_taur_snake.dmi b/modular_nova/master_files/icons/mob/clothing/uniform_taur_snake.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/clothing/uniform_taur_snake.dmi
rename to modular_nova/master_files/icons/mob/clothing/uniform_taur_snake.dmi
diff --git a/modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi b/modular_nova/master_files/icons/mob/dog/corgi_head.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi
rename to modular_nova/master_files/icons/mob/dog/corgi_head.dmi
diff --git a/modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi b/modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi
rename to modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi b/modular_nova/master_files/icons/mob/energyaxe_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi
rename to modular_nova/master_files/icons/mob/energyaxe_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/huds/hud.dmi b/modular_nova/master_files/icons/mob/huds/hud.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/huds/hud.dmi
rename to modular_nova/master_files/icons/mob/huds/hud.dmi
diff --git a/modular_skyrat/master_files/icons/mob/human_face.dmi b/modular_nova/master_files/icons/mob/human_face.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/human_face.dmi
rename to modular_nova/master_files/icons/mob/human_face.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi b/modular_nova/master_files/icons/mob/inhands/balls_left.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi
rename to modular_nova/master_files/icons/mob/inhands/balls_left.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi b/modular_nova/master_files/icons/mob/inhands/balls_right.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi
rename to modular_nova/master_files/icons/mob/inhands/balls_right.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/clothing/towel_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/clothing/towel_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/clothing/towel_righthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/clothing/towel_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/irnbruhand.dmi b/modular_nova/master_files/icons/mob/inhands/irnbruhand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/irnbruhand.dmi
rename to modular_nova/master_files/icons/mob/inhands/irnbruhand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi b/modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi b/modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi
rename to modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi b/modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi
rename to modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi
diff --git a/modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi b/modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi
rename to modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi
diff --git a/modular_skyrat/master_files/icons/mob/landmarks.dmi b/modular_nova/master_files/icons/mob/landmarks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/landmarks.dmi
rename to modular_nova/master_files/icons/mob/landmarks.dmi
diff --git a/modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi b/modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi
rename to modular_nova/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi
diff --git a/modular_skyrat/master_files/icons/mob/markedone.dmi b/modular_nova/master_files/icons/mob/markedone.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/markedone.dmi
rename to modular_nova/master_files/icons/mob/markedone.dmi
diff --git a/modular_skyrat/master_files/icons/mob/mod.dmi b/modular_nova/master_files/icons/mob/mod.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/mod.dmi
rename to modular_nova/master_files/icons/mob/mod.dmi
diff --git a/modular_skyrat/master_files/icons/mob/mouthball.dmi b/modular_nova/master_files/icons/mob/mouthball.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/mouthball.dmi
rename to modular_nova/master_files/icons/mob/mouthball.dmi
diff --git a/modular_skyrat/master_files/icons/mob/newmobs.dmi b/modular_nova/master_files/icons/mob/newmobs.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/newmobs.dmi
rename to modular_nova/master_files/icons/mob/newmobs.dmi
diff --git a/modular_skyrat/master_files/icons/mob/newmobs32x64.dmi b/modular_nova/master_files/icons/mob/newmobs32x64.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/newmobs32x64.dmi
rename to modular_nova/master_files/icons/mob/newmobs32x64.dmi
diff --git a/modular_skyrat/master_files/icons/mob/newmobs64x32.dmi b/modular_nova/master_files/icons/mob/newmobs64x32.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/newmobs64x32.dmi
rename to modular_nova/master_files/icons/mob/newmobs64x32.dmi
diff --git a/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi b/modular_nova/master_files/icons/mob/newmobs64x64.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/newmobs64x64.dmi
rename to modular_nova/master_files/icons/mob/newmobs64x64.dmi
diff --git a/modular_skyrat/master_files/icons/mob/pets.dmi b/modular_nova/master_files/icons/mob/pets.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/pets.dmi
rename to modular_nova/master_files/icons/mob/pets.dmi
diff --git a/modular_skyrat/master_files/icons/mob/popup_flicks.dmi b/modular_nova/master_files/icons/mob/popup_flicks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/popup_flicks.dmi
rename to modular_nova/master_files/icons/mob/popup_flicks.dmi
diff --git a/modular_skyrat/master_files/icons/mob/robots.dmi b/modular_nova/master_files/icons/mob/robots.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/robots.dmi
rename to modular_nova/master_files/icons/mob/robots.dmi
diff --git a/modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi b/modular_nova/master_files/icons/mob/species/podperson_hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi
rename to modular_nova/master_files/icons/mob/species/podperson_hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_spines.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/tails_modsuit.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi
diff --git a/modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi
rename to modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi
diff --git a/modular_skyrat/master_files/icons/obj/agateram.dmi b/modular_nova/master_files/icons/obj/agateram.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/agateram.dmi
rename to modular_nova/master_files/icons/obj/agateram.dmi
diff --git a/modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi b/modular_nova/master_files/icons/obj/alt_silicon_brains.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi
rename to modular_nova/master_files/icons/obj/alt_silicon_brains.dmi
diff --git a/modular_skyrat/master_files/icons/obj/balls.dmi b/modular_nova/master_files/icons/obj/balls.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/balls.dmi
rename to modular_nova/master_files/icons/obj/balls.dmi
diff --git a/modular_skyrat/master_files/icons/obj/bureaucracy.dmi b/modular_nova/master_files/icons/obj/bureaucracy.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/bureaucracy.dmi
rename to modular_nova/master_files/icons/obj/bureaucracy.dmi
diff --git a/modular_skyrat/master_files/icons/obj/card.dmi b/modular_nova/master_files/icons/obj/card.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/card.dmi
rename to modular_nova/master_files/icons/obj/card.dmi
diff --git a/modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi b/modular_nova/master_files/icons/obj/cigarettes_khi.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi
rename to modular_nova/master_files/icons/obj/cigarettes_khi.dmi
diff --git a/modular_skyrat/master_files/icons/obj/closet.dmi b/modular_nova/master_files/icons/obj/closet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/closet.dmi
rename to modular_nova/master_files/icons/obj/closet.dmi
diff --git a/modular_skyrat/master_files/icons/obj/closet_wall.dmi b/modular_nova/master_files/icons/obj/closet_wall.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/closet_wall.dmi
rename to modular_nova/master_files/icons/obj/closet_wall.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/accessories.dmi b/modular_nova/master_files/icons/obj/clothing/accessories.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/accessories.dmi
rename to modular_nova/master_files/icons/obj/clothing/accessories.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi b/modular_nova/master_files/icons/obj/clothing/backpacks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi
rename to modular_nova/master_files/icons/obj/clothing/backpacks.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/belts.dmi b/modular_nova/master_files/icons/obj/clothing/belts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/belts.dmi
rename to modular_nova/master_files/icons/obj/clothing/belts.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/glasses.dmi b/modular_nova/master_files/icons/obj/clothing/glasses.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/glasses.dmi
rename to modular_nova/master_files/icons/obj/clothing/glasses.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/gloves.dmi b/modular_nova/master_files/icons/obj/clothing/gloves.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/gloves.dmi
rename to modular_nova/master_files/icons/obj/clothing/gloves.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/hats.dmi b/modular_nova/master_files/icons/obj/clothing/hats.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/hats.dmi
rename to modular_nova/master_files/icons/obj/clothing/hats.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi b/modular_nova/master_files/icons/obj/clothing/head/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/akula.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/akula.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi b/modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/akula_official.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/chaplain.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi b/modular_nova/master_files/icons/obj/clothing/head/costume.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/costume.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi b/modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi b/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/helmet.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi b/modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi b/modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi
rename to modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/masks.dmi b/modular_nova/master_files/icons/obj/clothing/masks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/masks.dmi
rename to modular_nova/master_files/icons/obj/clothing/masks.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/neck.dmi b/modular_nova/master_files/icons/obj/clothing/neck.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/neck.dmi
rename to modular_nova/master_files/icons/obj/clothing/neck.dmi
diff --git a/modular_nova/master_files/icons/obj/clothing/shoes.dmi b/modular_nova/master_files/icons/obj/clothing/shoes.dmi
new file mode 100644
index 00000000000..9bf04a5256a
Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/shoes.dmi differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits.dmi b/modular_nova/master_files/icons/obj/clothing/suits.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi b/modular_nova/master_files/icons/obj/clothing/suits/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits/akula.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits/akula.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi b/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits/armor.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits/chaplain.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi
diff --git a/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi b/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi
new file mode 100644
index 00000000000..c63b241a799
Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/suits/labcoat.dmi differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi b/modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi
rename to modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/towel.dmi b/modular_nova/master_files/icons/obj/clothing/towel.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/towel.dmi
rename to modular_nova/master_files/icons/obj/clothing/towel.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi b/modular_nova/master_files/icons/obj/clothing/under/akula.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/akula.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/akula.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi b/modular_nova/master_files/icons/obj/clothing/under/cargo.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/cargo.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi b/modular_nova/master_files/icons/obj/clothing/under/centcom.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/centcom.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi b/modular_nova/master_files/icons/obj/clothing/under/civilian.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/civilian.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/command.dmi b/modular_nova/master_files/icons/obj/clothing/under/command.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/command.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/command.dmi
diff --git a/modular_nova/master_files/icons/obj/clothing/under/costume.dmi b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi
new file mode 100644
index 00000000000..9edd0ae2ade
Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi b/modular_nova/master_files/icons/obj/clothing/under/engineering.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/engineering.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi b/modular_nova/master_files/icons/obj/clothing/under/medical.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/medical.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi b/modular_nova/master_files/icons/obj/clothing/under/misc.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/misc.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi b/modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi b/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/rnd.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/security.dmi b/modular_nova/master_files/icons/obj/clothing/under/security.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/security.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/security.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi b/modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi b/modular_nova/master_files/icons/obj/clothing/under/suits.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/suits.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi b/modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi
rename to modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi
diff --git a/modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi b/modular_nova/master_files/icons/obj/clothing/uniforms.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi
rename to modular_nova/master_files/icons/obj/clothing/uniforms.dmi
diff --git a/modular_skyrat/master_files/icons/obj/crucifix.dmi b/modular_nova/master_files/icons/obj/crucifix.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/crucifix.dmi
rename to modular_nova/master_files/icons/obj/crucifix.dmi
diff --git a/modular_skyrat/master_files/icons/obj/drinks.dmi b/modular_nova/master_files/icons/obj/drinks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/drinks.dmi
rename to modular_nova/master_files/icons/obj/drinks.dmi
diff --git a/modular_skyrat/master_files/icons/obj/energy_axe.dmi b/modular_nova/master_files/icons/obj/energy_axe.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/energy_axe.dmi
rename to modular_nova/master_files/icons/obj/energy_axe.dmi
diff --git a/modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi b/modular_nova/master_files/icons/obj/food/hemophage_food.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi
rename to modular_nova/master_files/icons/obj/food/hemophage_food.dmi
diff --git a/modular_skyrat/master_files/icons/obj/food/irnbru.dmi b/modular_nova/master_files/icons/obj/food/irnbru.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/food/irnbru.dmi
rename to modular_nova/master_files/icons/obj/food/irnbru.dmi
diff --git a/modular_skyrat/master_files/icons/obj/food/snacks.dmi b/modular_nova/master_files/icons/obj/food/snacks.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/food/snacks.dmi
rename to modular_nova/master_files/icons/obj/food/snacks.dmi
diff --git a/modular_skyrat/master_files/icons/obj/genitals/anus.dmi b/modular_nova/master_files/icons/obj/genitals/anus.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/genitals/anus.dmi
rename to modular_nova/master_files/icons/obj/genitals/anus.dmi
diff --git a/modular_skyrat/master_files/icons/obj/genitals/breasts.dmi b/modular_nova/master_files/icons/obj/genitals/breasts.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/genitals/breasts.dmi
rename to modular_nova/master_files/icons/obj/genitals/breasts.dmi
diff --git a/modular_skyrat/master_files/icons/obj/genitals/penis.dmi b/modular_nova/master_files/icons/obj/genitals/penis.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/genitals/penis.dmi
rename to modular_nova/master_files/icons/obj/genitals/penis.dmi
diff --git a/modular_skyrat/master_files/icons/obj/genitals/testicles.dmi b/modular_nova/master_files/icons/obj/genitals/testicles.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/genitals/testicles.dmi
rename to modular_nova/master_files/icons/obj/genitals/testicles.dmi
diff --git a/modular_skyrat/master_files/icons/obj/genitals/vagina.dmi b/modular_nova/master_files/icons/obj/genitals/vagina.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/genitals/vagina.dmi
rename to modular_nova/master_files/icons/obj/genitals/vagina.dmi
diff --git a/modular_skyrat/master_files/icons/obj/hhmirror.dmi b/modular_nova/master_files/icons/obj/hhmirror.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/hhmirror.dmi
rename to modular_nova/master_files/icons/obj/hhmirror.dmi
diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi b/modular_nova/master_files/icons/obj/hydroponics/growing.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi
rename to modular_nova/master_files/icons/obj/hydroponics/growing.dmi
diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi b/modular_nova/master_files/icons/obj/hydroponics/harvest.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi
rename to modular_nova/master_files/icons/obj/hydroponics/harvest.dmi
diff --git a/modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi b/modular_nova/master_files/icons/obj/hydroponics/seeds.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi
rename to modular_nova/master_files/icons/obj/hydroponics/seeds.dmi
diff --git a/modular_skyrat/master_files/icons/obj/instruments.dmi b/modular_nova/master_files/icons/obj/instruments.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/instruments.dmi
rename to modular_nova/master_files/icons/obj/instruments.dmi
diff --git a/modular_skyrat/master_files/icons/obj/janitor.dmi b/modular_nova/master_files/icons/obj/janitor.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/janitor.dmi
rename to modular_nova/master_files/icons/obj/janitor.dmi
diff --git a/modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi b/modular_nova/master_files/icons/obj/kinetic_glaive.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi
rename to modular_nova/master_files/icons/obj/kinetic_glaive.dmi
diff --git a/modular_skyrat/master_files/icons/obj/kitchen.dmi b/modular_nova/master_files/icons/obj/kitchen.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/kitchen.dmi
rename to modular_nova/master_files/icons/obj/kitchen.dmi
diff --git a/modular_skyrat/master_files/icons/obj/oxygen_candle.dmi b/modular_nova/master_files/icons/obj/oxygen_candle.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/oxygen_candle.dmi
rename to modular_nova/master_files/icons/obj/oxygen_candle.dmi
diff --git a/modular_skyrat/master_files/icons/obj/plushes.dmi b/modular_nova/master_files/icons/obj/plushes.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/plushes.dmi
rename to modular_nova/master_files/icons/obj/plushes.dmi
diff --git a/modular_skyrat/master_files/icons/obj/ring.dmi b/modular_nova/master_files/icons/obj/ring.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/ring.dmi
rename to modular_nova/master_files/icons/obj/ring.dmi
diff --git a/modular_skyrat/master_files/icons/obj/staff.dmi b/modular_nova/master_files/icons/obj/staff.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/staff.dmi
rename to modular_nova/master_files/icons/obj/staff.dmi
diff --git a/modular_skyrat/master_files/icons/obj/structures/puzzle_door.dmi b/modular_nova/master_files/icons/obj/structures/puzzle_door.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/structures/puzzle_door.dmi
rename to modular_nova/master_files/icons/obj/structures/puzzle_door.dmi
diff --git a/modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi b/modular_nova/master_files/icons/obj/structures/sauna_oven.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/structures/sauna_oven.dmi
rename to modular_nova/master_files/icons/obj/structures/sauna_oven.dmi
diff --git a/modular_skyrat/master_files/icons/obj/surgery.dmi b/modular_nova/master_files/icons/obj/surgery.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/surgery.dmi
rename to modular_nova/master_files/icons/obj/surgery.dmi
diff --git a/modular_skyrat/master_files/icons/obj/tank.dmi b/modular_nova/master_files/icons/obj/tank.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/tank.dmi
rename to modular_nova/master_files/icons/obj/tank.dmi
diff --git a/modular_skyrat/master_files/icons/obj/tools.dmi b/modular_nova/master_files/icons/obj/tools.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/tools.dmi
rename to modular_nova/master_files/icons/obj/tools.dmi
diff --git a/modular_skyrat/master_files/icons/obj/trash_piles.dmi b/modular_nova/master_files/icons/obj/trash_piles.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/trash_piles.dmi
rename to modular_nova/master_files/icons/obj/trash_piles.dmi
diff --git a/modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi b/modular_nova/master_files/icons/obj/vehicles/vehicles.dmi
similarity index 100%
rename from modular_skyrat/master_files/icons/obj/vehicles/vehicles.dmi
rename to modular_nova/master_files/icons/obj/vehicles/vehicles.dmi
diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_blue.png b/modular_nova/master_files/icons/stamp_icons/cat_blue.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/cat_blue.png
rename to modular_nova/master_files/icons/stamp_icons/cat_blue.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_green.png b/modular_nova/master_files/icons/stamp_icons/cat_green.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/cat_green.png
rename to modular_nova/master_files/icons/stamp_icons/cat_green.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_orange.png b/modular_nova/master_files/icons/stamp_icons/cat_orange.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/cat_orange.png
rename to modular_nova/master_files/icons/stamp_icons/cat_orange.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/cat_red.png b/modular_nova/master_files/icons/stamp_icons/cat_red.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/cat_red.png
rename to modular_nova/master_files/icons/stamp_icons/cat_red.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png b/modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/large_stamp-nri.png
rename to modular_nova/master_files/icons/stamp_icons/large_stamp-nri.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png b/modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/large_stamp-solfed.png
rename to modular_nova/master_files/icons/stamp_icons/large_stamp-solfed.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_blue.png b/modular_nova/master_files/icons/stamp_icons/paw_blue.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/paw_blue.png
rename to modular_nova/master_files/icons/stamp_icons/paw_blue.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_green.png b/modular_nova/master_files/icons/stamp_icons/paw_green.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/paw_green.png
rename to modular_nova/master_files/icons/stamp_icons/paw_green.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_orange.png b/modular_nova/master_files/icons/stamp_icons/paw_orange.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/paw_orange.png
rename to modular_nova/master_files/icons/stamp_icons/paw_orange.png
diff --git a/modular_skyrat/master_files/icons/stamp_icons/paw_red.png b/modular_nova/master_files/icons/stamp_icons/paw_red.png
similarity index 100%
rename from modular_skyrat/master_files/icons/stamp_icons/paw_red.png
rename to modular_nova/master_files/icons/stamp_icons/paw_red.png
diff --git a/modular_nova/master_files/readme.md b/modular_nova/master_files/readme.md
new file mode 100644
index 00000000000..687cbc87320
--- /dev/null
+++ b/modular_nova/master_files/readme.md
@@ -0,0 +1,33 @@
+This is the logging file for any master icon and sound files that we have.
+
+Please check this list before adding your own master file to see if it already exists. If it does exist then please put your icon in it.
+
+MASTER ICON FILES
+- /master_files/icons/emoji.dmi
+- /master_files/icons/mob/hud.dmi
+- /master_files/icons/obj/clothing/gloves.dmi
+- /master_files/icons/mob/clothing/hands.dmi
+- /master_files/icons/obj/trash_piles.dmi
+- /master_files/icons/mob/popup_flicks.dmi
+
+MASTER SOUND FILES
+- /master_files/sound/effects/heart_beat_loop3.ogg
+- /master_files/sound/effects/heart_beat_once.ogg
+
+MASTER CODE FILES
+- /master_files/code/modules/power/lighting.dm
+- /master_files/code/modules/clothing/non_anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NOT NEED ANTHRO VARIANTS.
+- /master_files/code/modules/clothing/anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NEED ANTHRO VARIANTS.
+- /master_files/code/datums/traits/neutral.dm > USE THIS FOR ANY NEUTRAL TRAITS
+- /master_files/code/datums/traits/negative.dm > USE THIS FOR ANY NEGATIVE TRAITS
+- /master_files/code/datums/traits/good.dm > USE THIS FOR ANY GOOD TRAITS
+- /master_files/code/game/objects/structures/trash_pile.dm
+- /master_files/code/modules/mob/living/carbon/carbon_say.dm
+- /master_files/code/modules/mob/living/emote_popup.dm
+- /master_files/code/game/machinery/doors/firedoor.dm
+- /master_files/code/modules/jobs/job_types/cyborg.dm
+- /master_files/code/modules/antagonists/_common/antag_datum.dm
+
+MASTER GLOBAL VARS
+- modular_nova/master_files/code/_globalvars/configuration.dm > GLOBAL_VAR_INIT(looc_allowed, TRUE)
+
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen1.ogg b/modular_nova/master_files/sound/ambience/ambigen1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen1.ogg
rename to modular_nova/master_files/sound/ambience/ambigen1.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen2.ogg b/modular_nova/master_files/sound/ambience/ambigen2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen2.ogg
rename to modular_nova/master_files/sound/ambience/ambigen2.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen3.ogg b/modular_nova/master_files/sound/ambience/ambigen3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen3.ogg
rename to modular_nova/master_files/sound/ambience/ambigen3.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen4.ogg b/modular_nova/master_files/sound/ambience/ambigen4.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen4.ogg
rename to modular_nova/master_files/sound/ambience/ambigen4.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen5.ogg b/modular_nova/master_files/sound/ambience/ambigen5.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen5.ogg
rename to modular_nova/master_files/sound/ambience/ambigen5.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen6.ogg b/modular_nova/master_files/sound/ambience/ambigen6.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen6.ogg
rename to modular_nova/master_files/sound/ambience/ambigen6.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen7.ogg b/modular_nova/master_files/sound/ambience/ambigen7.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen7.ogg
rename to modular_nova/master_files/sound/ambience/ambigen7.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen8.ogg b/modular_nova/master_files/sound/ambience/ambigen8.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen8.ogg
rename to modular_nova/master_files/sound/ambience/ambigen8.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/ambigen9.ogg b/modular_nova/master_files/sound/ambience/ambigen9.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/ambigen9.ogg
rename to modular_nova/master_files/sound/ambience/ambigen9.ogg
diff --git a/modular_skyrat/master_files/sound/ambience/starlight.ogg b/modular_nova/master_files/sound/ambience/starlight.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/ambience/starlight.ogg
rename to modular_nova/master_files/sound/ambience/starlight.ogg
diff --git a/modular_skyrat/master_files/sound/effects/bab1.ogg b/modular_nova/master_files/sound/effects/bab1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/bab1.ogg
rename to modular_nova/master_files/sound/effects/bab1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/dorime.ogg b/modular_nova/master_files/sound/effects/dorime.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/dorime.ogg
rename to modular_nova/master_files/sound/effects/dorime.ogg
diff --git a/modular_skyrat/master_files/sound/effects/footstep1.ogg b/modular_nova/master_files/sound/effects/footstep1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/footstep1.ogg
rename to modular_nova/master_files/sound/effects/footstep1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/footstep2.ogg b/modular_nova/master_files/sound/effects/footstep2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/footstep2.ogg
rename to modular_nova/master_files/sound/effects/footstep2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/footstep3.ogg b/modular_nova/master_files/sound/effects/footstep3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/footstep3.ogg
rename to modular_nova/master_files/sound/effects/footstep3.ogg
diff --git a/modular_skyrat/master_files/sound/effects/gmalfunction.ogg b/modular_nova/master_files/sound/effects/gmalfunction.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/gmalfunction.ogg
rename to modular_nova/master_files/sound/effects/gmalfunction.ogg
diff --git a/modular_skyrat/master_files/sound/effects/hacked.ogg b/modular_nova/master_files/sound/effects/hacked.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/hacked.ogg
rename to modular_nova/master_files/sound/effects/hacked.ogg
diff --git a/modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg b/modular_nova/master_files/sound/effects/heart_beat_loop3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg
rename to modular_nova/master_files/sound/effects/heart_beat_loop3.ogg
diff --git a/modular_skyrat/master_files/sound/effects/heart_beat_once.ogg b/modular_nova/master_files/sound/effects/heart_beat_once.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/heart_beat_once.ogg
rename to modular_nova/master_files/sound/effects/heart_beat_once.ogg
diff --git a/modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg b/modular_nova/master_files/sound/effects/lungbust_cough1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg
rename to modular_nova/master_files/sound/effects/lungbust_cough1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg b/modular_nova/master_files/sound/effects/lungbust_cough2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg
rename to modular_nova/master_files/sound/effects/lungbust_cough2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg b/modular_nova/master_files/sound/effects/lungbust_moan1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg
rename to modular_nova/master_files/sound/effects/lungbust_moan1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg b/modular_nova/master_files/sound/effects/lungbust_moan2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg
rename to modular_nova/master_files/sound/effects/lungbust_moan2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg b/modular_nova/master_files/sound/effects/lungbust_moan3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg
rename to modular_nova/master_files/sound/effects/lungbust_moan3.ogg
diff --git a/modular_skyrat/master_files/sound/effects/metalblock1.wav b/modular_nova/master_files/sound/effects/metalblock1.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock1.wav
rename to modular_nova/master_files/sound/effects/metalblock1.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock2.wav b/modular_nova/master_files/sound/effects/metalblock2.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock2.wav
rename to modular_nova/master_files/sound/effects/metalblock2.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock3.wav b/modular_nova/master_files/sound/effects/metalblock3.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock3.wav
rename to modular_nova/master_files/sound/effects/metalblock3.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock4.wav b/modular_nova/master_files/sound/effects/metalblock4.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock4.wav
rename to modular_nova/master_files/sound/effects/metalblock4.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock5.wav b/modular_nova/master_files/sound/effects/metalblock5.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock5.wav
rename to modular_nova/master_files/sound/effects/metalblock5.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock6.wav b/modular_nova/master_files/sound/effects/metalblock6.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock6.wav
rename to modular_nova/master_files/sound/effects/metalblock6.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock7.wav b/modular_nova/master_files/sound/effects/metalblock7.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock7.wav
rename to modular_nova/master_files/sound/effects/metalblock7.wav
diff --git a/modular_skyrat/master_files/sound/effects/metalblock8.wav b/modular_nova/master_files/sound/effects/metalblock8.wav
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/metalblock8.wav
rename to modular_nova/master_files/sound/effects/metalblock8.wav
diff --git a/modular_skyrat/master_files/sound/effects/platform_call.ogg b/modular_nova/master_files/sound/effects/platform_call.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/platform_call.ogg
rename to modular_nova/master_files/sound/effects/platform_call.ogg
diff --git a/modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg b/modular_nova/master_files/sound/effects/reactor/core_overheating.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/reactor/core_overheating.ogg
rename to modular_nova/master_files/sound/effects/reactor/core_overheating.ogg
diff --git a/modular_skyrat/master_files/sound/effects/reactor/explode.ogg b/modular_nova/master_files/sound/effects/reactor/explode.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/reactor/explode.ogg
rename to modular_nova/master_files/sound/effects/reactor/explode.ogg
diff --git a/modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg b/modular_nova/master_files/sound/effects/reactor/meltdown.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/reactor/meltdown.ogg
rename to modular_nova/master_files/sound/effects/reactor/meltdown.ogg
diff --git a/modular_skyrat/master_files/sound/effects/robot_bump.ogg b/modular_nova/master_files/sound/effects/robot_bump.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/robot_bump.ogg
rename to modular_nova/master_files/sound/effects/robot_bump.ogg
diff --git a/modular_skyrat/master_files/sound/effects/robot_sit.ogg b/modular_nova/master_files/sound/effects/robot_sit.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/robot_sit.ogg
rename to modular_nova/master_files/sound/effects/robot_sit.ogg
diff --git a/modular_skyrat/master_files/sound/effects/robot_smoke.ogg b/modular_nova/master_files/sound/effects/robot_smoke.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/robot_smoke.ogg
rename to modular_nova/master_files/sound/effects/robot_smoke.ogg
diff --git a/modular_skyrat/master_files/sound/effects/rustle1.ogg b/modular_nova/master_files/sound/effects/rustle1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/rustle1.ogg
rename to modular_nova/master_files/sound/effects/rustle1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/rustle2.ogg b/modular_nova/master_files/sound/effects/rustle2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/rustle2.ogg
rename to modular_nova/master_files/sound/effects/rustle2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/save.ogg b/modular_nova/master_files/sound/effects/save.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/save.ogg
rename to modular_nova/master_files/sound/effects/save.ogg
diff --git a/modular_skyrat/master_files/sound/effects/splash.ogg b/modular_nova/master_files/sound/effects/splash.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/splash.ogg
rename to modular_nova/master_files/sound/effects/splash.ogg
diff --git a/modular_skyrat/master_files/sound/effects/suitstep1.ogg b/modular_nova/master_files/sound/effects/suitstep1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/suitstep1.ogg
rename to modular_nova/master_files/sound/effects/suitstep1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/suitstep2.ogg b/modular_nova/master_files/sound/effects/suitstep2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/suitstep2.ogg
rename to modular_nova/master_files/sound/effects/suitstep2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/water_wade1.ogg b/modular_nova/master_files/sound/effects/water_wade1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/water_wade1.ogg
rename to modular_nova/master_files/sound/effects/water_wade1.ogg
diff --git a/modular_skyrat/master_files/sound/effects/water_wade2.ogg b/modular_nova/master_files/sound/effects/water_wade2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/water_wade2.ogg
rename to modular_nova/master_files/sound/effects/water_wade2.ogg
diff --git a/modular_skyrat/master_files/sound/effects/water_wade3.ogg b/modular_nova/master_files/sound/effects/water_wade3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/water_wade3.ogg
rename to modular_nova/master_files/sound/effects/water_wade3.ogg
diff --git a/modular_skyrat/master_files/sound/effects/water_wade4.ogg b/modular_nova/master_files/sound/effects/water_wade4.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/water_wade4.ogg
rename to modular_nova/master_files/sound/effects/water_wade4.ogg
diff --git a/modular_skyrat/master_files/sound/effects/watersplash.ogg b/modular_nova/master_files/sound/effects/watersplash.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/watersplash.ogg
rename to modular_nova/master_files/sound/effects/watersplash.ogg
diff --git a/modular_skyrat/master_files/sound/effects/weave.ogg b/modular_nova/master_files/sound/effects/weave.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/weave.ogg
rename to modular_nova/master_files/sound/effects/weave.ogg
diff --git a/modular_skyrat/master_files/sound/effects/wing_flap.ogg b/modular_nova/master_files/sound/effects/wing_flap.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/wing_flap.ogg
rename to modular_nova/master_files/sound/effects/wing_flap.ogg
diff --git a/modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg b/modular_nova/master_files/sound/effects/wolfhead_curse.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg
rename to modular_nova/master_files/sound/effects/wolfhead_curse.ogg
diff --git a/modular_skyrat/master_files/sound/items/drop/ring.ogg b/modular_nova/master_files/sound/items/drop/ring.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/drop/ring.ogg
rename to modular_nova/master_files/sound/items/drop/ring.ogg
diff --git a/modular_skyrat/master_files/sound/items/pickup/ring.ogg b/modular_nova/master_files/sound/items/pickup/ring.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/pickup/ring.ogg
rename to modular_nova/master_files/sound/items/pickup/ring.ogg
diff --git a/modular_skyrat/master_files/sound/items/tts/started_type.ogg b/modular_nova/master_files/sound/items/tts/started_type.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/tts/started_type.ogg
rename to modular_nova/master_files/sound/items/tts/started_type.ogg
diff --git a/modular_skyrat/master_files/sound/items/tts/stopped_type.ogg b/modular_nova/master_files/sound/items/tts/stopped_type.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/tts/stopped_type.ogg
rename to modular_nova/master_files/sound/items/tts/stopped_type.ogg
diff --git a/modular_skyrat/master_files/sound/items/zippo_close.ogg b/modular_nova/master_files/sound/items/zippo_close.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/zippo_close.ogg
rename to modular_nova/master_files/sound/items/zippo_close.ogg
diff --git a/modular_skyrat/master_files/sound/items/zippo_open.ogg b/modular_nova/master_files/sound/items/zippo_open.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/items/zippo_open.ogg
rename to modular_nova/master_files/sound/items/zippo_open.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/bloodyslice.ogg b/modular_nova/master_files/sound/weapons/bloodyslice.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/bloodyslice.ogg
rename to modular_nova/master_files/sound/weapons/bloodyslice.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/crowbar.ogg b/modular_nova/master_files/sound/weapons/crowbar.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/crowbar.ogg
rename to modular_nova/master_files/sound/weapons/crowbar.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/crowbar2.ogg b/modular_nova/master_files/sound/weapons/crowbar2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/crowbar2.ogg
rename to modular_nova/master_files/sound/weapons/crowbar2.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/glock17_fire.ogg b/modular_nova/master_files/sound/weapons/glock17_fire.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/glock17_fire.ogg
rename to modular_nova/master_files/sound/weapons/glock17_fire.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/punch1.ogg b/modular_nova/master_files/sound/weapons/punch1.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/punch1.ogg
rename to modular_nova/master_files/sound/weapons/punch1.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/punch2.ogg b/modular_nova/master_files/sound/weapons/punch2.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/punch2.ogg
rename to modular_nova/master_files/sound/weapons/punch2.ogg
diff --git a/modular_skyrat/master_files/sound/weapons/punch3.ogg b/modular_nova/master_files/sound/weapons/punch3.ogg
similarity index 100%
rename from modular_skyrat/master_files/sound/weapons/punch3.ogg
rename to modular_nova/master_files/sound/weapons/punch3.ogg
diff --git a/modular_skyrat/module_template.md b/modular_nova/module_template.md
similarity index 87%
rename from modular_skyrat/module_template.md
rename to modular_nova/module_template.md
index 629eb1ab236..1ad076b6a8f 100644
--- a/modular_skyrat/module_template.md
+++ b/modular_nova/module_template.md
@@ -1,6 +1,6 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/
+https://github.com/NovaSector/NovaSector/pull/
## \
@@ -23,8 +23,8 @@ E.g:
- N/A
### Defines:
diff --git a/modular_skyrat/modules/Department_Budgets/cards.dm b/modular_nova/modules/Department_Budgets/cards.dm
similarity index 100%
rename from modular_skyrat/modules/Department_Budgets/cards.dm
rename to modular_nova/modules/Department_Budgets/cards.dm
diff --git a/modular_nova/modules/GAGS/greyscale_configs.dm b/modular_nova/modules/GAGS/greyscale_configs.dm
new file mode 100644
index 00000000000..9844d2cf466
--- /dev/null
+++ b/modular_nova/modules/GAGS/greyscale_configs.dm
@@ -0,0 +1,1536 @@
+/*
+* HEAD
+*/
+
+// BERETS
+/datum/greyscale_config/beret
+ name = "Beret"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret.json'
+
+/datum/greyscale_config/beret/worn
+ name = "Beret (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_worn.json'
+
+/datum/greyscale_config/beret/worn/vox
+ name = "Beret (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi'
+
+/datum/greyscale_config/beret/worn/teshari
+ name = "Beret (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi'
+
+/datum/greyscale_config/beret_badge
+ name = "Badged Beret"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge.json'
+
+/datum/greyscale_config/beret_badge/worn
+ name = "Badged Beret (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json'
+
+/datum/greyscale_config/beret_badge/worn/vox
+ name = "Badged Beret (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi'
+
+/datum/greyscale_config/beret_badge/worn/teshari
+ name = "Badged Beret (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi'
+
+/datum/greyscale_config/beret_badge_fancy
+ name = "Beret With Fancy Badge"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json'
+
+/datum/greyscale_config/beret_badge_fancy/worn
+ name = "Beret With Fancy Badge (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json'
+
+/datum/greyscale_config/beret_badge_fancy/worn/vox
+ name = "Beret With Fancy Badge (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_vox.dmi'
+
+/datum/greyscale_config/beret_badge_fancy/worn/teshari
+ name = "Beret With Fancy Badge (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/beret_teshari.dmi'
+
+
+//COWBOY
+/datum/greyscale_config/cowboy_wide
+ name = "Wide Brimmed Hat"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
+
+/datum/greyscale_config/cowboy_wide/worn
+ name = "Wide Brimmed Hat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+/datum/greyscale_config/cowboy_wide_feathered
+ name = "Wide Brimmed Feathered Hat"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json'
+
+/datum/greyscale_config/cowboy_wide_feathered/worn
+ name = "Wide Brimmed Feathered Hat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+/datum/greyscale_config/cowboy_flat
+ name = "Flat Brimmed Hat"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
+
+/datum/greyscale_config/cowboy_flat/worn
+ name = "Flat Brimmed Hat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+/datum/greyscale_config/cowboy_flat_cowl
+ name = "Flat Brimmed Hat with Cowl"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json'
+
+/datum/greyscale_config/cowboy_flat_cowl/worn
+ name = "Flat Brimmed Hat with Cowl (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+/datum/greyscale_config/cowboy_cattleman
+ name = "Cattleman Hat"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
+
+/datum/greyscale_config/cowboy_cattleman/worn
+ name = "Cattleman Hat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+/datum/greyscale_config/cowboy_cattleman_wide
+ name = "Wide Brimmed Cattleman Hat"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/head/cowboy.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
+
+/datum/greyscale_config/cowboy_cattleman_wide/worn
+ name = "Wide Brimmed Cattleman Hat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/cowboy.dmi'
+
+//MUSHROOM CAP
+
+/datum/greyscale_config/mushcap
+ name = "Mushroom Cap"
+ icon_file = 'modular_nova/modules/GAGS/icons/mushcap.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json'
+
+/datum/greyscale_config/mushcap/worn
+ name = "Mushroom Cap Worn"
+ json_config = 'modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json'
+
+// FLATCAP
+
+/datum/greyscale_config/flatcap
+ name = "Flat Cap"
+ icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json'
+
+/datum/greyscale_config/flatcap/worn
+ name = "Flat Cap (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json'
+
+// FLOWER PIN
+
+/datum/greyscale_config/flowerpin
+ name = "Flower Pin"
+ icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json'
+
+/datum/greyscale_config/flowerpin/worn
+ name = "Flower Pin (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/hats.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json'
+
+// Hood
+
+/datum/greyscale_config/standalone_hood
+ name = "Hood"
+ icon_file = 'modular_nova/modules/GAGS/icons/head/head.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/hood/hood.json'
+
+/datum/greyscale_config/standalone_hood/worn
+ name = "Hood (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json'
+
+/datum/greyscale_config/standalone_hood/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/head/head_teshari.dmi'
+
+/datum/greyscale_config/standalone_hood/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/head/head_newvox.dmi'
+
+/datum/greyscale_config/standalone_hood/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/head/head_oldvox.dmi'
+
+// CATEAR HEADPHONES
+
+/datum/greyscale_config/catear_headphone
+ name = "Cat-ear Headphones"
+ icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json'
+
+/datum/greyscale_config/catear_headphone/worn
+ name = "Cat-ear Headphones (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json'
+
+/datum/greyscale_config/catear_headphone_inhand_left
+ name = "Cat-ear Headphones (Inhand Left)"
+ icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json'
+
+/datum/greyscale_config/catear_headphone_inhand_right
+ name = "Cat-ear Headphones (Inhand Right)"
+ icon_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json'
+
+//BOWS
+/datum/greyscale_config/large_bow
+ name = "Large Bow"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/large_bow.json'
+
+/datum/greyscale_config/large_bow/worn
+ name = "Large Bow (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi'
+
+/datum/greyscale_config/back_bow
+ name = "Back Bow"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/back_bow.json'
+
+/datum/greyscale_config/back_bow/worn
+ name = "Back Bow (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi'
+
+/datum/greyscale_config/sweet_bow
+ name = "Sweet Bow"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/sweet_bow.json'
+
+/datum/greyscale_config/sweet_bow/worn
+ name = "Sweet Bow (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi'
+
+/datum/greyscale_config/small_bow
+ name = "Small Bow"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/head/small_bow.json'
+
+/datum/greyscale_config/small_bow/worn
+ name = "Small Bow (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/bow_worn.dmi'
+
+/*
+* MASKS
+*/
+
+// CLOWN
+/datum/greyscale_config/clown_mask
+ name = "Colourable Clown Mask"
+ icon_file = 'modular_nova/modules/GAGS/icons/clown_mask.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json'
+
+/datum/greyscale_config/clown_mask/worn
+ name = "Colourable Clown Mask (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json'
+
+// VAPE
+/datum/greyscale_config/vape/worn/muzzled
+ name = "Vape (Worn, Muzzled)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+
+// RESPIRATOR
+/datum/greyscale_config/respirator
+ name = "Colourable Respirator"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/respirator/respirator.json'
+
+/datum/greyscale_config/respirator/worn
+ name = "Colourable Respirator (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json'
+
+/datum/greyscale_config/respirator/worn/snouted
+ name = "Colourable Respirator (Worn) (Snouted)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_snout.dmi'
+
+/datum/greyscale_config/respirator/worn/better_vox
+ name = "Colourable Respirator (Worn) (Vox Primalis)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_vox_better.dmi'
+
+/datum/greyscale_config/respirator/worn/vox
+ name = "Colourable Respirator (Worn) (Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_vox.dmi'
+
+/datum/greyscale_config/respirator/worn/teshari
+ name = "Colourable Respirator (Worn) (Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_teshari.dmi'
+
+// STERILE
+/datum/greyscale_config/sterile_mask
+ name = "Colourable Sterile Mask"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json'
+
+/datum/greyscale_config/sterile_mask/worn
+ name = "Colourable Sterile Mask (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json'
+
+/datum/greyscale_config/sterile_mask/worn/snouted
+ name = "Colourable Sterile Mask (Worn) (Snouted)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_snout.dmi'
+
+/datum/greyscale_config/sterile_mask/worn/better_vox
+ name = "Colourable Sterile Mask (Worn) (Vox Primalis)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_vox_better.dmi'
+
+/datum/greyscale_config/sterile_mask/worn/vox
+ name = "Colourable Sterile Mask (Worn) (Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_vox.dmi'
+
+/datum/greyscale_config/sterile_mask/worn/teshari
+ name = "Colourable Sterile Mask (Worn) (Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/masks_teshari.dmi'
+
+// MASQUERADE MASKS
+/datum/greyscale_config/masquerade_mask
+ name = "Masquerade Mask"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json'
+
+/datum/greyscale_config/masquerade_mask/worn
+ name = "Masquerade Mask (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi'
+
+/datum/greyscale_config/masquerade_mask/worn/snouted
+ name = "Masquerade Mask (Worn) (Snouted)"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi'
+
+/datum/greyscale_config/masquerade_mask/worn/teshari
+ name = "Masquerade Mask (Worn) (Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi'
+
+/datum/greyscale_config/masquerade_mask/worn/better_vox
+ name = "Masquerade Mask (Worn) (Vox Primalis)"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi'
+
+/datum/greyscale_config/masquerade_mask/worn/vox
+ name = "Masquerade Mask (Worn) (Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi'
+
+/*
+* NECK
+*/
+
+// RANGER PONCHO
+/datum/greyscale_config/ranger_poncho
+ name = "Ranger Poncho"
+ icon_file = 'modular_nova/modules/GAGS/icons/ranger_poncho.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json'
+
+/datum/greyscale_config/ranger_poncho/worn
+ name = "Ranger Poncho Worn"
+ json_config = 'modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json'
+
+/datum/greyscale_config/ranger_poncho/worn/teshari
+ name = "Ranger Poncho (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi'
+
+// CLOAKS
+/datum/greyscale_config/cloak
+ name = "Cloak"
+ icon_file = 'modular_nova/modules/GAGS/icons/cloak.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/cloak.json'
+
+/datum/greyscale_config/cloak/worn
+ name = "Cloak (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json'
+
+/datum/greyscale_config/cloak/veil
+ name = "Veil"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/veil.json'
+
+/datum/greyscale_config/cloak/veil/worn
+ name = "Veil (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json'
+
+/datum/greyscale_config/cloak/boat
+ name = "Boatcloak"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/boat.json'
+
+/datum/greyscale_config/cloak/boat/worn
+ name = "Boatcloak (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json'
+
+/datum/greyscale_config/cloak/shroud
+ name = "Shroud"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/shroud.json'
+
+/datum/greyscale_config/cloak/shroud/worn
+ name = "Shroud (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json'
+
+// Mantle
+
+/datum/greyscale_config/mantle
+ name = "Mantle"
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/neck.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json'
+
+/datum/greyscale_config/mantle/worn
+ name = "Mantle (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json'
+
+/datum/greyscale_config/mantle/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi'
+
+/datum/greyscale_config/mantle/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi'
+
+/datum/greyscale_config/mantle/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi'
+
+//CAPES
+
+/datum/greyscale_config/robe_cape
+ name = "Robe Cape"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json'
+
+/datum/greyscale_config/robe_cape/worn
+ name = "Robe Cape (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi'
+
+/datum/greyscale_config/long_cape
+ name = "Long Cape"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/long_cape.json'
+
+/datum/greyscale_config/long_cape/worn
+ name = "Long Cape (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi'
+
+/datum/greyscale_config/wide_cape
+ name = "Wide Cape"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json'
+
+/datum/greyscale_config/wide_cape/worn
+ name = "Wide Cape (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/cape_worn.dmi'
+
+// COLLARS
+
+/datum/greyscale_config/collar
+ name = "Collar"
+ icon_file = 'modular_nova/modules/GAGS/icons/collar.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell.json'
+
+// Bell
+/datum/greyscale_config/collar/bell
+ name = "Bell Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell.json'
+
+/datum/greyscale_config/collar/bell/worn
+ name = "Bell Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/bell_worn.json'
+
+// Choker
+/datum/greyscale_config/collar/choker
+ name = "Choker"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/choker.json'
+
+/datum/greyscale_config/collar/choker/worn
+ name = "Choker (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/choker_worn.json'
+
+// Thin Choker
+/datum/greyscale_config/collar/thinchoker
+ name = "Thin Choker"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/thinchoker.json'
+
+/datum/greyscale_config/collar/thinchoker/worn
+ name = "Thin Choker (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json'
+
+// Cow
+/datum/greyscale_config/collar/cow
+ name = "Cowbell Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/cow.json'
+
+/datum/greyscale_config/collar/cow/worn
+ name = "Cowbell Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/cow_worn.json'
+
+// Cross
+/datum/greyscale_config/collar/cross
+ name = "Cross Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/cross.json'
+
+/datum/greyscale_config/collar/cross/worn
+ name = "Cross Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/cross_worn.json'
+
+// Holo
+/datum/greyscale_config/collar/holo
+ name = "Holo Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/holo.json'
+
+/datum/greyscale_config/collar/holo/worn
+ name = "Holo Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/holo_worn.json'
+
+// Leather
+/datum/greyscale_config/collar/leather
+ name = "Leather Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/leather.json'
+
+/datum/greyscale_config/collar/leather/worn
+ name = "Leather Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/leather_worn.json'
+
+// Pet
+/datum/greyscale_config/collar/pet
+ name = "Pet Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/pet.json'
+
+/datum/greyscale_config/collar/pet/worn
+ name = "Pet Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/pet_worn.json'
+
+// Spiked
+/datum/greyscale_config/collar/spike
+ name = "Spiked Collar"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/spike.json'
+
+/datum/greyscale_config/collar/spike/worn
+ name = "Spiked Collar (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/collar/spike_worn.json'
+
+//FACE SCARF
+/datum/greyscale_config/face_scarf
+ name = "Face Scarf"
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/neck/face_scarf.json'
+
+/datum/greyscale_config/face_scarf/worn
+ name = "Face Scarf (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi'
+
+/datum/greyscale_config/face_scarf/worn/muzzled
+ name = "Face Scarf (Worn, Muzzled)"
+ icon_file = 'modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi'
+
+/*
+* SUITS
+*/
+
+// Apron
+
+/datum/greyscale_config/apron
+ name = "Apron"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/apron/apron.json'
+
+/datum/greyscale_config/apron/worn
+ name = "Apron (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json'
+
+/datum/greyscale_config/apron/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi'
+
+/datum/greyscale_config/apron/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi'
+
+/datum/greyscale_config/apron/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi'
+
+//Flannel Shirt
+
+/datum/greyscale_config/flannelgags
+ name = "Flannel Shirt"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flannel/flannel.json'
+
+/datum/greyscale_config/flannelgags/worn
+ name = "Flannel Shirt (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json'
+
+
+// ARMOR
+
+/datum/greyscale_config/heck_suit/worn/digi
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/armor_digi.dmi'
+
+//Helmet pairs with the above suit
+/datum/greyscale_config/heck_helmet/worn/snouted
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/head/helmet_muzzled.dmi'
+
+// Bathrobes
+
+/datum/greyscale_config/bathrobe
+ name = "Bathrobe"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json'
+
+/datum/greyscale_config/bathrobe/worn
+ name = "Bathrobe (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json'
+
+/datum/greyscale_config/bathrobe/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi'
+
+/datum/greyscale_config/bathrobe/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi'
+
+/datum/greyscale_config/bathrobe/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi'
+
+// FANCY SUITS
+/datum/greyscale_config/fancy_suit
+ name = "Fancy Suit"
+ icon_file = 'modular_nova/modules/GAGS/icons/fancy_suits.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json'
+
+/datum/greyscale_config/fancy_suit/worn
+ name = "Fancy Suit (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json'
+
+/datum/greyscale_config/recolorable_suit
+ name = "Formal Suit"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json'
+
+/datum/greyscale_config/recolorable_suit/worn
+ name = "Formal Suit (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi'
+
+/datum/greyscale_config/recolorable_suit/worn/digi
+ name = "Formal Suit (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi'
+
+/datum/greyscale_config/recolorable_suitskirt
+ name = "Formal Suitskirt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json'
+
+/datum/greyscale_config/recolorable_suitskirt/worn
+ name = "Formal Suitskirt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi'
+
+/datum/greyscale_config/recolorable_suitskirt/worn/digi
+ name = "Formal Suitskirt (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi'
+
+// HOODIES
+/datum/greyscale_config/hoodie
+ name = "Hoodie"
+ icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json'
+
+/datum/greyscale_config/hoodie/worn
+ name = "Hoodie Worn"
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json'
+
+/datum/greyscale_config/hoodie_trim
+ name = "Trimmed Hoodie"
+ icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json'
+
+/datum/greyscale_config/hoodie_trim/worn
+ name = "Trimmed Hoodie Worn"
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json'
+
+/datum/greyscale_config/hoodie_branded
+ name = "Branded Hoodie"
+ icon_file = 'modular_nova/modules/GAGS/icons/hoodie.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json'
+
+/datum/greyscale_config/hoodie_branded/worn
+ name = "Branded Hoodie Worn"
+ json_config = 'modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json'
+
+// CARDIGAN
+
+/datum/greyscale_config/cardigan
+ name = "Cardigan"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json'
+
+/datum/greyscale_config/cardigan/worn
+ name = "Cardigan (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json'
+
+// SWEATERS
+
+/datum/greyscale_config/cableknit_sweater
+ name = "Cableknit Sweater"
+ icon_file = 'modular_nova/modules/GAGS/icons/sweaters.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/sweater/sweater.json'
+
+/datum/greyscale_config/cableknit_sweater/worn
+ name = "Cableknit Sweater (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json'
+
+/datum/greyscale_config/warm_sweater
+ name = "Warm Sweater"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json'
+
+/datum/greyscale_config/warm_sweater/worn
+ name = "Warm Sweater (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi'
+
+/datum/greyscale_config/heart_sweater
+ name = "Heart Sweater"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json'
+
+/datum/greyscale_config/heart_sweater/worn
+ name = "Heart Sweater (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi'
+
+//Keyhole uses the same configs!
+
+// OVERALLS
+
+/datum/greyscale_config/overalls/worn/digi
+ name = "Overalls (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi'
+
+/datum/greyscale_config/overalls/worn/vox
+ name = "Overalls (Worn, Vox)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi'
+
+/datum/greyscale_config/overalls/worn/better_vox
+ name = "Overalls (Worn, Better Vox)"
+ icon_file = 'modular_nova/modules/better_vox/icons/clothing/suit.dmi'
+
+// URBAN COAT
+
+/datum/greyscale_config/urban_coat
+ name = "Urban Coat"
+ icon_file = 'modular_nova/modules/GAGS/icons/urban_coat.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json'
+
+/datum/greyscale_config/urban_coat/worn
+ name = "Urban Coat (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json'
+
+// WINTER COAT
+
+/datum/greyscale_config/winter_coat
+ name = "Winter Coat"
+ icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json'
+
+/datum/greyscale_config/winter_coat_worn
+ name = "Winter Coat (Worn)"
+ icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json'
+
+/datum/greyscale_config/winter_hood
+ name = "Winter Coat Hood"
+ icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json'
+
+/datum/greyscale_config/winter_hood/worn
+ name = "Winter Coat Hood (Worn)"
+ icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
+
+/datum/greyscale_config/warm_coat
+ name = "Warm Coat"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_coat.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json'
+
+/datum/greyscale_config/warm_coat/worn
+ name = "Warm Coat (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/warm_coat_worn.dmi'
+
+// LEATHER JACKET
+
+/datum/greyscale_config/leather_jacket
+ name = "Leather Jacket"
+ icon_file = 'modular_nova/modules/GAGS/icons/leather_jacket.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json'
+
+/datum/greyscale_config/leather_jacket/worn
+ name = "Leather Jacket (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json'
+
+// DUSTER
+
+/datum/greyscale_config/duster
+ name = "Duster"
+ icon_file = 'modular_nova/modules/GAGS/icons/duster.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/duster/duster.json'
+
+/datum/greyscale_config/duster/worn
+ name = "Duster (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/duster/duster_worn.json'
+
+// PEACOAT
+
+/datum/greyscale_config/peacoat
+ name = "Peacoat"
+ icon_file = 'modular_nova/modules/GAGS/icons/peacoat.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json'
+
+/datum/greyscale_config/peacoat/worn
+ name = "Peacoat (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json'
+
+
+// VARSITY JACKET
+
+/datum/greyscale_config/varsity
+ name = "Varsity Jacket"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json'
+
+/datum/greyscale_config/varsity/worn
+ name = "Varsity Jacket (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json'
+
+// TAILORED JACKET
+
+/datum/greyscale_config/tailored_jacket
+ name = "Tailored Jacket"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json'
+
+/datum/greyscale_config/tailored_jacket/worn
+ name = "Tailored Jacket (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json'
+
+/datum/greyscale_config/tailored_short_jacket
+ name = "Tailored Short Jacket"
+ icon_file = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json'
+
+/datum/greyscale_config/tailored_short_jacket/worn
+ name = "Tailored Short Jacket (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json'
+
+
+/*
+* UNDER
+*/
+
+
+// JUMPSUITS
+
+/datum/greyscale_config/jumpsuit/worn/digi
+ name = "Jumpsuit (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi'
+
+/datum/greyscale_config/jumpsuit/prison/worn/digi
+ name = "Prison Jumpsuit (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/color_digi.dmi'
+
+/datum/greyscale_config/jumpsuit/worn/monkey
+ name = "Jumpsuit (Worn) - Monkey"
+ icon_file = MONKEY_UNIFORM_FILE
+ json_config = 'modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json'
+
+/datum/greyscale_config/jumpsuit/prison/worn/monkey
+ name = "Prison Jumpsuit (Worn) - Monkey"
+ icon_file = MONKEY_UNIFORM_FILE
+ json_config = 'modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json'
+
+/datum/greyscale_config/jumpsuit/worn/vox
+ name = "Jumpsuit (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi'
+
+/datum/greyscale_config/jumpsuit/prison/worn/vox
+ name = "Prison Jumpsuit (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi'
+
+/datum/greyscale_config/jumpsuit/worn/better_vox
+ name = "Jumpsuit (Worn, Better Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi'
+
+/datum/greyscale_config/jumpsuit/prison/worn/better_vox
+ name = "Prison Jumpsuit (Worn, Better Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi'
+
+/datum/greyscale_config/jumpsuit/worn/taur_snake
+ name = "Jumpsuit (Worn) - Naga"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi'
+
+/datum/greyscale_config/jumpsuit/prison/worn/taur_snake
+ name = "Prison Jumpsuit (Worn) - Naga"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi'
+
+/datum/greyscale_config/jumpsuit/worn/teshari
+ name = "Jumpsuit (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi'
+
+/datum/greyscale_config/jumpsuit/prison/worn/teshari
+ name = "Prison Jumpsuit (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi'
+
+// PANTS / SHORTS
+//Note, these icons are now in master_files per TG's sorting. There's no reason to NOT have these pieces in master files now that they're sorted out.
+//The rest will eventually join them - preferably with a cleaner method too instead of having to have unique configs for every single item's digi state.
+
+/datum/greyscale_config/slacks/worn/digi
+ name = "Slacks (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/jeans/worn/digi
+ name = "Jeans (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/shorts/worn/digi
+ name = "Shorts (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/jeanshorts/worn/digi
+ name = "Jean Shorts (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/shortershorts
+ name = "Shorter Shorts"
+ icon_file = 'modular_nova/modules/GAGS/icons/shorts_pants.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json'
+
+/datum/greyscale_config/shortershorts/worn
+ name = "Shorter Shorts (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/shorts_pants.dmi'
+
+/datum/greyscale_config/shortershorts/worn/digi
+ name = "Ripped Shorts (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/shorts_ripped
+ name = "Ripped Shorts"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json'
+
+/datum/greyscale_config/shorts_ripped/worn //TG will hopefully start having worn as a subtype, it means only needing 1 .json
+ name = "Ripped Shorts (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+
+/datum/greyscale_config/shorts_ripped/worn/digi
+ name = "Ripped Shorts (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/shorts_ripped/worn/teshari
+ name = "Ripped Shorts (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/teshari_uniform.dmi'
+
+/datum/greyscale_config/jeans_ripped
+ name = "Ripped Jeans"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json'
+
+/datum/greyscale_config/jeans_ripped/worn
+ name = "Ripped Jeans (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+
+/datum/greyscale_config/jeans_ripped/worn/digi
+ name = "Ripped Jeans (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/yoga_pants
+ name = "Yoga Pants"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json'
+
+/datum/greyscale_config/yoga_pants/worn
+ name = "Yoga Pants (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+
+/datum/greyscale_config/yoga_pants/worn/digi
+ name = "Yoga Pants (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+// DRESSES / SKIRTS
+
+/datum/greyscale_config/plaidskirt/worn/digi
+ name = "Plaid Skirt (Worn, Digi)"
+ icon_file = SKIRTS_DRESSES_DIGIFILE
+
+/datum/greyscale_config/lone_skirt
+ name = "Skirt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json'
+
+/datum/greyscale_config/lone_skirt/worn
+ name = "Skirt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/turtleskirt_knit
+ name = "Cableknit Skirtleneck"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json'
+
+/datum/greyscale_config/turtleskirt_knit/worn
+ name = "Cableknit Skirtleneck (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/jean_skirt
+ name = "Jean Skirt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json'
+
+/datum/greyscale_config/jean_skirt/worn
+ name = "Jean Skirt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/jean_skirt/worn/digi
+ name = "Jean Skirt (Worn, Digi)"
+ icon_file = SKIRTS_DRESSES_DIGIFILE
+
+/datum/greyscale_config/short_dress
+ name = "Short Dress"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json'
+
+/datum/greyscale_config/short_dress/worn
+ name = "Short Dress (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/strapless_dress
+ name = "Strapless Dress"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json'
+
+/datum/greyscale_config/strapless_dress/worn
+ name = "Strapless Dress (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/pentagram_dress
+ name = "Pentagram Strapped Dress"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json'
+
+/datum/greyscale_config/pentagram_dress/worn
+ name = "Pentagram Strapped Dress (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/plaidskirt/worn/teshari
+ name = "Plaid Skirt (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/dressteshari.dmi'
+
+/datum/greyscale_config/sundress/worn/teshari
+ name = "Sundress (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/dressteshari.dmi'
+
+/datum/greyscale_config/medium_skirt
+ name = "Medium Skirt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json'
+
+/datum/greyscale_config/medium_skirt/worn
+ name = "Medium Skirt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+/datum/greyscale_config/long_skirt
+ name = "Long Skirt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json'
+
+/datum/greyscale_config/long_skirt/worn
+ name = "Long Skirt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
+
+// KILT
+// COSTUMES
+
+/datum/greyscale_config/buttondown_slacks/worn/digi
+ name = "Buttondown with Slacks (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/buttondown_shorts/worn/digi
+ name = "Buttondown with Shorts (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/football_suit/worn/digi
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+/datum/greyscale_config/qipao
+ name = "Qipao"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json'
+
+/datum/greyscale_config/qipao/worn
+ name = "Qipao (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+
+/datum/greyscale_config/qipao/worn/digi
+ name = "Qipao (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+/datum/greyscale_config/cheongsam
+ name = "Cheongsam"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json'
+
+/datum/greyscale_config/cheongsam/worn
+ name = "Cheongsam (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+
+/datum/greyscale_config/cheongsam/worn/digi
+ name = "Cheongsam (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+/datum/greyscale_config/yukata
+ name = "Yukata"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json'
+
+/datum/greyscale_config/yukata/worn
+ name = "Yukata (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+
+/datum/greyscale_config/yukata/worn/digi
+ name = "Yukata (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+/datum/greyscale_config/kilt
+ name = "Kilt"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/kilt/kilt.json'
+
+/datum/greyscale_config/kilt/worn
+ name = "Kilt (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+
+/datum/greyscale_config/kilt/worn/digi
+ name = "Kilt (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/buttondown_vicvest
+ name = "Buttondown with Double-breasted Vest"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json'
+
+/datum/greyscale_config/buttondown_vicvest/worn
+ name = "Buttondown with Double-breasted Vest (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+
+/datum/greyscale_config/buttondown_vicvest/worn/digi
+ name = "Buttondown with Double-breasted Vest (Worn, Digi)"
+ icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
+
+/datum/greyscale_config/chrimbo
+ name = "christmas_male"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json'
+
+/datum/greyscale_config/chrimbo/worn
+ name = "christmas_male (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+
+/datum/greyscale_config/chrimbo/worn/digi
+ name = "christmas_male (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+
+//GRAYSCALE MAID COSTUME
+
+/datum/greyscale_config/maid_neck_cover
+ name = "Maid Neck Cover"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json'
+
+/datum/greyscale_config/maid_neck_cover/worn
+ name = "Maid Neck Cover (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi'
+
+/datum/greyscale_config/maid_arm_covers
+ name = "Maid Arm Covers"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json'
+
+/datum/greyscale_config/maid_arm_covers/worn
+ name = "Maid Arm Covers (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi'
+
+/datum/greyscale_config/maid_costume
+ name = "Maid Costume"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json'
+
+/datum/greyscale_config/maid_costume/worn
+ name = "Maid Costume (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi'
+
+/datum/greyscale_config/maid_headband
+ name = "Maid Headband"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json'
+
+/datum/greyscale_config/maid_headband/worn
+ name = "Maid Headband (Worn)"
+ icon_file = 'modular_nova/modules/GAGS/icons/maid_costume_worn.dmi'
+
+/*
+TREK
+*/
+
+/datum/greyscale_config/trek/worn/digi
+ name = "Trek Uniform (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/under/trek_digi.dmi'
+
+/*
+* SHOES
+*/
+
+// SNEAKERS
+
+/datum/greyscale_config/sneakers/worn/digi
+ name = "Sneakers (Worn, Digi)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi'
+
+/datum/greyscale_config/sneakers_orange/worn/digi
+ name = "Orange Sneakers (Worn, Digi)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_digi.dmi'
+
+/datum/greyscale_config/sneakers/worn/vox
+ name = "Sneakers (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_vox.dmi'
+
+/datum/greyscale_config/sneakers_orange/worn/vox
+ name = "Orange Sneakers (Worn, Vox)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_vox.dmi'
+
+/datum/greyscale_config/sneakers/worn/teshari
+ name = "Sneakers (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_teshari.dmi'
+digi
+/datum/greyscale_config/sneakers_orange/worn/teshari
+ name = "Orange Sneakers (Worn, Teshari)"
+ icon_file = 'modular_nova/modules/GAGS/icons/sneakers_teshari.dmi'
+
+// Boots
+
+/datum/greyscale_config/boots
+ name = "Colorable Boots"
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json'
+
+/datum/greyscale_config/boots/worn
+ name = "Colorable Boots (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json'
+
+/datum/greyscale_config/boots/worn/digi
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi'
+
+/datum/greyscale_config/boots/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+
+/datum/greyscale_config/boots/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi'
+
+/datum/greyscale_config/boots/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
+
+/datum/greyscale_config/boots/christmasboots
+ name = "christmas_boots"
+ icon_file = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json'
+
+/datum/greyscale_config/boots/christmasboots/worn
+ name = "christmas_boots (Worn)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+
+/datum/greyscale_config/boots/christmasboots/worn/digi
+ name = "christmas_boots (Worn, Digi)"
+ icon_file = 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi'
+
+// Laceups
+
+/datum/greyscale_config/laceup
+ name = "Colorable Laceups"
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json'
+
+/datum/greyscale_config/laceup/worn
+ name = "Colorable Laceups (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json'
+
+/datum/greyscale_config/laceup/worn/digi
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi'
+
+/datum/greyscale_config/laceup/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+
+/datum/greyscale_config/laceup/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi'
+
+/datum/greyscale_config/laceup/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
+
+// Sandals
+
+/datum/greyscale_config/sandals
+ name = "Colorable Sandals"
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json'
+
+/datum/greyscale_config/sandals/worn
+ name = "Colorable Sandals (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json'
+
+/datum/greyscale_config/sandals/worn/digi
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi'
+
+/datum/greyscale_config/sandals/worn/teshari
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+
+/datum/greyscale_config/sandals/worn/newvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi'
+
+/datum/greyscale_config/sandals/worn/oldvox
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
+
+// WRAPS
+
+/datum/greyscale_config/clothwraps
+ name = "Cloth Wraps"
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/wraps/wraps.json'
+
+/datum/greyscale_config/clothwraps/worn
+ name = "Cloth Wraps (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json'
+
+/datum/greyscale_config/clothwraps/worn/digi
+ name = "Cloth Wraps (Worn, Digi)"
+
+/datum/greyscale_config/legwraps
+ name = "Leg Wraps"
+ icon_file = 'modular_nova/modules/GAGS/icons/shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps.json'
+
+/datum/greyscale_config/legwraps/worn
+ name = "Leg Wraps (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json'
+
+/datum/greyscale_config/legwraps/worn/digi
+ name = "Leg Wraps (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json'
+
+/datum/greyscale_config/armwraps
+ name = "Cloth Arm Wraps"
+ icon_file = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json'
+
+/datum/greyscale_config/armwraps/worn
+ name = "Cloth Arm Wraps (Worn)"
+ icon_file = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json'
+
+// MISC SHOES
+
+/datum/greyscale_config/heels
+ name = "High Heels"
+ icon_file = 'modular_nova/modules/GAGS/icons/heels.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json'
+
+/datum/greyscale_config/heels/worn
+ name = "High Heels (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json'
+
+/datum/greyscale_config/heels/worn/digi
+ name = "High Heels (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json'
+
+/datum/greyscale_config/fancyheels
+ name = "Fancy Heels"
+ icon_file = 'modular_nova/modules/GAGS/icons/fancyheels.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json'
+
+/datum/greyscale_config/fancyheels/worn
+ name = "Fancy Heels (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json'
+
+/datum/greyscale_config/fancyheels/worn/digi
+ name = "Fancy Heels (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json'
+
+// TESHARI FALLBACKS.
+
+/datum/greyscale_config/teshari
+ name = "Teshari Clothing"
+ icon_file = 'modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json'
+
+/datum/greyscale_config/teshari/under
+ name = "Teshari Under"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json'
+
+/datum/greyscale_config/teshari/under_skirt
+ name = "Teshari Skirt"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json'
+
+/datum/greyscale_config/teshari/shoes
+ name = "Teshari Shoes"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json'
+
+/datum/greyscale_config/teshari/gloves
+ name = "Teshari Gloves"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json'
+
+/datum/greyscale_config/teshari/glasses
+ name = "Teshari Glasses"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json'
+
+/datum/greyscale_config/teshari/coat
+ name = "Teshari Coat"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json'
+
+/datum/greyscale_config/teshari/armor
+ name = "Teshari Armor"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json'
+
+/datum/greyscale_config/teshari/backpack
+ name = "Teshari Backpack"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json'
+
+/datum/greyscale_config/teshari/spacesuit
+ name = "Teshari Spacesuit"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json'
+
+/datum/greyscale_config/teshari/cloak
+ name = "Teshari Cloak"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json'
+
+/datum/greyscale_config/teshari/tie
+ name = "Teshari Tie"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json'
+
+/datum/greyscale_config/teshari/scarf
+ name = "Teshari Scarf"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json'
+
+/datum/greyscale_config/teshari/modcontrol
+ name = "Teshari Modsuit"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json'
+
+/datum/greyscale_config/teshari/hardsuit
+ name = "Teshari Hardsuit"
+ json_config = 'modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json'
+
+/*
+* CIN SURPLUS ARMOR
+*/
+
+// Helmet
+/datum/greyscale_config/cin_surplus_helmet
+ name = "CIN Surplus Helmet"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json'
+
+/datum/greyscale_config/cin_surplus_helmet/object
+ name = "CIN Surplus Helmet (OBJ)"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+
+// Undersuit
+/datum/greyscale_config/cin_surplus_undersuit
+ name = "CIN Surplus Undersuit"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json'
+
+/datum/greyscale_config/cin_surplus_undersuit/object
+ name = "CIN Surplus Undersuit (OBJ)"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+
+/datum/greyscale_config/cin_surplus_undersuit/digi
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi'
+
+// Backpack
+/datum/greyscale_config/cin_surplus_backpack
+ name = "CIN Surplus Backpack"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json'
+
+/datum/greyscale_config/cin_surplus_backpack/object
+ name = "CIN Surplus Backpack (OBJ)"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+
+// Chestrig
+/datum/greyscale_config/cin_surplus_chestrig
+ name = "CIN Surplus Chestrig"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json'
+
+/datum/greyscale_config/cin_surplus_chestrig/object
+ name = "CIN Surplus Chestrig (OBJ)"
+ icon_file = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+
+/*
+* ITEMS
+*/
+
+/datum/greyscale_config/id_card
+ name = "Colourable ID Card"
+ icon_file = 'modular_nova/modules/GAGS/icons/id_card.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/items/id_card.json'
+
+/datum/greyscale_config/wargame_hologram_projector
+ name = "Wargame Hologram Projector"
+ icon_file = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json'
+
+// Evil primitive catgirl clothing
+
+/datum/greyscale_config/primitive_catgirl_wraps
+ name = "Primitive Body Wraps"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json'
+
+/datum/greyscale_config/primitive_catgirl_wraps/worn
+ name = "Primitive Body Wraps (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json'
+
+/datum/greyscale_config/primitive_catgirl_armwraps
+ name = "Arm Wraps"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json'
+
+/datum/greyscale_config/primitive_catgirl_armwraps/worn
+ name = "Arm Wraps (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json'
+
+/datum/greyscale_config/primitive_catgirl_coat
+ name = "Primitive Fur Coat"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json'
+
+/datum/greyscale_config/primitive_catgirl_coat/worn
+ name = "Primitive Fur Coat (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json'
+
+/datum/greyscale_config/primitive_catgirl_boots
+ name = "Primitive Winter Boots"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json'
+
+/datum/greyscale_config/primitive_catgirl_boots/worn
+ name = "Primitive Winter Boots (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json'
+
+/datum/greyscale_config/primitive_catgirl_gaiter
+ name = "Neck Gaiter"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json'
+
+/datum/greyscale_config/primitive_catgirl_gaiter/worn
+ name = "Neck Gaiter (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json'
+
+/datum/greyscale_config/primitive_catgirl_gauntlets
+ name = "Gauntlets"
+ icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json'
+
+/datum/greyscale_config/primitive_catgirl_gauntlets/worn
+ name = "Gauntlets (Worn)"
+ json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json'
diff --git a/modular_skyrat/modules/GAGS/icons/beret.dmi b/modular_nova/modules/GAGS/icons/beret.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/beret.dmi
rename to modular_nova/modules/GAGS/icons/beret.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/beret_teshari.dmi b/modular_nova/modules/GAGS/icons/beret_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/beret_teshari.dmi
rename to modular_nova/modules/GAGS/icons/beret_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/beret_vox.dmi b/modular_nova/modules/GAGS/icons/beret_vox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/beret_vox.dmi
rename to modular_nova/modules/GAGS/icons/beret_vox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/bow.dmi b/modular_nova/modules/GAGS/icons/bow.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/bow.dmi
rename to modular_nova/modules/GAGS/icons/bow.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/bow_worn.dmi b/modular_nova/modules/GAGS/icons/bow_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/bow_worn.dmi
rename to modular_nova/modules/GAGS/icons/bow_worn.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/cape.dmi b/modular_nova/modules/GAGS/icons/cape.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/cape.dmi
rename to modular_nova/modules/GAGS/icons/cape.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/cape_worn.dmi b/modular_nova/modules/GAGS/icons/cape_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/cape_worn.dmi
rename to modular_nova/modules/GAGS/icons/cape_worn.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/cloak.dmi b/modular_nova/modules/GAGS/icons/cloak.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/cloak.dmi
rename to modular_nova/modules/GAGS/icons/cloak.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/clown_mask.dmi b/modular_nova/modules/GAGS/icons/clown_mask.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/clown_mask.dmi
rename to modular_nova/modules/GAGS/icons/clown_mask.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/collar.dmi b/modular_nova/modules/GAGS/icons/collar.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/collar.dmi
rename to modular_nova/modules/GAGS/icons/collar.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/dressteshari.dmi b/modular_nova/modules/GAGS/icons/dressteshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/dressteshari.dmi
rename to modular_nova/modules/GAGS/icons/dressteshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/duster.dmi b/modular_nova/modules/GAGS/icons/duster.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/duster.dmi
rename to modular_nova/modules/GAGS/icons/duster.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/fancy_suits.dmi b/modular_nova/modules/GAGS/icons/fancy_suits.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/fancy_suits.dmi
rename to modular_nova/modules/GAGS/icons/fancy_suits.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/fancyheels.dmi b/modular_nova/modules/GAGS/icons/fancyheels.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/fancyheels.dmi
rename to modular_nova/modules/GAGS/icons/fancyheels.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/hats.dmi b/modular_nova/modules/GAGS/icons/hats.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/hats.dmi
rename to modular_nova/modules/GAGS/icons/hats.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/hawaiianshirt.dmi b/modular_nova/modules/GAGS/icons/hawaiianshirt.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/hawaiianshirt.dmi
rename to modular_nova/modules/GAGS/icons/hawaiianshirt.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi b/modular_nova/modules/GAGS/icons/head/catear_headphone.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi
rename to modular_nova/modules/GAGS/icons/head/catear_headphone.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi b/modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi
rename to modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/head.dmi b/modular_nova/modules/GAGS/icons/head/head.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/head.dmi
rename to modular_nova/modules/GAGS/icons/head/head.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi b/modular_nova/modules/GAGS/icons/head/head_newvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi
rename to modular_nova/modules/GAGS/icons/head/head_newvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi b/modular_nova/modules/GAGS/icons/head/head_oldvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi
rename to modular_nova/modules/GAGS/icons/head/head_oldvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi b/modular_nova/modules/GAGS/icons/head/head_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi
rename to modular_nova/modules/GAGS/icons/head/head_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/heels.dmi b/modular_nova/modules/GAGS/icons/heels.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/heels.dmi
rename to modular_nova/modules/GAGS/icons/heels.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/hoodie.dmi b/modular_nova/modules/GAGS/icons/hoodie.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/hoodie.dmi
rename to modular_nova/modules/GAGS/icons/hoodie.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/id_card.dmi b/modular_nova/modules/GAGS/icons/id_card.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/id_card.dmi
rename to modular_nova/modules/GAGS/icons/id_card.dmi
diff --git a/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi
new file mode 100644
index 00000000000..d8ebca6325a
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/jumpsuit_better_vox.dmi differ
diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi
rename to modular_nova/modules/GAGS/icons/jumpsuit_snake.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi
rename to modular_nova/modules/GAGS/icons/jumpsuit_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi b/modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi
rename to modular_nova/modules/GAGS/icons/jumpsuit_vox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/kilt.dmi b/modular_nova/modules/GAGS/icons/kilt.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/kilt.dmi
rename to modular_nova/modules/GAGS/icons/kilt.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/leather_jacket.dmi b/modular_nova/modules/GAGS/icons/leather_jacket.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/leather_jacket.dmi
rename to modular_nova/modules/GAGS/icons/leather_jacket.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/maid_costume.dmi b/modular_nova/modules/GAGS/icons/maid_costume.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/maid_costume.dmi
rename to modular_nova/modules/GAGS/icons/maid_costume.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi b/modular_nova/modules/GAGS/icons/maid_costume_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi
rename to modular_nova/modules/GAGS/icons/maid_costume_worn.dmi
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi
new file mode 100644
index 00000000000..6d80601a2be
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi differ
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi
new file mode 100644
index 00000000000..a080bb7d2e7
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi differ
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi
new file mode 100644
index 00000000000..58532e78ec8
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_better_vox.dmi differ
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi
new file mode 100644
index 00000000000..39076d1e30d
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_snouted.dmi differ
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi
new file mode 100644
index 00000000000..694f600739b
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_teshari.dmi differ
diff --git a/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi
new file mode 100644
index 00000000000..720e1b04b68
Binary files /dev/null and b/modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn_vox.dmi differ
diff --git a/modular_skyrat/modules/GAGS/icons/masks.dmi b/modular_nova/modules/GAGS/icons/masks.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/masks.dmi
rename to modular_nova/modules/GAGS/icons/masks.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/masks_snout.dmi b/modular_nova/modules/GAGS/icons/masks_snout.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/masks_snout.dmi
rename to modular_nova/modules/GAGS/icons/masks_snout.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/masks_teshari.dmi b/modular_nova/modules/GAGS/icons/masks_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/masks_teshari.dmi
rename to modular_nova/modules/GAGS/icons/masks_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/masks_vox.dmi b/modular_nova/modules/GAGS/icons/masks_vox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/masks_vox.dmi
rename to modular_nova/modules/GAGS/icons/masks_vox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi b/modular_nova/modules/GAGS/icons/masks_vox_better.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi
rename to modular_nova/modules/GAGS/icons/masks_vox_better.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/mushcap.dmi b/modular_nova/modules/GAGS/icons/mushcap.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/mushcap.dmi
rename to modular_nova/modules/GAGS/icons/mushcap.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi
rename to modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi
rename to modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi b/modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi
rename to modular_nova/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck.dmi b/modular_nova/modules/GAGS/icons/neck/neck.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/neck.dmi
rename to modular_nova/modules/GAGS/icons/neck/neck.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi b/modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi
rename to modular_nova/modules/GAGS/icons/neck/neck_newvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi b/modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi
rename to modular_nova/modules/GAGS/icons/neck/neck_oldvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi b/modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi
rename to modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/peacoat.dmi b/modular_nova/modules/GAGS/icons/peacoat.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/peacoat.dmi
rename to modular_nova/modules/GAGS/icons/peacoat.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi b/modular_nova/modules/GAGS/icons/ranger_poncho.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi
rename to modular_nova/modules/GAGS/icons/ranger_poncho.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi b/modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi
rename to modular_nova/modules/GAGS/icons/ranger_poncho_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes.dmi b/modular_nova/modules/GAGS/icons/shoes.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes.dmi
rename to modular_nova/modules/GAGS/icons/shoes.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi
rename to modular_nova/modules/GAGS/icons/shoes/shoes.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi
rename to modular_nova/modules/GAGS/icons/shoes/shoes_digi.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi
rename to modular_nova/modules/GAGS/icons/shoes/shoes_newvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi
rename to modular_nova/modules/GAGS/icons/shoes/shoes_oldvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi b/modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi
rename to modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/shorts_pants.dmi b/modular_nova/modules/GAGS/icons/shorts_pants.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/shorts_pants.dmi
rename to modular_nova/modules/GAGS/icons/shorts_pants.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi b/modular_nova/modules/GAGS/icons/sneakers_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi
rename to modular_nova/modules/GAGS/icons/sneakers_digi.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi b/modular_nova/modules/GAGS/icons/sneakers_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi
rename to modular_nova/modules/GAGS/icons/sneakers_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi b/modular_nova/modules/GAGS/icons/sneakers_vox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi
rename to modular_nova/modules/GAGS/icons/sneakers_vox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit.dmi b/modular_nova/modules/GAGS/icons/suit.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit.dmi
rename to modular_nova/modules/GAGS/icons/suit.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit.dmi b/modular_nova/modules/GAGS/icons/suit/suit.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit/suit.dmi
rename to modular_nova/modules/GAGS/icons/suit/suit.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_digi.dmi b/modular_nova/modules/GAGS/icons/suit/suit_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit/suit_digi.dmi
rename to modular_nova/modules/GAGS/icons/suit/suit_digi.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi b/modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi
rename to modular_nova/modules/GAGS/icons/suit/suit_newvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi b/modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi
rename to modular_nova/modules/GAGS/icons/suit/suit_oldvox.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi b/modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi
rename to modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/sweaters.dmi b/modular_nova/modules/GAGS/icons/sweaters.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/sweaters.dmi
rename to modular_nova/modules/GAGS/icons/sweaters.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi b/modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi
rename to modular_nova/modules/GAGS/icons/teshari_fallbacks.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi b/modular_nova/modules/GAGS/icons/teshari_uniform.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi
rename to modular_nova/modules/GAGS/icons/teshari_uniform.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/urban_coat.dmi b/modular_nova/modules/GAGS/icons/urban_coat.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/urban_coat.dmi
rename to modular_nova/modules/GAGS/icons/urban_coat.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/warm_coat.dmi b/modular_nova/modules/GAGS/icons/warm_coat.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/warm_coat.dmi
rename to modular_nova/modules/GAGS/icons/warm_coat.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi b/modular_nova/modules/GAGS/icons/warm_coat_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi
rename to modular_nova/modules/GAGS/icons/warm_coat_worn.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/warm_sweater.dmi b/modular_nova/modules/GAGS/icons/warm_sweater.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/warm_sweater.dmi
rename to modular_nova/modules/GAGS/icons/warm_sweater.dmi
diff --git a/modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi b/modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi
rename to modular_nova/modules/GAGS/icons/warm_sweater_worn.dmi
diff --git a/modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json b/modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json
rename to modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json b/modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json
rename to modular_nova/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret.json b/modular_nova/modules/GAGS/json_configs/beret/beret.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret_badge_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json b/modular_nova/modules/GAGS/json_configs/beret/beret_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json
rename to modular_nova/modules/GAGS/json_configs/beret/beret_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json b/modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json
rename to modular_nova/modules/GAGS/json_configs/cardigan/cardigan.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json b/modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json
rename to modular_nova/modules/GAGS/json_configs/cardigan/cardigan_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/boat.json b/modular_nova/modules/GAGS/json_configs/cloak/boat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/boat.json
rename to modular_nova/modules/GAGS/json_configs/cloak/boat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json
rename to modular_nova/modules/GAGS/json_configs/cloak/boat_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json b/modular_nova/modules/GAGS/json_configs/cloak/cloak.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json
rename to modular_nova/modules/GAGS/json_configs/cloak/cloak.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json
rename to modular_nova/modules/GAGS/json_configs/cloak/cloak_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/long_cape.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json
rename to modular_nova/modules/GAGS/json_configs/cloak/long_cape.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json
rename to modular_nova/modules/GAGS/json_configs/cloak/robe_cape.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json b/modular_nova/modules/GAGS/json_configs/cloak/shroud.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json
rename to modular_nova/modules/GAGS/json_configs/cloak/shroud.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json
rename to modular_nova/modules/GAGS/json_configs/cloak/shroud_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/veil.json b/modular_nova/modules/GAGS/json_configs/cloak/veil.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/veil.json
rename to modular_nova/modules/GAGS/json_configs/cloak/veil.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json b/modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json
rename to modular_nova/modules/GAGS/json_configs/cloak/veil_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json b/modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json
rename to modular_nova/modules/GAGS/json_configs/cloak/wide_cape.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json b/modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json
rename to modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json b/modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json
rename to modular_nova/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/bell.json b/modular_nova/modules/GAGS/json_configs/collar/bell.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/bell.json
rename to modular_nova/modules/GAGS/json_configs/collar/bell.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json b/modular_nova/modules/GAGS/json_configs/collar/bell_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/bell_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/choker.json b/modular_nova/modules/GAGS/json_configs/collar/choker.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/choker.json
rename to modular_nova/modules/GAGS/json_configs/collar/choker.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json b/modular_nova/modules/GAGS/json_configs/collar/choker_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/choker_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cow.json b/modular_nova/modules/GAGS/json_configs/collar/cow.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/cow.json
rename to modular_nova/modules/GAGS/json_configs/collar/cow.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json b/modular_nova/modules/GAGS/json_configs/collar/cow_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/cow_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cross.json b/modular_nova/modules/GAGS/json_configs/collar/cross.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/cross.json
rename to modular_nova/modules/GAGS/json_configs/collar/cross.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json b/modular_nova/modules/GAGS/json_configs/collar/cross_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/cross_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/holo.json b/modular_nova/modules/GAGS/json_configs/collar/holo.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/holo.json
rename to modular_nova/modules/GAGS/json_configs/collar/holo.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json b/modular_nova/modules/GAGS/json_configs/collar/holo_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/holo_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/leather.json b/modular_nova/modules/GAGS/json_configs/collar/leather.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/leather.json
rename to modular_nova/modules/GAGS/json_configs/collar/leather.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json b/modular_nova/modules/GAGS/json_configs/collar/leather_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/leather_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/pet.json b/modular_nova/modules/GAGS/json_configs/collar/pet.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/pet.json
rename to modular_nova/modules/GAGS/json_configs/collar/pet.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json b/modular_nova/modules/GAGS/json_configs/collar/pet_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/pet_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/spike.json b/modular_nova/modules/GAGS/json_configs/collar/spike.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/spike.json
rename to modular_nova/modules/GAGS/json_configs/collar/spike.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json b/modular_nova/modules/GAGS/json_configs/collar/spike_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/spike_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json b/modular_nova/modules/GAGS/json_configs/collar/thinchoker.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json
rename to modular_nova/modules/GAGS/json_configs/collar/thinchoker.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json b/modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json
rename to modular_nova/modules/GAGS/json_configs/collar/thinchoker_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json b/modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json
rename to modular_nova/modules/GAGS/json_configs/costumes/buttondown_vicvest.json
diff --git a/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json b/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json
new file mode 100644
index 00000000000..046dac4fabe
--- /dev/null
+++ b/modular_nova/modules/GAGS/json_configs/costumes/chrimbo.json
@@ -0,0 +1,41 @@
+{
+ "christmas_male": [
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_male_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_male_trim",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_male_belt",
+ "blend_mode": "overlay"
+ }
+ ],
+
+ "christmas_female": [
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_female_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_female_trim",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_female_belt",
+ "blend_mode": "overlay"
+ }
+ ]
+}
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json
rename to modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json
rename to modular_nova/modules/GAGS/json_configs/costumes/maid_arm_covers.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json
rename to modular_nova/modules/GAGS/json_configs/costumes/maid_costume.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json
rename to modular_nova/modules/GAGS/json_configs/costumes/maid_headband.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json b/modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json
rename to modular_nova/modules/GAGS/json_configs/costumes/maid_neck_cover.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/duster/duster.json b/modular_nova/modules/GAGS/json_configs/duster/duster.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/duster/duster.json
rename to modular_nova/modules/GAGS/json_configs/duster/duster.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json b/modular_nova/modules/GAGS/json_configs/duster/duster_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json
rename to modular_nova/modules/GAGS/json_configs/duster/duster_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json
rename to modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json
rename to modular_nova/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json b/modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json
rename to modular_nova/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json b/modular_nova/modules/GAGS/json_configs/flannel/flannel.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json
rename to modular_nova/modules/GAGS/json_configs/flannel/flannel.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json b/modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json
rename to modular_nova/modules/GAGS/json_configs/flannel/flannel_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json b/modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json
rename to modular_nova/modules/GAGS/json_configs/flatcap/flatcap.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json b/modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json
rename to modular_nova/modules/GAGS/json_configs/flatcap/flatcap_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json b/modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json
rename to modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json b/modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json
rename to modular_nova/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/back_bow.json b/modular_nova/modules/GAGS/json_configs/head/back_bow.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/back_bow.json
rename to modular_nova/modules/GAGS/json_configs/head/back_bow.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json
rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json
rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json
rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json b/modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json
rename to modular_nova/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json b/modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json
rename to modular_nova/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json b/modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json
rename to modular_nova/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json b/modular_nova/modules/GAGS/json_configs/head/hood/hood.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json
rename to modular_nova/modules/GAGS/json_configs/head/hood/hood.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json b/modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json
rename to modular_nova/modules/GAGS/json_configs/head/hood/hood_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/large_bow.json b/modular_nova/modules/GAGS/json_configs/head/large_bow.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/large_bow.json
rename to modular_nova/modules/GAGS/json_configs/head/large_bow.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/small_bow.json b/modular_nova/modules/GAGS/json_configs/head/small_bow.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/small_bow.json
rename to modular_nova/modules/GAGS/json_configs/head/small_bow.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json b/modular_nova/modules/GAGS/json_configs/head/sweet_bow.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json
rename to modular_nova/modules/GAGS/json_configs/head/sweet_bow.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json b/modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json
rename to modular_nova/modules/GAGS/json_configs/hoodie/hoodie_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/items/id_card.json b/modular_nova/modules/GAGS/json_configs/items/id_card.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/items/id_card.json
rename to modular_nova/modules/GAGS/json_configs/items/id_card.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json b/modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json
rename to modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json b/modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json
rename to modular_nova/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json b/modular_nova/modules/GAGS/json_configs/kilt/kilt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json
rename to modular_nova/modules/GAGS/json_configs/kilt/kilt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json b/modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json
rename to modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json
rename to modular_nova/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json
diff --git a/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json b/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json
new file mode 100644
index 00000000000..0bbac3ac832
--- /dev/null
+++ b/modular_nova/modules/GAGS/json_configs/masquerade_mask/masquerade_mask.json
@@ -0,0 +1,58 @@
+{
+ "maskerade": [
+ {
+ "type": "icon_state",
+ "icon_state": "mask",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ }
+ ],
+ "maskerade_two_colors": [
+ {
+ "type": "icon_state",
+ "icon_state": "mask_left",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mask_right",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ],
+ "maskerade_feather": [
+ {
+ "type": "icon_state",
+ "icon_state": "mask",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mask_feather",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ],
+ "maskerade_two_colors_feather": [
+ {
+ "type": "icon_state",
+ "icon_state": "mask_left",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mask_right",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "mask_feather",
+ "blend_mode": "overlay",
+ "color_ids": [ 3 ]
+ }
+ ]
+}
diff --git a/modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json b/modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json
rename to modular_nova/modules/GAGS/json_configs/mush_cap/mushcap.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json b/modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json
rename to modular_nova/modules/GAGS/json_configs/mush_cap/mushcap_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/belt.json b/modular_nova/modules/GAGS/json_configs/nabber_fallbacks/belt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/belt.json
rename to modular_nova/modules/GAGS/json_configs/nabber_fallbacks/belt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/gloves.json b/modular_nova/modules/GAGS/json_configs/nabber_fallbacks/gloves.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/gloves.json
rename to modular_nova/modules/GAGS/json_configs/nabber_fallbacks/gloves.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/neck.json b/modular_nova/modules/GAGS/json_configs/nabber_fallbacks/neck.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/neck.json
rename to modular_nova/modules/GAGS/json_configs/nabber_fallbacks/neck.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/uniform.json b/modular_nova/modules/GAGS/json_configs/nabber_fallbacks/uniform.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nabber_fallbacks/uniform.json
rename to modular_nova/modules/GAGS/json_configs/nabber_fallbacks/uniform.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json b/modular_nova/modules/GAGS/json_configs/neck/face_scarf.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json
rename to modular_nova/modules/GAGS/json_configs/neck/face_scarf.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json b/modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json
rename to modular_nova/modules/GAGS/json_configs/neck/mantle/mantle.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json b/modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json
rename to modular_nova/modules/GAGS/json_configs/neck/mantle/mantle_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json
rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json
rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json
rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json b/modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json
rename to modular_nova/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json
rename to modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json b/modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json
rename to modular_nova/modules/GAGS/json_configs/peacoat/peacoat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json b/modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json
rename to modular_nova/modules/GAGS/json_configs/peacoat/peacoat_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json
rename to modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json b/modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json
rename to modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json b/modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json
rename to modular_nova/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json b/modular_nova/modules/GAGS/json_configs/respirator/respirator.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json
rename to modular_nova/modules/GAGS/json_configs/respirator/respirator.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json b/modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json
rename to modular_nova/modules/GAGS/json_configs/respirator/respirator_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json
rename to modular_nova/modules/GAGS/json_configs/shoes/boots/boots.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json
rename to modular_nova/modules/GAGS/json_configs/shoes/boots/boots_worn.json
diff --git a/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json b/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json
new file mode 100644
index 00000000000..85c261d4fb4
--- /dev/null
+++ b/modular_nova/modules/GAGS/json_configs/shoes/boots/christmas_boots.json
@@ -0,0 +1,16 @@
+{
+ "christmas_boots": [
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_boots_base",
+ "blend_mode": "overlay",
+ "color_ids": [ 1 ]
+ },
+ {
+ "type": "icon_state",
+ "icon_state": "christmas_boots_trim",
+ "blend_mode": "overlay",
+ "color_ids": [ 2 ]
+ }
+ ]
+}
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json
rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json
rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json b/modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json
rename to modular_nova/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json
rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json
rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json b/modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json
rename to modular_nova/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json b/modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json
rename to modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json
rename to modular_nova/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json b/modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json
rename to modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json b/modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json
rename to modular_nova/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json b/modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json
rename to modular_nova/modules/GAGS/json_configs/sterile_mask/sterile.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json b/modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json
rename to modular_nova/modules/GAGS/json_configs/sterile_mask/sterile_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json b/modular_nova/modules/GAGS/json_configs/suits/apron/apron.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json
rename to modular_nova/modules/GAGS/json_configs/suits/apron/apron.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json b/modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json
rename to modular_nova/modules/GAGS/json_configs/suits/apron/apron_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json b/modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json
rename to modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json b/modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json
rename to modular_nova/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json
rename to modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json
rename to modular_nova/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json
rename to modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json b/modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json
rename to modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json b/modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json
rename to modular_nova/modules/GAGS/json_configs/suits/varsity/varsity.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json b/modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json
rename to modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json
rename to modular_nova/modules/GAGS/json_configs/sweater/heart_sweater.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/sweater.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json
rename to modular_nova/modules/GAGS/json_configs/sweater/sweater.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json b/modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json
rename to modular_nova/modules/GAGS/json_configs/sweater/sweater_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json b/modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json
rename to modular_nova/modules/GAGS/json_configs/sweater/warm_sweater.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/armor.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/backpack.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/cloak.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/coat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/glasses.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/gloves.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/scarf.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/shoes.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/tie.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json b/modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json
rename to modular_nova/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json b/modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json
rename to modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json b/modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json
rename to modular_nova/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json b/modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json
rename to modular_nova/modules/GAGS/json_configs/wargame_holoprojector/projector.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json b/modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json
rename to modular_nova/modules/GAGS/json_configs/winter_coat/warm_coat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json
rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json
rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json b/modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json
rename to modular_nova/modules/GAGS/json_configs/winter_coat/winter_hood.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json
rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json
rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json b/modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json
rename to modular_nova/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json b/modular_nova/modules/GAGS/json_configs/wraps/wraps.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json
rename to modular_nova/modules/GAGS/json_configs/wraps/wraps.json
diff --git a/modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json b/modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json
rename to modular_nova/modules/GAGS/json_configs/wraps/wraps_worn.json
diff --git a/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm b/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm
new file mode 100644
index 00000000000..9af24b9b2ec
--- /dev/null
+++ b/modular_nova/modules/GAGS/nsfw/greyscale_configs.dm
@@ -0,0 +1,215 @@
+/*
+* NSFW GREYSCALE CONFIGS TO GO IN HERE
+*/
+
+// MASKS
+
+/datum/greyscale_config/ballgag
+ name = "Ball Gag"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json'
+
+/datum/greyscale_config/ballgag/worn
+ name = "Ball Gag (Worn)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json'
+
+/datum/greyscale_config/ballgag/left_hand
+ name = "Ball Gag (Inhand, Left)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json'
+
+/datum/greyscale_config/ballgag/right_hand
+ name = "Ball Gag (Inhand, Right)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json'
+
+/datum/greyscale_config/ballgag/choking_small
+ name = "Choke Gag (Small)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json'
+
+/datum/greyscale_config/ballgag/choking_medium
+ name = "Choke Gag (Medium)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json'
+
+/datum/greyscale_config/ballgag/choking_large
+ name = "Choke Gag (Large)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json'
+
+//shibari stand
+
+/datum/greyscale_config/shibari_stand
+ name = "Shibari Stand"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json'
+
+/datum/greyscale_config/shibari_stand_item
+ name = "Shibari Stand (Item)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json'
+
+/datum/greyscale_config/shibari_stand_ropes
+ name = "Shibari Stand (Rope Overlays)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json'
+
+//shibari
+
+/datum/greyscale_config/shibari_rope
+ name = "Shibari Rope"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json'
+
+/datum/greyscale_config/shibari_rope_inhand_left
+ name = "Shibari Rope (Inhand, Left)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json'
+
+/datum/greyscale_config/shibari_rope_inhand_right
+ name = "Shibari Rope (Inhand, Right)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json'
+
+/datum/greyscale_config/shibari_rope/med
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json'
+
+/datum/greyscale_config/shibari_rope/high
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json'
+
+/datum/greyscale_config/shibari
+ name = "Shibari"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/worn
+ name = "Shibari (Worn)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/worn/digi
+ name = "Shibari (Worn, Digi)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/worn/taur_snake
+ name = "Shibari (Worn, Taur Snake)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/worn/taur_paw
+ name = "Shibari (Worn, Taur Paw)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/worn/taur_hoof
+ name = "Shibari (Worn, Taur Hoof)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+//body
+
+/datum/greyscale_config/shibari/body
+ name = "Shibari Body"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/body/worn
+ name = "Shibari Body (Worn)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/body/worn/digi
+ name = "Shibari Body (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/body/worn/taur_snake
+ name = "Shibari Body (Worn, Taur Snake)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/body/worn/taur_paw
+ name = "Shibari Body (Worn, Taur Paw)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+/datum/greyscale_config/shibari/body/worn/taur_hoof
+ name = "Shibari Body (Worn, Taur Hoof)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json'
+
+//groin
+
+/datum/greyscale_config/shibari/groin
+ name = "Shibari Groin"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+/datum/greyscale_config/shibari/groin/worn
+ name = "Shibari Groin (Worn)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+/datum/greyscale_config/shibari/groin/worn/digi
+ name = "Shibari Groin (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+/datum/greyscale_config/shibari/groin/worn/taur_snake
+ name = "Shibari Groin (Worn, Taur Snake)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+/datum/greyscale_config/shibari/groin/worn/taur_paw
+ name = "Shibari Groin (Worn, Taur Paw)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+/datum/greyscale_config/shibari/groin/worn/taur_hoof
+ name = "Shibari Groin (Worn, Taur Hoof)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json'
+
+//fullbody
+
+/datum/greyscale_config/shibari/fullbody
+ name = "Shibari Fullbody"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+/datum/greyscale_config/shibari/worn/fullbody
+ name = "Shibari Fullbody (Worn)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+/datum/greyscale_config/shibari/fullbody/worn/digi
+ name = "Shibari Fullbody (Worn, Digi)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+/datum/greyscale_config/shibari/fullbody/worn/taur_snake
+ name = "Shibari Fullbody (Worn, Taur Snake)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+/datum/greyscale_config/shibari/fullbody/worn/taur_paw
+ name = "Shibari Fullbody (Worn, Taur Paw)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+/datum/greyscale_config/shibari/fullbody/worn/taur_hoof
+ name = "Shibari Fullbody (Worn, Taur Hoof)"
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
+
+//hands
+
+/datum/greyscale_config/shibari/hands
+ name = "Shibari Hands"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json'
+
+/datum/greyscale_config/shibari/hands/worn
+ name = "Shibari Hands (Worn)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json'
+
+//legs
+
+/datum/greyscale_config/shibari/legs
+ name = "Shibari Legs"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json'
+
+/datum/greyscale_config/shibari/legs/worn
+ name = "Shibari Legs (Worn)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json'
+
+/datum/greyscale_config/shibari/legs/worn/digi
+ name = "Shibari Legs Digi (Worn, Digi)"
+ icon_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
+ json_config = 'modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json'
+
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/body.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/fullbody.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/groin.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/hands.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json b/modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/clothes/legs.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_high.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_med.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json b/modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/chokegag.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/chokegag.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/chokegag.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/chokegag.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_large.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_medium.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json b/modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/mask/choking_small.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json b/modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json
diff --git a/modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json b/modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json
similarity index 100%
rename from modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json
rename to modular_nova/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json
diff --git a/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm b/modular_nova/modules/Midroundtraitor/code/datum_traitor.dm
similarity index 100%
rename from modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm
rename to modular_nova/modules/Midroundtraitor/code/datum_traitor.dm
diff --git a/modular_skyrat/modules/Midroundtraitor/code/event.dm b/modular_nova/modules/Midroundtraitor/code/event.dm
similarity index 100%
rename from modular_skyrat/modules/Midroundtraitor/code/event.dm
rename to modular_nova/modules/Midroundtraitor/code/event.dm
diff --git a/modular_skyrat/modules/QOL/code/_under.dm b/modular_nova/modules/QOL/code/_under.dm
similarity index 100%
rename from modular_skyrat/modules/QOL/code/_under.dm
rename to modular_nova/modules/QOL/code/_under.dm
diff --git a/modular_skyrat/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm b/modular_nova/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm
similarity index 100%
rename from modular_skyrat/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm
rename to modular_nova/modules/QOL/code/datums/components/crafting/recipes/recipes_misc.dm
diff --git a/modular_skyrat/modules/QOL/code/game/objects/items/mop.dm b/modular_nova/modules/QOL/code/game/objects/items/mop.dm
similarity index 100%
rename from modular_skyrat/modules/QOL/code/game/objects/items/mop.dm
rename to modular_nova/modules/QOL/code/game/objects/items/mop.dm
diff --git a/modular_skyrat/modules/QOL/readme.md b/modular_nova/modules/QOL/readme.md
similarity index 100%
rename from modular_skyrat/modules/QOL/readme.md
rename to modular_nova/modules/QOL/readme.md
diff --git a/modular_nova/modules/SEVA_suit/code/seva_obj.dm b/modular_nova/modules/SEVA_suit/code/seva_obj.dm
new file mode 100644
index 00000000000..0071c330d96
--- /dev/null
+++ b/modular_nova/modules/SEVA_suit/code/seva_obj.dm
@@ -0,0 +1,59 @@
+/obj/item/clothing/suit/hooded/seva
+ name = "SEVA suit"
+ desc = "A fire-proof suit for exploring hot environments. Its design doesn't allow for upgrading with goliath plates."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi'
+ icon_state = "seva"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ flags_inv = HIDEJUMPSUIT|HIDETAIL
+ cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ w_class = WEIGHT_CLASS_BULKY
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ hoodtype = /obj/item/clothing/head/hooded/seva
+ armor_type = /datum/armor/hooded_seva
+ resistance_flags = FIRE_PROOF
+ transparent_protection = HIDEJUMPSUIT
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe)
+
+/datum/armor/hooded_seva
+ melee = 20
+ bullet = 10
+ laser = 10
+ energy = 10
+ bomb = 30
+ bio = 50
+ fire = 100
+ acid = 50
+ wound = 10
+
+/obj/item/clothing/head/hooded/seva
+ name = "SEVA hood"
+ desc = "A fire-proof hood for exploring hot environments. Its design doesn't allow for upgrading with goliath plates."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi'
+ icon_state = "seva"
+ body_parts_covered = HEAD
+ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT
+ cold_protection = HEAD
+ heat_protection = HEAD
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ clothing_traits = list(TRAIT_ASHSTORM_IMMUNE)
+ armor_type = /datum/armor/hooded_seva
+ resistance_flags = FIRE_PROOF
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION //I can't find the snout sprite so I'm just gonna force it to do this
+
+/obj/item/clothing/mask/gas/seva
+ name = "SEVA mask"
+ desc = "A head-covering mask that can be connected to an external air supply. Intended for use with the SEVA Suit."
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi'
+ icon_state = "seva"
+ resistance_flags = FIRE_PROOF
+ flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT
diff --git a/modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm b/modular_nova/modules/SEVA_suit/code/suit_voucher.dm
similarity index 91%
rename from modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm
rename to modular_nova/modules/SEVA_suit/code/suit_voucher.dm
index 0e0d5378962..5d686da54e2 100644
--- a/modular_skyrat/modules/SEVA_suit/code/suit_voucher.dm
+++ b/modular_nova/modules/SEVA_suit/code/suit_voucher.dm
@@ -11,7 +11,7 @@
//More items can be added in the lists and in the if statement.
/obj/machinery/computer/order_console/mining/proc/redeem_suit_voucher(obj/item/suit_voucher/voucher, mob/redeemer)
var/items = list(
- "SEVA suit" = image(icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi', icon_state = "seva"),
+ "SEVA suit" = image(icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi', icon_state = "seva"),
"Explorer suit" = image(icon = 'icons/obj/clothing/suits/utility.dmi', icon_state = "explorer"),
)
diff --git a/modular_skyrat/modules/SiliconQoL/code/_onclick.dm b/modular_nova/modules/SiliconQoL/code/_onclick.dm
similarity index 90%
rename from modular_skyrat/modules/SiliconQoL/code/_onclick.dm
rename to modular_nova/modules/SiliconQoL/code/_onclick.dm
index 9589c8d40ab..93d82a2c6ec 100644
--- a/modular_skyrat/modules/SiliconQoL/code/_onclick.dm
+++ b/modular_nova/modules/SiliconQoL/code/_onclick.dm
@@ -8,7 +8,7 @@
if(airlock)
airlock.AICtrlShiftClick(src)
else
- A.AICtrlShiftClick(src) // End of skyrat edit
+ A.AICtrlShiftClick(src) // End of NOVA EDIT
/mob/living/silicon/ai/ShiftClickOn(atom/A)
if(isturf(A))
@@ -56,7 +56,7 @@
/mob/living/silicon/robot/CtrlShiftClickOn(atom/A)
if(isturf(A))
- var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit
+ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT
if(airlock)
airlock.BorgCtrlShiftClick(src)
else
@@ -64,7 +64,7 @@
/mob/living/silicon/robot/ShiftClickOn(atom/A)
if(isturf(A))
- var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit
+ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT
if(airlock)
airlock.BorgShiftClick(src)
else
@@ -72,15 +72,15 @@
/mob/living/silicon/robot/CtrlClickOn(atom/A)
if(isturf(A))
- var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit
+ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT
if(airlock)
airlock.BorgCtrlClick(src)
else
- A.BorgCtrlClick(src) // End of skyrat edit
+ A.BorgCtrlClick(src) // End of NOVA EDIT
/mob/living/silicon/robot/AltClickOn(atom/A)
if(isturf(A))
- var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // Skyrat edit
+ var/obj/machinery/door/airlock/airlock = locate(/obj/machinery/door/airlock) in A // NOVA EDIT
if(airlock)
airlock.BorgAltClick(src)
else
diff --git a/modular_nova/modules/SiliconQoL/code/countdown.dm b/modular_nova/modules/SiliconQoL/code/countdown.dm
new file mode 100644
index 00000000000..ef6eb92ce5e
--- /dev/null
+++ b/modular_nova/modules/SiliconQoL/code/countdown.dm
@@ -0,0 +1,14 @@
+/obj/effect/countdown/transformer_rp
+ name = "transformer countdown"
+ color = "#4C5866"
+
+/obj/effect/countdown/transformer_rp/get_value()
+ var/obj/machinery/transformer_rp/transformer = attached_to
+ if(!istype(transformer))
+ return
+ if(!transformer.is_operational)
+ return
+ if(transformer.cooldown && (transformer.stored_cyborgs > 0))
+ return "[round(max(0, transformer.cooldown_timer / 10))]"
+ if(transformer.stored_cyborgs < 1)
+ return "[round(max(0, transformer.stored_timer / 10))]"
diff --git a/modular_nova/modules/SiliconQoL/code/robotic_factory.dm b/modular_nova/modules/SiliconQoL/code/robotic_factory.dm
new file mode 100644
index 00000000000..b4e8e0a5fb0
--- /dev/null
+++ b/modular_nova/modules/SiliconQoL/code/robotic_factory.dm
@@ -0,0 +1,112 @@
+/obj/machinery/transformer_rp
+ name = "\improper Automatic Robotic Factory 5000"
+ desc = "A large metallic machine with an entrance and an exit. A sign on \
+ the side reads, 'Mass robot production facility'"
+ icon = 'icons/obj/machines/recycling.dmi'
+ icon_state = "separator-AO1"
+ base_icon_state = "separator-AO0"
+ layer = ABOVE_ALL_MOB_LAYER // Overhead
+ density = TRUE
+ /// How many cyborgs are we storing
+ var/stored_cyborgs = 1
+ /// How many cyborgs can we store?
+ var/max_stored_cyborgs = 4
+ // How much time between the spawning of new cyborgs?
+ var/cooldown_duration = 1 MINUTES
+ /// Handles the Cyborg spawner timer.
+ var/cooldown_timer = 0
+ /// Whether we're on spawn cooldown.
+ var/cooldown = FALSE
+ /// How much time between the storing of cyborgs?
+ var/stored_duration = 5 MINUTES
+ /// Handles the stored Cyborg timer.
+ var/stored_timer
+ /// The countdown itself
+ var/obj/effect/countdown/transformer_rp/countdown
+ /// The master AI , assigned when placed down with the ability.
+ var/mob/living/silicon/ai/master_ai
+
+/obj/machinery/transformer_rp/Initialize(mapload)
+ // On us
+ . = ..()
+ new /obj/machinery/conveyor/auto(loc, WEST)
+ stored_timer = stored_duration
+ countdown = new(src)
+ countdown.start()
+
+/obj/machinery/transformer_rp/on_set_is_operational(old_value)
+ if(old_value)
+ end_processing()
+ else
+ begin_processing()
+
+/obj/machinery/transformer_rp/examine(mob/user)
+ . = ..()
+ if(issilicon(user) || isobserver(user))
+ . += " It has [stored_cyborgs] cyborgs stored."
+ if(!is_operational)
+ . += span_warning("It has no power!")
+ return
+ if(cooldown && cooldown_timer)
+ . += " It will be ready to deploy a stored cyborg in [DisplayTimeText(max(0, cooldown_timer))]."
+ if(stored_cyborgs >= max_stored_cyborgs)
+ return
+ . += " It will store a new cyborg in [DisplayTimeText(max(0, stored_timer))]."
+
+/obj/machinery/transformer_rp/Destroy()
+ QDEL_NULL(countdown)
+ . = ..()
+
+/obj/machinery/transformer_rp/update_icon_state()
+ . = ..()
+ if(is_operational)
+ icon_state = "separator-AO1"
+ else
+ icon_state = base_icon_state
+
+/obj/machinery/transformer_rp/attack_ghost(mob/dead/observer/target_ghost)
+ . = ..()
+ create_a_cyborg(target_ghost)
+
+/obj/machinery/transformer_rp/process(seconds_per_tick)
+ cooldown_timer = max(0, cooldown_timer - (seconds_per_tick * 10))
+ if(cooldown_timer == 0)
+ cooldown = FALSE
+
+ stored_timer = max(0, stored_timer - (seconds_per_tick * 10))
+ if(stored_timer > 0)
+ return
+
+ stored_timer = stored_duration
+
+ if(stored_cyborgs >= max_stored_cyborgs)
+ return
+
+ stored_cyborgs++
+ notify_ghosts("A new cyborg shell has been created at the [src]",
+ source = src,
+ notify_flags = NOTIFY_CATEGORY_NOFLASH,
+ header = "New malfunctioning cyborg created!",
+ )
+
+/obj/machinery/transformer_rp/proc/create_a_cyborg(mob/dead/observer/target_ghost)
+ if(!is_operational)
+ return
+ if(stored_cyborgs < 1)
+ return
+ if(cooldown)
+ return
+
+ var/cyborg_ask = tgui_alert(target_ghost, "Become a cyborg?", "Are you a terminator?", list("Yes", "No"))
+ if(cyborg_ask == "No" || !src || QDELETED(src))
+ return FALSE
+
+ var/mob/living/silicon/robot/cyborg = new /mob/living/silicon/robot(loc)
+ cyborg.key = target_ghost.key
+ cyborg.set_connected_ai(master_ai)
+ cyborg.lawsync()
+ cyborg.lawupdate = TRUE
+ stored_cyborgs--
+
+ cooldown = TRUE
+ cooldown_timer = cooldown_duration
diff --git a/modular_skyrat/modules/SiliconQoL/readme.md b/modular_nova/modules/SiliconQoL/readme.md
similarity index 100%
rename from modular_skyrat/modules/SiliconQoL/readme.md
rename to modular_nova/modules/SiliconQoL/readme.md
diff --git a/modular_skyrat/modules/Syndie_edits/code/area.dm b/modular_nova/modules/Syndie_edits/code/area.dm
similarity index 100%
rename from modular_skyrat/modules/Syndie_edits/code/area.dm
rename to modular_nova/modules/Syndie_edits/code/area.dm
diff --git a/modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm b/modular_nova/modules/Syndie_edits/code/syndie_edits.dm
similarity index 77%
rename from modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm
rename to modular_nova/modules/Syndie_edits/code/syndie_edits.dm
index b800778df80..bcfe5b08d51 100644
--- a/modular_skyrat/modules/Syndie_edits/code/syndie_edits.dm
+++ b/modular_nova/modules/Syndie_edits/code/syndie_edits.dm
@@ -1,8 +1,8 @@
//DS-2/Syndicate clothing.
/obj/item/clothing/suit/armor/vest/capcarapace/syndicate
- icon = 'modular_skyrat/modules/syndie_edits/icons/obj.dmi'
- worn_icon = 'modular_skyrat/modules/syndie_edits/icons/worn.dmi'
+ icon = 'modular_nova/modules/syndie_edits/icons/obj.dmi'
+ worn_icon = 'modular_nova/modules/syndie_edits/icons/worn.dmi'
icon_state = "syndievest"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -14,8 +14,8 @@
/obj/item/clothing/suit/armor/vest/capcarapace/syndicate/winter
name = "syndicate captain's winter vest"
desc = "A sinister yet comfortable looking vest of advanced armor worn over a black and red fireproof jacket. The fur is said to be from wolves on the icemoon."
- icon = 'modular_skyrat/modules/syndie_edits/icons/obj.dmi'
- worn_icon = 'modular_skyrat/modules/syndie_edits/icons/worn.dmi'
+ icon = 'modular_nova/modules/syndie_edits/icons/obj.dmi'
+ worn_icon = 'modular_nova/modules/syndie_edits/icons/worn.dmi'
icon_state = "syndievest_winter"
body_parts_covered = CHEST|GROIN
cold_protection = CHEST|GROIN|ARMS
@@ -29,16 +29,16 @@
/obj/item/clothing/head/hats/warden/syndicate
name = "master at arms' police hat"
desc = "A fashionable police cap emblazoned with a golden badge, issued to the Master at Arms. Protects the head from impacts."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "policehelm_syndie"
dog_fashion = null
/obj/item/clothing/head/helmet/swat/ds
name = "SWAT helmet"
desc = "A robust and spaceworthy helmet with a small cross on it along with 'IP' written across the earpad."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "swat_ds"
supports_variations_flags = CLOTHING_SNOUTED_VARIATION
@@ -53,8 +53,8 @@
/obj/item/clothing/mask/gas/syndicate/ds
name = "balaclava"
desc = "A fancy balaclava, while it doesn't muffle your voice, it's fireproof and has a miniature rebreather for internals. Comfy to boot!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "balaclava_ds"
flags_inv = HIDEFACE | HIDEEARS | HIDEFACIALHAIR
alternate_worn_layer = LOW_FACEMASK_LAYER //This lets it layer below glasses and headsets; yes, that's below hair, but it already has HIDEHAIR
@@ -65,20 +65,20 @@
actions_types = list(/datum/action/item_action/adjust)
alternate_worn_layer = BODY_FRONT_UNDER_CLOTHES
icon_state = "half_mask"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- unique_death = 'modular_skyrat/master_files/sound/effects/hacked.ogg'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ unique_death = 'modular_nova/master_files/sound/effects/hacked.ogg'
voice_filter = null
use_radio_beeps_tts = FALSE
/obj/item/clothing/shoes/combat //TO-DO: Move these overrides out of a syndicate file!
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
icon_state = "combat"
/obj/item/clothing/gloves/combat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "combat"
worn_icon_teshari = TESHARI_HANDS_ICON
@@ -87,13 +87,13 @@
worn_icon = null
/obj/item/clothing/gloves/tackler/combat/insulated
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "combat"
/obj/item/clothing/gloves/krav_maga/combatglovesplus
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "combat"
/obj/item/clothing/gloves/krav_maga/combatglovesplus/maa
@@ -103,8 +103,8 @@
/obj/item/storage/belt/security/webbing/ds
name = "brig officer webbing"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "webbingds"
worn_icon_state = "webbingds"
uses_advanced_reskins = FALSE
@@ -133,8 +133,8 @@
/obj/item/clothing/head/soft/sec/syndicate
name = "engine tech utility cover"
desc = "A utility cover for an engine technician, there's a tag that reads 'IP-DS-2'."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "dssoft"
soft_type = "ds"
@@ -143,8 +143,8 @@
name = "tactical maid headband"
desc = "Tacticute."
icon_state = "syndimaid_headband"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
/obj/item/clothing/gloves/combat/maid
name = "combat maid sleeves"
@@ -168,8 +168,8 @@
/obj/item/clothing/accessory/maidcorset/syndicate
name = "syndicate maid apron"
desc = "Practical? No. Tactical? Also no. Cute? Most definitely yes."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
icon_state = "syndimaid_corset"
minimize_when_attached = FALSE
attachment_slot = null
diff --git a/modular_skyrat/modules/Syndie_edits/icons/obj.dmi b/modular_nova/modules/Syndie_edits/icons/obj.dmi
similarity index 100%
rename from modular_skyrat/modules/Syndie_edits/icons/obj.dmi
rename to modular_nova/modules/Syndie_edits/icons/obj.dmi
diff --git a/modular_skyrat/modules/Syndie_edits/icons/worn.dmi b/modular_nova/modules/Syndie_edits/icons/worn.dmi
similarity index 100%
rename from modular_skyrat/modules/Syndie_edits/icons/worn.dmi
rename to modular_nova/modules/Syndie_edits/icons/worn.dmi
diff --git a/modular_skyrat/modules/additional_circuit/code/_designs.dm b/modular_nova/modules/additional_circuit/code/_designs.dm
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/code/_designs.dm
rename to modular_nova/modules/additional_circuit/code/_designs.dm
diff --git a/modular_skyrat/modules/additional_circuit/code/cell_reader.dm b/modular_nova/modules/additional_circuit/code/cell_reader.dm
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/code/cell_reader.dm
rename to modular_nova/modules/additional_circuit/code/cell_reader.dm
diff --git a/modular_skyrat/modules/additional_circuit/code/interact_item.dm b/modular_nova/modules/additional_circuit/code/interact_item.dm
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/code/interact_item.dm
rename to modular_nova/modules/additional_circuit/code/interact_item.dm
diff --git a/modular_skyrat/modules/additional_circuit/code/mining_circuit.dm b/modular_nova/modules/additional_circuit/code/mining_circuit.dm
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/code/mining_circuit.dm
rename to modular_nova/modules/additional_circuit/code/mining_circuit.dm
diff --git a/modular_skyrat/modules/additional_circuit/code/target_scanner.dm b/modular_nova/modules/additional_circuit/code/target_scanner.dm
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/code/target_scanner.dm
rename to modular_nova/modules/additional_circuit/code/target_scanner.dm
diff --git a/modular_skyrat/modules/additional_circuit/readme.md b/modular_nova/modules/additional_circuit/readme.md
similarity index 100%
rename from modular_skyrat/modules/additional_circuit/readme.md
rename to modular_nova/modules/additional_circuit/readme.md
diff --git a/modular_skyrat/modules/admin/code/aooc.dm b/modular_nova/modules/admin/code/aooc.dm
similarity index 100%
rename from modular_skyrat/modules/admin/code/aooc.dm
rename to modular_nova/modules/admin/code/aooc.dm
diff --git a/modular_skyrat/modules/admin/code/fix_chat.dm b/modular_nova/modules/admin/code/fix_chat.dm
similarity index 100%
rename from modular_skyrat/modules/admin/code/fix_chat.dm
rename to modular_nova/modules/admin/code/fix_chat.dm
diff --git a/modular_skyrat/modules/admin/code/loud_say.dm b/modular_nova/modules/admin/code/loud_say.dm
similarity index 90%
rename from modular_skyrat/modules/admin/code/loud_say.dm
rename to modular_nova/modules/admin/code/loud_say.dm
index 82d73fc3723..43b701fed5e 100644
--- a/modular_skyrat/modules/admin/code/loud_say.dm
+++ b/modular_nova/modules/admin/code/loud_say.dm
@@ -25,7 +25,7 @@
for(var/client/admin_client in GLOB.admins)
if(admin_client?.prefs?.toggles & SOUND_ADMINHELP)
- SEND_SOUND(admin_client, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg')) //Stop using loud mode if you don't need to.
+ SEND_SOUND(admin_client, sound('modular_nova/modules/admin/sound/duckhonk.ogg')) //Stop using loud mode if you don't need to.
window_flash(admin_client, ignorepref = TRUE)
SSblackbox.record_feedback("tally", "admin_verb", 1, "loudAsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/modular_skyrat/modules/admin/code/player_ranks.dm b/modular_nova/modules/admin/code/player_ranks.dm
similarity index 100%
rename from modular_skyrat/modules/admin/code/player_ranks.dm
rename to modular_nova/modules/admin/code/player_ranks.dm
diff --git a/modular_skyrat/modules/admin/code/smites/pie.dm b/modular_nova/modules/admin/code/smites/pie.dm
similarity index 100%
rename from modular_skyrat/modules/admin/code/smites/pie.dm
rename to modular_nova/modules/admin/code/smites/pie.dm
diff --git a/modular_skyrat/modules/admin/code/sooc.dm b/modular_nova/modules/admin/code/sooc.dm
similarity index 100%
rename from modular_skyrat/modules/admin/code/sooc.dm
rename to modular_nova/modules/admin/code/sooc.dm
diff --git a/modular_skyrat/modules/admin/readme.md b/modular_nova/modules/admin/readme.md
similarity index 100%
rename from modular_skyrat/modules/admin/readme.md
rename to modular_nova/modules/admin/readme.md
diff --git a/modular_skyrat/modules/admin/sound/duckhonk.ogg b/modular_nova/modules/admin/sound/duckhonk.ogg
similarity index 100%
rename from modular_skyrat/modules/admin/sound/duckhonk.ogg
rename to modular_nova/modules/admin/sound/duckhonk.ogg
diff --git a/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm b/modular_nova/modules/advanced_engineering/code/adv_engineering.dm
similarity index 96%
rename from modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm
rename to modular_nova/modules/advanced_engineering/code/adv_engineering.dm
index df38f143995..e91f0a336ce 100644
--- a/modular_skyrat/modules/advanced_engineering/code/adv_engineering.dm
+++ b/modular_nova/modules/advanced_engineering/code/adv_engineering.dm
@@ -36,7 +36,7 @@
/obj/item/storage/box/rcd_ammo
name = "industrial RCD matter box"
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
desc = "A durable box with refill cartridges for an industrial RCD."
icon_state = "engibox"
illustration = "rcd"
diff --git a/modular_skyrat/modules/advanced_engineering/readme.md b/modular_nova/modules/advanced_engineering/readme.md
similarity index 100%
rename from modular_skyrat/modules/advanced_engineering/readme.md
rename to modular_nova/modules/advanced_engineering/readme.md
diff --git a/modular_nova/modules/advanced_shuttles/code/closet.dm b/modular_nova/modules/advanced_shuttles/code/closet.dm
new file mode 100644
index 00000000000..28510dc29af
--- /dev/null
+++ b/modular_nova/modules/advanced_shuttles/code/closet.dm
@@ -0,0 +1,174 @@
+/obj/structure/closet/shuttle/closet_update_overlays(list/new_overlays)
+ . = new_overlays
+ if(enable_door_overlay && !is_animating_door)
+ if(opened && has_opened_overlay)
+ var/mutable_appearance/door_overlay = mutable_appearance(icon, "[icon_door || icon_state]_open", alpha = src.alpha) //This was the only change, adding icon_door; TG wouldnt want it.
+ . += door_overlay
+ door_overlay.overlays += emissive_blocker(door_overlay.icon, door_overlay.icon_state, src, alpha = door_overlay.alpha) // If we don't do this the door doesn't block emissives and it looks weird.
+ else if(has_closed_overlay)
+ . += "[icon_door || icon_state]_door"
+//TG won't ever really need this because their lockers with non-matching fronts dont have non-matching backs; so I simply re-define the proc for our shuttleclosets
+
+/obj/structure/closet/shuttle
+ anchored = TRUE
+ density = TRUE
+ can_be_unanchored = FALSE
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+ icon_state = "wallcloset"
+ icon_door = "wallcloset_mesh"
+ door_anim_time = 0 //Somebody needs to remove the hard-sprited shuttles, or at least their lockers. These are a sin.
+
+/obj/structure/closet/shuttle/white
+ icon_state = "wallcloset_white"
+ icon_door = "wallcloset_white"
+
+/obj/structure/closet/shuttle/emergency
+ name = "emergency closet"
+ desc = "It's a storage unit for emergency breath masks and O2 tanks."
+ icon_door = "wallcloset_o2"
+
+/obj/structure/closet/shuttle/emergency/PopulateContents()
+ for (var/i in 1 to 2)
+ new /obj/item/tank/internals/emergency_oxygen/engi(src)
+ new /obj/item/clothing/mask/gas/alt(src)
+ new /obj/item/storage/toolbox/emergency(src)
+
+/obj/structure/closet/shuttle/emergency/white
+ icon_state = "wallcloset_white"
+
+/obj/structure/closet/shuttle/medical
+ name = "first-aid closet"
+ desc = "It's a storage unit for emergency medical supplies."
+ icon_door = "wallcloset_med"
+
+/obj/structure/closet/shuttle/medical/PopulateContents()
+ new /obj/item/storage/medkit/emergency(src)
+ new /obj/item/healthanalyzer(src)
+ new /obj/item/reagent_containers/hypospray(src)
+
+/obj/structure/closet/shuttle/medical/white
+ icon_state = "wallcloset_white"
+
+/obj/structure/closet/shuttle/mining
+ desc = "It's a storage unit for emergency breath masks, O2 tanks, and a pressure suit."
+ icon_state = "wallcloset_white"
+ icon_door = "wallcloset_mining"
+
+/obj/structure/closet/shuttle/mining/PopulateContents()
+ for (var/i in 1 to 2)
+ new /obj/item/tank/internals/emergency_oxygen/engi(src)
+ new /obj/item/clothing/mask/breath(src)
+ new /obj/item/storage/toolbox/emergency(src)
+ new /obj/item/clothing/head/helmet/space(src)
+ new /obj/item/clothing/suit/space(src)
+
+/obj/structure/closet/shuttle/engivent
+ wall_mounted = TRUE
+ name = "engine ventilation"
+ desc = "An exhaust vent for the shuttle's engines. It looks just big enough to fit a person..."
+ icon_state = "vent"
+ icon_door = "vent"
+
+//Generic Wall Closets - mount onto a wall, will end up storing anything that's on the tile it was placed from and 'occupies'.
+//Mob Size is small so that it doesn't end up storing players standing on those tiles.
+/obj/structure/closet/generic/wall
+ door_anim_squish = 0.3
+ door_anim_angle = 115
+ door_hinge_x = -8.5
+ wall_mounted = TRUE
+ max_mob_size = MOB_SIZE_SMALL
+ density = TRUE
+ anchored = TRUE
+ anchorable = FALSE //Prevents it being unwrenched and dragged around. Gotta unweld it!
+ paint_jobs = FALSE //Prevents it being repainted into other non-wall lockers.
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "locker_wall"
+
+/obj/structure/closet/emcloset/wall
+ door_anim_squish = 0.3
+ door_anim_angle = 115
+ door_hinge_x = -8.5
+ wall_mounted = TRUE
+ max_mob_size = MOB_SIZE_SMALL
+ density = TRUE
+ anchored = TRUE
+ anchorable = FALSE
+ paint_jobs = FALSE
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "emergency_wall"
+
+/obj/structure/closet/firecloset/wall
+ door_anim_squish = 0.3
+ door_anim_angle = 115
+ door_hinge_x = -8.5
+ wall_mounted = TRUE
+ max_mob_size = MOB_SIZE_SMALL
+ density = TRUE
+ anchored = TRUE
+ anchorable = FALSE
+ paint_jobs = FALSE
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "fire_wall"
+
+//These two are pre-locked versions of closet/generic/wall, for mapping only
+/obj/structure/closet/secure_closet/wall
+ door_anim_squish = 0.3
+ door_anim_angle = 115
+ door_hinge_x = -8.5
+ wall_mounted = TRUE
+ max_mob_size = MOB_SIZE_SMALL
+ density = TRUE
+ anchored = TRUE
+ anchorable = FALSE
+ paint_jobs = FALSE
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "locker_wall"
+
+/obj/structure/closet/secure_closet/personal/wall
+ door_anim_squish = 0.3
+ door_anim_angle = 115
+ door_hinge_x = -8.5
+ wall_mounted = TRUE
+ max_mob_size = MOB_SIZE_SMALL
+ density = TRUE
+ anchored = TRUE
+ anchorable = FALSE
+ paint_jobs = FALSE
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "locker_wall"
+
+//These procs create empty subtypes, for when it's placed by a user rather than mapped in...
+//Secure/personal don't get these since they're made with airlock electronics
+/obj/structure/closet/generic/wall/empty/PopulateContents()
+ return
+
+/obj/structure/closet/emcloset/wall/empty/PopulateContents()
+ return
+
+/obj/structure/closet/firecloset/wall/empty/PopulateContents()
+ return
+
+//Wallmounts, for rebuilding the wall lockers above
+/obj/item/wallframe/closet
+ name = "wall mounted closet"
+ desc = "It's a wall mounted storage unit for... well, whatever you put in this one. Apply to wall to use."
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "locker_mount"
+ result_path = /obj/structure/closet/generic/wall/empty
+ pixel_shift = 32
+
+/obj/item/wallframe/emcloset
+ name = "wall mounted emergency closet"
+ desc = "It's a wall mounted storage unit for emergency breath masks and O2 tanks. Apply to wall to use."
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "emergency_mount"
+ result_path = /obj/structure/closet/emcloset/wall/empty
+ pixel_shift = 32
+
+/obj/item/wallframe/firecloset
+ name = "wall mounted fire-safety closet"
+ desc = "It's a wall mounted storage unit for fire-fighting supplies. Apply to wall to use."
+ icon = 'modular_nova/master_files/icons/obj/closet_wall.dmi'
+ icon_state = "fire_mount"
+ result_path = /obj/structure/closet/firecloset/wall/empty
+ pixel_shift = 32
diff --git a/modular_skyrat/modules/advanced_shuttles/code/computer.dm b/modular_nova/modules/advanced_shuttles/code/computer.dm
similarity index 79%
rename from modular_skyrat/modules/advanced_shuttles/code/computer.dm
rename to modular_nova/modules/advanced_shuttles/code/computer.dm
index c895df045e0..755a9edd879 100644
--- a/modular_skyrat/modules/advanced_shuttles/code/computer.dm
+++ b/modular_nova/modules/advanced_shuttles/code/computer.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/shuttle/pod/advanced
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "intercom"
icon_screen = "null"
layer = ABOVE_OBJ_LAYER
@@ -15,7 +15,7 @@
return TRUE
/obj/machinery/computer/emergency_shuttle/advanced
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer"
icon_keyboard = ""
icon_screen = ""
@@ -23,7 +23,7 @@
connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable.
/obj/machinery/computer/crew/shuttle
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer_left"
icon_keyboard = ""
icon_screen = ""
@@ -31,7 +31,7 @@
connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable.
/obj/machinery/computer/security/shuttle
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer_right"
icon_keyboard = ""
icon_screen = ""
@@ -39,7 +39,7 @@
connectable = FALSE //connecting_computer change: since icon_state is not a typical console, it cannot be connectable.
/obj/machinery/computer/shuttle/ferry/shuttle
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer"
icon_keyboard = ""
icon_screen = ""
diff --git a/modular_nova/modules/advanced_shuttles/code/decals.dm b/modular_nova/modules/advanced_shuttles/code/decals.dm
new file mode 100644
index 00000000000..7f02f0fcb28
--- /dev/null
+++ b/modular_nova/modules/advanced_shuttles/code/decals.dm
@@ -0,0 +1,46 @@
+/obj/structure/sign/shuttleg250
+ name = "Transfer Shuttle G250"
+ desc = "Transfer Shuttle G250."
+ icon = 'modular_nova/modules/advanced_shuttles/icons/g250.dmi' //LARGE icon
+ icon_state = "g250"
+
+/obj/structure/fans/tiny/forcefield
+ name = "forcefield"
+ desc = "A fluctuating forcefield for ships to cross."
+ icon = 'modular_nova/modules/advanced_shuttles/icons/effects.dmi'
+ icon_state = "forcefield"
+
+//Floor Decals -----
+/obj/effect/turf_decal/shuttle/exploration
+ icon = 'modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi'
+ icon_state = "decal1"
+
+/obj/effect/turf_decal/shuttle/exploration/medbay
+ icon_state = "decalmed"
+
+/obj/effect/turf_decal/shuttle/exploration/cargostore
+ icon_state = "decalstore"
+
+/obj/effect/turf_decal/shuttle/exploration/bridge
+ icon_state = "decalbridge"
+
+/obj/effect/turf_decal/shuttle/exploration/o2
+ icon_state = "decalo2"
+
+/obj/effect/turf_decal/shuttle/exploration/typhon
+ icon_state = "decal2"
+
+/obj/effect/turf_decal/shuttle/exploration/echidna
+ icon_state = "decal1"
+
+/obj/effect/turf_decal/shuttle/exploration/weapons
+ icon_state = "decal3"
+
+/obj/effect/turf_decal/shuttle/exploration/airlock
+ icon_state = "decal4"
+
+/obj/effect/turf_decal/shuttle/exploration/hazardstripe
+ icon_state = "hazard_decal"
+
+/obj/effect/turf_decal/shuttle/exploration/bot
+ icon_state = "bot_decal"
diff --git a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm b/modular_nova/modules/advanced_shuttles/code/shuttles.dm
similarity index 98%
rename from modular_skyrat/modules/advanced_shuttles/code/shuttles.dm
rename to modular_nova/modules/advanced_shuttles/code/shuttles.dm
index 78ffdffd034..527de985038 100644
--- a/modular_skyrat/modules/advanced_shuttles/code/shuttles.dm
+++ b/modular_nova/modules/advanced_shuttles/code/shuttles.dm
@@ -89,7 +89,7 @@
desc = "The terminal used to control the arrivals interlink shuttle."
shuttleId = "arrivals_shuttle"
possible_destinations = "arrivals_stationary;arrivals_shuttle"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/computer.dmi'
+ icon = 'modular_nova/modules/advanced_shuttles/icons/computer.dmi'
icon_state = "computer_frame"
icon_keyboard = "arrivals_key"
icon_screen = "arrivals"
diff --git a/modular_nova/modules/advanced_shuttles/code/turfs.dm b/modular_nova/modules/advanced_shuttles/code/turfs.dm
new file mode 100644
index 00000000000..37a864aec47
--- /dev/null
+++ b/modular_nova/modules/advanced_shuttles/code/turfs.dm
@@ -0,0 +1,244 @@
+/*
+/area/shuttle
+ dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
+*/
+
+/obj/docking_port/mobile/arrivals
+
+/turf/closed/wall/mineral/titanium/shuttle_wall
+ name = "shuttle wall"
+ desc = "A light-weight titanium wall used in shuttles."
+ icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi'
+ icon_state = ""
+ base_icon_state = ""
+ smoothing_flags = null
+ smoothing_groups = null
+ canSmoothWith = null
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/AfterChange(flags, oldType)
+ . = ..()
+ // Manually add space underlay, in a way similar to turf_z_transparency,
+ // but we actually show the old content of the same z-level, as desired for shuttles
+
+ var/turf/underturf_path
+
+ // Grab previous turf icon
+ if(!ispath(oldType, /turf/closed/wall/mineral/titanium/shuttle_wall))
+ underturf_path = oldType
+ else
+ // Else use whatever SSmapping tells us, like transparent open tiles do
+ underturf_path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space
+
+ var/mutable_appearance/underlay_appearance = mutable_appearance(
+ initial(underturf_path.icon),
+ initial(underturf_path.icon_state),
+ offset_spokesman = src,
+ layer = TURF_LAYER - 0.02,
+ plane = initial(underturf_path.plane))
+ underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR
+ underlays += underlay_appearance
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window
+ opacity = FALSE
+
+/*
+* POD
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/pod
+ icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi'
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/pod
+ icon = 'modular_nova/modules/advanced_shuttles/icons/pod.dmi'
+ icon_state = "3,1"
+
+/*
+* FERRY
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/ferry
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'
+ icon_state = "18,2"
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'
+ icon_state = "18,2"
+
+/turf/open/floor/iron/shuttle/ferry
+ name = "shuttle floor"
+ icon = 'modular_nova/modules/advanced_shuttles/icons/erokez.dmi'
+ icon_state = "floor1"
+
+/turf/open/floor/iron/shuttle/ferry/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/*
+* EVAC
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/evac
+ icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi'
+ icon_state = "9,1"
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/evac
+ icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi'
+ icon_state = "9,1"
+
+/turf/open/floor/iron/shuttle/evac
+ name = "shuttle floor"
+ icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi'
+ icon_state = "floor"
+
+/turf/open/floor/iron/shuttle/evac/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/*
+* ARRIVALS
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals
+ icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi'
+ icon_state = "3,1"
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals
+ icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi'
+ icon_state = "3,1"
+
+/turf/open/floor/iron/shuttle/arrivals
+ name = "shuttle floor"
+ icon = 'modular_nova/modules/advanced_shuttles/icons/wagon.dmi'
+ icon_state = "floor"
+
+/turf/open/floor/iron/shuttle/arrivals/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/*
+* CARGO
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/cargo
+ icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi'
+ icon_state = "3,1"
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/cargo
+ icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi'
+ icon_state = "3,1"
+
+/turf/open/floor/iron/shuttle/cargo
+ name = "shuttle floor"
+ icon = 'modular_nova/modules/advanced_shuttles/icons/cargo.dmi'
+ icon_state = "floor"
+
+/turf/open/floor/iron/shuttle/cargo/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/*
+* MINING
+*/
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/mining
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining.dmi'
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining.dmi'
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/mining_large
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining_large.dmi'
+ icon_state = "2,2"
+ dir = NORTH
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_large
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining_large.dmi'
+ icon_state = "6,3"
+ dir = NORTH
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/mining_labor
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi'
+ icon_state = "4,6"
+ dir = NORTH
+
+/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_labor
+ icon = 'modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi'
+ icon_state = "4,4"
+ dir = NORTH
+
+/*
+* MINING/RND/EXPLORATION FLOORS
+*/
+
+/turf/open/floor/iron/shuttle/exploration
+ name = "shuttle floor"
+ icon = 'modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi'
+ icon_state = "oside"
+
+/turf/open/floor/iron/shuttle/exploration/uside
+ icon_state = "uside"
+
+/turf/open/floor/iron/shuttle/exploration/corner
+ icon_state = "corner"
+
+/turf/open/floor/iron/shuttle/exploration/side
+ icon_state = "side"
+
+/turf/open/floor/iron/shuttle/exploration/corner_invcorner
+ icon_state = "corner_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/adjinvcorner
+ icon_state = "adj_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/oppinvcorner
+ icon_state = "opp_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/invertcorner
+ icon_state = "icorner"
+
+/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner
+ icon_state = "double_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/tripleinvertcorner
+ icon_state = "tri_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/doubleside
+ icon_state = "double_side"
+
+/turf/open/floor/iron/shuttle/exploration/quadinvertcorner
+ icon_state = "4icorner"
+
+/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner_side
+ icon_state = "double_icorner_side"
+
+/turf/open/floor/iron/shuttle/exploration/invertcorner_side
+ icon_state = "side_icorner"
+
+/turf/open/floor/iron/shuttle/exploration/invertcorner_side_flipped
+ icon_state = "side_icorner_f"
+
+/turf/open/floor/iron/shuttle/exploration/blanktile
+ icon_state = "blank"
+
+/turf/open/floor/iron/shuttle/exploration/flat
+ icon_state = "flat"
+
+/turf/open/floor/iron/shuttle/exploration/flat/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/turf/open/floor/iron/shuttle/exploration/textured_flat
+ icon_state = "flattexture"
+
+/turf/open/floor/iron/shuttle/exploration/textured_flat/airless
+ initial_gas_mix = AIRLESS_ATMOS
+
+/turf/open/floor/iron/shuttle/exploration/equipmentrail1
+ icon_state = "rail1"
+
+/turf/open/floor/iron/shuttle/exploration/equipmentrail2
+ icon_state = "rail2"
+
+/turf/open/floor/iron/shuttle/exploration/equipmentrail3
+ icon_state = "rail3"
+
+/turf/open/floor/iron/shuttle/exploration/hazard
+ icon_state = "hazard"
+
+/turf/open/floor/iron/shuttle/exploration/hazard/airless
+ initial_gas_mix = AIRLESS_ATMOS
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi b/modular_nova/modules/advanced_shuttles/icons/cargo.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi
rename to modular_nova/modules/advanced_shuttles/icons/cargo.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/computer.dmi b/modular_nova/modules/advanced_shuttles/icons/computer.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/computer.dmi
rename to modular_nova/modules/advanced_shuttles/icons/computer.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/effects.dmi b/modular_nova/modules/advanced_shuttles/icons/effects.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/effects.dmi
rename to modular_nova/modules/advanced_shuttles/icons/effects.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi b/modular_nova/modules/advanced_shuttles/icons/erokez.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi
rename to modular_nova/modules/advanced_shuttles/icons/erokez.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi b/modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi
rename to modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi b/modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi
rename to modular_nova/modules/advanced_shuttles/icons/exploration_floor.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/g250.dmi b/modular_nova/modules/advanced_shuttles/icons/g250.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/g250.dmi
rename to modular_nova/modules/advanced_shuttles/icons/g250.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining.dmi b/modular_nova/modules/advanced_shuttles/icons/mining.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/mining.dmi
rename to modular_nova/modules/advanced_shuttles/icons/mining.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi b/modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi
rename to modular_nova/modules/advanced_shuttles/icons/mining_labor.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi b/modular_nova/modules/advanced_shuttles/icons/mining_large.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi
rename to modular_nova/modules/advanced_shuttles/icons/mining_large.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/pod.dmi b/modular_nova/modules/advanced_shuttles/icons/pod.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/pod.dmi
rename to modular_nova/modules/advanced_shuttles/icons/pod.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi b/modular_nova/modules/advanced_shuttles/icons/wagon.dmi
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi
rename to modular_nova/modules/advanced_shuttles/icons/wagon.dmi
diff --git a/modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg b/modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/sound/engine_landing.ogg
rename to modular_nova/modules/advanced_shuttles/sound/engine_landing.ogg
diff --git a/modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg b/modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg
similarity index 100%
rename from modular_skyrat/modules/advanced_shuttles/sound/engine_startup.ogg
rename to modular_nova/modules/advanced_shuttles/sound/engine_startup.ogg
diff --git a/modular_nova/modules/aesthetics/abductor/abductor.dm b/modular_nova/modules/aesthetics/abductor/abductor.dm
new file mode 100644
index 00000000000..80886cbf5e8
--- /dev/null
+++ b/modular_nova/modules/aesthetics/abductor/abductor.dm
@@ -0,0 +1,11 @@
+/obj/item/screwdriver/abductor
+ icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi'
+
+/obj/item/wirecutters/abductor
+ icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi'
+
+/obj/item/crowbar/abductor
+ icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi'
+
+/obj/item/wrench/abductor
+ icon = 'modular_nova/modules/aesthetics/abductor/abductor.dmi'
diff --git a/modular_skyrat/modules/aesthetics/abductor/abductor.dmi b/modular_nova/modules/aesthetics/abductor/abductor.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/abductor/abductor.dmi
rename to modular_nova/modules/aesthetics/abductor/abductor.dmi
diff --git a/modular_skyrat/modules/aesthetics/airalarm/code/airalarm.dm b/modular_nova/modules/aesthetics/airalarm/code/airalarm.dm
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airalarm/code/airalarm.dm
rename to modular_nova/modules/aesthetics/airalarm/code/airalarm.dm
diff --git a/modular_skyrat/modules/aesthetics/airalarm/icons/airalarm.dmi b/modular_nova/modules/aesthetics/airalarm/icons/airalarm.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airalarm/icons/airalarm.dmi
rename to modular_nova/modules/aesthetics/airalarm/icons/airalarm.dmi
diff --git a/modular_nova/modules/aesthetics/airlock/code/airlock.dm b/modular_nova/modules/aesthetics/airlock/code/airlock.dm
new file mode 100644
index 00000000000..21365794a12
--- /dev/null
+++ b/modular_nova/modules/aesthetics/airlock/code/airlock.dm
@@ -0,0 +1,558 @@
+/obj/machinery/door/airlock
+ doorOpen = 'modular_nova/modules/aesthetics/airlock/sound/open.ogg'
+ doorClose = 'modular_nova/modules/aesthetics/airlock/sound/close.ogg'
+ boltUp = 'modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg'
+ boltDown = 'modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg'
+ //noPower = 'sound/machines/doorclick.ogg'
+ var/forcedOpen = 'modular_nova/modules/aesthetics/airlock/sound/open_force.ogg' //Come on guys, why aren't all the sound files like this.
+ var/forcedClosed = 'modular_nova/modules/aesthetics/airlock/sound/close_force.ogg'
+
+ /// For those airlocks you might want to have varying "fillings" for, without having to
+ /// have an icon file per door with a different filling.
+ var/fill_state_suffix = null
+ /// For the airlocks that use greyscale lights, set this to the color you want your lights to be.
+ var/greyscale_lights_color = null
+ /// For the airlocks that use a greyscale accent door color, set this color to the accent color you want it to be.
+ var/greyscale_accent_color = null
+
+ var/has_environment_lights = TRUE //Does this airlock emit a light?
+ var/light_color_poweron = AIRLOCK_POWERON_LIGHT_COLOR
+ var/light_color_bolts = AIRLOCK_BOLTS_LIGHT_COLOR
+ var/light_color_access = AIRLOCK_ACCESS_LIGHT_COLOR
+ var/light_color_emergency = AIRLOCK_EMERGENCY_LIGHT_COLOR
+ var/light_color_engineering = AIRLOCK_ENGINEERING_LIGHT_COLOR
+ var/light_color_deny = AIRLOCK_DENY_LIGHT_COLOR
+ var/door_light_range = AIRLOCK_LIGHT_RANGE
+ var/door_light_power = AIRLOCK_LIGHT_POWER
+ ///Is this door external? E.g. does it lead to space? Shuttle docking systems bolt doors with this flag.
+ var/external = FALSE
+
+/obj/machinery/door/airlock/external
+ external = TRUE
+
+/obj/machinery/door/airlock/shuttle
+ external = TRUE
+
+/obj/machinery/door/airlock/power_change()
+ ..()
+ update_icon()
+
+/obj/machinery/door/airlock/update_overlays()
+ . = ..()
+ var/pre_light_range = 0
+ var/pre_light_power = 0
+ var/pre_light_color = ""
+ var/lights_overlay = ""
+
+ var/frame_state
+ var/light_state
+ switch(airlock_state)
+ if(AIRLOCK_CLOSED)
+ frame_state = AIRLOCK_FRAME_CLOSED
+ if(locked)
+ light_state = AIRLOCK_LIGHT_BOLTS
+ lights_overlay = "lights_bolts"
+ pre_light_color = light_color_bolts
+ else if(emergency)
+ light_state = AIRLOCK_LIGHT_EMERGENCY
+ lights_overlay = "lights_emergency"
+ pre_light_color = light_color_emergency
+ else if(engineering_override)
+ light_state = AIRLOCK_LIGHT_ENGINEERING
+ lights_overlay = "lights_engineering"
+ pre_light_color = light_color_engineering
+ else
+ lights_overlay = "lights_poweron"
+ pre_light_color = light_color_poweron
+ if(AIRLOCK_DENY)
+ frame_state = AIRLOCK_FRAME_CLOSED
+ light_state = AIRLOCK_LIGHT_DENIED
+ lights_overlay = "lights_denied"
+ pre_light_color = light_color_deny
+ if(AIRLOCK_EMAG)
+ frame_state = AIRLOCK_FRAME_CLOSED
+ if(AIRLOCK_CLOSING)
+ frame_state = AIRLOCK_FRAME_CLOSING
+ light_state = AIRLOCK_LIGHT_CLOSING
+ lights_overlay = "lights_closing"
+ pre_light_color = light_color_access
+ if(AIRLOCK_OPEN)
+ frame_state = AIRLOCK_FRAME_OPEN
+ if(locked)
+ lights_overlay = "lights_bolts_open"
+ pre_light_color = light_color_bolts
+ else if(emergency)
+ lights_overlay = "lights_emergency_open"
+ pre_light_color = light_color_emergency
+ else
+ lights_overlay = "lights_poweron_open"
+ pre_light_color = light_color_poweron
+ if(AIRLOCK_OPENING)
+ frame_state = AIRLOCK_FRAME_OPENING
+ light_state = AIRLOCK_LIGHT_OPENING
+ lights_overlay = "lights_opening"
+ pre_light_color = light_color_access
+
+ . += get_airlock_overlay(frame_state, icon, src, em_block = TRUE)
+ if(airlock_material)
+ . += get_airlock_overlay("[airlock_material]_[frame_state]", overlays_file, src, em_block = TRUE)
+ else
+ . += get_airlock_overlay("fill_[frame_state + fill_state_suffix]", icon, src, em_block = TRUE)
+
+ if(greyscale_lights_color && !light_state)
+ lights_overlay += "_greyscale"
+
+ if(lights && hasPower())
+ . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE)
+ pre_light_range = door_light_range
+ pre_light_power = door_light_power
+ if(has_environment_lights)
+ set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE)
+ if(multi_tile)
+ filler.set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE)
+ else
+ lights_overlay = ""
+ set_light(l_on = FALSE)
+
+ var/mutable_appearance/lights_appearance = mutable_appearance(overlays_file, lights_overlay, FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE)
+
+ if(greyscale_lights_color && !light_state)
+ lights_appearance.color = greyscale_lights_color
+
+ if(multi_tile)
+ lights_appearance.dir = dir
+
+ . += lights_appearance
+
+ if(greyscale_accent_color)
+ . += get_airlock_overlay("[frame_state]_accent", overlays_file, src, em_block = TRUE, state_color = greyscale_accent_color)
+
+ if(panel_open)
+ . += get_airlock_overlay("panel_[frame_state][security_level ? "_protected" : null]", overlays_file, src, em_block = TRUE)
+ if(frame_state == AIRLOCK_FRAME_CLOSED && welded)
+ . += get_airlock_overlay("welded", overlays_file, src, em_block = TRUE)
+
+ if(airlock_state == AIRLOCK_EMAG)
+ . += get_airlock_overlay("sparks", overlays_file, src, em_block = FALSE)
+
+ if(hasPower())
+ if(frame_state == AIRLOCK_FRAME_CLOSED)
+ if(atom_integrity < integrity_failure * max_integrity)
+ . += get_airlock_overlay("sparks_broken", overlays_file, src, em_block = FALSE)
+ else if(atom_integrity < (0.75 * max_integrity))
+ . += get_airlock_overlay("sparks_damaged", overlays_file, src, em_block = FALSE)
+ else if(frame_state == AIRLOCK_FRAME_OPEN)
+ if(atom_integrity < (0.75 * max_integrity))
+ . += get_airlock_overlay("sparks_open", overlays_file, src, em_block = FALSE)
+
+ if(note)
+ . += get_airlock_overlay(get_note_state(frame_state), note_overlay_file, src, em_block = TRUE)
+
+ if(frame_state == AIRLOCK_FRAME_CLOSED && seal)
+ . += get_airlock_overlay("sealed", overlays_file, src, em_block = TRUE)
+
+ if(hasPower() && unres_sides)
+ for(var/heading in list(NORTH,SOUTH,EAST,WEST))
+ if(!(unres_sides & heading))
+ continue
+ var/mutable_appearance/floorlight = mutable_appearance('icons/obj/doors/airlocks/station/overlays.dmi', "unres_[heading]", FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE)
+ switch (heading)
+ if (NORTH)
+ floorlight.pixel_x = 0
+ floorlight.pixel_y = 32
+ if (SOUTH)
+ floorlight.pixel_x = 0
+ floorlight.pixel_y = -32
+ if (EAST)
+ floorlight.pixel_x = 32
+ floorlight.pixel_y = 0
+ if (WEST)
+ floorlight.pixel_x = -32
+ floorlight.pixel_y = 0
+ . += floorlight
+
+//STATION AIRLOCKS
+/obj/machinery/door/airlock
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi'
+
+/obj/machinery/door/airlock/command
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi'
+
+/obj/machinery/door/airlock/security
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi'
+
+/obj/machinery/door/airlock/security/old
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_sec/old
+
+/obj/machinery/door/airlock/security/old/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/engineering
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi'
+
+/obj/machinery/door/airlock/medical
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi'
+
+/obj/machinery/door/airlock/maintenance
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi'
+
+/obj/machinery/door/airlock/maintenance/external
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi'
+
+/obj/machinery/door/airlock/mining
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi'
+
+/obj/machinery/door/airlock/atmos
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi'
+
+/obj/machinery/door/airlock/research
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi'
+
+/obj/machinery/door/airlock/freezer
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi'
+
+/obj/machinery/door/airlock/science
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi'
+
+/obj/machinery/door/airlock/virology
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi'
+
+//STATION CUSTOM ARILOCKS
+/obj/machinery/door/airlock/corporate
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_corporate
+ normal_integrity = 450
+
+/obj/machinery/door/airlock/corporate/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/service
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_service
+
+/obj/machinery/door/airlock/service/glass
+ opacity = FALSE
+ glass = TRUE
+
+/obj/machinery/door/airlock/captain
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi'
+
+/obj/machinery/door/airlock/hop
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi'
+
+/obj/machinery/door/airlock/hos
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi'
+
+/obj/machinery/door/airlock/hos/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/ce
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi'
+
+/obj/machinery/door/airlock/ce/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/rd
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi'
+
+/obj/machinery/door/airlock/rd/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/qm
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi'
+
+/obj/machinery/door/airlock/qm/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/cmo
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi'
+
+/obj/machinery/door/airlock/cmo/glass
+ opacity = FALSE
+ glass = TRUE
+ normal_integrity = 400
+
+/obj/machinery/door/airlock/psych
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi'
+
+/obj/machinery/door/airlock/asylum
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi'
+
+/obj/machinery/door/airlock/bathroom
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi'
+
+//STATION MINERAL AIRLOCKS
+/obj/machinery/door/airlock/gold
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi'
+
+/obj/machinery/door/airlock/silver
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi'
+
+/obj/machinery/door/airlock/diamond
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi'
+
+/obj/machinery/door/airlock/uranium
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi'
+
+/obj/machinery/door/airlock/plasma
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi'
+
+/obj/machinery/door/airlock/bananium
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi'
+
+/obj/machinery/door/airlock/sandstone
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi'
+
+/obj/machinery/door/airlock/wood
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi'
+
+//STATION 2 AIRLOCKS
+
+/obj/machinery/door/airlock/public
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi'
+
+//EXTERNAL AIRLOCKS
+/obj/machinery/door/airlock/external
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi'
+
+//CENTCOM
+/obj/machinery/door/airlock/centcom
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
+
+/obj/machinery/door/airlock/grunge
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
+
+//VAULT
+/obj/machinery/door/airlock/vault
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi'
+
+//HATCH
+/obj/machinery/door/airlock/hatch
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
+
+/obj/machinery/door/airlock/maintenance_hatch
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
+
+//HIGH SEC
+/obj/machinery/door/airlock/highsecurity
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi'
+
+//MULTI-TILE
+
+/obj/machinery/door/airlock/multi_tile
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi'
+
+/obj/machinery/door/airlock/multi_tile/glass
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi'
+
+/obj/machinery/door/airlock/multi_tile/metal
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi'
+
+//TRAM
+
+/obj/machinery/door/airlock/tram
+ name = "tram door"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi'
+ doorOpen = 'sound/machines/tramopen.ogg'
+ doorClose = 'sound/machines/tramclose.ogg'
+ has_environment_lights = FALSE
+
+//ASSEMBLYS
+/obj/structure/door_assembly/door_assembly_public
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_com
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi'
+
+/obj/structure/door_assembly/door_assembly_sec
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi'
+
+/obj/structure/door_assembly/door_assembly_sec/old
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi'
+
+/obj/structure/door_assembly/door_assembly_eng
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi'
+
+/obj/structure/door_assembly/door_assembly_min
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi'
+
+/obj/structure/door_assembly/door_assembly_atmo
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi'
+
+/obj/structure/door_assembly/door_assembly_research
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi'
+
+/obj/structure/door_assembly/door_assembly_science
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi'
+
+/obj/structure/door_assembly/door_assembly_viro
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi'
+
+/obj/structure/door_assembly/door_assembly_med
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi'
+
+/obj/structure/door_assembly/door_assembly_mai
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi'
+
+/obj/structure/door_assembly/door_assembly_extmai
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi'
+
+/obj/structure/door_assembly/door_assembly_ext
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_fre
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi'
+
+/obj/structure/door_assembly/door_assembly_hatch
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_mhatch
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_highsecurity
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_vault
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi'
+
+
+/obj/structure/door_assembly/door_assembly_centcom
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_grunge
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
+
+/obj/structure/door_assembly/door_assembly_gold
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi'
+
+/obj/structure/door_assembly/door_assembly_silver
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi'
+
+/obj/structure/door_assembly/door_assembly_diamond
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi'
+
+/obj/structure/door_assembly/door_assembly_uranium
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi'
+
+/obj/structure/door_assembly/door_assembly_plasma
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi'
+
+/obj/structure/door_assembly/door_assembly_bananium
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi'
+
+/obj/structure/door_assembly/door_assembly_sandstone
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi'
+
+/obj/structure/door_assembly/door_assembly_wood
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi'
+
+/obj/structure/door_assembly/door_assembly_corporate
+ name = "corporate airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi'
+ glass_type = /obj/machinery/door/airlock/corporate/glass
+ airlock_type = /obj/machinery/door/airlock/corporate
+
+/obj/structure/door_assembly/door_assembly_service
+ name = "service airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi'
+ base_name = "service airlock"
+ glass_type = /obj/machinery/door/airlock/service/glass
+ airlock_type = /obj/machinery/door/airlock/service
+
+/obj/structure/door_assembly/door_assembly_captain
+ name = "captain airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi'
+ glass_type = /obj/machinery/door/airlock/command/glass
+ airlock_type = /obj/machinery/door/airlock/captain
+
+/obj/structure/door_assembly/door_assembly_hop
+ name = "head of personnel airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi'
+ glass_type = /obj/machinery/door/airlock/command/glass
+ airlock_type = /obj/machinery/door/airlock/hop
+
+/obj/structure/door_assembly/hos
+ name = "head of security airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi'
+ glass_type = /obj/machinery/door/airlock/hos/glass
+ airlock_type = /obj/machinery/door/airlock/hos
+
+/obj/structure/door_assembly/door_assembly_cmo
+ name = "chief medical officer airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi'
+ glass_type = /obj/machinery/door/airlock/cmo/glass
+ airlock_type = /obj/machinery/door/airlock/cmo
+
+/obj/structure/door_assembly/door_assembly_ce
+ name = "chief engineer airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi'
+ glass_type = /obj/machinery/door/airlock/ce/glass
+ airlock_type = /obj/machinery/door/airlock/ce
+
+/obj/structure/door_assembly/door_assembly_rd
+ name = "research director airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi'
+ glass_type = /obj/machinery/door/airlock/rd/glass
+ airlock_type = /obj/machinery/door/airlock/rd
+
+/obj/structure/door_assembly/door_assembly_qm
+ name = "quartermaster airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi'
+ glass_type = /obj/machinery/door/airlock/qm/glass
+ airlock_type = /obj/machinery/door/airlock/qm
+
+/obj/structure/door_assembly/door_assembly_psych
+ name = "psychologist airlock assembly"
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi'
+ glass_type = /obj/machinery/door/airlock/medical/glass
+ airlock_type = /obj/machinery/door/airlock/psych
+
+/obj/structure/door_assembly/door_assembly_asylum
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi'
+
+/obj/structure/door_assembly/door_assembly_bathroom
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi'
+
+/obj/machinery/door/airlock/hydroponics
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi'
+
+/obj/structure/door_assembly/door_assembly_hydro
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi'
+
+/obj/structure/door_assembly/
+ icon = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi'
+ overlays_file = 'modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi'
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/asylum.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/cap.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/ce.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/cmo.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/external/external.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hop.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/hos.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/psych.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/qm.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/rd.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/erokez.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/shuttle/wagon.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/command.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/public.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/research.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/science.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/securitysoul.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/service.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi b/modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi
rename to modular_nova/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg b/modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg b/modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/bolts_up.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/close.ogg b/modular_nova/modules/aesthetics/airlock/sound/close.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/close.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/close.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg b/modular_nova/modules/aesthetics/airlock/sound/close_force.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/close_force.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/creaking.ogg b/modular_nova/modules/aesthetics/airlock/sound/creaking.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/creaking.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/creaking.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/open.ogg b/modular_nova/modules/aesthetics/airlock/sound/open.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/open.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/open.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg b/modular_nova/modules/aesthetics/airlock/sound/open_force.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/open_force.ogg
diff --git a/modular_skyrat/modules/aesthetics/airlock/sound/toggle.ogg b/modular_nova/modules/aesthetics/airlock/sound/toggle.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock/sound/toggle.ogg
rename to modular_nova/modules/aesthetics/airlock/sound/toggle.ogg
diff --git a/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm
new file mode 100644
index 00000000000..6727fad2608
--- /dev/null
+++ b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dm
@@ -0,0 +1,11 @@
+/obj/machinery/airlock_controller
+ icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi'
+
+/obj/machinery/door_buttons/access_button
+ icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi'
+
+/obj/machinery/door_buttons/airlock_controller
+ icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi'
+
+/obj/machinery/embedded_controller/radio/simple_vent_controller
+ icon = 'modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi'
diff --git a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi b/modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi
rename to modular_nova/modules/aesthetics/airlock_machines/airlock_machines.dmi
diff --git a/modular_skyrat/modules/aesthetics/apc/code/apc.dm b/modular_nova/modules/aesthetics/apc/code/apc.dm
similarity index 81%
rename from modular_skyrat/modules/aesthetics/apc/code/apc.dm
rename to modular_nova/modules/aesthetics/apc/code/apc.dm
index 0bddd02c7b4..ace81b01c82 100644
--- a/modular_skyrat/modules/aesthetics/apc/code/apc.dm
+++ b/modular_nova/modules/aesthetics/apc/code/apc.dm
@@ -1,8 +1,8 @@
/obj/machinery/power/apc
- icon = 'modular_skyrat/modules/aesthetics/apc/icons/apc.dmi'
+ icon = 'modular_nova/modules/aesthetics/apc/icons/apc.dmi'
/obj/item/wallframe/apc
- icon = 'modular_skyrat/modules/aesthetics/apc/icons/apc.dmi'
+ icon = 'modular_nova/modules/aesthetics/apc/icons/apc.dmi'
/obj/machinery/power/apc/update_appearance(updates = check_updates())
icon_update_needed = FALSE
diff --git a/modular_skyrat/modules/aesthetics/apc/icons/apc.dmi b/modular_nova/modules/aesthetics/apc/icons/apc.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/apc/icons/apc.dmi
rename to modular_nova/modules/aesthetics/apc/icons/apc.dmi
diff --git a/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm b/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm
new file mode 100644
index 00000000000..47945baf8ff
--- /dev/null
+++ b/modular_nova/modules/aesthetics/blast_door/code/blast_door.dm
@@ -0,0 +1,16 @@
+/obj/machinery/door/poddoor
+ icon = 'modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi'
+ animation_sound = 'modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg'
+
+/obj/machinery/door/poddoor/shutters
+ var/door_open_sound = 'modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg'
+ var/door_close_sound = 'modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg'
+
+/obj/machinery/door/poddoor/shutters/do_animate(animation)
+ switch(animation)
+ if("opening")
+ flick("opening", src)
+ playsound(src, door_open_sound, 30, TRUE)
+ if("closing")
+ flick("closing", src)
+ playsound(src, door_close_sound, 30, TRUE)
diff --git a/modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi b/modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi
rename to modular_nova/modules/aesthetics/blast_door/icons/blast_door.dmi
diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg b/modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg
rename to modular_nova/modules/aesthetics/blast_door/sound/blast_door.ogg
diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg b/modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg
rename to modular_nova/modules/aesthetics/blast_door/sound/shutters_close.ogg
diff --git a/modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg b/modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg
rename to modular_nova/modules/aesthetics/blast_door/sound/shutters_open.ogg
diff --git a/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm
new file mode 100644
index 00000000000..b86c80be51a
--- /dev/null
+++ b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dm
@@ -0,0 +1,2 @@
+/obj/item/hand_labeler
+ icon = 'modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi'
diff --git a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi b/modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi
rename to modular_nova/modules/aesthetics/bureaucracy/bureaucracy.dmi
diff --git a/modular_nova/modules/aesthetics/camera/code/camera.dm b/modular_nova/modules/aesthetics/camera/code/camera.dm
new file mode 100644
index 00000000000..6b1547ceec2
--- /dev/null
+++ b/modular_nova/modules/aesthetics/camera/code/camera.dm
@@ -0,0 +1,8 @@
+/obj/machinery/camera
+ icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi'
+
+/obj/item/wallframe/camera
+ icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi'
+
+/obj/structure/camera_assembly
+ icon = 'modular_nova/modules/aesthetics/camera/icons/camera.dmi'
diff --git a/modular_skyrat/modules/aesthetics/camera/icons/camera.dmi b/modular_nova/modules/aesthetics/camera/icons/camera.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/camera/icons/camera.dmi
rename to modular_nova/modules/aesthetics/camera/icons/camera.dmi
diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dm b/modular_nova/modules/aesthetics/cells/cell.dm
similarity index 84%
rename from modular_skyrat/modules/aesthetics/cells/cell.dm
rename to modular_nova/modules/aesthetics/cells/cell.dm
index bb3696f04f8..b47d2c451d0 100644
--- a/modular_skyrat/modules/aesthetics/cells/cell.dm
+++ b/modular_nova/modules/aesthetics/cells/cell.dm
@@ -1,5 +1,5 @@
/obj/item/stock_parts/cell
- icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi'
+ icon = 'modular_nova/modules/aesthetics/cells/cell.dmi'
/// The charge overlay icon file for the cell charge lights
var/charging_icon = "cell_in"
connector_type = null
@@ -40,13 +40,13 @@
return
var/icon_link
if(!grown_battery)
- icon_link = 'modular_skyrat/modules/aesthetics/cells/cell.dmi'
+ icon_link = 'modular_nova/modules/aesthetics/cells/cell.dmi'
else
icon_link = 'icons/obj/machines/cell_charger.dmi'
. += mutable_appearance(icon_link, "cell-[charge_light_type]-o[(percent() >= 99.5) ? 2 : 1]")
/obj/machinery/cell_charger
- icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi'
+ icon = 'modular_nova/modules/aesthetics/cells/cell.dmi'
/obj/machinery/cell_charger/update_overlays()
. = ..()
@@ -60,4 +60,4 @@
if(!charging.charging_icon)
. += image(charging.icon, charging.icon_state)
else
- .+= image('modular_skyrat/modules/aesthetics/cells/cell.dmi', charging.charging_icon)\
+ .+= image('modular_nova/modules/aesthetics/cells/cell.dmi', charging.charging_icon)\
diff --git a/modular_skyrat/modules/aesthetics/cells/cell.dmi b/modular_nova/modules/aesthetics/cells/cell.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/cells/cell.dmi
rename to modular_nova/modules/aesthetics/cells/cell.dmi
diff --git a/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm
new file mode 100644
index 00000000000..1960c804232
--- /dev/null
+++ b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dm
@@ -0,0 +1,14 @@
+/obj/structure/reagent_dispensers/watertank
+ icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
+
+/obj/structure/reagent_dispensers/plumbed
+ icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
+
+/obj/structure/reagent_dispensers/fueltank
+ icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
+
+/obj/structure/reagent_dispensers/foamtank
+ icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
+
+/obj/structure/reagent_dispensers/water_cooler
+ icon = 'modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
diff --git a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi b/modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi
rename to modular_nova/modules/aesthetics/chemical_tanks/chemical_tanks.dmi
diff --git a/modular_nova/modules/aesthetics/clothing/clothing.dm b/modular_nova/modules/aesthetics/clothing/clothing.dm
new file mode 100644
index 00000000000..9b314e11ad9
--- /dev/null
+++ b/modular_nova/modules/aesthetics/clothing/clothing.dm
@@ -0,0 +1,18 @@
+
+/*
+* HEAD
+*/
+
+/obj/item/clothing/head/costume/weddingveil
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
+ worn_icon_state = "weddingveil_temp"
+ //TG's is ugly as sin, until it's updated we have our own
+
+/*
+* SHOES
+*/
+
+/obj/item/clothing/shoes/workboots/old
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ icon_state = "workbootsold"
diff --git a/modular_skyrat/modules/aesthetics/computer/code/computer.dm b/modular_nova/modules/aesthetics/computer/code/computer.dm
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/code/computer.dm
rename to modular_nova/modules/aesthetics/computer/code/computer.dm
diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress1.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg
rename to modular_nova/modules/aesthetics/computer/sound/keypress1.ogg
diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress2.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg
rename to modular_nova/modules/aesthetics/computer/sound/keypress2.ogg
diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress3.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg
rename to modular_nova/modules/aesthetics/computer/sound/keypress3.ogg
diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg b/modular_nova/modules/aesthetics/computer/sound/keypress4.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg
rename to modular_nova/modules/aesthetics/computer/sound/keypress4.ogg
diff --git a/modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg b/modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg
rename to modular_nova/modules/aesthetics/computer/sound/keystroke4.ogg
diff --git a/modular_nova/modules/aesthetics/device/device.dm b/modular_nova/modules/aesthetics/device/device.dm
new file mode 100644
index 00000000000..a03d4575130
--- /dev/null
+++ b/modular_nova/modules/aesthetics/device/device.dm
@@ -0,0 +1,18 @@
+/obj/item/t_scanner
+ icon = 'modular_nova/modules/aesthetics/device/device.dmi'
+
+/obj/item/analyzer
+ icon = 'modular_nova/modules/aesthetics/device/device.dmi'
+
+/obj/item/grenade/empgrenade
+ icon = 'modular_nova/modules/aesthetics/device/device.dmi'
+
+/obj/item/multitool
+ icon = 'modular_nova/modules/aesthetics/device/device.dmi'
+
+/obj/item/geiger_counter
+ icon = 'modular_nova/modules/aesthetics/device/device.dmi'
+
+// This needs default but is a subtype. Pain.
+/obj/item/t_scanner/adv_mining_scanner
+ icon = 'icons/obj/devices/scanner.dmi'
diff --git a/modular_skyrat/modules/aesthetics/device/device.dmi b/modular_nova/modules/aesthetics/device/device.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/device/device.dmi
rename to modular_nova/modules/aesthetics/device/device.dmi
diff --git a/modular_nova/modules/aesthetics/directwindow/code/window.dm b/modular_nova/modules/aesthetics/directwindow/code/window.dm
new file mode 100644
index 00000000000..31cd44ab898
--- /dev/null
+++ b/modular_nova/modules/aesthetics/directwindow/code/window.dm
@@ -0,0 +1,5 @@
+/obj/structure/window
+ icon = 'modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi'
+
+/obj/machinery/door/window
+ icon = 'modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi'
diff --git a/modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi b/modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi
rename to modular_nova/modules/aesthetics/directwindow/icons/directwindow.dmi
diff --git a/modular_nova/modules/aesthetics/disposals/code/disposals.dm b/modular_nova/modules/aesthetics/disposals/code/disposals.dm
new file mode 100644
index 00000000000..0c63b888168
--- /dev/null
+++ b/modular_nova/modules/aesthetics/disposals/code/disposals.dm
@@ -0,0 +1,2 @@
+/obj/machinery/disposal
+ icon = 'modular_nova/modules/aesthetics/disposals/icons/disposals.dmi'
diff --git a/modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi b/modular_nova/modules/aesthetics/disposals/icons/disposals.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi
rename to modular_nova/modules/aesthetics/disposals/icons/disposals.dmi
diff --git a/modular_nova/modules/aesthetics/emitter/code/emitter.dm b/modular_nova/modules/aesthetics/emitter/code/emitter.dm
new file mode 100644
index 00000000000..bbbf5c9d3ba
--- /dev/null
+++ b/modular_nova/modules/aesthetics/emitter/code/emitter.dm
@@ -0,0 +1,13 @@
+/obj/machinery/power/emitter
+ icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi'
+
+/obj/machinery/field/containment
+ icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi'
+
+/obj/machinery/field/generator
+ icon = 'modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi'
+
+
+/obj/machinery/power/rad_collector
+ icon = 'modular_nova/modules/aesthetics/emitter/icons/emitter.dmi'
+
diff --git a/modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi b/modular_nova/modules/aesthetics/emitter/icons/emitter.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi
rename to modular_nova/modules/aesthetics/emitter/icons/emitter.dmi
diff --git a/modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi b/modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi
rename to modular_nova/modules/aesthetics/emitter/icons/field_generator.dmi
diff --git a/modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm b/modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm
similarity index 86%
rename from modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm
rename to modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm
index e40051c6f09..2b612e1bd28 100644
--- a/modular_skyrat/modules/aesthetics/extinguisher/code/extinguisher.dm
+++ b/modular_nova/modules/aesthetics/extinguisher/code/extinguisher.dm
@@ -1,9 +1,9 @@
/obj/structure/extinguisher_cabinet
- icon = 'modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi'
+ icon = 'modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi'
icon_state = "extinguisher_standard_closed"
/obj/item/wallframe/extinguisher_cabinet
- icon = 'modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi'
+ icon = 'modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi'
/obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building)
. = ..()
diff --git a/modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi b/modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/extinguisher/icons/extinguisher.dmi
rename to modular_nova/modules/aesthetics/extinguisher/icons/extinguisher.dmi
diff --git a/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm b/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm
new file mode 100644
index 00000000000..4c94a6838c6
--- /dev/null
+++ b/modular_nova/modules/aesthetics/firealarm/code/firealarm.dm
@@ -0,0 +1,2 @@
+/obj/machinery/firealarm
+ icon = 'modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi'
diff --git a/modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi b/modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi
rename to modular_nova/modules/aesthetics/firealarm/icons/firealarm.dmi
diff --git a/modular_skyrat/modules/aesthetics/firealarm/sound/alarm_fire.ogg b/modular_nova/modules/aesthetics/firealarm/sound/alarm_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/firealarm/sound/alarm_fire.ogg
rename to modular_nova/modules/aesthetics/firealarm/sound/alarm_fire.ogg
diff --git a/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm b/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm
new file mode 100644
index 00000000000..8ed0be1c749
--- /dev/null
+++ b/modular_nova/modules/aesthetics/firedoor/code/firedoor.dm
@@ -0,0 +1,32 @@
+/obj/machinery/door/firedoor
+ name = "emergency shutter"
+ desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a glass panel. It has a mechanism to open it with just your hands."
+ icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi'
+ var/door_open_sound = 'modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg'
+ var/door_close_sound = 'modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg'
+
+/obj/machinery/door/firedoor/update_overlays()
+ . = ..()
+ if(istype(src, /obj/machinery/door/firedoor/border_only))
+ return
+ if(density) // if the door is closed, add the bottom blinking overlay -- and only if it's closed
+ . += "firelock_alarm_type_bottom"
+
+/obj/machinery/door/firedoor/open()
+ playsound(loc, door_open_sound, 100, TRUE)
+ return ..()
+
+/obj/machinery/door/firedoor/close()
+ playsound(loc, door_close_sound, 100, TRUE)
+ return ..()
+
+/obj/machinery/door/firedoor/heavy
+ name = "heavy emergency shutter"
+ desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands."
+ icon = 'modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi'
+
+/obj/effect/spawner/structure/window/reinforced/no_firelock
+ spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile)
+
+/obj/machinery/door/firedoor/closed
+ alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
diff --git a/modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi b/modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi
rename to modular_nova/modules/aesthetics/firedoor/icons/firedoor.dmi
diff --git a/modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi b/modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi
rename to modular_nova/modules/aesthetics/firedoor/icons/firedoor_glass.dmi
diff --git a/modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg b/modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg
rename to modular_nova/modules/aesthetics/firedoor/sound/firedoor_open.ogg
diff --git a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm
similarity index 98%
rename from modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm
rename to modular_nova/modules/aesthetics/flag/code/signs_flags.dm
index 684ce00919b..361fd0e6965 100644
--- a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm
+++ b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm
@@ -1,7 +1,7 @@
/obj/structure/sign/flag
name = "blank flag"
desc = "The flag of nothing. It has nothing on it. Magnificient."
- icon = 'modular_skyrat/modules/aesthetics/flag/icons/flags.dmi'
+ icon = 'modular_nova/modules/aesthetics/flag/icons/flags.dmi'
icon_state = "flag_coder"
buildable_sign = FALSE
custom_materials = null
@@ -101,7 +101,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/syndicate, 32)
/obj/item/sign/flag
name = "folded blank flag"
desc = "The folded flag of nothing. It has nothing on it. Beautiful."
- icon = 'modular_skyrat/modules/aesthetics/flag/icons/flags.dmi'
+ icon = 'modular_nova/modules/aesthetics/flag/icons/flags.dmi'
icon_state = "folded_coder"
sign_path = /obj/structure/sign/flag
is_editable = FALSE
diff --git a/modular_skyrat/modules/aesthetics/flag/icons/flags.dmi b/modular_nova/modules/aesthetics/flag/icons/flags.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/flag/icons/flags.dmi
rename to modular_nova/modules/aesthetics/flag/icons/flags.dmi
diff --git a/modular_skyrat/modules/aesthetics/floors/code/floors.dm b/modular_nova/modules/aesthetics/floors/code/floors.dm
similarity index 95%
rename from modular_skyrat/modules/aesthetics/floors/code/floors.dm
rename to modular_nova/modules/aesthetics/floors/code/floors.dm
index e2a797a2970..63c47cf790d 100644
--- a/modular_skyrat/modules/aesthetics/floors/code/floors.dm
+++ b/modular_nova/modules/aesthetics/floors/code/floors.dm
@@ -1,5 +1,5 @@
/turf/open/floor
- icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi'
+ icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi'
//Removes redundant textured stuff from this radial, as all of ours are textured by default
/obj/item/stack/tile/iron
@@ -59,7 +59,7 @@
/turf/open/indestructible/cobble
name = "cobblestone path"
desc = "A simple but beautiful path made of various sized stones."
- icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi'
+ icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi'
icon_state = "cobble"
baseturfs = /turf/open/indestructible/cobble
footstep = FOOTSTEP_FLOOR
diff --git a/modular_skyrat/modules/aesthetics/floors/icons/floors.dmi b/modular_nova/modules/aesthetics/floors/icons/floors.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/floors/icons/floors.dmi
rename to modular_nova/modules/aesthetics/floors/icons/floors.dmi
diff --git a/modular_nova/modules/aesthetics/furniture/bed.dm b/modular_nova/modules/aesthetics/furniture/bed.dm
new file mode 100644
index 00000000000..ede92250230
--- /dev/null
+++ b/modular_nova/modules/aesthetics/furniture/bed.dm
@@ -0,0 +1,110 @@
+/obj/structure/bed/double
+ name = "double bed"
+ icon_state = "doublebed"
+ icon = 'modular_nova/modules/aesthetics/furniture/furniture.dmi'
+
+/obj/item/bedsheet/double
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ icon_state = "doublesheet"
+ slot_flags = null
+
+/obj/item/bedsheet/blue/double
+ icon_state = "doublesheetblue"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/green/double
+ icon_state = "doublesheetgreen"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+
+/obj/item/bedsheet/orange/double
+ icon_state = "doublesheetorange"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/purple/double
+ icon_state = "doublesheetpurple"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/rainbow/double //all the way across the sky.
+ icon_state = "doublesheetrainbow"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/red/double
+ icon_state = "doublesheetred"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/yellow/double
+ icon_state = "doublesheetyellow"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/mime/double
+ icon_state = "doublesheetmime"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/clown/double
+ icon_state = "doublesheetclown"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/captain/double
+ icon_state = "doublesheetcaptain"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/rd/double
+ icon_state = "doublesheetrd"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/hos/double
+ icon_state = "doublesheethos"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/hop/double
+ icon_state = "doublesheethop"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/ce/double
+ icon_state = "doublesheetce"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/brown/double
+ icon_state = "doublesheetbrown"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/ian/double
+ icon_state = "doublesheetian"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/centcom/double
+ icon_state = "doublesheetcc"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/nanotrasen/double
+ icon_state = "doublesheetNT"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/qm/double
+ icon_state = "doublesheetqm"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
+
+/obj/item/bedsheet/cmo/double
+ icon_state = "doublesheetCMO"
+ icon = 'modular_nova/modules/aesthetics/furniture/bedsheets.dmi'
+ slot_flags = null
diff --git a/modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi b/modular_nova/modules/aesthetics/furniture/bedsheets.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi
rename to modular_nova/modules/aesthetics/furniture/bedsheets.dmi
diff --git a/modular_skyrat/modules/aesthetics/furniture/furniture.dmi b/modular_nova/modules/aesthetics/furniture/furniture.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/furniture/furniture.dmi
rename to modular_nova/modules/aesthetics/furniture/furniture.dmi
diff --git a/modular_nova/modules/aesthetics/guns/code/guns.dm b/modular_nova/modules/aesthetics/guns/code/guns.dm
new file mode 100644
index 00000000000..24c49ba19f5
--- /dev/null
+++ b/modular_nova/modules/aesthetics/guns/code/guns.dm
@@ -0,0 +1,567 @@
+// open to suggestions on where to put these overrides
+// hugely not a fan of this but we do what we gotta
+
+/*
+ * gotta redefine EVERY goddamn ammo type irt to new mat costs for the ammobench's sake
+ * previously, SMALL_MATERIAL_AMOUNT was 100 units out of 2000 from a sheet (5%)
+ * so the old cost of SMALL_MATERIAL_AMOUNT * 5 was 500/2000 from a sheet (25%)
+ * experimental material balance PR makes it so that SMALL_MATERIAL_AMOUNT is actually 10 units out of 100 (10%)
+ * which made it so that the old assumed value of SMALL_MATERIAL_AMOUNT * 5 is 50/100 (50% of a sheet for a single bullet) (suboptimal)
+ * these updated, more consistent defines make it so that a single round's total materials should total 20% of a sheet, or 2 SMALL_MATERIAL_AMOUNT
+*/
+
+#define AMMO_MATS_BASIC list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, \
+)
+
+#define AMMO_MATS_AP list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.4, \
+)
+
+#define AMMO_MATS_TEMP list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.4, \
+)
+
+#define AMMO_MATS_EMP list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 0.4, \
+)
+
+#define AMMO_MATS_PHASIC list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.4, \
+)
+
+#define AMMO_MATS_TRAC list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \
+)
+
+#define AMMO_MATS_HOMING list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1, \
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \
+ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.2, \
+ /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 0.2, \
+ /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.2, \
+)
+
+// for .35 Sol Ripper
+#define AMMO_MATS_RIPPER list( \
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.4, \
+)
+
+/obj/item/ammo_casing
+ custom_materials = AMMO_MATS_BASIC
+
+/obj/item/ammo_box
+ /// When inserted into an ammo workbench, does this ammo box check for parent ammunition to search for subtypes of? Relevant for surplus clips, multi-sprite magazines.
+ /// Maybe don't enable this for shotgun ammo boxes.
+ var/multitype = TRUE
+
+
+///GUN SPRITE OVERWRITES
+/obj/item/gun/energy/ionrifle
+ icon = 'modular_nova/modules/aesthetics/guns/icons/energy.dmi'
+ lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi'
+
+/obj/item/gun/energy/ionrifle/carbine
+ icon = 'icons/obj/weapons/guns/energy.dmi'
+ lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
+
+/obj/item/gun/ballistic/shotgun/automatic/combat
+ name = "\improper Peacekeeper combat shotgun"
+ desc = "A semi-automatic Nanotrasen Peacekeeper shotgun with tactical furnishing and heavier internals meant for sustained fire. Lacks a threaded barrel."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+ worn_icon = 'modular_nova/modules/aesthetics/guns/icons/guns_back.dmi'
+ lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi'
+ inhand_icon_state = "shotgun_combat"
+ inhand_x_dimension = 32
+ inhand_y_dimension = 32
+
+// de-overrides this particular gun, it uses the tg file
+/obj/item/gun/ballistic/shotgun/automatic/combat/compact
+ icon = 'icons/obj/weapons/guns/ballistic.dmi'
+ lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi'
+ inhand_x_dimension = 64
+ inhand_y_dimension = 64
+ worn_icon = null
+
+/obj/item/gun/grenadelauncher
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+ lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi'
+
+/obj/item/gun/ballistic/automatic/pistol/m1911
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+ inhand_icon_state = "colt"
+ lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi'
+
+/obj/item/gun/ballistic/automatic/c20r
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+
+/obj/item/gun/ballistic/automatic/m90
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+/obj/item/gun/ballistic/revolver/c38/detective
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+
+/obj/item/gun/ballistic/automatic/pistol/aps
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+
+/obj/item/gun/ballistic/automatic/pistol
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+
+/obj/item/gun/ballistic/automatic/pistol/deagle/regal
+ icon = 'icons/obj/weapons/guns/ballistic.dmi'
+
+/obj/item/gun/energy/e_gun/nuclear
+ icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi'
+ ammo_x_offset = 2
+ lefthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi'
+ worn_icon_state = "gun"
+ worn_icon = null
+
+/obj/item/gun/energy/e_gun/nuclear/rainbow
+ name = "fantastic energy gun"
+ desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell. This one seems quite fancy!"
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/rainbow, /obj/item/ammo_casing/energy/disabler/rainbow)
+
+/obj/item/ammo_casing/energy/laser/rainbow
+ icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi'
+ icon_state = "laser"
+ select_name = "kill"
+ projectile_type = /obj/projectile/beam/laser/rainbow
+
+/obj/projectile/beam/laser/rainbow
+ icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi'
+ icon_state = "laser"
+
+/obj/item/ammo_casing/energy/disabler/rainbow
+ icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi'
+ icon_state = "laser"
+ select_name = "disable"
+ projectile_type = /obj/projectile/beam/disabler/rainbow
+
+/obj/projectile/beam/disabler/rainbow
+ icon = 'modular_nova/modules/aesthetics/guns/icons/nucgun.dmi'
+ icon_state = "laser"
+
+/obj/item/gun/energy/e_gun/nuclear/emag_act(mob/user, obj/item/card/emag/E)
+ . = ..()
+ if(obj_flags & EMAGGED)
+ return FALSE
+ if(pin)
+ to_chat(user, span_warning("You probably want to do this on a new gun!"))
+ return FALSE
+ to_chat(user, "T h e g u n s u d d e n l y f e e l s q u i t e f a n t a s t i c ! ")
+ new /obj/item/gun/energy/e_gun/nuclear/rainbow(get_turf(user))
+ obj_flags |= EMAGGED
+ qdel(src)
+ return TRUE
+
+/obj/item/gun/energy/e_gun/nuclear/rainbow/update_overlays()
+ . = ..()
+ . += "[icon_state]_emagged"
+
+/obj/item/gun/energy/e_gun/nuclear/rainbow/emag_act(mob/user, obj/item/card/emag/E)
+ return FALSE
+
+//BEAM SOUNDS
+/obj/item/ammo_casing/energy
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/laser.ogg'
+
+/obj/item/ammo_casing/energy/laser/pulse
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/pulse.ogg'
+
+/obj/item/gun/energy/xray
+ fire_sound_volume = 100
+
+/obj/item/ammo_casing/energy/xray
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg'
+
+/obj/item/ammo_casing/energy/laser/accelerator
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg'
+
+/obj/item/gun/ballistic/automatic/sniper_rifle
+ name = "sniper rifle"
+ desc = "A long ranged weapon that does significant damage. No, you can't quickscope."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi'
+ icon_state = "sniper"
+ w_class = WEIGHT_CLASS_BULKY
+ inhand_icon_state = "sniper"
+ worn_icon_state = null
+ fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
+ fire_sound_volume = 90
+ load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
+ rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
+ suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
+ recoil = 2
+ weapon_weight = WEAPON_HEAVY
+ accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds
+ fire_delay = 6 SECONDS
+ burst_size = 1
+ w_class = WEIGHT_CLASS_NORMAL
+ slot_flags = ITEM_SLOT_BACK
+ actions_types = list()
+ mag_display = TRUE
+ suppressor_x_offset = 3
+ suppressor_y_offset = 3
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 2)
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/reset_semicd()
+ . = ..()
+ if(suppressed)
+ playsound(src, 'sound/machines/eject.ogg', 25, TRUE, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0)
+ else
+ playsound(src, 'sound/machines/eject.ogg', 50, TRUE)
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
+ name = "syndicate sniper rifle"
+ desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi'
+ icon_state = "sniper2"
+ worn_icon_state = "sniper"
+ fire_delay = 5.5 SECONDS
+ can_suppress = TRUE
+ can_unsuppress = TRUE
+ pin = /obj/item/firing_pin/implant/pindicate
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/modular
+ name = "AUS-107 anti-materiel rifle"
+ desc = "A devastating Aussec Armory heavy sniper rifle, fitted with a modern scope."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi'
+ icon_state = "sniper"
+ worn_icon_state = "sniper"
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg'
+ suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
+ w_class = WEIGHT_CLASS_BULKY
+ can_suppress = FALSE
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate
+ name = "'Caracal' anti-materiel rifle" //we flop out
+ desc = "A sleek, light bullpup .416 Stabilis sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel."
+ icon_state = "sysniper"
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg'
+ suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
+ fire_delay = 4 SECONDS //Delay reduced thanks to recoil absorption
+ burst_size = 0.5
+ recoil = 1
+ can_suppress = TRUE
+ can_unsuppress = TRUE
+ weapon_weight = WEAPON_LIGHT
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH)
+
+/obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket //Normal sniper but epic
+ name = "SA-107 anti-materiel rifle"
+ desc = "An illegal Scarborough Arms rendition of an Aussec Armory sniper rifle. This one has been fitted with a heavy duty scope, a sturdier stock, and has a removable muzzle brake that allows easy attachment of suppressors."
+ icon_state = "sniper2"
+ fire_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg'
+ suppressed_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
+ fire_sound_volume = 90
+ vary_fire_sound = FALSE
+ load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
+ rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
+ w_class = WEIGHT_CLASS_NORMAL
+ can_suppress = TRUE
+ can_unsuppress = TRUE
+ recoil = 1.8
+ weapon_weight = WEAPON_HEAVY
+ accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds
+ fire_delay = 55 //Slightly smaller than standard sniper
+ burst_size = 1
+ slot_flags = ITEM_SLOT_BACK
+ mag_display = TRUE
+
+/obj/item/gun/ballistic/automatic/ar/modular
+ name = "\improper NT ARG-63"
+ desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .277 Aestus - nicknamed 'Boarder' by Special Operations teams."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi'
+ icon_state = "arg"
+ inhand_icon_state = "arg"
+ can_suppress = FALSE
+
+/obj/item/gun/ballistic/automatic/surplus
+ name = "\improper Type-69 surplus rifle"
+ desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing."
+ icon = 'modular_nova/modules/aesthetics/guns/icons/guns.dmi'
+
+// GUBMAN3 - FULL BULLET RENAME
+// i loathe the above
+
+// overrides for 10mm ammo in modular_nova\modules\sec_haul\code\guns\bullets.dm
+
+// overrides for .310 Strilka-derived ammo, e.g. lionhunter ammo, because you don't want to give security the ability to print infinite wallhack ammo, right?
+/obj/item/ammo_casing/strilka310/lionhunter
+ name = "hunter's rifle round"
+ can_be_printed = FALSE // trust me bro you dont wanna give security homing wallhack Better Rubbers
+
+/obj/item/ammo_casing/strilka310/enchanted
+ name = "enchanted rifle round"
+ can_be_printed = FALSE // these are Really Really Better Rubbers
+
+// overrides for tgcode's .223 (formerly 5.56), used in the M90-gl - renamed to .277 Aestus
+/obj/item/ammo_casing/a223
+ name = ".277 Aestus casing"
+ desc = "A .277 bullet casing."
+
+/obj/item/ammo_casing/a223/phasic
+ name = ".277 Aestus phasic casing"
+ desc = "A .277 Aestus bullet casing.\
+ \
+ PHASIC: Ignores all surfaces except organic matter. "
+ advanced_print_req = TRUE
+ custom_materials = AMMO_MATS_PHASIC
+
+// shotgun ammo overrides moved to modular_nova\modules\shotgunrebalance\code\shotgun.dm
+
+// overrides for tgcode .50cal, used in their sniper/anti-materiel rifles
+/obj/item/ammo_casing/p50
+ name = ".416 Stabilis casing"
+ desc = "A .416 bullet casing."
+ advanced_print_req = TRUE // you are NOT printing more ammo for this without effort.
+ // then again the offstations with ammo printers and sniper rifles come with an ammo disk anyway, so
+
+/obj/item/ammo_casing/p50/surplus
+ name = ".416 Stabilis surplus casing"
+ desc = "A .416 bullet casing. Intentionally underloaded, but still quite painful to be shot with.\
+ \
+ SURPLUS/UNDERLOAD: Lacks armor penetration capabilities, contact-stun, or innate dismemberment ability. Still incredibly painful to be hit by. "
+ projectile_type = /obj/projectile/bullet/p50/surplus
+
+/obj/item/ammo_casing/p50/disruptor
+ name = ".416 Stabilis disruptor casing"
+ desc = "A .416 bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\
+ \
+ DISRUPTOR: Forces humanoid targets to sleep, does heavy damage against cyborgs, EMPs struck targets. "
+
+/obj/item/ammo_casing/p50/incendiary
+ name = ".416 Stabilis precision incendiary casing"
+ desc = "A .416 bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\
+ \
+ PRECISION INCENDIARY: Lacks innate dismemberment ability and contact-stun, suffers against mechanized armor. Sets people on fire. "
+ projectile_type = /obj/projectile/bullet/p50/incendiary
+
+/obj/item/ammo_casing/p50/penetrator
+ name = ".416 Stabilis penetrator sabot casing"
+ desc = "A .416 bullet casing. Loaded with a hardened sabot and packed with extra propellant. \
+ Designed to go through basically everything. A label warns of overpressure risk, and to not use the round if \
+ a given weapon cannot handle pressures greater than 85000 PSI.\
+ \
+ PENETRATOR: Goes through basically everything. Lacks innate dismemberment ability and contact-stun capabilities. "
+
+/obj/item/ammo_casing/p50/marksman
+ name = ".416 Stabilis marksman hyperkinetic casing"
+ desc = "A .416 bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \
+ and a concerning amount of experimental propellant. A label warns of overpressure risk, and to not use the round if \
+ a given weapon cannot handle pressures greater than 95000 PSI.\
+ \
+ MARKSMAN: Bullets have no travel time, and can ricochet once. Does slightly less damage, lacks innate dismemberment and contact-stun capabilities. "
+ projectile_type = /obj/projectile/bullet/p50/marksman
+
+// overrides for tgcode 4.6x30mm, used in the WT-550
+/obj/item/ammo_casing/c46x30mm
+ name = "8mm Usurpator bullet casing"
+ desc = "An 8mm bullet casing."
+
+/obj/item/ammo_casing/c46x30mm/ap
+ name = "8mm Usurpator armor-piercing bullet casing"
+ desc = "An 8mm armor-piercing bullet casing.\
+ \
+ ARMOR PIERCING: Increased armor piercing capabilities. What did you expect? "
+ custom_materials = AMMO_MATS_AP
+ advanced_print_req = TRUE
+
+/obj/item/ammo_casing/c46x30mm/inc
+ name = "8mm Usurpator incendiary bullet casing"
+ desc = "An 8mm incendiary bullet casing.\
+ \
+ INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
+ custom_materials = AMMO_MATS_TEMP
+ advanced_print_req = TRUE
+
+// overrides for tgcode .45, used in the M1911 and C20-r
+/obj/item/ammo_casing/c45
+ name = ".460 Ceres bullet casing"
+ desc = "A .460 bullet casing."
+
+/obj/item/ammo_casing/c45/ap
+ name = ".460 Ceres armor-piercing bullet casing"
+ desc = "An armor-piercing .460 bullet casing.\
+ \
+ ARMOR PIERCING: Increased armor piercing capabilities. What did you expect? "
+ custom_materials = AMMO_MATS_AP
+ advanced_print_req = TRUE
+
+/obj/item/ammo_casing/c45/inc
+ name = ".460 Ceres incendiary bullet casing"
+ desc = "An incendiary .460 bullet casing.\
+ \
+ INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
+ custom_materials = AMMO_MATS_TEMP
+ advanced_print_req = TRUE
+
+// overrides for .50AE, used in the deagle
+/obj/item/ammo_casing/a50ae
+ name = ".454 Trucidator bullet casing"
+ desc = "A .454 Trucidator bullet casing. Extremely powerful.\
+ \
+ HAND CANNON: Fired out of a handgun, deals disproportionately large damage. "
+
+// overrides for .357, used in the .357 revolver
+/obj/item/ammo_casing/a357 //We can keep the Magnum classic.
+ name = ".357 bullet casing"
+ desc = "A .357 bullet casing.\
+ \
+ HAND CANNON: Fired out of a handgun, deals disproportionately large damage. "
+
+/obj/item/ammo_casing/a357/match
+ desc = "A .357 bullet casing, manufactured to exceedingly high standards.\
+ \
+ MATCH: Ricochets everywhere. Like crazy. "
+
+/obj/item/ammo_casing/a357/phasic
+ desc = "A .357 phasic bullet casing.\
+ \
+ PHASIC: Ignores all surfaces except organic matter. "
+ advanced_print_req = TRUE
+ custom_materials = AMMO_MATS_PHASIC
+
+/obj/item/ammo_casing/a357/heartseeker
+ desc = "A .357 heartseeker bullet casing.\
+ \
+ HEARTSEEKER: Has homing capabilities, methodology unknown. "
+ advanced_print_req = TRUE
+ custom_materials = AMMO_MATS_HOMING // meme ammo. meme print cost
+
+// overrides for .38 Special, used in the .38 revolvers, including the det's
+/obj/item/ammo_box/c38
+ caliber = CALIBER_38
+
+/obj/item/ammo_casing/c38/trac
+ custom_materials = AMMO_MATS_TRAC
+ advanced_print_req = TRUE
+
+/obj/item/ammo_casing/c38/dumdum
+ advanced_print_req = TRUE
+
+/obj/item/ammo_casing/c38/hotshot
+ custom_materials = AMMO_MATS_TEMP
+ advanced_print_req = TRUE
+
+/obj/item/ammo_casing/c38/iceblox
+ custom_materials = AMMO_MATS_TEMP // plasma's wack.
+ advanced_print_req = TRUE
+
+// The ones above are the casings for the ammo, whereas the ones below are the actual projectiles that give you feedback when you're shot
+
+/obj/projectile/bullet/a223
+ name = ".277 Aestus bullet"
+
+/obj/projectile/bullet/a223/phasic
+ name = ".277 phasic bullet"
+
+/obj/projectile/bullet/c9mm
+ name = "9x25mm bullet"
+
+/obj/projectile/bullet/c9mm/ap
+ name = "9x25mm armor-piercing bullet"
+
+/obj/projectile/bullet/c9mm/hp
+ name = "9x25mm fragmenting bullet"
+
+/obj/projectile/bullet/incendiary/c9mm
+ name = "9x25mm incendiary bullet"
+
+/obj/projectile/bullet/c45
+ name = ".460 bullet"
+
+/obj/projectile/bullet/c45/ap
+ name = ".460 armor-piercing bullet"
+
+/obj/projectile/bullet/incendiary/c45
+ name = ".460 incendiary bullet"
+
+/obj/projectile/bullet/c46x30mm
+ name = "8mm Usurpator bullet"
+
+/obj/projectile/bullet/c46x30mm/ap
+ name = "8mm armor-piercing bullet"
+
+/obj/projectile/bullet/incendiary/c46x30mm
+ name = "8mm incendiary bullet"
+
+/obj/projectile/bullet/p50
+ name = ".416 Stabilis bullet"
+
+/obj/projectile/bullet/p50/disruptor
+ name = ".416 disruptor bullet"
+
+/obj/projectile/bullet/p50/penetrator
+ name = ".416 penetrator bullet"
+
+/obj/projectile/bullet/a50ae
+ name = ".454 Trucidator bullet"
+
+
+// MAGAZINES UPDATED TO MATCH STUFF
+
+/obj/item/ammo_box/magazine/wt550m9
+ name = "\improper WT-550 magazine"
+ desc = "A 20-round toploaded 8mm Usurpator magazine that fits neatly in the WT-550."
+
+/obj/item/ammo_box/magazine/wt550m9/wtap
+ name = "\improper WT-550 AP magazine"
+
+/obj/item/ammo_box/magazine/wt550m9/wtic
+ name = "\improper WT-550 IND magazine"
+
+/obj/item/ammo_box/magazine/smgm45
+ name = ".460 Ceres SMG magazine"
+ desc = "A magazine chambered for .460 meant to fit in submachine guns."
+
+/obj/item/ammo_box/magazine/smgm45/ap
+ name = ".460 Ceres AP SMG magazine"
+
+/obj/item/ammo_box/magazine/smgm45/incen
+ name = ".460 Ceres IND SMG magazine"
+
+/obj/item/ammo_box/magazine/tommygunm45
+ name = "\improper Tommy Gun .460 Ceres drum"
+ desc = "A disc magazine chambered for .460 Ceres."
+
+/obj/item/ammo_box/magazine/m556
+ name = ".277 Aestus toploading magazine"
+ desc = "A toploading magazine chambered for .277 Aestus."
+
+/obj/item/ammo_box/magazine/m556/phasic
+ name = ".277 PHASE toploading magazine"
+
+/obj/item/ammo_box/magazine/sniper_rounds
+ name = "anti-materiel rifle magazine"
+ desc = "A heavy magazine chambered for .416 Stabilis."
+
+/obj/item/ammo_box/magazine/sniper_rounds/soporific
+ desc = "A magazine with soporific .416 Stabilis ammo, designed for happy days and dead quiet nights."
+
+/obj/item/ammo_box/magazine/sniper_rounds/penetrator
+ name = "anti-materiel rifle ++P magazine"
+ desc = "A heavy magazine with over the top, overpressurized, and frankly over the top .416 penetrator ammo."
+
+/obj/item/ammo_box/magazine/m50
+ name = ".454 Trucidator handcannon magazine"
+ desc = "An absurdly THICK magazine possibly meant for a heavy hitting pistol, if you can call it that."
diff --git a/modular_nova/modules/aesthetics/guns/code/magazine.dm b/modular_nova/modules/aesthetics/guns/code/magazine.dm
new file mode 100644
index 00000000000..dd6acc855b0
--- /dev/null
+++ b/modular_nova/modules/aesthetics/guns/code/magazine.dm
@@ -0,0 +1,4 @@
+/obj/item/ammo_box/magazine/m9mm
+ name = "pistol magazine (9x25mm)"
+ multiple_sprites = AMMO_BOX_PER_BULLET
+ icon = 'modular_nova/modules/aesthetics/guns/icons/magazine.dmi'
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/energy.dmi b/modular_nova/modules/aesthetics/guns/icons/energy.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/energy.dmi
rename to modular_nova/modules/aesthetics/guns/icons/energy.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns.dmi b/modular_nova/modules/aesthetics/guns/icons/guns.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/guns.dmi
rename to modular_nova/modules/aesthetics/guns/icons/guns.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_back.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi
rename to modular_nova/modules/aesthetics/guns/icons/guns_back.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi
rename to modular_nova/modules/aesthetics/guns/icons/guns_gubman2.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi
rename to modular_nova/modules/aesthetics/guns/icons/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi b/modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi
rename to modular_nova/modules/aesthetics/guns/icons/guns_righthand.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi b/modular_nova/modules/aesthetics/guns/icons/magazine.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi
rename to modular_nova/modules/aesthetics/guns/icons/magazine.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi b/modular_nova/modules/aesthetics/guns/icons/nucgun.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi
rename to modular_nova/modules/aesthetics/guns/icons/nucgun.dmi
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser.ogg b/modular_nova/modules/aesthetics/guns/sound/laser.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser2.ogg b/modular_nova/modules/aesthetics/guns/sound/laser2.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser2.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser2.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser3.ogg b/modular_nova/modules/aesthetics/guns/sound/laser3.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser3.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser3.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_charge.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon_charge.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_charge.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon_charge.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser_cannon_fire.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/laser_rifle.ogg b/modular_nova/modules/aesthetics/guns/sound/laser_rifle.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/laser_rifle.ogg
rename to modular_nova/modules/aesthetics/guns/sound/laser_rifle.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg b/modular_nova/modules/aesthetics/guns/sound/pulse.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg
rename to modular_nova/modules/aesthetics/guns/sound/pulse.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/shotgun_light.ogg b/modular_nova/modules/aesthetics/guns/sound/shotgun_light.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/shotgun_light.ogg
rename to modular_nova/modules/aesthetics/guns/sound/shotgun_light.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg b/modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg
rename to modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg b/modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg
rename to modular_nova/modules/aesthetics/guns/sound/sniperrifle_s.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/suppressed_shotgun.ogg b/modular_nova/modules/aesthetics/guns/sound/suppressed_shotgun.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/suppressed_shotgun.ogg
rename to modular_nova/modules/aesthetics/guns/sound/suppressed_shotgun.ogg
diff --git a/modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg b/modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg
rename to modular_nova/modules/aesthetics/guns/sound/xray_laser.ogg
diff --git a/modular_nova/modules/aesthetics/heater/code/spaceheater.dm b/modular_nova/modules/aesthetics/heater/code/spaceheater.dm
new file mode 100644
index 00000000000..2dbd2c544bd
--- /dev/null
+++ b/modular_nova/modules/aesthetics/heater/code/spaceheater.dm
@@ -0,0 +1,2 @@
+/obj/machinery/space_heater
+ icon = 'modular_nova/modules/aesthetics/heater/icons/heater.dmi'
diff --git a/modular_skyrat/modules/aesthetics/heater/icons/heater.dmi b/modular_nova/modules/aesthetics/heater/icons/heater.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/heater/icons/heater.dmi
rename to modular_nova/modules/aesthetics/heater/icons/heater.dmi
diff --git a/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm
new file mode 100644
index 00000000000..c84cfe855ae
--- /dev/null
+++ b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dm
@@ -0,0 +1,2 @@
+/obj/machinery/rnd/experimentor
+ icon = 'modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi'
diff --git a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi b/modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi
rename to modular_nova/modules/aesthetics/heavy_lathe/heavy_lathe.dmi
diff --git a/modular_nova/modules/aesthetics/implanter/implanter.dm b/modular_nova/modules/aesthetics/implanter/implanter.dm
new file mode 100644
index 00000000000..63ffb482877
--- /dev/null
+++ b/modular_nova/modules/aesthetics/implanter/implanter.dm
@@ -0,0 +1,8 @@
+/obj/item/implanter
+ icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi'
+
+/obj/item/implantpad
+ icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi'
+
+/obj/item/implantcase
+ icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi'
diff --git a/modular_skyrat/modules/aesthetics/implanter/implanter.dmi b/modular_nova/modules/aesthetics/implanter/implanter.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/implanter/implanter.dmi
rename to modular_nova/modules/aesthetics/implanter/implanter.dmi
diff --git a/modular_nova/modules/aesthetics/intercom/code/intercom.dm b/modular_nova/modules/aesthetics/intercom/code/intercom.dm
new file mode 100644
index 00000000000..6c9c9b9eb36
--- /dev/null
+++ b/modular_nova/modules/aesthetics/intercom/code/intercom.dm
@@ -0,0 +1,5 @@
+/obj/item/radio/intercom
+ icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi'
+
+/obj/item/wallframe/intercom
+ icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi'
diff --git a/modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi b/modular_nova/modules/aesthetics/intercom/icons/intercom.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi
rename to modular_nova/modules/aesthetics/intercom/icons/intercom.dmi
diff --git a/modular_nova/modules/aesthetics/janitor/janitor.dm b/modular_nova/modules/aesthetics/janitor/janitor.dm
new file mode 100644
index 00000000000..27d518dc235
--- /dev/null
+++ b/modular_nova/modules/aesthetics/janitor/janitor.dm
@@ -0,0 +1,9 @@
+/obj/structure/mop_bucket
+ icon = 'modular_nova/modules/aesthetics/janitor/janitor.dmi'
+
+// This isn't custom though.
+/obj/structure/mop_bucket/janitorialcart
+ icon = 'icons/obj/service/janitor.dmi'
+
+/obj/item/reagent_containers/cup/bucket
+ icon = 'modular_nova/modules/aesthetics/janitor/janitor.dmi'
diff --git a/modular_skyrat/modules/aesthetics/janitor/janitor.dmi b/modular_nova/modules/aesthetics/janitor/janitor.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/janitor/janitor.dmi
rename to modular_nova/modules/aesthetics/janitor/janitor.dmi
diff --git a/modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm b/modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm
similarity index 95%
rename from modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm
rename to modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm
index 64e1e5536b7..7eb8dc21fd0 100644
--- a/modular_skyrat/modules/aesthetics/keyed_doors/code/keyed_door.dm
+++ b/modular_nova/modules/aesthetics/keyed_doors/code/keyed_door.dm
@@ -30,8 +30,8 @@
/obj/machinery/door/airlock/keyed
name = "locked airlock"
desc = "This door only opens when a keycard with the proper access is swiped. It looks virtually indestructible."
- icon = 'modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi'
- // overlays_file = 'modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed_overlays.dmi' // if this route is ever taken
+ icon = 'modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi'
+ // overlays_file = 'modular_nova/modules/aesthetics/keyed_doors/icons/keyed_overlays.dmi' // if this route is ever taken
icon_state = "closed"
explosion_block = 3
heat_proof = TRUE
diff --git a/modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi b/modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/keyed_doors/icons/keyed.dmi
rename to modular_nova/modules/aesthetics/keyed_doors/icons/keyed.dmi
diff --git a/modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi b/modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi
rename to modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi
diff --git a/modular_nova/modules/aesthetics/kitchen/kitchen.dm b/modular_nova/modules/aesthetics/kitchen/kitchen.dm
new file mode 100644
index 00000000000..20956aea370
--- /dev/null
+++ b/modular_nova/modules/aesthetics/kitchen/kitchen.dm
@@ -0,0 +1,42 @@
+/obj/structure/kitchenspike_frame
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+/obj/structure/kitchenspike
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+/obj/machinery/processor
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+/obj/machinery/deepfryer
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+/obj/machinery/grill
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+/obj/machinery/gibber
+ icon = 'modular_nova/modules/aesthetics/kitchen/kitchen.dmi'
+
+//Different icon file, but it will still go in the kitchen folder!!!
+/obj/machinery/microwave
+ icon = 'modular_nova/modules/aesthetics/kitchen/microwave.dmi'
+
+/obj/structure/showcase/machinery/microwave
+ icon = 'modular_nova/modules/aesthetics/kitchen/microwave.dmi'
+
+//Skyrat Coffee Maker Icons
+/obj/machinery/coffeemaker
+ icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
+
+/obj/item/reagent_containers/cup/coffeepot
+ icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
+ fill_icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
+ fill_icon_state = "coffeepot"
+
+/obj/item/coffee_cartridge
+ icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
+
+/obj/item/blank_coffee_cartridge
+ icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
+
+/obj/item/storage/fancy/coffee_cart_rack
+ icon = 'modular_nova/modules/aesthetics/kitchen/coffeemaker.dmi'
diff --git a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi b/modular_nova/modules/aesthetics/kitchen/kitchen.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi
rename to modular_nova/modules/aesthetics/kitchen/kitchen.dmi
diff --git a/modular_skyrat/modules/aesthetics/kitchen/microwave.dmi b/modular_nova/modules/aesthetics/kitchen/microwave.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/kitchen/microwave.dmi
rename to modular_nova/modules/aesthetics/kitchen/microwave.dmi
diff --git a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm b/modular_nova/modules/aesthetics/lights/code/lighting.dm
similarity index 97%
rename from modular_skyrat/modules/aesthetics/lights/code/lighting.dm
rename to modular_nova/modules/aesthetics/lights/code/lighting.dm
index c5c30f406b0..ac4238cd25d 100644
--- a/modular_skyrat/modules/aesthetics/lights/code/lighting.dm
+++ b/modular_nova/modules/aesthetics/lights/code/lighting.dm
@@ -65,7 +65,7 @@
use_power = ACTIVE_POWER_USE
set_light(new_brightness, new_power, new_color)
if(play_sound)
- playsound(src.loc, 'modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg', 65, 1)
+ playsound(src.loc, 'modular_nova/modules/aesthetics/lights/sound/light_on.ogg', 65, 1)
/obj/machinery/light/proc/start_flickering()
on = FALSE
diff --git a/modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg b/modular_nova/modules/aesthetics/lights/sound/light_on.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/lights/sound/light_on.ogg
rename to modular_nova/modules/aesthetics/lights/sound/light_on.ogg
diff --git a/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm b/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm
new file mode 100644
index 00000000000..c85c1882ad8
--- /dev/null
+++ b/modular_nova/modules/aesthetics/lightswitch/code/lightswitch.dm
@@ -0,0 +1,24 @@
+/obj/machinery/light_switch
+ icon = 'modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi'
+
+/obj/machinery/light_switch/interact(mob/user)
+ . = ..()
+ playsound(src, 'modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1)
+
+#ifndef UNIT_TESTS
+/obj/machinery/light_switch/LateInitialize()
+ . = ..()
+ if(prob(50) && area.lightswitch) //50% chance for area to start with lights off.
+ turn_off()
+#endif
+
+/obj/machinery/light_switch/proc/turn_off()
+ if(!area.lightswitch)
+ return
+ area.lightswitch = FALSE
+ area.update_icon()
+
+ for(var/obj/machinery/light_switch/light_switch in area)
+ light_switch.update_icon()
+
+ area.power_change()
diff --git a/modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi b/modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi
rename to modular_nova/modules/aesthetics/lightswitch/icons/lightswitch.dmi
diff --git a/modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg b/modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg
similarity index 100%
rename from modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg
rename to modular_nova/modules/aesthetics/lightswitch/sound/lightswitch.ogg
diff --git a/modular_nova/modules/aesthetics/morgue/code/morgue.dm b/modular_nova/modules/aesthetics/morgue/code/morgue.dm
new file mode 100644
index 00000000000..ae2537fb0e2
--- /dev/null
+++ b/modular_nova/modules/aesthetics/morgue/code/morgue.dm
@@ -0,0 +1,2 @@
+/obj/structure/bodycontainer
+ icon = 'modular_nova/modules/aesthetics/morgue/icons/morgue.dmi'
diff --git a/modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi b/modular_nova/modules/aesthetics/morgue/icons/morgue.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi
rename to modular_nova/modules/aesthetics/morgue/icons/morgue.dmi
diff --git a/modular_skyrat/modules/aesthetics/plants/plants.dmi b/modular_nova/modules/aesthetics/plants/plants.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/plants/plants.dmi
rename to modular_nova/modules/aesthetics/plants/plants.dmi
diff --git a/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm b/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm
new file mode 100644
index 00000000000..86fb7246c1f
--- /dev/null
+++ b/modular_nova/modules/aesthetics/plasticflaps/code/plasticflaps.dm
@@ -0,0 +1,3 @@
+/obj/structure/plasticflaps
+ icon = 'modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi'
+
diff --git a/modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi b/modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi
rename to modular_nova/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi
diff --git a/modular_skyrat/modules/aesthetics/posters/contraband.dmi b/modular_nova/modules/aesthetics/posters/contraband.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/posters/contraband.dmi
rename to modular_nova/modules/aesthetics/posters/contraband.dmi
diff --git a/modular_skyrat/modules/aesthetics/posters/posters.dm b/modular_nova/modules/aesthetics/posters/posters.dm
similarity index 86%
rename from modular_skyrat/modules/aesthetics/posters/posters.dm
rename to modular_nova/modules/aesthetics/posters/posters.dm
index 6de93057e86..7e6eb98ec4e 100644
--- a/modular_skyrat/modules/aesthetics/posters/posters.dm
+++ b/modular_nova/modules/aesthetics/posters/posters.dm
@@ -4,7 +4,7 @@
/obj/structure/sign/poster/contraband/syndicate_medical
name = "Syndicate Medical"
desc = "This poster celebrates the complete successful revival of an hour-dead, six person mining team by Syndicate Operatives. Written in the corner is a simple message, 'Stay Winning.'"
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_syndiemed"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/syndicate_medical, 32)
@@ -12,7 +12,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/syndicate_medi
/obj/structure/sign/poster/contraband/crocin_pool
name = "SWIM"
desc = "This poster dramatically states; 'SWIM'. It seems to be advertising the use of Crocin.. 'recreationally', in the home, work, and, most ominously, 'the pool'. A 'MamoTramsem' logo is in the corner."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_crocin"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/crocin_pool, 32)
@@ -20,7 +20,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/crocin_pool, 3
/obj/structure/sign/poster/contraband/icebox_moment
name = "As above, so below"
desc = "This poster seems to be instill that a 'Head of Security's Office being overtop a syndicate installation is only fitting. As above.. so below.'"
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_abovebelow"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/icebox_moment, 32)
@@ -28,7 +28,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/icebox_moment,
/obj/structure/sign/poster/contraband/shipstation
name = "Flight Services - Enlist"
desc = "This poster depicts the long deprecated 'Ship' class 'station' in it's hayday. Surprisingly, the poster seems to be Nanotrasen official; though with how hush they've been on the topic..." //A disaster as big as Ship deserves a scandalous coverup.
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_shipstation"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/shipstation, 32)
@@ -36,7 +36,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/shipstation, 3
/obj/structure/sign/poster/contraband/dancing_honk
name = "DANCE"
desc = "This poster depicts a 'HONK' class mech ontop of a stage, next to a pole."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_honkdance"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/dancing_honk, 32)
@@ -44,7 +44,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/dancing_honk,
/obj/structure/sign/poster/contraband/operative_duffy
name = "CASH REWARD"
desc = "This poster depicts a gas mask, with details on how to 'forward information' on the whereabouts of whoever it means... though it doesn't specify to who."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_duffy"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/operative_duffy, 32)
@@ -52,7 +52,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/operative_duff
/obj/structure/sign/poster/contraband/ultra
name = "ULTRA"
desc = "This poster has one word on it, 'ULTRA'; it depicts a smiling pill next to a beaker. Ominous."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_ultra"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/ultra, 32)
@@ -60,7 +60,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/ultra, 32)
/obj/structure/sign/poster/contraband/secborg_vale
name = "Defaced Valeborg Advertisement"
desc = "This poster originally sought to advertise the sleek utility of the valeborg - but it seems to have been long since defaced. One word lies on top; 'RUN.' - Perhaps fitting, considering the security model shown."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_valeborg"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/secborg_vale, 32)
@@ -68,7 +68,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/secborg_vale,
/obj/structure/sign/poster/contraband/killingjoke // I like Batman :)))
name = "You don't have to be crazy to work here - but it sure helps!"
desc = "A poster boldly stating that being insane abord Nanotrasen stations isn't required. But it doesn't hurt to have!"
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "poster_sr_killingjoke"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/killingjoke, 32)
@@ -76,7 +76,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/killingjoke, 3
/obj/structure/sign/poster/contraband/nri_text
name = "NRI declaration of sovereignity"
desc = "This poster references the translated copy of Novaya Rossiyskaya Imperiya's declaration of sovereignity."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_texto"
/obj/structure/sign/poster/contraband/nri_text/examine_more(mob/user)
@@ -93,7 +93,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_text, 32)
/obj/structure/sign/poster/contraband/nri_rations
name = "NRI military rations advertisement"
desc = "This poster presumably is an advertisement for military rations produced by a certain private company as a part of the Defense Collegia's state order. This admiral's right hand man sure does look excited."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_rations"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_rations, 32)
@@ -101,7 +101,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_rations, 3
/obj/structure/sign/poster/contraband/nri_voskhod
name = "VOSKHOD combat armor advertisement"
desc = "A poster showcasing recently developed VOSKHOD combat armor currently in use by NRI's troops and infantry across the border. The word 'DRIP' is written top to bottom on the left side, presumably boasting about the suit's superior design."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_voskhod"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_voskhod, 32)
@@ -109,7 +109,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_voskhod, 3
/obj/structure/sign/poster/contraband/nri_pistol
name = "Szabo-Ivanek service pistol technical poster"
desc = "This poster seems to be a technical documentation for Szabo-Ivanek service pistol in use by most of the NRI's state police and military institutions. Sadly, it's all written in Pan-Slavic."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_pistol"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_pistol, 32)
@@ -117,7 +117,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_pistol, 32
/obj/structure/sign/poster/contraband/nri_engineer
name = "Build, Now"
desc = "This poster shows you an imperial combat engineer staring somewhere to the left of the viewer. The words 'Build, Now' are written on top and bottom of the poster."
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_engineer"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_engineer, 32)
@@ -125,7 +125,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_engineer,
/obj/structure/sign/poster/contraband/nri_radar
name = "Imperial navy enlistment poster"
desc = "Enlist with the imperial navy today! See the galaxy, shoot solarians, get PTSD!"
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "nri_radar"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/nri_radar, 32)
diff --git a/modular_skyrat/modules/aesthetics/rack/code/rack.dm b/modular_nova/modules/aesthetics/rack/code/rack.dm
similarity index 90%
rename from modular_skyrat/modules/aesthetics/rack/code/rack.dm
rename to modular_nova/modules/aesthetics/rack/code/rack.dm
index 23b0beaba07..0e822321d65 100644
--- a/modular_skyrat/modules/aesthetics/rack/code/rack.dm
+++ b/modular_nova/modules/aesthetics/rack/code/rack.dm
@@ -1,10 +1,10 @@
/obj/structure/rack
- icon = 'modular_skyrat/modules/aesthetics/rack/icons/rack.dmi'
+ icon = 'modular_nova/modules/aesthetics/rack/icons/rack.dmi'
/obj/structure/rack/shelf
name = "shelf"
desc = "A shelf, for storing things on. Conveinent!"
- icon = 'modular_skyrat/modules/aesthetics/rack/icons/rack.dmi'
+ icon = 'modular_nova/modules/aesthetics/rack/icons/rack.dmi'
icon_state = "shelf"
/obj/item/gun
diff --git a/modular_skyrat/modules/aesthetics/rack/icons/rack.dmi b/modular_nova/modules/aesthetics/rack/icons/rack.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/rack/icons/rack.dmi
rename to modular_nova/modules/aesthetics/rack/icons/rack.dmi
diff --git a/modular_skyrat/modules/aesthetics/readme.md b/modular_nova/modules/aesthetics/readme.md
similarity index 100%
rename from modular_skyrat/modules/aesthetics/readme.md
rename to modular_nova/modules/aesthetics/readme.md
diff --git a/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm b/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm
new file mode 100644
index 00000000000..96946e28b9f
--- /dev/null
+++ b/modular_nova/modules/aesthetics/shieldgen/code/shieldgen.dm
@@ -0,0 +1,2 @@
+/obj/machinery/power/shieldwallgen
+ icon = 'modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi'
diff --git a/modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi b/modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi
rename to modular_nova/modules/aesthetics/shieldgen/icons/shieldgen.dmi
diff --git a/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm
new file mode 100644
index 00000000000..7c25ebb294e
--- /dev/null
+++ b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dm
@@ -0,0 +1,2 @@
+/obj/structure/dresser
+ icon = 'modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi'
diff --git a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi b/modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi
rename to modular_nova/modules/aesthetics/stationobjs/stationobjs.dmi
diff --git a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm b/modular_nova/modules/aesthetics/status_display/code/status_display.dm
similarity index 76%
rename from modular_skyrat/modules/aesthetics/status_display/code/status_display.dm
rename to modular_nova/modules/aesthetics/status_display/code/status_display.dm
index 1258addd90f..cfa125c49f0 100644
--- a/modular_skyrat/modules/aesthetics/status_display/code/status_display.dm
+++ b/modular_nova/modules/aesthetics/status_display/code/status_display.dm
@@ -1,5 +1,5 @@
/obj/machinery/status_display
- icon = 'modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi'
+ icon = 'modular_nova/modules/aesthetics/status_display/icons/status_display.dmi'
/obj/machinery/status_display/LateInitialize()
. = ..()
diff --git a/modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi b/modular_nova/modules/aesthetics/status_display/icons/status_display.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/status_display/icons/status_display.dmi
rename to modular_nova/modules/aesthetics/status_display/icons/status_display.dmi
diff --git a/modular_nova/modules/aesthetics/storage/storage.dm b/modular_nova/modules/aesthetics/storage/storage.dm
new file mode 100644
index 00000000000..ac7661bddfa
--- /dev/null
+++ b/modular_nova/modules/aesthetics/storage/storage.dm
@@ -0,0 +1,140 @@
+/obj/item/storage/medkit/emergency
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
+
+/obj/item/borg/upgrade/rped
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
+
+/obj/item/storage/part_replacer
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
+
+/obj/item/storage/part_replacer/bluespace
+ icon = 'icons/obj/storage/storage.dmi'
+
+/obj/item/storage/part_replacer/cyborg
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
+
+
+
+/*
+// Boxes
+*/
+/obj/item/storage/box
+ icon = 'modular_nova/modules/aesthetics/storage/storage.dmi'
+
+/obj/item/storage/box/donkpockets
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/survival/syndie
+ icon_state = "syndiebox"
+
+/obj/item/storage/box/clown
+ icon_state = "hugbox"
+
+/obj/item/storage/box/cyber_implants
+ illustration = null //Included in the sprite
+
+/obj/item/storage/box/mothic_rations
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/mothic_goods
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/mothic_cans_sauces
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/tiziran_meats
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/tiziran_cans
+ icon = 'icons/obj/storage/box.dmi'
+
+/obj/item/storage/box/tiziran_goods
+ icon = 'icons/obj/storage/box.dmi'
+
+
+/*
+// Medical
+*/
+/obj/item/storage/box/swab
+ icon_state = "medbox"
+
+/obj/item/storage/box/masks
+ icon_state = "medbox"
+
+/obj/item/storage/box/bodybags
+ icon_state = "medbox"
+
+/obj/item/storage/box/survival/medical
+ icon_state = "medbox"
+
+/obj/item/storage/box/syringes
+ icon_state = "medbox"
+
+/obj/item/storage/box/medipens
+ icon_state = "medbox"
+
+/obj/item/storage/box/medigels
+ icon_state = "medbox"
+
+/obj/item/storage/box/injectors
+ icon_state = "medbox"
+
+/obj/item/storage/box/pillbottles
+ icon_state = "medbox"
+
+/obj/item/storage/box/silver_sulf
+ icon_state = "medbox"
+
+/*
+// Engineering
+*/
+/obj/item/storage/box/metalfoam
+ icon_state = "engibox"
+
+/obj/item/storage/box/smart_metal_foam
+ icon_state = "engibox"
+
+/obj/item/storage/box/material
+ icon_state = "engibox"
+
+/*
+// Security
+*/
+/obj/item/storage/box/rubbershot
+ icon_state = "secbox_xl"
+ illustration = "rubbershot"
+
+/obj/item/storage/box/lethalshot
+ icon_state = "secbox_xl"
+ illustration = "buckshot"
+
+/obj/item/storage/box/beanbag
+ icon_state = "secbox_xl"
+ illustration = "beanbag"
+
+/obj/item/storage/box/breacherslug
+ icon_state = "secbox_xl"
+ illustration = "breacherslug"
+
+/obj/item/storage/box/evidence
+ icon_state = "secbox"
+ illustration = "evidence"
+
+/obj/item/storage/box/rxglasses/spyglasskit
+ icon_state = "secbox"
+
+/obj/item/storage/box/holobadge
+ icon_state = "secbox"
+ illustration = "holobadge"
+
+/obj/item/storage/box/survival/security
+ icon_state = "secbox"
+
+/obj/item/storage/box/emps
+ icon_state = "syndiebox"
+
+/obj/item/storage/box/chemimp
+ icon_state = "medbox"
+
+/obj/item/storage/box/exileimp
+ icon_state = "secbox"
diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dmi b/modular_nova/modules/aesthetics/storage/storage.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/storage/storage.dmi
rename to modular_nova/modules/aesthetics/storage/storage.dmi
diff --git a/modular_nova/modules/aesthetics/telescience/telescience.dm b/modular_nova/modules/aesthetics/telescience/telescience.dm
new file mode 100644
index 00000000000..318574cd16d
--- /dev/null
+++ b/modular_nova/modules/aesthetics/telescience/telescience.dm
@@ -0,0 +1,2 @@
+/obj/item/gps
+ icon = 'modular_nova/modules/aesthetics/telescience/telescience.dmi'
diff --git a/modular_skyrat/modules/aesthetics/telescience/telescience.dmi b/modular_nova/modules/aesthetics/telescience/telescience.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/telescience/telescience.dmi
rename to modular_nova/modules/aesthetics/telescience/telescience.dmi
diff --git a/modular_nova/modules/aesthetics/tools/code/tools.dm b/modular_nova/modules/aesthetics/tools/code/tools.dm
new file mode 100644
index 00000000000..a23410b3b3d
--- /dev/null
+++ b/modular_nova/modules/aesthetics/tools/code/tools.dm
@@ -0,0 +1,36 @@
+/obj/item/weldingtool
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/crowbar
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/crowbar/power
+ lefthand_file = 'modular_nova/modules/aesthetics/tools/tools_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/aesthetics/tools/tools_righthand.dmi'
+
+/obj/item/crowbar/power/syndicate //Because we have a clearly different color JOL than upstream, this needs to be specifically different now
+ inhand_icon_state = "jaws_syndie"
+
+/obj/item/crowbar/large/heavy
+ icon = 'icons/obj/tools.dmi'
+
+/obj/item/crowbar/large/old
+ icon = 'icons/obj/tools.dmi'
+
+/obj/item/wrench
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/wrench/caravan
+ icon = 'icons/obj/tools.dmi'
+
+/obj/item/screwdriver/power
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/construction/plumbing //This icon override NEEDS to be here for the subtypes
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/construction/rcd/arcd
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
+
+/obj/item/inducer
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
diff --git a/modular_skyrat/modules/aesthetics/tools/tools.dmi b/modular_nova/modules/aesthetics/tools/tools.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/tools/tools.dmi
rename to modular_nova/modules/aesthetics/tools/tools.dmi
diff --git a/modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi b/modular_nova/modules/aesthetics/tools/tools_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi
rename to modular_nova/modules/aesthetics/tools/tools_lefthand.dmi
diff --git a/modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi b/modular_nova/modules/aesthetics/tools/tools_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi
rename to modular_nova/modules/aesthetics/tools/tools_righthand.dmi
diff --git a/modular_skyrat/modules/aesthetics/vending/access_vending.dm b/modular_nova/modules/aesthetics/vending/access_vending.dm
similarity index 100%
rename from modular_skyrat/modules/aesthetics/vending/access_vending.dm
rename to modular_nova/modules/aesthetics/vending/access_vending.dm
diff --git a/modular_nova/modules/aesthetics/walls/code/walls.dm b/modular_nova/modules/aesthetics/walls/code/walls.dm
new file mode 100644
index 00000000000..cd7711136d4
--- /dev/null
+++ b/modular_nova/modules/aesthetics/walls/code/walls.dm
@@ -0,0 +1,80 @@
+/turf/closed/wall
+ icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi'
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/turf/closed/wall/r_wall
+ icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi'
+
+/turf/closed/wall/rust
+ icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+
+/turf/closed/wall/r_wall/rust
+ icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi'
+ icon_state = "reinforced_wall-0"
+ base_icon_state = "reinforced_wall"
+ base_decon_state = "r_wall"
+
+/turf/closed/wall/material
+ icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi'
+ icon_state = "wall-0"
+ base_icon_state = "wall"
+
+// Modular false wall overrides
+/obj/structure/falsewall
+ icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi'
+ fake_icon = 'modular_nova/modules/aesthetics/walls/icons/wall.dmi'
+
+/obj/structure/falsewall/reinforced
+ name = "reinforced wall"
+ desc = "A huge chunk of reinforced metal used to separate rooms."
+ icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi'
+ fake_icon = 'modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi'
+
+/obj/structure/falsewall/material
+ icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi'
+ icon_state = "wall-open"
+ base_icon_state = "wall"
+ fake_icon = 'modular_nova/modules/aesthetics/walls/icons/material_wall.dmi'
+
+// TG false walls, overridden back to the TG file because we overrode the base falsewall with our aesthetic icon. New ones from TG will have to be added here.
+// Yes, this is dumb
+/obj/structure/falsewall/uranium
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/gold
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/silver
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/diamond
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/plasma
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/bananium
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/sandstone
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/wood
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/bamboo
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/iron
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/abductor
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/titanium
+ icon = 'icons/turf/walls/false_walls.dmi'
+
+/obj/structure/falsewall/plastitanium
+ icon = 'icons/turf/walls/false_walls.dmi'
diff --git a/modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi b/modular_nova/modules/aesthetics/walls/icons/material_wall.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi
rename to modular_nova/modules/aesthetics/walls/icons/material_wall.dmi
diff --git a/modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi b/modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi
rename to modular_nova/modules/aesthetics/walls/icons/reinforced_wall.dmi
diff --git a/modular_skyrat/modules/aesthetics/walls/icons/wall.dmi b/modular_nova/modules/aesthetics/walls/icons/wall.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/walls/icons/wall.dmi
rename to modular_nova/modules/aesthetics/walls/icons/wall.dmi
diff --git a/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm b/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm
new file mode 100644
index 00000000000..9fee634dc0c
--- /dev/null
+++ b/modular_nova/modules/aesthetics/washing_machine/code/washing_machine.dm
@@ -0,0 +1,2 @@
+/obj/machinery/washing_machine
+ icon = 'modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi'
diff --git a/modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi b/modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi
rename to modular_nova/modules/aesthetics/washing_machine/icons/washing_machine.dmi
diff --git a/modular_nova/modules/aesthetics/windows/code/windows.dm b/modular_nova/modules/aesthetics/windows/code/windows.dm
new file mode 100644
index 00000000000..f3218c62070
--- /dev/null
+++ b/modular_nova/modules/aesthetics/windows/code/windows.dm
@@ -0,0 +1,27 @@
+/obj/structure/window/fulltile
+ icon = 'modular_nova/modules/aesthetics/windows/icons/window.dmi'
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/obj/structure/window/reinforced/fulltile
+ icon = 'modular_nova/modules/aesthetics/windows/icons/r_window.dmi'
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/obj/structure/window/reinforced/tinted/fulltile
+ icon = 'modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi'
+ icon_state = "reinforced_window-0"
+ base_icon_state = "reinforced_window"
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/obj/structure/window/plasma/fulltile
+ icon = 'modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi'
+ icon_state = "window-0"
+ base_icon_state = "window"
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/obj/structure/window/reinforced/plasma/fulltile
+ icon = 'modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi'
+ icon_state = "reinforced_window-0"
+ base_icon_state = "reinforced_window"
+ canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
+
+/obj/structure/window/reinforced/fulltile/ice
diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi
rename to modular_nova/modules/aesthetics/windows/icons/r_window.dmi
diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi
rename to modular_nova/modules/aesthetics/windows/icons/r_window_plasma.dmi
diff --git a/modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi b/modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi
rename to modular_nova/modules/aesthetics/windows/icons/r_window_tinted.dmi
diff --git a/modular_skyrat/modules/aesthetics/windows/icons/window.dmi b/modular_nova/modules/aesthetics/windows/icons/window.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/windows/icons/window.dmi
rename to modular_nova/modules/aesthetics/windows/icons/window.dmi
diff --git a/modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi b/modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi
similarity index 100%
rename from modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi
rename to modular_nova/modules/aesthetics/windows/icons/window_plasma.dmi
diff --git a/modular_skyrat/modules/airlock_override/code/airlock_override.dm b/modular_nova/modules/airlock_override/code/airlock_override.dm
similarity index 100%
rename from modular_skyrat/modules/airlock_override/code/airlock_override.dm
rename to modular_nova/modules/airlock_override/code/airlock_override.dm
diff --git a/modular_nova/modules/airlock_override/readme.md b/modular_nova/modules/airlock_override/readme.md
new file mode 100644
index 00000000000..5de1a71a63e
--- /dev/null
+++ b/modular_nova/modules/airlock_override/readme.md
@@ -0,0 +1,21 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/16787
+
+## Title:
+Engineering override for airlocks on orange alert
+MODULE ID: AIRLOCK_OVERRIDE
+
+### Description:
+Adds functionality to the airlocks so that when the alert level is set to orange, engineers receive expanded access so they aren't stuck at an airlock when disaster happens.
+
+### TG Proc/File Changes:
+code/game/machinery/computer/communications.dm
+code/modules/security_levels/keycard_authentication.dm
+tgui/packages/tgui/interfaces/CommunicationsConsole.js
+tgui/packages/tgui/interfaces/KeycardAuth.js
+
+### Defines:
+AIRLOCK_LIGHT_ENGINEERING in \Skyrat-tg\modular_nova\modules\aesthetics\airlock\code\airlock.dm
+AIRLOCK_ENGINEERING_LIGHT_COLOR in \Skyrat-tg\modular_nova\modules\aesthetics\airlock\code\airlock.dm
+
+### Credits:
+LT3
diff --git a/modular_skyrat/modules/akula/code/wetsuit.dm b/modular_nova/modules/akula/code/wetsuit.dm
similarity index 100%
rename from modular_skyrat/modules/akula/code/wetsuit.dm
rename to modular_nova/modules/akula/code/wetsuit.dm
diff --git a/modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm b/modular_nova/modules/alerts/code/alert_sound_to_playing.dm
similarity index 100%
rename from modular_skyrat/modules/alerts/code/alert_sound_to_playing.dm
rename to modular_nova/modules/alerts/code/alert_sound_to_playing.dm
diff --git a/modular_skyrat/modules/alerts/code/config.dm b/modular_nova/modules/alerts/code/config.dm
similarity index 100%
rename from modular_skyrat/modules/alerts/code/config.dm
rename to modular_nova/modules/alerts/code/config.dm
diff --git a/modular_nova/modules/alerts/code/default_announcer.dm b/modular_nova/modules/alerts/code/default_announcer.dm
new file mode 100644
index 00000000000..57bf1c2d8f3
--- /dev/null
+++ b/modular_nova/modules/alerts/code/default_announcer.dm
@@ -0,0 +1,48 @@
+/datum/centcom_announcer/default
+ welcome_sounds = list('sound/ai/default/welcome.ogg')
+ alert_sounds = list('modular_nova/modules/alerts/sound/alerts/alert2.ogg')
+ command_report_sounds = list('modular_nova/modules/alerts/sound/alerts/commandreport.ogg')
+ event_sounds = list(
+ ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg',
+ ANNOUNCER_ALIENS = 'modular_nova/modules/alerts/sound/alerts/lifesigns.ogg',
+ ANNOUNCER_ANIMES = 'modular_nova/modules/alerts/sound/alerts/animes.ogg',
+ ANNOUNCER_INTERCEPT = 'modular_nova/modules/alerts/sound/alerts/alert2.ogg',
+ ANNOUNCER_IONSTORM = 'modular_nova/modules/alerts/sound/alerts/ionstorm.ogg',
+ ANNOUNCER_METEORS = 'modular_nova/modules/alerts/sound/alerts/meteors.ogg',
+ ANNOUNCER_OUTBREAK5 = 'modular_nova/modules/alerts/sound/alerts/outbreak5.ogg',
+ ANNOUNCER_OUTBREAK6 = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg',
+ ANNOUNCER_OUTBREAK7 = 'modular_nova/modules/alerts/sound/alerts/outbreak7.ogg',
+ ANNOUNCER_POWEROFF = 'modular_nova/modules/alerts/sound/alerts/poweroff.ogg',
+ ANNOUNCER_POWERON = 'modular_nova/modules/alerts/sound/alerts/poweron.ogg',
+ ANNOUNCER_RADIATION = 'modular_nova/modules/alerts/sound/alerts/radiation.ogg',
+ ANNOUNCER_RADIATIONPASSED = 'modular_nova/modules/alerts/sound/alerts/radpassed.ogg',
+ ANNOUNCER_SHUTTLECALLED = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg',
+ ANNOUNCER_SHUTTLEDOCK = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg',
+ ANNOUNCER_SHUTTLERECALLED = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg',
+ ANNOUNCER_SHUTTLELEFT = 'modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg',
+ ANNOUNCER_ANOMALIES = 'modular_nova/modules/alerts/sound/alerts/alert2.ogg',
+ ANNOUNCER_GRAVANOMALIES= 'modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg',
+ ANNOUNCER_SPANOMALIES = 'modular_nova/modules/alerts/sound/alerts/wormholes.ogg',
+ ANNOUNCER_VORTEXANOMALIES = 'modular_nova/modules/alerts/sound/alerts/vortex.ogg',
+ ANNOUNCER_MASSIVEBSPACEANOMALIES = 'modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg',
+ ANNOUNCER_TRANSLOCATION = 'modular_nova/modules/alerts/sound/alerts/transolcation.ogg',
+ ANNOUNCER_FLUXANOMALIES = 'modular_nova/modules/alerts/sound/alerts/flux.ogg',
+ ANNOUNCER_PYROANOMALIES = 'modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg',
+ ANNOUNCER_CARP = 'modular_nova/modules/alerts/sound/alerts/carps.ogg',
+ ANNOUNCER_BLUESPACEARTY = 'modular_nova/modules/alerts/sound/alerts/artillery.ogg',
+ ANNOUNCER_CAPTAIN = 'modular_nova/modules/alerts/sound/alerts/announce.ogg',
+ ANNOUNCER_GRAVGENOFF = 'modular_nova/modules/alerts/sound/alerts/gravityoff.ogg',
+ ANNOUNCER_GRAVGENON = 'modular_nova/modules/alerts/sound/alerts/gravityon.ogg',
+ ANNOUNCER_GREYTIDE = 'modular_nova/modules/alerts/sound/alerts/greytide.ogg',
+ ANNOUNCER_COMMSBLACKOUT = 'modular_nova/modules/alerts/sound/alerts/commsblackout.ogg',
+ ANNOUNCER_ELECTRICALSTORM = 'modular_nova/modules/alerts/sound/alerts/estorm.ogg',
+ ANNOUNCER_BRANDINTELLIGENCE = 'modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg',
+ ANNOUNCER_SPOOKY = 'modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg',
+ ANNOUNCER_ERTYES = 'modular_nova/modules/alerts/sound/alerts/yesert.ogg',
+ ANNOUNCER_MUTANTS = 'modular_nova/modules/alerts/sound/alerts/hazdet.ogg',
+ ANNOUNCER_KLAXON = 'modular_nova/modules/black_mesa/sound/siren1_long.ogg',
+ ANNOUNCER_ICARUS = 'modular_nova/modules/assault_operatives/sound/icarus_alarm.ogg',
+ ANNOUNCER_NRI_RAIDERS = 'modular_nova/modules/encounters/sounds/morse.ogg',
+ ANNOUNCER_DEPARTMENTAL = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg',
+ ANNOUNCER_SHUTTLE = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg',
+ )
diff --git a/modular_nova/modules/alerts/code/security_level_datums.dm b/modular_nova/modules/alerts/code/security_level_datums.dm
new file mode 100644
index 00000000000..f6b51df63c5
--- /dev/null
+++ b/modular_nova/modules/alerts/code/security_level_datums.dm
@@ -0,0 +1,80 @@
+/**
+ * Contains some overrides and our sec levels.
+ */
+
+/datum/security_level/green
+ sound = 'modular_nova/modules/alerts/sound/security_levels/green.ogg'
+
+/datum/security_level/blue
+ sound = 'modular_nova/modules/alerts/sound/security_levels/blue.ogg'
+
+/datum/security_level/red
+ sound = 'modular_nova/modules/alerts/sound/security_levels/red.ogg'
+
+/datum/security_level/delta
+ announcement_color = "pink"
+ lowering_to_configuration_key = /datum/config_entry/string/alert_delta_downto
+ elevating_to_configuration_key = /datum/config_entry/string/alert_delta_upto
+ sound = 'modular_nova/modules/alerts/sound/security_levels/delta.ogg'
+ looping_sound = 'modular_nova/modules/alerts/sound/misc/alarm_delta.ogg'
+ looping_sound_interval = 8 SECONDS
+
+
+/**
+ * Violet
+ *
+ * Medical emergency
+ */
+/datum/security_level/violet
+ name = "violet"
+ announcement_color = "purple"
+ number_level = SEC_LEVEL_VIOLET
+ lowering_to_configuration_key = /datum/config_entry/string/alert_violet_downto
+ elevating_to_configuration_key = /datum/config_entry/string/alert_violet_upto
+ sound = 'modular_nova/modules/alerts/sound/security_levels/violet.ogg'
+ shuttle_call_time_mod = 0.75
+
+/**
+ * Orange
+ *
+ * Engineering emergency
+ */
+/datum/security_level/orange
+ name = "orange"
+ announcement_color = "orange"
+ number_level = SEC_LEVEL_ORANGE
+ lowering_to_configuration_key = /datum/config_entry/string/alert_orange_downto
+ elevating_to_configuration_key = /datum/config_entry/string/alert_orange_upto
+ sound = 'modular_nova/modules/alerts/sound/security_levels/orange.ogg'
+ shuttle_call_time_mod = 0.75
+
+/**
+ * Amber
+ *
+ * Securty emergency
+ */
+
+/datum/security_level/amber
+ name = "amber"
+ announcement_color = "yellow"
+ number_level = SEC_LEVEL_AMBER
+ lowering_to_configuration_key = /datum/config_entry/string/alert_amber_downto
+ elevating_to_configuration_key = /datum/config_entry/string/alert_amber_upto
+ sound = 'modular_nova/modules/alerts/sound/security_levels/amber.ogg'
+ shuttle_call_time_mod = 0.5
+
+
+/**
+ * Gamma
+ *
+ * XK-Class EOW Event
+ */
+/datum/security_level/gamma
+ name = "gamma"
+ announcement_color = "pink"
+ number_level = SEC_LEVEL_GAMMA
+ elevating_to_configuration_key = /datum/config_entry/string/alert_gamma
+ shuttle_call_time_mod = 0.25
+ sound = 'modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg'
+ looping_sound = 'modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg'
+ looping_sound_interval = 13 SECONDS
diff --git a/modular_skyrat/modules/alerts/code/security_level_procs.dm b/modular_nova/modules/alerts/code/security_level_procs.dm
similarity index 100%
rename from modular_skyrat/modules/alerts/code/security_level_procs.dm
rename to modular_nova/modules/alerts/code/security_level_procs.dm
diff --git a/modular_skyrat/modules/alerts/readme.md b/modular_nova/modules/alerts/readme.md
similarity index 100%
rename from modular_skyrat/modules/alerts/readme.md
rename to modular_nova/modules/alerts/readme.md
diff --git a/modular_skyrat/modules/alerts/sound/alerts/aimalf.ogg b/modular_nova/modules/alerts/sound/alerts/aimalf.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/aimalf.ogg
rename to modular_nova/modules/alerts/sound/alerts/aimalf.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert1.ogg b/modular_nova/modules/alerts/sound/alerts/alert1.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/alert1.ogg
rename to modular_nova/modules/alerts/sound/alerts/alert1.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert2.ogg b/modular_nova/modules/alerts/sound/alerts/alert2.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/alert2.ogg
rename to modular_nova/modules/alerts/sound/alerts/alert2.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/alert3.ogg b/modular_nova/modules/alerts/sound/alerts/alert3.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/alert3.ogg
rename to modular_nova/modules/alerts/sound/alerts/alert3.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/aliens.ogg b/modular_nova/modules/alerts/sound/alerts/aliens.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/aliens.ogg
rename to modular_nova/modules/alerts/sound/alerts/aliens.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/animes.ogg b/modular_nova/modules/alerts/sound/alerts/animes.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/animes.ogg
rename to modular_nova/modules/alerts/sound/alerts/animes.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/announce.ogg b/modular_nova/modules/alerts/sound/alerts/announce.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/announce.ogg
rename to modular_nova/modules/alerts/sound/alerts/announce.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/artillery.ogg b/modular_nova/modules/alerts/sound/alerts/artillery.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/artillery.ogg
rename to modular_nova/modules/alerts/sound/alerts/artillery.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/attention.ogg b/modular_nova/modules/alerts/sound/alerts/attention.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/attention.ogg
rename to modular_nova/modules/alerts/sound/alerts/attention.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg b/modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg
rename to modular_nova/modules/alerts/sound/alerts/bluespace_anomalies.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/carps.ogg b/modular_nova/modules/alerts/sound/alerts/carps.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/carps.ogg
rename to modular_nova/modules/alerts/sound/alerts/carps.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg b/modular_nova/modules/alerts/sound/alerts/commandreport.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg
rename to modular_nova/modules/alerts/sound/alerts/commandreport.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg b/modular_nova/modules/alerts/sound/alerts/commsblackout.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg
rename to modular_nova/modules/alerts/sound/alerts/commsblackout.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg
rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_called.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg
rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_docked.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg
rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_left.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg b/modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg
rename to modular_nova/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/estorm.ogg b/modular_nova/modules/alerts/sound/alerts/estorm.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/estorm.ogg
rename to modular_nova/modules/alerts/sound/alerts/estorm.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/flux.ogg b/modular_nova/modules/alerts/sound/alerts/flux.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/flux.ogg
rename to modular_nova/modules/alerts/sound/alerts/flux.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg b/modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg
rename to modular_nova/modules/alerts/sound/alerts/gravanomalies.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg b/modular_nova/modules/alerts/sound/alerts/gravityoff.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg
rename to modular_nova/modules/alerts/sound/alerts/gravityoff.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg b/modular_nova/modules/alerts/sound/alerts/gravityon.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg
rename to modular_nova/modules/alerts/sound/alerts/gravityon.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/greytide.ogg b/modular_nova/modules/alerts/sound/alerts/greytide.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/greytide.ogg
rename to modular_nova/modules/alerts/sound/alerts/greytide.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg b/modular_nova/modules/alerts/sound/alerts/hazdet.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg
rename to modular_nova/modules/alerts/sound/alerts/hazdet.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/intercept.ogg b/modular_nova/modules/alerts/sound/alerts/intercept.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/intercept.ogg
rename to modular_nova/modules/alerts/sound/alerts/intercept.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg b/modular_nova/modules/alerts/sound/alerts/ionstorm.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg
rename to modular_nova/modules/alerts/sound/alerts/ionstorm.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg b/modular_nova/modules/alerts/sound/alerts/lifesigns.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg
rename to modular_nova/modules/alerts/sound/alerts/lifesigns.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/meteors.ogg b/modular_nova/modules/alerts/sound/alerts/meteors.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/meteors.ogg
rename to modular_nova/modules/alerts/sound/alerts/meteors.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/noert.ogg b/modular_nova/modules/alerts/sound/alerts/noert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/noert.ogg
rename to modular_nova/modules/alerts/sound/alerts/noert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg b/modular_nova/modules/alerts/sound/alerts/outbreak5.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg
rename to modular_nova/modules/alerts/sound/alerts/outbreak5.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg b/modular_nova/modules/alerts/sound/alerts/outbreak7.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg
rename to modular_nova/modules/alerts/sound/alerts/outbreak7.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg b/modular_nova/modules/alerts/sound/alerts/poweroff.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg
rename to modular_nova/modules/alerts/sound/alerts/poweroff.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/poweron.ogg b/modular_nova/modules/alerts/sound/alerts/poweron.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/poweron.ogg
rename to modular_nova/modules/alerts/sound/alerts/poweron.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg b/modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg
rename to modular_nova/modules/alerts/sound/alerts/pyr_anomalies.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/radiation.ogg b/modular_nova/modules/alerts/sound/alerts/radiation.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/radiation.ogg
rename to modular_nova/modules/alerts/sound/alerts/radiation.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/radiation1.ogg b/modular_nova/modules/alerts/sound/alerts/radiation1.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/radiation1.ogg
rename to modular_nova/modules/alerts/sound/alerts/radiation1.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg b/modular_nova/modules/alerts/sound/alerts/radpassed.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg
rename to modular_nova/modules/alerts/sound/alerts/radpassed.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg b/modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg
rename to modular_nova/modules/alerts/sound/alerts/rampant_brand_int.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg b/modular_nova/modules/alerts/sound/alerts/transolcation.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg
rename to modular_nova/modules/alerts/sound/alerts/transolcation.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/vortex.ogg b/modular_nova/modules/alerts/sound/alerts/vortex.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/vortex.ogg
rename to modular_nova/modules/alerts/sound/alerts/vortex.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg b/modular_nova/modules/alerts/sound/alerts/wormholes.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg
rename to modular_nova/modules/alerts/sound/alerts/wormholes.ogg
diff --git a/modular_skyrat/modules/alerts/sound/alerts/yesert.ogg b/modular_nova/modules/alerts/sound/alerts/yesert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/alerts/yesert.ogg
rename to modular_nova/modules/alerts/sound/alerts/yesert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg b/modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg
rename to modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg b/modular_nova/modules/alerts/sound/misc/alarm_delta.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg
rename to modular_nova/modules/alerts/sound/misc/alarm_delta.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg b/modular_nova/modules/alerts/sound/misc/delta_countdown.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/delta_countdown.ogg
rename to modular_nova/modules/alerts/sound/misc/delta_countdown.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/notice1.ogg b/modular_nova/modules/alerts/sound/misc/notice1.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/notice1.ogg
rename to modular_nova/modules/alerts/sound/misc/notice1.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/redalert1.ogg b/modular_nova/modules/alerts/sound/misc/redalert1.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/redalert1.ogg
rename to modular_nova/modules/alerts/sound/misc/redalert1.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/tas_red_alert.ogg b/modular_nova/modules/alerts/sound/misc/tas_red_alert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/tas_red_alert.ogg
rename to modular_nova/modules/alerts/sound/misc/tas_red_alert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/voyalert.ogg b/modular_nova/modules/alerts/sound/misc/voyalert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/voyalert.ogg
rename to modular_nova/modules/alerts/sound/misc/voyalert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg b/modular_nova/modules/alerts/sound/misc/voybluealert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/misc/voybluealert.ogg
rename to modular_nova/modules/alerts/sound/misc/voybluealert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/amber.ogg b/modular_nova/modules/alerts/sound/security_levels/amber.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/amber.ogg
rename to modular_nova/modules/alerts/sound/security_levels/amber.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/blue.ogg b/modular_nova/modules/alerts/sound/security_levels/blue.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/blue.ogg
rename to modular_nova/modules/alerts/sound/security_levels/blue.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/delta.ogg b/modular_nova/modules/alerts/sound/security_levels/delta.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/delta.ogg
rename to modular_nova/modules/alerts/sound/security_levels/delta.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg b/modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg
rename to modular_nova/modules/alerts/sound/security_levels/gamma_alert.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/green.ogg b/modular_nova/modules/alerts/sound/security_levels/green.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/green.ogg
rename to modular_nova/modules/alerts/sound/security_levels/green.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/orange.ogg b/modular_nova/modules/alerts/sound/security_levels/orange.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/orange.ogg
rename to modular_nova/modules/alerts/sound/security_levels/orange.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/red.ogg b/modular_nova/modules/alerts/sound/security_levels/red.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/red.ogg
rename to modular_nova/modules/alerts/sound/security_levels/red.ogg
diff --git a/modular_skyrat/modules/alerts/sound/security_levels/violet.ogg b/modular_nova/modules/alerts/sound/security_levels/violet.ogg
similarity index 100%
rename from modular_skyrat/modules/alerts/sound/security_levels/violet.ogg
rename to modular_nova/modules/alerts/sound/security_levels/violet.ogg
diff --git a/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm b/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm
new file mode 100644
index 00000000000..6e9e9c8a629
--- /dev/null
+++ b/modular_nova/modules/alt_vox/code/voc_sounds_mil.dm
@@ -0,0 +1,294 @@
+#ifdef AI_VOX
+
+GLOBAL_LIST_INIT(vox_sounds_mil, list(
+ "," = 'modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg',
+ "." = 'modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg',
+ "error_beep" = 'modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg',
+ "signon_beep" = 'modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg',
+ "hostile_takeover" = 'modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg',
+ "bloop" = 'modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg',
+ "buzwarn" = 'modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg',
+ "dadeda" = 'modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg',
+ "deeoo" = 'modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg',
+ "doop" = 'modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg',
+ "access" = 'modular_nova/modules/alt_vox/sound/vox_mil/access.ogg',
+ "acknowledged" = 'modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg',
+ "activate" = 'modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg',
+ "activated" = 'modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg',
+ "activity" = 'modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg',
+ "advanced" = 'modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg',
+ "alert" = 'modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg',
+ "alien" = 'modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg',
+ "all" = 'modular_nova/modules/alt_vox/sound/vox_mil/all.ogg',
+ "alpha" = 'modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg',
+ "an" = 'modular_nova/modules/alt_vox/sound/vox_mil/an.ogg',
+ "and" = 'modular_nova/modules/alt_vox/sound/vox_mil/and.ogg',
+ "announcement" = 'modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg',
+ "antenna" = 'modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg',
+ "any" = 'modular_nova/modules/alt_vox/sound/vox_mil/any.ogg',
+ "approach" = 'modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg',
+ "are" = 'modular_nova/modules/alt_vox/sound/vox_mil/are.ogg',
+ "area" = 'modular_nova/modules/alt_vox/sound/vox_mil/area.ogg',
+ "armed" = 'modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg',
+ "armory" = 'modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg',
+ "atomic" = 'modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg',
+ "attention" = 'modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg',
+ "authorized" = 'modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg',
+ "automatic" = 'modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg',
+ "away" = 'modular_nova/modules/alt_vox/sound/vox_mil/away.ogg',
+ "b" = 'modular_nova/modules/alt_vox/sound/vox_mil/b.ogg',
+ "back" = 'modular_nova/modules/alt_vox/sound/vox_mil/back.ogg',
+ "base" = 'modular_nova/modules/alt_vox/sound/vox_mil/base.ogg',
+ "biohazard" = 'modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg',
+ "biological" = 'modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg',
+ "black" = 'modular_nova/modules/alt_vox/sound/vox_mil/black.ogg',
+ "blast" = 'modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg',
+ "blue" = 'modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg',
+ "bravo" = 'modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg',
+ "breach" = 'modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg',
+ "bypass" = 'modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg',
+ "cable" = 'modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg',
+ "center" = 'modular_nova/modules/alt_vox/sound/vox_mil/center.ogg',
+ "central" = 'modular_nova/modules/alt_vox/sound/vox_mil/central.ogg',
+ "chamber" = 'modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg',
+ "check" = 'modular_nova/modules/alt_vox/sound/vox_mil/check.ogg',
+ "checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg',
+ "chemical" = 'modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg',
+ "clear" = 'modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg',
+ "code" = 'modular_nova/modules/alt_vox/sound/vox_mil/code.ogg',
+ "command" = 'modular_nova/modules/alt_vox/sound/vox_mil/command.ogg',
+ "communications" = 'modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg',
+ "complex" = 'modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg',
+ "containment" = 'modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg',
+ "contamination" = 'modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg',
+ "control" = 'modular_nova/modules/alt_vox/sound/vox_mil/control.ogg',
+ "coolant" = 'modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg',
+ "core" = 'modular_nova/modules/alt_vox/sound/vox_mil/core.ogg',
+ "crew" = 'modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg',
+ "cross" = 'modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg',
+ "d" = 'modular_nova/modules/alt_vox/sound/vox_mil/d.ogg',
+ "damage" = 'modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg',
+ "danger" = 'modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg',
+ "day" = 'modular_nova/modules/alt_vox/sound/vox_mil/day.ogg',
+ "deactivated" = 'modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg',
+ "defense" = 'modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg',
+ "delta" = 'modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg',
+ "denied" = 'modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg',
+ "destroy" = 'modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg',
+ "detected" = 'modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg',
+ "detonation" = 'modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg',
+ "device" = 'modular_nova/modules/alt_vox/sound/vox_mil/device.ogg',
+ "dimensional" = 'modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg',
+ "disengaged" = 'modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg',
+ "do" = 'modular_nova/modules/alt_vox/sound/vox_mil/do.ogg',
+ "door" = 'modular_nova/modules/alt_vox/sound/vox_mil/door.ogg',
+ "down" = 'modular_nova/modules/alt_vox/sound/vox_mil/down.ogg',
+ "e" = 'modular_nova/modules/alt_vox/sound/vox_mil/e.ogg',
+ "echo" = 'modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg',
+ "eight" = 'modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg',
+ "eighteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg',
+ "eighty" = 'modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg',
+ "electric" = 'modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg',
+ "eleven" = 'modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg',
+ "eliminate" = 'modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg',
+ "emergency" = 'modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg',
+ "energy" = 'modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg',
+ "engage" = 'modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg',
+ "engaged" = 'modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg',
+ "enter" = 'modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg',
+ "entry" = 'modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg',
+ "escape" = 'modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg',
+ "evacuate" = 'modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg',
+ "exchange" = 'modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg',
+ "experimental" = 'modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg',
+ "extreme" = 'modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg',
+ "facility" = 'modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg',
+ "failed" = 'modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg',
+ "failure" = 'modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg',
+ "field" = 'modular_nova/modules/alt_vox/sound/vox_mil/field.ogg',
+ "fifteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg',
+ "fifty" = 'modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg',
+ "fire" = 'modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg',
+ "five" = 'modular_nova/modules/alt_vox/sound/vox_mil/five.ogg',
+ "forbidden" = 'modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg',
+ "force" = 'modular_nova/modules/alt_vox/sound/vox_mil/force.ogg',
+ "forms" = 'modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg',
+ "forty" = 'modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg',
+ "four" = 'modular_nova/modules/alt_vox/sound/vox_mil/four.ogg',
+ "fourteen " = 'modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg',
+ "freeman" = 'modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg',
+ "from" = 'modular_nova/modules/alt_vox/sound/vox_mil/from.ogg',
+ "fuel" = 'modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg',
+ "get" = 'modular_nova/modules/alt_vox/sound/vox_mil/get.ogg',
+ "go" = 'modular_nova/modules/alt_vox/sound/vox_mil/go.ogg',
+ "gordon" = 'modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg',
+ "granted" = 'modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg',
+ "green" = 'modular_nova/modules/alt_vox/sound/vox_mil/green.ogg',
+ "handling" = 'modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg',
+ "hanger" = 'modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg',
+ "have" = 'modular_nova/modules/alt_vox/sound/vox_mil/have.ogg',
+ "hazard" = 'modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg',
+ "health" = 'modular_nova/modules/alt_vox/sound/vox_mil/health.ogg',
+ "heat" = 'modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg',
+ "helecopter" = 'modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg',
+ "helium" = 'modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg',
+ "high" = 'modular_nova/modules/alt_vox/sound/vox_mil/high.ogg',
+ "hostal" = 'modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg',
+ "hostile" = 'modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg',
+ "hotel" = 'modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg',
+ "hundred" = 'modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg',
+ "hydro" = 'modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg',
+ "illegal" = 'modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg',
+ "immediate" = 'modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg',
+ "immediately" = 'modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg',
+ "in" = 'modular_nova/modules/alt_vox/sound/vox_mil/in.ogg',
+ "india" = 'modular_nova/modules/alt_vox/sound/vox_mil/india.ogg',
+ "inoperative" = 'modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg',
+ "inside" = 'modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg',
+ "inspection" = 'modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg',
+ "is" = 'modular_nova/modules/alt_vox/sound/vox_mil/is.ogg',
+ "kilo" = 'modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg',
+ "kilo2" = 'modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg',
+ "lambda" = 'modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg',
+ "laser" = 'modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg',
+ "launch" = 'modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg',
+ "leak" = 'modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg',
+ "level" = 'modular_nova/modules/alt_vox/sound/vox_mil/level.ogg',
+ "lima" = 'modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg',
+ "lima_alt" = 'modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg',
+ "liquid" = 'modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg',
+ "lock" = 'modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg',
+ "locked" = 'modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg',
+ "lockout" = 'modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg',
+ "lower" = 'modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg',
+ "main" = 'modular_nova/modules/alt_vox/sound/vox_mil/main.ogg',
+ "maintenance" = 'modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg',
+ "malfunction" = 'modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg',
+ "materials" = 'modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg',
+ "may" = 'modular_nova/modules/alt_vox/sound/vox_mil/may.ogg',
+ "medical" = 'modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg',
+ "men" = 'modular_nova/modules/alt_vox/sound/vox_mil/men.ogg',
+ "mesa" = 'modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg',
+ "message" = 'modular_nova/modules/alt_vox/sound/vox_mil/message.ogg',
+ "mic_mike" = 'modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg',
+ "mike" = 'modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg',
+ "military" = 'modular_nova/modules/alt_vox/sound/vox_mil/military.ogg',
+ "motorpool" = 'modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg',
+ "move" = 'modular_nova/modules/alt_vox/sound/vox_mil/move.ogg',
+ "must" = 'modular_nova/modules/alt_vox/sound/vox_mil/must.ogg',
+ "nearest" = 'modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg',
+ "nine" = 'modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg',
+ "nineteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg',
+ "ninety" = 'modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg',
+ "no" = 'modular_nova/modules/alt_vox/sound/vox_mil/no.ogg',
+ "noe" = 'modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg',
+ "not" = 'modular_nova/modules/alt_vox/sound/vox_mil/not.ogg',
+ "now" = 'modular_nova/modules/alt_vox/sound/vox_mil/now.ogg',
+ "objective" = 'modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg',
+ "of" = 'modular_nova/modules/alt_vox/sound/vox_mil/of.ogg',
+ "on" = 'modular_nova/modules/alt_vox/sound/vox_mil/on.ogg',
+ "one" = 'modular_nova/modules/alt_vox/sound/vox_mil/one.ogg',
+ "open" = 'modular_nova/modules/alt_vox/sound/vox_mil/open.ogg',
+ "operating" = 'modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg',
+ "option" = 'modular_nova/modules/alt_vox/sound/vox_mil/option.ogg',
+ "out" = 'modular_nova/modules/alt_vox/sound/vox_mil/out.ogg',
+ "override" = 'modular_nova/modules/alt_vox/sound/vox_mil/override.ogg',
+ "percent" = 'modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg',
+ "perimeter" = 'modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg',
+ "permitted" = 'modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg',
+ "perpulsion" = 'modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg',
+ "personnel" = 'modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg',
+ "plant" = 'modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg',
+ "please" = 'modular_nova/modules/alt_vox/sound/vox_mil/please.ogg',
+ "portal" = 'modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg',
+ "power" = 'modular_nova/modules/alt_vox/sound/vox_mil/power.ogg',
+ "primary" = 'modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg',
+ "prosecute" = 'modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg',
+ "questioning" = 'modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg',
+ "radiation" = 'modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg',
+ "radioactive" = 'modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg',
+ "reach" = 'modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg',
+ "reactor" = 'modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg',
+ "relay" = 'modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg',
+ "released" = 'modular_nova/modules/alt_vox/sound/vox_mil/released.ogg',
+ "remaining" = 'modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg',
+ "renegade" = 'modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg',
+ "repair" = 'modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg',
+ "report" = 'modular_nova/modules/alt_vox/sound/vox_mil/report.ogg',
+ "reports" = 'modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg',
+ "required" = 'modular_nova/modules/alt_vox/sound/vox_mil/required.ogg',
+ "research" = 'modular_nova/modules/alt_vox/sound/vox_mil/research.ogg',
+ "resistance" = 'modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg',
+ "rocket" = 'modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg',
+ "safety" = 'modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg',
+ "satellite" = 'modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg',
+ "science" = 'modular_nova/modules/alt_vox/sound/vox_mil/science.ogg',
+ "search" = 'modular_nova/modules/alt_vox/sound/vox_mil/search.ogg',
+ "second" = 'modular_nova/modules/alt_vox/sound/vox_mil/second.ogg',
+ "secondary" = 'modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg',
+ "seconds" = 'modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg',
+ "sector" = 'modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg',
+ "secure" = 'modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg',
+ "seven" = 'modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg',
+ "seventeen" = 'modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg',
+ "seventy" = 'modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg',
+ "severe" = 'modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg',
+ "sheild" = 'modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg',
+ "shoot" = 'modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg',
+ "sierra" = 'modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg',
+ "sight" = 'modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg',
+ "silo" = 'modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg',
+ "six" = 'modular_nova/modules/alt_vox/sound/vox_mil/six.ogg',
+ "sixteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg',
+ "sixty" = 'modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg',
+ "sorry" = 'modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg',
+ "sqaud" = 'modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg',
+ "status" = 'modular_nova/modules/alt_vox/sound/vox_mil/status.ogg',
+ "sterilization" = 'modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg',
+ "storage" = 'modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg',
+ "supercooled" = 'modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg',
+ "surrender" = 'modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg',
+ "system" = 'modular_nova/modules/alt_vox/sound/vox_mil/system.ogg',
+ "systems" = 'modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg',
+ "target" = 'modular_nova/modules/alt_vox/sound/vox_mil/target.ogg',
+ "team" = 'modular_nova/modules/alt_vox/sound/vox_mil/team.ogg',
+ "ten" = 'modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg',
+ "terminated" = 'modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg',
+ "test" = 'modular_nova/modules/alt_vox/sound/vox_mil/test.ogg',
+ "the" = 'modular_nova/modules/alt_vox/sound/vox_mil/the.ogg',
+ "thirtteen" = 'modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg',
+ "thirty" = 'modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg',
+ "this" = 'modular_nova/modules/alt_vox/sound/vox_mil/this.ogg',
+ "three" = 'modular_nova/modules/alt_vox/sound/vox_mil/three.ogg',
+ "time" = 'modular_nova/modules/alt_vox/sound/vox_mil/time.ogg',
+ "to" = 'modular_nova/modules/alt_vox/sound/vox_mil/to.ogg',
+ "topside" = 'modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg',
+ "track" = 'modular_nova/modules/alt_vox/sound/vox_mil/track.ogg',
+ "train" = 'modular_nova/modules/alt_vox/sound/vox_mil/train.ogg',
+ "turret" = 'modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg',
+ "twelve" = 'modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg',
+ "twenty" = 'modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg',
+ "two" = 'modular_nova/modules/alt_vox/sound/vox_mil/two.ogg',
+ "unauthorized" = 'modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg',
+ "under" = 'modular_nova/modules/alt_vox/sound/vox_mil/under.ogg',
+ "units" = 'modular_nova/modules/alt_vox/sound/vox_mil/units.ogg',
+ "until" = 'modular_nova/modules/alt_vox/sound/vox_mil/until.ogg',
+ "up" = 'modular_nova/modules/alt_vox/sound/vox_mil/up.ogg',
+ "uranium" = 'modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg',
+ "use" = 'modular_nova/modules/alt_vox/sound/vox_mil/use.ogg',
+ "violation" = 'modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg',
+ "voltage" = 'modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg',
+ "wanted" = 'modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg',
+ "warning" = 'modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg',
+ "we" = 'modular_nova/modules/alt_vox/sound/vox_mil/we.ogg',
+ "weapon" = 'modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg',
+ "will" = 'modular_nova/modules/alt_vox/sound/vox_mil/will.ogg',
+ "with" = 'modular_nova/modules/alt_vox/sound/vox_mil/with.ogg',
+ "yellow" = 'modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg',
+ "you" = 'modular_nova/modules/alt_vox/sound/vox_mil/you.ogg',
+ "your" = 'modular_nova/modules/alt_vox/sound/vox_mil/your.ogg',
+ "zero" = 'modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg',
+ "zone" = 'modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg'
+))
+
+#endif
diff --git a/modular_skyrat/modules/alt_vox/code/vox_procs.dm b/modular_nova/modules/alt_vox/code/vox_procs.dm
similarity index 100%
rename from modular_skyrat/modules/alt_vox/code/vox_procs.dm
rename to modular_nova/modules/alt_vox/code/vox_procs.dm
diff --git a/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm b/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm
new file mode 100644
index 00000000000..ca1415eda1d
--- /dev/null
+++ b/modular_nova/modules/alt_vox/code/vox_sounds_bms.dm
@@ -0,0 +1,244 @@
+#ifdef AI_VOX
+
+GLOBAL_LIST_INIT(vox_sounds_bms, list(
+ "activated" = 'modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg',
+ "administration" = 'modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg',
+ "administration_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg',
+ "agent" = 'modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg',
+ "alan" = 'modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg',
+ "alexander" = 'modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg',
+ "all" = 'modular_nova/modules/alt_vox/sound/vox_bms/all.ogg',
+ "all_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg',
+ "alpha" = 'modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg',
+ "and" = 'modular_nova/modules/alt_vox/sound/vox_bms/and.ogg',
+ "anomalous" = 'modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg',
+ "anomalous_energy_field" = 'modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg',
+ "any" = 'modular_nova/modules/alt_vox/sound/vox_bms/any.ogg',
+ "area" = 'modular_nova/modules/alt_vox/sound/vox_bms/area.ogg',
+ "at" = 'modular_nova/modules/alt_vox/sound/vox_bms/at.ogg',
+ "attention" = 'modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg',
+ "audit" = 'modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg',
+ "b" = 'modular_nova/modules/alt_vox/sound/vox_bms/b.ogg',
+ "bad_boop_long" = 'modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg',
+ "bad_boop_short" = 'modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg',
+ "ben" = 'modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg',
+ "biohazard" = 'modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg',
+ "biological" = 'modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg',
+ "boop_boop_long" = 'modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg',
+ "boop_boop_short" = 'modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg',
+ "bravo" = 'modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg',
+ "brickman" = 'modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg',
+ "c" = 'modular_nova/modules/alt_vox/sound/vox_bms/c.ogg',
+ "call" = 'modular_nova/modules/alt_vox/sound/vox_bms/call.ogg',
+ "captain" = 'modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg',
+ "center" = 'modular_nova/modules/alt_vox/sound/vox_bms/center.ogg',
+ "central" = 'modular_nova/modules/alt_vox/sound/vox_bms/central.ogg',
+ "check" = 'modular_nova/modules/alt_vox/sound/vox_bms/check.ogg',
+ "checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg',
+ "chenner" = 'modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg',
+ "cisc" = 'modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg',
+ "clayson" = 'modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg',
+ "cleanup" = 'modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg',
+ "coded_message_for" = 'modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg',
+ "command" = 'modular_nova/modules/alt_vox/sound/vox_bms/command.ogg',
+ "command_and_communications" = 'modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg',
+ "command_and_communications_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg',
+ "communications" = 'modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg',
+ "complex" = 'modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg',
+ "complex_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg',
+ "conference_room" = 'modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg',
+ "containment" = 'modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg',
+ "control_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg',
+ "coolant" = 'modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg',
+ "corporal" = 'modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg',
+ "d" = 'modular_nova/modules/alt_vox/sound/vox_bms/d.ogg',
+ "dale" = 'modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg',
+ "dam" = 'modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg',
+ "damage" = 'modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg',
+ "danger" = 'modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg',
+ "defence" = 'modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg',
+ "detected" = 'modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg',
+ "detected_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg',
+ "detonation" = 'modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg',
+ "doctor" = 'modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg',
+ "dominski" = 'modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg',
+ "doot_doot" = 'modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg',
+ "down" = 'modular_nova/modules/alt_vox/sound/vox_bms/down.ogg',
+ "do_not" = 'modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg',
+ "do_not_use" = 'modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg',
+ "eight" = 'modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg',
+ "electric" = 'modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg',
+ "electric_shock" = 'modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg',
+ "elevator" = 'modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg',
+ "emergency" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg',
+ "emergency_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg',
+ "emergency_cleanup_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg',
+ "emergency_shutdown" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg',
+ "emergency_uranium_containment_team_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg',
+ "energy" = 'modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg',
+ "engles" = 'modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg',
+ "evacuate" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg',
+ "evacuate_area_immediately" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg',
+ "evacuate_sector" = 'modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg',
+ "extreme" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg',
+ "extreme_danger" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg',
+ "extreme_force" = 'modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg',
+ "facility" = 'modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg',
+ "failure" = 'modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg',
+ "field" = 'modular_nova/modules/alt_vox/sound/vox_bms/field.ogg',
+ "fifteen" = 'modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg',
+ "five" = 'modular_nova/modules/alt_vox/sound/vox_bms/five.ogg',
+ "fleistad" = 'modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg',
+ "flooding" = 'modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg',
+ "for" = 'modular_nova/modules/alt_vox/sound/vox_bms/for.ogg',
+ "force" = 'modular_nova/modules/alt_vox/sound/vox_bms/force.ogg',
+ "foreman" = 'modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg',
+ "forms" = 'modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg',
+ "four" = 'modular_nova/modules/alt_vox/sound/vox_bms/four.ogg',
+ "freeman" = 'modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg',
+ "hankle" = 'modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg',
+ "hazard" = 'modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg',
+ "hazard_course" = 'modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg',
+ "headon" = 'modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg',
+ "helioski" = 'modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg',
+ "help" = 'modular_nova/modules/alt_vox/sound/vox_bms/help.ogg',
+ "high" = 'modular_nova/modules/alt_vox/sound/vox_bms/high.ogg',
+ "high_energy_detonation" = 'modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg',
+ "high_security" = 'modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg',
+ "horn" = 'modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg',
+ "human" = 'modular_nova/modules/alt_vox/sound/vox_bms/human.ogg',
+ "hydro" = 'modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg',
+ "immediately" = 'modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg',
+ "in" = 'modular_nova/modules/alt_vox/sound/vox_bms/in.ogg',
+ "india" = 'modular_nova/modules/alt_vox/sound/vox_bms/india.ogg',
+ "interchange" = 'modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg',
+ "is" = 'modular_nova/modules/alt_vox/sound/vox_bms/is.ogg',
+ "is_now" = 'modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg',
+ "j" = 'modular_nova/modules/alt_vox/sound/vox_bms/j.ogg',
+ "junic" = 'modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg',
+ "kilo" = 'modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg',
+ "lab" = 'modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg',
+ "lambda" = 'modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg',
+ "laser" = 'modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg',
+ "level" = 'modular_nova/modules/alt_vox/sound/vox_bms/level.ogg',
+ "lieutenant" = 'modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg',
+ "lima" = 'modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg',
+ "line" = 'modular_nova/modules/alt_vox/sound/vox_bms/line.ogg',
+ "login" = 'modular_nova/modules/alt_vox/sound/vox_bms/login.ogg',
+ "lukas" = 'modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg',
+ "maintenance" = 'modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg',
+ "material" = 'modular_nova/modules/alt_vox/sound/vox_bms/material.ogg',
+ "materials" = 'modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg',
+ "materials_storage_facility" = 'modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg',
+ "medical" = 'modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg',
+ "medical_emergency" = 'modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg',
+ "med_down_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg',
+ "member" = 'modular_nova/modules/alt_vox/sound/vox_bms/member.ogg',
+ "men" = 'modular_nova/modules/alt_vox/sound/vox_bms/men.ogg',
+ "military" = 'modular_nova/modules/alt_vox/sound/vox_bms/military.ogg',
+ "minutes" = 'modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg',
+ "monterro" = 'modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg',
+ "morel" = 'modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg',
+ "motorpool" = 'modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg',
+ "murphin" = 'modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg',
+ "network_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg',
+ "nine" = 'modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg',
+ "oatsma" = 'modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg',
+ "observation" = 'modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg',
+ "office" = 'modular_nova/modules/alt_vox/sound/vox_bms/office.ogg',
+ "on" = 'modular_nova/modules/alt_vox/sound/vox_bms/on.ogg',
+ "one" = 'modular_nova/modules/alt_vox/sound/vox_bms/one.ogg',
+ "operational" = 'modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg',
+ "operations" = 'modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg',
+ "optimal" = 'modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg',
+ "outerchange" = 'modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg',
+ "performance" = 'modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg',
+ "personal_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg',
+ "personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg',
+ "personnel_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg',
+ "place" = 'modular_nova/modules/alt_vox/sound/vox_bms/place.ogg',
+ "plant" = 'modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg',
+ "please" = 'modular_nova/modules/alt_vox/sound/vox_bms/please.ogg',
+ "please_2" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg',
+ "please_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg',
+ "please_report_status" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg',
+ "please_report_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg',
+ "proceedural" = 'modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg',
+ "processing" = 'modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg',
+ "processing_plant" = 'modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg',
+ "profile" = 'modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg',
+ "prosecute" = 'modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg',
+ "questioning" = 'modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg',
+ "raddock" = 'modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg',
+ "rail" = 'modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg',
+ "reactor" = 'modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg',
+ "repair" = 'modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg',
+ "reports" = 'modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg',
+ "report_to" = 'modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg',
+ "required" = 'modular_nova/modules/alt_vox/sound/vox_bms/required.ogg',
+ "residue" = 'modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg',
+ "resources" = 'modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg',
+ "review" = 'modular_nova/modules/alt_vox/sound/vox_bms/review.ogg',
+ "robertson" = 'modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg',
+ "rose" = 'modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg',
+ "scheduled" = 'modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg',
+ "scheduled_in" = 'modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg',
+ "science" = 'modular_nova/modules/alt_vox/sound/vox_bms/science.ogg',
+ "science_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg',
+ "sector" = 'modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg',
+ "secure" = 'modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg',
+ "secure_line_call" = 'modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg',
+ "security" = 'modular_nova/modules/alt_vox/sound/vox_bms/security.ogg',
+ "security_officer" = 'modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg',
+ "security_personnel" = 'modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg',
+ "sergeant" = 'modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg',
+ "service" = 'modular_nova/modules/alt_vox/sound/vox_bms/service.ogg',
+ "service_team" = 'modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg',
+ "sesan" = 'modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg',
+ "seven" = 'modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg',
+ "shock" = 'modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg',
+ "shutdown" = 'modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg',
+ "six" = 'modular_nova/modules/alt_vox/sound/vox_bms/six.ogg',
+ "status" = 'modular_nova/modules/alt_vox/sound/vox_bms/status.ogg',
+ "stone" = 'modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg',
+ "storage" = 'modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg',
+ "sublevel" = 'modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg',
+ "superconducting" = 'modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg',
+ "supercooled" = 'modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg',
+ "system" = 'modular_nova/modules/alt_vox/sound/vox_bms/system.ogg',
+ "systems" = 'modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg',
+ "tactical" = 'modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg',
+ "tactical_operations_center" = 'modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg',
+ "tank" = 'modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg',
+ "tart" = 'modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg',
+ "team" = 'modular_nova/modules/alt_vox/sound/vox_bms/team.ogg',
+ "tech" = 'modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg',
+ "tech_sergeant" = 'modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg',
+ "test" = 'modular_nova/modules/alt_vox/sound/vox_bms/test.ogg',
+ "test_lab" = 'modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg',
+ "three" = 'modular_nova/modules/alt_vox/sound/vox_bms/three.ogg',
+ "to" = 'modular_nova/modules/alt_vox/sound/vox_bms/to.ogg',
+ "toonson" = 'modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg',
+ "topside" = 'modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg',
+ "truman" = 'modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg',
+ "turret" = 'modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg',
+ "two" = 'modular_nova/modules/alt_vox/sound/vox_bms/two.ogg',
+ "unauthorised" = 'modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg',
+ "unauthorised_biological_forms" = 'modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg',
+ "unscheduled" = 'modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg',
+ "upgrade" = 'modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg',
+ "uranium" = 'modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg',
+ "use" = 'modular_nova/modules/alt_vox/sound/vox_bms/use.ogg',
+ "ventilation" = 'modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg',
+ "ventilation_system" = 'modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg',
+ "warning" = 'modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg',
+ "waste" = 'modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg',
+ "wilson" = 'modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg',
+ "with" = 'modular_nova/modules/alt_vox/sound/vox_bms/with.ogg',
+ "zero" = 'modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg',
+ "_comma" = 'modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg',
+ "_period" = 'modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg',
+))
+
+#endif
+
diff --git a/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm b/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm
new file mode 100644
index 00000000000..1dbfce275f8
--- /dev/null
+++ b/modular_nova/modules/alt_vox/code/vox_sounds_hl1.dm
@@ -0,0 +1,635 @@
+#ifdef AI_VOX
+
+//for vim
+// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g
+GLOBAL_LIST_INIT(vox_sounds_hl, list("," = 'modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg',
+"." = 'modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg',
+"a" = 'modular_nova/modules/alt_vox/sound/vox_hl/a.ogg',
+"accelerating" = 'modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg',
+"accelerator" = 'modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg',
+"accepted" = 'modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg',
+"access" = 'modular_nova/modules/alt_vox/sound/vox_hl/access.ogg',
+"acknowledge" = 'modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg',
+"acknowledged" = 'modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg',
+"acquired" = 'modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg',
+"acquisition" = 'modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg',
+"across" = 'modular_nova/modules/alt_vox/sound/vox_hl/across.ogg',
+"activate" = 'modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg',
+"activated" = 'modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg',
+"activity" = 'modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg',
+"adios" = 'modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg',
+"administration" = 'modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg',
+"advanced" = 'modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg',
+"after" = 'modular_nova/modules/alt_vox/sound/vox_hl/after.ogg',
+"agent" = 'modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg',
+"alarm" = 'modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg',
+"alert" = 'modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg',
+"alien" = 'modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg',
+"aligned" = 'modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg',
+"all" = 'modular_nova/modules/alt_vox/sound/vox_hl/all.ogg',
+"alpha" = 'modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg',
+"am" = 'modular_nova/modules/alt_vox/sound/vox_hl/am.ogg',
+"amigo" = 'modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg',
+"ammunition" = 'modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg',
+"an" = 'modular_nova/modules/alt_vox/sound/vox_hl/an.ogg',
+"and" = 'modular_nova/modules/alt_vox/sound/vox_hl/and.ogg',
+"announcement" = 'modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg',
+"anomalous" = 'modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg',
+"antenna" = 'modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg',
+"any" = 'modular_nova/modules/alt_vox/sound/vox_hl/any.ogg',
+"apprehend" = 'modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg',
+"approach" = 'modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg',
+"are" = 'modular_nova/modules/alt_vox/sound/vox_hl/are.ogg',
+"area" = 'modular_nova/modules/alt_vox/sound/vox_hl/area.ogg',
+"arm" = 'modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg',
+"armed" = 'modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg',
+"armor" = 'modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg',
+"armory" = 'modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg',
+"arrest" = 'modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg',
+"ass" = 'modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg',
+"at" = 'modular_nova/modules/alt_vox/sound/vox_hl/at.ogg',
+"atomic" = 'modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg',
+"attention" = 'modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg',
+"authorize" = 'modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg',
+"authorized" = 'modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg',
+"automatic" = 'modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg',
+"away" = 'modular_nova/modules/alt_vox/sound/vox_hl/away.ogg',
+"b" = 'modular_nova/modules/alt_vox/sound/vox_hl/b.ogg',
+"back" = 'modular_nova/modules/alt_vox/sound/vox_hl/back.ogg',
+"backman" = 'modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg',
+"bad" = 'modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg',
+"bag" = 'modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg',
+"bailey" = 'modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg',
+"barracks" = 'modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg',
+"base" = 'modular_nova/modules/alt_vox/sound/vox_hl/base.ogg',
+"bay" = 'modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg',
+"be" = 'modular_nova/modules/alt_vox/sound/vox_hl/be.ogg',
+"been" = 'modular_nova/modules/alt_vox/sound/vox_hl/been.ogg',
+"before" = 'modular_nova/modules/alt_vox/sound/vox_hl/before.ogg',
+"beyond" = 'modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg',
+"biohazard" = 'modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg',
+"biological" = 'modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg',
+"birdwell" = 'modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg',
+"bizwarn" = 'modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg',
+"black" = 'modular_nova/modules/alt_vox/sound/vox_hl/black.ogg',
+"blast" = 'modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg',
+"blocked" = 'modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg',
+"bloop" = 'modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg',
+"blue" = 'modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg',
+"bottom" = 'modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg',
+"bravo" = 'modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg',
+"breach" = 'modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg',
+"breached" = 'modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg',
+"break" = 'modular_nova/modules/alt_vox/sound/vox_hl/break.ogg',
+"bridge" = 'modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg',
+"bust" = 'modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg',
+"but" = 'modular_nova/modules/alt_vox/sound/vox_hl/but.ogg',
+"button" = 'modular_nova/modules/alt_vox/sound/vox_hl/button.ogg',
+"buzwarn" = 'modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg',
+"bypass" = 'modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg',
+"c" = 'modular_nova/modules/alt_vox/sound/vox_hl/c.ogg',
+"cable" = 'modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg',
+"call" = 'modular_nova/modules/alt_vox/sound/vox_hl/call.ogg',
+"called" = 'modular_nova/modules/alt_vox/sound/vox_hl/called.ogg',
+"canal" = 'modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg',
+"cap" = 'modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg',
+"captain" = 'modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg',
+"capture" = 'modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg',
+"captured" = 'modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg',
+"ceiling" = 'modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg',
+"celsius" = 'modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg',
+"center" = 'modular_nova/modules/alt_vox/sound/vox_hl/center.ogg',
+"centi" = 'modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg',
+"central" = 'modular_nova/modules/alt_vox/sound/vox_hl/central.ogg',
+"chamber" = 'modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg',
+"charlie" = 'modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg',
+"check" = 'modular_nova/modules/alt_vox/sound/vox_hl/check.ogg',
+"checkpoint" = 'modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg',
+"chemical" = 'modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg',
+"cleanup" = 'modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg',
+"clear" = 'modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg',
+"clearance" = 'modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg',
+"close" = 'modular_nova/modules/alt_vox/sound/vox_hl/close.ogg',
+"clown" = 'modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg',
+"code" = 'modular_nova/modules/alt_vox/sound/vox_hl/code.ogg',
+"coded" = 'modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg',
+"collider" = 'modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg',
+"command" = 'modular_nova/modules/alt_vox/sound/vox_hl/command.ogg',
+"communication" = 'modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg',
+"complex" = 'modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg',
+"computer" = 'modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg',
+"condition" = 'modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg',
+"containment" = 'modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg',
+"contamination" = 'modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg',
+"control" = 'modular_nova/modules/alt_vox/sound/vox_hl/control.ogg',
+"coolant" = 'modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg',
+"coomer" = 'modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg',
+"core" = 'modular_nova/modules/alt_vox/sound/vox_hl/core.ogg',
+"correct" = 'modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg',
+"corridor" = 'modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg',
+"crew" = 'modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg',
+"cross" = 'modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg',
+"cryogenic" = 'modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg',
+"d" = 'modular_nova/modules/alt_vox/sound/vox_hl/d.ogg',
+"dadeda" = 'modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg',
+"damage" = 'modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg',
+"damaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg',
+"danger" = 'modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg',
+"day" = 'modular_nova/modules/alt_vox/sound/vox_hl/day.ogg',
+"deactivated" = 'modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg',
+"decompression" = 'modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg',
+"decontamination" = 'modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg',
+"deeoo" = 'modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg',
+"defense" = 'modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg',
+"degrees" = 'modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg',
+"delta" = 'modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg',
+"denied" = 'modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg',
+"deploy" = 'modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg',
+"deployed" = 'modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg',
+"destroy" = 'modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg',
+"destroyed" = 'modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg',
+"detain" = 'modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg',
+"detected" = 'modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg',
+"detonation" = 'modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg',
+"device" = 'modular_nova/modules/alt_vox/sound/vox_hl/device.ogg',
+"did" = 'modular_nova/modules/alt_vox/sound/vox_hl/did.ogg',
+"die" = 'modular_nova/modules/alt_vox/sound/vox_hl/die.ogg',
+"dimensional" = 'modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg',
+"dirt" = 'modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg',
+"disengaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg',
+"dish" = 'modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg',
+"disposal" = 'modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg',
+"distance" = 'modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg',
+"distortion" = 'modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg',
+"do" = 'modular_nova/modules/alt_vox/sound/vox_hl/do.ogg',
+"doctor" = 'modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg',
+"doop" = 'modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg',
+"door" = 'modular_nova/modules/alt_vox/sound/vox_hl/door.ogg',
+"down" = 'modular_nova/modules/alt_vox/sound/vox_hl/down.ogg',
+"dual" = 'modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg',
+"duct" = 'modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg',
+"e" = 'modular_nova/modules/alt_vox/sound/vox_hl/e.ogg',
+"east" = 'modular_nova/modules/alt_vox/sound/vox_hl/east.ogg',
+"echo" = 'modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg',
+"ed" = 'modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg',
+"effect" = 'modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg',
+"egress" = 'modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg',
+"eight" = 'modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg',
+"eighteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg',
+"eighty" = 'modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg',
+"electric" = 'modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg',
+"electromagnetic" = 'modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg',
+"elevator" = 'modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg',
+"eleven" = 'modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg',
+"eliminate" = 'modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg',
+"emergency" = 'modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg',
+"enemy" = 'modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg',
+"energy" = 'modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg',
+"engage" = 'modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg',
+"engaged" = 'modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg',
+"engine" = 'modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg',
+"enter" = 'modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg',
+"entry" = 'modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg',
+"environment" = 'modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg',
+"error" = 'modular_nova/modules/alt_vox/sound/vox_hl/error.ogg',
+"escape" = 'modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg',
+"evacuate" = 'modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg',
+"exchange" = 'modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg',
+"exit" = 'modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg',
+"expect" = 'modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg',
+"experiment" = 'modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg',
+"experimental" = 'modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg',
+"explode" = 'modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg',
+"explosion" = 'modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg',
+"exposure" = 'modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg',
+"exterminate" = 'modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg',
+"extinguish" = 'modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg',
+"extinguisher" = 'modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg',
+"extreme" = 'modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg',
+"f" = 'modular_nova/modules/alt_vox/sound/vox_hl/f.ogg',
+"face" = 'modular_nova/modules/alt_vox/sound/vox_hl/face.ogg',
+"facility" = 'modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg',
+"fahrenheit" = 'modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg',
+"failed" = 'modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg',
+"failure" = 'modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg',
+"farthest" = 'modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg',
+"fast" = 'modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg',
+"feet" = 'modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg',
+"field" = 'modular_nova/modules/alt_vox/sound/vox_hl/field.ogg',
+"fifteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg',
+"fifth" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg',
+"fifty" = 'modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg',
+"final" = 'modular_nova/modules/alt_vox/sound/vox_hl/final.ogg',
+"fine" = 'modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg',
+"fire" = 'modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg',
+"first" = 'modular_nova/modules/alt_vox/sound/vox_hl/first.ogg',
+"five" = 'modular_nova/modules/alt_vox/sound/vox_hl/five.ogg',
+"flag" = 'modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg',
+"flooding" = 'modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg',
+"floor" = 'modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg',
+"fool" = 'modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg',
+"for" = 'modular_nova/modules/alt_vox/sound/vox_hl/for.ogg',
+"forbidden" = 'modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg',
+"force" = 'modular_nova/modules/alt_vox/sound/vox_hl/force.ogg',
+"forms" = 'modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg',
+"found" = 'modular_nova/modules/alt_vox/sound/vox_hl/found.ogg',
+"four" = 'modular_nova/modules/alt_vox/sound/vox_hl/four.ogg',
+"fourteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg',
+"fourth" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg',
+"fourty" = 'modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg',
+"foxtrot" = 'modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg',
+"freeman" = 'modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg',
+"freezer" = 'modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg',
+"from" = 'modular_nova/modules/alt_vox/sound/vox_hl/from.ogg',
+"front" = 'modular_nova/modules/alt_vox/sound/vox_hl/front.ogg',
+"fuel" = 'modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg',
+"g" = 'modular_nova/modules/alt_vox/sound/vox_hl/g.ogg',
+"gay" = 'modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg',
+"get" = 'modular_nova/modules/alt_vox/sound/vox_hl/get.ogg',
+"go" = 'modular_nova/modules/alt_vox/sound/vox_hl/go.ogg',
+"going" = 'modular_nova/modules/alt_vox/sound/vox_hl/going.ogg',
+"good" = 'modular_nova/modules/alt_vox/sound/vox_hl/good.ogg',
+"goodbye" = 'modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg',
+"gordon" = 'modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg',
+"got" = 'modular_nova/modules/alt_vox/sound/vox_hl/got.ogg',
+"government" = 'modular_nova/modules/alt_vox/sound/vox_hl/government.ogg',
+"granted" = 'modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg',
+"great" = 'modular_nova/modules/alt_vox/sound/vox_hl/great.ogg',
+"green" = 'modular_nova/modules/alt_vox/sound/vox_hl/green.ogg',
+"grenade" = 'modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg',
+"guard" = 'modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg',
+"gulf" = 'modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg',
+"gun" = 'modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg',
+"guthrie" = 'modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg',
+"handling" = 'modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg',
+"hangar" = 'modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg',
+"has" = 'modular_nova/modules/alt_vox/sound/vox_hl/has.ogg',
+"have" = 'modular_nova/modules/alt_vox/sound/vox_hl/have.ogg',
+"hazard" = 'modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg',
+"head" = 'modular_nova/modules/alt_vox/sound/vox_hl/head.ogg',
+"health" = 'modular_nova/modules/alt_vox/sound/vox_hl/health.ogg',
+"heat" = 'modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg',
+"helicopter" = 'modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg',
+"helium" = 'modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg',
+"hello" = 'modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg',
+"help" = 'modular_nova/modules/alt_vox/sound/vox_hl/help.ogg',
+"here" = 'modular_nova/modules/alt_vox/sound/vox_hl/here.ogg',
+"hide" = 'modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg',
+"high" = 'modular_nova/modules/alt_vox/sound/vox_hl/high.ogg',
+"highest" = 'modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg',
+"hit" = 'modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg',
+"holds" = 'modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg',
+"hole" = 'modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg',
+"hostile" = 'modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg',
+"hot" = 'modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg',
+"hotel" = 'modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg',
+"hour" = 'modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg',
+"hours" = 'modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg',
+"hundred" = 'modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg',
+"hydro" = 'modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg',
+"i" = 'modular_nova/modules/alt_vox/sound/vox_hl/i.ogg',
+"idiot" = 'modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg',
+"illegal" = 'modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg',
+"immediate" = 'modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg',
+"immediately" = 'modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg',
+"in" = 'modular_nova/modules/alt_vox/sound/vox_hl/in.ogg',
+"inches" = 'modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg',
+"india" = 'modular_nova/modules/alt_vox/sound/vox_hl/india.ogg',
+"ing" = 'modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg',
+"inoperative" = 'modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg',
+"inside" = 'modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg',
+"inspection" = 'modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg',
+"inspector" = 'modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg',
+"interchange" = 'modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg',
+"intruder" = 'modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg',
+"invallid" = 'modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg',
+"invasion" = 'modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg',
+"is" = 'modular_nova/modules/alt_vox/sound/vox_hl/is.ogg',
+"it" = 'modular_nova/modules/alt_vox/sound/vox_hl/it.ogg',
+"johnson" = 'modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg',
+"juliet" = 'modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg',
+"key" = 'modular_nova/modules/alt_vox/sound/vox_hl/key.ogg',
+"kill" = 'modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg',
+"kilo" = 'modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg',
+"kit" = 'modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg',
+"lab" = 'modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg',
+"lambda" = 'modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg',
+"laser" = 'modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg',
+"last" = 'modular_nova/modules/alt_vox/sound/vox_hl/last.ogg',
+"launch" = 'modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg',
+"leak" = 'modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg',
+"leave" = 'modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg',
+"left" = 'modular_nova/modules/alt_vox/sound/vox_hl/left.ogg',
+"legal" = 'modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg',
+"level" = 'modular_nova/modules/alt_vox/sound/vox_hl/level.ogg',
+"lever" = 'modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg',
+"lie" = 'modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg',
+"lieutenant" = 'modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg',
+"life" = 'modular_nova/modules/alt_vox/sound/vox_hl/life.ogg',
+"light" = 'modular_nova/modules/alt_vox/sound/vox_hl/light.ogg',
+"lima" = 'modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg',
+"liquid" = 'modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg',
+"loading" = 'modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg',
+"locate" = 'modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg',
+"located" = 'modular_nova/modules/alt_vox/sound/vox_hl/located.ogg',
+"location" = 'modular_nova/modules/alt_vox/sound/vox_hl/location.ogg',
+"lock" = 'modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg',
+"locked" = 'modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg',
+"locker" = 'modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg',
+"lockout" = 'modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg',
+"lower" = 'modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg',
+"lowest" = 'modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg',
+"magnetic" = 'modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg',
+"main" = 'modular_nova/modules/alt_vox/sound/vox_hl/main.ogg',
+"maintenance" = 'modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg',
+"malfunction" = 'modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg',
+"man" = 'modular_nova/modules/alt_vox/sound/vox_hl/man.ogg',
+"mass" = 'modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg',
+"materials" = 'modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg',
+"maximum" = 'modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg',
+"may" = 'modular_nova/modules/alt_vox/sound/vox_hl/may.ogg',
+"med" = 'modular_nova/modules/alt_vox/sound/vox_hl/med.ogg',
+"medical" = 'modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg',
+"men" = 'modular_nova/modules/alt_vox/sound/vox_hl/men.ogg',
+"mercy" = 'modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg',
+"mesa" = 'modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg',
+"message" = 'modular_nova/modules/alt_vox/sound/vox_hl/message.ogg',
+"meter" = 'modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg',
+"micro" = 'modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg',
+"middle" = 'modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg',
+"mike" = 'modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg',
+"miles" = 'modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg',
+"military" = 'modular_nova/modules/alt_vox/sound/vox_hl/military.ogg',
+"milli" = 'modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg',
+"million" = 'modular_nova/modules/alt_vox/sound/vox_hl/million.ogg',
+"minefield" = 'modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg',
+"minimum" = 'modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg',
+"minutes" = 'modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg',
+"mister" = 'modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg',
+"mode" = 'modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg',
+"motor" = 'modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg',
+"motorpool" = 'modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg',
+"move" = 'modular_nova/modules/alt_vox/sound/vox_hl/move.ogg',
+"must" = 'modular_nova/modules/alt_vox/sound/vox_hl/must.ogg',
+"nearest" = 'modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg',
+"nice" = 'modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg',
+"nine" = 'modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg',
+"nineteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg',
+"ninety" = 'modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg',
+"no" = 'modular_nova/modules/alt_vox/sound/vox_hl/no.ogg',
+"nominal" = 'modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg',
+"north" = 'modular_nova/modules/alt_vox/sound/vox_hl/north.ogg',
+"not" = 'modular_nova/modules/alt_vox/sound/vox_hl/not.ogg',
+"november" = 'modular_nova/modules/alt_vox/sound/vox_hl/november.ogg',
+"now" = 'modular_nova/modules/alt_vox/sound/vox_hl/now.ogg',
+"number" = 'modular_nova/modules/alt_vox/sound/vox_hl/number.ogg',
+"objective" = 'modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg',
+"observation" = 'modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg',
+"of" = 'modular_nova/modules/alt_vox/sound/vox_hl/of.ogg',
+"officer" = 'modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg',
+"ok" = 'modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg',
+"on" = 'modular_nova/modules/alt_vox/sound/vox_hl/on.ogg',
+"one" = 'modular_nova/modules/alt_vox/sound/vox_hl/one.ogg',
+"open" = 'modular_nova/modules/alt_vox/sound/vox_hl/open.ogg',
+"operating" = 'modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg',
+"operations" = 'modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg',
+"operative" = 'modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg',
+"option" = 'modular_nova/modules/alt_vox/sound/vox_hl/option.ogg',
+"order" = 'modular_nova/modules/alt_vox/sound/vox_hl/order.ogg',
+"organic" = 'modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg',
+"oscar" = 'modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg',
+"out" = 'modular_nova/modules/alt_vox/sound/vox_hl/out.ogg',
+"outside" = 'modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg',
+"over" = 'modular_nova/modules/alt_vox/sound/vox_hl/over.ogg',
+"overload" = 'modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg',
+"override" = 'modular_nova/modules/alt_vox/sound/vox_hl/override.ogg',
+"pacify" = 'modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg',
+"pain" = 'modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg',
+"pal" = 'modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg',
+"panel" = 'modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg',
+"percent" = 'modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg',
+"perimeter" = 'modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg',
+"permitted" = 'modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg',
+"personnel" = 'modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg',
+"pipe" = 'modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg',
+"plant" = 'modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg',
+"platform" = 'modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg',
+"please" = 'modular_nova/modules/alt_vox/sound/vox_hl/please.ogg',
+"point" = 'modular_nova/modules/alt_vox/sound/vox_hl/point.ogg',
+"portal" = 'modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg',
+"power" = 'modular_nova/modules/alt_vox/sound/vox_hl/power.ogg',
+"presence" = 'modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg',
+"press" = 'modular_nova/modules/alt_vox/sound/vox_hl/press.ogg',
+"primary" = 'modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg',
+"proceed" = 'modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg',
+"processing" = 'modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg',
+"progress" = 'modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg',
+"proper" = 'modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg',
+"propulsion" = 'modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg',
+"prosecute" = 'modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg',
+"protective" = 'modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg',
+"push" = 'modular_nova/modules/alt_vox/sound/vox_hl/push.ogg',
+"quantum" = 'modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg',
+"quebec" = 'modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg',
+"question" = 'modular_nova/modules/alt_vox/sound/vox_hl/question.ogg',
+"questioning" = 'modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg',
+"quick" = 'modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg',
+"quit" = 'modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg',
+"radiation" = 'modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg',
+"radioactive" = 'modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg',
+"rads" = 'modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg',
+"rapid" = 'modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg',
+"reach" = 'modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg',
+"reached" = 'modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg',
+"reactor" = 'modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg',
+"red" = 'modular_nova/modules/alt_vox/sound/vox_hl/red.ogg',
+"relay" = 'modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg',
+"released" = 'modular_nova/modules/alt_vox/sound/vox_hl/released.ogg',
+"remaining" = 'modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg',
+"renegade" = 'modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg',
+"repair" = 'modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg',
+"report" = 'modular_nova/modules/alt_vox/sound/vox_hl/report.ogg',
+"reports" = 'modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg',
+"required" = 'modular_nova/modules/alt_vox/sound/vox_hl/required.ogg',
+"research" = 'modular_nova/modules/alt_vox/sound/vox_hl/research.ogg',
+"reset" = 'modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg',
+"resevoir" = 'modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg',
+"resistance" = 'modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg',
+"returned" = 'modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg',
+"right" = 'modular_nova/modules/alt_vox/sound/vox_hl/right.ogg',
+"rocket" = 'modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg',
+"roger" = 'modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg',
+"romeo" = 'modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg',
+"room" = 'modular_nova/modules/alt_vox/sound/vox_hl/room.ogg',
+"round" = 'modular_nova/modules/alt_vox/sound/vox_hl/round.ogg',
+"run" = 'modular_nova/modules/alt_vox/sound/vox_hl/run.ogg',
+"safe" = 'modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg',
+"safety" = 'modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg',
+"sargeant" = 'modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg',
+"satellite" = 'modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg',
+"save" = 'modular_nova/modules/alt_vox/sound/vox_hl/save.ogg',
+"science" = 'modular_nova/modules/alt_vox/sound/vox_hl/science.ogg',
+"scores" = 'modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg',
+"scream" = 'modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg',
+"screen" = 'modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg',
+"search" = 'modular_nova/modules/alt_vox/sound/vox_hl/search.ogg',
+"second" = 'modular_nova/modules/alt_vox/sound/vox_hl/second.ogg',
+"secondary" = 'modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg',
+"seconds" = 'modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg',
+"sector" = 'modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg',
+"secure" = 'modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg',
+"secured" = 'modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg',
+"security" = 'modular_nova/modules/alt_vox/sound/vox_hl/security.ogg',
+"select" = 'modular_nova/modules/alt_vox/sound/vox_hl/select.ogg',
+"selected" = 'modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg',
+"service" = 'modular_nova/modules/alt_vox/sound/vox_hl/service.ogg',
+"seven" = 'modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg',
+"seventeen" = 'modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg',
+"seventy" = 'modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg',
+"severe" = 'modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg',
+"sewage" = 'modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg',
+"sewer" = 'modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg',
+"shield" = 'modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg',
+"shipment" = 'modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg',
+"shock" = 'modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg',
+"shoot" = 'modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg',
+"shower" = 'modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg',
+"shut" = 'modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg',
+"side" = 'modular_nova/modules/alt_vox/sound/vox_hl/side.ogg',
+"sierra" = 'modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg',
+"sight" = 'modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg',
+"silo" = 'modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg',
+"six" = 'modular_nova/modules/alt_vox/sound/vox_hl/six.ogg',
+"sixteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg',
+"sixty" = 'modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg',
+"slime" = 'modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg',
+"slow" = 'modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg',
+"soldier" = 'modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg',
+"some" = 'modular_nova/modules/alt_vox/sound/vox_hl/some.ogg',
+"someone" = 'modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg',
+"something" = 'modular_nova/modules/alt_vox/sound/vox_hl/something.ogg',
+"son" = 'modular_nova/modules/alt_vox/sound/vox_hl/son.ogg',
+"sorry" = 'modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg',
+"south" = 'modular_nova/modules/alt_vox/sound/vox_hl/south.ogg',
+"squad" = 'modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg',
+"square" = 'modular_nova/modules/alt_vox/sound/vox_hl/square.ogg',
+"stairway" = 'modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg',
+"status" = 'modular_nova/modules/alt_vox/sound/vox_hl/status.ogg',
+"sterile" = 'modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg',
+"sterilization" = 'modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg',
+"stolen" = 'modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg',
+"storage" = 'modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg',
+"sub" = 'modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg',
+"subsurface" = 'modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg',
+"sudden" = 'modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg',
+"suit" = 'modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg',
+"superconducting" = 'modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg',
+"supercooled" = 'modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg',
+"supply" = 'modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg',
+"surface" = 'modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg',
+"surrender" = 'modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg',
+"surround" = 'modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg',
+"surrounded" = 'modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg',
+"switch" = 'modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg',
+"system" = 'modular_nova/modules/alt_vox/sound/vox_hl/system.ogg',
+"systems" = 'modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg',
+"tactical" = 'modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg',
+"take" = 'modular_nova/modules/alt_vox/sound/vox_hl/take.ogg',
+"talk" = 'modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg',
+"tango" = 'modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg',
+"tank" = 'modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg',
+"target" = 'modular_nova/modules/alt_vox/sound/vox_hl/target.ogg',
+"team" = 'modular_nova/modules/alt_vox/sound/vox_hl/team.ogg',
+"temperature" = 'modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg',
+"temporal" = 'modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg',
+"ten" = 'modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg',
+"terminal" = 'modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg',
+"terminated" = 'modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg',
+"termination" = 'modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg',
+"test" = 'modular_nova/modules/alt_vox/sound/vox_hl/test.ogg',
+"that" = 'modular_nova/modules/alt_vox/sound/vox_hl/that.ogg',
+"the" = 'modular_nova/modules/alt_vox/sound/vox_hl/the.ogg',
+"then" = 'modular_nova/modules/alt_vox/sound/vox_hl/then.ogg',
+"there" = 'modular_nova/modules/alt_vox/sound/vox_hl/there.ogg',
+"third" = 'modular_nova/modules/alt_vox/sound/vox_hl/third.ogg',
+"thirteen" = 'modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg',
+"thirty" = 'modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg',
+"this" = 'modular_nova/modules/alt_vox/sound/vox_hl/this.ogg',
+"those" = 'modular_nova/modules/alt_vox/sound/vox_hl/those.ogg',
+"thousand" = 'modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg',
+"threat" = 'modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg',
+"three" = 'modular_nova/modules/alt_vox/sound/vox_hl/three.ogg',
+"through" = 'modular_nova/modules/alt_vox/sound/vox_hl/through.ogg',
+"time" = 'modular_nova/modules/alt_vox/sound/vox_hl/time.ogg',
+"to" = 'modular_nova/modules/alt_vox/sound/vox_hl/to.ogg',
+"top" = 'modular_nova/modules/alt_vox/sound/vox_hl/top.ogg',
+"topside" = 'modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg',
+"touch" = 'modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg',
+"towards" = 'modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg',
+"track" = 'modular_nova/modules/alt_vox/sound/vox_hl/track.ogg',
+"train" = 'modular_nova/modules/alt_vox/sound/vox_hl/train.ogg',
+"transportation" = 'modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg',
+"truck" = 'modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg',
+"tunnel" = 'modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg',
+"turn" = 'modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg',
+"turret" = 'modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg',
+"twelve" = 'modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg',
+"twenty" = 'modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg',
+"two" = 'modular_nova/modules/alt_vox/sound/vox_hl/two.ogg',
+"unauthorized" = 'modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg',
+"under" = 'modular_nova/modules/alt_vox/sound/vox_hl/under.ogg',
+"uniform" = 'modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg',
+"unlocked" = 'modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg',
+"until" = 'modular_nova/modules/alt_vox/sound/vox_hl/until.ogg',
+"up" = 'modular_nova/modules/alt_vox/sound/vox_hl/up.ogg',
+"upper" = 'modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg',
+"uranium" = 'modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg',
+"us" = 'modular_nova/modules/alt_vox/sound/vox_hl/us.ogg',
+"usa" = 'modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg',
+"use" = 'modular_nova/modules/alt_vox/sound/vox_hl/use.ogg',
+"used" = 'modular_nova/modules/alt_vox/sound/vox_hl/used.ogg',
+"user" = 'modular_nova/modules/alt_vox/sound/vox_hl/user.ogg',
+"vacate" = 'modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg',
+"valid" = 'modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg',
+"vapor" = 'modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg',
+"vent" = 'modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg',
+"ventillation" = 'modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg',
+"victor" = 'modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg',
+"violated" = 'modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg',
+"violation" = 'modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg',
+"voltage" = 'modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg',
+"vox_login" = 'modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg',
+"walk" = 'modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg',
+"wall" = 'modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg',
+"want" = 'modular_nova/modules/alt_vox/sound/vox_hl/want.ogg',
+"wanted" = 'modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg',
+"warm" = 'modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg',
+"warn" = 'modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg',
+"warning" = 'modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg',
+"waste" = 'modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg',
+"water" = 'modular_nova/modules/alt_vox/sound/vox_hl/water.ogg',
+"we" = 'modular_nova/modules/alt_vox/sound/vox_hl/we.ogg',
+"weapon" = 'modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg',
+"west" = 'modular_nova/modules/alt_vox/sound/vox_hl/west.ogg',
+"whiskey" = 'modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg',
+"white" = 'modular_nova/modules/alt_vox/sound/vox_hl/white.ogg',
+"wilco" = 'modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg',
+"will" = 'modular_nova/modules/alt_vox/sound/vox_hl/will.ogg',
+"with" = 'modular_nova/modules/alt_vox/sound/vox_hl/with.ogg',
+"without" = 'modular_nova/modules/alt_vox/sound/vox_hl/without.ogg',
+"woop" = 'modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg',
+"xeno" = 'modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg',
+"yankee" = 'modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg',
+"yards" = 'modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg',
+"year" = 'modular_nova/modules/alt_vox/sound/vox_hl/year.ogg',
+"yellow" = 'modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg',
+"yes" = 'modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg',
+"you" = 'modular_nova/modules/alt_vox/sound/vox_hl/you.ogg',
+"your" = 'modular_nova/modules/alt_vox/sound/vox_hl/your.ogg',
+"yourself" = 'modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg',
+"zero" = 'modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg',
+"zone" = 'modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg',
+"zulu" = 'modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg',))
+
+#endif
+
diff --git a/modular_skyrat/modules/alt_vox/credits.md b/modular_nova/modules/alt_vox/credits.md
similarity index 100%
rename from modular_skyrat/modules/alt_vox/credits.md
rename to modular_nova/modules/alt_vox/credits.md
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/_comma.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/_period.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/activated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/administration.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/administration_center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/agent.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/alan.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/alexander.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/all.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/all.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/all_personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/alpha.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/and.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/and.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/anomalous.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/any.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/any.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/area.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/area.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/at.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/at.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/attention.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/audit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/b.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/b.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/ben.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/biohazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/biological.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/bravo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/brickman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/c.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/c.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/call.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/call.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/captain.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/central.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/central.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/check.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/check.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/checkpoint.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/chenner.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/cisc.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/clayson.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/cleanup.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/coded_message_for.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/command.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/communications.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/complex.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/complex_2.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/conference_room.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/containment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/control_team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/coolant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/corporal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/d.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/d.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/dale.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/dam.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/damage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/danger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/defence.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/detected.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/detected_in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/detonation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/do_not.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/do_not_use.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/doctor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/dominski.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/doot_doot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/down.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/down.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/eight.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/electric.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/electric_shock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/elevator.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_2.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/energy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/engles.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme_danger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/extreme_force.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/facility.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/failure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/field.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/field.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/fifteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/five.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/five.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/fleistad.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/flooding.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/for.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/for.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/force.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/force.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/foreman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/forms.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/four.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/four.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/freeman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/hankle.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/hazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/hazard_course.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/headon.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/helioski.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/help.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/help.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/high.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/high_security.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/horn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/human.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/human.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/hydro.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/immediately.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/india.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/india.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/interchange.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/is.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/is.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/is_now.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/j.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/j.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/junic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/kilo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/lab.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/lambda.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/laser.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/level.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/level.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/lieutenant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/lima.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/line.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/line.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/login.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/login.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/lukas.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/maintenance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/material.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/material.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/materials.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/med_down_in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/medical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/medical_emergency.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/member.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/member.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/men.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/men.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/military.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/military.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/minutes.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/monterro.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/morel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/motorpool.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/murphin.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/network_team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/nine.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/oatsma.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/observation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/office.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/office.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/on.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/on.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/one.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/one.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/operational.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/operations.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/optimal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/outerchange.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/performance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/personal_call.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/personnel_2.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/place.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/place.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/plant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/please.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/please_2.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/please_call.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/please_report_status.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/please_report_to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/proceedural.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/processing.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/processing_plant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/profile.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/prosecute.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/questioning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/raddock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/rail.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/reactor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/repair.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/report_to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/reports.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/required.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/required.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/residue.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/resources.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/review.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/review.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/robertson.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/rose.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/scheduled.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/scheduled_in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/science.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/science.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/science_personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/sector.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/secure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/secure_line_call.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/security.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/security_officer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/security_personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/sergeant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/service.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/service.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/service_team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/sesan.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/seven.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/shock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/shutdown.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/six.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/six.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/status.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/status.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/stone.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/storage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/sublevel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/superconducting.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/supercooled.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/system.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/system.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/systems.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tactical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tank.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tart.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tech.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/test.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/test.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/test_lab.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/three.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/three.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/toonson.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/topside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/truman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/turret.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/two.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/two.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/unauthorised.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/unscheduled.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/upgrade.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/uranium.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/use.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/use.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/ventilation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/ventilation_system.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/warning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/waste.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/wilson.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/with.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/with.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg
rename to modular_nova/modules/alt_vox/sound/vox_bms/zero.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/_comma.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/_period.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/a.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/a.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/accelerating.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/accelerator.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/accepted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/access.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/access.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/acknowledge.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/acknowledged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/acquired.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/acquisition.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/across.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/across.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/activate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/activated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/activity.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/adios.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/administration.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/advanced.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/after.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/after.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/agent.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/alarm.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/alert.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/alien.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/aligned.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/all.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/all.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/alpha.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/am.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/am.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/amigo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ammunition.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/an.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/an.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/and.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/and.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/announcement.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/anomalous.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/antenna.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/any.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/any.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/apprehend.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/approach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/are.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/are.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/area.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/area.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/arm.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/armed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/armor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/armory.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/arrest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ass.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/at.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/at.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/atomic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/attention.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/authorize.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/authorized.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/automatic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/away.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/away.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/b.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/b.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/back.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/back.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/backman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bad.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bag.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bailey.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/barracks.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/base.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/base.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bay.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/be.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/be.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/been.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/been.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/before.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/before.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/beyond.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/biohazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/biological.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/birdwell.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bizwarn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/black.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/black.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/blast.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/blocked.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bloop.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/blue.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bottom.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bravo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/breach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/breached.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/break.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/break.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bridge.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bust.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/but.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/but.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/button.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/button.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/buzwarn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/bypass.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/c.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/c.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/cable.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/call.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/call.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/called.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/called.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/canal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/cap.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/captain.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/capture.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/captured.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ceiling.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/celsius.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/centi.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/central.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/central.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/chamber.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/charlie.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/check.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/check.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/checkpoint.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/chemical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/cleanup.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/clear.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/clearance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/close.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/close.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/clown.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/code.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/code.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/coded.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/collider.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/comma.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/comma.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/comma.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/comma.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/command.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/command.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/communication.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/complex.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/computer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/condition.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/containment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/contamination.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/control.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/control.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/coolant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/coomer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/core.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/core.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/correct.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/corridor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/crew.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/cross.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/cryogenic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/d.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/d.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/dadeda.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/damage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/damaged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/danger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/day.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/day.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/deactivated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/decompression.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/decontamination.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/deeoo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/defense.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/degrees.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/delta.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/denied.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/deploy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/deployed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/destroy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/destroyed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/detain.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/detected.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/detonation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/device.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/device.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/did.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/did.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/die.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/die.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/dimensional.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/dirt.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/disengaged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/dish.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/disposal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/distance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/distortion.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/do.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/do.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/doctor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/doop.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/door.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/door.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/down.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/down.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/dual.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/duct.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/e.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/e.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/east.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/east.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/echo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/effect.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/egress.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/eight.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/eighteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/eighty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/electric.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/electromagnetic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/elevator.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/eleven.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/eliminate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/emergency.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/enemy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/energy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/engage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/engaged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/engine.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/enter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/entry.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/environment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/error.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/error.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/escape.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/evacuate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/exchange.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/exit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/expect.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/experiment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/experimental.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/explode.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/explosion.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/exposure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/exterminate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/extinguish.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/extinguisher.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/extreme.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/f.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/f.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/face.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/face.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/facility.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fahrenheit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/failed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/failure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/farthest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fast.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/feet.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/field.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/field.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fifteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fifth.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fifty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/final.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/final.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fine.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fire.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/first.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/first.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/five.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/five.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/flag.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/flooding.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/floor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fool.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/for.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/for.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/forbidden.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/force.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/force.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/forms.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/found.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/found.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/four.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/four.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fourteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fourth.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fourty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/foxtrot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/freeman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/freezer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/from.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/from.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/front.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/front.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/fuel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/g.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/g.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/gay.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/get.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/get.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/go.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/go.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/going.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/going.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/good.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/good.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/goodbye.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/gordon.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/got.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/got.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/government.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/government.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/granted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/great.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/great.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/green.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/green.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/grenade.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/guard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/gulf.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/gun.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/guthrie.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/handling.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hangar.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/has.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/has.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/have.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/have.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/head.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/head.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/health.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/health.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/heat.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/helicopter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/helium.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hello.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/help.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/help.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/here.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/here.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hide.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/high.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/high.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/highest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/holds.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hole.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hostile.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hotel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hour.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hours.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hundred.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/hydro.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/i.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/i.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/idiot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/illegal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/immediate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/immediately.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/inches.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/india.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/india.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ing.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/inoperative.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/inside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/inspection.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/inspector.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/interchange.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/intruder.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/invallid.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/invasion.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/is.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/is.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/it.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/it.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/johnson.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/juliet.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/key.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/key.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/kill.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/kilo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/kit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lab.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lambda.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/laser.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/last.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/last.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/launch.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/leak.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/leave.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/left.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/left.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/legal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/level.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/level.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lever.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lie.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lieutenant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/life.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/life.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/light.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/light.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lima.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/liquid.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/loading.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/locate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/located.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/located.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/location.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/location.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/locked.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/locker.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lockout.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lower.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/lowest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/magnetic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/main.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/main.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/maintenance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/malfunction.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/man.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/man.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mass.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/materials.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/maximum.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/may.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/may.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/med.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/med.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/medical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/men.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/men.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mercy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mesa.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/message.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/message.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/meter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/micro.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/middle.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mike.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/miles.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/military.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/military.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/milli.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/million.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/million.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/minefield.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/minimum.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/minutes.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mister.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/mode.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/motor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/motorpool.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/move.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/move.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/must.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/must.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/nearest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/nice.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/nine.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/nineteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ninety.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/no.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/no.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/nominal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/north.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/north.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/not.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/not.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/november.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/november.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/now.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/now.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/number.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/number.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/objective.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/observation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/of.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/of.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/officer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ok.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/on.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/on.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/one.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/one.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/open.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/open.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/operating.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/operations.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/operative.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/option.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/option.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/order.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/order.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/organic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/oscar.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/out.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/out.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/outside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/over.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/over.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/overload.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/override.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/override.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/pacify.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/pain.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/pal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/panel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/percent.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/perimeter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/period.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/period.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/period.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/period.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/permitted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/pipe.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/plant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/platform.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/please.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/please.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/point.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/point.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/portal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/power.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/power.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/presence.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/press.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/press.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/primary.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/proceed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/processing.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/progress.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/proper.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/propulsion.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/prosecute.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/protective.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/push.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/push.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/quantum.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/quebec.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/question.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/question.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/questioning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/quick.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/quit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/radiation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/radioactive.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/rads.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/rapid.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/reach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/reached.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/reactor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/red.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/red.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/relay.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/released.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/released.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/remaining.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/renegade.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/repair.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/report.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/report.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/reports.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/required.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/required.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/research.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/research.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/reset.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/resevoir.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/resistance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/returned.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/right.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/right.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/rocket.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/roger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/romeo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/room.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/room.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/round.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/round.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/run.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/run.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/safe.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/safety.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sargeant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/satellite.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/save.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/save.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/science.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/science.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/scores.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/scream.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/screen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/search.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/search.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/second.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/second.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/secondary.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/seconds.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sector.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/secure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/secured.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/security.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/security.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/select.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/select.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/selected.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/service.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/service.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/seven.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/seventeen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/seventy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/severe.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sewage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sewer.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shield.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shipment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shoot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shower.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/shut.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/side.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/side.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sierra.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sight.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/silo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/six.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/six.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sixteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sixty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/slime.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/slow.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/soldier.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/some.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/some.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/someone.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/something.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/something.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/son.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/son.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sorry.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/south.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/south.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/squad.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/square.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/square.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/stairway.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/status.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/status.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sterile.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sterilization.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/stolen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/storage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sub.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/subsurface.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/sudden.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/suit.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/superconducting.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/supercooled.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/supply.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/surface.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/surrender.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/surround.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/surrounded.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/switch.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/system.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/system.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/systems.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/tactical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/take.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/take.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/talk.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/tango.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/tank.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/target.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/target.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/temperature.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/temporal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ten.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/terminal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/terminated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/termination.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/test.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/test.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/that.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/that.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/the.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/the.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/then.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/then.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/there.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/there.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/third.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/third.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/thirteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/thirty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/this.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/this.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/those.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/those.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/thousand.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/threat.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/three.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/three.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/through.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/through.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/time.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/time.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/top.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/top.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/topside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/touch.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/towards.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/track.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/track.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/train.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/train.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/transportation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/truck.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/tunnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/turn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/turret.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/twelve.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/twenty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/two.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/two.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/unauthorized.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/under.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/under.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/uniform.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/unlocked.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/until.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/until.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/up.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/up.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/upper.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/uranium.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/us.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/us.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/usa.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/use.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/use.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/used.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/used.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/user.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/user.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/vacate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/valid.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/vapor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/vent.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/ventillation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/victor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/violated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/violation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/voltage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/vox_login.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/walk.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/wall.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/want.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/want.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/wanted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/warm.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/warn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/warning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/waste.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/water.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/water.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/we.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/we.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/weapon.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/west.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/west.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/whiskey.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/white.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/white.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/wilco.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/will.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/will.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/with.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/with.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/without.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/without.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/woop.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/xeno.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/yankee.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/yards.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/year.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/year.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/yellow.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/yes.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/you.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/you.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/your.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/your.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/yourself.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/zero.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/zone.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg b/modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg
rename to modular_nova/modules/alt_vox/sound/vox_hl/zulu.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/_comma.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/_period.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/access.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/access.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/acknowledged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/activate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/activated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/activity.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/advanced.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/alert.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/alien.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/all.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/all.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/alpha.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/an.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/an.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/and.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/and.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/announcement.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/antenna.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/any.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/any.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/approach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/are.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/are.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/area.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/area.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/armed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/armory.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/atomic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/attention.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/authorized.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/automatic.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/away.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/away.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/b.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/b.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/back.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/back.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/base.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/base.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/biohazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/biological.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/black.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/black.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/blast.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/bloop.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/blue.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/bravo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/breach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/buzwarn.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/bypass.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/cable.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/center.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/center.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/central.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/central.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/chamber.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/check.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/check.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/checkpoint.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/chemical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/clear.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/code.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/code.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/command.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/command.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/communications.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/complex.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/containment.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/contamination.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/control.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/control.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/coolant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/core.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/core.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/crew.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/cross.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/d.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/d.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/dadeda.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/damage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/danger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/day.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/day.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/deactivated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/deeoo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/defense.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/delta.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/denied.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/destroy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/detected.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/detonation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/device.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/device.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/dimensional.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/disengaged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/do.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/do.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/doop.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/door.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/door.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/down.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/down.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/e.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/e.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/echo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/eight.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/eighteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/eighty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/electric.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/eleven.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/eliminate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/emergency.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/energy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/engage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/engaged.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/enter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/entry.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/escape.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/evacuate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/exchange.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/experimental.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/extreme.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/facility.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/failed.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/failure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/field.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/field.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/fifteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/fifty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/fire.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/five.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/five.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/forbidden.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/force.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/force.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/forms.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/forty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/four.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/four.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/fourteen .ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/freeman.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/from.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/from.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/fuel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/get.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/get.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/go.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/go.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/gordon.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/granted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/green.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/green.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/handling.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hanger.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/have.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/have.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hazard.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/health.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/health.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/heat.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/helecopter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/helium.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/high.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/high.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hostal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hostile.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hotel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hundred.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/hydro.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/illegal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/immediate.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/immediately.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/in.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/in.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/india.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/india.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/inoperative.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/inside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/inspection.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/is.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/is.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/kilo01.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/kilo02.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lambda.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/laser.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/launch.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/leak.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/level.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/level.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lima.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lima_alt.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/liquid.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lock.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/locked.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lockout.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/lower.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/main.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/main.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/maintenance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/malfunction.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/materials.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/may.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/may.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/medical.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/men.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/men.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/mesa.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/message.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/message.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/mic_mike.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/mike.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/military.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/military.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/motorpool.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/move.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/move.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/must.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/must.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/nearest.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/nine.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/nineteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/ninety.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/no.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/no.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/noe.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/not.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/not.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/now.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/now.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/objective.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/of.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/of.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/on.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/on.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/one.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/one.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/open.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/open.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/operating.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/option.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/option.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/out.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/out.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/override.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/override.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/percent.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/perimeter.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/permitted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/perpulsion.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/personnel.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/plant.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/please.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/please.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/portal.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/power.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/power.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/primary.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/prosecute.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/questioning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/radiation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/radioactive.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/reach.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/reactor.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/relay.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/released.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/released.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/remaining.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/renegade.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/repair.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/report.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/report.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/reports.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/required.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/required.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/research.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/research.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/resistance.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/rocket.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/safety.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/satellite.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/science.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/science.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/search.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/search.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/second.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/second.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/secondary.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/seconds.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sector.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/secure.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/secured.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/secured.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/secured.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/secured.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/security.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/security.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/security.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/security.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/service.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/service.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/service.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/service.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/seven.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/seventeen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/seventy.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/severe.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sheild.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/shoot.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sierra.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sight.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/silo.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/six.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/six.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sixteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sixty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sorry.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sqaud.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/status.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/status.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/sterilization.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/storage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/supercooled.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/surrender.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/system.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/system.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/systems.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/target.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/target.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/team.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/team.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/ten.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/terminated.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/test.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/test.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/the.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/the.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/thirtteen.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/thirty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/this.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/this.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/three.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/three.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/time.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/time.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/to.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/to.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/topside.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/track.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/track.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/train.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/train.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/turret.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/twelve.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/twenty.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/two.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/two.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/unauthorized.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/under.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/under.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/units.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/units.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/until.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/until.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/up.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/up.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/uranium.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/use.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/use.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/violation.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/voltage.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/wanted.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/warning.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/we.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/we.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/weapon.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/will.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/will.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/with.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/with.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/yellow.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/you.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/you.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/your.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/your.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/zero.ogg
diff --git a/modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg b/modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg
similarity index 100%
rename from modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg
rename to modular_nova/modules/alt_vox/sound/vox_mil/zone.ogg
diff --git a/modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm
similarity index 100%
rename from modular_skyrat/modules/alternative_job_titles/code/alt_job_titles.dm
rename to modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm
diff --git a/modular_skyrat/modules/alternative_job_titles/code/job.dm b/modular_nova/modules/alternative_job_titles/code/job.dm
similarity index 100%
rename from modular_skyrat/modules/alternative_job_titles/code/job.dm
rename to modular_nova/modules/alternative_job_titles/code/job.dm
diff --git a/modular_skyrat/modules/alternative_job_titles/readme.md b/modular_nova/modules/alternative_job_titles/readme.md
similarity index 100%
rename from modular_skyrat/modules/alternative_job_titles/readme.md
rename to modular_nova/modules/alternative_job_titles/readme.md
diff --git a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm b/modular_nova/modules/ammo_workbench/code/ammo_workbench.dm
similarity index 99%
rename from modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm
rename to modular_nova/modules/ammo_workbench/code/ammo_workbench.dm
index 6aef270c3de..9eea7bd39c0 100644
--- a/modular_skyrat/modules/ammo_workbench/code/ammo_workbench.dm
+++ b/modular_nova/modules/ammo_workbench/code/ammo_workbench.dm
@@ -1,7 +1,7 @@
/obj/machinery/ammo_workbench
name = "ammunitions workbench"
desc = "A machine, somewhat akin to a lathe, made specifically for manufacturing ammunition. It has a slot for magazines, ammo boxes, clips... anything that holds ammo."
- icon = 'modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi'
+ icon = 'modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi'
icon_state = "ammobench"
density = TRUE
use_power = IDLE_POWER_USE
@@ -31,7 +31,7 @@
var/list/casing_mat_strings = list()
/// can it print ammunition flagged as harmful (e.g. most ammo)?
var/allowed_harmful = FALSE
- /// can it print advanced ammunition types (e.g. armor-piercing)? see modular_skyrat\modules\modular_weapons\code\modular_projectiles.dm
+ /// can it print advanced ammunition types (e.g. armor-piercing)? see modular_nova\modules\modular_weapons\code\modular_projectiles.dm
var/allowed_advanced = FALSE
/// what datadisks have been loaded. uh... honestly this doesn't really do much either
var/list/loaded_datadisks = list()
diff --git a/modular_skyrat/modules/ammo_workbench/code/design_disks.dm b/modular_nova/modules/ammo_workbench/code/design_disks.dm
similarity index 100%
rename from modular_skyrat/modules/ammo_workbench/code/design_disks.dm
rename to modular_nova/modules/ammo_workbench/code/design_disks.dm
diff --git a/modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi b/modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi
similarity index 100%
rename from modular_skyrat/modules/ammo_workbench/icons/ammo_workbench.dmi
rename to modular_nova/modules/ammo_workbench/icons/ammo_workbench.dmi
diff --git a/modular_skyrat/modules/apc_arcing/apc.dm b/modular_nova/modules/apc_arcing/apc.dm
similarity index 100%
rename from modular_skyrat/modules/apc_arcing/apc.dm
rename to modular_nova/modules/apc_arcing/apc.dm
diff --git a/modular_nova/modules/armaments/code/armament_component.dm b/modular_nova/modules/armaments/code/armament_component.dm
new file mode 100644
index 00000000000..af8bff88f15
--- /dev/null
+++ b/modular_nova/modules/armaments/code/armament_component.dm
@@ -0,0 +1,264 @@
+/**
+ * This is the component that runs the armaments vendor.
+ *
+ * It's intended to be used with the armament vendor, or other atoms that otherwise aren't vending machines.
+ */
+
+/datum/component/armament
+ /// The types of armament datums we wish to add to this component.
+ var/list/products
+ /// What access do we require to use this machine?
+ var/list/required_access
+ /// Our parent machine.
+ var/atom/parent_atom
+ /// The points card that is currently inserted into the parent.
+ var/obj/item/armament_points_card/inserted_card
+ /// Used to keep track of what categories have been used.
+ var/list/used_categories = list()
+ /// Used to keep track of what items have been purchased.
+ var/list/purchased_items = list()
+
+/datum/component/armament/Initialize(list/required_products, list/needed_access)
+ if(!required_products)
+ stack_trace("No products specified for armament")
+ return COMPONENT_INCOMPATIBLE
+
+ parent_atom = parent
+
+ products = required_products
+
+ required_access = needed_access
+
+ RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand))
+ RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
+
+/datum/component/armament/Destroy(force)
+ if(inserted_card)
+ inserted_card.forceMove(parent_atom.drop_location())
+ inserted_card = null
+ return ..()
+
+/datum/component/armament/proc/on_attackby(atom/target, obj/item, mob/user)
+ SIGNAL_HANDLER
+
+ if(!user || !item)
+ return
+
+ if(!user.can_interact_with(parent_atom))
+ return
+
+ if(!istype(item, /obj/item/armament_points_card) || inserted_card)
+ return
+
+ item.forceMove(parent_atom)
+ inserted_card = item
+
+/datum/component/armament/proc/on_attack_hand(datum/source, mob/living/user)
+ SIGNAL_HANDLER
+
+ if(!user)
+ return
+
+ if(!user.can_interact_with(parent_atom))
+ return
+
+ if(!check_access(user))
+ to_chat(user, span_warning("You don't have the required access!"))
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(ui_interact), user)
+
+/datum/component/armament/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "ArmamentStation")
+ ui.open()
+
+/datum/component/armament/ui_data(mob/user)
+ var/list/data = list()
+
+ data["card_inserted"] = inserted_card ? TRUE : FALSE
+ data["card_name"] = "unknown"
+ data["card_points"] = 0
+ if(inserted_card)
+ data["card_points"] = inserted_card.points
+ data["card_name"] = inserted_card.name
+
+ data["armaments_list"] = list()
+ for(var/armament_category as anything in SSarmaments.entries)
+ var/list/armament_subcategories = list()
+ for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY])
+ var/list/subcategory_items = list()
+ for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory])
+ if(products && !(armament_entry.type in products))
+ continue
+ subcategory_items += list(list(
+ "ref" = REF(armament_entry),
+ "icon" = armament_entry.cached_base64,
+ "name" = armament_entry.name,
+ "cost" = armament_entry.cost,
+ "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE,
+ "magazine_cost" = armament_entry.magazine_cost,
+ "quantity" = armament_entry.max_purchase,
+ "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0,
+ "description" = armament_entry.description,
+ "armament_category" = armament_entry.category,
+ "equipment_subcategory" = armament_entry.subcategory,
+ ))
+ if(!LAZYLEN(subcategory_items))
+ continue
+ armament_subcategories += list(list(
+ "subcategory" = subcategory,
+ "items" = subcategory_items,
+ ))
+ if(!LAZYLEN(armament_subcategories))
+ continue
+ data["armaments_list"] += list(list(
+ "category" = armament_category,
+ "category_limit" = SSarmaments.entries[armament_category][CATEGORY_LIMIT],
+ "category_uses" = used_categories[armament_category],
+ "subcategories" = armament_subcategories,
+ ))
+
+ return data
+
+/datum/component/armament/ui_act(action, list/params)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("equip_item")
+ var/check = check_item(params["armament_ref"])
+ if(!check)
+ return
+ select_armament(usr, check)
+ if("buy_ammo")
+ var/check = check_item(params["armament_ref"])
+ if(!check)
+ return
+ buy_ammo(usr, check, params["quantity"])
+ if("eject_card")
+ eject_card(usr)
+
+/datum/component/armament/proc/buy_ammo(mob/user, datum/armament_entry/armament_entry, quantity = 1)
+ if(!armament_entry.magazine)
+ return
+ if(!inserted_card)
+ to_chat(user, span_warning("No card inserted!"))
+ return
+ var/quantity_cost = armament_entry.magazine_cost * quantity
+ if(!inserted_card.use_points(quantity_cost))
+ to_chat(user, span_warning("Not enough points!"))
+ return
+ for(var/i in 1 to quantity)
+ new armament_entry.magazine(parent_atom.drop_location())
+
+/datum/component/armament/proc/check_item(reference)
+ var/datum/armament_entry/armament_entry
+ for(var/category in SSarmaments.entries)
+ for(var/subcategory in SSarmaments.entries[category][CATEGORY_ENTRY])
+ armament_entry = locate(reference) in SSarmaments.entries[category][CATEGORY_ENTRY][subcategory]
+ if(armament_entry)
+ break
+ if(armament_entry)
+ break
+ if(!armament_entry)
+ return FALSE
+ if(products && !(armament_entry.type in products))
+ return FALSE
+ return armament_entry
+
+/datum/component/armament/proc/eject_card(mob/user)
+ if(!inserted_card)
+ to_chat(user, span_warning("No card inserted!"))
+ return
+ inserted_card.forceMove(parent_atom.drop_location())
+ user.put_in_hands(inserted_card)
+ inserted_card = null
+ to_chat(user, span_notice("Card ejected!"))
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 70)
+
+/datum/component/armament/proc/select_armament(mob/user, datum/armament_entry/armament_entry)
+ if(!inserted_card)
+ to_chat(user, span_warning("No card inserted!"))
+ return
+ if(used_categories[armament_entry.category] >= SSarmaments.entries[armament_entry.category][CATEGORY_LIMIT])
+ to_chat(user, span_warning("Category limit reached!"))
+ return
+ if(purchased_items[armament_entry] >= armament_entry.max_purchase)
+ to_chat(user, span_warning("Item limit reached!"))
+ return
+ if(!ishuman(user))
+ return
+ if(!inserted_card.use_points(armament_entry.cost))
+ to_chat(user, span_warning("Not enough points!"))
+ return
+
+ var/mob/living/carbon/human/human_to_equip = user
+
+ var/obj/item/new_item = new armament_entry.item_type(parent_atom.drop_location())
+
+ used_categories[armament_entry.category]++
+ purchased_items[armament_entry]++
+
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
+
+ if(armament_entry.equip_to_human(human_to_equip, new_item))
+ to_chat(user, span_notice("Equipped directly to your person."))
+ playsound(src, 'sound/items/equip/toolbelt_equip.ogg', 100)
+ armament_entry.after_equip(parent_atom.drop_location(), new_item)
+
+/datum/component/armament/proc/check_access(mob/living/user)
+ if(!user)
+ return FALSE
+
+ if(!required_access)
+ return TRUE
+
+ if(issilicon(user))
+ if(ispAI(user))
+ return FALSE
+ return TRUE //AI can do whatever it wants
+
+ if(isAdminGhostAI(user))
+ return TRUE
+
+ //If the mob has the simple_access component with the requried access, the check passes
+ else if(SEND_SIGNAL(user, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED)
+ return TRUE
+
+ //If the mob is holding a valid ID, they pass the access check
+ else if(check_access_obj(user.get_active_held_item()))
+ return TRUE
+
+ //if they are wearing a card that has access and are human, that works
+ else if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ if(check_access_obj(human_user.wear_id))
+ return TRUE
+
+ //if they're strange and have a hacky ID card as an animal
+ else if(isanimal(user))
+ var/mob/living/simple_animal/animal = user
+ if(check_access_obj(animal.access_card))
+ return TRUE
+
+/datum/component/armament/proc/check_access_obj(obj/item/id)
+ return check_access_list(id ? id.GetAccess() : null)
+
+/datum/component/armament/proc/check_access_list(list/access_list)
+ if(!islist(required_access)) //something's very wrong
+ return TRUE
+
+ if(!length(required_access))
+ return TRUE
+
+ if(!length(access_list) || !islist(access_list))
+ return FALSE
+
+ for(var/req in required_access)
+ if(!(req in access_list)) //doesn't have this access
+ return FALSE
+
+ return TRUE
diff --git a/modular_skyrat/modules/armaments/code/armament_entries.dm b/modular_nova/modules/armaments/code/armament_entries.dm
similarity index 100%
rename from modular_skyrat/modules/armaments/code/armament_entries.dm
rename to modular_nova/modules/armaments/code/armament_entries.dm
diff --git a/modular_skyrat/modules/armaments/code/armament_station.dm b/modular_nova/modules/armaments/code/armament_station.dm
similarity index 97%
rename from modular_skyrat/modules/armaments/code/armament_station.dm
rename to modular_nova/modules/armaments/code/armament_station.dm
index 3c24ed9bb9c..e97153e6b5c 100644
--- a/modular_skyrat/modules/armaments/code/armament_station.dm
+++ b/modular_nova/modules/armaments/code/armament_station.dm
@@ -36,7 +36,7 @@
/obj/item/armament_points_card
name = "armament points card"
desc = "A points card that can be used at an Armaments Station or Armaments Dealer."
- icon = 'modular_skyrat/modules/armaments/icons/armaments.dmi'
+ icon = 'modular_nova/modules/armaments/icons/armaments.dmi'
icon_state = "armament_card"
w_class = WEIGHT_CLASS_TINY
/// How many points does this card have to use at the vendor?
diff --git a/modular_skyrat/modules/armaments/icons/armaments.dmi b/modular_nova/modules/armaments/icons/armaments.dmi
similarity index 100%
rename from modular_skyrat/modules/armaments/icons/armaments.dmi
rename to modular_nova/modules/armaments/icons/armaments.dmi
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm b/modular_nova/modules/ashwalkers/code/buildings/antfarm.dm
similarity index 97%
rename from modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm
rename to modular_nova/modules/ashwalkers/code/buildings/antfarm.dm
index c5f2e645c95..32f0b9b51c4 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/antfarm.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/antfarm.dm
@@ -1,7 +1,7 @@
/obj/structure/antfarm
name = "ant farm"
desc = "Though it may look natural, this was not made by ants."
- icon = 'modular_skyrat/modules/ashwalkers/icons/structures.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi'
icon_state = "anthill"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm
similarity index 96%
rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm
rename to modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm
index d30ca3ae14d..f36aaac8cab 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/ash_clothing_vendor.dm
@@ -2,7 +2,7 @@
name = "\improper Ashland Clothing Storage"
desc = "A large container, filled with various clothes for the Ash Walkers."
product_ads = "Praise the Necropolis"
- icon = 'modular_skyrat/modules/ashwalkers/icons/vending.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/vending.dmi'
icon_state = "ashclothvendor"
icon_deny = "necrocrate"
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm
similarity index 99%
rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm
rename to modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm
index 0e735a708a8..0ba56e7b562 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/ash_farming.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/ash_farming.dm
@@ -19,7 +19,7 @@
RegisterSignal(atom_parent, COMSIG_ATOM_EXAMINE, PROC_REF(check_examine))
RegisterSignal(atom_parent, COMSIG_QDELETING, PROC_REF(delete_farm))
-/datum/component/simple_farm/Destroy(force, silent)
+/datum/component/simple_farm/Destroy(force)
//lets not hard del
UnregisterSignal(atom_parent, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, COMSIG_QDELETING))
atom_parent = null
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm b/modular_nova/modules/ashwalkers/code/buildings/ash_tendril.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/buildings/ash_tendril.dm
rename to modular_nova/modules/ashwalkers/code/buildings/ash_tendril.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm b/modular_nova/modules/ashwalkers/code/buildings/fuelwell.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm
rename to modular_nova/modules/ashwalkers/code/buildings/fuelwell.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm b/modular_nova/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm
rename to modular_nova/modules/ashwalkers/code/buildings/gutluncher_foodtrough.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/planttank.dm b/modular_nova/modules/ashwalkers/code/buildings/planttank.dm
similarity index 98%
rename from modular_skyrat/modules/ashwalkers/code/buildings/planttank.dm
rename to modular_nova/modules/ashwalkers/code/buildings/planttank.dm
index 0bc1b4d722e..a55e395d652 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/planttank.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/planttank.dm
@@ -1,7 +1,7 @@
/obj/structure/plant_tank
name = "plant tank"
desc = "A small little glass tank that is used to grow plants; this tank promotes the nitrogen and oxygen cycle."
- icon = 'modular_skyrat/modules/ashwalkers/icons/structures.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi'
icon_state = "plant_tank_e"
anchored = FALSE
density = TRUE
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm b/modular_nova/modules/ashwalkers/code/buildings/railroad.dm
similarity index 95%
rename from modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm
rename to modular_nova/modules/ashwalkers/code/buildings/railroad.dm
index ead76061da9..c1751cecd57 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/railroad.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/railroad.dm
@@ -2,7 +2,7 @@
name = "railroad tracks"
singular_name = "railroad track"
desc = "A primitive form of transportation. Place on any floor to start building a railroad."
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "rail_item"
merge_type = /obj/item/stack/rail_track
@@ -25,7 +25,7 @@
/obj/structure/railroad
name = "railroad track"
desc = "A primitive form of transportation. You may see some rail carts on it."
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "rail"
anchored = TRUE
@@ -62,7 +62,7 @@
/obj/vehicle/ridden/rail_cart
name = "rail cart"
desc = "A wonderful form of locomotion. It will only ride while on tracks. It does have storage"
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "railcart"
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
/// The mutable appearance used for the overlay over buckled mobs.
@@ -78,7 +78,7 @@
/obj/vehicle/ridden/rail_cart/Initialize(mapload)
. = ..()
attach_trailer()
- railoverlay = mutable_appearance(icon, "railoverlay", ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER)
+ railoverlay = mutable_appearance(icon, "railoverlay", ABOVE_MOB_LAYER, src)
AddElement(/datum/element/ridable, /datum/component/riding/vehicle/rail_cart)
create_storage(max_total_storage = 21, max_slots = 21)
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm b/modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm
similarity index 98%
rename from modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm
rename to modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm
index a8df699a735..1022ec69305 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/tendril_cursing.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/tendril_cursing.dm
@@ -43,7 +43,7 @@
RegisterSignal(human_target, COMSIG_MOVABLE_MOVED, PROC_REF(do_move))
RegisterSignal(human_target, COMSIG_LIVING_DEATH, PROC_REF(remove_curse))
-/datum/component/ash_cursed/Destroy(force, silent)
+/datum/component/ash_cursed/Destroy(force)
. = ..()
REMOVE_TRAIT(human_target, TRAIT_NO_TELEPORT, REF(src))
human_target.remove_movespeed_modifier(/datum/movespeed_modifier/ash_cursed)
diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm b/modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm
similarity index 96%
rename from modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm
rename to modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm
index 8046a7b4fd0..404849bf195 100644
--- a/modular_skyrat/modules/ashwalkers/code/buildings/wormfarm.dm
+++ b/modular_nova/modules/ashwalkers/code/buildings/wormfarm.dm
@@ -1,7 +1,7 @@
/obj/structure/wormfarm
name = "worm farm"
desc = "A wonderfully dirty barrel where worms can have a happy little life."
- icon = 'modular_skyrat/modules/ashwalkers/icons/structures.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/structures.dmi'
icon_state = "wormbarrel"
density = TRUE
anchored = FALSE
@@ -132,7 +132,7 @@
/obj/item/stack/worm_fertilizer
name = "worm fertilizer"
desc = "When you fed your worms, you should have expected this."
- icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi'
icon_state = "fertilizer"
grind_results = list(/datum/reagent/plantnutriment/eznutriment = 3, /datum/reagent/plantnutriment/left4zednutriment = 3, /datum/reagent/plantnutriment/robustharvestnutriment = 3)
singular_name = "fertilizer"
diff --git a/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm b/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm
new file mode 100644
index 00000000000..e1105dadd24
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/ash_armour.dm
@@ -0,0 +1,139 @@
+//ASH CLOTHING
+/datum/armor/ash_headdress
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 10
+
+/datum/armor/clothing_under/ash_robes
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 10
+
+/datum/armor/ash_plates
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 10
+
+/datum/armor/bone_greaves
+ melee = 15
+ bullet = 25
+ laser = 15
+ energy = 15
+ bomb = 20
+ bio = 50
+
+/obj/item/clothing/head/ash_headdress
+ name = "ash headdress"
+ desc = "A headdress that shows the dominance of the walkers of ash."
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
+ icon_state = "headdress"
+ supports_variations_flags = NONE
+ armor_type = /datum/armor/ash_headdress
+
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_config_worn = null
+
+/datum/crafting_recipe/ash_recipe/ash_headdress
+ name = "Ash Headdress"
+ result = /obj/item/clothing/head/ash_headdress
+ category = CAT_CLOTHING
+
+/obj/item/clothing/head/ash_headdress/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
+
+/obj/item/clothing/head/ash_headdress/winged
+ name = "winged ash headdress"
+ icon_state = "wing_headdress"
+
+/datum/crafting_recipe/ash_recipe/ash_headdress/winged
+ name = "Winged Ash Headdress"
+ result = /obj/item/clothing/head/ash_headdress/winged
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes
+ name = "ash robes"
+ desc = "A set of hand-made robes. The bones still seem to have some muscle still attached."
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
+ icon_state = "robes"
+ armor_type = /datum/armor/clothing_under/ash_robes
+
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_config_worn = null
+
+/datum/crafting_recipe/ash_recipe/ash_robes
+ name = "Ash Robes"
+ result = /obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes
+ category = CAT_CLOTHING
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
+
+/obj/item/clothing/suit/ash_plates
+ name = "ash combat plates"
+ desc = "A combination of bones and hides, strung together by watcher sinew."
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
+ icon_state = "combat_plates"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ armor_type = /datum/armor/ash_plates
+
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_config_worn = null
+
+/datum/crafting_recipe/ash_recipe/ash_plates
+ name = "Ash Combat Plates"
+ result = /obj/item/clothing/suit/ash_plates
+ category = CAT_CLOTHING
+
+/obj/item/clothing/suit/ash_plates/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
+
+/obj/item/clothing/suit/ash_plates/decorated
+ name = "decorated ash combat plates"
+ icon_state = "dec_breastplate"
+
+/datum/crafting_recipe/ash_recipe/ash_plates/decorated
+ name = "Decorated Ash Combat Plates"
+ result = /obj/item/clothing/suit/ash_plates/decorated
+ category = CAT_CLOTHING
+
+/obj/item/clothing/shoes/bone_greaves
+ name = "bone greaves"
+ desc = "For when you're expecting to step on spiky things. Offers modest protection to your feet."
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi'
+ icon_state = "bone_greaves"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ armor_type = /datum/armor/bone_greaves
+
+/datum/crafting_recipe/ash_recipe/bone_greaves
+ name = "Bone Greaves"
+ result = /obj/item/clothing/shoes/bone_greaves
+ reqs = list(
+ /obj/item/stack/sheet/bone = 2,
+ /obj/item/stack/sheet/sinew = 1,
+ )
+ category = CAT_CLOTHING
diff --git a/modular_nova/modules/ashwalkers/code/clothing/hands.dm b/modular_nova/modules/ashwalkers/code/clothing/hands.dm
new file mode 100644
index 00000000000..79429a9b34a
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/hands.dm
@@ -0,0 +1,14 @@
+/obj/item/clothing/gloves/military/ashwalk
+ icon = 'modular_nova/modules/ashwalkers/icons/gloves.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/hands.dmi'
+ name = "ash coated bronze gloves"
+ desc = "Some sort of thin material with the backing of bronze plates."
+ icon_state = "legionlegat"
+
+/obj/item/clothing/gloves/military/claw
+ icon = 'modular_nova/modules/ashwalkers/icons/gloves.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/hands.dmi'
+ name = "tribal claw glove"
+ desc = "A gauntlet fashioned from the hand of a long-dead creature. Judging by the claws, whoever brought the beast down must have had a hard fight."
+ icon_state = "claw"
+
diff --git a/modular_nova/modules/ashwalkers/code/clothing/head.dm b/modular_nova/modules/ashwalkers/code/clothing/head.dm
new file mode 100644
index 00000000000..c2dd20d88ab
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/head.dm
@@ -0,0 +1,8 @@
+/obj/item/clothing/head/shamanash
+ name = "shaman skull"
+ desc = "The skull of a long dead animal bolted to the front of a repurposed pan."
+ icon = 'modular_nova/modules/ashwalkers/icons/hats.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/head.dmi'
+ icon_state = "shamskull"
+ supports_variations_flags = NONE
+
diff --git a/modular_nova/modules/ashwalkers/code/clothing/misc.dm b/modular_nova/modules/ashwalkers/code/clothing/misc.dm
new file mode 100644
index 00000000000..0e8ad259e12
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/misc.dm
@@ -0,0 +1,16 @@
+/obj/item/clothing/suit/ashwalkermantle
+ icon = 'modular_nova/modules/ashwalkers/icons/suits.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/suit.dmi'
+ name = "tanned hide"
+ desc = "The tanned hide of some brown furred creature."
+ icon_state = "mantle_liz"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/ashwalkermantle/cape
+ icon = 'modular_nova/modules/ashwalkers/icons/suits.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/suit.dmi'
+ name = "brown leather cape"
+ desc = "An ash coated cloak."
+ icon_state = "desertcloak"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
diff --git a/modular_nova/modules/ashwalkers/code/clothing/neck.dm b/modular_nova/modules/ashwalkers/code/clothing/neck.dm
new file mode 100644
index 00000000000..aa755a7d3d8
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/neck.dm
@@ -0,0 +1,6 @@
+/obj/item/clothing/neck/cloak/tribalmantle
+ name = "ornate mantle"
+ desc = "An ornate mantle commonly worn by a shaman or chieftain."
+ icon = 'modular_nova/modules/ashwalkers/icons/cloaks.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/neck.dmi'
+ icon_state = "tribal-mantle"
diff --git a/modular_nova/modules/ashwalkers/code/clothing/shoes.dm b/modular_nova/modules/ashwalkers/code/clothing/shoes.dm
new file mode 100644
index 00000000000..9b3abd276c9
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/shoes.dm
@@ -0,0 +1,40 @@
+/obj/item/clothing/shoes/jackboots/ashwalker
+ name = "ash coated bronze boots"
+ desc = "Boots decorated with poorly forged metal."
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ icon_state = "legionmetal"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/shoes/jackboots/ashwalker/legate
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ icon_state = "legionlegate"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/shoes/wraps/ashwalker
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ name = "ash coated foot wraps"
+ desc = "May hurt for less than normal legs."
+ icon_state = "rag"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/shoes/wraps/ashwalker/tribalwraps
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi'
+ name = "ornate leg wraps"
+ desc = "An ornate set of leg wraps commonly worn by a shaman or chieftain."
+ icon_state = "tribalcuffs"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+/obj/item/clothing/shoes/wraps/ashwalker/mundanewraps
+ icon = 'modular_nova/modules/ashwalkers/icons/shoes.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/feet.dmi'
+ worn_icon_digi = 'modular_nova/modules/ashwalkers/icons/feet_digi.dmi'
+ name = "tribal leg wraps"
+ desc = "A mundane set of leg wraps often worn by tribal villagers."
+ icon_state = "mundanecuffs"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
diff --git a/modular_nova/modules/ashwalkers/code/clothing/under.dm b/modular_nova/modules/ashwalkers/code/clothing/under.dm
new file mode 100644
index 00000000000..c9e43fe6536
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/clothing/under.dm
@@ -0,0 +1,70 @@
+/obj/item/clothing/under/costume/gladiator/ash_walker/greentrib
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash covered leaves"
+ desc = "Green leaves coated with a thick layer of ash. Praise the Nercopolis."
+ icon_state = "tribal_m"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/yellow
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash walker rags"
+ desc = "Rags from Lavaland, coated with light ash. This one seems to be for the juniors of a tribe. Praise the Nercopolis."
+ icon_state = "tribalrags"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/chiefrags
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "old ash walker rags"
+ desc = "Rags from Lavaland, coated with heavy ash. This one seems to be for the elders of a tribe. Praise the Nercopolis."
+ icon_state = "chiefrags"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/shaman
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "decorated ash walker rags"
+ desc = "Rags from Lavaland, drenched with ash, it has fine jewel coated bones sewn around the neck. This one seems to be for the shaman of a tribe. Praise the Nercopolis."
+ icon_state = "shamanrags"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/robe
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash walker robes"
+ desc = "A robe from the ashlands. This one seems to be for ...Everyone, really. Praise the Nercopolis."
+ icon_state = "robe_liz"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/tribal
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash walker tin"
+ desc = "Thin tin bolted over poorly tanned leather."
+ icon_state = "tribal"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/white
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "white ash walker rags"
+ desc = "A poorly sewn dress made of white materials."
+ icon_state = "lizcheo"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/chestwrap
+ icon = 'modular_nova/modules/ashwalkers/icons/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "loincloth and chestwrap"
+ desc = "A poorly sewn dress made of white materials."
+ icon_state = "chestwrap"
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/caesar_clothes
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash walker tunic"
+ desc = "A tattered red tunic of reddened fabric."
+ icon_state = "caesar_clothes"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+/obj/item/clothing/under/costume/gladiator/ash_walker/legskirt_d
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/modules/ashwalkers/icons/uniform.dmi'
+ name = "ash walker waistcloth"
+ desc = "A unisex waistcloth to serve as a kilt or skirt."
+ icon_state = "legskirt_d"
diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_ritual.dm b/modular_nova/modules/ashwalkers/code/effects/ash_ritual.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/effects/ash_ritual.dm
rename to modular_nova/modules/ashwalkers/code/effects/ash_ritual.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm b/modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm
similarity index 98%
rename from modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm
rename to modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm
index a4ca86c4f18..59a52c87335 100644
--- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rituals.dm
+++ b/modular_nova/modules/ashwalkers/code/effects/ash_rituals.dm
@@ -298,7 +298,7 @@
asked_voters += poll_human
- var/list/yes_voters = poll_candidates("Do you wish to banish [find_banished]?", poll_time = 10 SECONDS, group = asked_voters)
+ var/list/yes_voters = SSpolling.poll_candidates("Do you wish to banish [find_banished]?", poll_time = 10 SECONDS, group = asked_voters)
if(length(yes_voters) < length(asked_voters))
find_banished.balloon_alert_to_viewers("banishment failed!")
diff --git a/modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm b/modular_nova/modules/ashwalkers/code/effects/ash_rune.dm
similarity index 95%
rename from modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm
rename to modular_nova/modules/ashwalkers/code/effects/ash_rune.dm
index 7a2ced09dd5..6efb0b8edb2 100644
--- a/modular_skyrat/modules/ashwalkers/code/effects/ash_rune.dm
+++ b/modular_nova/modules/ashwalkers/code/effects/ash_rune.dm
@@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(ash_rituals)
/obj/effect/ash_rune
name = "ash rune"
desc = "A remnant of a civilization that was once powerful enough to harness strange energy for transmutations."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ash_ritual.dmi'
icon_state = "rune"
anchored = TRUE
@@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(ash_rituals)
// this is solely for aesthetics... though the central rune will check the directions, of which this is on
/obj/effect/side_rune
desc = "This rune seems to have some weird vacuum to it."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ash_ritual.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
anchored = TRUE
/// the central rune that this is connected to
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm b/modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm
similarity index 96%
rename from modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm
rename to modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm
index 26051195cae..9d9f4a8b6eb 100644
--- a/modular_skyrat/modules/ashwalkers/code/items/ash_centrifuge.dm
+++ b/modular_nova/modules/ashwalkers/code/items/ash_centrifuge.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/cup/primitive_centrifuge
name = "primitive centrifuge"
desc = "A small cup that allows a person to slowly spin out liquids they do not desire."
- icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi'
icon_state = "primitive_centrifuge"
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm b/modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm
similarity index 93%
rename from modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm
rename to modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm
index 205e357313e..5738c2d4716 100644
--- a/modular_skyrat/modules/ashwalkers/code/items/ash_seedmesh.dm
+++ b/modular_nova/modules/ashwalkers/code/items/ash_seedmesh.dm
@@ -1,7 +1,7 @@
/obj/item/seed_mesh
name = "seed mesh"
desc = "A little mesh that, when paired with sand, has the possibility of filtering out large seeds."
- icon = 'modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/misc_tools.dmi'
icon_state = "mesh"
var/list/static/seeds_blacklist = list(
/obj/item/seeds/lavaland,
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm
similarity index 83%
rename from modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm
rename to modular_nova/modules/ashwalkers/code/items/ash_surgery.dm
index ee5ebd017c5..5eb40601e86 100644
--- a/modular_skyrat/modules/ashwalkers/code/items/ash_surgery.dm
+++ b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm
@@ -1,7 +1,7 @@
//ASH SURGERY
/obj/item/cautery/ashwalker
name = "primitive cautery"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "cautery"
greyscale_colors = null
@@ -16,7 +16,7 @@
/obj/item/surgicaldrill/ashwalker
name = "primitive surgical drill"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "surgical_drill"
greyscale_colors = null
@@ -31,7 +31,7 @@
/obj/item/scalpel/ashwalker
name = "primitive scalpel"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "scalpel"
greyscale_colors = null
@@ -46,7 +46,7 @@
/obj/item/circular_saw/ashwalker
name = "primitive circular saw"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "surgical_saw"
greyscale_colors = null
@@ -61,7 +61,7 @@
/obj/item/retractor/ashwalker
name = "primitive retractor"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "retractors"
greyscale_colors = null
@@ -76,7 +76,7 @@
/obj/item/hemostat/ashwalker
name = "primitive hemostat"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "hemostat"
greyscale_colors = null
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm b/modular_nova/modules/ashwalkers/code/items/ash_tool.dm
similarity index 90%
rename from modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm
rename to modular_nova/modules/ashwalkers/code/items/ash_tool.dm
index e2e0a53a347..d8cac913602 100644
--- a/modular_skyrat/modules/ashwalkers/code/items/ash_tool.dm
+++ b/modular_nova/modules/ashwalkers/code/items/ash_tool.dm
@@ -1,7 +1,7 @@
//ASH TOOL
/obj/item/screwdriver/ashwalker
name = "primitive screwdriver"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "screwdriver"
greyscale_colors = null
@@ -16,7 +16,7 @@
/obj/item/wirecutters/ashwalker
name = "primitive wirecutters"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "cutters"
greyscale_colors = null
@@ -31,7 +31,7 @@
/obj/item/wrench/ashwalker
name = "primitive wrench"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "wrench"
greyscale_colors = null
@@ -46,7 +46,7 @@
/obj/item/crowbar/ashwalker
name = "primitive crowbar"
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "crowbar"
greyscale_colors = null
@@ -75,7 +75,7 @@
/obj/item/tendril_seed
name = "tendril seed"
desc = "A horrible fleshy mass that pulse with a dark energy."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi'
icon_state = "tendril_seed"
/obj/item/tendril_seed/examine(mob/user)
diff --git a/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm b/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm
new file mode 100644
index 00000000000..f7c532df00b
--- /dev/null
+++ b/modular_nova/modules/ashwalkers/code/items/ash_weapon.dm
@@ -0,0 +1,29 @@
+//ASH WEAPON
+/obj/item/melee/macahuitl
+ name = "ash macahuitl"
+ desc = "A weapon that looks like it will leave really bad marks."
+ icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi'
+ lefthand_file = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi'
+ righthand_file = 'modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi'
+ icon_state = "macahuitl"
+
+ force = 15
+ wound_bonus = 15
+ bare_wound_bonus = 10
+
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_config_worn = null
+
+/datum/crafting_recipe/ash_recipe/macahuitl
+ name = "Ash Macahuitl"
+ result = /obj/item/melee/macahuitl
+ reqs = list(
+ /obj/item/stack/sheet/bone = 2,
+ /obj/item/stack/sheet/sinew = 2,
+ /obj/item/stack/sheet/animalhide/goliath_hide = 2,
+ )
+ always_available = FALSE
+ category = CAT_WEAPON_MELEE
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm b/modular_nova/modules/ashwalkers/code/items/ashwalker_shaman.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/items/ashwalker_shaman.dm
rename to modular_nova/modules/ashwalkers/code/items/ashwalker_shaman.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm b/modular_nova/modules/ashwalkers/code/species/Ashwalkers.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/species/Ashwalkers.dm
rename to modular_nova/modules/ashwalkers/code/species/Ashwalkers.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm b/modular_nova/modules/ashwalkers/code/species/damage_datum.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/species/damage_datum.dm
rename to modular_nova/modules/ashwalkers/code/species/damage_datum.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/turfs/closed_turfs.dm b/modular_nova/modules/ashwalkers/code/turfs/closed_turfs.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/turfs/closed_turfs.dm
rename to modular_nova/modules/ashwalkers/code/turfs/closed_turfs.dm
diff --git a/modular_skyrat/modules/ashwalkers/code/turfs/icemoon_tiles.dm b/modular_nova/modules/ashwalkers/code/turfs/icemoon_tiles.dm
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/code/turfs/icemoon_tiles.dm
rename to modular_nova/modules/ashwalkers/code/turfs/icemoon_tiles.dm
diff --git a/modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi b/modular_nova/modules/ashwalkers/icons/ash_ritual.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ash_ritual.dmi
rename to modular_nova/modules/ashwalkers/icons/ash_ritual.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi
rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi
rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_left.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi
rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi
rename to modular_nova/modules/ashwalkers/icons/ashwalker_clothing_right.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/ashwalker_tools.dmi
rename to modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/cloaks.dmi b/modular_nova/modules/ashwalkers/icons/cloaks.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/cloaks.dmi
rename to modular_nova/modules/ashwalkers/icons/cloaks.dmi
diff --git a/modular_nova/modules/ashwalkers/icons/feet.dmi b/modular_nova/modules/ashwalkers/icons/feet.dmi
new file mode 100644
index 00000000000..d743be0a0fc
Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/feet.dmi differ
diff --git a/modular_nova/modules/ashwalkers/icons/feet_digi.dmi b/modular_nova/modules/ashwalkers/icons/feet_digi.dmi
new file mode 100644
index 00000000000..39f6aae9cff
Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/feet_digi.dmi differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/gloves.dmi b/modular_nova/modules/ashwalkers/icons/gloves.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/gloves.dmi
rename to modular_nova/modules/ashwalkers/icons/gloves.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/hands.dmi b/modular_nova/modules/ashwalkers/icons/hands.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/hands.dmi
rename to modular_nova/modules/ashwalkers/icons/hands.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/hats.dmi b/modular_nova/modules/ashwalkers/icons/hats.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/hats.dmi
rename to modular_nova/modules/ashwalkers/icons/hats.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/head.dmi b/modular_nova/modules/ashwalkers/icons/head.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/head.dmi
rename to modular_nova/modules/ashwalkers/icons/head.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi b/modular_nova/modules/ashwalkers/icons/misc_tools.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/misc_tools.dmi
rename to modular_nova/modules/ashwalkers/icons/misc_tools.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/neck.dmi b/modular_nova/modules/ashwalkers/icons/neck.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/neck.dmi
rename to modular_nova/modules/ashwalkers/icons/neck.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/railroad.dmi b/modular_nova/modules/ashwalkers/icons/railroad.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/railroad.dmi
rename to modular_nova/modules/ashwalkers/icons/railroad.dmi
diff --git a/modular_nova/modules/ashwalkers/icons/shoes.dmi b/modular_nova/modules/ashwalkers/icons/shoes.dmi
new file mode 100644
index 00000000000..e69db1f1b30
Binary files /dev/null and b/modular_nova/modules/ashwalkers/icons/shoes.dmi differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/structures.dmi b/modular_nova/modules/ashwalkers/icons/structures.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/structures.dmi
rename to modular_nova/modules/ashwalkers/icons/structures.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/suit.dmi b/modular_nova/modules/ashwalkers/icons/suit.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/suit.dmi
rename to modular_nova/modules/ashwalkers/icons/suit.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/suit_digi.dmi b/modular_nova/modules/ashwalkers/icons/suit_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/suit_digi.dmi
rename to modular_nova/modules/ashwalkers/icons/suit_digi.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/suits.dmi b/modular_nova/modules/ashwalkers/icons/suits.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/suits.dmi
rename to modular_nova/modules/ashwalkers/icons/suits.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/uniform.dmi b/modular_nova/modules/ashwalkers/icons/uniform.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/uniform.dmi
rename to modular_nova/modules/ashwalkers/icons/uniform.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/uniform_digi.dmi b/modular_nova/modules/ashwalkers/icons/uniform_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/uniform_digi.dmi
rename to modular_nova/modules/ashwalkers/icons/uniform_digi.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/uniforms.dmi b/modular_nova/modules/ashwalkers/icons/uniforms.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/uniforms.dmi
rename to modular_nova/modules/ashwalkers/icons/uniforms.dmi
diff --git a/modular_skyrat/modules/ashwalkers/icons/vending.dmi b/modular_nova/modules/ashwalkers/icons/vending.dmi
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/icons/vending.dmi
rename to modular_nova/modules/ashwalkers/icons/vending.dmi
diff --git a/modular_skyrat/modules/ashwalkers/readme.md b/modular_nova/modules/ashwalkers/readme.md
similarity index 100%
rename from modular_skyrat/modules/ashwalkers/readme.md
rename to modular_nova/modules/ashwalkers/readme.md
diff --git a/modular_skyrat/modules/assault_operatives/code/areas.dm b/modular_nova/modules/assault_operatives/code/areas.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/areas.dm
rename to modular_nova/modules/assault_operatives/code/areas.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm b/modular_nova/modules/assault_operatives/code/armaments/_armament_primary.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/_armament_primary.dm
rename to modular_nova/modules/assault_operatives/code/armaments/_armament_primary.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/_armament_secondary.dm b/modular_nova/modules/assault_operatives/code/armaments/_armament_secondary.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/_armament_secondary.dm
rename to modular_nova/modules/assault_operatives/code/armaments/_armament_secondary.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_explosives.dm b/modular_nova/modules/assault_operatives/code/armaments/armament_explosives.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/armament_explosives.dm
rename to modular_nova/modules/assault_operatives/code/armaments/armament_explosives.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_implants.dm b/modular_nova/modules/assault_operatives/code/armaments/armament_implants.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/armament_implants.dm
rename to modular_nova/modules/assault_operatives/code/armaments/armament_implants.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm b/modular_nova/modules/assault_operatives/code/armaments/armament_medical.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/armament_medical.dm
rename to modular_nova/modules/assault_operatives/code/armaments/armament_medical.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_modules.dm b/modular_nova/modules/assault_operatives/code/armaments/armament_modules.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/armament_modules.dm
rename to modular_nova/modules/assault_operatives/code/armaments/armament_modules.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/armament_utility.dm b/modular_nova/modules/assault_operatives/code/armaments/armament_utility.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/armament_utility.dm
rename to modular_nova/modules/assault_operatives/code/armaments/armament_utility.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/armaments/assaultops_armament_station.dm b/modular_nova/modules/assault_operatives/code/armaments/assaultops_armament_station.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/armaments/assaultops_armament_station.dm
rename to modular_nova/modules/assault_operatives/code/armaments/assaultops_armament_station.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/assault_operatives.dm b/modular_nova/modules/assault_operatives/code/assault_operatives.dm
similarity index 98%
rename from modular_skyrat/modules/assault_operatives/code/assault_operatives.dm
rename to modular_nova/modules/assault_operatives/code/assault_operatives.dm
index 4ee36404d72..25c75888f12 100644
--- a/modular_skyrat/modules/assault_operatives/code/assault_operatives.dm
+++ b/modular_nova/modules/assault_operatives/code/assault_operatives.dm
@@ -43,7 +43,7 @@
return assault_team
/datum/antagonist/assault_operative/greet()
- owner.current.playsound_local(get_turf(owner.current), 'modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg', 30, 0, use_reverb = FALSE)
+ owner.current.playsound_local(get_turf(owner.current), 'modular_nova/modules/assault_operatives/sound/assault_operatives_greet.ogg', 30, 0, use_reverb = FALSE)
to_chat(owner, span_big("You are an assault operative!"))
to_chat(owner, span_red(spawn_text))
owner.announce_objectives()
@@ -189,7 +189,7 @@
final_icon.Blend(teammate, ICON_UNDERLAY, -world.icon_size / 4, 0)
final_icon.Blend(teammate, ICON_UNDERLAY, world.icon_size / 4, 0)
- var/icon/disky = icon('modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi', "goldeneye_key")
+ var/icon/disky = icon('modular_nova/modules/assault_operatives/icons/goldeneye.dmi', "goldeneye_key")
disky.Shift(SOUTH, 12)
final_icon.Blend(disky, ICON_OVERLAY)
diff --git a/modular_skyrat/modules/assault_operatives/code/assault_operatives_outfits.dm b/modular_nova/modules/assault_operatives/code/assault_operatives_outfits.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/assault_operatives_outfits.dm
rename to modular_nova/modules/assault_operatives/code/assault_operatives_outfits.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm b/modular_nova/modules/assault_operatives/code/base_alarm.dm
similarity index 93%
rename from modular_skyrat/modules/assault_operatives/code/base_alarm.dm
rename to modular_nova/modules/assault_operatives/code/base_alarm.dm
index e27756ca7f3..9b74ac59928 100644
--- a/modular_skyrat/modules/assault_operatives/code/base_alarm.dm
+++ b/modular_nova/modules/assault_operatives/code/base_alarm.dm
@@ -1,7 +1,7 @@
/obj/machinery/base_alarm
name = "base alarm"
desc = "Pull this to alert the guards!"
- icon = 'modular_skyrat/modules/assault_operatives/icons/alarm.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/alarm.dmi'
icon_state = "alarm"
max_integrity = 250
integrity_failure = 0.4
@@ -24,7 +24,7 @@
/// The area that we use to trigger other alarms.
var/area/myarea = null
/// Path to the alarm sound
- var/alarm_sound_file = 'modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg'
+ var/alarm_sound_file = 'modular_nova/modules/assault_operatives/sound/goldeneyealarm.ogg'
/// Cooldown between each sound
var/alarm_cooldown = 65
diff --git a/modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm b/modular_nova/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm
rename to modular_nova/modules/assault_operatives/code/dynamic_rulsesets_roundstart.dm
diff --git a/modular_nova/modules/assault_operatives/code/equipment_items/misc_items.dm b/modular_nova/modules/assault_operatives/code/equipment_items/misc_items.dm
new file mode 100644
index 00000000000..c3d1eefc080
--- /dev/null
+++ b/modular_nova/modules/assault_operatives/code/equipment_items/misc_items.dm
@@ -0,0 +1,21 @@
+/obj/item/storage/pouch/medpens
+ name = "medpen pouch"
+ desc = "A pouch containing several different types of lifesaving medipens."
+ icon = 'modular_nova/modules/modular_items/icons/storage.dmi'
+ icon_state = "medpen_pouch"
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
+
+/obj/item/storage/pouch/medpens/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+ atom_storage.max_total_storage = 30
+ atom_storage.max_slots = 5
+ atom_storage.numerical_stacking = FALSE
+ atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray))
+
+/obj/item/storage/pouch/medpens/PopulateContents()
+ new /obj/item/reagent_containers/hypospray/medipen/blood_loss(src)
+ new /obj/item/reagent_containers/hypospray/medipen/oxandrolone(src)
+ new /obj/item/reagent_containers/hypospray/medipen/salacid(src)
+ new /obj/item/reagent_containers/hypospray/medipen/salbutamol(src)
+ new /obj/item/reagent_containers/hypospray/medipen/stimulants(src)
diff --git a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm b/modular_nova/modules/assault_operatives/code/equipment_items/stealth_mod.dm
similarity index 90%
rename from modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm
rename to modular_nova/modules/assault_operatives/code/equipment_items/stealth_mod.dm
index bff6ec0ffaa..1cf273777bc 100644
--- a/modular_skyrat/modules/assault_operatives/code/equipment_items/stealth_mod.dm
+++ b/modular_nova/modules/assault_operatives/code/equipment_items/stealth_mod.dm
@@ -38,8 +38,8 @@
)
skins = list(
"stealth" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/assault_operatives/icons/modsuits/mod.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/assault_operatives/icons/modsuits/wornmod.dmi',
HELMET_LAYER = NECK_LAYER,
HELMET_FLAGS = list(
UNSEALED_CLOTHING = SNUG_FIT,
@@ -75,8 +75,8 @@
wound = 25
/obj/item/mod/control/pre_equipped/stealth_operative
- worn_icon = 'modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi'
- icon = 'modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi'
+ worn_icon = 'modular_nova/modules/assault_operatives/icons/modsuits/wornmod.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/modsuits/mod.dmi'
icon_state = "stealth-control"
theme = /datum/mod_theme/covert
applied_cell = /obj/item/stock_parts/cell/hyper
diff --git a/modular_skyrat/modules/assault_operatives/code/goldeneye.dm b/modular_nova/modules/assault_operatives/code/goldeneye.dm
similarity index 98%
rename from modular_skyrat/modules/assault_operatives/code/goldeneye.dm
rename to modular_nova/modules/assault_operatives/code/goldeneye.dm
index 43a6d0be829..6780d45ef6f 100644
--- a/modular_skyrat/modules/assault_operatives/code/goldeneye.dm
+++ b/modular_nova/modules/assault_operatives/code/goldeneye.dm
@@ -75,7 +75,7 @@ SUBSYSTEM_DEF(goldeneye)
/obj/item/goldeneye_key
name = "\improper GoldenEye authentication keycard"
desc = "A high profile authentication keycard to Nanotrasen's GoldenEye defence network. It seems indestructible."
- icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/goldeneye.dmi'
icon_state = "goldeneye_key"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
max_integrity = INFINITY
@@ -104,7 +104,7 @@ SUBSYSTEM_DEF(goldeneye)
/obj/machinery/goldeneye_upload_terminal
name = "\improper GoldenEye Defnet Upload Terminal"
desc = "An ominous terminal with some ports and keypads, the screen is scrolling with illegible nonsense. It has a strange marking on the side, a red ring with a gold circle within."
- icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/goldeneye.dmi'
icon_state = "goldeneye_terminal"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
density = TRUE
diff --git a/modular_skyrat/modules/assault_operatives/code/interrogator.dm b/modular_nova/modules/assault_operatives/code/interrogator.dm
similarity index 99%
rename from modular_skyrat/modules/assault_operatives/code/interrogator.dm
rename to modular_nova/modules/assault_operatives/code/interrogator.dm
index c93a0553a80..f2a67a5e477 100644
--- a/modular_skyrat/modules/assault_operatives/code/interrogator.dm
+++ b/modular_nova/modules/assault_operatives/code/interrogator.dm
@@ -18,7 +18,7 @@
/obj/machinery/interrogator
name = "In-TERROR-gator"
desc = "A morraly corrupt piece of machinery used to extract the human mind into a GoldenEye authentication key. The process is said to be one of the most painful experiences someone can endure. Alt+click to start the process."
- icon = 'modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/goldeneye.dmi'
icon_state = "interrogator_open"
state_open = FALSE
density = TRUE
diff --git a/modular_skyrat/modules/assault_operatives/code/keycard_doors.dm b/modular_nova/modules/assault_operatives/code/keycard_doors.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/keycard_doors.dm
rename to modular_nova/modules/assault_operatives/code/keycard_doors.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/shuttle.dm b/modular_nova/modules/assault_operatives/code/shuttle.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/shuttle.dm
rename to modular_nova/modules/assault_operatives/code/shuttle.dm
diff --git a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm b/modular_nova/modules/assault_operatives/code/sunbeam.dm
similarity index 96%
rename from modular_skyrat/modules/assault_operatives/code/sunbeam.dm
rename to modular_nova/modules/assault_operatives/code/sunbeam.dm
index 0ef738b1803..224025034b8 100644
--- a/modular_skyrat/modules/assault_operatives/code/sunbeam.dm
+++ b/modular_nova/modules/assault_operatives/code/sunbeam.dm
@@ -9,7 +9,7 @@
/obj/effect/sunbeam
name = "\improper ICARUS Sunbeam"
desc = "A beam of light from the sun."
- icon = 'modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi'
+ icon = 'modular_nova/modules/assault_operatives/icons/sunbeam.dmi'
icon_state = "sunray_splash"
throwforce = 100
move_force = INFINITY
@@ -115,7 +115,7 @@
COOLDOWN_START(src, oblirerate_cooldown, obliteration_cooldown)
/datum/looping_sound/sunbeam
- mid_sounds = list('modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg' = 1)
+ mid_sounds = list('modular_nova/modules/assault_operatives/sound/sunbeam_loop.ogg' = 1)
mid_length = 6.7 SECONDS
volume = 100
extra_range = 25
@@ -159,7 +159,7 @@
/datum/round_event/icarus_sunbeam/announce(fake)
priority_announce("/// ICARUS SUNBEAM WEAPONS SYSTEM ACTIVATED, USE EXTREME CAUTION! ///", "GoldenEye Defence Network", ANNOUNCER_KLAXON)
- alert_sound_to_playing('modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg')
+ alert_sound_to_playing('modular_nova/modules/assault_operatives/sound/sunbeam_fire.ogg')
/datum/round_event/icarus_sunbeam/start()
var/startside = pick(GLOB.cardinals)
diff --git a/modular_skyrat/modules/assault_operatives/code/turrets.dm b/modular_nova/modules/assault_operatives/code/turrets.dm
similarity index 92%
rename from modular_skyrat/modules/assault_operatives/code/turrets.dm
rename to modular_nova/modules/assault_operatives/code/turrets.dm
index 1a4ef8975ca..47449474a37 100644
--- a/modular_skyrat/modules/assault_operatives/code/turrets.dm
+++ b/modular_nova/modules/assault_operatives/code/turrets.dm
@@ -11,7 +11,7 @@
/obj/machinery/porta_turret/syndicate/assaultops/shuttle
scan_range = 9
lethal_projectile = /obj/projectile/bullet/a357
- lethal_projectile_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg'
+ lethal_projectile_sound = 'modular_nova/modules/aesthetics/guns/sound/sniperrifle.ogg'
stun_projectile = /obj/projectile/energy/electrode
stun_projectile_sound = 'sound/weapons/taser.ogg'
max_integrity = 600
diff --git a/modular_skyrat/modules/assault_operatives/code/vending_machine.dm b/modular_nova/modules/assault_operatives/code/vending_machine.dm
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/code/vending_machine.dm
rename to modular_nova/modules/assault_operatives/code/vending_machine.dm
diff --git a/modular_skyrat/modules/assault_operatives/icons/alarm.dmi b/modular_nova/modules/assault_operatives/icons/alarm.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/alarm.dmi
rename to modular_nova/modules/assault_operatives/icons/alarm.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi b/modular_nova/modules/assault_operatives/icons/goldeneye.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/goldeneye.dmi
rename to modular_nova/modules/assault_operatives/icons/goldeneye.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns.dmi b/modular_nova/modules/assault_operatives/icons/guns/guns.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/guns/guns.dmi
rename to modular_nova/modules/assault_operatives/icons/guns/guns.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_lefthand.dmi b/modular_nova/modules/assault_operatives/icons/guns/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/guns/guns_lefthand.dmi
rename to modular_nova/modules/assault_operatives/icons/guns/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_righthand.dmi b/modular_nova/modules/assault_operatives/icons/guns/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/guns/guns_righthand.dmi
rename to modular_nova/modules/assault_operatives/icons/guns/guns_righthand.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/guns_worn.dmi b/modular_nova/modules/assault_operatives/icons/guns/guns_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/guns/guns_worn.dmi
rename to modular_nova/modules/assault_operatives/icons/guns/guns_worn.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/guns/magazines.dmi b/modular_nova/modules/assault_operatives/icons/guns/magazines.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/guns/magazines.dmi
rename to modular_nova/modules/assault_operatives/icons/guns/magazines.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi b/modular_nova/modules/assault_operatives/icons/modsuits/mod.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/modsuits/mod.dmi
rename to modular_nova/modules/assault_operatives/icons/modsuits/mod.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi b/modular_nova/modules/assault_operatives/icons/modsuits/wornmod.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/modsuits/wornmod.dmi
rename to modular_nova/modules/assault_operatives/icons/modsuits/wornmod.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/radial.dmi b/modular_nova/modules/assault_operatives/icons/radial.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/radial.dmi
rename to modular_nova/modules/assault_operatives/icons/radial.dmi
diff --git a/modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi b/modular_nova/modules/assault_operatives/icons/sunbeam.dmi
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/icons/sunbeam.dmi
rename to modular_nova/modules/assault_operatives/icons/sunbeam.dmi
diff --git a/modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg b/modular_nova/modules/assault_operatives/sound/assault_operatives_greet.ogg
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/sound/assault_operatives_greet.ogg
rename to modular_nova/modules/assault_operatives/sound/assault_operatives_greet.ogg
diff --git a/modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg b/modular_nova/modules/assault_operatives/sound/goldeneyealarm.ogg
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/sound/goldeneyealarm.ogg
rename to modular_nova/modules/assault_operatives/sound/goldeneyealarm.ogg
diff --git a/modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg b/modular_nova/modules/assault_operatives/sound/icarus_alarm.ogg
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg
rename to modular_nova/modules/assault_operatives/sound/icarus_alarm.ogg
diff --git a/modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg b/modular_nova/modules/assault_operatives/sound/sunbeam_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/sound/sunbeam_fire.ogg
rename to modular_nova/modules/assault_operatives/sound/sunbeam_fire.ogg
diff --git a/modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg b/modular_nova/modules/assault_operatives/sound/sunbeam_loop.ogg
similarity index 100%
rename from modular_skyrat/modules/assault_operatives/sound/sunbeam_loop.ogg
rename to modular_nova/modules/assault_operatives/sound/sunbeam_loop.ogg
diff --git a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm b/modular_nova/modules/automapper/code/area_spawn_entries.dm
similarity index 94%
rename from modular_skyrat/modules/automapper/code/area_spawn_entries.dm
rename to modular_nova/modules/automapper/code/area_spawn_entries.dm
index 63dde6f9d71..7d1512ebd1a 100644
--- a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm
+++ b/modular_nova/modules/automapper/code/area_spawn_entries.dm
@@ -100,11 +100,6 @@
desired_atom = /obj/effect/landmark/start/customs_agent
target_areas = list(/area/station/security/checkpoint/supply, /area/station/cargo/storage)
-/datum/area_spawn_over/prison_curtains
- desired_atom = /obj/structure/curtain/cloth/prison
- over_atoms = list(/obj/structure/window/reinforced/fulltile, /obj/machinery/door/airlock/security/glass, /obj/machinery/door/airlock/public/glass)
- target_areas = list(/area/station/security/prison/safe)
-
/datum/area_spawn/corrections_officer_landmark
desired_atom = /obj/effect/landmark/start/corrections_officer
target_areas = list(/area/station/security/brig, /area/station/security/prison/)
diff --git a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm
similarity index 99%
rename from modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm
rename to modular_nova/modules/automapper/code/area_spawn_subsystem.dm
index 8e03d68a773..d9a4406a24c 100644
--- a/modular_skyrat/modules/automapper/code/area_spawn_subsystem.dm
+++ b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm
@@ -347,7 +347,7 @@ SUBSYSTEM_DEF(area_spawn)
/obj/effect/turf_test
name = "PASS"
- icon = 'modular_skyrat/modules/automapper/icons/area_test.dmi'
+ icon = 'modular_nova/modules/automapper/icons/area_test.dmi'
icon_state = "area_test"
color = COLOR_BLUE
anchored = TRUE
diff --git a/modular_skyrat/modules/automapper/code/automap_template.dm b/modular_nova/modules/automapper/code/automap_template.dm
similarity index 100%
rename from modular_skyrat/modules/automapper/code/automap_template.dm
rename to modular_nova/modules/automapper/code/automap_template.dm
diff --git a/modular_skyrat/modules/automapper/code/automapper_subsystem.dm b/modular_nova/modules/automapper/code/automapper_subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/automapper/code/automapper_subsystem.dm
rename to modular_nova/modules/automapper/code/automapper_subsystem.dm
diff --git a/modular_skyrat/modules/automapper/icons/area_test.dmi b/modular_nova/modules/automapper/icons/area_test.dmi
similarity index 100%
rename from modular_skyrat/modules/automapper/icons/area_test.dmi
rename to modular_nova/modules/automapper/icons/area_test.dmi
diff --git a/modular_skyrat/modules/automapper/readme.md b/modular_nova/modules/automapper/readme.md
similarity index 100%
rename from modular_skyrat/modules/automapper/readme.md
rename to modular_nova/modules/automapper/readme.md
diff --git a/modular_skyrat/modules/autotransfer/code/autotransfer.dm b/modular_nova/modules/autotransfer/code/autotransfer.dm
similarity index 100%
rename from modular_skyrat/modules/autotransfer/code/autotransfer.dm
rename to modular_nova/modules/autotransfer/code/autotransfer.dm
diff --git a/modular_skyrat/modules/autotransfer/code/autotransfer_config.dm b/modular_nova/modules/autotransfer/code/autotransfer_config.dm
similarity index 100%
rename from modular_skyrat/modules/autotransfer/code/autotransfer_config.dm
rename to modular_nova/modules/autotransfer/code/autotransfer_config.dm
diff --git a/modular_skyrat/modules/autotransfer/code/shuttle.dm b/modular_nova/modules/autotransfer/code/shuttle.dm
similarity index 100%
rename from modular_skyrat/modules/autotransfer/code/shuttle.dm
rename to modular_nova/modules/autotransfer/code/shuttle.dm
diff --git a/modular_skyrat/modules/autotransfer/code/transfer_vote.dm b/modular_nova/modules/autotransfer/code/transfer_vote.dm
similarity index 100%
rename from modular_skyrat/modules/autotransfer/code/transfer_vote.dm
rename to modular_nova/modules/autotransfer/code/transfer_vote.dm
diff --git a/modular_skyrat/modules/autotransfer/readme.md b/modular_nova/modules/autotransfer/readme.md
similarity index 100%
rename from modular_skyrat/modules/autotransfer/readme.md
rename to modular_nova/modules/autotransfer/readme.md
diff --git a/modular_nova/modules/awaymissions_skyrat/code/gateway_key.dm b/modular_nova/modules/awaymissions_skyrat/code/gateway_key.dm
new file mode 100644
index 00000000000..5a0bc59cef5
--- /dev/null
+++ b/modular_nova/modules/awaymissions_skyrat/code/gateway_key.dm
@@ -0,0 +1,8 @@
+/obj/item/key/gateway
+ name = "global recall key"
+ desc = "Recall to the Global Gateway."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/abductorkey.dmi'
+ icon_state = "gateway_key"
+ resistance_flags = INDESTRUCTIBLE
+
+
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi b/modular_nova/modules/awaymissions_skyrat/icons/abductorkey.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/abductorkey.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi b/modular_nova/modules/awaymissions_skyrat/icons/abductors.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/abductors.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi b/modular_nova/modules/awaymissions_skyrat/icons/alienblaster.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/alienblaster.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi b/modular_nova/modules/awaymissions_skyrat/icons/alienhand.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/alienhand.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi b/modular_nova/modules/awaymissions_skyrat/icons/alienhand2.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/alienhand2.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi b/modular_nova/modules/awaymissions_skyrat/icons/ballistic.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/ballistic.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi b/modular_nova/modules/awaymissions_skyrat/icons/ballistic_l.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/ballistic_l.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi b/modular_nova/modules/awaymissions_skyrat/icons/ballistic_r.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/ballistic_r.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi b/modular_nova/modules/awaymissions_skyrat/icons/courses.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/courses.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi b/modular_nova/modules/awaymissions_skyrat/icons/freeman.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/freeman.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi b/modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi b/modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi b/modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi b/modular_nova/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi b/modular_nova/modules/awaymissions_skyrat/icons/mre_hecu.dmi
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi
rename to modular_nova/modules/awaymissions_skyrat/icons/mre_hecu.dmi
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm
rename to modular_nova/modules/awaymissions_skyrat/mothership_astrum/abductor_ai.dm
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/area.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/area.dm
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/area.dm
rename to modular_nova/modules/awaymissions_skyrat/mothership_astrum/area.dm
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/fluff.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/fluff.dm
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/fluff.dm
rename to modular_nova/modules/awaymissions_skyrat/mothership_astrum/fluff.dm
diff --git a/modular_nova/modules/awaymissions_skyrat/mothership_astrum/gear.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/gear.dm
new file mode 100644
index 00000000000..de38384abaa
--- /dev/null
+++ b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/gear.dm
@@ -0,0 +1,68 @@
+/**
+ * Weaponry
+ */
+
+/obj/item/gun/energy/alien/zeta
+ name = "Zeta Blaster"
+ desc = "Having this too close to your face makes you start to taste blood, is this safe?"
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/alienblaster.dmi'
+ lefthand_file = 'modular_nova/modules/awaymissions_skyrat/icons/alienhand.dmi'
+ righthand_file = 'modular_nova/modules/awaymissions_skyrat/icons/alienhand2.dmi'
+ icon_state = "alienblaster"
+ inhand_icon_state = "alienblaster"
+ pin = /obj/item/firing_pin
+ selfcharge = TRUE
+
+/obj/item/gun/energy/alien/astrum
+ name = "alien energy pistol"
+ desc = "A seemingly complicated gun, that isn't so complicated after all."
+ ammo_type = list(/obj/item/ammo_casing/energy/laser)
+ pin = /obj/item/firing_pin
+ icon_state = "alienpistol"
+ inhand_icon_state = "alienpistol"
+ cell_type = /obj/item/stock_parts/cell/pulse/pistol
+
+
+/**
+ * Armour
+ */
+
+/obj/item/clothing/suit/armor/abductor/astrum
+ name = "agent vest"
+ desc = "You feel like you're wearing the suit wrong, and you have no idea how to operate its systems."
+ icon = 'icons/obj/antags/abductor.dmi'
+ icon_state = "vest_combat"
+ inhand_icon_state = "armor"
+ blood_overlay_type = "armor"
+ armor_type = /datum/armor/abductor_astrum
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ allowed = null // populated on init with armour vest defaults
+
+/datum/armor/abductor_astrum
+ melee = 40
+ bullet = 50
+ laser = 50
+ energy = 50
+ bomb = 20
+ bio = 50
+ fire = 90
+ acid = 90
+
+/obj/item/clothing/head/helmet/astrum
+ name = "agent headgear"
+ desc = "An exceptionally robust helmet. For alien standards, that is."
+ icon_state = "alienhelmet"
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
+ armor_type = /datum/armor/helmet_astrum
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+
+/datum/armor/helmet_astrum
+ melee = 40
+ bullet = 30
+ laser = 30
+ energy = 40
+ bomb = 50
+ bio = 90
+ fire = 100
+ acid = 100
+ wound = 15
diff --git a/modular_nova/modules/awaymissions_skyrat/mothership_astrum/mob.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/mob.dm
new file mode 100644
index 00000000000..79a562f231a
--- /dev/null
+++ b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/mob.dm
@@ -0,0 +1,139 @@
+/*
+* MELEE
+*/
+
+/mob/living/basic/abductor
+ name = "abductor scientist"
+ desc = "From the depths of space."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/abductors.dmi'
+ icon_state = "abductor_scientist"
+ icon_living = "abductor_scientist"
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ sentience_type = SENTIENCE_HUMANOID
+ faction = list(ROLE_ABDUCTOR)
+
+ maxHealth = 120
+ health = 120
+ unsuitable_atmos_damage = 7.5
+ basic_mob_flags = DEL_ON_DEATH
+
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attack_verb_continuous = "punches"
+ attack_verb_simple = "punch"
+ attack_sound = 'sound/weapons/punch1.ogg'
+
+ combat_mode = TRUE
+ status_flags = CANPUSH
+ speed = 2
+
+ ai_controller = /datum/ai_controller/basic_controller/abductor
+
+ /// What this mob drops on death
+ var/list/loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot)
+
+/mob/living/basic/abductor/Initialize(mapload)
+ . = ..()
+ if(LAZYLEN(loot))
+ loot = string_list(loot)
+ AddElement(/datum/element/death_drops, loot)
+ AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE)
+
+
+// More damaging variant
+/mob/living/basic/abductor/melee
+ icon_state = "abductor_scientist_melee"
+ icon_living = "abductor_scientist_melee"
+ status_flags = null
+
+ melee_damage_lower = 10
+ melee_damage_upper = 20
+ attack_verb_continuous = "slashes"
+ attack_verb_simple = "slash"
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ attack_vis_effect = ATTACK_EFFECT_SLASH
+
+
+// Tankier, more damaging variant
+/mob/living/basic/abductor/agent
+ name = "abductor agent"
+ icon_state = "abductor_agent"
+ icon_living = "abductor_agent"
+
+ health = 160
+ maxHealth = 160
+ loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot)
+
+ melee_damage_lower = 15
+ melee_damage_upper = 22
+
+
+/*
+* RANGED
+*/
+
+/mob/living/basic/abductor/ranged
+ name = "abductor scientist"
+ icon_state = "abductor_scientist_gun"
+ icon_living = "abductor_scientist_gun"
+
+ maxHealth = 120
+ health = 120
+ loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot)
+
+ ai_controller = /datum/ai_controller/basic_controller/abductor/ranged
+
+/mob/living/basic/abductor/ranged/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser)
+
+
+// Tankier variant
+/mob/living/basic/abductor/ranged/agent
+ name = "abductor combat specialist"
+ icon_state = "abductor_agent_combat_gun"
+ icon_living = "abductor_agent_combat_gun"
+
+ maxHealth = 140
+ health = 140
+ loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot)
+
+
+/**
+ * BOSS
+ */
+
+/mob/living/simple_animal/hostile/megafauna/hierophant/astrum
+ name = "abductor captain"
+ desc = "The one you've come here for. Finish this."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/abductors.dmi'
+ icon_state = "abductor_agent_combat"
+ icon_living = "abductor_agent_combat"
+ icon_gib = "syndicate_gib"
+ gps_name = "Captain's Signal"
+ mouse_opacity = MOUSE_OPACITY_ICON
+
+ health = 1750
+ maxHealth = 1750
+ health_doll_icon = "pandora"
+ death_message = "falls to their knees before exploding into a ball of gore."
+
+ attack_verb_continuous = "attacks"
+ attack_verb_simple = "attack"
+
+/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE)
+ . = ..()
+ if(. != BULLET_ACT_HIT)
+ return
+
+ if(!hitting_projectile.is_hostile_projectile())
+ return
+
+ apply_damage(hitting_projectile.damage, hitting_projectile.damage_type) // no damage reduction
+
+/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/death(gibbed)
+ spawn_gibs()
+ spawn_gibs()
+ new /obj/item/key/gateway(get_turf(src))
+ new /obj/item/gun/energy/alien/zeta(get_turf(src))
+ qdel(src)
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm
rename to modular_nova/modules/awaymissions_skyrat/mothership_astrum/mob_spawn.dm
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/spawners.dm b/modular_nova/modules/awaymissions_skyrat/mothership_astrum/spawners.dm
similarity index 100%
rename from modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/spawners.dm
rename to modular_nova/modules/awaymissions_skyrat/mothership_astrum/spawners.dm
diff --git a/modular_skyrat/modules/banning/code/skyrat_bans.dm b/modular_nova/modules/banning/code/skyrat_bans.dm
similarity index 100%
rename from modular_skyrat/modules/banning/code/skyrat_bans.dm
rename to modular_nova/modules/banning/code/skyrat_bans.dm
diff --git a/modular_skyrat/modules/barricades/code/barricade.dm b/modular_nova/modules/barricades/code/barricade.dm
similarity index 95%
rename from modular_skyrat/modules/barricades/code/barricade.dm
rename to modular_nova/modules/barricades/code/barricade.dm
index 02270d9421f..45096b3052f 100644
--- a/modular_skyrat/modules/barricades/code/barricade.dm
+++ b/modular_nova/modules/barricades/code/barricade.dm
@@ -1,7 +1,7 @@
// Snow, wood, sandbags, metal, plasteel
/obj/structure/deployable_barricade
- icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi'
+ icon = 'modular_nova/modules/barricades/icons/barricade.dmi'
anchored = TRUE
density = TRUE
layer = BELOW_OBJ_LAYER
@@ -198,9 +198,9 @@
. = ..()
if(is_wired)
if(!closed)
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_wire")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_wire")
else
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_closed_wire")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_closed_wire")
/obj/structure/deployable_barricade/verb/rotate()
set name = "Rotate barricade counterclockwise <"
@@ -286,7 +286,7 @@
/obj/structure/deployable_barricade/wooden
name = "wooden barricade"
desc = "A wall hammered out of wooden planks may not even look very strong, but it still provides some protection."
- icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi'
+ icon = 'modular_nova/modules/barricades/icons/barricade.dmi'
icon_state = "wooden"
max_integrity = 100
layer = OBJ_LAYER
@@ -412,11 +412,11 @@
damage_state = 0
switch(barricade_upgrade_type)
if(BARRICADE_TYPE_BOMB)
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+explosive_upgrade_[damage_state]")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+explosive_upgrade_[damage_state]")
if(BARRICADE_TYPE_MELEE)
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+brute_upgrade_[damage_state]")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+brute_upgrade_[damage_state]")
if(BARRICADE_TYPE_ACID)
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "+burn_upgrade_[damage_state]")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "+burn_upgrade_[damage_state]")
/obj/structure/deployable_barricade/metal/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/sheet/iron))
@@ -452,7 +452,7 @@
to_chat(user, span_warning("You need at least [BARRICADE_UPGRADE_REQUIRED_SHEETS] to upgrade [src]!"))
return FALSE
- var/static/list/cade_types = list(BARRICADE_TYPE_BOMB = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "explosive_obj"), BARRICADE_TYPE_MELEE = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "brute_obj"), BARRICADE_TYPE_ACID = image(icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "burn_obj"))
+ var/static/list/cade_types = list(BARRICADE_TYPE_BOMB = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "explosive_obj"), BARRICADE_TYPE_MELEE = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "brute_obj"), BARRICADE_TYPE_ACID = image(icon = 'modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "burn_obj"))
var/choice = show_radial_menu(user, src, cade_types, require_near = TRUE, tooltips = TRUE)
user.visible_message(span_notice("[user] starts attaching [choice] to [src]."),
@@ -733,7 +733,7 @@
for(var/direction in GLOB.cardinals)
for(var/obj/structure/deployable_barricade/metal/plasteel/cade in get_step(src, direction))
if(((dir & (NORTH|SOUTH) && get_dir(src, cade) & (EAST|WEST)) || (dir & (EAST|WEST) && get_dir(src, cade) & (NORTH|SOUTH))) && dir == cade.dir && cade.linked && cade.closed == closed)
- . += image('modular_skyrat/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_[closed ? "closed" : "open"]_connection_[get_dir(src, cade)]")
+ . += image('modular_nova/modules/barricades/icons/barricade.dmi', icon_state = "[barricade_type]_[closed ? "closed" : "open"]_connection_[get_dir(src, cade)]")
/obj/structure/deployable_barricade/metal/plasteel/ex_act(severity)
switch(severity)
@@ -754,7 +754,7 @@
/obj/item/quickdeploy
name = "C.U.C.K.S"
desc = "Compact Universal Complex Kinetic Self-expanding Barricade. Great for deploying quick fortifications."
- icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi'
+ icon = 'modular_nova/modules/barricades/icons/barricade.dmi'
w_class = WEIGHT_CLASS_SMALL //While this is small, normal 50 stacks of metal is NORMAL so this is a bit on the bad space to cade ratio
var/delay = 0 //Delay on deploying the thing
var/atom/movable/thing_to_deploy = null
@@ -818,7 +818,7 @@
icon_state = "plasteel"
/obj/item/storage/barricade
- icon = 'modular_skyrat/modules/barricades/icons/barricade.dmi'
+ icon = 'modular_nova/modules/barricades/icons/barricade.dmi'
name = "C.U.C.K.S box"
desc = "Contains several deployable barricades."
icon_state = "box_metal"
diff --git a/modular_skyrat/modules/barricades/icons/barricade.dmi b/modular_nova/modules/barricades/icons/barricade.dmi
similarity index 100%
rename from modular_skyrat/modules/barricades/icons/barricade.dmi
rename to modular_nova/modules/barricades/icons/barricade.dmi
diff --git a/modular_skyrat/modules/barsigns/code/barsigns.dm b/modular_nova/modules/barsigns/code/barsigns.dm
similarity index 100%
rename from modular_skyrat/modules/barsigns/code/barsigns.dm
rename to modular_nova/modules/barsigns/code/barsigns.dm
diff --git a/modular_skyrat/modules/barsigns/icons/barsigns.dmi b/modular_nova/modules/barsigns/icons/barsigns.dmi
similarity index 100%
rename from modular_skyrat/modules/barsigns/icons/barsigns.dmi
rename to modular_nova/modules/barsigns/icons/barsigns.dmi
diff --git a/modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi b/modular_nova/modules/barsigns/icons/barsigns96x96.dmi
similarity index 100%
rename from modular_skyrat/modules/barsigns/icons/barsigns96x96.dmi
rename to modular_nova/modules/barsigns/icons/barsigns96x96.dmi
diff --git a/modular_skyrat/modules/barsigns/readme.md b/modular_nova/modules/barsigns/readme.md
similarity index 100%
rename from modular_skyrat/modules/barsigns/readme.md
rename to modular_nova/modules/barsigns/readme.md
diff --git a/modular_nova/modules/basic_mobs/code/bananaspider.dm b/modular_nova/modules/basic_mobs/code/bananaspider.dm
new file mode 100644
index 00000000000..eba6ef3e723
--- /dev/null
+++ b/modular_nova/modules/basic_mobs/code/bananaspider.dm
@@ -0,0 +1,65 @@
+// Ported from Citadel Station
+
+/mob/living/basic/banana_spider
+ name = "banana spider"
+ desc = "What the fuck is this abomination?"
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
+ icon_state = "bananaspider"
+ icon_dead = "bananaspider_peel"
+ health = 1
+ maxHealth = 1
+ speed = 2
+ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
+ mob_biotypes = MOB_ORGANIC|MOB_BUG
+ mob_size = MOB_SIZE_TINY
+ density = TRUE
+ verb_say = "chitters"
+ verb_ask = "chitters inquisitively"
+ verb_exclaim = "chitters loudly"
+ verb_yell = "chitters loudly"
+ basic_mob_flags = DEL_ON_DEATH
+ ai_controller = /datum/ai_controller/basic_controller/cockroach/banana_spider
+
+/mob/living/basic/banana_spider/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/slippery, 40)
+ var/static/list/banana_drops = list(/obj/item/food/deadbanana_spider)
+ AddElement(/datum/element/death_drops, banana_drops)
+ AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY)
+ AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1)
+
+/datum/ai_controller/basic_controller/cockroach/banana_spider
+ idle_behavior = /datum/idle_behavior/idle_random_walk/banana_spider
+
+/datum/idle_behavior/idle_random_walk/banana_spider
+ walk_chance = 10
+
+/obj/item/food/deadbanana_spider
+ name = "dead banana spider"
+ desc = "Thank god it's gone...but it does look slippery."
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
+ icon_state = "bananaspider_peel"
+ food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2)
+ foodtypes = GORE | MEAT | RAW
+ grind_results = list(/datum/reagent/blood = 20, /datum/reagent/consumable/liquidgibs = 5)
+ juice_typepath = /datum/reagent/consumable/banana
+
+
+/obj/item/food/deadbanana_spider/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/slippery, 20)
+
+/mob/living/basic/spider/giant/badnana_spider
+ name = "badnana spider"
+ desc = "WHY WOULD GOD ALLOW THIS?!"
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
+ icon_state = "badnanaspider" // created by Coldstorm on the Skyrat Discord
+ icon_living = "badnanaspider"
+ icon_dead = "badnanaspider_d"
+ maxHealth = 40
+ health = 40
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ speed = -0.5
+ faction = list(FACTION_SPIDER)
+
diff --git a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm b/modular_nova/modules/basic_mobs/code/chinchilla.dm
similarity index 93%
rename from modular_skyrat/modules/basic_mobs/code/chinchilla.dm
rename to modular_nova/modules/basic_mobs/code/chinchilla.dm
index c52fd3cb1dd..2a58cbc8c31 100644
--- a/modular_skyrat/modules/basic_mobs/code/chinchilla.dm
+++ b/modular_nova/modules/basic_mobs/code/chinchilla.dm
@@ -2,9 +2,9 @@
name = "chinchilla"
desc = "They're like a mouse, but Australian."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
- held_lh = 'modular_skyrat/master_files/icons/mob/inhands/pets_held_lh.dmi'
- held_rh = 'modular_skyrat/master_files/icons/mob/inhands/pets_held_rh.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
+ held_lh = 'modular_nova/master_files/icons/mob/inhands/pets_held_lh.dmi'
+ held_rh = 'modular_nova/master_files/icons/mob/inhands/pets_held_rh.dmi'
icon_state = "chinchilla_white"
icon_living = "chinchilla_white"
icon_dead = "chinchilla_white_dead"
diff --git a/modular_skyrat/modules/basic_mobs/code/kiwi.dm b/modular_nova/modules/basic_mobs/code/kiwi.dm
similarity index 95%
rename from modular_skyrat/modules/basic_mobs/code/kiwi.dm
rename to modular_nova/modules/basic_mobs/code/kiwi.dm
index e7921514117..20cdfefccb7 100644
--- a/modular_skyrat/modules/basic_mobs/code/kiwi.dm
+++ b/modular_nova/modules/basic_mobs/code/kiwi.dm
@@ -1,7 +1,7 @@
/mob/living/basic/kiwi
name = "kiwi"
desc = "It's a kiwi!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
+ icon = 'modular_nova/master_files/icons/mob/newmobs.dmi'
icon_state = "kiwi"
icon_living = "kiwi"
icon_dead = "kiwi_dead"
diff --git a/modular_skyrat/modules/better_vox/code/vox_bodycolor.dm b/modular_nova/modules/better_vox/code/vox_bodycolor.dm
similarity index 100%
rename from modular_skyrat/modules/better_vox/code/vox_bodycolor.dm
rename to modular_nova/modules/better_vox/code/vox_bodycolor.dm
diff --git a/modular_nova/modules/better_vox/code/vox_bodyparts.dm b/modular_nova/modules/better_vox/code/vox_bodyparts.dm
new file mode 100644
index 00000000000..543443dd087
--- /dev/null
+++ b/modular_nova/modules/better_vox/code/vox_bodyparts.dm
@@ -0,0 +1,57 @@
+// voxs!
+/obj/item/bodypart/head/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_head"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM | BODYTYPE_SNOUTED
+ is_dimorphic = FALSE
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
+/obj/item/bodypart/chest/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_chest"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
+ is_dimorphic = FALSE
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
+/obj/item/bodypart/arm/left/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_l_arm"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
+/obj/item/bodypart/arm/right/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_r_arm"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
+/obj/item/bodypart/leg/left/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_l_leg"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
+/obj/item/bodypart/leg/right/mutant/vox_primalis
+ icon_static = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_greyscale = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
+ icon_state = "vox_primalis_r_leg"
+ bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
+ should_draw_greyscale = FALSE
+ limb_id = SPECIES_VOX_PRIMALIS
+
diff --git a/modular_skyrat/modules/better_vox/code/vox_clothing.dm b/modular_nova/modules/better_vox/code/vox_clothing.dm
similarity index 100%
rename from modular_skyrat/modules/better_vox/code/vox_clothing.dm
rename to modular_nova/modules/better_vox/code/vox_clothing.dm
diff --git a/modular_skyrat/modules/better_vox/code/vox_species.dm b/modular_nova/modules/better_vox/code/vox_species.dm
similarity index 99%
rename from modular_skyrat/modules/better_vox/code/vox_species.dm
rename to modular_nova/modules/better_vox/code/vox_species.dm
index a8c2d4c0e2e..1e3be841bb4 100644
--- a/modular_skyrat/modules/better_vox/code/vox_species.dm
+++ b/modular_nova/modules/better_vox/code/vox_species.dm
@@ -1,7 +1,7 @@
/datum/species/vox_primalis
name = "Vox Primalis"
id = SPECIES_VOX_PRIMALIS
- eyes_icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi'
can_augment = FALSE
body_size_restricted = TRUE
digitigrade_customization = DIGITIGRADE_NEVER // We have our own unique sprites!
diff --git a/modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm b/modular_nova/modules/better_vox/code/vox_sprite_accessories.dm
similarity index 91%
rename from modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm
rename to modular_nova/modules/better_vox/code/vox_sprite_accessories.dm
index cedb4bc9afb..b9f74f23e6f 100644
--- a/modular_skyrat/modules/better_vox/code/vox_sprite_accessories.dm
+++ b/modular_nova/modules/better_vox/code/vox_sprite_accessories.dm
@@ -1,6 +1,6 @@
//The tail
/datum/sprite_accessory/tails/vox_primalis
- icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi'
name = "Vox Primalis Tail"
icon_state = "vox"
color_src = 0
@@ -25,7 +25,7 @@
// HAIR
/datum/sprite_accessory/hair/vox_primalis
- icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi'
recommended_species = list(SPECIES_VOX_PRIMALIS)
name = "Vox Primalis Shortquills"
icon_state = "vox_shortquills_s"
@@ -80,7 +80,7 @@
// MARKINGS
/datum/body_marking/vox_primalis
- icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi'
default_color = "#64e8ff"
recommended_species = list(SPECIES_VOX_PRIMALIS)
affected_bodyparts = CHEST
@@ -116,7 +116,7 @@
// THE BEAK
/datum/sprite_accessory/snouts/vox_primalis_beak
- icon = 'modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi'
+ icon = 'modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi'
name = "Vox Primalis Beak"
icon_state = "vox"
color_src = 0
diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/accessories/vox_bodymarkings.dmi
rename to modular_nova/modules/better_vox/icons/accessories/vox_bodymarkings.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/accessories/vox_hair.dmi
rename to modular_nova/modules/better_vox/icons/accessories/vox_hair.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/accessories/vox_snout.dmi
rename to modular_nova/modules/better_vox/icons/accessories/vox_snout.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi b/modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/accessories/vox_tail.dmi
rename to modular_nova/modules/better_vox/icons/accessories/vox_tail.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi
rename to modular_nova/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_eyes.dmi
rename to modular_nova/modules/better_vox/icons/bodyparts/vox_eyes.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/bodyparts/vox_yellow.dmi b/modular_nova/modules/better_vox/icons/bodyparts/vox_yellow.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/bodyparts/vox_yellow.dmi
rename to modular_nova/modules/better_vox/icons/bodyparts/vox_yellow.dmi
diff --git a/modular_nova/modules/better_vox/icons/clothing/back.dmi b/modular_nova/modules/better_vox/icons/clothing/back.dmi
new file mode 100644
index 00000000000..42342b96804
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/back.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/belt.dmi b/modular_nova/modules/better_vox/icons/clothing/belt.dmi
new file mode 100644
index 00000000000..96e88beb2a8
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/belt.dmi differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/color_gags_vox.dmi b/modular_nova/modules/better_vox/icons/clothing/color_gags_vox.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/clothing/color_gags_vox.dmi
rename to modular_nova/modules/better_vox/icons/clothing/color_gags_vox.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/ears.dmi b/modular_nova/modules/better_vox/icons/clothing/ears.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/clothing/ears.dmi
rename to modular_nova/modules/better_vox/icons/clothing/ears.dmi
diff --git a/modular_nova/modules/better_vox/icons/clothing/eyes.dmi b/modular_nova/modules/better_vox/icons/clothing/eyes.dmi
new file mode 100644
index 00000000000..26b37734495
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/eyes.dmi differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/feet.dmi b/modular_nova/modules/better_vox/icons/clothing/feet.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/clothing/feet.dmi
rename to modular_nova/modules/better_vox/icons/clothing/feet.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/feet_64.dmi b/modular_nova/modules/better_vox/icons/clothing/feet_64.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/clothing/feet_64.dmi
rename to modular_nova/modules/better_vox/icons/clothing/feet_64.dmi
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/hands.dmi b/modular_nova/modules/better_vox/icons/clothing/hands.dmi
similarity index 82%
rename from modular_skyrat/modules/better_vox/icons/clothing/hands.dmi
rename to modular_nova/modules/better_vox/icons/clothing/hands.dmi
index 6422ead97f5..469c38786d8 100644
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/hands.dmi and b/modular_nova/modules/better_vox/icons/clothing/hands.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/head.dmi b/modular_nova/modules/better_vox/icons/clothing/head.dmi
new file mode 100644
index 00000000000..80359e0b64a
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/head.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/helmet.dmi b/modular_nova/modules/better_vox/icons/clothing/helmet.dmi
new file mode 100644
index 00000000000..91bf16af315
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/helmet.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/mask.dmi b/modular_nova/modules/better_vox/icons/clothing/mask.dmi
new file mode 100644
index 00000000000..dbabde45004
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/mask.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/mod.dmi b/modular_nova/modules/better_vox/icons/clothing/mod.dmi
new file mode 100644
index 00000000000..cac11dd1d3e
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/mod.dmi differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi b/modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi
rename to modular_nova/modules/better_vox/icons/clothing/mod_modules.dmi
diff --git a/modular_nova/modules/better_vox/icons/clothing/neck.dmi b/modular_nova/modules/better_vox/icons/clothing/neck.dmi
new file mode 100644
index 00000000000..33762ac78ef
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/neck.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/suit.dmi b/modular_nova/modules/better_vox/icons/clothing/suit.dmi
new file mode 100644
index 00000000000..31d22fbbe83
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/suit.dmi differ
diff --git a/modular_nova/modules/better_vox/icons/clothing/uniform.dmi b/modular_nova/modules/better_vox/icons/clothing/uniform.dmi
new file mode 100644
index 00000000000..a126c64ad0e
Binary files /dev/null and b/modular_nova/modules/better_vox/icons/clothing/uniform.dmi differ
diff --git a/modular_skyrat/modules/better_vox/icons/vox_templates.dmi b/modular_nova/modules/better_vox/icons/vox_templates.dmi
similarity index 100%
rename from modular_skyrat/modules/better_vox/icons/vox_templates.dmi
rename to modular_nova/modules/better_vox/icons/vox_templates.dmi
diff --git a/modular_skyrat/modules/better_vox/readme.md b/modular_nova/modules/better_vox/readme.md
similarity index 100%
rename from modular_skyrat/modules/better_vox/readme.md
rename to modular_nova/modules/better_vox/readme.md
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/choice_beacon.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/disk.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fluff.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/fog_of_war.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/ghost_spawner.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm
similarity index 93%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm
index 08f2bf8319a..76400513882 100644
--- a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm
+++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/iv_drip.dm
@@ -2,7 +2,7 @@
name = "health station"
desc = "A wall-mounted healing mixture dispenser designed for stationary first-aid application. Old Solarian tech that got silently deprecated \
due to a massive healthcare privatization; still utilized by the CIN-backed states."
- icon = 'modular_skyrat/modules/bitrunning/icons/health_station.dmi'
+ icon = 'modular_nova/modules/bitrunning/icons/health_station.dmi'
icon_state = "health_station"
base_icon_state = "health_station"
light_range = 2
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mine.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm
similarity index 95%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm
index 57307e36649..d37988d9443 100644
--- a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm
+++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm
@@ -30,7 +30,7 @@
/// Type of bullet we use
var/casingtype = /obj/item/ammo_casing/c27_54cesarzowa
/// Sound to play when firing weapon
- var/projectilesound = 'modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg'
+ var/projectilesound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg'
/// number of burst shots
var/burst_shots = 1
/// Time between taking shots
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mod.dm
diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm
new file mode 100644
index 00000000000..1811071c5b0
--- /dev/null
+++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm
@@ -0,0 +1,75 @@
+/datum/outfit/solfed_bitrun
+ name = "Bitrunning SolFed Marine"
+
+ uniform = /obj/item/clothing/under/rank/security/officer/hecu
+ head = null
+ mask = /obj/item/clothing/mask/gas/hecu2
+ gloves = /obj/item/clothing/gloves/combat
+ suit = null
+ shoes = /obj/item/clothing/shoes/combat
+ back = /obj/item/storage/backpack/ert/odst/hecu
+ glasses = null
+ ears = /obj/item/radio/headset/headset_faction/bowman
+ id = /obj/item/card/id/advanced/solfed
+ r_hand = null
+ l_hand = null
+ backpack_contents = null
+ belt = null
+ id_trim = /datum/id_trim/solfed_bitrun
+
+/datum/id_trim/solfed_bitrun
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
+ assignment = "SolFed Marine"
+ trim_state = "trim_solfed"
+ department_color = COLOR_SOLFED_GOLD
+ subdepartment_color = COLOR_SOLFED_GOLD
+ sechud_icon_state = SECHUD_SOLFED
+
+/datum/outfit/cin_soldier_corpse
+ name = "Coalition Operative Corpse"
+ uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest
+ suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest
+ shoes = /obj/item/clothing/shoes/combat
+ gloves = /obj/item/clothing/gloves/fingerless
+ ears = /obj/item/radio/headset/cybersun
+ mask = /obj/item/clothing/mask/balaclavaadjust
+ head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest
+ back = /obj/item/storage/backpack/industrial/cin_surplus/forest
+ belt = /obj/item/storage/belt/military/cin_surplus/forest
+ id = /obj/item/card/id/advanced
+ id_trim = /datum/id_trim/nri_raider/cin
+
+/datum/outfit/cin_soldier_player
+ name = "Coalition Operative SNPC"
+ uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest
+ suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest
+ shoes = /obj/item/clothing/shoes/combat
+ gloves = /obj/item/clothing/gloves/fingerless
+ ears = /obj/item/radio/headset/cybersun
+ glasses = /obj/item/clothing/glasses/hud/health
+ mask = /obj/item/clothing/mask/gas/sechailer/swat
+ head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest
+ back = /obj/item/storage/backpack/industrial/cin_surplus/forest
+ backpack_contents = list(
+ /obj/item/storage/box/nri_survival_pack/raider,
+ /obj/item/gun/ballistic/automatic/pistol/plasma_marksman,
+ /obj/item/ammo_box/magazine/recharge/plasma_battery = 2,
+ )
+ r_hand = null
+ l_hand = null
+ belt = /obj/item/storage/belt/military/cin_surplus/forest
+ id = /obj/item/card/id/advanced
+ id_trim = /datum/id_trim/nri_raider/cin
+
+/datum/outfit/cin_soldier_player/post_equip(mob/living/carbon/human/user, visualsOnly)
+ . = ..()
+ user.faction |= ROLE_SYNDICATE
+
+ // make sure we update the ID's name too
+ var/obj/item/card/id/id_card = user.wear_id
+ if(istype(id_card))
+ id_card.registered_name = user.real_name
+ id_card.update_label()
+
+/datum/id_trim/nri_raider/cin
+ assignment = "CIN Operative"
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/turf.dm
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm
similarity index 100%
rename from modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm
rename to modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/virtual_domain.dm
diff --git a/modular_skyrat/modules/bitrunning/icons/health_station.dmi b/modular_nova/modules/bitrunning/icons/health_station.dmi
similarity index 100%
rename from modular_skyrat/modules/bitrunning/icons/health_station.dmi
rename to modular_nova/modules/bitrunning/icons/health_station.dmi
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/__armament_bodyarmor.dm b/modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/__armament_bodyarmor.dm
rename to modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/_armament_primary.dm
rename to modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/_armaments_secondary.dm b/modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/_armaments_secondary.dm
rename to modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_explosives.dm b/modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/armament_explosives.dm
rename to modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_medical.dm b/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/armament_medical.dm
rename to modular_nova/modules/black_mesa/code/armaments/armament_medical.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_melee.dm b/modular_nova/modules/black_mesa/code/armaments/armament_melee.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/armament_melee.dm
rename to modular_nova/modules/black_mesa/code/armaments/armament_melee.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_miscellaneous.dm b/modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/armament_miscellaneous.dm
rename to modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm b/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/armament_utility.dm
rename to modular_nova/modules/black_mesa/code/armaments/armament_utility.dm
diff --git a/modular_skyrat/modules/black_mesa/code/armaments/hecu_armament_station.dm b/modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/armaments/hecu_armament_station.dm
rename to modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm
diff --git a/modular_nova/modules/black_mesa/code/armor.dm b/modular_nova/modules/black_mesa/code/armor.dm
new file mode 100644
index 00000000000..51d69cc73cc
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/armor.dm
@@ -0,0 +1,75 @@
+/obj/item/clothing/suit/armor/vest/hecu
+ name = "combat vest"
+ desc = "Vest designed to take heavy beating and probably keep the user alive in the process."
+ armor_type = /datum/armor/vest_hecu
+ icon_state = "ceramic_vest"
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Basic" = list(
+ RESKIN_ICON_STATE = "ceramic_vest",
+ RESKIN_WORN_ICON_STATE = "ceramic_vest"
+ ),
+ "Corpsman" = list(
+ RESKIN_ICON_STATE = "ceramic_vest_medic",
+ RESKIN_WORN_ICON_STATE = "ceramic_vest_medic"
+ ),
+ "Basic Black" = list(
+ RESKIN_ICON_STATE = "ceramic_vest_black",
+ RESKIN_WORN_ICON_STATE = "ceramic_vest_black"
+ ),
+ "Corpsman Black" = list(
+ RESKIN_ICON_STATE = "ceramic_vest_medic_black",
+ RESKIN_WORN_ICON_STATE = "ceramic_vest_medic_black"
+ ),
+ )
+
+/datum/armor/vest_hecu
+ melee = 40
+ bullet = 40
+ laser = 40
+ energy = 40
+ bomb = 40
+ fire = 80
+ acid = 100
+ wound = 30
+
+/obj/item/clothing/head/helmet/hecu
+ name = "combat helmet"
+ desc = "Helmet designed to take heavy beating and probably keep the user alive in the process."
+ armor_type = /datum/armor/helmet_hecu
+ icon_state = "ceramic_helmet"
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi'
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Basic" = list(
+ RESKIN_ICON_STATE = "ceramic_helmet",
+ RESKIN_WORN_ICON_STATE = "ceramic_helmet"
+ ),
+ "Corpsman" = list(
+ RESKIN_ICON_STATE = "ceramic_helmet_medic",
+ RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic"
+ ),
+ "Basic Black" = list(
+ RESKIN_ICON_STATE = "ceramic_helmet_black",
+ RESKIN_WORN_ICON_STATE = "ceramic_helmet_black"
+ ),
+ "Corpsman Black" = list(
+ RESKIN_ICON_STATE = "ceramic_helmet_medic_black",
+ RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic_black"
+ ),
+ )
+
+/datum/armor/helmet_hecu
+ melee = 30
+ bullet = 30
+ laser = 30
+ energy = 30
+ bomb = 30
+ fire = 80
+ acid = 100
+ wound = 30
diff --git a/modular_skyrat/modules/black_mesa/code/bump_teleporter.dm b/modular_nova/modules/black_mesa/code/bump_teleporter.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/bump_teleporter.dm
rename to modular_nova/modules/black_mesa/code/bump_teleporter.dm
diff --git a/modular_skyrat/modules/black_mesa/code/drops.dm b/modular_nova/modules/black_mesa/code/drops.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/drops.dm
rename to modular_nova/modules/black_mesa/code/drops.dm
diff --git a/modular_skyrat/modules/black_mesa/code/fluff.dm b/modular_nova/modules/black_mesa/code/fluff.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/fluff.dm
rename to modular_nova/modules/black_mesa/code/fluff.dm
diff --git a/modular_skyrat/modules/black_mesa/code/follow_component.dm b/modular_nova/modules/black_mesa/code/follow_component.dm
similarity index 97%
rename from modular_skyrat/modules/black_mesa/code/follow_component.dm
rename to modular_nova/modules/black_mesa/code/follow_component.dm
index 7b4b93f04c6..cd579f41661 100644
--- a/modular_skyrat/modules/black_mesa/code/follow_component.dm
+++ b/modular_nova/modules/black_mesa/code/follow_component.dm
@@ -36,7 +36,7 @@
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
parent_mob = parent
-/datum/component/follow/Destroy(force, silent)
+/datum/component/follow/Destroy(force)
UnregisterSignal(parent, COMSIG_HOSTILE_MOB_LOST_TARGET)
UnregisterSignal(parent, COMSIG_CLICK_ALT)
parent_mob = null
diff --git a/modular_skyrat/modules/black_mesa/code/gateway.dm b/modular_nova/modules/black_mesa/code/gateway.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/gateway.dm
rename to modular_nova/modules/black_mesa/code/gateway.dm
diff --git a/modular_skyrat/modules/black_mesa/code/ghost_spawners.dm b/modular_nova/modules/black_mesa/code/ghost_spawners.dm
similarity index 93%
rename from modular_skyrat/modules/black_mesa/code/ghost_spawners.dm
rename to modular_nova/modules/black_mesa/code/ghost_spawners.dm
index 416def1973a..2a5d16522c9 100644
--- a/modular_skyrat/modules/black_mesa/code/ghost_spawners.dm
+++ b/modular_nova/modules/black_mesa/code/ghost_spawners.dm
@@ -91,8 +91,8 @@
/obj/item/clothing/under/rank/security/officer/hecu //Subtype of security for armor (and because I dont want to repath it)
name = "urban camouflage BDU"
desc = "A baggy military camouflage uniform with an ERDL pattern. The range of whites and greys proves useful in urban environments."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi' //Camo goes into the syndicate.dmi
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' //Camo goes into the syndicate.dmi
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi'
icon_state = "urban_camo"
inhand_icon_state = "w_suit"
uses_advanced_reskins = FALSE
@@ -100,9 +100,9 @@
/obj/item/storage/backpack/ert/odst/hecu
name = "hecu backpack"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
icon_state = "hecu_pack"
worn_icon_state = "hecu_pack"
uses_advanced_reskins = TRUE
@@ -119,9 +119,9 @@
/obj/item/storage/belt/military/assault/hecu
name = "hecu warbelt"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
icon_state = "hecu_belt"
worn_icon_state = "hecu_belt"
uses_advanced_reskins = TRUE
diff --git a/modular_nova/modules/black_mesa/code/guns.dm b/modular_nova/modules/black_mesa/code/guns.dm
new file mode 100644
index 00000000000..0d46c86bec5
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/guns.dm
@@ -0,0 +1,35 @@
+/obj/item/gun/ballistic/automatic/laser/marksman // Cheap replacement for a gauss rifle.
+ name = "designated marksman rifle"
+ desc = "A special laser beam sniper rifle designed by a certain now defunct research facility."
+ icon_state = "ctfmarksman"
+ inhand_icon_state = "ctfmarksman"
+ accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/marksman
+ force = 15
+ weapon_weight = WEAPON_HEAVY
+ fire_delay = 4 SECONDS
+ fire_sound = 'modular_nova/modules/sec_haul/sound/chaingun_fire.ogg'
+
+/obj/item/gun/ballistic/automatic/laser/marksman/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 1.5)
+
+/obj/item/ammo_box/magazine/recharge/marksman
+ ammo_type = /obj/item/ammo_casing/laser/marksman
+ max_ammo = 5
+
+/obj/item/ammo_casing/laser/marksman
+ projectile_type = /obj/projectile/beam/marksman
+
+/obj/item/ammo_casing/laser/marksman/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/delete_on_drop)
+
+/obj/projectile/beam/marksman
+ name = "laser beam"
+ damage = 70
+ armour_penetration = 30
+ hitscan = TRUE
+ icon_state = "gaussstrong"
+ tracer_type = /obj/effect/projectile/tracer/solar
+ muzzle_type = /obj/effect/projectile/muzzle/solar
+ impact_type = /obj/effect/projectile/impact/solar
diff --git a/modular_skyrat/modules/black_mesa/code/healing_puddle.dm b/modular_nova/modules/black_mesa/code/healing_puddle.dm
similarity index 86%
rename from modular_skyrat/modules/black_mesa/code/healing_puddle.dm
rename to modular_nova/modules/black_mesa/code/healing_puddle.dm
index 4e75992c125..2aa2c36a414 100644
--- a/modular_skyrat/modules/black_mesa/code/healing_puddle.dm
+++ b/modular_nova/modules/black_mesa/code/healing_puddle.dm
@@ -14,5 +14,5 @@
/obj/structure/water_source/puddle/healing/process(seconds_per_tick)
for(var/mob/living/iterating_mob in loc)
iterating_mob.heal_overall_damage(heal_amount, heal_amount)
- playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg', 100)
+ playsound(src, 'modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg', 100)
diff --git a/modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm b/modular_nova/modules/black_mesa/code/lambda_teleporter.dm
similarity index 87%
rename from modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm
rename to modular_nova/modules/black_mesa/code/lambda_teleporter.dm
index 469341b59a5..554fa7bc8a6 100644
--- a/modular_skyrat/modules/black_mesa/code/lambda_teleporter.dm
+++ b/modular_nova/modules/black_mesa/code/lambda_teleporter.dm
@@ -1,6 +1,6 @@
/datum/looping_sound/lambda
- mid_sounds = list('modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg' = 1)
+ mid_sounds = list('modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg' = 1)
mid_length = 8.1 SECONDS
volume = 100
@@ -31,7 +31,7 @@
/obj/effect/bump_teleporter/lambda/teleport_action(atom/movable/target, turf/destination)
// Play sound before moving.
- playsound(src, 'modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg', 100)
+ playsound(src, 'modular_nova/modules/black_mesa/sound/lc_teleport.ogg', 100)
. = ..()
diff --git a/modular_skyrat/modules/black_mesa/code/mapping_fluff.dm b/modular_nova/modules/black_mesa/code/mapping_fluff.dm
similarity index 81%
rename from modular_skyrat/modules/black_mesa/code/mapping_fluff.dm
rename to modular_nova/modules/black_mesa/code/mapping_fluff.dm
index b9c880e9a82..c886da17934 100644
--- a/modular_skyrat/modules/black_mesa/code/mapping_fluff.dm
+++ b/modular_nova/modules/black_mesa/code/mapping_fluff.dm
@@ -19,15 +19,15 @@
/obj/structure/mineral_door/xen
name = "organic door"
color = "#ff8d58"
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi'
icon_state = "resin"
- openSound = 'modular_skyrat/modules/black_mesa/sound/xen_door.ogg'
- closeSound = 'modular_skyrat/modules/black_mesa/sound/xen_door.ogg'
+ openSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg'
+ closeSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg'
/obj/machinery/door/puzzle/keycard/xen
name = "locktight organic door"
desc = "An oddly robust organic looking door."
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi'
icon_state = "resin"
puzzle_id = "xen"
@@ -57,7 +57,7 @@
/obj/structure/pod
name = "supply pod"
desc = "Someone must have sent this a long way."
- icon = 'modular_skyrat/modules/black_mesa/icons/structures.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/structures.dmi'
icon_state = "pod"
pixel_x = SUPPLYPOD_X_OFFSET
anchored = TRUE
diff --git a/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm b/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm
new file mode 100644
index 00000000000..33aeb889c29
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm
@@ -0,0 +1,50 @@
+/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid
+ name = "bullsquid"
+ desc = "Some highly aggressive alien creature. Thrives in toxic environments."
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "bullsquid"
+ icon_living = "bullsquid"
+ icon_dead = "bullsquid_dead"
+ icon_gib = null
+ mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ environment_smash = ENVIRONMENT_SMASH_STRUCTURES
+ speak_chance = 1
+ speak_emote = list("growls")
+ emote_taunt = list("growls", "snarls", "grumbles")
+ taunt_chance = 100
+ turns_per_move = 7
+ maxHealth = 110
+ health = 110
+ obj_damage = 50
+ harm_intent_damage = 15
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ ranged = TRUE
+ retreat_distance = 4
+ minimum_distance = 4
+ dodging = TRUE
+ projectiletype = /obj/projectile/bullsquid
+ projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg'
+ melee_damage_upper = 18
+ attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg'
+ gold_core_spawnable = HOSTILE_SPAWN
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg'
+ )
+
+/obj/projectile/bullsquid
+ name = "nasty ball of ooze"
+ icon_state = "neurotoxin"
+ damage = 5
+ damage_type = BURN
+ knockdown = 20
+ armor_flag = BIO
+ impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin
+ hitsound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg'
+ hitsound_wall = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg'
+
+/obj/projectile/bullsquid/on_hit(atom/target, blocked = 0, pierce_hit)
+ new /obj/effect/decal/cleanable/greenglow(target.loc)
+ return ..()
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm b/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm
similarity index 94%
rename from modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm
rename to modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm
index db289f519e1..4ba1e92ecd9 100644
--- a/modular_skyrat/modules/black_mesa/code/mobs/gordon_freeman.dm
+++ b/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm
@@ -18,7 +18,7 @@
melee_damage_lower = 45
melee_damage_upper = 45
wander = FALSE
- attack_sound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg'
+ attack_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg'
loot = list(/obj/item/crowbar/freeman/ultimate, /obj/item/keycard/freeman_boss_exit)
gold_core_spawnable = NO_SPAWN
@@ -43,7 +43,7 @@
/obj/machinery/door/puzzle/keycard/xen/freeman_boss_entry
name = "entry door"
desc = "Complete the puzzle to open this door."
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi'
icon_state = "resin"
puzzle_id = "freeman_entry"
@@ -55,7 +55,7 @@
/obj/machinery/door/puzzle/keycard/xen/freeman_boss_exit
name = "exit door"
desc = "You must defeat him."
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_door.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi'
icon_state = "resin"
puzzle_id = "freeman_exit"
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab.dm
similarity index 86%
rename from modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm
rename to modular_nova/modules/black_mesa/code/mobs/headcrab.dm
index e7afbf7aae7..fc19cfa526a 100644
--- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab.dm
+++ b/modular_nova/modules/black_mesa/code/mobs/headcrab.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab
name = "headcrab"
desc = "Don't let it latch onto your hea-... hey, that's kinda cool."
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
icon_state = "headcrab"
icon_living = "headcrab"
icon_dead = "headcrab_dead"
@@ -29,7 +29,7 @@
gold_core_spawnable = HOSTILE_SPAWN
loot = list(/obj/item/stack/sheet/bone)
alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg'
+ 'modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg'
)
var/is_zombie = FALSE
var/mob/living/carbon/human/oldguy
@@ -48,15 +48,15 @@
throw_at(targeted_atom, throw_at_range, throw_at_speed)
playsound(
src,
- pick('modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg'),
+ pick('modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg'),
100
)
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/death(gibbed)
. = ..()
playsound(src, pick(list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg'
+ 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg'
)), 100)
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
@@ -65,7 +65,7 @@
return
if(!isliving(hit_atom))
return
- playsound(src, 'modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg', 100)
+ playsound(src, 'modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg', 100)
var/mob/living/hit_mob = hit_atom
hit_mob.apply_damage(melee_damage_upper, BRUTE)
if(!ishuman(hit_atom))
@@ -129,7 +129,7 @@
. = ..()
if(is_zombie)
copy_overlays(oldguy, TRUE)
- var/mutable_appearance/blob_head_overlay = mutable_appearance('modular_skyrat/modules/black_mesa/icons/mobs.dmi', "headcrab_zombie")
+ var/mutable_appearance/blob_head_overlay = mutable_appearance('modular_nova/modules/black_mesa/icons/mobs.dmi', "headcrab_zombie")
add_overlay(blob_head_overlay)
/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast
diff --git a/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm
new file mode 100644
index 00000000000..d66d874b80c
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm
@@ -0,0 +1,89 @@
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie
+ name = "headcrab zombie"
+ desc = "This unlucky person has had a headcrab latch onto their head. Ouch."
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "zombie"
+ icon_living = "zombie"
+ maxHealth = 110
+ health = 110
+ icon_gib = null
+ icon_dead = "zombie_dead"
+ speak_chance = 1
+ speak_emote = list("growls")
+ speed = 1
+ emote_taunt = list("growls", "snarls", "grumbles")
+ taunt_chance = 100
+ melee_damage_lower = 21
+ melee_damage_upper = 21
+ attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg'
+ gold_core_spawnable = HOSTILE_SPAWN
+ alert_cooldown_time = 8 SECONDS
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg',
+ )
+
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/death(gibbed)
+ new /obj/effect/gibspawner/human(get_turf(src))
+ return ..()
+
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist
+ name = "zombified scientist"
+ desc = "Even after death, I still have to wear this horrible tie!"
+ icon_state = "scientist_zombie"
+ icon_living = "scientist_zombie"
+ loot = list(/obj/effect/mob_spawn/corpse/human/scientist_zombie)
+ del_on_death = 1
+
+
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard
+ name = "zombified guard"
+ desc = "About that brain I owed ya!"
+ icon_state = "security_zombie"
+ icon_living = "security_zombie"
+ maxHealth = 140 // Armor!
+ health = 140
+ loot = list(/obj/effect/mob_spawn/corpse/human/guard_zombie)
+ del_on_death = 1
+
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu
+ name = "zombified marine"
+ desc = "MY. ASS. IS. DEAD."
+ icon_state = "hecu_zombie"
+ icon_living = "hecu_zombie"
+ maxHealth = 190 // More armor!
+ health = 190
+ loot = list(/obj/effect/mob_spawn/corpse/human/hecu_zombie)
+ del_on_death = 1
+
+/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev
+ name = "zombified hazardous environment specialist"
+ desc = "User death... surpassed."
+ icon_state = "hev_zombie"
+ icon_living = "hev_zombie"
+ maxHealth = 250
+ health = 250
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg',
+ )
+
+
+
+
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm b/modular_nova/modules/black_mesa/code/mobs/houndeye.dm
similarity index 75%
rename from modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm
rename to modular_nova/modules/black_mesa/code/mobs/houndeye.dm
index ee0ee204d3e..f563ac8018b 100644
--- a/modular_skyrat/modules/black_mesa/code/mobs/houndeye.dm
+++ b/modular_nova/modules/black_mesa/code/mobs/houndeye.dm
@@ -1,7 +1,7 @@
/mob/living/simple_animal/hostile/blackmesa/xen/houndeye
name = "houndeye"
desc = "Some highly aggressive alien creature. Thrives in toxic environments."
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
icon_state = "houndeye"
icon_living = "houndeye"
icon_dead = "houndeye_dead"
@@ -28,11 +28,11 @@
maxbodytemp = 1500
loot = list(/obj/item/stack/sheet/bluespace_crystal)
alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg'
+ 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg'
)
/// Charging ability
var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge
diff --git a/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm b/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm
new file mode 100644
index 00000000000..aa21f2779d7
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm
@@ -0,0 +1,226 @@
+/*
+* HECU
+*/
+
+/mob/living/simple_animal/hostile/blackmesa/hecu
+ name = "HECU Grunt"
+ desc = "I didn't sign on for this shit. Monsters, sure, but civilians? Who ordered this operation anyway?"
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "hecu_melee"
+ icon_living = "hecu_melee"
+ icon_dead = "hecu_dead"
+ icon_gib = "syndicate_gib"
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ sentience_type = SENTIENCE_HUMANOID
+ speak_chance = 10
+ speak = list("Stop right there!")
+ turns_per_move = 5
+ speed = 0
+ stat_attack = HARD_CRIT
+ robust_searching = 1
+ maxHealth = 150
+ health = 150
+ harm_intent_damage = 5
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attack_verb_continuous = "punches"
+ attack_verb_simple = "punch"
+ attack_sound = 'sound/weapons/punch1.ogg'
+ combat_mode = TRUE
+ loot = list(/obj/effect/gibspawner/human, /obj/item/melee/baton)
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ unsuitable_atmos_damage = 7.5
+ faction = list(FACTION_HECU)
+ check_friendly_fire = 1
+ status_flags = CANPUSH
+ del_on_death = 1
+ dodging = TRUE
+ rapid_melee = 2
+ footstep_type = FOOTSTEP_MOB_SHOE
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg'
+ )
+
+
+/mob/living/simple_animal/hostile/blackmesa/hecu/ranged
+ ranged = TRUE
+ retreat_distance = 5
+ minimum_distance = 5
+ icon_state = "hecu_ranged"
+ icon_living = "hecu_ranged"
+ casingtype = /obj/item/ammo_casing/a50ae
+ projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
+ loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle)
+ dodging = TRUE
+ rapid_melee = 1
+
+/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg
+ rapid = 3
+ icon_state = "hecu_ranged_smg"
+ icon_living = "hecu_ranged_smg"
+ casingtype = /obj/item/ammo_casing/c34
+ projectilesound = 'sound/weapons/gun/smg/shot.ogg'
+ loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg)
+
+/mob/living/simple_animal/hostile/blackmesa/sec
+ name = "Security Guard"
+ desc = "About that beer I owe'd ya!"
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "security_guard_melee"
+ icon_living = "security_guard_melee"
+ icon_dead = "security_guard_dead"
+ icon_gib = "syndicate_gib"
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ sentience_type = SENTIENCE_HUMANOID
+ turns_per_move = 5
+ speed = 0
+ stat_attack = HARD_CRIT
+ robust_searching = 1
+ maxHealth = 100
+ health = 100
+ harm_intent_damage = 5
+ melee_damage_lower = 7
+ melee_damage_upper = 7
+ attack_verb_continuous = "punches"
+ attack_verb_simple = "punch"
+ attack_sound = 'sound/weapons/punch1.ogg'
+ loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt)
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ unsuitable_atmos_damage = 7.5
+ faction = list(FACTION_STATION, FACTION_NEUTRAL)
+ check_friendly_fire = 1
+ status_flags = CANPUSH
+ del_on_death = TRUE
+ combat_mode = TRUE
+ dodging = TRUE
+ rapid_melee = 2
+ footstep_type = FOOTSTEP_MOB_SHOE
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg'
+ )
+ var/list/follow_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg',
+ )
+ var/list/unfollow_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg',
+ )
+ var/follow_speed = 2
+ var/follow_distance = 2
+
+/mob/living/simple_animal/hostile/blackmesa/sec/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/follow, follow_sounds, unfollow_sounds, follow_distance, follow_speed)
+
+
+/mob/living/simple_animal/hostile/blackmesa/sec/ranged
+ ranged = TRUE
+ retreat_distance = 5
+ minimum_distance = 5
+ icon_state = "security_guard_ranged"
+ icon_living = "security_guard_ranged"
+ casingtype = /obj/item/ammo_casing/c9mm
+ projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
+ loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt, /obj/item/gun/ballistic/automatic/pistol/sol)
+ rapid_melee = 1
+
+/mob/living/simple_animal/hostile/blackmesa/blackops
+ name = "black operative"
+ desc = "Why do we always have to clean up a mess the grunts can't handle?"
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "blackops"
+ icon_living = "blackops"
+ icon_dead = "blackops"
+ icon_gib = "syndicate_gib"
+ mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ sentience_type = SENTIENCE_HUMANOID
+ speak_chance = 10
+ speak = list("Got a visual!")
+ turns_per_move = 5
+ speed = 0
+ stat_attack = HARD_CRIT
+ robust_searching = 1
+ maxHealth = 200
+ health = 200
+ harm_intent_damage = 25
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ attack_verb_continuous = "strikes"
+ attack_verb_simple = "strikes"
+ attack_sound = 'sound/effects/woodhit.ogg'
+ combat_mode = TRUE
+ loot = list(/obj/effect/gibspawner/human)
+ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
+ unsuitable_atmos_damage = 7.5
+ faction = list(FACTION_BLACKOPS)
+ check_friendly_fire = 1
+ status_flags = CANPUSH
+ del_on_death = 1
+ dodging = TRUE
+ rapid_melee = 2
+ footstep_type = FOOTSTEP_MOB_SHOE
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg'
+ )
+
+
+/mob/living/simple_animal/hostile/blackmesa/blackops/ranged
+ ranged = TRUE
+ rapid = 2
+ retreat_distance = 5
+ minimum_distance = 5
+ icon_state = "blackops_ranged"
+ icon_living = "blackops_ranged"
+ casingtype = /obj/item/ammo_casing/c40sol
+ projectilesound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg'
+ attack_sound = 'sound/weapons/punch1.ogg'
+ loot = list(/obj/effect/gibspawner/human, /obj/item/ammo_box/magazine/c40sol_rifle/standard)
+ rapid_melee = 1
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm b/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm
similarity index 98%
rename from modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm
rename to modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm
index f86559c7748..ac63f9879e4 100644
--- a/modular_skyrat/modules/black_mesa/code/mobs/mob_spawners.dm
+++ b/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm
@@ -20,7 +20,7 @@
/obj/effect/random_mob_placer
name = "mob placer"
- icon = 'modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/mapping_helpers.dmi'
icon_state = "mobspawner"
var/list/possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab)
diff --git a/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm b/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm
new file mode 100644
index 00000000000..fabda7e4c0e
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm
@@ -0,0 +1,67 @@
+/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth
+ name = "nihilanth"
+ desc = "Holy shit."
+ icon = 'modular_nova/modules/black_mesa/icons/nihilanth.dmi'
+ icon_state = "nihilanth"
+ icon_living = "nihilanth"
+ SET_BASE_PIXEL(-32, -32)
+ speed = 3
+ bound_height = 64
+ bound_width = 64
+ icon_dead = "bullsquid_dead"
+ maxHealth = 3000
+ health = 3000
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ projectilesound = 'sound/weapons/lasercannonfire.ogg'
+ projectiletype = /obj/projectile/nihilanth
+ ranged = TRUE
+ rapid = 3
+ alert_cooldown = 2 MINUTES
+ harm_intent_damage = 50
+ melee_damage_lower = 30
+ melee_damage_upper = 40
+ attack_verb_continuous = "lathes"
+ attack_verb_simple = "lathe"
+ attack_sound = 'sound/weapons/punch1.ogg'
+ status_flags = NONE
+ del_on_death = TRUE
+ wander = TRUE
+ loot = list(/obj/effect/gibspawner/xeno, /obj/item/stack/sheet/bluespace_crystal/fifty, /obj/item/key/gateway, /obj/item/uber_teleporter)
+ movement_type = FLYING
+
+/obj/item/stack/sheet/bluespace_crystal/fifty
+ amount = 50
+
+/obj/projectile/nihilanth
+ name = "portal energy"
+ icon_state = "seedling"
+ damage = 20
+ damage_type = BURN
+ light_range = 2
+ armor_flag = ENERGY
+ light_color = LIGHT_COLOR_BRIGHT_YELLOW
+ hitsound = 'sound/weapons/sear.ogg'
+ hitsound_wall = 'sound/weapons/effects/searwall.ogg'
+ nondirectional_sprite = TRUE
+
+/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro()
+ . = ..()
+ if(!(world.time <= alert_cooldown_time))
+ alert_cooldown_time = world.time + alert_cooldown
+ switch(health)
+ if(0 to 999)
+ playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg')), 100)
+ if(1000 to 2999)
+ playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg')), 100)
+ if(3000 to 6000)
+ playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg')), 100)
+ else
+ playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg')), 100)
+ set_combat_mode(TRUE)
+
+/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/death(gibbed)
+ . = ..()
+
+/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/LoseAggro()
+ . = ..()
+ set_combat_mode(FALSE)
diff --git a/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm
new file mode 100644
index 00000000000..1fc62c86e32
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm
@@ -0,0 +1,64 @@
+/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt
+ name = "vortigaunt"
+ desc = "There is no distance between us. No false veils of time or space may intervene."
+ icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi'
+ icon_state = "vortigaunt"
+ icon_living = "vortigaunt"
+ icon_dead = "vortigaunt_dead"
+ icon_gib = null
+ gender = MALE
+ faction = list(FACTION_STATION, FACTION_NEUTRAL)
+ mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
+ speak_chance = 1
+ speak_emote = list("galungs")
+ speed = 1
+ emote_taunt = list("galalungas", "galungas", "gungs")
+ projectiletype = /obj/projectile/beam/emitter/hitscan
+ projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg'
+ ranged_cooldown_time = 5 SECONDS
+ ranged_message = "fires"
+ taunt_chance = 100
+ turns_per_move = 7
+ maxHealth = 130
+ health = 130
+ speed = 3
+ ranged = TRUE
+ dodging = TRUE
+ harm_intent_damage = 15
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ retreat_distance = 5
+ minimum_distance = 5
+ attack_sound = 'sound/weapons/bite.ogg'
+ gold_core_spawnable = FRIENDLY_SPAWN
+ loot = list(/obj/item/stack/sheet/bone)
+ alert_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg',
+ )
+ /// SOunds we play when asked to follow/unfollow.
+ var/list/follow_sounds = list(
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg',
+ 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg',
+ )
+ var/follow_speed = 1
+ var/follow_distance = 2
+
+/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/follow, follow_sounds, follow_sounds, follow_distance, follow_speed)
+
+/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave
+ name = "slave vortigaunt"
+ desc = "Bound by the shackles of a sinister force. He does not want to hurt you."
+ icon_state = "vortigaunt_slave"
+ faction = list(FACTION_XEN)
diff --git a/modular_skyrat/modules/black_mesa/code/objects.dm b/modular_nova/modules/black_mesa/code/objects.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/objects.dm
rename to modular_nova/modules/black_mesa/code/objects.dm
diff --git a/modular_skyrat/modules/black_mesa/code/projectiles.dm b/modular_nova/modules/black_mesa/code/projectiles.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/projectiles.dm
rename to modular_nova/modules/black_mesa/code/projectiles.dm
diff --git a/modular_nova/modules/black_mesa/code/rationpacks.dm b/modular_nova/modules/black_mesa/code/rationpacks.dm
new file mode 100644
index 00000000000..f9e7d3534b6
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/rationpacks.dm
@@ -0,0 +1,133 @@
+/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can.
+#define EDIBLE_PIZZA_LIST list( \
+ /obj/item/food/pizza/margherita, \
+ /obj/item/food/pizza/meat, \
+ /obj/item/food/pizza/mushroom, \
+ /obj/item/food/pizza/vegetable, \
+ /obj/item/food/pizza/donkpocket, \
+ /obj/item/food/pizza/dank, \
+ /obj/item/food/pizza/sassysage, \
+ /obj/item/food/pizza/pineapple, \
+ /obj/item/food/pizza/mothic_margherita, \
+ /obj/item/food/pizza/mothic_firecracker, \
+ /obj/item/food/pizza/mothic_five_cheese, \
+ /obj/item/food/pizza/mothic_white_pie, \
+ /obj/item/food/pizza/mothic_pesto, \
+ /obj/item/food/pizza/mothic_garlic, \
+ /obj/item/food/pizza/flatbread/rustic, \
+ /obj/item/food/pizza/flatbread/italic, \
+ /obj/item/food/pizza/flatbread/zmorgast, \
+ /obj/item/food/pizza/flatbread/fish, \
+ /obj/item/food/pizza/flatbread/mushroom, \
+ /obj/item/food/pizza/flatbread/nutty, \
+)
+
+/obj/item/food/mre_course
+ name = "undefined MRE course"
+ desc = "Something you shouldn't see. But it's edible."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/courses.dmi'
+ icon_state = "main_course"
+ food_reagents = list(/datum/reagent/consumable/nutriment = 20)
+ tastes = list("crayon powder" = 1)
+ foodtypes = VEGETABLES | GRAIN
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/food/mre_course/main
+ name = "MRE main course"
+ desc = "Main course of the ancient military ration designed for ground troops. This one is NOTHING."
+ tastes = list("strawberry" = 1, "vanilla" = 1, "chocolate" = 1)
+
+/obj/item/food/mre_course/main/beans
+ name = "MRE main course - Pork and Beans"
+ desc = "Main course of the ancient military ration designed for ground troops. This one is pork and beans covered in some tomato sauce."
+ tastes = list("beans" = 1, "pork" = 1, "tomato sauce" = 1)
+ foodtypes = MEAT | VEGETABLES
+
+/obj/item/food/mre_course/main/macaroni
+ name = "MRE main course - Macaroni and Cheese"
+ desc = "Main course of the ancient military ration designed for ground troops. This one is preboiled macaroni covered in some federal reserve cheese."
+ tastes = list("cold macaroni" = 1, "bland cheese" = 1)
+ foodtypes = DAIRY | GRAIN
+
+/obj/item/food/mre_course/main/rice
+ name = "MRE main course - Rice and Beef"
+ desc = "Main course of the ancient military ration designed for ground troops. This one is rice with beef, covered in gravy."
+ tastes = list("dense rice" = 1, "bits of beef" = 1, "gravy" = 1)
+ foodtypes = GRAIN | MEAT
+
+/obj/item/food/mre_course/side
+ name = "MRE side course"
+ desc = "Side course of the ancient military ration designed for ground troops. This one is NOTHING."
+ icon_state = "side_dish"
+
+/obj/item/food/mre_course/side/bread
+ name = "MRE side course - Cornbread"
+ desc = "Side course of the ancient military ration designed for ground troops. This one is cornbread."
+ tastes = list("cornbread" = 1)
+ foodtypes = GRAIN
+
+/obj/item/food/mre_course/side/pie
+ name = "MRE side course - Meat Pie"
+ desc = "Side course of the ancient military ration designed for ground troops. This one is some meat pie."
+ tastes = list("pie dough" = 1, "ground meat" = 1, "Texas" = 1)
+ foodtypes = MEAT | GRAIN
+
+/obj/item/food/mre_course/side/chicken
+ name = "MRE side course - Sweet 'n Sour Chicken"
+ desc = "Side course of the ancient military ration designed for ground troops. This one is some undefined chicken-looking meat covered in cheap reddish sauce."
+ tastes = list("bits of chicken meat" = 1, "sweet and sour sauce" = 1, "salt" = 1)
+ foodtypes = MEAT | FRIED
+
+/obj/item/food/mre_course/dessert
+ name = "MRE dessert"
+ desc = "Dessert of the ancient military ration designed for ground troops. This one is NOTHING."
+ icon_state = "dessert"
+
+/obj/item/food/mre_course/dessert/cookie
+ name = "MRE dessert - Cookie"
+ desc = "Dessert of the ancient military ration designed for ground troops. This one is a big dry cookie."
+ tastes = list("dryness" = 1, "hard cookie" = 1, "chocolate chip" = 1)
+ foodtypes = GRAIN | SUGAR
+
+/obj/item/food/mre_course/dessert/cake
+ name = "MRE dessert - Apple Pie"
+ desc = "Dessert of the ancient military ration designed for ground troops. This one is an amorphous apple pie."
+ tastes = list("apple" = 1, "moist cake" = 1, "sugar" = 1)
+ foodtypes = GRAIN | SUGAR | FRUIT
+
+/obj/item/food/mre_course/dessert/chocolate
+ name = "MRE dessert - Dark Chocolate"
+ desc = "Dessert of the ancient military ration designed for ground troops. This one is a dark bar of chocolate."
+ tastes = list("vanilla" = 1, "artificial chocolate" = 1, "chemicals" = 1)
+ foodtypes = JUNKFOOD | SUGAR
+
+/obj/item/storage/box/hecu_rations
+ name = "Meal, Ready-to-Eat"
+ desc = "A box containing a few rations and some chewing gum, for keeping a starving crayon-eater going."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/mre_hecu.dmi'
+ icon_state = "mre_package"
+ illustration = null
+
+/obj/item/storage/box/hecu_rations/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 5
+
+/obj/item/storage/box/hecu_rations/PopulateContents()
+ var/main_course = pick(/obj/item/food/mre_course/main/beans, /obj/item/food/mre_course/main/macaroni, /obj/item/food/mre_course/main/rice)
+ var/side_dish = pick(/obj/item/food/mre_course/side/bread, /obj/item/food/mre_course/side/pie, /obj/item/food/mre_course/side/chicken)
+ var/dessert = pick(/obj/item/food/mre_course/dessert/cookie, /obj/item/food/mre_course/dessert/cake, /obj/item/food/mre_course/dessert/chocolate)
+ new main_course(src)
+ new side_dish(src)
+ new dessert(src)
+ new /obj/item/storage/box/gum(src)
+ new /obj/item/food/spacers_sidekick(src)
+
+/obj/item/pizzabox/random
+ boxtag = "Randy's Surprise"
+ boxtag_set = TRUE
+
+/obj/item/pizzabox/random/Initialize(mapload)
+ . = ..()
+ if(!pizza)
+ var/random_pizza = pick(EDIBLE_PIZZA_LIST)
+ pizza = new random_pizza(src)
diff --git a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm b/modular_nova/modules/black_mesa/code/shield_pylon.dm
similarity index 98%
rename from modular_skyrat/modules/black_mesa/code/shield_pylon.dm
rename to modular_nova/modules/black_mesa/code/shield_pylon.dm
index b05cf664d51..35b6e5b1bb1 100644
--- a/modular_skyrat/modules/black_mesa/code/shield_pylon.dm
+++ b/modular_nova/modules/black_mesa/code/shield_pylon.dm
@@ -26,7 +26,7 @@
/obj/structure/xen_pylon
name = "shield plant"
desc = "It seems to be some kind of force field generator."
- icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/plants.dmi'
icon_state = "crystal_pylon"
max_integrity = 70
density = TRUE
diff --git a/modular_skyrat/modules/black_mesa/code/shockplant.dm b/modular_nova/modules/black_mesa/code/shockplant.dm
similarity index 95%
rename from modular_skyrat/modules/black_mesa/code/shockplant.dm
rename to modular_nova/modules/black_mesa/code/shockplant.dm
index 78b357677cb..842b084b387 100644
--- a/modular_skyrat/modules/black_mesa/code/shockplant.dm
+++ b/modular_nova/modules/black_mesa/code/shockplant.dm
@@ -2,7 +2,7 @@
/obj/structure/shockplant
name = "electrical plant"
desc = "It glows with a warm buzz."
- icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/plants.dmi'
icon_state = "electric_plant"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/black_mesa/code/spawners.dm b/modular_nova/modules/black_mesa/code/spawners.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/spawners.dm
rename to modular_nova/modules/black_mesa/code/spawners.dm
diff --git a/modular_nova/modules/black_mesa/code/turfs.dm b/modular_nova/modules/black_mesa/code/turfs.dm
new file mode 100644
index 00000000000..7b30cba8e69
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/turfs.dm
@@ -0,0 +1,111 @@
+/turf/closed/mineral/black_mesa
+ turf_type = /turf/open/misc/ironsand/black_mesa
+ baseturfs = /turf/open/misc/ironsand/black_mesa
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+
+//Floors that no longer lead into space (innovative!)
+/turf/open/misc/ironsand/black_mesa
+ baseturfs = /turf/open/misc/ironsand/black_mesa
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+
+/obj/effect/baseturf_helper/black_mesa
+ name = "black mesa sand baseturf editor"
+ baseturf = /turf/open/misc/ironsand/black_mesa
+
+/obj/effect/baseturf_helper/black_mesa_xen
+ name = "xen baseturf editor"
+ baseturf = /turf/open/water/xen_acid
+
+/turf/closed/indestructible/rock/xen
+ name = "strange wall"
+ color = "#ac3b06"
+ baseturfs = /turf/closed/indestructible/rock/xen
+
+/turf/open/misc/xen
+ name = "strange weeds"
+ desc = "It feels soft to the touch, like a carpet... only... wet."
+ icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi'
+ icon_state = "xen_turf"
+ baseturfs = /turf/open/misc/xen
+ footstep = FOOTSTEP_GRASS
+ barefootstep = FOOTSTEP_GRASS
+ planetary_atmos = TRUE
+
+/turf/open/water/beach/xen
+ desc = "It's mirky and filled with strange organisms."
+ name = "xen water"
+ icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi'
+ baseturfs = /turf/open/water/beach/xen
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+
+/turf/open/misc/beach/coastline_t/xen
+ desc = "It's mirky and filled with strange organisms."
+ name = "xen water"
+ icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi'
+ baseturfs = /turf/open/misc/beach/coastline_t/xen
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+
+/turf/open/misc/beach/coastline_t/sandwater_inner/xen
+ desc = "It's mirky and filled with strange organisms."
+ name = "xen water"
+ icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi'
+ baseturfs = /turf/open/misc/beach/coastline_t/sandwater_inner/xen
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+
+/turf/open/misc/beach/coastline_b/xen
+ name = "xen water"
+ desc = "It's mirky and filled with strange organisms."
+ icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi'
+ baseturfs = /turf/open/misc/beach/coastline_b/xen
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+
+/turf/open/misc/dirt/planet/xen
+ name = "strange path"
+ color = "#ee5f1c"
+ baseturfs = /turf/open/misc/dirt/planet/xen
+ planetary_atmos = TRUE
+
+/turf/open/water/xen_acid
+ baseturfs = /turf/open/water/xen_acid
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ planetary_atmos = TRUE
+ color = COLOR_VIBRANT_LIME
+ light_range = 2
+ light_color = COLOR_VIBRANT_LIME
+ /// How much damage we deal if a mob enters us.
+ var/acid_damage = 30
+
+/turf/open/water/xen_acid/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
+ . = ..()
+ if(isliving(arrived) && !istype(arrived, /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid)) // Bull squid territory!
+ var/mob/living/unlucky_mob = arrived
+ unlucky_mob.adjustFireLoss(acid_damage)
+ playsound(unlucky_mob, 'sound/weapons/sear.ogg', 100, TRUE)
+
+/turf/open/water/electric
+ name = "electric water"
+ baseturfs = /turf/open/water/electric
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ color = COLOR_TEAL
+ light_range = 2
+ light_color = COLOR_TEAL
+
+/turf/open/water/electric/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
+ . = ..()
+ if(isliving(arrived))
+ var/mob/living/unlucky_mob = arrived
+ unlucky_mob.Stun(1.5 SECONDS)
+ unlucky_mob.Knockdown(10 SECONDS)
+ unlucky_mob.adjustFireLoss(15)
+ var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread
+ s.set_up(5, 1, unlucky_mob.loc)
+ s.start()
+ unlucky_mob.visible_message(span_danger("[unlucky_mob.name] is shocked by [src]!"), \
+ span_userdanger("You feel a powerful shock course through your body!"), \
+ span_hear("You hear a heavy electrical crack!"))
+ playsound(unlucky_mob, SFX_SPARKS, 100, TRUE)
diff --git a/modular_skyrat/modules/black_mesa/code/turrets.dm b/modular_nova/modules/black_mesa/code/turrets.dm
similarity index 100%
rename from modular_skyrat/modules/black_mesa/code/turrets.dm
rename to modular_nova/modules/black_mesa/code/turrets.dm
diff --git a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm b/modular_nova/modules/black_mesa/code/uber_teleporter.dm
similarity index 96%
rename from modular_skyrat/modules/black_mesa/code/uber_teleporter.dm
rename to modular_nova/modules/black_mesa/code/uber_teleporter.dm
index 15b72c493b1..32b87379875 100644
--- a/modular_skyrat/modules/black_mesa/code/uber_teleporter.dm
+++ b/modular_nova/modules/black_mesa/code/uber_teleporter.dm
@@ -1,7 +1,7 @@
/obj/item/uber_teleporter
name = "\improper Nihilanth's Divinity"
desc = "It glows harshly, the power of a portal wielding monster lays within."
- icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/plants.dmi'
icon_state = "crystal_pylon"
/obj/item/uber_teleporter/attack_self(mob/living/user, modifiers)
diff --git a/modular_nova/modules/black_mesa/code/weapons.dm b/modular_nova/modules/black_mesa/code/weapons.dm
new file mode 100644
index 00000000000..d9eadc61683
--- /dev/null
+++ b/modular_nova/modules/black_mesa/code/weapons.dm
@@ -0,0 +1,56 @@
+/obj/item/crowbar/freeman
+ name = "blood soaked crowbar"
+ desc = "A heavy handed crowbar, it drips with blood."
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/freeman.dmi'
+ icon_state = "crowbar"
+ force = 35
+ throwforce = 45
+ toolspeed = 0.1
+ wound_bonus = 10
+ hitsound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg'
+ mob_throw_hit_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg'
+ force_opens = TRUE
+
+/obj/item/crowbar/freeman/ultimate
+ name = "\improper Freeman's crowbar"
+ desc = "A weapon wielded by an ancient physicist, the blood of hundreds seeps through this rod of iron and malice."
+ force = 45
+
+/obj/item/crowbar/freeman/ultimate/Initialize(mapload)
+ . = ..()
+ add_filter("rad_glow", 2, list("type" = "outline", "color" = "#fbff1479", "size" = 2))
+
+/obj/item/shield/riot/pointman/hecu
+ name = "ballistic shield"
+ desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell. Repair with iron."
+ icon_state = "ballistic"
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/ballistic.dmi'
+ worn_icon_state = "ballistic_worn"
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/ballistic.dmi'
+ inhand_icon_state = "ballistic"
+ lefthand_file = 'modular_nova/modules/awaymissions_skyrat/icons/ballistic_l.dmi'
+ righthand_file = 'modular_nova/modules/awaymissions_skyrat/icons/ballistic_r.dmi'
+ force = 14
+ throwforce = 5
+ throw_speed = 1
+ throw_range = 1
+ block_chance = 45
+ slot_flags = ITEM_SLOT_BACK
+ w_class = WEIGHT_CLASS_BULKY
+ attack_verb_continuous = list("shoves", "bashes")
+ attack_verb_simple = list("shove", "bash")
+ transparent = TRUE
+ max_integrity = 150
+ repairable_by = /obj/item/stack/sheet/iron //what to repair the shield with
+
+
+/obj/item/shield/riot/pointman/hecu/shatter(mob/living/carbon/human/owner)
+ playsound(owner, 'sound/effects/glassbr3.ogg', 100)
+ new /obj/item/ballistic_broken((get_turf(src)))
+
+/obj/item/ballistic_broken
+ name = "broken ballistic shield"
+ desc = "An unsalvageable, unrecoverable mess of armor steel and kevlar. Should've maintained it, huh?"
+ icon_state = "ballistic_broken"
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/ballistic.dmi'
+ w_class = WEIGHT_CLASS_BULKY
diff --git a/modular_skyrat/modules/black_mesa/code/xen_crystal.dm b/modular_nova/modules/black_mesa/code/xen_crystal.dm
similarity index 94%
rename from modular_skyrat/modules/black_mesa/code/xen_crystal.dm
rename to modular_nova/modules/black_mesa/code/xen_crystal.dm
index edb6305d7a8..cdc08c39154 100644
--- a/modular_skyrat/modules/black_mesa/code/xen_crystal.dm
+++ b/modular_nova/modules/black_mesa/code/xen_crystal.dm
@@ -1,7 +1,7 @@
/obj/structure/xen_crystal
name = "resonating crystal"
desc = "A strange resinating crystal."
- icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/plants.dmi'
icon_state = "crystal"
light_power = 2
light_range = 4
@@ -44,7 +44,7 @@
/obj/item/grenade/xen_crystal
name = "xen crystal"
desc = "A crystal with anomalous properties."
- icon = 'modular_skyrat/modules/black_mesa/icons/plants.dmi'
+ icon = 'modular_nova/modules/black_mesa/icons/plants.dmi'
icon_state = "crystal_grenade"
/// What range do we effect mobs?
var/effect_range = 6
diff --git a/modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi b/modular_nova/modules/black_mesa/icons/mapping_helpers.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/mapping_helpers.dmi
rename to modular_nova/modules/black_mesa/icons/mapping_helpers.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/mobs.dmi b/modular_nova/modules/black_mesa/icons/mobs.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/mobs.dmi
rename to modular_nova/modules/black_mesa/icons/mobs.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/nihilanth.dmi b/modular_nova/modules/black_mesa/icons/nihilanth.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/nihilanth.dmi
rename to modular_nova/modules/black_mesa/icons/nihilanth.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/plants.dmi b/modular_nova/modules/black_mesa/icons/plants.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/plants.dmi
rename to modular_nova/modules/black_mesa/icons/plants.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/structures.dmi b/modular_nova/modules/black_mesa/icons/structures.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/structures.dmi
rename to modular_nova/modules/black_mesa/icons/structures.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/structures/dmi b/modular_nova/modules/black_mesa/icons/structures/dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/structures/dmi
rename to modular_nova/modules/black_mesa/icons/structures/dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/xen_door.dmi b/modular_nova/modules/black_mesa/icons/xen_door.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/xen_door.dmi
rename to modular_nova/modules/black_mesa/icons/xen_door.dmi
diff --git a/modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi b/modular_nova/modules/black_mesa/icons/xen_turfs.dmi
similarity index 100%
rename from modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi
rename to modular_nova/modules/black_mesa/icons/xen_turfs.dmi
diff --git a/modular_skyrat/modules/black_mesa/sound/downtoBLUE.ogg b/modular_nova/modules/black_mesa/sound/downtoBLUE.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/downtoBLUE.ogg
rename to modular_nova/modules/black_mesa/sound/downtoBLUE.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode6.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode6.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode7.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg
rename to modular_nova/modules/black_mesa/sound/explosions/explode7.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg b/modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/lc_mainbeam.ogg
rename to modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg b/modular_nova/modules/black_mesa/sound/lc_teleport.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/lc_teleport.ogg
rename to modular_nova/modules/black_mesa/sound/lc_teleport.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/alert1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/attack3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/die2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/headcrab/headbite.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/charge3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg
rename to modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/siren1.ogg b/modular_nova/modules/black_mesa/sound/siren1.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/siren1.ogg
rename to modular_nova/modules/black_mesa/sound/siren1.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/siren1_long.ogg b/modular_nova/modules/black_mesa/sound/siren1_long.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/siren1_long.ogg
rename to modular_nova/modules/black_mesa/sound/siren1_long.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/tc_12_portalsuck.ogg b/modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/tc_12_portalsuck.ogg
rename to modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/tc_13_teleport.ogg b/modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/tc_13_teleport.ogg
rename to modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/xen-credits.ogg b/modular_nova/modules/black_mesa/sound/xen-credits.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/xen-credits.ogg
rename to modular_nova/modules/black_mesa/sound/xen-credits.ogg
diff --git a/modular_skyrat/modules/black_mesa/sound/xen_door.ogg b/modular_nova/modules/black_mesa/sound/xen_door.ogg
similarity index 100%
rename from modular_skyrat/modules/black_mesa/sound/xen_door.ogg
rename to modular_nova/modules/black_mesa/sound/xen_door.ogg
diff --git a/modular_skyrat/modules/blastwave_outfits/code/cargo_packs.dm b/modular_nova/modules/blastwave_outfits/code/cargo_packs.dm
similarity index 100%
rename from modular_skyrat/modules/blastwave_outfits/code/cargo_packs.dm
rename to modular_nova/modules/blastwave_outfits/code/cargo_packs.dm
diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm
new file mode 100644
index 00000000000..aabe14b33c1
--- /dev/null
+++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_head.dm
@@ -0,0 +1,78 @@
+/obj/item/clothing/head/blastwave
+ name = "blastwave helmet"
+ desc = "A plastic helmet with paint applied. Protects as much as cardboard box named 'Bomb Shelter'."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "blastwave_helmet"
+ flags_inv = HIDEHAIR
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Default (Purple)" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_helmet",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_helmet"
+ ),
+ "Red" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_helmet_r",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_helmet_r"
+ ),
+ "Green" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_helmet_g",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_helmet_g"
+ ),
+ "Blue" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_helmet_b",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_helmet_b"
+ ),
+ "Yellow" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_helmet_y",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_helmet_y"
+ )
+ )
+
+/obj/item/clothing/head/blastwave/officer
+ name = "blastwave peaked cap"
+ desc = "A simple, militaristic cap."
+ icon_state = "blastwave_offcap"
+ flags_inv = 0
+ unique_reskin = list(
+ "Default (Purple)" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_offcap",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_offcap"
+ ),
+ "Red" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_offcap_r",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_offcap_r"
+ ),
+ "Green" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_offcap_g",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_offcap_g"
+ ),
+ "Blue" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_offcap_b",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_offcap_b"
+ ),
+ "Yellow" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/hats.dmi',
+ RESKIN_ICON_STATE = "blastwave_offcap_y",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/head.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_offcap_y"
+ )
+ )
diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm
new file mode 100644
index 00000000000..dada6d511c3
--- /dev/null
+++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_mask.dm
@@ -0,0 +1,8 @@
+/obj/item/clothing/mask/gas/full
+ name = "full gas mask"
+ desc = "A close-fitting mask. Equipment beloved by many trenchers, mooks and romantically apocalyptic people."
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ icon_state = "gas_full"
+ flags_inv = HIDEEARS | HIDEEYES | HIDEFACE | HIDEHAIR | HIDEFACIALHAIR | HIDESNOUT
diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm
new file mode 100644
index 00000000000..8104173f1f5
--- /dev/null
+++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_suit.dm
@@ -0,0 +1,41 @@
+/obj/item/clothing/suit/blastwave
+ name = "blastwave trenchcoat"
+ desc = "A generic trenchcoat of the boring wars."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit_digi.dmi'
+ icon_state = "blastwave_suit"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Default (Purple)" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "blastwave_suit",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_suit"
+ ),
+ "Red" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "blastwave_suit_r",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_suit_r"
+ ),
+ "Green" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "blastwave_suit_g",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_suit_g"
+ ),
+ "Blue" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "blastwave_suit_b",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_suit_b"
+ ),
+ "Yellow" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "blastwave_suit_y",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_suit_y"
+ )
+ )
diff --git a/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm
new file mode 100644
index 00000000000..a5259e1fec5
--- /dev/null
+++ b/modular_nova/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm
@@ -0,0 +1,41 @@
+/obj/item/clothing/under/blastwave
+ name = "blastwave uniform"
+ desc = "An utilitarian uniform of rugged warfare."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi'
+ icon_state = "blastwave_uniform"
+ can_adjust = FALSE
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Default (Purple)" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi',
+ RESKIN_ICON_STATE = "blastwave_uniform",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_uniform"
+ ),
+ "Red" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi',
+ RESKIN_ICON_STATE = "blastwave_uniform_r",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_uniform_r"
+ ),
+ "Green" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi',
+ RESKIN_ICON_STATE = "blastwave_uniform_g",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_uniform_g"
+ ),
+ "Blue" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi',
+ RESKIN_ICON_STATE = "blastwave_uniform_b",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_uniform_b"
+ ),
+ "Yellow" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi',
+ RESKIN_ICON_STATE = "blastwave_uniform_y",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi',
+ RESKIN_WORN_ICON_STATE = "blastwave_uniform_y"
+ )
+ )
diff --git a/modular_nova/modules/blastwave_outfits/readme.md b/modular_nova/modules/blastwave_outfits/readme.md
new file mode 100644
index 00000000000..519b0642ad3
--- /dev/null
+++ b/modular_nova/modules/blastwave_outfits/readme.md
@@ -0,0 +1,48 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/14165 (initial)
+
+## Title: GWTB-like Outfit.
+
+MODULE ID: N/A
+
+### Description:
+
+Adds "Gone with the Blastwave" webcomic-inspired outfit. Colors are pre-set via reskinning, and it is not GAGsified.
+This version does not provide armor values.
+
+### TG Proc/File Changes:
+
+- N/A
+
+
+### Defines:
+
+- N/A
+
+
+### Master file additions
+
+- #CHANGE modular_nova\master_files\icons\mob\clothing\head.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\mask_muzzled.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\mask.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\suit_digi.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\suit.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\uniform_digi.dmi
+- #CHANGE modular_nova\master_files\icons\mob\clothing\uniform.dmi
+- #CHANGE modular_nova\master_files\icons\obj\clothing\hats.dmi
+- #CHANGE modular_nova\master_files\icons\obj\clothing\masks.dmi
+- #CHANGE modular_nova\master_files\icons\obj\clothing\suits.dmi
+- #CHANGE modular_nova\master_files\icons\obj\clothing\uniforms.dmi
+
+
+### Included files that are not contained in this module:
+
+- #CHANGE modular_nova\modules\loadouts\loadout_items\loadout_datum_heads.dm
+- #CHANGE modular_nova\modules\loadouts\loadout_items\loadout_datum_suit.dm
+- #CHANGE modular_nova\modules\loadouts\loadout_items\under\loadout_datum_under.dm
+
+
+### Credits:
+
+Initially used older TG-Station's Detective's Greycoat (blastwave coats are modified versions of it: added colored arm-patches, cuffs and lining), normal helmets (added paint and removed in-built goggles), officer's cap (added colored pin), utility uniform (added color-collar and shoulders);
+
+[Gone with the Blastwave](http://www.blastwave-comic.com) webcomic by Kimmo Lemetti (aka Morr) - inspiration.
diff --git a/modular_skyrat/modules/blueshield/code/blueshield.dm b/modular_nova/modules/blueshield/code/blueshield.dm
similarity index 100%
rename from modular_skyrat/modules/blueshield/code/blueshield.dm
rename to modular_nova/modules/blueshield/code/blueshield.dm
diff --git a/modular_nova/modules/blueshield/code/closet.dm b/modular_nova/modules/blueshield/code/closet.dm
new file mode 100644
index 00000000000..ed316f7b1df
--- /dev/null
+++ b/modular_nova/modules/blueshield/code/closet.dm
@@ -0,0 +1,39 @@
+/obj/item/storage/bag/garment/blueshield
+ name = "blueshield's garment bag"
+ desc = "A bag for storing extra clothes and shoes. This one belongs to the blueshield."
+
+/obj/item/storage/bag/garment/blueshield/PopulateContents()
+ new /obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield(src)
+ new /obj/item/clothing/head/beret/blueshield(src)
+ new /obj/item/clothing/head/beret/blueshield/navy(src)
+ new /obj/item/clothing/under/rank/blueshield(src)
+ new /obj/item/clothing/under/rank/blueshield/skirt(src)
+ new /obj/item/clothing/under/rank/blueshield/turtleneck(src)
+ new /obj/item/clothing/under/rank/blueshield/turtleneck/skirt(src)
+ new /obj/item/clothing/suit/armor/vest/blueshield(src)
+ new /obj/item/clothing/suit/armor/vest/blueshield/jacket(src)
+ new /obj/item/clothing/neck/mantle/bsmantle(src)
+
+/obj/structure/closet/secure_closet/blueshield
+ name = "blueshield's locker"
+ icon_state = "bs"
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+ req_access = list(ACCESS_CAPTAIN)
+
+/obj/structure/closet/secure_closet/blueshield/New()
+ ..()
+ // FLUFFY FRONTIER EDIT: ADDITION BEGIN - BLUESHIELD-REARM
+ // ВАЖНО!! ДАБЫ НЕ ПЕРЕНАСЫЩАТЬ БЩ ОРУЖИЕМ, ЛЮБЫЕ НОВЫЕ ПУШКИ ПЕРЕНОСИМ В МОДУЛЬ В /obj/item/choice_beacon/blueshield/
+ // Выдал БЩ дополнительные перчатки, аналогичные их стандартным, просто без эффекта рывка.
+ new /obj/item/clothing/gloves/combat(src)
+ // FLUFFY FRONTIER EDIT END - BLUESHIELD-REARM.
+ new /obj/item/storage/briefcase/secure(src)
+ new /obj/item/storage/belt/security/full(src)
+ new /obj/item/grenade/flashbang(src)
+ new /obj/item/assembly/flash/handheld(src)
+ new /obj/item/restraints/handcuffs(src)
+ new /obj/item/clothing/glasses/hud/security/sunglasses(src)
+ new /obj/item/storage/medkit/tactical/blueshield(src)
+ // new /obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo(src) FF EDIT: DELETION - BLUESHIELD-REARM
+ new /obj/item/storage/bag/garment/blueshield(src)
+ new /obj/item/mod/control/pre_equipped/blueshield(src)
diff --git a/modular_nova/modules/blueshield/code/clothing.dm b/modular_nova/modules/blueshield/code/clothing.dm
new file mode 100644
index 00000000000..19d97359f6a
--- /dev/null
+++ b/modular_nova/modules/blueshield/code/clothing.dm
@@ -0,0 +1,177 @@
+//Blueshield
+
+//Uniform items are in command.dm
+
+/obj/item/clothing/gloves/tackler/combat/insulated/blueshield
+ name = "combat gloves"
+ desc = "These tactical gloves appear to be unique, made out of double woven durathread fibers which make it fireproof as well as acid resistant"
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ icon_state = "combat"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ armor_type = /datum/armor/insulated_blueshield
+
+/datum/armor/insulated_blueshield
+ fire = 100
+ acid = 100
+
+/obj/item/radio/headset/headset_bs
+ name = "\proper the blueshield's headset"
+ icon = 'modular_nova/modules/blueshield/icons/radio.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/ears.dmi'
+ icon_state = "bshield_headset"
+ worn_icon_state = "bshield_headset"
+ keyslot = /obj/item/encryptionkey/heads/blueshield
+ keyslot2 = /obj/item/encryptionkey/headset_cent
+
+/obj/item/radio/headset/headset_bs/alt
+ icon_state = "bshield_headset_alt"
+ worn_icon_state = "bshield_headset_alt"
+
+/obj/item/radio/headset/headset_bs/alt/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
+
+
+/obj/item/clothing/head/helmet/space/plasmaman/blueshield
+ name = "blueshield envirosuit helmet"
+ desc = "A plasmaman containment helmet designed for certified blueshields, who's job guarding heads should not include self-combustion... most of the time."
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi'
+ icon_state = "bs_envirohelm"
+ armor_type = /datum/armor/head_helmet/plasmaman/blueshield
+
+/datum/armor/head_helmet/plasmaman/blueshield
+ acid = 90
+
+/obj/item/clothing/under/plasmaman/blueshield
+ name = "blueshield envirosuit"
+ desc = "A plasmaman containment suit designed for certified blueshields, offering a limited amount of extra protection."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi'
+ icon_state = "bs_envirosuit"
+ armor_type = /datum/armor/clothing_under/under_plasmaman_blueshield
+ sensor_mode = SENSOR_COORDS
+ random_sensor = FALSE
+
+/datum/armor/clothing_under/under_plasmaman_blueshield
+ melee = 10
+ laser = 10
+ bomb = 5
+ bio = 100
+ fire = 95
+ acid = 95
+
+/obj/item/clothing/head/beret/blueshield
+ name = "blueshield's beret"
+ desc = "A blue beret made of durathread with a genuine golden badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets."
+ greyscale_config = /datum/greyscale_config/beret_badge
+ greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
+ greyscale_colors = "#3A4E7D#DEB63D"
+ //alternate_worn_icon_digi = 'modular_nova/icons/mob/head_muzzled.dmi'
+ icon_state = "beret_badge_police"
+ armor_type = /datum/armor/head_helmet/blueshield
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/datum/armor/head_helmet/blueshield
+ fire = 75
+ acid = 75
+
+/obj/item/clothing/head/beret/blueshield/navy
+ name = "navy blueshield's beret"
+ desc = "A navy-blue beret made of durathread with a silver badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets."
+ greyscale_colors = "#3C485A#BBBBBB"
+
+/obj/item/storage/backpack/blueshield
+ name = "blueshield backpack"
+ desc = "A robust backpack issued to Nanotrasen's finest."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "backpack_blueshield"
+ inhand_icon_state = "backpack_blueshield"
+
+/obj/item/storage/backpack/satchel/blueshield
+ name = "blueshield satchel"
+ desc = "A robust satchel issued to Nanotrasen's finest."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "satchel_blueshield"
+ inhand_icon_state = "satchel_blueshield"
+
+/obj/item/storage/backpack/duffelbag/blueshield
+ name = "blueshield duffelbag"
+ desc = "A robust duffelbag issued to Nanotrasen's finest."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "duffel_blueshield"
+ inhand_icon_state = "duffel_blueshield"
+
+//blueshield armor
+/obj/item/clothing/suit/armor/vest/blueshield
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ name = "blueshield's armor"
+ desc = "A tight-fitting kevlar-lined vest with a blue badge on the chest of it."
+ icon_state = "blueshieldarmor"
+ body_parts_covered = CHEST
+ armor_type = /datum/armor/suit_armor/blueshield
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Slim" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON_STATE = "blueshieldarmor",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON_STATE = "blueshieldarmor",
+ ),
+ "Marine" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON_STATE = "bs_marine",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON_STATE = "bs_marine",
+ ),
+ "Bulky" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON_STATE = "vest_black",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON_STATE = "vest_black",
+ ),
+ )
+
+/datum/armor/suit_armor/blueshield
+ bomb = 30
+ fire = 75
+ acid = 75
+
+/obj/item/clothing/suit/armor/vest/blueshield/jacket
+ name = "blueshield's jacket"
+ desc = "An expensive kevlar-lined jacket with a golden badge on the chest and \"NT\" emblazoned on the back. It weighs surprisingly little, despite how heavy it looks."
+ icon_state = "blueshield"
+ body_parts_covered = CHEST|ARMS
+ unique_reskin = null
+
+/obj/item/clothing/suit/armor/vest/blueshield/jacket/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_icon)
+
+/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield
+ name = "blueshield's winter coat"
+ icon_state = "coatblueshield"
+ desc = "A comfy kevlar-lined coat with blue highlights, fit to keep the blueshield armored and warm."
+ hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/blueshield
+ allowed = list(/obj/item/melee/baton/security/loaded)
+ armor_type = /datum/armor/suit_armor/blueshield
+
+/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield/Initialize(mapload)
+ . = ..()
+ allowed += GLOB.security_vest_allowed
+
+/obj/item/clothing/head/hooded/winterhood/skyrat/blueshield
+ icon_state = "hood_blueshield"
+ desc = "A comfy kevlar-lined hood to go with the comfy kevlar-lined coat."
+ armor_type = /datum/armor/suit_armor/blueshield
diff --git a/modular_skyrat/modules/blueshield/code/devices/crew.dm b/modular_nova/modules/blueshield/code/devices/crew.dm
similarity index 100%
rename from modular_skyrat/modules/blueshield/code/devices/crew.dm
rename to modular_nova/modules/blueshield/code/devices/crew.dm
diff --git a/modular_skyrat/modules/blueshield/code/devices/sensor_device.dm b/modular_nova/modules/blueshield/code/devices/sensor_device.dm
similarity index 84%
rename from modular_skyrat/modules/blueshield/code/devices/sensor_device.dm
rename to modular_nova/modules/blueshield/code/devices/sensor_device.dm
index f9fffbc1d5b..b80c4282be7 100644
--- a/modular_skyrat/modules/blueshield/code/devices/sensor_device.dm
+++ b/modular_nova/modules/blueshield/code/devices/sensor_device.dm
@@ -1,7 +1,7 @@
/obj/item/sensor_device/blueshield
name = "blueshield's handheld monitor"
desc = "A unique model of handheld crew monitor that seems to have been customized for Executive Protection purposes."
- icon = 'modular_skyrat/modules/blueshield/icons/device.dmi'
+ icon = 'modular_nova/modules/blueshield/icons/device.dmi'
icon_state = "blueshield_scanner"
/obj/item/sensor_device/blueshield/attack_self(mob/user)
diff --git a/modular_skyrat/modules/blueshield/code/encryptionkey.dm b/modular_nova/modules/blueshield/code/encryptionkey.dm
similarity index 100%
rename from modular_skyrat/modules/blueshield/code/encryptionkey.dm
rename to modular_nova/modules/blueshield/code/encryptionkey.dm
diff --git a/modular_nova/modules/blueshield/code/landmarks.dm b/modular_nova/modules/blueshield/code/landmarks.dm
new file mode 100644
index 00000000000..3387d424baf
--- /dev/null
+++ b/modular_nova/modules/blueshield/code/landmarks.dm
@@ -0,0 +1,4 @@
+/obj/effect/landmark/start/blueshield
+ name = "Blueshield"
+ icon_state = "Blueshield"
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
diff --git a/modular_skyrat/modules/blueshield/code/medkit.dm b/modular_nova/modules/blueshield/code/medkit.dm
similarity index 100%
rename from modular_skyrat/modules/blueshield/code/medkit.dm
rename to modular_nova/modules/blueshield/code/medkit.dm
diff --git a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm b/modular_nova/modules/blueshield/code/modsuit/mod_theme.dm
similarity index 93%
rename from modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm
rename to modular_nova/modules/blueshield/code/modsuit/mod_theme.dm
index cfb38c35a6a..f7155396c92 100644
--- a/modular_skyrat/modules/blueshield/code/modsuit/mod_theme.dm
+++ b/modular_nova/modules/blueshield/code/modsuit/mod_theme.dm
@@ -27,8 +27,8 @@
)
skins = list(
"praetorian" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/blueshield/icons/praetorian.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/blueshield/icons/praetorian.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/blueshield/icons/worn_praetorian.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = null,
UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL,
diff --git a/modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm b/modular_nova/modules/blueshield/code/modsuit/mod_type.dm
similarity index 77%
rename from modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm
rename to modular_nova/modules/blueshield/code/modsuit/mod_type.dm
index a18bce3eac0..2620cbcea70 100644
--- a/modular_skyrat/modules/blueshield/code/modsuit/mod_type.dm
+++ b/modular_nova/modules/blueshield/code/modsuit/mod_type.dm
@@ -1,6 +1,6 @@
/obj/item/mod/control/pre_equipped/blueshield
- worn_icon = 'modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi'
- icon = 'modular_skyrat/modules/blueshield/icons/praetorian.dmi'
+ worn_icon = 'modular_nova/modules/blueshield/icons/worn_praetorian.dmi'
+ icon = 'modular_nova/modules/blueshield/icons/praetorian.dmi'
icon_state = "praetorian-control"
theme = /datum/mod_theme/blueshield
applied_cell = /obj/item/stock_parts/cell/super
diff --git a/modular_skyrat/modules/blueshield/icons/M45A5.dmi b/modular_nova/modules/blueshield/icons/M45A5.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/M45A5.dmi
rename to modular_nova/modules/blueshield/icons/M45A5.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/device.dmi b/modular_nova/modules/blueshield/icons/device.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/device.dmi
rename to modular_nova/modules/blueshield/icons/device.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/energy.dmi b/modular_nova/modules/blueshield/icons/energy.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/energy.dmi
rename to modular_nova/modules/blueshield/icons/energy.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/guns_lefthand.dmi b/modular_nova/modules/blueshield/icons/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/guns_lefthand.dmi
rename to modular_nova/modules/blueshield/icons/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/guns_righthand.dmi b/modular_nova/modules/blueshield/icons/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/guns_righthand.dmi
rename to modular_nova/modules/blueshield/icons/guns_righthand.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/melee_lefthand.dmi b/modular_nova/modules/blueshield/icons/melee_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/melee_lefthand.dmi
rename to modular_nova/modules/blueshield/icons/melee_lefthand.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/melee_righthand.dmi b/modular_nova/modules/blueshield/icons/melee_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/melee_righthand.dmi
rename to modular_nova/modules/blueshield/icons/melee_righthand.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/praetorian.dmi b/modular_nova/modules/blueshield/icons/praetorian.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/praetorian.dmi
rename to modular_nova/modules/blueshield/icons/praetorian.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/radio.dmi b/modular_nova/modules/blueshield/icons/radio.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/radio.dmi
rename to modular_nova/modules/blueshield/icons/radio.dmi
diff --git a/modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi b/modular_nova/modules/blueshield/icons/worn_praetorian.dmi
similarity index 100%
rename from modular_skyrat/modules/blueshield/icons/worn_praetorian.dmi
rename to modular_nova/modules/blueshield/icons/worn_praetorian.dmi
diff --git a/modular_nova/modules/blueshield/readme.md b/modular_nova/modules/blueshield/readme.md
new file mode 100644
index 00000000000..7c32f8021a0
--- /dev/null
+++ b/modular_nova/modules/blueshield/readme.md
@@ -0,0 +1,33 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/127
+
+## Title: Blueshield
+
+MODULE ID: BLUESHIELD
+
+### Description:
+
+Adds the blueshield job to the game. It does not however add the blueshield office to the map. This includes all the blueshields items and job descriptors.
+
+### TG Proc Changes:
+
+- code/modules/jobs/jobs.dm > GLOBAL_LIST_INIT(security_positions, list()
+- code/modules/jobs/access.dm > /proc/get_all_accesses()
+
+### Defines:
+
+- #define JOB_DISPLAY_ORDER_BLUESHIELD 34
+- #define ACCESS_BLUESHIELD 71
+
+### Master file additions
+
+- ./modular_nova/master_files/icons/mob/hud.dmi #NEW
+- ./modular_nova/master_files/icons/clothing/hands.dmi #NEW
+- ./modular_nova/master_files/icons/obj/clothing/gloves.dmi #NEW
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Gandalf2k15 - Porting
diff --git a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm b/modular_nova/modules/bluespace_miner/code/bluespace_miner.dm
similarity index 99%
rename from modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm
rename to modular_nova/modules/bluespace_miner/code/bluespace_miner.dm
index be3f8323ec5..b685031de5a 100644
--- a/modular_skyrat/modules/bluespace_miner/code/bluespace_miner.dm
+++ b/modular_nova/modules/bluespace_miner/code/bluespace_miner.dm
@@ -6,7 +6,7 @@
/obj/machinery/bluespace_miner
name = "bluespace miner"
desc = "Through the power of bluespace, it is capable of producing materials."
- icon = 'modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi'
+ icon = 'modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi'
icon_state = "miner"
density = TRUE
diff --git a/modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi b/modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi
similarity index 100%
rename from modular_skyrat/modules/bluespace_miner/icons/bluespace_miner.dmi
rename to modular_nova/modules/bluespace_miner/icons/bluespace_miner.dmi
diff --git a/modular_skyrat/modules/bluespace_miner/readme.md b/modular_nova/modules/bluespace_miner/readme.md
similarity index 100%
rename from modular_skyrat/modules/bluespace_miner/readme.md
rename to modular_nova/modules/bluespace_miner/readme.md
diff --git a/modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm b/modular_nova/modules/bodyparts/code/_mutant_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/_mutant_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/_mutant_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/akula_bodyparts.dm b/modular_nova/modules/bodyparts/code/akula_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/akula_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/akula_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/aquatic_bodyparts.dm b/modular_nova/modules/bodyparts/code/aquatic_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/aquatic_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/aquatic_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/ashwalker_bodyparts.dm b/modular_nova/modules/bodyparts/code/ashwalker_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/ashwalker_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/ashwalker_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm b/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/ghoul_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/golem_bodyparts.dm b/modular_nova/modules/bodyparts/code/golem_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/golem_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/golem_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/human_bodyparts.dm b/modular_nova/modules/bodyparts/code/human_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/human_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/human_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/insect_bodyparts.dm b/modular_nova/modules/bodyparts/code/insect_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/insect_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/insect_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/lizard_bodyparts.dm b/modular_nova/modules/bodyparts/code/lizard_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/lizard_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/lizard_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/luminescent_bodyparts.dm b/modular_nova/modules/bodyparts/code/luminescent_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/luminescent_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/luminescent_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/moth_bodyparts.dm b/modular_nova/modules/bodyparts/code/moth_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/moth_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/moth_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/mushperson_bodyparts.dm b/modular_nova/modules/bodyparts/code/mushperson_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/mushperson_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/mushperson_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/parts.dm b/modular_nova/modules/bodyparts/code/parts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/parts.dm
rename to modular_nova/modules/bodyparts/code/parts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/podperson_bodyparts.dm b/modular_nova/modules/bodyparts/code/podperson_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/podperson_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/podperson_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/roundstartslime_bodyparts.dm b/modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/roundstartslime_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/roundstartslime_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/skrell_bodyparts.dm b/modular_nova/modules/bodyparts/code/skrell_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/skrell_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/skrell_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/slime_bodyparts.dm b/modular_nova/modules/bodyparts/code/slime_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/slime_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/slime_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm b/modular_nova/modules/bodyparts/code/snail_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/snail_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/snail_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/stargazer_bodyparts.dm b/modular_nova/modules/bodyparts/code/stargazer_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/stargazer_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/stargazer_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/taur_bodyparts.dm b/modular_nova/modules/bodyparts/code/taur_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/taur_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/taur_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm b/modular_nova/modules/bodyparts/code/teshari_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/teshari_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/teshari_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/vox_bodyparts.dm b/modular_nova/modules/bodyparts/code/vox_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/vox_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/vox_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/code/xenohybrid_bodyparts.dm b/modular_nova/modules/bodyparts/code/xenohybrid_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/bodyparts/code/xenohybrid_bodyparts.dm
rename to modular_nova/modules/bodyparts/code/xenohybrid_bodyparts.dm
diff --git a/modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/akula_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/akula_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/aquatic_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/aquatic_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi b/modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/ghoul_bodyparts.dmi
rename to modular_nova/modules/bodyparts/icons/ghoul_bodyparts.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/human_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/human_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/insect_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/insect_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi b/modular_nova/modules/bodyparts/icons/ipc_parts.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/ipc_parts.dmi
rename to modular_nova/modules/bodyparts/icons/ipc_parts.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/lizard_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/lizard_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/mammal_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/mammal_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/moth_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/moth_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/skrell_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/skrell_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/slime_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/slime_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/synthliz_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi b/modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/taur_invisible_legs.dmi
rename to modular_nova/modules/bodyparts/icons/taur_invisible_legs.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/teshari_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/teshari_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/vox_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/vox_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/bodyparts/icons/xeno_parts_greyscale.dmi
rename to modular_nova/modules/bodyparts/icons/xeno_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/bongs/code/bong.dm b/modular_nova/modules/bongs/code/bong.dm
similarity index 92%
rename from modular_skyrat/modules/bongs/code/bong.dm
rename to modular_nova/modules/bongs/code/bong.dm
index 614ccfca343..41439c3ef8e 100644
--- a/modular_skyrat/modules/bongs/code/bong.dm
+++ b/modular_nova/modules/bongs/code/bong.dm
@@ -1,9 +1,9 @@
/obj/item/bong
name = "bong"
desc = "Technically known as a water pipe."
- icon = 'modular_skyrat/modules/bongs/icons/bong.dmi'
- lefthand_file = 'modular_skyrat/modules/bongs/icons/lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/bongs/icons/righthand.dmi'
+ icon = 'modular_nova/modules/bongs/icons/bong.dmi'
+ lefthand_file = 'modular_nova/modules/bongs/icons/lefthand.dmi'
+ righthand_file = 'modular_nova/modules/bongs/icons/righthand.dmi'
icon_state = "bongoff"
inhand_icon_state = "bongoff"
@@ -104,10 +104,10 @@
spawn_cloud(pos, smoke_range)
if(moan_chance > 0)
if(prob(moan_chance))
- playsound(hit_mob, pick('modular_skyrat/master_files/sound/effects/lungbust_moan1.ogg','modular_skyrat/master_files/sound/effects/lungbust_moan2.ogg', 'modular_skyrat/master_files/sound/effects/lungbust_moan3.ogg'), 50, TRUE)
+ playsound(hit_mob, pick('modular_nova/master_files/sound/effects/lungbust_moan1.ogg','modular_nova/master_files/sound/effects/lungbust_moan2.ogg', 'modular_nova/master_files/sound/effects/lungbust_moan3.ogg'), 50, TRUE)
hit_mob.emote("moan")
else
- playsound(hit_mob, pick('modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE)
+ playsound(hit_mob, pick('modular_nova/master_files/sound/effects/lungbust_cough1.ogg','modular_nova/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE)
hit_mob.emote("cough")
if(bong_hits <= 0)
balloon_alert(hit_mob, "out of uses!")
diff --git a/modular_skyrat/modules/bongs/icons/bong.dmi b/modular_nova/modules/bongs/icons/bong.dmi
similarity index 100%
rename from modular_skyrat/modules/bongs/icons/bong.dmi
rename to modular_nova/modules/bongs/icons/bong.dmi
diff --git a/modular_skyrat/modules/bongs/icons/lefthand.dmi b/modular_nova/modules/bongs/icons/lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/bongs/icons/lefthand.dmi
rename to modular_nova/modules/bongs/icons/lefthand.dmi
diff --git a/modular_skyrat/modules/bongs/icons/righthand.dmi b/modular_nova/modules/bongs/icons/righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/bongs/icons/righthand.dmi
rename to modular_nova/modules/bongs/icons/righthand.dmi
diff --git a/modular_nova/modules/borg_buffs/code/robot.dm b/modular_nova/modules/borg_buffs/code/robot.dm
new file mode 100644
index 00000000000..6f4c634897b
--- /dev/null
+++ b/modular_nova/modules/borg_buffs/code/robot.dm
@@ -0,0 +1,248 @@
+#define BASE_SHAKER_JUICE_REAGENTS list(\
+ /datum/reagent/consumable/aloejuice,\
+ /datum/reagent/consumable/applejuice,\
+ /datum/reagent/consumable/banana,\
+ /datum/reagent/consumable/berryjuice,\
+ /datum/reagent/consumable/blumpkinjuice,\
+ /datum/reagent/consumable/carrotjuice,\
+ /datum/reagent/consumable/grapejuice,\
+ /datum/reagent/consumable/lemonjuice,\
+ /datum/reagent/consumable/lemon_lime,\
+ /datum/reagent/consumable/limejuice,\
+ /datum/reagent/consumable/parsnipjuice,\
+ /datum/reagent/consumable/peachjuice,\
+ /datum/reagent/consumable/pineapplejuice,\
+ /datum/reagent/consumable/potato_juice,\
+ /datum/reagent/consumable/pumpkinjuice,\
+ /datum/reagent/consumable/orangejuice,\
+ /datum/reagent/consumable/tomatojuice,\
+ /datum/reagent/consumable/watermelonjuice\
+ )
+
+#define BASE_SHAKER_ALCOHOL_REAGENTS list(\
+ /datum/reagent/consumable/ethanol/absinthe,\
+ /datum/reagent/consumable/ethanol/ale,\
+ /datum/reagent/consumable/ethanol/amaretto,\
+ /datum/reagent/consumable/ethanol/applejack,\
+ /datum/reagent/consumable/ethanol/beer,\
+ /datum/reagent/consumable/ethanol/cognac,\
+ /datum/reagent/consumable/ethanol/champagne,\
+ /datum/reagent/consumable/ethanol/creme_de_cacao,\
+ /datum/reagent/consumable/ethanol/creme_de_coconut,\
+ /datum/reagent/consumable/ethanol/creme_de_menthe,\
+ /datum/reagent/consumable/ethanol,\
+ /datum/reagent/consumable/ethanol/gin,\
+ /datum/reagent/consumable/ethanol/hooch,\
+ /datum/reagent/consumable/ethanol/kahlua,\
+ /datum/reagent/consumable/laughter,\
+ /datum/reagent/consumable/ethanol/lizardwine,\
+ /datum/reagent/consumable/ethanol/beer/maltliquor,\
+ /datum/reagent/consumable/nothing,\
+ /datum/reagent/consumable/ethanol/rum,\
+ /datum/reagent/consumable/ethanol/sake,\
+ /datum/reagent/consumable/ethanol/synthanol,\
+ /datum/reagent/consumable/ethanol/tequila,\
+ /datum/reagent/consumable/ethanol/triple_sec,\
+ /datum/reagent/consumable/ethanol/vermouth,\
+ /datum/reagent/consumable/ethanol/vodka,\
+ /datum/reagent/consumable/ethanol/whiskey,\
+ /datum/reagent/consumable/ethanol/wine\
+ )
+
+#define BASE_SHAKER_SODA_REAGENTS list(\
+ /datum/reagent/consumable/dr_gibb,\
+ /datum/reagent/consumable/grape_soda,\
+ /datum/reagent/consumable/pwr_game,\
+ /datum/reagent/consumable/shamblers,\
+ /datum/reagent/consumable/sodawater,\
+ /datum/reagent/consumable/sol_dry,\
+ /datum/reagent/consumable/space_up,\
+ /datum/reagent/consumable/space_cola,\
+ /datum/reagent/consumable/spacemountainwind\
+ )
+
+#define BASE_SHAKER_MISC_REAGENTS list(\
+ /datum/reagent/consumable/blackpepper,\
+ /datum/reagent/blood,\
+ /datum/reagent/pax/catnip,\
+ /datum/reagent/consumable/coco,\
+ /datum/reagent/toxin/coffeepowder,\
+ /datum/reagent/consumable/cream,\
+ /datum/reagent/consumable/enzyme,\
+ /datum/reagent/consumable/eggyolk,\
+ /datum/reagent/consumable/honey,\
+ /datum/reagent/consumable/grenadine,\
+ /datum/reagent/consumable/ice,\
+ /datum/reagent/iron,\
+ /datum/reagent/consumable/menthol,\
+ /datum/reagent/consumable/milk,\
+ /datum/reagent/toxin/mushroom_powder,\
+ /datum/reagent/consumable/nutriment,\
+ /datum/reagent/consumable/soymilk,\
+ /datum/reagent/consumable/sugar,\
+ /datum/reagent/toxin/teapowder,\
+ /datum/reagent/consumable/tonic,\
+ /datum/reagent/consumable/vanilla,\
+ /datum/reagent/water\
+ )
+
+
+/obj/item/reagent_containers/borghypo/borgshaker/specific
+ icon = 'modular_nova/modules/borg_buffs/icons/items_cyborg.dmi'
+ icon_state = "misc"
+
+/obj/item/reagent_containers/borghypo/borgshaker/specific/juice
+ name = "cyborg juice shaker"
+ icon_state = "juice"
+ default_reagent_types = BASE_SHAKER_JUICE_REAGENTS
+
+/obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol
+ name = "cyborg alcohol shaker"
+ icon_state = "alcohol"
+ default_reagent_types = BASE_SHAKER_ALCOHOL_REAGENTS
+
+/obj/item/reagent_containers/borghypo/borgshaker/specific/soda
+ name = "cyborg soda shaker"
+ icon_state = "soda"
+ default_reagent_types = BASE_SHAKER_SODA_REAGENTS
+
+/obj/item/reagent_containers/borghypo/borgshaker/specific/misc
+ name = "cyborg misc shaker"
+ icon_state = "misc"
+ default_reagent_types = BASE_SHAKER_MISC_REAGENTS
+
+/obj/item/cooking/cyborg/power
+ name = "automated cooking tool"
+ desc = "A cyborg fitted module resembling the rolling pins and Knifes"
+ icon = 'modular_nova/modules/borg_buffs/icons/items_cyborg.dmi'
+ icon_state = "knife_screw_cyborg"
+ hitsound = 'sound/items/drill_hit.ogg'
+ usesound = 'sound/items/drill_use.ogg'
+ toolspeed = 0.5
+ tool_behaviour = TOOL_KNIFE
+
+/obj/item/cooking/cyborg/power/examine()
+ . = ..()
+ . += " It's fitted with a [tool_behaviour == TOOL_KNIFE ? "knife" : "rolling pin"] head."
+
+/obj/item/cooking/cyborg/power/attack_self(mob/user)
+ playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE)
+ if(tool_behaviour != TOOL_ROLLINGPIN)
+ tool_behaviour = TOOL_ROLLINGPIN
+ to_chat(user, span_notice("You attach the rolling pin bit to [src]."))
+ icon_state = "rolling_bolt_cyborg"
+ else
+ tool_behaviour = TOOL_KNIFE
+ to_chat(user, span_notice("You attach the knife bit to [src]."))
+ icon_state = "knife_screw_cyborg"
+
+/obj/item/inducer/cyborg
+ name = "Cyborg Inducer"
+ desc = "A tool for inductively charging internal power cells using the battery of a cyborg"
+ powertransfer = 250
+ var/power_safety_threshold = 1000
+
+
+
+/obj/item/inducer/cyborg/attackby(obj/item/weapon, mob/user)
+ return
+
+/obj/item/inducer/cyborg/recharge(atom/movable/target_atom, mob/user)
+ if(!iscyborg(user))
+ return
+ var/mob/living/silicon/robot/borg_user = user
+ cell = borg_user.cell
+ if(!isturf(target_atom) && user.loc == target_atom)
+ return FALSE
+ if(recharging)
+ return TRUE
+ else
+ recharging = TRUE
+ var/obj/item/stock_parts/cell/target_cell = target_atom.get_cell()
+ var/obj/target_object
+ var/coefficient = 1
+ if(istype(target_atom, /obj/item/gun/energy))
+ to_chat(user, span_alert("Error unable to interface with device."))
+ return FALSE
+ if(istype(target_atom, /obj/item/clothing/suit/space))
+ to_chat(user, span_alert("Error unable to interface with device."))
+ return FALSE
+ if(cell.charge <= power_safety_threshold ) // Cyborg charge safety. Prevents a borg from inducing themself to death.
+ to_chat(user, span_alert("Unable to charge device. User battery safety engaged."))
+ return
+ if(istype(target_atom, /obj))
+ target_object = target_atom
+ if(target_cell)
+ var/done_any = FALSE
+ if(target_cell.charge >= target_cell.maxcharge)
+ to_chat(user, span_notice("[target_atom] is fully charged!"))
+ recharging = FALSE
+ return TRUE
+ user.visible_message(span_notice("[user] starts recharging [target_atom] with [src]."), span_notice("You start recharging [target_atom] with [src]."))
+ while(target_cell.charge < target_cell.maxcharge)
+ if(do_after(user, 1 SECONDS, target = user) && cell.charge > (power_safety_threshold + powertransfer))
+ done_any = TRUE
+ induce(target_cell, coefficient)
+ do_sparks(1, FALSE, target_atom)
+ if(target_object)
+ target_object.update_appearance()
+ else
+ break
+ if(done_any) // Only show a message if we succeeded at least once
+ user.visible_message(span_notice("[user] recharged [target_atom]!"), span_notice("You recharged [target_atom]!"))
+ recharging = FALSE
+ return TRUE
+ recharging = FALSE
+
+
+/obj/item/inducer/attack(mob/target_mob, mob/living/user)
+ if(user.combat_mode)
+ return ..()
+
+ if(cantbeused(user))
+ return
+
+ if(recharge(target_mob, user))
+ return
+ return ..()
+
+/obj/item/inducer/cyborg/attack_self(mob/user)
+ return
+
+// Wirebrush for janiborg
+/datum/design/borg_wirebrush
+ name = "Wire-brush Module"
+ id = "borg_upgrade_brush"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/wirebrush
+ materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2)
+ construction_time = 40
+ category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR)
+
+/obj/item/borg/upgrade/wirebrush
+ name = "janitor cyborg wire-brush"
+ desc = "A tool to remove rust from walls."
+ icon_state = "cyborg_upgrade3"
+ require_model = TRUE
+ model_type = list(/obj/item/robot_model/janitor)
+ model_flags = BORG_MODEL_JANITOR
+
+/obj/item/borg/upgrade/wirebrush/action(mob/living/silicon/robot/cyborg)
+ . = ..()
+ if(.)
+ for(var/obj/item/wirebrush/brush in cyborg.model.modules)
+ cyborg.model.remove_module(brush, TRUE)
+
+ var/obj/item/wirebrush/brush = new /obj/item/wirebrush(cyborg.model)
+ cyborg.model.basic_modules += brush
+ cyborg.model.add_module(brush, FALSE, TRUE)
+
+/obj/item/borg/upgrade/wirebrush/deactivate(mob/living/silicon/robot/cyborg, user = usr)
+ . = ..()
+ if(.)
+ for(var/obj/item/wirebrush/brush in cyborg.model.modules)
+ cyborg.model.remove_module(brush, TRUE)
+
+ var/obj/item/wirebrush/brush = new (cyborg.model)
+ cyborg.model.basic_modules += brush
+ cyborg.model.add_module(brush, FALSE, TRUE)
diff --git a/modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm b/modular_nova/modules/borg_buffs/code/snack_dispensor.dm
similarity index 97%
rename from modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm
rename to modular_nova/modules/borg_buffs/code/snack_dispensor.dm
index 48db5b6cdd0..ad7a59f05e0 100644
--- a/modular_skyrat/modules/borg_buffs/code/snack_dispensor.dm
+++ b/modular_nova/modules/borg_buffs/code/snack_dispensor.dm
@@ -132,13 +132,13 @@
/obj/item/food/cookie/bacon
name = "strip of bacon"
desc = "BACON!!!"
- icon = 'modular_skyrat/master_files/icons/obj/food/snacks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/snacks.dmi'
icon_state = "bacon_strip"
foodtypes = MEAT
/obj/item/food/cookie/cloth
name = "odd cookie"
desc = "A cookie that appears to be made out of... some form of cloth?"
- icon = 'modular_skyrat/master_files/icons/obj/food/snacks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/snacks.dmi'
icon_state = "cookie_cloth"
foodtypes = CLOTH
diff --git a/modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi b/modular_nova/modules/borg_buffs/icons/items_cyborg.dmi
similarity index 100%
rename from modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi
rename to modular_nova/modules/borg_buffs/icons/items_cyborg.dmi
diff --git a/modular_skyrat/modules/borg_buffs/readme.md b/modular_nova/modules/borg_buffs/readme.md
similarity index 100%
rename from modular_skyrat/modules/borg_buffs/readme.md
rename to modular_nova/modules/borg_buffs/readme.md
diff --git a/modular_skyrat/modules/borgs/code/inventory.dm b/modular_nova/modules/borgs/code/inventory.dm
similarity index 100%
rename from modular_skyrat/modules/borgs/code/inventory.dm
rename to modular_nova/modules/borgs/code/inventory.dm
diff --git a/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm b/modular_nova/modules/borgs/code/mechafabricator_designs.dm
similarity index 100%
rename from modular_skyrat/modules/borgs/code/mechafabricator_designs.dm
rename to modular_nova/modules/borgs/code/mechafabricator_designs.dm
diff --git a/modular_nova/modules/borgs/code/robot.dm b/modular_nova/modules/borgs/code/robot.dm
new file mode 100644
index 00000000000..c86ecb71857
--- /dev/null
+++ b/modular_nova/modules/borgs/code/robot.dm
@@ -0,0 +1,110 @@
+/mob/living/silicon/robot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
+ . = ..()
+ if(robot_resting)
+ robot_resting = FALSE
+ on_standing_up()
+ update_icons()
+
+/mob/living/silicon/robot/toggle_resting()
+ robot_lay_down()
+
+/mob/living/silicon/robot/on_lying_down(new_lying_angle)
+ if(layer == initial(layer)) //to avoid things like hiding larvas.
+ layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
+ density = FALSE // We lose density and stop bumping passable dense things.
+
+ if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
+ maptext_height = 32 //Offset base chat-height value
+
+ // Resting effects
+ var/turf/sit_pos = get_turf(src)
+ var/obj/structure/table/tabled = locate(/obj/structure/table) in sit_pos.contents
+ if(!tabled)
+ new /obj/effect/temp_visual/mook_dust/robot(get_turf(src))
+ playsound(src, 'modular_nova/master_files/sound/effects/robot_sit.ogg', 25, TRUE)
+ return
+ else
+ new /obj/effect/temp_visual/mook_dust/robot/table(get_turf(src))
+ playsound(src, 'modular_nova/master_files/sound/effects/robot_bump.ogg', 50, TRUE)
+
+ var/list/items_to_move = list()
+
+ for(var/obj/item/gen_item in sit_pos.contents)
+ if(!gen_item.anchored)
+ items_to_move += gen_item
+ if(items_to_move.len >= 8)
+ break
+
+ for(var/obj/item/table_contents in items_to_move)
+
+ table_contents.throw_at(get_ranged_target_turf(table_contents, pick(GLOB.cardinals), range = 1), range = 1, speed = 1)
+
+
+/mob/living/silicon/robot/on_standing_up()
+ if(layer == LYING_MOB_LAYER)
+ layer = initial(layer)
+ density = initial(density) // We were prone before, so we become dense and things can bump into us again.
+ if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
+ maptext_height = 48 //Offset value of tallborgs
+
+/mob/living/silicon/robot/proc/rest_style()
+ set name = "Switch Rest Style"
+ set category = "AI Commands"
+ set desc = "Select your resting pose."
+ if(!can_rest())
+ to_chat(src, span_warning("You can't do that!"))
+ return
+ var/choice = tgui_alert(src, "Select resting pose", "", list("Resting", "Sitting", "Belly up"))
+ switch(choice)
+ if("Resting")
+ robot_rest_style = ROBOT_REST_NORMAL
+ if("Sitting")
+ robot_rest_style = ROBOT_REST_SITTING
+ if("Belly up")
+ robot_rest_style = ROBOT_REST_BELLY_UP
+ robot_resting = robot_rest_style
+ if (robot_resting)
+ on_lying_down()
+ update_icons()
+
+/mob/living/silicon/robot/proc/robot_lay_down()
+ set name = "Lay down"
+ set category = "AI Commands"
+ if(!can_rest())
+ to_chat(src, span_warning("You can't do that!"))
+ return
+ if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious
+ return
+ if(robot_resting)
+ to_chat(src, span_notice("You are now getting up."))
+ robot_resting = FALSE
+ mobility_flags = MOBILITY_FLAGS_DEFAULT
+ on_standing_up()
+ else
+ to_chat(src, span_notice("You are now laying down."))
+ robot_resting = robot_rest_style
+ on_lying_down()
+ update_icons()
+
+/mob/living/silicon/robot/update_resting()
+ . = ..()
+ if(can_rest())
+ robot_resting = FALSE
+ update_icons()
+
+/mob/living/silicon/robot/update_module_innate()
+ ..()
+ if(hands)
+ hands.icon = (model.model_select_alternate_icon ? model.model_select_alternate_icon : initial(hands.icon))
+
+/**
+ * Safe check of the cyborg's model_features list.
+ *
+ * model_features is defined in modular_nova\modules\altborgs\code\modules\mob\living\silicon\robot\robot_model.dm.
+ */
+/mob/living/silicon/robot/proc/can_rest()
+ if(model && model.model_features && ((TRAIT_R_WIDE in model.model_features) || (TRAIT_R_TALL in model.model_features)))
+ if(TRAIT_IMMOBILIZED in _status_traits)
+ return FALSE
+ return TRUE
+ return FALSE
diff --git a/modular_skyrat/modules/borgs/code/robot_defines.dm b/modular_nova/modules/borgs/code/robot_defines.dm
similarity index 100%
rename from modular_skyrat/modules/borgs/code/robot_defines.dm
rename to modular_nova/modules/borgs/code/robot_defines.dm
diff --git a/modular_skyrat/modules/borgs/code/robot_items.dm b/modular_nova/modules/borgs/code/robot_items.dm
similarity index 98%
rename from modular_skyrat/modules/borgs/code/robot_items.dm
rename to modular_nova/modules/borgs/code/robot_items.dm
index 46b1532f9ee..6b65777bf6b 100644
--- a/modular_skyrat/modules/borgs/code/robot_items.dm
+++ b/modular_nova/modules/borgs/code/robot_items.dm
@@ -440,14 +440,14 @@
/obj/item/shockpaddles/syndicate/cyborg/ninja
name = "modified defibrillator paddles"
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "ninjapaddles0"
base_icon_state = "ninjapaddles"
/obj/item/reagent_containers/borghypo/syndicate/ninja
name = "modified cyborg hypospray"
desc = "An experimental piece of technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense and nutriment for the operative in the field."
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "borghypo_n"
charge_cost = 20
recharge_time = 2
@@ -458,7 +458,7 @@
/obj/item/crowbar/cyborg/power
name = "modular crowbar"
desc = "A cyborg fitted module resembling the jaws of life."
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "jaws_pry_cyborg"
usesound = 'sound/items/jaws_pry.ogg'
force = 10
@@ -484,7 +484,7 @@
/obj/item/screwdriver/cyborg/power
name = "automated drill"
desc = "A cyborg fitted module resembling the hand drill"
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "drill_screw_cyborg"
hitsound = 'sound/items/drill_hit.ogg'
usesound = 'sound/items/drill_use.ogg'
@@ -532,7 +532,7 @@
var/disguise_icon_override
var/disguise_pixel_offset = 0
var/disguise_hat_offset = 0
- /// Traits unique to this model (deadsprite, wide/dogborginess, etc.). Mirrors the definition in modular_skyrat\modules\borgs\code\modules\mob\living\silicon\robot\robot_model.dm
+ /// Traits unique to this model (deadsprite, wide/dogborginess, etc.). Mirrors the definition in modular_nova\modules\borgs\code\modules\mob\living\silicon\robot\robot_model.dm
var/list/disguise_model_features = list()
var/disguise_special_light_key
var/mob/listeningTo
diff --git a/modular_skyrat/modules/borgs/code/robot_model.dm b/modular_nova/modules/borgs/code/robot_model.dm
similarity index 97%
rename from modular_skyrat/modules/borgs/code/robot_model.dm
rename to modular_nova/modules/borgs/code/robot_model.dm
index 8c94520ad0d..4a7875e8bc5 100644
--- a/modular_skyrat/modules/borgs/code/robot_model.dm
+++ b/modular_nova/modules/borgs/code/robot_model.dm
@@ -2,6 +2,7 @@
var/icon/cyborg_icon_override
var/sleeper_overlay
var/cyborg_pixel_offset
+ /// Alternate icon file used for this module's collapsed UI icon
var/model_select_alternate_icon
/// Traits unique to this model, i.e. having a unique dead sprite, being wide or being small enough to reject shrinker modules. Leverages defines in code\__DEFINES\~skyrat_defines\robot_defines.dm
/// If a sprite overlaps above the standard height, ensure it is not overlapping icons in the selector wheel.
@@ -141,14 +142,14 @@
/obj/item/robot_model/clown
borg_skins = list(
"Default" = list(SKIN_ICON_STATE = "clown"),
- "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)),
- "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'),
- "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)),
+ "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)),
+ "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi'),
+ "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_nova/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK)),
/// 32x64 skins
"K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = CYBORG_ICON_CLOWN_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)
@@ -194,6 +195,7 @@
"NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)
+//JANITOR
/obj/item/robot_model/janitor
borg_skins = list(
/// 32x32 Skins
@@ -292,6 +294,7 @@
"NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)
+//SECURITY
/obj/item/robot_model/security
borg_skins = list(
/// 32x32 Skins
@@ -353,6 +356,7 @@
hat_offset = 0
cyborg_base_icon = "cargo"
model_select_icon = "cargo"
+ model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi'
canDispose = TRUE
borg_skins = list(
/// 32x32 Skins
@@ -374,7 +378,6 @@
"NiKO" = list(SKIN_ICON_STATE = "mmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(TRAIT_R_UNIQUEWRECK, TRAIT_R_UNIQUETIP, TRAIT_R_TALL), SKIN_HAT_OFFSET = 15)
)
-
//SYNDICATE
/obj/item/robot_model/syndicatejack
name = "Syndicate"
@@ -461,7 +464,7 @@
cyborg_base_icon = "ninja_sec"
cyborg_icon_override = CYBORG_ICON_NINJA
model_select_icon = "ninjaborg"
- model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi'
+ model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi'
model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) //No more charging them with a flash and thinking it is a good idea
hat_offset = 3
borg_skins = list(
@@ -515,7 +518,7 @@
cyborg_base_icon = "ninja_medical"
cyborg_icon_override = CYBORG_ICON_NINJA
model_select_icon = "ninjaborg"
- model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi'
+ model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi'
/obj/item/robot_model/ninja_saboteur
name = "Spider Clan Saboteur"
@@ -544,7 +547,7 @@
cyborg_base_icon = "ninja_engi"
cyborg_icon_override = CYBORG_ICON_NINJA
model_select_icon = "ninjaborg"
- model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi'
+ model_select_alternate_icon = 'modular_nova/modules/borgs/icons/screen_cyborg.dmi'
model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH)
model_traits = list(TRAIT_NEGATES_GRAVITY)
hat_offset = -4
diff --git a/modular_skyrat/modules/borgs/code/robot_upgrade.dm b/modular_nova/modules/borgs/code/robot_upgrade.dm
similarity index 99%
rename from modular_skyrat/modules/borgs/code/robot_upgrade.dm
rename to modular_nova/modules/borgs/code/robot_upgrade.dm
index f7bd0983140..3d23919d392 100644
--- a/modular_skyrat/modules/borgs/code/robot_upgrade.dm
+++ b/modular_nova/modules/borgs/code/robot_upgrade.dm
@@ -341,7 +341,7 @@
/obj/item/quadborg_tongue
name = "synthetic tongue"
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "synthtongue"
hitsound = 'sound/effects/attackblob.ogg'
desc = "For giving affectionate kisses."
@@ -368,7 +368,7 @@
/obj/item/quadborg_nose
name = "boop module"
desc = "The BOOP module"
- icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
+ icon = 'modular_nova/modules/borgs/icons/robot_items.dmi'
icon_state = "nose"
obj_flags = CONDUCTS_ELECTRICITY
item_flags = NOBLUDGEON
diff --git a/modular_skyrat/modules/borgs/code/update_icons.dm b/modular_nova/modules/borgs/code/update_icons.dm
similarity index 100%
rename from modular_skyrat/modules/borgs/code/update_icons.dm
rename to modular_nova/modules/borgs/code/update_icons.dm
diff --git a/modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi b/modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi
rename to modular_nova/modules/borgs/icons/misc/tallrobot_effects.dmi
diff --git a/modular_skyrat/modules/borgs/icons/readme.md b/modular_nova/modules/borgs/icons/readme.md
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/readme.md
rename to modular_nova/modules/borgs/icons/readme.md
diff --git a/modular_skyrat/modules/borgs/icons/robot_items.dmi b/modular_nova/modules/borgs/icons/robot_items.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robot_items.dmi
rename to modular_nova/modules/borgs/icons/robot_items.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots.dmi b/modular_nova/modules/borgs/icons/robots.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots.dmi
rename to modular_nova/modules/borgs/icons/robots.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_cargo.dmi b/modular_nova/modules/borgs/icons/robots_cargo.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_cargo.dmi
rename to modular_nova/modules/borgs/icons/robots_cargo.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_clown.dmi b/modular_nova/modules/borgs/icons/robots_clown.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_clown.dmi
rename to modular_nova/modules/borgs/icons/robots_clown.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_eng.dmi b/modular_nova/modules/borgs/icons/robots_eng.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_eng.dmi
rename to modular_nova/modules/borgs/icons/robots_eng.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_jani.dmi b/modular_nova/modules/borgs/icons/robots_jani.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_jani.dmi
rename to modular_nova/modules/borgs/icons/robots_jani.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_med.dmi b/modular_nova/modules/borgs/icons/robots_med.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_med.dmi
rename to modular_nova/modules/borgs/icons/robots_med.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_mine.dmi b/modular_nova/modules/borgs/icons/robots_mine.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_mine.dmi
rename to modular_nova/modules/borgs/icons/robots_mine.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_ninja.dmi b/modular_nova/modules/borgs/icons/robots_ninja.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_ninja.dmi
rename to modular_nova/modules/borgs/icons/robots_ninja.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_pk.dmi b/modular_nova/modules/borgs/icons/robots_pk.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_pk.dmi
rename to modular_nova/modules/borgs/icons/robots_pk.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_sec.dmi b/modular_nova/modules/borgs/icons/robots_sec.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_sec.dmi
rename to modular_nova/modules/borgs/icons/robots_sec.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_serv.dmi b/modular_nova/modules/borgs/icons/robots_serv.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_serv.dmi
rename to modular_nova/modules/borgs/icons/robots_serv.dmi
diff --git a/modular_skyrat/modules/borgs/icons/robots_syndi.dmi b/modular_nova/modules/borgs/icons/robots_syndi.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/robots_syndi.dmi
rename to modular_nova/modules/borgs/icons/robots_syndi.dmi
diff --git a/modular_nova/modules/borgs/icons/screen_cyborg.dmi b/modular_nova/modules/borgs/icons/screen_cyborg.dmi
new file mode 100644
index 00000000000..233d0d1df45
Binary files /dev/null and b/modular_nova/modules/borgs/icons/screen_cyborg.dmi differ
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi b/modular_nova/modules/borgs/icons/tallrobot_cargo.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_cargo.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi b/modular_nova/modules/borgs/icons/tallrobot_clown.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_clown.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi b/modular_nova/modules/borgs/icons/tallrobot_eng.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_eng.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi b/modular_nova/modules/borgs/icons/tallrobot_jani.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_jani.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_med.dmi b/modular_nova/modules/borgs/icons/tallrobot_med.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_med.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_med.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi b/modular_nova/modules/borgs/icons/tallrobot_mine.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_mine.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi b/modular_nova/modules/borgs/icons/tallrobot_ninja.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_ninja.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi b/modular_nova/modules/borgs/icons/tallrobot_pk.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_pk.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi b/modular_nova/modules/borgs/icons/tallrobot_sec.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_sec.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi b/modular_nova/modules/borgs/icons/tallrobot_serv.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_serv.dmi
diff --git a/modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi b/modular_nova/modules/borgs/icons/tallrobot_syndi.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi
rename to modular_nova/modules/borgs/icons/tallrobot_syndi.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_eng.dmi b/modular_nova/modules/borgs/icons/widerobot_eng.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_eng.dmi
rename to modular_nova/modules/borgs/icons/widerobot_eng.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_jani.dmi b/modular_nova/modules/borgs/icons/widerobot_jani.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_jani.dmi
rename to modular_nova/modules/borgs/icons/widerobot_jani.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_med.dmi b/modular_nova/modules/borgs/icons/widerobot_med.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_med.dmi
rename to modular_nova/modules/borgs/icons/widerobot_med.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_mine.dmi b/modular_nova/modules/borgs/icons/widerobot_mine.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_mine.dmi
rename to modular_nova/modules/borgs/icons/widerobot_mine.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_pk.dmi b/modular_nova/modules/borgs/icons/widerobot_pk.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_pk.dmi
rename to modular_nova/modules/borgs/icons/widerobot_pk.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_sec.dmi b/modular_nova/modules/borgs/icons/widerobot_sec.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_sec.dmi
rename to modular_nova/modules/borgs/icons/widerobot_sec.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobot_serv.dmi b/modular_nova/modules/borgs/icons/widerobot_serv.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobot_serv.dmi
rename to modular_nova/modules/borgs/icons/widerobot_serv.dmi
diff --git a/modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi b/modular_nova/modules/borgs/icons/widerobots_cargo.dmi
similarity index 100%
rename from modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi
rename to modular_nova/modules/borgs/icons/widerobots_cargo.dmi
diff --git a/modular_nova/modules/borgs/readme.md b/modular_nova/modules/borgs/readme.md
new file mode 100644
index 00000000000..704ac54f237
--- /dev/null
+++ b/modular_nova/modules/borgs/readme.md
@@ -0,0 +1,34 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/127
+
+## Title: borgs
+
+MODULE ID: BORGS
+
+
+### Description:
+
+Condenses modular borg skins, items, upgrades and buffs to one folder for sanity's sake
+
+### TG Proc Changes:
+- APPEND: modular_nova/modules/altborgs > modular_nova/modules/borgs
+- /code/modules/mob/living/silicon/robot/robot_modules.dm
+- /code/modules/research/techweb/all_nodes.dm
+
+### Defines:
+
+- /code/modules/research/techweb/all_nodes.dm > /datum/techweb_node/cyborg_upg_util
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Gandalf2k15 - Porting & refactoring
+Azarak - porting
+DuffCreeper - Code, Spriting
+Zergspower - Refactoring
diff --git a/modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm b/modular_nova/modules/bsa_overhaul/code/admin_verb.dm
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/code/admin_verb.dm
rename to modular_nova/modules/bsa_overhaul/code/admin_verb.dm
diff --git a/modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm b/modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm
similarity index 98%
rename from modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm
rename to modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm
index c43f9f34dc7..ec5dea1df8a 100644
--- a/modular_skyrat/modules/bsa_overhaul/code/bsa_cannon.dm
+++ b/modular_nova/modules/bsa_overhaul/code/bsa_cannon.dm
@@ -275,7 +275,7 @@
return
system_state = BSA_SYSTEM_PREFIRE
priority_announce("BLUESPACE TARGETING PARAMETERS SET, PREIGNITION STARTING... CAPACITOR CHARGE AT [round(capacitor_power / 1000000, 0.1)] MW, FIRING IN T-20 SECONDS!", "BLUESPACE ARTILLERY", ANNOUNCER_BLUESPACEARTY)
- alert_sound_to_playing('modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg', override_volume = TRUE)
+ alert_sound_to_playing('modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg', override_volume = TRUE)
message_admins("[user] has started the fire cycle of [src]! Firing at: [ADMIN_VERBOSEJMP(bullseye)]")
set_light(5, 5, COLOR_BLUE_LIGHT)
addtimer(CALLBACK(src, PROC_REF(fire), user, bullseye), 20 SECONDS, TIMER_CLIENT_TIME)
@@ -318,7 +318,7 @@
log_game("[key_name(user)] has launched an artillery strike targeting [AREACOORD(bullseye)].")
minor_announce("BLUESPACE ARTILLERY FIRE SUCCESSFUL! DIRECT HIT!", "BLUESPACE ARTILLERY", TRUE)
create_calculated_explosion(bullseye)
- alert_sound_to_playing('modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg', override_volume = TRUE)
+ alert_sound_to_playing('modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg', override_volume = TRUE)
capacitor_power = 0
else
message_admins("[ADMIN_LOOKUPFLW(user)] has launched an artillery strike targeting [ADMIN_VERBOSEJMP(bullseye)] but it was blocked by [blocker] at [ADMIN_VERBOSEJMP(target)].")
diff --git a/modular_skyrat/modules/bsa_overhaul/code/bsa_computer.dm b/modular_nova/modules/bsa_overhaul/code/bsa_computer.dm
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/code/bsa_computer.dm
rename to modular_nova/modules/bsa_overhaul/code/bsa_computer.dm
diff --git a/modular_skyrat/modules/bsa_overhaul/code/station_goal.dm b/modular_nova/modules/bsa_overhaul/code/station_goal.dm
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/code/station_goal.dm
rename to modular_nova/modules/bsa_overhaul/code/station_goal.dm
diff --git a/modular_skyrat/modules/bsa_overhaul/icons/bsa_parts.dmi b/modular_nova/modules/bsa_overhaul/icons/bsa_parts.dmi
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/icons/bsa_parts.dmi
rename to modular_nova/modules/bsa_overhaul/icons/bsa_parts.dmi
diff --git a/modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg b/modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/sound/superlaser_firing.ogg
rename to modular_nova/modules/bsa_overhaul/sound/superlaser_firing.ogg
diff --git a/modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg b/modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg
similarity index 100%
rename from modular_skyrat/modules/bsa_overhaul/sound/superlaser_prefire.ogg
rename to modular_nova/modules/bsa_overhaul/sound/superlaser_prefire.ogg
diff --git a/modular_skyrat/modules/bsrpd/code/bsrpd.dm b/modular_nova/modules/bsrpd/code/bsrpd.dm
similarity index 93%
rename from modular_skyrat/modules/bsrpd/code/bsrpd.dm
rename to modular_nova/modules/bsrpd/code/bsrpd.dm
index d7493ee1f46..94fe4bf5c8f 100644
--- a/modular_skyrat/modules/bsrpd/code/bsrpd.dm
+++ b/modular_nova/modules/bsrpd/code/bsrpd.dm
@@ -5,10 +5,10 @@
/obj/item/pipe_dispenser/bluespace
name = "bluespace RPD"
desc = "State of the art technology being tested by NT scientists; this is their only working prototype."
- icon = 'modular_skyrat/modules/bsrpd/icons/bsrpd.dmi'
+ icon = 'modular_nova/modules/bsrpd/icons/bsrpd.dmi'
icon_state = "bsrpd"
- lefthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi'
- righthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi'
+ lefthand_file = 'modular_nova/modules/bsrpd/icons/bsrpd_left.dmi'
+ righthand_file = 'modular_nova/modules/bsrpd/icons/bsrpd_right.dmi'
inhand_icon_state = "bsrpd"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
custom_materials = null
diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd.dmi b/modular_nova/modules/bsrpd/icons/bsrpd.dmi
similarity index 100%
rename from modular_skyrat/modules/bsrpd/icons/bsrpd.dmi
rename to modular_nova/modules/bsrpd/icons/bsrpd.dmi
diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi b/modular_nova/modules/bsrpd/icons/bsrpd_left.dmi
similarity index 100%
rename from modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi
rename to modular_nova/modules/bsrpd/icons/bsrpd_left.dmi
diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi b/modular_nova/modules/bsrpd/icons/bsrpd_right.dmi
similarity index 100%
rename from modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi
rename to modular_nova/modules/bsrpd/icons/bsrpd_right.dmi
diff --git a/modular_skyrat/modules/cargo/code/goodies.dm b/modular_nova/modules/cargo/code/goodies.dm
similarity index 100%
rename from modular_skyrat/modules/cargo/code/goodies.dm
rename to modular_nova/modules/cargo/code/goodies.dm
diff --git a/modular_skyrat/modules/cargo/code/items/AFAD.dm b/modular_nova/modules/cargo/code/items/AFAD.dm
similarity index 100%
rename from modular_skyrat/modules/cargo/code/items/AFAD.dm
rename to modular_nova/modules/cargo/code/items/AFAD.dm
diff --git a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm b/modular_nova/modules/cargo/code/items/gbp_punchcard.dm
similarity index 97%
rename from modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm
rename to modular_nova/modules/cargo/code/items/gbp_punchcard.dm
index 4548fe02f67..8c2e39024fb 100644
--- a/modular_skyrat/modules/cargo/code/items/gbp_punchcard.dm
+++ b/modular_nova/modules/cargo/code/items/gbp_punchcard.dm
@@ -8,7 +8,7 @@
desc = "The Good Assistant Points program is designed to supplement the income of otherwise unemployed or unpaid individuals on board Nanotrasen vessels and colonies. \
Simply get your punchcard stamped by a Head of Staff to earn 100 credits per punch upon turn-in at a Good Assistant Point machine! \
Maximum of six punches per any given card. Card replaced upon redemption of existing card. Do not lose your punchcard."
- icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi'
+ icon = 'modular_nova/modules/cargo/icons/punchcard.dmi'
icon_state = "punchcard_0"
w_class = WEIGHT_CLASS_TINY
var/max_punches = 6
@@ -40,14 +40,14 @@
/obj/item/gbp_puncher
name = "Good Assistant Points puncher"
desc = "A puncher for use with the Good Assistant Points system. Use it on a punchcard to punch a hole. Expect to be hassled for punches by assistants."
- icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi'
+ icon = 'modular_nova/modules/cargo/icons/punchcard.dmi'
icon_state = "puncher"
w_class = WEIGHT_CLASS_TINY
/obj/machinery/gbp_redemption
name = "Good Assistant Points Redemption Machine"
desc = "Turn your Good Assistant Points punchcards in here for a payout based on the amount of punches you have, and get a new card!"
- icon = 'modular_skyrat/modules/cargo/icons/punchcard.dmi'
+ icon = 'modular_nova/modules/cargo/icons/punchcard.dmi'
icon_state = "gbp_machine"
density = TRUE
circuit = /obj/item/circuitboard/machine/gbp_redemption
diff --git a/modular_skyrat/modules/cargo/code/items/improvedRCD.dm b/modular_nova/modules/cargo/code/items/improvedRCD.dm
similarity index 100%
rename from modular_skyrat/modules/cargo/code/items/improvedRCD.dm
rename to modular_nova/modules/cargo/code/items/improvedRCD.dm
diff --git a/modular_skyrat/modules/cargo/code/packs.dm b/modular_nova/modules/cargo/code/packs.dm
similarity index 100%
rename from modular_skyrat/modules/cargo/code/packs.dm
rename to modular_nova/modules/cargo/code/packs.dm
diff --git a/modular_skyrat/modules/cargo/icons/punchcard.dmi b/modular_nova/modules/cargo/icons/punchcard.dmi
similarity index 100%
rename from modular_skyrat/modules/cargo/icons/punchcard.dmi
rename to modular_nova/modules/cargo/icons/punchcard.dmi
diff --git a/modular_nova/modules/cargo/readme.md b/modular_nova/modules/cargo/readme.md
new file mode 100644
index 00000000000..f3c626ab43e
--- /dev/null
+++ b/modular_nova/modules/cargo/readme.md
@@ -0,0 +1,30 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/2003
+
+## Title: Adds a bunch of crates to cargo.
+
+MODULE ID: N/A
+
+### Description:
+
+Adds more stuff to cargo.
+
+### TG Proc/File Changes:
+
+- N/A
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+- `modular_nova/master_files/code/modules/cargo/packs/security.dm`: `var/special`
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Porting some of my stuff from the old base. - Owai-Seek
+Citadel Station, and Ghommie, for some of the packs that aren't mine.
diff --git a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm b/modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm
similarity index 96%
rename from modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm
rename to modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm
index 4c0c96f0491..5e28e2433bb 100644
--- a/modular_skyrat/modules/cargo_teleporter/code/cargo_teleporter.dm
+++ b/modular_nova/modules/cargo_teleporter/code/cargo_teleporter.dm
@@ -3,7 +3,7 @@ GLOBAL_LIST_EMPTY(cargo_marks)
/obj/item/cargo_teleporter
name = "cargo teleporter"
desc = "An item that can set down a set number of markers, allowing them to teleport items within a tile to the set markers."
- icon = 'modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi'
+ icon = 'modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi'
icon_state = "cargo_tele"
///the list of markers spawned by this item
var/list/marker_children = list()
@@ -91,7 +91,7 @@ GLOBAL_LIST_EMPTY(cargo_marks)
/obj/effect/decal/cleanable/cargo_mark
name = "cargo mark"
desc = "A mark left behind by a cargo teleporter, which allows targeted teleportation. Can be removed by the cargo teleporter."
- icon = 'modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi'
+ icon = 'modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi'
icon_state = "marker"
///the reference to the item that spawned the cargo mark
var/obj/item/cargo_teleporter/parent_item
diff --git a/modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi b/modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi
similarity index 100%
rename from modular_skyrat/modules/cargo_teleporter/icons/cargo_teleporter.dmi
rename to modular_nova/modules/cargo_teleporter/icons/cargo_teleporter.dmi
diff --git a/modular_skyrat/modules/cargo_teleporter/readme.md b/modular_nova/modules/cargo_teleporter/readme.md
similarity index 100%
rename from modular_skyrat/modules/cargo_teleporter/readme.md
rename to modular_nova/modules/cargo_teleporter/readme.md
diff --git a/modular_skyrat/modules/cell_component/code/cell_component.dm b/modular_nova/modules/cell_component/code/cell_component.dm
similarity index 99%
rename from modular_skyrat/modules/cell_component/code/cell_component.dm
rename to modular_nova/modules/cell_component/code/cell_component.dm
index 52357cd1ba8..75449eec48f 100644
--- a/modular_skyrat/modules/cell_component/code/cell_component.dm
+++ b/modular_nova/modules/cell_component/code/cell_component.dm
@@ -86,7 +86,7 @@ component_cell_out_of_charge/component_cell_removed proc using loc where necessa
UnregisterSignal(parent, COMSIG_CLICK_CTRL_SHIFT)
UnregisterSignal(parent, COMSIG_ATOM_EXAMINE)
-/datum/component/cell/Destroy(force, silent)
+/datum/component/cell/Destroy(force)
if(on_cell_removed)
on_cell_removed = null
if(inserted_cell)
diff --git a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm b/modular_nova/modules/cellguns/code/cellgun_cells.dm
similarity index 96%
rename from modular_skyrat/modules/cellguns/code/cellgun_cells.dm
rename to modular_nova/modules/cellguns/code/cellgun_cells.dm
index 842ed421405..c4215e67db0 100644
--- a/modular_skyrat/modules/cellguns/code/cellgun_cells.dm
+++ b/modular_nova/modules/cellguns/code/cellgun_cells.dm
@@ -1,7 +1,7 @@
/obj/item/weaponcell
name = "default weaponcell"
desc = "used to add ammo types to guns"
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
icon_state = "Oxy1"
w_class = WEIGHT_CLASS_SMALL
/// The ammo type that is added by default when inserting a cell.
diff --git a/modular_skyrat/modules/cellguns/code/cellguns.dm b/modular_nova/modules/cellguns/code/cellguns.dm
similarity index 100%
rename from modular_skyrat/modules/cellguns/code/cellguns.dm
rename to modular_nova/modules/cellguns/code/cellguns.dm
diff --git a/modular_skyrat/modules/cellguns/code/medigun_cells.dm b/modular_nova/modules/cellguns/code/medigun_cells.dm
similarity index 98%
rename from modular_skyrat/modules/cellguns/code/medigun_cells.dm
rename to modular_nova/modules/cellguns/code/medigun_cells.dm
index 15e31a7d20b..1968b167cdc 100644
--- a/modular_skyrat/modules/cellguns/code/medigun_cells.dm
+++ b/modular_nova/modules/cellguns/code/medigun_cells.dm
@@ -406,7 +406,7 @@
return
var/mob/living/carbon/wearer = target
- var/obj/item/clothing/gown = new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight
+ var/obj/item/clothing/gown = new /obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight
if(wearer.equip_to_slot_if_possible(gown, ITEM_SLOT_OCLOTHING, 1, 1, 1))
wearer.visible_message(span_notice("The [gown] covers [wearer] body"), span_notice("The [gown] wraps around your body, covering you"))
@@ -489,12 +489,12 @@
sparks.start()
//Objects Used by medicells.
-/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight
+/obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight
name = "hardlight hospital gown"
desc = "A hospital gown made out of hardlight - you can barely feel it on your body, especially with all the anesthetics."
- icon_state = "lgown"
+ greyscale_colors = "#B2D3CA#B2D3CA#B2D3CA#B2D3CA"
-/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown/hardlight/dropped(mob/user)
+/obj/item/clothing/suit/toggle/labcoat/hospitalgown/hardlight/dropped(mob/user)
. = ..()
var/mob/living/carbon/wearer = user
@@ -508,7 +508,7 @@
name = "salve globule"
desc = "A ball of regenerative synthetic plant matter, contained within a soft hardlight field."
embedding = list("embed_chance" = 100, ignore_throwspeed_threshold = TRUE, "pain_mult" = 0, "jostle_pain_mult" = 0, "fall_chance" = 0)
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
icon_state = "globule"
heals_left = 40 //This means it'll be heaing 15 damage per type max.
@@ -534,7 +534,7 @@
/obj/structure/bed/medical/medigun
name = "hardlight medical bed"
desc = "A medical bed made out of Hardlight"
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
icon_state = "hardlight_down"
base_icon_state = "hardlight"
max_integrity = 1
diff --git a/modular_skyrat/modules/cellguns/code/medigun_research.dm b/modular_nova/modules/cellguns/code/medigun_research.dm
similarity index 100%
rename from modular_skyrat/modules/cellguns/code/medigun_research.dm
rename to modular_nova/modules/cellguns/code/medigun_research.dm
diff --git a/modular_skyrat/modules/cellguns/code/mediguns.dm b/modular_nova/modules/cellguns/code/mediguns.dm
similarity index 95%
rename from modular_skyrat/modules/cellguns/code/mediguns.dm
rename to modular_nova/modules/cellguns/code/mediguns.dm
index 3a79fce401b..1dce3b37995 100644
--- a/modular_skyrat/modules/cellguns/code/mediguns.dm
+++ b/modular_nova/modules/cellguns/code/mediguns.dm
@@ -2,7 +2,7 @@
/obj/item/gun/energy/cell_loaded/medigun
name = "medigun"
desc = "This is my smart gun, it won't hurt anyone friendly, infact it will make them heal! Please tell github if you somehow manage to get this gun."
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi'
icon_state = "medigun"
inhand_icon_state = "chronogun" // Fits best with how the medigun looks, might be changed in the future
ammo_type = list(/obj/item/ammo_casing/energy/medical) // The default option that heals oxygen
@@ -29,7 +29,7 @@
/obj/item/gun/energy/cell_loaded/medigun/upgraded/Initialize(mapload)
. = ..()
- var/mutable_appearance/fastcharge_medigun = mutable_appearance('modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_fastcharge")
+ var/mutable_appearance/fastcharge_medigun = mutable_appearance('modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_fastcharge")
add_overlay(fastcharge_medigun)
// CMO and CC MediGun
@@ -43,7 +43,7 @@
/obj/item/gun/energy/cell_loaded/medigun/cmo/Initialize(mapload)
. = ..()
- var/mutable_appearance/cmo_medigun = mutable_appearance('modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_cmo")
+ var/mutable_appearance/cmo_medigun = mutable_appearance('modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi', "medigun_cmo")
add_overlay(cmo_medigun)
// Medigun power cells
@@ -81,7 +81,7 @@
// Medigun wiki book
/obj/item/book/manual/wiki/mediguns
name = "medigun operating manual"
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
icon_state = "manual"
starting_author = "VeyMedical"
starting_title = "Medigun Operating Manual"
@@ -91,7 +91,7 @@
/obj/item/storage/briefcase/medicalgunset
name = "medigun supply kit"
desc = "A supply kit for the medigun."
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi'
icon_state = "case_standard"
inhand_icon_state = "lockbox"
lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
@@ -127,7 +127,7 @@
/obj/item/weaponcell/medical
name = "default medicell"
desc = "The standard oxygen cell, most guns come with this already installed."
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
icon_state = "Oxy1"
w_class = WEIGHT_CLASS_SMALL
ammo_type = /obj/item/ammo_casing/energy/medical // This is the ammo type that all mediguns come with.
@@ -297,7 +297,7 @@
//Empty Medicell//
/obj/item/device/custom_kit/empty_cell //Having the empty cell as an upgrade kit sounds jank, but it should work well.
name = "empty salve medicell"
- icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
+ icon = 'modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
icon_state = "empty"
desc = "An inactive salve medicell, use this on an aloe leaf to make this into a usable cell."
from_obj = /obj/item/food/grown/aloe
diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi
similarity index 100%
rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi
rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi
diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi
similarity index 100%
rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/misc.dmi
rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/misc.dmi
diff --git a/modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi b/modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi
similarity index 100%
rename from modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi
rename to modular_nova/modules/cellguns/icons/obj/guns/mediguns/projectile.dmi
diff --git a/modular_skyrat/modules/cellguns/readme.md b/modular_nova/modules/cellguns/readme.md
similarity index 100%
rename from modular_skyrat/modules/cellguns/readme.md
rename to modular_nova/modules/cellguns/readme.md
diff --git a/modular_skyrat/modules/central_command_module/code/computers/command_report_computer.dm b/modular_nova/modules/central_command_module/code/computers/command_report_computer.dm
similarity index 100%
rename from modular_skyrat/modules/central_command_module/code/computers/command_report_computer.dm
rename to modular_nova/modules/central_command_module/code/computers/command_report_computer.dm
diff --git a/modular_skyrat/modules/central_command_module/code/computers/ert_control_computer.dm b/modular_nova/modules/central_command_module/code/computers/ert_control_computer.dm
similarity index 100%
rename from modular_skyrat/modules/central_command_module/code/computers/ert_control_computer.dm
rename to modular_nova/modules/central_command_module/code/computers/ert_control_computer.dm
diff --git a/modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm b/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm
similarity index 100%
rename from modular_skyrat/modules/central_command_module/code/computers/station_goal_computer.dm
rename to modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm
diff --git a/modular_skyrat/modules/central_command_module/code/obj/wall.dm b/modular_nova/modules/central_command_module/code/obj/wall.dm
similarity index 100%
rename from modular_skyrat/modules/central_command_module/code/obj/wall.dm
rename to modular_nova/modules/central_command_module/code/obj/wall.dm
diff --git a/modular_skyrat/modules/chadian/code/chadian.dm b/modular_nova/modules/chadian/code/chadian.dm
similarity index 97%
rename from modular_skyrat/modules/chadian/code/chadian.dm
rename to modular_nova/modules/chadian/code/chadian.dm
index fc1e1048235..f37ea8bd794 100644
--- a/modular_skyrat/modules/chadian/code/chadian.dm
+++ b/modular_nova/modules/chadian/code/chadian.dm
@@ -3,7 +3,7 @@
#define RESTING_STATE_REST 2
/mob/living/basic/pet/dog/corgi/ian
- icon = 'modular_skyrat/modules/chadian/icons/ian.dmi'
+ icon = 'modular_nova/modules/chadian/icons/ian.dmi'
ai_controller = /datum/ai_controller/basic_controller/dog/corgi/chadian
var/resting_state = 0
diff --git a/modular_skyrat/modules/chadian/icons/ian.dmi b/modular_nova/modules/chadian/icons/ian.dmi
similarity index 100%
rename from modular_skyrat/modules/chadian/icons/ian.dmi
rename to modular_nova/modules/chadian/icons/ian.dmi
diff --git a/modular_skyrat/modules/chaplain/code/mortis.dm b/modular_nova/modules/chaplain/code/mortis.dm
similarity index 90%
rename from modular_skyrat/modules/chaplain/code/mortis.dm
rename to modular_nova/modules/chaplain/code/mortis.dm
index 78738846050..d75e226bbcc 100644
--- a/modular_skyrat/modules/chaplain/code/mortis.dm
+++ b/modular_nova/modules/chaplain/code/mortis.dm
@@ -20,7 +20,7 @@
/obj/item/implant/mortis/proc/on_deathgasp(mob/source)
SIGNAL_HANDLER
- playsound(source.loc, 'modular_skyrat/modules/chaplain/sound/mortis.ogg', 50, 0)
+ playsound(source.loc, 'modular_nova/modules/chaplain/sound/mortis.ogg', 50, 0)
/obj/item/implanter/mortis
name = "implanter (MORTIS)"
diff --git a/modular_skyrat/modules/chaplain/icons/holy_weapons.dmi b/modular_nova/modules/chaplain/icons/holy_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/chaplain/icons/holy_weapons.dmi
rename to modular_nova/modules/chaplain/icons/holy_weapons.dmi
diff --git a/modular_skyrat/modules/chaplain/sound/mortis.ogg b/modular_nova/modules/chaplain/sound/mortis.ogg
similarity index 100%
rename from modular_skyrat/modules/chaplain/sound/mortis.ogg
rename to modular_nova/modules/chaplain/sound/mortis.ogg
diff --git a/modular_skyrat/modules/clock_cult/code/actions/_action.dm b/modular_nova/modules/clock_cult/code/actions/_action.dm
similarity index 82%
rename from modular_skyrat/modules/clock_cult/code/actions/_action.dm
rename to modular_nova/modules/clock_cult/code/actions/_action.dm
index da48b3712cf..a0071521fc8 100644
--- a/modular_skyrat/modules/clock_cult/code/actions/_action.dm
+++ b/modular_nova/modules/clock_cult/code/actions/_action.dm
@@ -1,6 +1,6 @@
/datum/action/innate/clockcult
- button_icon = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi'
- background_icon = 'modular_skyrat/modules/clock_cult/icons/background_clock.dmi'
+ button_icon = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi'
+ background_icon = 'modular_nova/modules/clock_cult/icons/background_clock.dmi'
background_icon_state = "bg_clock"
check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
@@ -20,7 +20,7 @@
return ..()
-/datum/action/innate/clockcult/quick_bind/Grant(mob/living/recieving_mob)
+/datum/action/innate/clockcult/quick_bind/Grant(mob/living/receiving_mob)
name = scripture.name
desc = scripture.tip
button_icon_state = scripture.button_icon_state
@@ -28,7 +28,7 @@
if(scripture.power_cost)
desc += " Draws [scripture.power_cost]W from the ark per use."
- return ..(recieving_mob)
+ return ..(receiving_mob)
/datum/action/innate/clockcult/quick_bind/Remove(mob/losing_mob)
var/obj/item/clockwork/clockwork_slab/activation_slab = slab_weakref.resolve()
@@ -56,5 +56,5 @@
to_chat(owner, span_brass("You fail to invoke [name]."))
/datum/action/item_action/toggle/clock
- button_icon = 'modular_skyrat/modules/clock_cult/icons/background_clock.dmi'
+ button_icon = 'modular_nova/modules/clock_cult/icons/background_clock.dmi'
background_icon_state = "bg_clock"
diff --git a/modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm b/modular_nova/modules/clock_cult/code/actions/recall_slab.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/actions/recall_slab.dm
rename to modular_nova/modules/clock_cult/code/actions/recall_slab.dm
diff --git a/modular_skyrat/modules/clock_cult/code/actions/whirring_convergence.dm b/modular_nova/modules/clock_cult/code/actions/whirring_convergence.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/actions/whirring_convergence.dm
rename to modular_nova/modules/clock_cult/code/actions/whirring_convergence.dm
diff --git a/modular_skyrat/modules/clock_cult/code/antagonist.dm b/modular_nova/modules/clock_cult/code/antagonist.dm
similarity index 95%
rename from modular_skyrat/modules/clock_cult/code/antagonist.dm
rename to modular_nova/modules/clock_cult/code/antagonist.dm
index c2c57950a0a..264d9848ca6 100644
--- a/modular_skyrat/modules/clock_cult/code/antagonist.dm
+++ b/modular_nova/modules/clock_cult/code/antagonist.dm
@@ -26,7 +26,7 @@
/datum/antagonist/clock_cultist/on_gain()
. = ..()
- owner.current.playsound_local(get_turf(owner.current), 'modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
+ owner.current.playsound_local(get_turf(owner.current), 'modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
/datum/antagonist/clock_cultist/apply_innate_effects(mob/living/mob_override)
diff --git a/modular_skyrat/modules/clock_cult/code/area.dm b/modular_nova/modules/clock_cult/code/area.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/area.dm
rename to modular_nova/modules/clock_cult/code/area.dm
diff --git a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm b/modular_nova/modules/clock_cult/code/components/brass_spreader.dm
similarity index 98%
rename from modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm
rename to modular_nova/modules/clock_cult/code/components/brass_spreader.dm
index 98027573178..711bff25fb5 100644
--- a/modular_skyrat/modules/clock_cult/code/components/brass_spreader.dm
+++ b/modular_nova/modules/clock_cult/code/components/brass_spreader.dm
@@ -18,7 +18,7 @@
src.cooldown = cooldown
-/datum/component/brass_spreader/Destroy(force, silent)
+/datum/component/brass_spreader/Destroy(force)
STOP_PROCESSING(SSobj, src)
return ..()
diff --git a/modular_skyrat/modules/clock_cult/code/components/hint_element.dm b/modular_nova/modules/clock_cult/code/components/hint_element.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/components/hint_element.dm
rename to modular_nova/modules/clock_cult/code/components/hint_element.dm
diff --git a/modular_skyrat/modules/clock_cult/code/components/pickup_element.dm b/modular_nova/modules/clock_cult/code/components/pickup_element.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/components/pickup_element.dm
rename to modular_nova/modules/clock_cult/code/components/pickup_element.dm
diff --git a/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm b/modular_nova/modules/clock_cult/code/components/structure_info_element.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm
rename to modular_nova/modules/clock_cult/code/components/structure_info_element.dm
diff --git a/modular_skyrat/modules/clock_cult/code/globals.dm b/modular_nova/modules/clock_cult/code/globals.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/globals.dm
rename to modular_nova/modules/clock_cult/code/globals.dm
diff --git a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm b/modular_nova/modules/clock_cult/code/items/clockwork_slab.dm
similarity index 95%
rename from modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm
rename to modular_nova/modules/clock_cult/code/items/clockwork_slab.dm
index 8f8f51379ea..01c489c3e8d 100644
--- a/modular_skyrat/modules/clock_cult/code/items/clockwork_slab.dm
+++ b/modular_nova/modules/clock_cult/code/items/clockwork_slab.dm
@@ -4,7 +4,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list())
/obj/item/clockwork
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
/// Extra info to give clock cultists, added via the /datum/element/clockwork_description element
var/clockwork_desc = ""
@@ -21,8 +21,8 @@ GLOBAL_LIST_INIT(clockwork_slabs, list())
clockwork_desc = "A beautiful work of art, harnessing mechanical energy for a variety of useful powers."
item_flags = NOBLUDGEON
icon_state = "clockwork_slab"
- lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
/// The scripture currently being invoked
var/datum/scripture/invoking_scripture
@@ -81,10 +81,10 @@ GLOBAL_LIST_INIT(clockwork_slabs, list())
. = ..()
//Clear quickbinds
for(var/datum/action/innate/clockcult/quick_bind/script as anything in quick_bound_scriptures)
- script.Remove(user)
+ script?.Remove(user)
if(active_scripture)
- active_scripture.end_invocation()
+ active_scripture?.end_invocation()
if(buffer)
buffer = null
@@ -97,7 +97,7 @@ GLOBAL_LIST_INIT(clockwork_slabs, list())
//Grant quickbound spells
for(var/datum/action/innate/clockcult/quick_bind/script as anything in quick_bound_scriptures)
- script.Grant(user)
+ script?.Grant(user)
user.update_action_buttons()
diff --git a/modular_nova/modules/clock_cult/code/items/clothing.dm b/modular_nova/modules/clock_cult/code/items/clothing.dm
new file mode 100644
index 00000000000..db3d91366a4
--- /dev/null
+++ b/modular_nova/modules/clock_cult/code/items/clothing.dm
@@ -0,0 +1,453 @@
+#define VISOR_MOUNT_DAMAGE 20
+#define VISOR_MOUNT_SLEEP_TIME 5 SECONDS
+
+/obj/item/clothing/suit/clockwork
+ name = "bronze armor"
+ desc = "A strong, bronze suit worn by the soldiers of the Ratvarian armies."
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ icon_state = "clockwork_cuirass"
+ armor_type = /datum/armor/suit_clockwork
+ slowdown = 0.6
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ w_class = WEIGHT_CLASS_BULKY
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ allowed = list(
+ /obj/item/clockwork,
+ /obj/item/stack/tile/bronze,
+ /obj/item/gun/ballistic/bow/clockwork,
+ /obj/item/gun/ballistic/rifle/lionhunter/clockwork,
+ )
+
+/datum/armor/suit_clockwork
+ melee = 50
+ bullet = 60
+ laser = 30
+ energy = 80
+ bomb = 80
+ bio = 100
+ fire = 100
+ acid = 100
+
+
+/obj/item/clothing/suit/clockwork/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
+
+
+/obj/item/clothing/suit/clockwork/speed
+ name = "robes of divinity"
+ desc = "A shiny suit, glowing with a vibrant energy. The wearer will be able to move quickly across battlefields, but will be able to withstand less damage before falling."
+ icon_state = "clockwork_cuirass_speed"
+ slowdown = -0.3
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ armor_type = /datum/armor/clockwork_speed
+
+/datum/armor/clockwork_speed
+ melee = 40
+ bullet = 30
+ laser = 10
+ energy = -20
+ bomb = 60
+ bio = 100
+ fire = 100
+ acid = 100
+
+/obj/item/clothing/suit/clockwork/cloak
+ name = "shrouding cloak"
+ desc = "A faltering cloak that bends light around it, distorting the user's appearance, making it hard to see them with the naked eye. However, it provides very little protection."
+ icon_state = "clockwork_cloak"
+ armor_type = /datum/armor/clockwork_cloak
+ actions_types = list(/datum/action/item_action/toggle/clock)
+ slowdown = 0.4
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ /// Is the shroud itself active or not
+ var/shroud_active = FALSE
+ /// Previous alpha value of the user when removing/disabling the jacket
+ var/previous_alpha = 255
+ /// Who is wearing this
+ var/mob/living/wearer
+
+/datum/armor/clockwork_cloak
+ melee = 10
+ bullet = 60
+ laser = 40
+ energy = 20
+ bomb = 40
+ bio = 100
+ fire = 100
+ acid = 100
+
+/obj/item/clothing/suit/clockwork/cloak/Destroy()
+ wearer = null
+
+ return ..()
+
+
+/obj/item/clothing/suit/clockwork/cloak/attack_self(mob/user, modifiers)
+ . = ..()
+ if(shroud_active)
+ disable()
+
+ else
+ enable()
+
+
+/obj/item/clothing/suit/clockwork/cloak/equipped(mob/user, slot)
+ . = ..()
+ if(slot != ITEM_SLOT_OCLOTHING || !IS_CLOCK(user))
+ return
+
+ wearer = user
+
+ if(shroud_active)
+ enable()
+
+
+/obj/item/clothing/suit/clockwork/cloak/dropped(mob/user)
+ . = ..()
+ if(shroud_active)
+ disable()
+
+ wearer = null
+
+
+/// Apply the effects to the wearer, making them pretty hard to see
+/obj/item/clothing/suit/clockwork/cloak/proc/enable()
+ shroud_active = TRUE
+ previous_alpha = wearer.alpha
+ animate(wearer, alpha = 90, time = 3 SECONDS)
+ apply_wibbly_filters(wearer)
+ ADD_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT)
+
+
+/// Un-apply the effects of the cloak, returning the wearer to normal
+/obj/item/clothing/suit/clockwork/cloak/proc/disable()
+ shroud_active = FALSE
+ do_sparks(3, FALSE, wearer)
+ remove_wibbly_filters(wearer)
+ animate(wearer, alpha = previous_alpha, time = 3 SECONDS)
+ REMOVE_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT)
+
+
+/obj/item/clothing/glasses/clockwork
+ name = "base clock glasses"
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ icon_state = "clockwork_cuirass"
+ /// What additional desc to show if the person examining is a clock cultist
+ var/clock_desc = ""
+
+
+/obj/item/clothing/glasses/clockwork/examine(mob/user)
+ . = ..()
+ AddElement(/datum/element/clockwork_description, clock_desc)
+ AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
+
+
+// Thermal goggles, no protection from eye stuff
+/obj/item/clothing/glasses/clockwork/wraith_spectacles
+ name = "wraith spectacles"
+ desc = "Mystical glasses that glow with a bright energy. Some say they can see things that shouldn't be seen."
+ icon_state = "wraith_specs_0"
+ base_icon_state = "wraith_specs"
+ invis_view = SEE_INVISIBLE_OBSERVER
+ invis_override = null
+ flash_protect = FLASH_PROTECTION_SENSITIVE
+ vision_flags = SEE_MOBS
+ color_cutoffs = list(5, 15, 5)
+ glass_colour_type = /datum/client_colour/glass_colour/yellow
+ actions_types = list(/datum/action/item_action/toggle/clock)
+ clock_desc = "Applies passive eye damage that regenerates after unequipping, grants thermal vision, and lets you see all forms of invisibility."
+ /// Who is currently wearing the goggles
+ var/mob/living/wearer
+ /// Are the glasses enabled (flipped down)
+ var/enabled = TRUE
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/Initialize(mapload)
+ . = ..()
+ update_icon_state()
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ wearer = null
+ return ..()
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]_[!enabled]"
+ worn_icon_state = "[base_icon_state]_[!enabled]"
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/attack_self(mob/user, modifiers)
+ . = ..()
+ if(enabled)
+ disable()
+ else
+ enable()
+
+ if(iscarbon(user))
+ var/mob/living/carbon/carbon_user = user
+ carbon_user.head_update(src, forced = TRUE)
+
+
+/// "enable" the spectacles, flipping them down and applying their effects, calling on_toggle_eyes() if someone is wearing them
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/enable()
+ enabled = TRUE
+ color_cutoffs = list(15, 12, 0)
+ visor_toggling()
+
+ if(wearer)
+ on_toggle_eyes()
+
+ update_icon_state()
+ wearer.update_sight()
+
+
+/// "disable" the spectacles, flipping them up and removing all applied effects
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/disable()
+ enabled = FALSE
+ color_cutoffs = null
+ visor_toggling() //this doesn't remove everything, check later
+
+ if(wearer)
+ de_toggle_eyes()
+
+ update_icon_state()
+ wearer.update_sight()
+
+
+/// The start of application of the actual effects, including eye damage
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/on_toggle_eyes()
+ wearer.update_sight()
+ to_chat(wearer, span_clockgray("You suddenly see so much more."))
+
+
+/// The stopping of effect application, will remove the wearer's eye damage a minute after
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/de_toggle_eyes()
+ wearer.update_sight()
+ to_chat(wearer, span_clockgray("You feel your eyes slowly readjusting."))
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/equipped(mob/living/user, slot)
+ . = ..()
+ if(!isliving(user))
+ return
+
+ if((slot == ITEM_SLOT_EYES) && enabled)
+ wearer = user
+ on_toggle_eyes()
+
+
+/obj/item/clothing/glasses/clockwork/wraith_spectacles/dropped(mob/user)
+ . = ..()
+ if(wearer && (IS_CLOCK(user)) && enabled)
+ de_toggle_eyes()
+
+ wearer = null
+
+
+// Flash protected and generally info-granting with huds
+/obj/item/clothing/glasses/clockwork/judicial_visor
+ name = "judicial visor"
+ desc = "A purple visor gilt with Ratvarian runes, allowing a user to see, unfettered by others. The cogs on the sides look pretty tight..."
+ icon_state = "judicial_visor_0"
+ base_icon_state = "judicial_visor"
+ flash_protect = FLASH_PROTECTION_WELDER
+ strip_delay = 10 SECONDS
+ glass_colour_type = /datum/client_colour/glass_colour/purple
+ actions_types = list(/datum/action/item_action/toggle/clock)
+ clock_desc = "Binds itself to the wearer's face, but grants large sight and informational benefits while active."
+ /// Is this enabled
+ var/enabled = TRUE
+ /// Wearer of the visor
+ var/mob/living/wearer
+ /// Should the user take damage from wearing this the first time? (Doesn't affect nodrop)
+ var/damaging = TRUE
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/Initialize(mapload)
+ . = ..()
+ update_icon_state()
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/Destroy()
+ wearer = null
+ return ..()
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]_[enabled]"
+ worn_icon_state = "[base_icon_state]_[enabled]"
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/attack_self(mob/user, modifiers)
+ . = ..()
+ if(enabled)
+ disable()
+ else
+ enable()
+
+ if(iscarbon(user))
+ var/mob/living/carbon/carbon_user = user
+ carbon_user.head_update(src, forced = TRUE)
+
+
+/// Turn on the visor, calling apply_to_wearer() and changing the icon state
+/obj/item/clothing/glasses/clockwork/judicial_visor/proc/enable()
+ enabled = TRUE
+ if(wearer)
+ apply_to_wearer()
+
+ update_icon_state()
+
+
+/// Turn off the visor, calling unapply_to_wearer() and changing the icon state
+/obj/item/clothing/glasses/clockwork/judicial_visor/proc/disable()
+ enabled = FALSE
+ if(wearer)
+ unapply_to_wearer()
+
+ update_icon_state()
+
+
+/// Applies the actual effects to the wearer, giving them flash protection and a variety of sight/info bonuses
+/obj/item/clothing/glasses/clockwork/judicial_visor/proc/apply_to_wearer()
+ ADD_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT)
+
+ ADD_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT)
+ var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
+ med_hud.show_to(wearer)
+
+ ADD_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT)
+ var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
+ sec_hud.show_to(wearer)
+
+ ADD_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT)
+ ADD_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT)
+ ADD_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT)
+ color_cutoffs = list(50, 10, 30)
+ wearer.update_sight()
+
+/// Removes the effects to the wearer, removing the flash protection and similar
+/obj/item/clothing/glasses/clockwork/judicial_visor/proc/unapply_to_wearer()
+ REMOVE_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT)
+
+ REMOVE_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT)
+ var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
+ med_hud.hide_from(wearer)
+
+ REMOVE_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT)
+ var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
+ sec_hud.hide_from(wearer)
+
+ REMOVE_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT)
+ REMOVE_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT)
+ REMOVE_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT)
+ color_cutoffs = null
+ wearer.update_sight()
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/equipped(mob/living/user, slot)
+ . = ..()
+ if(!isliving(user))
+ return
+
+ if(slot == ITEM_SLOT_EYES)
+ wearer = user
+ if(enabled)
+ apply_to_wearer()
+
+ ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
+ to_chat(wearer, span_userdanger("You feel the cogs on the visor clamp to the sides of your head, drilling in!"))
+ if(damaging)
+ wearer.emote("scream")
+ wearer.Sleeping(VISOR_MOUNT_SLEEP_TIME)
+ wearer.apply_damage(VISOR_MOUNT_DAMAGE, BRUTE, BODY_ZONE_HEAD)
+
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/dropped(mob/user)
+ ..()
+ if(wearer)
+ unapply_to_wearer()
+ wearer = null
+ REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
+
+/obj/item/clothing/glasses/clockwork/judicial_visor/no_damage //ideally use this for loadouts n such
+ damaging = FALSE
+
+
+/obj/item/clothing/head/helmet/clockwork
+ name = "brass helmet"
+ desc = "A strong, brass helmet worn by the soldiers of the Ratvarian armies. Includes an integrated light-dimmer for flash protection, as well as occult-grade muffling for factory based environments."
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ icon_state = "clockwork_helmet"
+ armor_type = /datum/armor/helmet_clockwork
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ w_class = WEIGHT_CLASS_BULKY
+ flash_protect = FLASH_PROTECTION_FLASH
+
+/datum/armor/helmet_clockwork
+ melee = 50
+ bullet = 60
+ laser = 30
+ energy = 80
+ bomb = 80
+ bio = 100
+ fire = 100
+ acid = 100
+
+/obj/item/clothing/head/helmet/clockwork/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD))
+ AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
+
+
+/obj/item/clothing/shoes/clockwork
+ name = "brass treads"
+ desc = "A strong pair of brass boots worn by the soldiers of the Ratvarian armies."
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ icon_state = "clockwork_treads"
+
+/obj/item/clothing/shoes/clockwork/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
+
+
+/obj/item/clothing/gloves/clockwork
+ name = "brass gauntlets"
+ desc = "A strong pair of brass gloves worn by the soldiers of the Ratvarian armies."
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ icon_state = "clockwork_gauntlets"
+ siemens_coefficient = 0
+ strip_delay = 8 SECONDS
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = NONE
+ armor_type = /datum/armor/gloves_clockwork
+
+/datum/armor/gloves_clockwork
+ melee = 0
+ bullet = 0
+ laser = 0
+ energy = 0
+ bomb = 0
+ bio = 0
+ fire = 80
+ acid = 50
+
+/obj/item/clothing/gloves/clockwork/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
+
+#undef VISOR_MOUNT_DAMAGE
+#undef VISOR_MOUNT_SLEEP_TIME
diff --git a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm b/modular_nova/modules/clock_cult/code/items/integration_cog.dm
similarity index 97%
rename from modular_skyrat/modules/clock_cult/code/items/integration_cog.dm
rename to modular_nova/modules/clock_cult/code/items/integration_cog.dm
index 8557ca2008a..b098c41a41b 100644
--- a/modular_skyrat/modules/clock_cult/code/items/integration_cog.dm
+++ b/modular_nova/modules/clock_cult/code/items/integration_cog.dm
@@ -42,7 +42,7 @@
cogger_apc.panel_open = FALSE
cogger_apc.update_appearance()
balloon_alert(user, "[src] inserted")
- playsound(get_turf(user), 'modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 20)
+ playsound(get_turf(user), 'modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 20)
if(!cogger_apc.clock_cog_rewarded)
addtimer(CALLBACK(src, PROC_REF(finish_setup), cogger_apc), SET_UP_TIME)
diff --git a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm b/modular_nova/modules/clock_cult/code/items/replica_fabricator.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm
rename to modular_nova/modules/clock_cult/code/items/replica_fabricator.dm
index 46fe1a712a7..2fa882d0885 100644
--- a/modular_skyrat/modules/clock_cult/code/items/replica_fabricator.dm
+++ b/modular_nova/modules/clock_cult/code/items/replica_fabricator.dm
@@ -4,9 +4,9 @@
/obj/item/clockwork/replica_fabricator
name = "replica fabricator"
desc = "A strange, brass device with many twisting cogs and vents."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
- lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
+ lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
icon_state = "replica_fabricator"
/// How much power this has. 5 generated per sheet inserted, one sheet of bronze costs 10, one floor tile costs 15, one wall costs 20
var/power = 0
@@ -209,7 +209,7 @@
/// Any extra actions that need to be taken when an object is created
/datum/replica_fabricator_output/proc/on_create(atom/created_atom, turf/creation_turf, mob/creator)
SHOULD_CALL_PARENT(TRUE)
- playsound(creation_turf, 'modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 50, 1) // better sound?
+ playsound(creation_turf, 'modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg', 50, 1) // better sound?
to_chat(creator, span_clockyellow("You create \an [name] for [cost]W of power."))
diff --git a/modular_nova/modules/clock_cult/code/items/tools.dm b/modular_nova/modules/clock_cult/code/items/tools.dm
new file mode 100644
index 00000000000..76132ce95c1
--- /dev/null
+++ b/modular_nova/modules/clock_cult/code/items/tools.dm
@@ -0,0 +1,60 @@
+#define BRASS_TOOLSPEED_MOD 0.5
+
+/obj/item/wirecutters/brass
+ name = "brass wirecutters"
+ desc = "A pair of wirecutters made of brass. The handle feels faintly warm."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon = 'modular_nova/modules/clock_cult/icons/tools.dmi'
+ icon_state = "cutters_brass"
+ random_color = FALSE
+ toolspeed = BRASS_TOOLSPEED_MOD
+
+/obj/item/screwdriver/brass
+ name = "brass screwdriver"
+ desc = "A screwdriver made of brass. The handle feels warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon = 'modular_nova/modules/clock_cult/icons/tools.dmi'
+ icon_state = "screwdriver_brass"
+ toolspeed = BRASS_TOOLSPEED_MOD
+ random_color = FALSE
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+
+/obj/item/weldingtool/experimental/brass
+ name = "brass welding tool"
+ desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon = 'modular_nova/modules/clock_cult/icons/tools.dmi'
+ icon_state = "welder_brass"
+ toolspeed = BRASS_TOOLSPEED_MOD
+
+/obj/item/crowbar/brass
+ name = "brass crowbar"
+ desc = "A brass crowbar. It feels faintly warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon = 'modular_nova/modules/clock_cult/icons/tools.dmi'
+ icon_state = "crowbar_brass"
+ worn_icon_state = "crowbar"
+ toolspeed = BRASS_TOOLSPEED_MOD
+
+/obj/item/wrench/brass
+ name = "brass wrench"
+ desc = "A brass wrench. It's faintly warm to the touch."
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ icon = 'modular_nova/modules/clock_cult/icons/tools.dmi'
+ icon_state = "wrench_brass"
+ toolspeed = BRASS_TOOLSPEED_MOD
+
+/obj/item/storage/belt/utility/clock
+ name = "old toolbelt"
+ desc = "Holds tools. This one's seen better days, though. There's the outline of a cog roughly cut into the leather on one side."
+
+/obj/item/storage/belt/utility/clock/PopulateContents()
+ new /obj/item/screwdriver/brass(src)
+ new /obj/item/crowbar/brass(src)
+ new /obj/item/weldingtool/experimental/brass(src)
+ new /obj/item/wirecutters/brass(src)
+ new /obj/item/wrench/brass(src)
+ new /obj/item/multitool(src)
+
+#undef BRASS_TOOLSPEED_MOD
diff --git a/modular_nova/modules/clock_cult/code/items/weaponry.dm b/modular_nova/modules/clock_cult/code/items/weaponry.dm
new file mode 100644
index 00000000000..419efdd38e4
--- /dev/null
+++ b/modular_nova/modules/clock_cult/code/items/weaponry.dm
@@ -0,0 +1,311 @@
+#define HAMMER_FLING_DISTANCE 2
+#define HAMMER_THROW_FLING_DISTANCE 3
+#define BRASS_RIFLE_REDUCED_DELAY 0.25 SECONDS
+
+/obj/item/clockwork/weapon
+ name = "clockwork weapon"
+ desc = "Something"
+ icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
+ lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = ITEM_SLOT_BACK
+ throwforce = 20
+ throw_speed = 4
+ armour_penetration = 10
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "gores")
+ attack_verb_simple = list("attack", "poke", "jab", "tear", "gore")
+ sharpness = SHARP_EDGED
+ /// Typecache of valid turfs to have the weapon's special effect on
+ var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze))
+
+
+/obj/item/clockwork/weapon/attack(mob/living/target, mob/living/user)
+ . = ..()
+ var/turf/gotten_turf = get_turf(user)
+
+ if(!is_type_in_typecache(gotten_turf, effect_turf_typecache))
+ return
+
+ if(!QDELETED(target) && target.stat != DEAD && !IS_CLOCK(target) && !target.can_block_magic(MAGIC_RESISTANCE_HOLY))
+ hit_effect(target, user)
+
+
+/obj/item/clockwork/weapon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ . = ..()
+ if(.)
+ return
+
+ if(!isliving(hit_atom))
+ return
+
+ var/mob/living/target = hit_atom
+
+ if(!target.can_block_magic(MAGIC_RESISTANCE_HOLY) && !IS_CLOCK(target))
+ hit_effect(target, throwingdatum.thrower, TRUE)
+
+
+/// What occurs to non-holy people when attacked from brass tiles
+/obj/item/clockwork/weapon/proc/hit_effect(mob/living/target, mob/living/user, thrown = FALSE)
+ return
+
+
+/obj/item/clockwork/weapon/brass_spear
+ name = "brass spear"
+ desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy."
+ icon_state = "ratvarian_spear"
+ embedding = list("max_damage_mult" = 15, "armour_block" = 80)
+ throwforce = 36
+ force = 25
+ armour_penetration = 24
+
+
+/obj/item/clockwork/weapon/brass_battlehammer
+ name = "brass battle-hammer"
+ desc = "A brass hammer glowing with energy."
+ base_icon_state = "ratvarian_hammer"
+ icon_state = "ratvarian_hammer0"
+ throwforce = 25
+ armour_penetration = 6
+ attack_verb_simple = list("bash", "hammer", "attack", "smash")
+ attack_verb_continuous = list("bashes", "hammers", "attacks", "smashes")
+ clockwork_desc = "Enemies hit by this will be flung back while you are on bronze tiles."
+ sharpness = 0
+ hitsound = 'sound/weapons/smash.ogg'
+
+
+/obj/item/clockwork/weapon/brass_battlehammer/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/two_handed, \
+ force_unwielded = 15, \
+ icon_wielded = "[base_icon_state]1", \
+ force_wielded = 28, \
+ )
+
+
+/obj/item/clockwork/weapon/brass_battlehammer/hit_effect(mob/living/target, mob/living/user, thrown = FALSE)
+ if(!thrown && !HAS_TRAIT(src, TRAIT_WIELDED))
+ return
+
+ var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
+ target.throw_at(throw_target, thrown ? HAMMER_THROW_FLING_DISTANCE : HAMMER_FLING_DISTANCE, 4)
+
+/obj/item/clockwork/weapon/brass_battlehammer/update_icon_state()
+ icon_state = "[base_icon_state]0"
+ return ..()
+
+/obj/item/clockwork/weapon/brass_sword
+ name = "brass longsword"
+ desc = "A large sword made of brass."
+ icon_state = "ratvarian_sword"
+ force = 26
+ throwforce = 20
+ armour_penetration = 12
+ attack_verb_simple = list("attack", "slash", "cut", "tear", "gore")
+ attack_verb_continuous = list("attacks", "slashes", "cuts", "tears", "gores")
+ clockwork_desc = "Enemies and mechs will be struck with a powerful electromagnetic pulse while you are on bronze tiles, with a cooldown."
+ COOLDOWN_DECLARE(emp_cooldown)
+
+
+/obj/item/clockwork/weapon/brass_sword/hit_effect(mob/living/target, mob/living/user, thrown)
+ if(!COOLDOWN_FINISHED(src, emp_cooldown))
+ return
+
+ COOLDOWN_START(src, emp_cooldown, 30 SECONDS)
+
+ target.emp_act(EMP_LIGHT)
+ new /obj/effect/temp_visual/emp/pulse(target.loc)
+ addtimer(CALLBACK(src, PROC_REF(send_message), user), 30 SECONDS)
+ to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!"))
+ playsound(user, 'sound/magic/lightningshock.ogg', 40)
+
+
+/obj/item/clockwork/weapon/brass_sword/attack_atom(obj/attacked_obj, mob/living/user, params)
+ . = ..()
+ var/turf/gotten_turf = get_turf(user)
+
+ if(!ismecha(attacked_obj) || !is_type_in_typecache(gotten_turf, effect_turf_typecache))
+ return
+
+ if(!COOLDOWN_FINISHED(src, emp_cooldown))
+ return
+
+ COOLDOWN_START(src, emp_cooldown, 20 SECONDS)
+
+ var/obj/vehicle/sealed/mecha/target = attacked_obj
+ target.emp_act(EMP_HEAVY)
+ new /obj/effect/temp_visual/emp/pulse(target.loc)
+ addtimer(CALLBACK(src, PROC_REF(send_message), user), 20 SECONDS)
+ to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!"))
+ playsound(user, 'sound/magic/lightningshock.ogg', 40)
+
+
+/obj/item/clockwork/weapon/brass_sword/proc/send_message(mob/living/target)
+ to_chat(target, span_brass("[src] glows, indicating the next attack will disrupt electronics of the target."))
+
+
+/obj/item/gun/ballistic/bow/clockwork
+ name = "brass bow"
+ desc = "A bow made from brass and other components that you can't quite understand. It glows with a deep energy and frabricates arrows by itself."
+ icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
+ lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
+ icon_state = "bow_clockwork_unchambered_undrawn"
+ inhand_icon_state = "clockwork_bow"
+ base_icon_state = "bow_clockwork"
+ force = 10
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow/clockwork
+ /// Time between bolt recharges
+ var/recharge_time = 1.5 SECONDS
+ /// Typecache of valid turfs to have the weapon's special effect on
+ var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze))
+
+/obj/item/gun/ballistic/bow/clockwork/Initialize(mapload)
+ . = ..()
+ update_icon_state()
+ AddElement(/datum/element/clockwork_description, "Firing from brass tiles will halve the time that it takes to recharge a bolt.")
+ AddElement(/datum/element/clockwork_pickup)
+
+/obj/item/gun/ballistic/bow/clockwork/afterattack(atom/target, mob/living/user, flag, params, passthrough)
+ if(!drawn || !chambered)
+ to_chat(user, span_notice("[src] must be drawn to fire a shot!"))
+ return
+
+ return ..()
+
+/obj/item/gun/ballistic/bow/clockwork/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message)
+ . = ..()
+ var/turf/user_turf = get_turf(user)
+
+ if(is_type_in_typecache(user_turf, effect_turf_typecache))
+ recharge_time = 0.75 SECONDS
+
+ addtimer(CALLBACK(src, PROC_REF(recharge_bolt)), recharge_time)
+ recharge_time = initial(recharge_time)
+
+/obj/item/gun/ballistic/bow/clockwork/attack_self(mob/living/user)
+ if(drawn || !chambered)
+ return
+
+ if(!do_after(user, 0.5 SECONDS, src))
+ return
+
+ to_chat(user, span_notice("You draw back the bowstring."))
+ drawn = TRUE
+ playsound(src, 'modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) //gets way too high pitched if the freq varies
+ update_icon()
+
+
+/// Recharges a bolt, done after the delay in shoot_live_shot
+/obj/item/gun/ballistic/bow/clockwork/proc/recharge_bolt()
+ var/obj/item/ammo_casing/arrow/clockbolt/bolt = new
+ magazine.give_round(bolt)
+ chambered = bolt
+ update_icon()
+
+
+/obj/item/gun/ballistic/bow/clockwork/attackby(obj/item/I, mob/user, params)
+ return
+
+
+/obj/item/gun/ballistic/bow/clockwork/update_icon_state()
+ . = ..()
+ icon_state = "[base_icon_state]_[chambered ? "chambered" : "unchambered"]_[drawn ? "drawn" : "undrawn"]"
+
+
+/obj/item/ammo_box/magazine/internal/bow/clockwork
+ ammo_type = /obj/item/ammo_casing/arrow/clockbolt
+ start_empty = FALSE
+
+
+/obj/item/ammo_casing/arrow/clockbolt
+ name = "energy bolt"
+ desc = "An arrow made from a strange energy."
+ icon = 'modular_nova/modules/clock_cult/icons/weapons/ammo.dmi'
+ icon_state = "arrow_redlight"
+ projectile_type = /obj/projectile/energy/clockbolt
+
+
+/obj/projectile/energy/clockbolt
+ name = "energy bolt"
+ icon = 'modular_nova/modules/clock_cult/icons/projectiles.dmi'
+ icon_state = "arrow_energy"
+ damage = 35
+ damage_type = BURN
+
+
+/obj/item/gun/ballistic/rifle/lionhunter/clockwork
+ name = "brass rifle"
+ desc = "An antique, brass rifle made with the finest of care. It has an ornate scope in the shape of a cog built into the top."
+ icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi'
+ lefthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
+ worn_icon = 'modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi'
+ slot_flags = ITEM_SLOT_BACK
+ icon_state = "clockwork_rifle"
+ inhand_icon_state = "clockwork_rifle"
+ worn_icon_state = "clockwork_rifle"
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork
+ fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
+ show_bolt_icon = FALSE
+
+
+/obj/item/gun/ballistic/rifle/lionhunter/clockwork/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/clockwork_description, "The speed of which you aim at far targets while standing on brass will be massively increased.")
+ AddElement(/datum/element/clockwork_pickup)
+
+/obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork
+ name = "brass rifle internal magazine"
+ ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock
+
+
+/obj/item/ammo_casing/strilka310/lionhunter/clock
+ name = "brass rifle round"
+ projectile_type = /obj/projectile/bullet/strilka310/lionhunter/clock
+ min_distance = 3
+
+
+/obj/item/ammo_casing/strilka310/lionhunter/clock/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
+ var/obj/item/gun/ballistic/fired_gun = fired_from
+
+ if(istype(get_turf(user), /turf/open/floor/bronze) && istype(fired_gun, /obj/item/gun/ballistic/rifle/lionhunter/clockwork))
+ seconds_per_distance = BRASS_RIFLE_REDUCED_DELAY
+
+ return ..()
+
+
+/obj/projectile/bullet/strilka310/lionhunter/clock
+ name = "brass .310 bullet"
+ // These stats are only applied if the weapon is fired fully aimed
+ // If fired without aiming or at someone too close, it will do much less
+ damage = 45
+ stamina = 45
+
+
+/obj/item/ammo_box/strilka310/lionhunter/clock
+ name = "stripper clip (.310 brass)"
+ desc = "A stripper clip that's just as brass as the rounds it holds."
+ icon = 'modular_nova/modules/clock_cult/icons/weapons/ammo.dmi'
+ icon_state = "762_brass"
+ ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock
+ unique_reskin = NONE
+ max_ammo = 3
+ multiple_sprites = AMMO_BOX_PER_BULLET
+
+
+/obj/item/storage/pouch/ammo/clock
+
+/obj/item/storage/pouch/ammo/clock/PopulateContents()
+ var/static/items_inside = list(
+ /obj/item/ammo_box/strilka310/lionhunter/clock = 3
+ )
+
+ generate_items_inside(items_inside, src)
+
+
+#undef HAMMER_FLING_DISTANCE
+#undef HAMMER_THROW_FLING_DISTANCE
+#undef BRASS_RIFLE_REDUCED_DELAY
diff --git a/modular_skyrat/modules/clock_cult/code/language.dm b/modular_nova/modules/clock_cult/code/language.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/language.dm
rename to modular_nova/modules/clock_cult/code/language.dm
diff --git a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm b/modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm
rename to modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm
index ba6ad76189b..cff20118338 100644
--- a/modular_skyrat/modules/clock_cult/code/mobs/clockwork_marauder.dm
+++ b/modular_nova/modules/clock_cult/code/mobs/clockwork_marauder.dm
@@ -6,7 +6,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders)
/mob/living/basic/clockwork_marauder
name = "clockwork marauder"
desc = "A brass machine of destruction."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi'
icon_state = "clockwork_marauder"
icon_living = "clockwork_marauder"
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
@@ -92,7 +92,7 @@ GLOBAL_LIST_EMPTY(clockwork_marauders)
/// Damage the marauder's shield by one tick
/mob/living/basic/clockwork_marauder/proc/damage_shield()
shield_health--
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg', 60, TRUE)
+ playsound(src, 'modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg', 60, TRUE)
if(!shield_health)
to_chat(src, span_userdanger("Your shield breaks!"))
to_chat(src, span_brass("You require a welding tool to repair your damaged shield!"))
diff --git a/modular_skyrat/modules/clock_cult/code/outfit.dm b/modular_nova/modules/clock_cult/code/outfit.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/outfit.dm
rename to modular_nova/modules/clock_cult/code/outfit.dm
diff --git a/modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm b/modular_nova/modules/clock_cult/code/outpost_of_cogs.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/outpost_of_cogs.dm
rename to modular_nova/modules/clock_cult/code/outpost_of_cogs.dm
diff --git a/modular_skyrat/modules/clock_cult/code/portal.dm b/modular_nova/modules/clock_cult/code/portal.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/portal.dm
rename to modular_nova/modules/clock_cult/code/portal.dm
diff --git a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm b/modular_nova/modules/clock_cult/code/research/asset_cache.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/research/asset_cache.dm
rename to modular_nova/modules/clock_cult/code/research/asset_cache.dm
index 3ae305036ba..7ac6bd9392c 100644
--- a/modular_skyrat/modules/clock_cult/code/research/asset_cache.dm
+++ b/modular_nova/modules/clock_cult/code/research/asset_cache.dm
@@ -34,7 +34,7 @@
// And now scripture icons
for(var/datum/scripture/unlocked_scripture as anything in new_research.unlocked_scriptures)
- var/icon_file = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi'
+ var/icon_file = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi'
var/icon_state = initial(unlocked_scripture.button_icon_state)
var/id = sanitize_css_class_name("[icon_file][icon_state]")
diff --git a/modular_skyrat/modules/clock_cult/code/research/clockwork_research.dm b/modular_nova/modules/clock_cult/code/research/clockwork_research.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/research/clockwork_research.dm
rename to modular_nova/modules/clock_cult/code/research/clockwork_research.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm b/modular_nova/modules/clock_cult/code/scriptures/_scripture.dm
similarity index 99%
rename from modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm
rename to modular_nova/modules/clock_cult/code/scriptures/_scripture.dm
index e37db5b30dd..9c6d9ef6b87 100644
--- a/modular_skyrat/modules/clock_cult/code/scriptures/_scripture.dm
+++ b/modular_nova/modules/clock_cult/code/scriptures/_scripture.dm
@@ -47,7 +47,7 @@ GLOBAL_LIST_EMPTY(clock_scriptures_by_type)
desc += " Requires research to unlock."
-/datum/scripture/Destroy(force, ...)
+/datum/scripture/Destroy(force)
invoker = null
invoking_slab = null
return ..()
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm b/modular_nova/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm
rename to modular_nova/modules/clock_cult/code/scriptures/preservation/clockwork_armaments.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm b/modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm
similarity index 84%
rename from modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm
rename to modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm
index fc58ad369b1..956c0e58faa 100644
--- a/modular_skyrat/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm
+++ b/modular_nova/modules/clock_cult/code/scriptures/preservation/summon_marauder.dm
@@ -16,13 +16,21 @@
var/mob/dead/observer/selected
-/datum/scripture/marauder/Destroy(force, ...)
+/datum/scripture/marauder/Destroy(force)
selected = null
return ..()
/datum/scripture/marauder/invoke()
- var/list/candidates = poll_ghost_candidates("Do you want to play as a Clockwork Marauder?", ROLE_PAI, FALSE, 100, POLL_IGNORE_CONSTRUCT)
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ "Do you want to play as a Clockwork Marauder?",
+ role = ROLE_PAI,
+ check_jobban = FALSE,
+ poll_time = 10 SECONDS,
+ ignore_category = POLL_IGNORE_CONSTRUCT,
+ pic_source = /obj/item/clockwork/clockwork_slab,
+ role_name_text = "clockwork marauder",
+ )
if(length(candidates))
selected = pick(candidates)
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm
rename to modular_nova/modules/clock_cult/code/scriptures/servitude/hateful_manacles.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/integration_cog.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/integration_cog.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/integration_cog.dm
rename to modular_nova/modules/clock_cult/code/scriptures/servitude/integration_cog.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/kindle.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/kindle.dm
rename to modular_nova/modules/clock_cult/code/scriptures/servitude/kindle.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm b/modular_nova/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm
rename to modular_nova/modules/clock_cult/code/scriptures/servitude/vitality_sigil.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/interdiction_lens.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/ocular_warden.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/ocular_warden.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/ocular_warden.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/ocular_warden.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/prosperity_prism.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/technologists_lectern.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/tinkerers_cache.dm
diff --git a/modular_skyrat/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm b/modular_nova/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm
rename to modular_nova/modules/clock_cult/code/scriptures/structures/transmission_sigil.dm
diff --git a/modular_nova/modules/clock_cult/code/status_effects.dm b/modular_nova/modules/clock_cult/code/status_effects.dm
new file mode 100644
index 00000000000..89f5e1000ad
--- /dev/null
+++ b/modular_nova/modules/clock_cult/code/status_effects.dm
@@ -0,0 +1,32 @@
+/datum/status_effect/interdiction
+ id = "interdicted"
+ duration = 2.5 SECONDS
+ status_type = STATUS_EFFECT_REFRESH
+ tick_interval = 0.2 SECONDS
+ alert_type = /atom/movable/screen/alert/status_effect/interdiction
+ /// If we kicked the owner out of running mode
+ var/running_toggled = FALSE
+
+/datum/status_effect/interdiction/tick(seconds_between_ticks)
+ if(owner.move_intent == MOVE_INTENT_RUN)
+ owner.toggle_move_intent(owner)
+ owner.adjust_confusion_up_to(1 SECONDS, 1 SECONDS)
+ running_toggled = TRUE
+ to_chat(owner, span_warning("You know you shouldn't be running here."))
+
+ owner.add_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction)
+
+/datum/status_effect/interdiction/on_remove()
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction)
+
+ if(running_toggled && owner.move_intent == MOVE_INTENT_WALK)
+ owner.toggle_move_intent(owner)
+
+/atom/movable/screen/alert/status_effect/interdiction
+ name = "Interdicted"
+ desc = "I don't think I am meant to go this way."
+ icon = 'modular_nova/modules/clock_cult/icons/actions_clock.dmi'
+ icon_state = "interdiction_effect" //fix later
+
+/datum/movespeed_modifier/clock_interdiction
+ multiplicative_slowdown = 1.5
diff --git a/modular_skyrat/modules/clock_cult/code/structures/_powered.dm b/modular_nova/modules/clock_cult/code/structures/_powered.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/_powered.dm
rename to modular_nova/modules/clock_cult/code/structures/_powered.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm b/modular_nova/modules/clock_cult/code/structures/_structure.dm
similarity index 95%
rename from modular_skyrat/modules/clock_cult/code/structures/_structure.dm
rename to modular_nova/modules/clock_cult/code/structures/_structure.dm
index d963bf70c8c..4a1b15c4ab2 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/_structure.dm
+++ b/modular_nova/modules/clock_cult/code/structures/_structure.dm
@@ -2,7 +2,7 @@
/obj/structure/destructible/clockwork
name = "meme structure"
desc = "Some frog or something, the fuck?"
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
icon_state = "rare_pepe"
anchored = TRUE
density = TRUE
diff --git a/modular_skyrat/modules/clock_cult/code/structures/airlock.dm b/modular_nova/modules/clock_cult/code/structures/airlock.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/airlock.dm
rename to modular_nova/modules/clock_cult/code/structures/airlock.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/gear_base.dm b/modular_nova/modules/clock_cult/code/structures/gear_base.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/gear_base.dm
rename to modular_nova/modules/clock_cult/code/structures/gear_base.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/interdiction_lens.dm b/modular_nova/modules/clock_cult/code/structures/interdiction_lens.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/interdiction_lens.dm
rename to modular_nova/modules/clock_cult/code/structures/interdiction_lens.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm b/modular_nova/modules/clock_cult/code/structures/ocular_warden.dm
similarity index 87%
rename from modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm
rename to modular_nova/modules/clock_cult/code/structures/ocular_warden.dm
index dd56e486dfd..4d14c27f308 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/ocular_warden.dm
+++ b/modular_nova/modules/clock_cult/code/structures/ocular_warden.dm
@@ -52,7 +52,7 @@
if(!use_power(SHOOT_POWER_USE))
return
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg', 60, TRUE)
+ playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg', 60, TRUE)
var/mob/living/target = pick(valid_targets)
if(!target)
@@ -66,7 +66,7 @@
new /obj/effect/temp_visual/ratvar/ocular_warden(get_turf(target))
new /obj/effect/temp_visual/ratvar/ocular_warden(get_turf(src))
- playsound(target, pick('modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg', 'modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg'), 60, TRUE)
+ playsound(target, pick('modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg', 'modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg'), 60, TRUE)
COOLDOWN_START(src, fire_cooldown, FIRE_DELAY)
diff --git a/modular_skyrat/modules/clock_cult/code/structures/prosperity_prism.dm b/modular_nova/modules/clock_cult/code/structures/prosperity_prism.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/prosperity_prism.dm
rename to modular_nova/modules/clock_cult/code/structures/prosperity_prism.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm b/modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm
similarity index 98%
rename from modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm
rename to modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm
index b1b136e2e01..5f3c31ed8e6 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/sigil/_sigil.dm
+++ b/modular_nova/modules/clock_cult/code/structures/sigil/_sigil.dm
@@ -7,7 +7,7 @@
name = "sigil"
desc = "It's a sigil that does something."
max_integrity = 10
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects.dmi'
icon_state = "sigilvitality"
density = FALSE
alpha = 90
diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm
similarity index 92%
rename from modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm
rename to modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm
index 331eeb681b7..8e4f0b802b4 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_research.dm
+++ b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_research.dm
@@ -4,7 +4,7 @@
name = "large sigil"
desc = "A very large, glowing sigil."
max_integrity = 10
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi'
icon_state = "research_sigil"
resistance_flags = INDESTRUCTIBLE
can_dispel_by_hand = FALSE
diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_transmission.dm b/modular_nova/modules/clock_cult/code/structures/sigil/sigil_transmission.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/sigil/sigil_transmission.dm
rename to modular_nova/modules/clock_cult/code/structures/sigil/sigil_transmission.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm b/modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm
rename to modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm
index f325e745517..f76096dc7b7 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/sigil/vitality_sigil.dm
+++ b/modular_nova/modules/clock_cult/code/structures/sigil/vitality_sigil.dm
@@ -44,7 +44,7 @@
visible_message(span_clockred("[src] fails to siphon [affected_mob]'s spirit!"))
return
- playsound(loc, 'modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg', 40)
+ playsound(loc, 'modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg', 40)
if((affected_mob.stat == DEAD) || (affected_mob.getBruteLoss() >= affected_mob.maxHealth))
affected_mob.do_jitter_animation()
affected_mob.death()
diff --git a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm
rename to modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm
index 1324fd7630d..c662484fcd5 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/technologists_lectern.dm
+++ b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm
@@ -254,7 +254,7 @@
. += list(list(
"name" = initial(type.name),
"icon" = sanitize_css_class_name(initial(type.button_icon_state)),
- "icon2" = sanitize_css_class_name("modular_skyrat/modules/clock_cult/icons/actions_clock.dmi[initial(type.button_icon_state)]"),
+ "icon2" = sanitize_css_class_name("modular_nova/modules/clock_cult/icons/actions_clock.dmi[initial(type.button_icon_state)]"),
))
return .
@@ -295,7 +295,7 @@
AddComponent(/datum/component/brass_spreader, range = 6)
- playsound(target_turf, 'modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg', 80, FALSE, pressure_affected = FALSE)
+ playsound(target_turf, 'modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg', 80, FALSE, pressure_affected = FALSE)
research_sigil = new(target_turf)
send_clock_message(null, "A research ritual has begun in [get_area(src)], ensure nobody stops it until it is completed in [DisplayTimeText(selected_research.time_to_research)]!", msg_ghosts = FALSE)
notify_ghosts("[owner] has begun a research ritual in [get_area(src)]",
@@ -334,7 +334,7 @@
else
message += "very far, to your [dir2text(dir)]!"
- living_mob.playsound_local(get_turf(src), 'modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg', volume, FALSE, pressure_affected = FALSE)
+ living_mob.playsound_local(get_turf(src), 'modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg', volume, FALSE, pressure_affected = FALSE)
to_chat(living_mob, span_brass(message))
@@ -379,7 +379,7 @@
switch(side_effect_num)
if(1 to 10) // Cult-ify everything nearby
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg', 100, FALSE, pressure_affected = FALSE)
+ playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg', 100, FALSE, pressure_affected = FALSE)
for(var/atom/nearby_atom in range(8))
if(istype(nearby_atom, /turf/open/floor))
var/turf/floor_tile = nearby_atom
@@ -459,7 +459,7 @@
/obj/effect/lectern_light
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
icon_state = "lectern_closed"
pixel_y = 10
layer = FLY_LAYER
diff --git a/modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm b/modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm
similarity index 96%
rename from modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm
rename to modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm
index 898965615d9..cde524aedb9 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/tinkerers_cache.dm
+++ b/modular_nova/modules/clock_cult/code/structures/tinkerers_cache.dm
@@ -70,7 +70,7 @@
var/crafting_item = initial(chosen_item.item_path)
new crafting_item(get_turf(src))
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 50)
+ playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 50)
to_chat(user, span_brass("You craft [initial(chosen_item.name)] to near perfection, [src] cooling down. [initial(chosen_item.time_delay_mult) ? "It will be available in [DisplayTimeText(COOLDOWN_TIMELEFT(src, use_cooldown))]." : "It is ready to use again."]"))
@@ -130,7 +130,7 @@
item_path = /obj/item/gun/ballistic/rifle/lionhunter/clockwork
power_use = 500
research_locked = TRUE
- research_icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
+ research_icon = 'modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
research_icon_state = "clockwork_rifle_research"
/datum/tinker_cache_item/clockwork_rifle_ammo
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/flipper.dm b/modular_nova/modules/clock_cult/code/structures/traps/recievers/flipper.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/recievers/flipper.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/recievers/flipper.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm b/modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm
similarity index 93%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm
index d97486210eb..0865b73c50f 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/traps/recievers/skewer.dm
+++ b/modular_nova/modules/clock_cult/code/structures/traps/recievers/skewer.dm
@@ -51,7 +51,7 @@
target_stabbed = TRUE
to_chat(stabbed_mob, span_userdanger("You are impaled by [src]!"))
stabbed_mob.emote("scream")
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg')
+ playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg')
stabbed_mob.apply_damage(SKEWER_DAMAGE, BRUTE, BODY_ZONE_CHEST)
if(ishuman(stabbed_mob))
@@ -60,7 +60,7 @@
if(target_stabbed)
if(!stab_overlay)
- stab_overlay = mutable_appearance('modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi', "brass_skewer_pokeybit", layer = ABOVE_MOB_LAYER)
+ stab_overlay = mutable_appearance('modular_nova/modules/clock_cult/icons/clockwork_objects.dmi', "brass_skewer_pokeybit", layer = ABOVE_MOB_LAYER)
add_overlay(stab_overlay)
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/delay.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/delay.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/delay.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/senders/delay.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/lever.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/lever.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/lever.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/senders/lever.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm b/modular_nova/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/senders/pressure_sensor.dm
diff --git a/modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm b/modular_nova/modules/clock_cult/code/structures/traps/trap.dm
similarity index 95%
rename from modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm
rename to modular_nova/modules/clock_cult/code/structures/traps/trap.dm
index aec6c553653..c891f4c6204 100644
--- a/modular_skyrat/modules/clock_cult/code/structures/traps/trap.dm
+++ b/modular_nova/modules/clock_cult/code/structures/traps/trap.dm
@@ -2,7 +2,7 @@
/obj/item/clockwork/trap_placer
name = "trap"
desc = "don't trust it"
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
w_class = WEIGHT_CLASS_HUGE
/// The path of the trap to make when this is set down
var/result_path = /obj/structure/destructible/clockwork/trap
@@ -45,7 +45,7 @@
/obj/item/wallframe/clocktrap
name = "clockwork trap item"
desc = "It's a... Wait what?"
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
pixel_shift = 24
w_class = WEIGHT_CLASS_HUGE
result_path = /obj/structure/destructible/clockwork/trap
@@ -62,7 +62,7 @@
/obj/structure/destructible/clockwork/trap
name = "clockwork trap item"
desc = "Probably doesn't do much."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
density = FALSE
layer = LOW_OBJ_LAYER
break_message = span_warning("The intricate looking device falls apart.")
diff --git a/modular_skyrat/modules/clock_cult/code/temp_visual.dm b/modular_nova/modules/clock_cult/code/temp_visual.dm
similarity index 94%
rename from modular_skyrat/modules/clock_cult/code/temp_visual.dm
rename to modular_nova/modules/clock_cult/code/temp_visual.dm
index 4bf7b425cd3..53616a5dda7 100644
--- a/modular_skyrat/modules/clock_cult/code/temp_visual.dm
+++ b/modular_nova/modules/clock_cult/code/temp_visual.dm
@@ -3,7 +3,7 @@
//temporary visual effects(/obj/effect/temp_visual) used by clock stuff
/obj/effect/temp_visual/ratvar
name = "ratvar's light"
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_effects.dmi'
duration = 8
randomdir = FALSE
layer = ABOVE_NORMAL_TURF_LAYER
@@ -84,7 +84,7 @@
/obj/effect/temp_visual/ratvar/belligerent
layer = ABOVE_MOB_LAYER
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
icon_state = "belligerent_eye"
pixel_y = 20
duration = 2 SECONDS
@@ -127,7 +127,7 @@
animate(src, alpha = 0, time = duration, easing = EASE_OUT)
/obj/effect/temp_visual/ratvar/component
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
icon_state = "belligerent_eye"
layer = ABOVE_MOB_LAYER
duration = 1 SECONDS
@@ -202,7 +202,7 @@
var/turf/cardinal_step = get_step(src, cardinal)
new/obj/effect/temp_visual/steam(cardinal_step, cardinal)
- playsound(src, 'modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 30)
+ playsound(src, 'modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg', 30)
return INITIALIZE_HINT_QDEL
/obj/effect/temp_visual/ratvar/constructing_effect
diff --git a/modular_skyrat/modules/clock_cult/code/turf.dm b/modular_nova/modules/clock_cult/code/turf.dm
similarity index 100%
rename from modular_skyrat/modules/clock_cult/code/turf.dm
rename to modular_nova/modules/clock_cult/code/turf.dm
diff --git a/modular_skyrat/modules/clock_cult/icons/actions_clock.dmi b/modular_nova/modules/clock_cult/icons/actions_clock.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/actions_clock.dmi
rename to modular_nova/modules/clock_cult/icons/actions_clock.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/background_clock.dmi b/modular_nova/modules/clock_cult/icons/background_clock.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/background_clock.dmi
rename to modular_nova/modules/clock_cult/icons/background_clock.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi b/modular_nova/modules/clock_cult/icons/clockwork_effects.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_effects.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_effects.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi b/modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_effects_96.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_effects_96.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi b/modular_nova/modules/clock_cult/icons/clockwork_garb.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_garb.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi b/modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_garb_worn.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi b/modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_mobs.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_mobs.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi b/modular_nova/modules/clock_cult/icons/clockwork_objects.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi
rename to modular_nova/modules/clock_cult/icons/clockwork_objects.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/misc.dmi b/modular_nova/modules/clock_cult/icons/misc.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/misc.dmi
rename to modular_nova/modules/clock_cult/icons/misc.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/projectiles.dmi b/modular_nova/modules/clock_cult/icons/projectiles.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/projectiles.dmi
rename to modular_nova/modules/clock_cult/icons/projectiles.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/speech.dmi b/modular_nova/modules/clock_cult/icons/speech.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/speech.dmi
rename to modular_nova/modules/clock_cult/icons/speech.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/tools.dmi b/modular_nova/modules/clock_cult/icons/tools.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/tools.dmi
rename to modular_nova/modules/clock_cult/icons/tools.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi b/modular_nova/modules/clock_cult/icons/weapons/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi
rename to modular_nova/modules/clock_cult/icons/weapons/ammo.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi
rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi
rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_righthand.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi
rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons.dmi
diff --git a/modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi b/modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi
similarity index 100%
rename from modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi
rename to modular_nova/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg b/modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/ark_deathrattle.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/ark_deathrattle.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg b/modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/ark_scream.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/ark_scream.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg b/modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/brass_skewer.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/brass_skewer.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg b/modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/integration_cog_install.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/integration_cog_install.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot1.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-dot2.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg b/modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/ocularwarden-target.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/ocularwarden-target.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg b/modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/research_notice.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/research_notice.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg b/modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/machinery/steam_whoosh.ogg
rename to modular_nova/modules/clock_cult/sound/machinery/steam_whoosh.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg b/modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/magic/anima_fragment_attack.ogg
rename to modular_nova/modules/clock_cult/sound/magic/anima_fragment_attack.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg b/modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/magic/ratvar_attack.ogg
rename to modular_nova/modules/clock_cult/sound/magic/ratvar_attack.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg b/modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/magic/scripture_tier_up.ogg
rename to modular_nova/modules/clock_cult/sound/magic/scripture_tier_up.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg b/modular_nova/modules/clock_cult/sound/ocularwarden-dot1.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/ocularwarden-dot1.ogg
rename to modular_nova/modules/clock_cult/sound/ocularwarden-dot1.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg b/modular_nova/modules/clock_cult/sound/ocularwarden-target.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/ocularwarden-target.ogg
rename to modular_nova/modules/clock_cult/sound/ocularwarden-target.ogg
diff --git a/modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg b/modular_nova/modules/clock_cult/sound/scripture_tier_up.ogg
similarity index 100%
rename from modular_skyrat/modules/clock_cult/sound/scripture_tier_up.ogg
rename to modular_nova/modules/clock_cult/sound/scripture_tier_up.ogg
diff --git a/modular_nova/modules/clothing_improvements/code/chaplain.dm b/modular_nova/modules/clothing_improvements/code/chaplain.dm
new file mode 100644
index 00000000000..4f7c9b9dd38
--- /dev/null
+++ b/modular_nova/modules/clothing_improvements/code/chaplain.dm
@@ -0,0 +1,12 @@
+// UNIQUE RENAME: allows people to customize these with pens to suit their character's flavour
+/obj/item/clothing/suit/chaplainsuit
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/clothing/suit/hooded/chaplain_hoodie
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/clothing/head/helmet/chaplain
+ obj_flags = UNIQUE_RENAME
+
+/obj/item/clothing/head/hooded/chaplain_hood
+ obj_flags = UNIQUE_RENAME
diff --git a/modular_nova/modules/clothing_improvements/code/holsters.dm b/modular_nova/modules/clothing_improvements/code/holsters.dm
new file mode 100644
index 00000000000..d02ab159bd2
--- /dev/null
+++ b/modular_nova/modules/clothing_improvements/code/holsters.dm
@@ -0,0 +1,33 @@
+/obj/item/storage/belt/holster/pre_attack_secondary(atom/target, mob/living/user, params)
+ . = ..()
+ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
+ return
+ . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+
+ // Right clicking your holster on a suit-slot piece of clothing will try to fit it for that individual item.
+ // This will let you wear it in its suit slot. Foley workaround for mass Initialize() issues. Also, it's kinda cool.
+ if (!istype(target, /obj/item/clothing/suit))
+ balloon_alert(user, "can't be adjusted to fit this!")
+ return
+
+ var/obj/item/clothing/suit/clothing_to_mod = target
+ if (/obj/item/storage/belt/holster in clothing_to_mod.allowed)
+ balloon_alert(user, "already adjusted to fit!")
+ return
+
+ user.visible_message(span_notice("[user] begins adjusting [src] to fit properly upon [clothing_to_mod]..."), span_notice("You begin adjusting [src] to fit properly upon [clothing_to_mod]..."))
+
+ if (do_after(user, 1.5 SECONDS))
+ clothing_to_mod.allowed += list(/obj/item/storage/belt/holster)
+ playsound(user.loc, 'sound/items/equip/toolbelt_equip.ogg', 50)
+ balloon_alert(user, "adjusted to fit!")
+ else
+ balloon_alert(user, "interrupted!")
+
+/obj/item/storage/belt/holster/examine(mob/user)
+ . = ..()
+ . += span_notice("You can right click on a piece of suit-slot clothing with the holster to try and adjust it to fit in its storage slot.")
+
+/obj/item/storage/belt/holster
+ // use a pen to rename your holster to something based (or cringe if that's your jam)
+ obj_flags = UNIQUE_RENAME
diff --git a/modular_skyrat/modules/cme/code/_cme_defines.dm b/modular_nova/modules/cme/code/_cme_defines.dm
similarity index 100%
rename from modular_skyrat/modules/cme/code/_cme_defines.dm
rename to modular_nova/modules/cme/code/_cme_defines.dm
diff --git a/modular_skyrat/modules/cme/code/cme.dm b/modular_nova/modules/cme/code/cme.dm
similarity index 95%
rename from modular_skyrat/modules/cme/code/cme.dm
rename to modular_nova/modules/cme/code/cme.dm
index c6e3cca9b07..319be181dbe 100644
--- a/modular_skyrat/modules/cme/code/cme.dm
+++ b/modular_nova/modules/cme/code/cme.dm
@@ -124,30 +124,30 @@
if(fake)
priority_announce("Critical Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [rand(200, 300)] seconds. \
All synthetic and non-organic lifeforms should seek shelter immediately! \
- Ensure all sensitive equipment is shielded.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ Ensure all sensitive equipment is shielded.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
else
switch(cme_intensity)
if(CME_UNKNOWN)
priority_announce("Coronal mass ejection detected! Expected intensity: UNKNOWN. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \
All synthetic and non-organic lifeforms should seek shelter immediately! \
- Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
if(CME_MINIMAL)
priority_announce("Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \
All synthetic and non-organic lifeforms should seek shelter immediately! \
- Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
if(CME_MODERATE)
priority_announce("Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \
All synthetic and non-organic lifeforms should seek shelter immediately! \
- Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
if(CME_EXTREME)
addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_ORANGE, TRUE, FALSE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS)
priority_announce("Critical Coronal mass ejection detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \
All synthetic and non-organic lifeforms should seek shelter immediately! \
- Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ Neutralize magnetic field bubbles at all costs.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
if(CME_ARMAGEDDON)
addtimer(CALLBACK(src, PROC_REF(cme_level_callback), SEC_LEVEL_GAMMA, TRUE, TRUE), (round((start_when * SSevents.wait) * 0.1, 0.1)) SECONDS)
priority_announce("Neutron Mass Ejection Detected! Expected intensity: [uppertext(cme_intensity)]. Impact in: [round((start_when * SSevents.wait) * 0.1, 0.1)] seconds. \
- All personnel should proceed to their nearest warpgate for evacuation, the Solar Federation has issued this mandatory alert.", "Solar Event", sound('modular_skyrat/modules/cme/sound/cme_warning.ogg'))
+ All personnel should proceed to their nearest warpgate for evacuation, the Solar Federation has issued this mandatory alert.", "Solar Event", sound('modular_nova/modules/cme/sound/cme_warning.ogg'))
/datum/round_event/cme/tick(seconds_between_ticks)
if(ISMULTIPLE(activeFor, rand(cme_frequency_lower, cme_frequency_upper)))
@@ -191,7 +191,7 @@
/obj/effect/cme
desc = "A solar ejection projection."
name = "MINIMAL SOLAR EJECTION"
- icon = 'modular_skyrat/modules/cme/icons/cme_effect.dmi'
+ icon = 'modular_nova/modules/cme/icons/cme_effect.dmi'
icon_state = "cme_effect"
color = COLOR_BLUE_LIGHT
light_range = 5
@@ -260,7 +260,7 @@
empulse(src, pulse_range_heavy, pulse_range_light)
playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE)
explosion(src, 0, 0, 2, flame_range = 3)
- playsound(src,'modular_skyrat/modules/cme/sound/cme.ogg', 100)
+ playsound(src,'modular_nova/modules/cme/sound/cme.ogg', 100)
qdel(src)
/obj/effect/cme/armageddon/burst()
@@ -274,7 +274,7 @@
empulse(src, pulse_range_heavy, pulse_range_light)
explosion(src, 0, 3, 10, flame_range = 10)
playsound(src,'sound/weapons/resonator_blast.ogg',100,TRUE)
- playsound(src,'modular_skyrat/modules/cme/sound/cme.ogg', 100)
+ playsound(src,'modular_nova/modules/cme/sound/cme.ogg', 100)
qdel(src)
/obj/effect/cme/singularity_pull()
diff --git a/modular_skyrat/modules/cme/icons/cme_effect.dmi b/modular_nova/modules/cme/icons/cme_effect.dmi
similarity index 100%
rename from modular_skyrat/modules/cme/icons/cme_effect.dmi
rename to modular_nova/modules/cme/icons/cme_effect.dmi
diff --git a/modular_skyrat/modules/cme/readme.md b/modular_nova/modules/cme/readme.md
similarity index 100%
rename from modular_skyrat/modules/cme/readme.md
rename to modular_nova/modules/cme/readme.md
diff --git a/modular_skyrat/modules/cme/sound/cme.ogg b/modular_nova/modules/cme/sound/cme.ogg
similarity index 100%
rename from modular_skyrat/modules/cme/sound/cme.ogg
rename to modular_nova/modules/cme/sound/cme.ogg
diff --git a/modular_skyrat/modules/cme/sound/cme_warning.ogg b/modular_nova/modules/cme/sound/cme_warning.ogg
similarity index 100%
rename from modular_skyrat/modules/cme/sound/cme_warning.ogg
rename to modular_nova/modules/cme/sound/cme_warning.ogg
diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm
similarity index 86%
rename from modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm
rename to modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm
index 988e335fff7..f5a5d28839e 100644
--- a/modular_skyrat/modules/colony_fabricator/code/appliances/chem_machines.dm
+++ b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm
@@ -5,7 +5,7 @@
desc = "An infinitely useful device for those finding themselves in a frontier without a stable source of water. \
Using a simplified version of the chemistry dispenser's synthesizer process, it can create water out of nothing \
but good old electricity."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi'
icon_state = "water_synth"
anchored = FALSE
/// Reagents that this can dispense, overrides the default list on init
@@ -22,7 +22,7 @@
/obj/item/flatpacked_machine/water_synth
name = "water synthesizer parts kit"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi'
icon_state = "water_synth_parts"
w_class = WEIGHT_CLASS_NORMAL
type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth
diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
similarity index 92%
rename from modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
rename to modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
index 597b52ce5ea..ace5e9a5e54 100644
--- a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
+++ b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm
@@ -1,7 +1,7 @@
/obj/machinery/cell_charger_multi/wall_mounted
name = "mounted multi-cell charging rack"
desc = "The innovative technology of a cell charging rack, but mounted neatly on a wall out of the way!"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/cell_charger.dmi'
icon_state = "wall_charger"
base_icon_state = "wall_charger"
circuit = null
@@ -41,7 +41,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29)
/obj/item/wallframe/cell_charger_multi
name = "unmounted wall multi-cell charging rack"
desc = "The innovative technology of a cell charging rack, but able to be mounted neatly on a wall out of the way!"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/packed_machines.dmi'
icon_state = "cell_charger_packed"
w_class = WEIGHT_CLASS_NORMAL
result_path = /obj/machinery/cell_charger_multi/wall_mounted
diff --git a/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm
new file mode 100644
index 00000000000..1713f78a925
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm
@@ -0,0 +1,87 @@
+/obj/machinery/power/colony_wind_turbine
+ name = "miniature wind turbine"
+ desc = "A post with two special-designed vertical turbine blades attached to its sides. \
+ When placed outdoors in a planet with an atmosphere, will produce a small trickle of power \
+ for free. If there is a storm in the area the turbine is placed, the power production will \
+ multiply significantly."
+ icon = 'modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi'
+ icon_state = "turbine"
+ density = TRUE
+ max_integrity = 100
+ idle_power_usage = 0
+ anchored = TRUE
+ can_change_cable_layer = FALSE
+ circuit = null
+ layer = ABOVE_MOB_LAYER
+ can_change_cable_layer = TRUE
+ /// How much power the turbine makes without a storm
+ var/regular_power_production = 2500
+ /// How much power the turbine makes during a storm
+ var/storm_power_production = 10000
+ /// Is our pressure too low to function?
+ var/pressure_too_low = FALSE
+ /// Minimum external pressure needed to work
+ var/minimum_pressure = 5
+ /// What we undeploy into
+ var/undeploy_type = /obj/item/flatpacked_machine/wind_turbine
+
+/obj/machinery/power/colony_wind_turbine/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/repackable, undeploy_type, 2 SECONDS)
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+ connect_to_network()
+
+/obj/machinery/power/colony_wind_turbine/examine(mob/user)
+ . = ..()
+ var/area/turbine_area = get_area(src)
+ if(!turbine_area.outdoors)
+ . += span_notice("Its must be constructed outdoors to function.")
+ if(pressure_too_low)
+ . += span_notice("There must be enough atmospheric pressure for the turbine to spin.")
+
+
+/obj/machinery/power/colony_wind_turbine/process()
+ var/area/our_current_area = get_area(src)
+ if(!our_current_area.outdoors)
+ icon_state = "turbine"
+ add_avail(0)
+ return
+
+ var/turf/our_turf = get_turf(src)
+ var/datum/gas_mixture/environment = our_turf.return_air()
+
+ if(environment.return_pressure() < minimum_pressure)
+ pressure_too_low = TRUE
+ icon_state = "turbine"
+ add_avail(0)
+ return
+
+ pressure_too_low = FALSE
+ var/storming_out = FALSE
+
+ var/datum/weather/weather_we_track
+ for(var/datum/weather/possible_weather in SSweather.processing)
+ if((our_turf.z in possible_weather.impacted_z_levels) || (our_current_area in possible_weather.impacted_areas))
+ weather_we_track = possible_weather
+ break
+ if(weather_we_track)
+ if(!(weather_we_track.stage == END_STAGE))
+ storming_out = TRUE
+
+ add_avail((storming_out ? storm_power_production : regular_power_production))
+
+ var/new_icon_state = (storming_out ? "turbine_storm" : "turbine_normal")
+ icon_state = new_icon_state
+
+
+// Item for deploying wind turbines
+/obj/item/flatpacked_machine/wind_turbine
+ name = "flat-packed miniature wind turbine"
+ icon = 'modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi'
+ icon_state = "turbine_packed"
+ type_to_deploy = /obj/machinery/power/colony_wind_turbine
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm
similarity index 96%
rename from modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
rename to modular_nova/modules/colony_fabricator/code/colony_fabricator.dm
index c434228a9bb..9f83c4c8c90 100644
--- a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm
+++ b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm
@@ -3,7 +3,7 @@
desc = "These bad boys are seen just about anywhere someone would want or need to build fast, damn the consequences. \
That tends to be colonies, especially on dangerous worlds, where the influences of this one machine can be seen \
in every bit of architecture."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
icon_state = "colony_lathe"
base_icon_state = "colony_lathe"
production_animation = null
@@ -79,7 +79,7 @@
/obj/item/flatpacked_machine
name = "flat-packed rapid construction fabricator"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/packed_machines.dmi'
icon_state = "colony_lathe_packed"
w_class = WEIGHT_CLASS_BULKY
/// What structure is created by this item.
diff --git a/modular_nova/modules/colony_fabricator/code/construction/doors.dm b/modular_nova/modules/colony_fabricator/code/construction/doors.dm
new file mode 100644
index 00000000000..a40a15ef9e6
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/construction/doors.dm
@@ -0,0 +1,56 @@
+// Shutters
+
+/obj/machinery/door/poddoor/shutters/colony_fabricator
+ name = "prefab shutters"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi'
+
+/obj/machinery/door/poddoor/shutters/colony_fabricator/preopen
+ icon_state = "open"
+ density = FALSE
+ opacity = FALSE
+
+/obj/machinery/door/poddoor/shutters/colony_fabricator/do_animate(animation)
+ switch(animation)
+ if("opening")
+ flick("opening", src)
+ icon_state = "open"
+ playsound(src, animation_sound, 30, TRUE)
+ if("closing")
+ flick("closing", src)
+ icon_state = "closed"
+ playsound(src, animation_sound, 30, TRUE)
+
+/obj/item/flatpacked_machine/shutter_kit
+ name = "prefab shutters parts kit"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi'
+ icon_state = "shutters_parts"
+ type_to_deploy = /obj/machinery/door/poddoor/shutters/colony_fabricator/preopen
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+
+// Airlocks
+
+/obj/machinery/door/airlock/colony_prefab
+ name = "prefab airlock"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi'
+ overlays_file = 'modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_colony_prefab
+
+/obj/structure/door_assembly/door_assembly_colony_prefab
+ name = "prefab airlock assembly"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi'
+ base_name = "prefab airlock"
+ airlock_type = /obj/machinery/door/airlock/colony_prefab
+ noglass = TRUE
+
+/obj/item/flatpacked_machine/airlock_kit
+ name = "prefab airlock parts kit"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi'
+ icon_state = "airlock_parts"
+ type_to_deploy = /obj/machinery/door/airlock/colony_prefab
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
diff --git a/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm b/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm
new file mode 100644
index 00000000000..22727adddc8
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/construction/manual_door.dm
@@ -0,0 +1,81 @@
+/obj/structure/mineral_door/manual_colony_door
+ name = "manual airlock"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi'
+ material_flags = NONE
+ icon_state = "manual"
+ openSound = 'modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav'
+ closeSound = 'modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav'
+ /// What we disassemble into
+ var/disassembled_type = /obj/item/flatpacked_machine/airlock_kit_manual
+ /// How long it takes to open/close the door
+ var/manual_actuation_delay = 1 SECONDS
+
+/obj/structure/mineral_door/manual_colony_door/deconstruct(disassembled = TRUE)
+ if(disassembled)
+ new disassembled_type(get_turf(src))
+ qdel(src)
+
+// Pickaxes won't dig these apart
+/obj/structure/mineral_door/manual_colony_door/pickaxe_door(mob/living/user, obj/item/item_in_question)
+ return
+
+// These doors have a short do_after to check if you can open or close them
+/obj/structure/mineral_door/manual_colony_door/TryToSwitchState(atom/user)
+ if(isSwitchingStates || !anchored)
+ return
+ if(!do_after(user, manual_actuation_delay, src))
+ return
+ return ..()
+
+// We don't care about being bumped, just a copy of the base bumped proc
+/obj/structure/mineral_door/manual_colony_door/Bumped(atom/movable/bumped_atom)
+ set waitfor = FALSE
+ SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, bumped_atom)
+
+/obj/structure/mineral_door/manual_colony_door/Open()
+ isSwitchingStates = TRUE
+ playsound(src, openSound, 100, TRUE)
+ set_opacity(FALSE)
+ flick("[initial(icon_state)]opening",src)
+ icon_state = "[initial(icon_state)]open"
+ sleep(1 SECONDS)
+ set_density(FALSE)
+ door_opened = TRUE
+ layer = OPEN_DOOR_LAYER
+ air_update_turf(TRUE, FALSE)
+ update_appearance()
+ isSwitchingStates = FALSE
+
+ if(close_delay != -1)
+ addtimer(CALLBACK(src, PROC_REF(Close)), close_delay)
+
+/obj/structure/mineral_door/manual_colony_door/Close()
+ if(isSwitchingStates || !door_opened)
+ return
+ var/turf/T = get_turf(src)
+ for(var/mob/living/L in T)
+ return
+ isSwitchingStates = TRUE
+ playsound(src, closeSound, 100, TRUE)
+ flick("[initial(icon_state)]closing",src)
+ icon_state = initial(icon_state)
+ sleep(1 SECONDS)
+ set_density(TRUE)
+ set_opacity(TRUE)
+ door_opened = FALSE
+ layer = initial(layer)
+ air_update_turf(TRUE, TRUE)
+ update_appearance()
+ isSwitchingStates = FALSE
+
+// Parts kit for putting the door together
+/obj/item/flatpacked_machine/airlock_kit_manual
+ name = "prefab manual airlock parts kit"
+ icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi'
+ icon_state = "airlock_parts_manual"
+ type_to_deploy = /obj/structure/mineral_door/manual_colony_door
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+ w_class = WEIGHT_CLASS_NORMAL
diff --git a/modular_nova/modules/colony_fabricator/code/construction/turfs.dm b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm
new file mode 100644
index 00000000000..c4865faa9ce
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm
@@ -0,0 +1,176 @@
+// Plastic panel walls, how colony of you
+
+/turf/closed/wall/prefab_plastic
+ name = "prefabricated wall"
+ desc = "A conservatively built metal frame with plastic paneling covering a thin air-seal layer. \
+ It's a little unnerving, but its better than nothing at all."
+ icon = 'modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi'
+ icon_state = "prefab-0"
+ base_icon_state = "prefab"
+ can_engrave = FALSE
+ girder_type = null
+ hardness = 70
+ slicing_duration = 5 SECONDS
+ sheet_type = /obj/item/stack/sheet/plastic_wall_panel
+ sheet_amount = 1
+
+GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list(
+ new/datum/stack_recipe("prefabricated wall", /turf/closed/wall/prefab_plastic, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
+ new/datum/stack_recipe("prefabricated window", /obj/structure/window/fulltile/colony_fabricator, time = 1 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
+ ))
+
+/obj/item/stack/sheet/plastic_wall_panel
+ name = "plastic panels"
+ singular_name = "plastic panel"
+ desc = "What better material to make the walls of your soon to be home out of than sheets of flimsy plastic? \
+ Metal? What are you talking about, metal walls, in this economy? May also be used to make structures other \
+ than walls."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi'
+ icon_state = "sheet-plastic"
+ inhand_icon_state = "sheet-plastic"
+ mats_per_unit = list(
+ /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ has_unique_girder = TRUE
+ material_type = /datum/material/plastic
+ merge_type = /obj/item/stack/sheet/plastic_wall_panel
+ walltype = /turf/closed/wall/prefab_plastic
+
+/obj/item/stack/sheet/plastic_wall_panel/examine(mob/user)
+ . = ..()
+ . += span_notice("You can build a prefabricated wall by right clicking on an empty floor.")
+
+/obj/item/stack/sheet/plastic_wall_panel/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters)
+ if(!isopenturf(target))
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+ var/turf/open/build_on = target
+ if(!user.Adjacent(build_on))
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(isgroundlessturf(build_on))
+ user.balloon_alert(user, "can't place it here!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(build_on.is_blocked_turf())
+ user.balloon_alert(user, "something is blocking the tile!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(get_amount() < 1)
+ user.balloon_alert(user, "not enough material!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(!do_after(user, 3 SECONDS, build_on))
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(build_on.is_blocked_turf())
+ user.balloon_alert(user, "something is blocking the tile!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ if(!use(1))
+ user.balloon_alert(user, "not enough material!")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ build_on.place_on_top(walltype, flags = CHANGETURF_INHERIT_AIR)
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+
+/obj/item/stack/sheet/plastic_wall_panel/get_main_recipes()
+ . = ..()
+ . += GLOB.plastic_wall_panel_recipes
+
+/obj/item/stack/sheet/plastic_wall_panel/ten
+ amount = 10
+
+/obj/item/stack/sheet/plastic_wall_panel/fifty
+ amount = 50
+
+// Stacks of floor tiles
+
+/obj/item/stack/tile/catwalk_tile/colony_lathe
+ icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi'
+ icon_state = "prefab_catwalk"
+ mats_per_unit = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT)
+ turf_type = /turf/open/floor/catwalk_floor/colony_fabricator
+ merge_type = /obj/item/stack/tile/catwalk_tile/colony_lathe
+ tile_reskin_types = null
+
+/obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn
+ amount = 4
+
+/obj/item/stack/tile/iron/colony
+ name = "prefab floor tiles"
+ singular_name = "prefab floor tile"
+ desc = "A stack of large floor tiles that are a common sight in frontier colonies and prefab buildings."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tiles_item.dmi'
+ icon_state = "colony_grey"
+ turf_type = /turf/open/floor/iron/colony
+ merge_type = /obj/item/stack/tile/iron/colony
+ tile_reskin_types = list(
+ /obj/item/stack/tile/iron/colony,
+ /obj/item/stack/tile/iron/colony/texture,
+ /obj/item/stack/tile/iron/colony/bolts,
+ /obj/item/stack/tile/iron/colony/white,
+ /obj/item/stack/tile/iron/colony/white/texture,
+ /obj/item/stack/tile/iron/colony/white/bolts,
+ )
+
+/obj/item/stack/tile/iron/colony/lathe_spawn
+ amount = 4
+
+// Grated floor tile, for seeing wires under
+
+/turf/open/floor/catwalk_floor/colony_fabricator
+ icon = 'modular_nova/modules/colony_fabricator/icons/tiles.dmi'
+ icon_state = "prefab_above"
+ catwalk_type = "prefab"
+ baseturfs = /turf/open/floor/plating
+ floor_tile = /obj/item/stack/tile/catwalk_tile/colony_lathe
+
+// "Normal" floor tiles
+
+/obj/item/stack/tile/iron/colony/texture
+ icon_state = "colony_grey_texture"
+ turf_type = /turf/open/floor/iron/colony/texture
+
+/obj/item/stack/tile/iron/colony/bolts
+ icon_state = "colony_grey_bolts"
+ turf_type = /turf/open/floor/iron/colony/bolts
+
+/turf/open/floor/iron/colony
+ icon = 'modular_nova/modules/colony_fabricator/icons/tiles.dmi'
+ icon_state = "colony_grey"
+ base_icon_state = "colony_grey"
+ floor_tile = /obj/item/stack/tile/iron/colony
+ tiled_dirt = FALSE
+
+/turf/open/floor/iron/colony/texture
+ icon_state = "colony_grey_texture"
+ base_icon_state = "colony_grey_texture"
+ floor_tile = /obj/item/stack/tile/iron/colony/texture
+
+/turf/open/floor/iron/colony/bolts
+ icon_state = "colony_grey_bolts"
+ base_icon_state = "colony_grey_bolts"
+ floor_tile = /obj/item/stack/tile/iron/colony/bolts
+
+// White variants of the above tiles
+
+/obj/item/stack/tile/iron/colony/white
+ icon_state = "colony_white"
+ turf_type = /turf/open/floor/iron/colony/white
+
+/obj/item/stack/tile/iron/colony/white/texture
+ icon_state = "colony_white_texture"
+ turf_type = /turf/open/floor/iron/colony/white/texture
+
+/obj/item/stack/tile/iron/colony/white/bolts
+ icon_state = "colony_white_bolts"
+ turf_type = /turf/open/floor/iron/colony/white/bolts
+
+/turf/open/floor/iron/colony/white
+ icon_state = "colony_white"
+ base_icon_state = "colony_white"
+ floor_tile = /obj/item/stack/tile/iron/colony/white
+
+/turf/open/floor/iron/colony/white/texture
+ icon_state = "colony_white_texture"
+ base_icon_state = "colony_white_texture"
+ floor_tile = /obj/item/stack/tile/iron/colony/white/texture
+
+/turf/open/floor/iron/colony/white/bolts
+ icon_state = "colony_white_bolts"
+ base_icon_state = "colony_white_bolts"
+ floor_tile = /obj/item/stack/tile/iron/colony/white/bolts
diff --git a/modular_nova/modules/colony_fabricator/code/construction/windows.dm b/modular_nova/modules/colony_fabricator/code/construction/windows.dm
new file mode 100644
index 00000000000..f5453506be5
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/construction/windows.dm
@@ -0,0 +1,43 @@
+/obj/structure/window/fulltile/colony_fabricator
+ name = "prefabricated window"
+ desc = "A conservatively built metal frame with a thick sheet of space-grade glass slotted into it."
+ icon = 'modular_nova/modules/colony_fabricator/icons/prefab_window.dmi'
+ icon_state = "prefab-0"
+ base_icon_state = "prefab"
+ fulltile = TRUE
+ glass_type = /obj/item/stack/sheet/plastic_wall_panel
+ glass_amount = 1
+
+/obj/structure/grille/attackby(obj/item/item_in_question, mob/user, params)
+ if(!istype(item_in_question, /obj/item/stack/sheet/plastic_wall_panel))
+ return ..()
+
+ if(broken)
+ return
+ var/obj/item/stack/stack_in_question = item_in_question
+ if(stack_in_question.get_amount() < 1)
+ to_chat(user, span_warning("You need at least one plastic panel for that!"))
+ return
+ var/dir_to_set = SOUTHWEST
+ if(!anchored)
+ to_chat(user, span_warning("[src] needs to be fastened to the floor first!"))
+ return
+ for(var/obj/structure/window/window_on_turf in loc)
+ to_chat(user, span_warning("There is already a window there!"))
+ return
+ if(!clear_tile(user))
+ return
+ to_chat(user, span_notice("You start placing the window..."))
+ if(!do_after(user, 1 SECONDS, target = src))
+ return
+ if(!src.loc || !anchored) //Grille broken or unanchored while waiting
+ return
+ for(var/obj/structure/window/window_on_turf in loc) //Another window already installed on grille
+ return
+ if(!clear_tile(user))
+ return
+ var/obj/structure/window/new_window = new /obj/structure/window/fulltile/colony_fabricator(drop_location())
+ new_window.setDir(dir_to_set)
+ new_window.state = 0
+ stack_in_question.use(1)
+ to_chat(user, span_notice("You place [new_window] on [src]."))
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/appliances.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm
diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm
new file mode 100644
index 00000000000..933a067d7a2
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm
@@ -0,0 +1,124 @@
+// Look, I had to make its name start with A so it'd be top of the list, fight me
+
+#define FABRICATOR_SUBCATEGORY_STRUCTURES "/Autofab Structures"
+
+// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with
+
+/datum/techweb_node/colony_fabricator_structures
+ id = "colony_fabricator_structures"
+ display_name = "Colony Fabricator Structure Designs"
+ description = "Contains all of the colony fabricator's structure designs."
+ design_ids = list(
+ "prefab_airlock_kit",
+ "prefab_manual_airlock_kit",
+ "prefab_shutters_kit",
+ "prefab_floor_tile",
+ "prefab_cat_floor_tile",
+ "colony_fab_plastic_wall_panel",
+ )
+ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
+ hidden = TRUE
+ show_on_wiki = FALSE
+ starting_node = TRUE
+
+// Airlock kit
+
+/datum/design/prefab_airlock_kit
+ name = "Prefab Airlock"
+ id = "prefab_airlock_kit"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+ build_path = /obj/item/flatpacked_machine/airlock_kit
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 30 SECONDS
+
+// Manul Airlock kit
+
+/datum/design/prefab_manual_airlock_kit
+ name = "Prefab Manual Airlock"
+ id = "prefab_manual_airlock_kit"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+ build_path = /obj/item/flatpacked_machine/airlock_kit_manual
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 30 SECONDS
+
+// Shutters kit
+
+/datum/design/prefab_shutters_kit
+ name = "Prefab Shutters"
+ id = "prefab_shutters_kit"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ )
+ build_path = /obj/item/flatpacked_machine/shutter_kit
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 30 SECONDS
+
+// Fancy floor tiles
+
+/datum/design/prefab_floor_tile
+ name = "Prefab Floor Tile x4"
+ id = "prefab_floor_tile"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/stack/tile/iron/colony/lathe_spawn
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 15 SECONDS
+
+// Fancy catwalk floor tiles
+
+/datum/design/prefab_cat_floor_tile
+ name = "Prefab Catwalk Plating x4"
+ id = "prefab_cat_floor_tile"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 15 SECONDS
+
+// Plastic wall panels, twice the wall for the same price in plastic, efficient!
+
+/datum/design/colony_fab_plastic_wall_panel
+ name = "Plastic Paneling x10"
+ id = "colony_fab_plastic_wall_panel"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5
+ )
+ build_path = /obj/item/stack/sheet/plastic_wall_panel/ten
+ category = list(
+ RND_CATEGORY_INITIAL,
+ RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
+ )
+ construction_time = 15 SECONDS
+
+#undef FABRICATOR_SUBCATEGORY_STRUCTURES
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm b/modular_nova/modules/colony_fabricator/code/design_datums/equipment.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/equipment.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/equipment.dm
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/computer_board.dm
diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
new file mode 100644
index 00000000000..ea92e20e1f3
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
@@ -0,0 +1,117 @@
+// This file is going to be just all bitflag additions
+
+/datum/design/apc_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airalarm_electronics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/airlock_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/firealarm_electronics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/control/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/firelock_board/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/infrared_emitter/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/prox_sensor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/signaler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/timer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Wall frames
+
+/datum/design/camera_assembly/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/intercom_frame/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/light_switch_frame/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/ignition_control/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/sparker/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/newscaster_frame/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/status_display_frame/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/requests_console/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Lights
+
+/datum/design/light_tube/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/light_bulb/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Conveyors
+
+/datum/design/conveyor_belt/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/conveyor_switch/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Materials
+
+/datum/design/lavarods/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/rglass/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasteel_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plaglass_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/plasmarglass_alloy/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/equipment.dm
diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
new file mode 100644
index 00000000000..e076743df4b
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
@@ -0,0 +1,69 @@
+/datum/design/board/hydroponics/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/cyborgrecharger/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/microwave/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/processor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/recycler/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/suit_storage_unit/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/range/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/griddle/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/reagentgrinder/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/biogenerator/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+// Turbine Stuff
+
+/datum/design/board/turbine_computer/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/turbine_compressor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/turbine_rotor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/board/turbine_stator/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/turbine_part_compressor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/turbine_part_rotor/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
+
+/datum/design/turbine_part_stator/New()
+ . = ..()
+ build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/stock_parts.dm
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
similarity index 81%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
index a824a145df9..5912a347bd2 100644
--- a/modular_skyrat/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
+++ b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm
@@ -22,6 +22,8 @@
"flatpack_fuel_generator",
"flatpack_rtg",
"flatpack_thermo",
+ "flatpack_ore_silo",
+ "flatpack_turbine_team_fortress_two",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
hidden = TRUE
@@ -201,6 +203,46 @@
)
construction_time = 20 SECONDS
+// Ore silo except it beeps
+
+/datum/design/flatpack_ore_silo
+ name = "Flat-packed Ore Silo"
+ desc = "An all-in-one materials management solution. Connects resource-using machines \
+ through a network of distrobution systems."
+ id = "flatpack_ore_silo"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/flatpacked_machine/ore_silo
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MATERIALS,
+ )
+ construction_time = 1 MINUTES
+
+// Wind turbine, produces tiny amounts of power when placed outdoors in an atmosphere, but makes significantly more if there's a storm in that area
+
+/datum/design/flatpack_turbine_team_fortress_two
+ name = "Flat-packed Miniature Wind Turbine"
+ desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \
+ rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \
+ and moved to any location you see fit. This one makes specialized engineering designs and tools."
+ id = "flatpack_turbine_team_fortress_two"
+ build_type = COLONY_FABRICATOR
+ materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
+ /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ build_path = /obj/item/flatpacked_machine/wind_turbine
+ category = list(
+ RND_CATEGORY_INITIAL,
+ FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER,
+ )
+ construction_time = 30 SECONDS
+
#undef FABRICATOR_CATEGORY_FLATPACK_MACHINES
#undef FABRICATOR_SUBCATEGORY_MANUFACTURING
#undef FABRICATOR_SUBCATEGORY_POWER
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/tools.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/design_datums/tools.dm
rename to modular_nova/modules/colony_fabricator/code/design_datums/tools.dm
diff --git a/modular_nova/modules/colony_fabricator/code/looping_sounds.dm b/modular_nova/modules/colony_fabricator/code/looping_sounds.dm
new file mode 100644
index 00000000000..65dc3658534
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/looping_sounds.dm
@@ -0,0 +1,35 @@
+/datum/looping_sound/colony_fabricator_running
+ start_sound = 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav'
+ start_length = 1
+ mid_sounds = list(
+ 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1,
+ )
+ mid_length = 3 SECONDS
+ end_sound = 'modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav'
+ volume = 100
+ falloff_exponent = 3
+
+/datum/looping_sound/arc_furnace_running
+ mid_sounds = list(
+ 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1,
+ )
+ mid_length = 1 SECONDS
+ volume = 200 // This sound effect is very quiet I've noticed
+ falloff_exponent = 2
+
+/datum/looping_sound/conditioner_running
+ mid_sounds = list(
+ 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1,
+ 'modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1,
+ )
+ mid_length = 3 SECONDS
+ volume = 40
+ falloff_exponent = 3
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm
similarity index 99%
rename from modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm
rename to modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm
index 078bbc96126..7e22e231f70 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm
@@ -9,7 +9,7 @@
amounts of electricity. While not nearly as fast and efficient as other ore refining methods, the arc furnace is \
capable of returning larger amounts of refined material than a standard refining process can. \
A sticker on the side notes that this may exhaust waste gasses to the air during operation."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
icon_state = "arc_furnace"
base_icon_state = "arc_furnace"
appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE
diff --git a/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm
new file mode 100644
index 00000000000..c06a99f40a1
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm
@@ -0,0 +1,23 @@
+/obj/machinery/ore_silo/colony_lathe
+ name = "colony ore silo"
+ desc = "An all-in-one materials management solution. Connects resource-using machines \
+ through a network of distribution systems."
+ icon = 'modular_nova/modules/colony_fabricator/icons/ore_silo.dmi'
+ circuit = null
+ /// What this unpacks into
+ var/unpacked_type = /obj/item/flatpacked_machine/ore_silo
+
+/obj/machinery/ore_silo/colony_lathe/silo_log(obj/machinery/machinery_in_question, action, amount, noun, list/mats)
+ . = ..()
+ playsound(src, 'sound/machines/beep.ogg', 30, TRUE)
+
+// Item for deploying ore silos
+/obj/item/flatpacked_machine/ore_silo
+ name = "flat-packed ore silo"
+ icon = 'modular_nova/modules/colony_fabricator/icons/ore_silo.dmi'
+ icon_state = "ore_silo"
+ type_to_deploy = /obj/machinery/ore_silo/colony_lathe
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5,
+ )
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm
similarity index 93%
rename from modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm
rename to modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm
index d98040312af..18e8ee3de27 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm
@@ -4,7 +4,7 @@
Smaller units such as these tend to have a respectively smaller energy storage , though also are capable of \
higher maximum output than some larger units. Most commonly seen being used not for their ability to store \
power, but rather for use in regulating power input and output."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi'
capacity = 75e4
input_level_max = 4e5
output_level_max = 4e5
@@ -57,7 +57,7 @@
Larger units such as these tend to have a respectively larger energy storage , though only capable of \
low maximum output compared to smaller units. Most commonly seen as large backup batteries, or simply \
for large power storage where throughput is not a concern."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi'
capacity = 1e7
input_level_max = 5e4
output_level_max = 5e4
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_nova/modules/colony_fabricator/code/machines/rtg.dm
similarity index 94%
rename from modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm
rename to modular_nova/modules/colony_fabricator/code/machines/rtg.dm
index c01724200ac..4690ceb8aff 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/rtg.dm
@@ -4,7 +4,7 @@
design of generator has forgone the heavy radiation shielding that most RTG designs include. \
In better news, these tend to be pretty good with making a passable trickle of power for any \
application."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
circuit = null
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
power_gen = 7500
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm
similarity index 93%
rename from modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm
rename to modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm
index 03ca85b3b1f..d8cba4dfada 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm
@@ -1,7 +1,7 @@
// Solar panels
/obj/machinery/power/solar/deployable
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
/// The item we turn into when repacked
var/repacked_type = /obj/item/flatpacked_machine/solar
@@ -35,7 +35,7 @@
// Solar trackers
/obj/machinery/power/tracker/deployable
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
/// The item we turn into when repacked
var/repacked_type = /obj/item/flatpacked_machine/solar_tracker
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
similarity index 96%
rename from modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
rename to modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
index a3ac75a0825..caa7883f643 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/solid_fuel_generator.dm
@@ -7,7 +7,7 @@
but at least it makes a hell of a lot more power. Must be bolted to the ground \
and attached to a wire before use. A massive warning label wants you to know that this generator \
outputs waste heat and gasses to the air around it ."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/machines.dmi'
icon_state = "fuel_generator_0"
base_icon_state = "fuel_generator"
circuit = null
diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm
similarity index 93%
rename from modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm
rename to modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm
index 4f59cac7251..685b540a67f 100644
--- a/modular_skyrat/modules/colony_fabricator/code/machines/thermomachine.dm
+++ b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm
@@ -1,5 +1,5 @@
/obj/machinery/atmospherics/components/unary/thermomachine/deployable
- icon = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi'
+ icon = 'modular_nova/modules/colony_fabricator/icons/thermomachine.dmi'
name = "atmospheric temperature regulator"
desc = "A much more tame variant of the thermomachines commonly seen in station scale temperature control devices. \
Its upper and lower bounds for temperature are highly limited, though it has a higher than standard heat capacity \
@@ -56,4 +56,4 @@
/datum/greyscale_config/thermomachine/deployable
name = "Deployable Thermomachine"
- icon_file = 'modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi'
+ icon_file = 'modular_nova/modules/colony_fabricator/icons/thermomachine.dmi'
diff --git a/modular_skyrat/modules/colony_fabricator/code/repacking_element.dm b/modular_nova/modules/colony_fabricator/code/repacking_element.dm
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/code/repacking_element.dm
rename to modular_nova/modules/colony_fabricator/code/repacking_element.dm
diff --git a/modular_nova/modules/colony_fabricator/code/tools/tools.dm b/modular_nova/modules/colony_fabricator/code/tools/tools.dm
new file mode 100644
index 00000000000..58d1e239e29
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/code/tools/tools.dm
@@ -0,0 +1,145 @@
+// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one.
+
+/obj/item/screwdriver/omni_drill
+ name = "powered driver"
+ desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \
+ screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \
+ not much quicker than unpowered tools ."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "drill"
+ belt_icon_state = null
+ inhand_icon_state = "drill"
+ worn_icon_state = "drill"
+ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+ force = 10
+ throwforce = 8
+ throw_speed = 2
+ throw_range = 3
+ attack_verb_continuous = list("drills", "screws", "jabs", "whacks")
+ attack_verb_simple = list("drill", "screw", "jab", "whack")
+ hitsound = 'sound/items/drill_hit.ogg'
+ usesound = 'sound/items/drill_use.ogg'
+ w_class = WEIGHT_CLASS_SMALL
+ toolspeed = 1
+ random_color = FALSE
+ greyscale_config = null
+ greyscale_config_belt = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+
+/obj/item/screwdriver/omni_drill/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+/obj/item/screwdriver/omni_drill/get_all_tool_behaviours()
+ return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH)
+
+/obj/item/screwdriver/omni_drill/examine(mob/user)
+ . = ..()
+ . += span_notice("Use in hand to switch configuration.\n")
+ . += span_notice("It functions as a [tool_behaviour] tool.")
+
+/obj/item/screwdriver/omni_drill/update_icon_state()
+ . = ..()
+ switch(tool_behaviour)
+ if(TOOL_SCREWDRIVER)
+ icon_state = initial(icon_state)
+ if(TOOL_WRENCH)
+ icon_state = "[initial(icon_state)]_bolt"
+ if(TOOL_WIRECUTTER)
+ icon_state = "[initial(icon_state)]_cut"
+
+/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers)
+ . = ..()
+ if(!user)
+ return
+ var/list/tool_list = list(
+ "Screwdriver" = image(icon = icon, icon_state = "drill"),
+ "Wrench" = image(icon = icon, icon_state = "drill_bolt"),
+ "Wirecutters" = image(icon = icon, icon_state = "drill_cut"),
+ )
+ var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user) || !tool_result)
+ return
+ switch(tool_result)
+ if("Wrench")
+ tool_behaviour = TOOL_WRENCH
+ sharpness = NONE
+ if("Wirecutters")
+ tool_behaviour = TOOL_WIRECUTTER
+ sharpness = NONE
+ if("Screwdriver")
+ tool_behaviour = TOOL_SCREWDRIVER
+ sharpness = SHARP_POINTY
+ playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE)
+ update_appearance(UPDATE_ICON)
+
+/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated() || !user.Adjacent(src))
+ return FALSE
+ return TRUE
+
+// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can
+
+/obj/item/crowbar/large/doorforcer
+ name = "prybar"
+ desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \
+ survive forcing doors open ."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "prybar"
+ toolspeed = 1.3
+ force_opens = TRUE
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
+ /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+/obj/item/crowbar/large/doorforcer/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+// Backpackable mining drill
+
+/obj/item/pickaxe/drill/compact
+ name = "compact mining drill"
+ desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "drilla"
+ worn_icon_state = "drill"
+ w_class = WEIGHT_CLASS_NORMAL
+ toolspeed = 0.6
+ custom_materials = list(
+ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
+ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
+ )
+
+/obj/item/pickaxe/drill/compact/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
+
+// Electric welder but not quite as strong
+
+/obj/item/weldingtool/electric/arc_welder
+ name = "arc welding tool"
+ desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \
+ Compared to other electrically-powered welders, this model is slow and highly power inefficient, \
+ but it still gets the job done and chances are you printed this bad boy off for free."
+ icon = 'modular_nova/modules/colony_fabricator/icons/tools.dmi'
+ icon_state = "arc_welder"
+ usesound = 'modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg'
+ light_range = 2
+ light_power = 0.75
+ toolspeed = 1
+ power_use_amount = POWER_CELL_USE_INSANE
+
+/obj/item/weldingtool/electric/arc_welder/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
diff --git a/modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi b/modular_nova/modules/colony_fabricator/icons/cell_charger.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/cell_charger.dmi
rename to modular_nova/modules/colony_fabricator/icons/cell_charger.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi b/modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/chemistry_machines.dmi
rename to modular_nova/modules/colony_fabricator/icons/chemistry_machines.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/doors/airlock.dmi b/modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/doors/airlock.dmi
rename to modular_nova/modules/colony_fabricator/icons/doors/airlock.dmi
diff --git a/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi b/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi
new file mode 100644
index 00000000000..3ced7b3a163
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/airlock_manual.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/doors/overlays.dmi b/modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/doors/overlays.dmi
rename to modular_nova/modules/colony_fabricator/icons/doors/overlays.dmi
diff --git a/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi b/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi
new file mode 100644
index 00000000000..118709bb772
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/doors/packed.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/doors/shutter.dmi b/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/doors/shutter.dmi
rename to modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/machines.dmi b/modular_nova/modules/colony_fabricator/icons/machines.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/machines.dmi
rename to modular_nova/modules/colony_fabricator/icons/machines.dmi
diff --git a/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi b/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi
new file mode 100644
index 00000000000..8cbf8158644
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/ore_silo.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi b/modular_nova/modules/colony_fabricator/icons/packed_machines.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/packed_machines.dmi
rename to modular_nova/modules/colony_fabricator/icons/packed_machines.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi b/modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi
rename to modular_nova/modules/colony_fabricator/icons/power_storage_unit/large_battery.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi b/modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi
rename to modular_nova/modules/colony_fabricator/icons/power_storage_unit/small_battery.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/prefab_wall.dmi b/modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/prefab_wall.dmi
rename to modular_nova/modules/colony_fabricator/icons/prefab_wall.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/prefab_window.dmi b/modular_nova/modules/colony_fabricator/icons/prefab_window.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/prefab_window.dmi
rename to modular_nova/modules/colony_fabricator/icons/prefab_window.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi b/modular_nova/modules/colony_fabricator/icons/thermomachine.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/thermomachine.dmi
rename to modular_nova/modules/colony_fabricator/icons/thermomachine.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/tiles.dmi b/modular_nova/modules/colony_fabricator/icons/tiles.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/tiles.dmi
rename to modular_nova/modules/colony_fabricator/icons/tiles.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi b/modular_nova/modules/colony_fabricator/icons/tiles_item.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi
rename to modular_nova/modules/colony_fabricator/icons/tiles_item.dmi
diff --git a/modular_skyrat/modules/colony_fabricator/icons/tools.dmi b/modular_nova/modules/colony_fabricator/icons/tools.dmi
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/icons/tools.dmi
rename to modular_nova/modules/colony_fabricator/icons/tools.dmi
diff --git a/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi b/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi
new file mode 100644
index 00000000000..26a37260b73
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav
rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav
rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav
rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav b/modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav
rename to modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg b/modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg
rename to modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg
diff --git a/modular_nova/modules/colony_fabricator/sound/attributions.txt b/modular_nova/modules/colony_fabricator/sound/attributions.txt
new file mode 100644
index 00000000000..be436734b0a
--- /dev/null
+++ b/modular_nova/modules/colony_fabricator/sound/attributions.txt
@@ -0,0 +1,16 @@
+The following sounds have been recorded, edited and added by Paxilmaniac:
+
+modular_nova/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav
+modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav
+modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
+modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
+
+The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/
+
+modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav
+
+The following sounds are from https://pixabay.com/sound-effects/welder-3-54547/
+
+modular_nova/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg
+
+The sounds at modular_skyrat/modules/colony_fabriactor_event_code/sound/manual_door are from https://pixabay.com/sound-effects/schlonk-107321/
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav
rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_1.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav
rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_2.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav
rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_3.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav b/modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav
rename to modular_nova/modules/colony_fabricator/sound/conditioner/conditioner_4.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav
diff --git a/modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav b/modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
similarity index 100%
rename from modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
rename to modular_nova/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
diff --git a/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav
new file mode 100644
index 00000000000..a2f6ad300b0
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_close.wav differ
diff --git a/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav
new file mode 100644
index 00000000000..431b3eb6ea0
Binary files /dev/null and b/modular_nova/modules/colony_fabricator/sound/manual_door/manual_door_open.wav differ
diff --git a/modular_nova/modules/command_vendor/code/vending.dm b/modular_nova/modules/command_vendor/code/vending.dm
new file mode 100644
index 00000000000..eedb72d183d
--- /dev/null
+++ b/modular_nova/modules/command_vendor/code/vending.dm
@@ -0,0 +1,175 @@
+/obj/machinery/vending/access/command
+ name = "\improper Command Outfitting Station"
+ desc = "A vending machine for specialised clothing for members of Command."
+ product_ads = "File paperwork in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
+ icon = 'modular_nova/modules/command_vendor/icons/vending.dmi'
+ icon_state = "commdrobe"
+ light_mask = "wardrobe-light-mask"
+ vend_reply = "Thank you for using the CommDrobe!"
+ auto_build_products = TRUE
+ payment_department = ACCOUNT_CMD
+
+ refill_canister = /obj/item/vending_refill/wardrobe/comm_wardrobe
+ payment_department = ACCOUNT_CMD
+ light_color = COLOR_COMMAND_BLUE
+
+/obj/item/vending_refill/wardrobe/comm_wardrobe
+ machine_name = "CommDrobe"
+
+/obj/machinery/vending/access/command/build_access_list(list/access_lists)
+ access_lists["[ACCESS_CAPTAIN]"] = list(
+ // CAPTAIN
+ /obj/item/clothing/head/hats/caphat = 1,
+ /obj/item/clothing/head/caphat/beret = 1,
+ /obj/item/clothing/head/caphat/beret/alt = 1,
+ /obj/item/clothing/head/hats/imperial/cap = 1,
+ /obj/item/clothing/under/rank/captain = 1,
+ /obj/item/clothing/under/rank/captain/skirt = 1,
+ /obj/item/clothing/under/rank/captain/dress = 1,
+ /obj/item/clothing/under/rank/captain/skyrat/kilt = 1,
+ /obj/item/clothing/under/rank/captain/skyrat/imperial = 1,
+ /obj/item/clothing/head/hats/caphat/parade = 1,
+ /obj/item/clothing/under/rank/captain/parade = 1,
+ /obj/item/clothing/suit/armor/vest/capcarapace/captains_formal = 1,
+ /obj/item/clothing/suit/armor/vest/capcarapace/jacket = 1,
+ /obj/item/clothing/suit/jacket/capjacket = 1,
+ /obj/item/clothing/neck/cloak/cap = 1,
+ /obj/item/clothing/neck/mantle/capmantle = 1,
+ /obj/item/storage/backpack/captain = 1,
+ /obj/item/storage/backpack/satchel/cap = 1,
+ /obj/item/storage/backpack/duffelbag/captain = 1,
+ /obj/item/storage/backpack/messenger/cap = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+
+ // BLUESHIELD
+ /obj/item/clothing/head/beret/blueshield = 1,
+ /obj/item/clothing/head/beret/blueshield/navy = 1,
+ /obj/item/clothing/under/rank/blueshield = 1,
+ /obj/item/clothing/under/rank/blueshield/skirt = 1,
+ /obj/item/clothing/under/rank/blueshield/turtleneck = 1,
+ /obj/item/clothing/under/rank/blueshield/turtleneck/skirt = 1,
+ /obj/item/clothing/suit/armor/vest/blueshield = 1,
+ /obj/item/clothing/suit/armor/vest/blueshield/jacket = 1,
+ /obj/item/clothing/neck/mantle/bsmantle = 1,
+ /obj/item/storage/backpack/blueshield = 1,
+ /obj/item/storage/backpack/satchel/blueshield = 1,
+ /obj/item/storage/backpack/duffelbag/blueshield = 1,
+ /obj/item/storage/backpack/messenger/blueshield = 1,
+ /obj/item/clothing/shoes/laceup = 1,
+ )
+ access_lists["[ACCESS_HOP]"] = list( // Best head btw
+ /obj/item/clothing/head/hats/hopcap = 1,
+ /obj/item/clothing/head/hopcap/beret = 1,
+ /obj/item/clothing/head/hopcap/beret/alt = 1,
+ /obj/item/clothing/head/hats/imperial/hop = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck/skirt = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade/female = 1,
+ /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/imperial = 1,
+ /obj/item/clothing/suit/armor/vest/hop/hop_formal = 1,
+ /obj/item/clothing/neck/cloak/hop = 1,
+ /obj/item/clothing/neck/mantle/hopmantle = 1,
+ /obj/item/storage/backpack/head_of_personnel = 1,
+ /obj/item/storage/backpack/satchel/head_of_personnel = 1,
+ /obj/item/storage/backpack/duffelbag/head_of_personnel = 1,
+ /obj/item/storage/backpack/messenger/head_of_personnel = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+ access_lists["[ACCESS_CMO]"] = list(
+ /obj/item/clothing/head/beret/medical/cmo = 1,
+ /obj/item/clothing/head/beret/medical/cmo/alt = 1,
+ /obj/item/clothing/head/hats/imperial/cmo = 1,
+ /obj/item/clothing/under/rank/medical/chief_medical_officer = 1,
+ /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt = 1,
+ /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck = 1,
+ /obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial = 1,
+ /obj/item/clothing/neck/cloak/cmo = 1,
+ /obj/item/clothing/neck/mantle/cmomantle = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+ access_lists["[ACCESS_RD]"] = list(
+ /obj/item/clothing/head/beret/science/rd = 1,
+ /obj/item/clothing/head/beret/science/rd/alt = 1,
+ /obj/item/clothing/under/rank/rnd/research_director = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/skirt = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/alt = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/turtleneck = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt = 1,
+ /obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial = 1,
+ /obj/item/clothing/neck/cloak/rd = 1,
+ /obj/item/clothing/neck/mantle/rdmantle = 1,
+ /obj/item/clothing/suit/toggle/labcoat = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+ access_lists["[ACCESS_CE]"] = list(
+ /obj/item/clothing/head/beret/engi/ce = 1,
+ /obj/item/clothing/head/hats/imperial/ce = 1,
+ /obj/item/clothing/under/rank/engineering/chief_engineer = 1,
+ /obj/item/clothing/under/rank/engineering/chief_engineer/skirt = 1,
+ /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat/imperial = 1,
+ /obj/item/clothing/neck/cloak/ce = 1,
+ /obj/item/clothing/neck/mantle/cemantle = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+ access_lists["[ACCESS_HOS]"] = list(
+ /obj/item/clothing/head/hats/hos/cap = 1,
+ /obj/item/clothing/head/hats/hos/beret/navyhos = 1,
+ /obj/item/clothing/head/hats/imperial/hos = 1,
+ /obj/item/clothing/under/rank/security/head_of_security/peacekeeper = 1,
+ /obj/item/clothing/under/rank/security/head_of_security/alt = 1,
+ /obj/item/clothing/under/rank/security/head_of_security/alt/skirt = 1,
+ /obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial = 1,
+ /obj/item/clothing/suit/jacket/hos/blue = 1,
+ /obj/item/clothing/under/rank/security/head_of_security/parade = 1,
+ /obj/item/clothing/suit/armor/hos/hos_formal = 1,
+ /obj/item/clothing/neck/cloak/hos = 1,
+ /obj/item/clothing/neck/cloak/hos/redsec = 1,
+ /obj/item/clothing/neck/mantle/hosmantle = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+ access_lists["[ACCESS_QM]"] = list(
+ /obj/item/clothing/head/beret/cargo/qm = 1,
+ /obj/item/clothing/head/beret/cargo/qm/alt = 1,
+ /obj/item/clothing/neck/cloak/qm = 1,
+ /obj/item/clothing/neck/mantle/qm = 1,
+ /obj/item/clothing/under/rank/cargo/qm = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skirt = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/gorka = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt = 1,
+ /obj/item/clothing/suit/brownfurrich = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/casual = 1,
+ /obj/item/clothing/suit/toggle/jacket/supply/head = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/formal = 1,
+ /obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt = 1,
+ /obj/item/clothing/shoes/sneakers/brown = 1,
+ )
+
+ access_lists["[ACCESS_CENT_GENERAL]"] = list( // CC Rep Shiz
+ /obj/item/clothing/head/nanotrasen_consultant = 1,
+ /obj/item/clothing/head/nanotrasen_consultant/beret = 1,
+ /obj/item/clothing/head/beret/centcom_formal/nt_consultant = 1,
+ /obj/item/clothing/under/rank/nanotrasen_consultant = 1,
+ /obj/item/clothing/under/rank/nanotrasen_consultant/skirt = 1,
+ /obj/item/clothing/head/hats/centhat = 1,
+ /obj/item/clothing/suit/armor/centcom_formal/nt_consultant = 1,
+ /obj/item/clothing/gloves/combat/naval/nanotrasen_consultant = 1,
+ )
+
+ access_lists["[ACCESS_COMMAND]"] = list(
+ /obj/item/clothing/head/hats/imperial = 5,
+ /obj/item/clothing/head/hats/imperial/grey = 5,
+ /obj/item/clothing/head/hats/imperial/white = 2,
+ /obj/item/clothing/head/hats/imperial/red = 5,
+ /obj/item/clothing/head/hats/imperial/helmet = 5,
+ /obj/item/clothing/under/rank/captain/skyrat/imperial/generic = 5,
+ /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey = 5,
+ /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants = 5,
+ /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red = 5,
+ )
+
diff --git a/modular_skyrat/modules/command_vendor/icons/vending.dmi b/modular_nova/modules/command_vendor/icons/vending.dmi
similarity index 100%
rename from modular_skyrat/modules/command_vendor/icons/vending.dmi
rename to modular_nova/modules/command_vendor/icons/vending.dmi
diff --git a/modular_nova/modules/company_imports/code/armament_component.dm b/modular_nova/modules/company_imports/code/armament_component.dm
new file mode 100644
index 00000000000..a4d264d2ed0
--- /dev/null
+++ b/modular_nova/modules/company_imports/code/armament_component.dm
@@ -0,0 +1,302 @@
+#define MAX_AMMO_AMOUNT 10
+#define CARGO_CONSOLE 1
+#define IRN_CONSOLE 2
+
+/datum/component/armament/company_imports
+ /// Selected amount of ammo to purchase
+ var/ammo_purchase_num = 1
+ /// Is this set to private order
+ var/self_paid = FALSE
+ /// Cooldown to announce a requested order
+ COOLDOWN_DECLARE(radio_cooldown)
+ /// To cut down on redundant istypes(), what this component is attached to
+ var/console_state = null
+ /// If this is a tablet, the parent budgetordering
+ var/datum/computer_file/program/budgetorders/parent_prog
+
+/datum/component/armament/company_imports/Initialize(list/required_products, list/needed_access)
+ . = ..()
+ if(istype(parent, /obj/machinery/computer/cargo))
+ console_state = CARGO_CONSOLE
+ else if(istype(parent, /obj/item/modular_computer))
+ console_state = IRN_CONSOLE
+
+/datum/component/armament/company_imports/Destroy(force)
+ parent_prog = null
+ . = ..()
+
+/datum/component/armament/company_imports/on_attack_hand(datum/source, mob/living/user)
+ return
+
+/datum/component/armament/company_imports/on_attackby(atom/target, obj/item, mob/user)
+ return
+
+/datum/component/armament/company_imports/ui_data(mob/user)
+ var/list/data = list()
+
+ var/mob/living/carbon/human/the_person = user
+ var/obj/item/card/id/id_card
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+
+ if(console_state == IRN_CONSOLE)
+ id_card = parent_prog.computer.computer_id_slot?.GetID()
+ else
+ if(istype(the_person))
+ id_card = the_person.get_idcard(TRUE)
+
+ var/budget_name = "Cargo Budget"
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account?.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(id_card)
+ budget_name = self_paid ? id_card.name : buyer.account_holder
+
+ data["budget_name"] = budget_name
+
+ var/cant_buy_restricted = TRUE
+
+ if(console_state == CARGO_CONSOLE)
+ var/obj/machinery/computer/cargo/console = parent
+ if(!console.requestonly)
+ cant_buy_restricted = FALSE
+
+ else if((console_state == IRN_CONSOLE) && id_card?.registered_account)
+ if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
+ if((buyer == SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)) && !self_paid)
+ cant_buy_restricted = FALSE
+
+ data["cant_buy_restricted"] = !!cant_buy_restricted
+ data["budget_points"] = self_paid ? id_card?.registered_account?.account_balance : buyer?.account_balance
+ data["ammo_amount"] = ammo_purchase_num
+ data["self_paid"] = !!self_paid
+ data["armaments_list"] = list()
+
+ for(var/armament_category as anything in SSarmaments.entries)
+
+ var/list/armament_subcategories = list()
+
+ for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY])
+ var/list/subcategory_items = list()
+ for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory])
+ if(products && !(armament_entry.type in products))
+ continue
+
+ var/datum/armament_entry/company_import/gun_entry = armament_entry
+
+ if(gun_entry.contraband)
+ if(!(console_state == CARGO_CONSOLE))
+ continue
+ var/obj/machinery/computer/cargo/parent_console = parent
+ if(!parent_console.contraband)
+ continue
+
+ subcategory_items += list(list(
+ "ref" = REF(armament_entry),
+ "icon" = armament_entry.cached_base64,
+ "name" = armament_entry.name,
+ "cost" = armament_entry.cost,
+ "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE,
+ "magazine_cost" = armament_entry.magazine_cost,
+ "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0,
+ "description" = armament_entry.description,
+ "armament_category" = armament_entry.category,
+ "equipment_subcategory" = armament_entry.subcategory,
+ "restricted" = !!armament_entry.restricted,
+ ))
+
+ if(!LAZYLEN(subcategory_items))
+ continue
+
+ armament_subcategories += list(list(
+ "subcategory" = subcategory,
+ "items" = subcategory_items,
+ ))
+
+ if(!LAZYLEN(armament_subcategories))
+ continue
+
+ data["armaments_list"] += list(list(
+ "category" = armament_category,
+ "category_uses" = used_categories[armament_category],
+ "subcategories" = armament_subcategories,
+ ))
+
+ return data
+
+/datum/component/armament/company_imports/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "CargoImportConsole")
+ ui.open()
+
+/datum/component/armament/company_imports/select_armament(mob/user, datum/armament_entry/company_import/armament_entry)
+ var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
+ var/obj/item/modular_computer/possible_downloader
+ var/obj/machinery/computer/cargo/possible_console
+
+ if(console_state == CARGO_CONSOLE)
+ possible_console = parent
+
+ else if(console_state == IRN_CONSOLE)
+ possible_downloader = parent
+
+ if(!istype(armament_entry))
+ return
+
+ var/mob/living/carbon/human/the_person = user
+
+ if(istype(the_person))
+
+ var/obj/item/card/id/id_card
+
+ if(console_state == IRN_CONSOLE)
+ id_card = parent_prog.computer.computer_id_slot?.GetID()
+ else
+ id_card = the_person.get_idcard(TRUE)
+
+ if(id_card?.registered_account && (console_state == IRN_CONSOLE))
+ if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
+ parent_prog.requestonly = FALSE
+ buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
+ parent_prog.can_approve_requests = TRUE
+ else
+ parent_prog.requestonly = TRUE
+ parent_prog.can_approve_requests = FALSE
+ else
+ parent_prog?.requestonly = TRUE
+
+ if(self_paid)
+ if(!istype(id_card))
+ to_chat(user, span_warning("No ID card detected."))
+ return
+
+ if(istype(id_card, /obj/item/card/id/departmental_budget))
+ to_chat(user, span_warning("[id_card] cannot be used to make purchases."))
+ return
+
+ var/datum/bank_account/account = id_card.registered_account
+
+ if(!istype(account))
+ to_chat(user, span_warning("Invalid bank account."))
+ return
+
+ buyer = account
+
+ if(issilicon(user) && (console_state == IRN_CONSOLE))
+ parent_prog.can_approve_requests = TRUE
+ parent_prog.requestonly = FALSE
+
+ if(!buyer)
+ to_chat(user, span_warning("No budget found!"))
+ return
+
+ if(!ishuman(user) && !issilicon(user))
+ return
+
+ if(!buyer.has_money(armament_entry.cost))
+ to_chat(user, span_warning("Not enough money!"))
+ return
+
+ var/name
+
+ if(issilicon(user))
+ name = user.real_name
+ else
+ the_person.get_authentification_name()
+
+ var/reason = ""
+
+ if(possible_console)
+ if(possible_console.requestonly && !self_paid)
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+ else if(possible_downloader)
+ var/datum/computer_file/program/budgetorders/parent_file = parent_prog
+ if((parent_file.requestonly && !self_paid) || !(possible_downloader.computer_id_slot?.GetID()))
+ reason = tgui_input_text(user, "Reason", name)
+ if(isnull(reason))
+ return
+
+ used_categories[armament_entry.category]++
+
+ purchased_items[armament_entry]++
+
+ var/datum/supply_pack/armament/created_pack = new
+ created_pack.name = initial(armament_entry.item_type.name)
+ created_pack.cost = cost_calculate(armament_entry.cost) //Paid for seperately
+ created_pack.contains = list(armament_entry.item_type)
+
+ var/rank
+
+ if(issilicon(user))
+ rank = "Silicon"
+ else
+ rank = the_person.get_assignment(hand_first = TRUE)
+
+ var/ckey = user.ckey
+
+ var/datum/supply_order/company_import/created_order
+ if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR))
+ created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason, can_be_cancelled = TRUE)
+ else
+ created_pack.goody = FALSE // Cargo ordered stuff should just show up in a box I think
+ created_order = new(created_pack, name, rank, ckey, reason = reason, can_be_cancelled = TRUE)
+ created_order.selected_entry = armament_entry
+ created_order.used_component = src
+ if(console_state == CARGO_CONSOLE)
+ created_order.generateRequisition(get_turf(parent))
+ if(possible_console.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+ else if(console_state == IRN_CONSOLE)
+ var/datum/computer_file/program/budgetorders/comp_file = parent_prog
+ created_order.generateRequisition(get_turf(parent))
+ if(comp_file.requestonly && !self_paid)
+ SSshuttle.request_list += created_order
+ else
+ SSshuttle.shopping_list += created_order
+
+/datum/component/armament/company_imports/proc/cost_calculate(cost)
+ . = cost
+ . *= SSeconomy.pack_price_modifier
+
+/datum/component/armament/company_imports/ui_act(action, list/params)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("toggleprivate")
+ var/obj/item/card/id/id_card
+ var/mob/living/carbon/human/the_person = usr
+
+ if(!istype(the_person))
+ if(issilicon(the_person))
+ self_paid = FALSE
+ return
+
+ if(console_state == IRN_CONSOLE)
+ id_card = parent_prog.computer.computer_id_slot?.GetID()
+ else
+ id_card = the_person.get_idcard(TRUE)
+
+ if(!id_card)
+ return
+
+ self_paid = !self_paid
+
+#undef MAX_AMMO_AMOUNT
+#undef CARGO_CONSOLE
+#undef IRN_CONSOLE
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/_armament_basetype.dm b/modular_nova/modules/company_imports/code/armament_datums/_armament_basetype.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/_armament_basetype.dm
rename to modular_nova/modules/company_imports/code/armament_datums/_armament_basetype.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/akh_frontier.dm
rename to modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm b/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm
rename to modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/jarnsmiour.dm b/modular_nova/modules/company_imports/code/armament_datums/jarnsmiour.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/jarnsmiour.dm
rename to modular_nova/modules/company_imports/code/armament_datums/jarnsmiour.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/kahraman_industries.dm b/modular_nova/modules/company_imports/code/armament_datums/kahraman_industries.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/kahraman_industries.dm
rename to modular_nova/modules/company_imports/code/armament_datums/kahraman_industries.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm b/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/microstar_energy.dm
rename to modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nakamura_modsuits.dm b/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/nakamura_modsuits.dm
rename to modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm b/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/nri_military_surplus.dm
rename to modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm b/modular_nova/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm
rename to modular_nova/modules/company_imports/code/armament_datums/put_a_donk_on_it.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm b/modular_nova/modules/company_imports/code/armament_datums/sol_defense.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/armament_datums/sol_defense.dm
rename to modular_nova/modules/company_imports/code/armament_datums/sol_defense.dm
diff --git a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm b/modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm
similarity index 99%
rename from modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm
rename to modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm
index 12a456573e8..6626cd5c281 100644
--- a/modular_skyrat/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm
+++ b/modular_nova/modules/company_imports/code/armament_datums/vitezstvi_ammo.dm
@@ -157,7 +157,7 @@
item_type = /obj/item/ammo_box/advanced/s12gauge/antitide
/datum/armament_entry/company_import/vitezstvi/shot_shells/confetti
- item_type = /obj/item/ammo_box/advanced/s12gauge/honk
+ item_type = /obj/item/ammo_box/advanced/s12gauge/honkshot
// Boxes of kiboko launcher ammo
diff --git a/modular_skyrat/modules/company_imports/code/company_datums.dm b/modular_nova/modules/company_imports/code/company_datums.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/company_datums.dm
rename to modular_nova/modules/company_imports/code/company_datums.dm
diff --git a/modular_skyrat/modules/company_imports/code/datums/cargo_order.dm b/modular_nova/modules/company_imports/code/datums/cargo_order.dm
similarity index 92%
rename from modular_skyrat/modules/company_imports/code/datums/cargo_order.dm
rename to modular_nova/modules/company_imports/code/datums/cargo_order.dm
index f79599bc6e4..27ba74b73be 100644
--- a/modular_skyrat/modules/company_imports/code/datums/cargo_order.dm
+++ b/modular_nova/modules/company_imports/code/datums/cargo_order.dm
@@ -4,7 +4,7 @@
/// The component used to create the order
var/datum/component/armament/company_imports/used_component
-/datum/supply_order/company_import/Destroy(force, ...)
+/datum/supply_order/company_import/Destroy(force)
selected_entry = null
used_component = null
. = ..()
diff --git a/modular_skyrat/modules/company_imports/code/datums/cargo_pack.dm b/modular_nova/modules/company_imports/code/datums/cargo_pack.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/datums/cargo_pack.dm
rename to modular_nova/modules/company_imports/code/datums/cargo_pack.dm
diff --git a/modular_skyrat/modules/company_imports/code/datums/hud.dm b/modular_nova/modules/company_imports/code/datums/hud.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/datums/hud.dm
rename to modular_nova/modules/company_imports/code/datums/hud.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/access.dm b/modular_nova/modules/company_imports/code/objects/access.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/access.dm
rename to modular_nova/modules/company_imports/code/objects/access.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm b/modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm
similarity index 90%
rename from modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm
rename to modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm
index b7584a65652..6b49b5b5580 100644
--- a/modular_skyrat/modules/company_imports/code/objects/cargo_console_and_case.dm
+++ b/modular_nova/modules/company_imports/code/objects/cargo_console_and_case.dm
@@ -14,4 +14,4 @@
/obj/structure/closet/crate/large/import
name = "heavy-duty wooden crate"
- icon = 'modular_skyrat/modules/company_imports/icons/import_crate.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/import_crate.dmi'
diff --git a/modular_skyrat/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm b/modular_nova/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm
rename to modular_nova/modules/company_imports/code/objects/deforest/filled_organ_boxes.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/donk/donkfish_box.dm b/modular_nova/modules/company_imports/code/objects/donk/donkfish_box.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/donk/donkfish_box.dm
rename to modular_nova/modules/company_imports/code/objects/donk/donkfish_box.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/firing_pin.dm b/modular_nova/modules/company_imports/code/objects/firing_pin.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/firing_pin.dm
rename to modular_nova/modules/company_imports/code/objects/firing_pin.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm b/modular_nova/modules/company_imports/code/objects/hud_glasses.dm
similarity index 87%
rename from modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm
rename to modular_nova/modules/company_imports/code/objects/hud_glasses.dm
index 0793a3cca8e..2f2a3a0cce5 100644
--- a/modular_skyrat/modules/company_imports/code/objects/hud_glasses.dm
+++ b/modular_nova/modules/company_imports/code/objects/hud_glasses.dm
@@ -1,8 +1,8 @@
/obj/item/clothing/glasses/hud/gun_permit
name = "permit HUD"
desc = "A heads-up display that scans humanoids in view, and displays if their current ID possesses a firearms permit or not."
- icon = 'modular_skyrat/modules/company_imports/icons/hud_goggles.dmi'
- worn_icon = 'modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/hud_goggles.dmi'
+ worn_icon = 'modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi'
icon_state = "permithud"
hud_type = DATA_HUD_PERMIT
diff --git a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm b/modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm
similarity index 92%
rename from modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm
rename to modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm
index 8217760007f..074b5d688b0 100644
--- a/modular_skyrat/modules/company_imports/code/objects/jarnsmiour/special_metals.dm
+++ b/modular_nova/modules/company_imports/code/objects/jarnsmiour/special_metals.dm
@@ -18,7 +18,7 @@
name = "cobolterium bars"
desc = "Cobalt-blue metal that might actually just be cobalt."
singular_name = "cobolterium bar"
- icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi'
icon_state = "dracula-rapping"
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
mats_per_unit = list(/datum/material/cobolterium = SHEET_MATERIAL_AMOUNT)
@@ -47,7 +47,7 @@
name = "copporcitite bars"
desc = "Copper colored metal that might actually just be copper."
singular_name = "copporcitite bar"
- icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi'
icon_state = "dracula-rapping"
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
mats_per_unit = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT)
@@ -76,7 +76,7 @@
name = "tinumium bars"
desc = "Heavily blued, silver colored metal."
singular_name = "tinumium bar"
- icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi'
icon_state = "dracula-rapping"
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
mats_per_unit = list(/datum/material/tinumium = SHEET_MATERIAL_AMOUNT )
@@ -105,7 +105,7 @@
name = "brussite bars"
desc = "Brassy-yellow metal that might actually just be brass."
singular_name = "brussite bar"
- icon = 'modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/special_metals_stack.dmi'
icon_state = "dracula-rapping"
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
mats_per_unit = list(/datum/material/brussite = SHEET_MATERIAL_AMOUNT )
diff --git a/modular_skyrat/modules/company_imports/code/objects/keycard_auth.dm b/modular_nova/modules/company_imports/code/objects/keycard_auth.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/keycard_auth.dm
rename to modular_nova/modules/company_imports/code/objects/keycard_auth.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm b/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm
rename to modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm b/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm
rename to modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm b/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm
similarity index 100%
rename from modular_skyrat/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm
rename to modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm
diff --git a/modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm
similarity index 94%
rename from modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm
rename to modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm
index fe9de9ee549..35b057ecbb7 100644
--- a/modular_skyrat/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm
+++ b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm
@@ -42,7 +42,7 @@
/obj/item/ammo_box/c46x30mm
name = "ammo box (4.6x30mm)"
- icon = 'modular_skyrat/modules/company_imports/icons/ammo.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/ammo.dmi'
icon_state = "ammo_46"
ammo_type = /obj/item/ammo_casing/c46x30mm
max_ammo = 20
@@ -57,7 +57,7 @@
/obj/item/ammo_box/c34
name = "ammo box (.34)"
- icon = 'modular_skyrat/modules/company_imports/icons/ammo.dmi'
+ icon = 'modular_nova/modules/company_imports/icons/ammo.dmi'
icon_state = "ammo_34"
ammo_type = /obj/item/ammo_casing/c34
max_ammo = 20
diff --git a/modular_nova/modules/company_imports/code/readme.md b/modular_nova/modules/company_imports/code/readme.md
new file mode 100644
index 00000000000..50274ac2b32
--- /dev/null
+++ b/modular_nova/modules/company_imports/code/readme.md
@@ -0,0 +1,25 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/
+
+## \
+
+Module ID:
+
+### Description:
+
+### TG Proc/File Changes:
+
+- N/A
+
+### Modular Overrides:
+
+- `modular_nova/master_files/code/modules/cargo/orderconsole.dm`: `proc/ui_act`
+
+### Defines:
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
diff --git a/modular_skyrat/modules/company_imports/icons/ammo.dmi b/modular_nova/modules/company_imports/icons/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/company_imports/icons/ammo.dmi
rename to modular_nova/modules/company_imports/icons/ammo.dmi
diff --git a/modular_skyrat/modules/company_imports/icons/hud_goggles.dmi b/modular_nova/modules/company_imports/icons/hud_goggles.dmi
similarity index 100%
rename from modular_skyrat/modules/company_imports/icons/hud_goggles.dmi
rename to modular_nova/modules/company_imports/icons/hud_goggles.dmi
diff --git a/modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi b/modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/company_imports/icons/hud_goggles_worn.dmi
rename to modular_nova/modules/company_imports/icons/hud_goggles_worn.dmi
diff --git a/modular_skyrat/modules/company_imports/icons/import_crate.dmi b/modular_nova/modules/company_imports/icons/import_crate.dmi
similarity index 100%
rename from modular_skyrat/modules/company_imports/icons/import_crate.dmi
rename to modular_nova/modules/company_imports/icons/import_crate.dmi
diff --git a/modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi b/modular_nova/modules/company_imports/icons/special_metals_stack.dmi
similarity index 100%
rename from modular_skyrat/modules/company_imports/icons/special_metals_stack.dmi
rename to modular_nova/modules/company_imports/icons/special_metals_stack.dmi
diff --git a/modular_skyrat/modules/connecting_computer/code/_computer.dm b/modular_nova/modules/connecting_computer/code/_computer.dm
similarity index 100%
rename from modular_skyrat/modules/connecting_computer/code/_computer.dm
rename to modular_nova/modules/connecting_computer/code/_computer.dm
diff --git a/modular_skyrat/modules/connecting_computer/code/connectable_component.dm b/modular_nova/modules/connecting_computer/code/connectable_component.dm
similarity index 96%
rename from modular_skyrat/modules/connecting_computer/code/connectable_component.dm
rename to modular_nova/modules/connecting_computer/code/connectable_component.dm
index 58b5de0e019..c9304f73196 100644
--- a/modular_skyrat/modules/connecting_computer/code/connectable_component.dm
+++ b/modular_nova/modules/connecting_computer/code/connectable_component.dm
@@ -2,7 +2,7 @@
* If attached to a machine, adds the connectable computer overlays and smooths to other computers.
*/
/datum/component/connectable_computer
- var/icon/overlay_icon = 'modular_skyrat/modules/connecting_computer/icons/connectors.dmi'
+ var/icon/overlay_icon = 'modular_nova/modules/connecting_computer/icons/connectors.dmi'
/datum/component/connectable_computer/Initialize()
if(!ismachinery(parent))
diff --git a/modular_skyrat/modules/connecting_computer/code/non_connecting_computers.dm b/modular_nova/modules/connecting_computer/code/non_connecting_computers.dm
similarity index 100%
rename from modular_skyrat/modules/connecting_computer/code/non_connecting_computers.dm
rename to modular_nova/modules/connecting_computer/code/non_connecting_computers.dm
diff --git a/modular_skyrat/modules/connecting_computer/icons/connectors.dmi b/modular_nova/modules/connecting_computer/icons/connectors.dmi
similarity index 100%
rename from modular_skyrat/modules/connecting_computer/icons/connectors.dmi
rename to modular_nova/modules/connecting_computer/icons/connectors.dmi
diff --git a/modular_skyrat/modules/connecting_computer/readme.md b/modular_nova/modules/connecting_computer/readme.md
similarity index 100%
rename from modular_skyrat/modules/connecting_computer/readme.md
rename to modular_nova/modules/connecting_computer/readme.md
diff --git a/modular_skyrat/modules/container_emotes/code/container_emotes.dm b/modular_nova/modules/container_emotes/code/container_emotes.dm
similarity index 100%
rename from modular_skyrat/modules/container_emotes/code/container_emotes.dm
rename to modular_nova/modules/container_emotes/code/container_emotes.dm
diff --git a/modular_skyrat/modules/container_emotes/readme.md b/modular_nova/modules/container_emotes/readme.md
similarity index 100%
rename from modular_skyrat/modules/container_emotes/readme.md
rename to modular_nova/modules/container_emotes/readme.md
diff --git a/modular_nova/modules/contractor/code/datums/contract.dm b/modular_nova/modules/contractor/code/datums/contract.dm
new file mode 100644
index 00000000000..f23ac142569
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/contract.dm
@@ -0,0 +1,135 @@
+/// They're off to holding - handle the return timer and give some text about what's going on.
+/datum/syndicate_contract/handle_victim_experience(mob/living/target)
+ // Ship 'em back - dead or alive, 4 minutes wait.
+ // Even if they weren't the target, we're still treating them the same.
+ addtimer(CALLBACK(src, PROC_REF(return_victim), target), 4 MINUTES)
+
+ if (target.stat == DEAD)
+ return
+ // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a
+ // method of healing them, consequence free, to a reasonable amount of health.
+ victim_stage_one(target)
+
+/// Adds omnizine and begins the victim handling
+/datum/syndicate_contract/proc/victim_stage_one(mob/living/target)
+ target.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20)
+
+ target.flash_act()
+ target.adjust_confusion(10 SECONDS)
+ target.set_eye_blur_if_lower(10 SECONDS)
+ to_chat(target, span_warning("You feel strange..."))
+ addtimer(CALLBACK(src, PROC_REF(victim_stage_two), target), 6 SECONDS)
+
+/// Continued victim handling
+/datum/syndicate_contract/proc/victim_stage_two(mob/living/target)
+ var/list/parts_to_fuck_up = list(
+ BODY_ZONE_L_ARM,
+ BODY_ZONE_R_ARM,
+ BODY_ZONE_L_LEG,
+ BODY_ZONE_R_LEG,
+ )
+
+ to_chat(target, span_warning("That pod did something to you..."))
+ target.set_dizzy(70 SECONDS)
+
+ for(var/i in 1 to 2)
+ var/obj/item/bodypart/limb = target.get_bodypart(pick_n_take(parts_to_fuck_up))
+ var/min_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_SEVERE, return_value_if_no_wound = 40)
+ var/max_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_CRITICAL, return_value_if_no_wound = 60)
+ limb.receive_damage(brute = WOUND_MINIMUM_DAMAGE, wound_bonus = rand(min_wound, max_wound))
+ target.update_damage_overlays()
+
+ addtimer(CALLBACK(src, PROC_REF(victim_stage_three), target), 6 SECONDS)
+
+/// Continued victim handling, flashes them as well
+/datum/syndicate_contract/proc/victim_stage_three(mob/living/target)
+ to_chat(target, span_warning("Your head pounds... It feels like it's going to burst out your skull!"))
+ target.flash_act()
+ target.adjust_confusion(20 SECONDS)
+ target.set_eye_blur_if_lower(6 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(victim_stage_four), target), 3 SECONDS)
+
+/// Continued victim handling
+/datum/syndicate_contract/proc/victim_stage_four(mob/living/target)
+ to_chat(target, span_warning("Your head pounds..."))
+
+ if(iscarbon(target))
+ var/mob/living/carbon/carbon_target = target
+ switch(rand(1, 100))
+ if(1 to 45)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
+
+ if(46 to 73)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
+
+ if(74 to 94)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
+
+ if(75 to 100)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
+ carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
+
+ addtimer(CALLBACK(src, PROC_REF(victim_stage_five), target), 10 SECONDS)
+
+/// Continued victim handling, some unconsciousness
+/datum/syndicate_contract/proc/victim_stage_five(mob/living/target)
+ target.flash_act()
+ target.Unconscious(200)
+ to_chat(target, span_hypnophrase(span_reallybig("A million voices echo in your head... \"Your mind held many valuable secrets - \
+ we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \
+ so it's only a matter of time before we ship you back...\" ")))
+ target.set_eye_blur_if_lower(20 SECONDS)
+ target.set_dizzy_if_lower(30 SECONDS)
+ target.adjust_confusion(20 SECONDS)
+
+/// We're returning the victim
+/datum/syndicate_contract/return_victim(mob/living/target)
+ var/list/possible_drop_loc = list()
+
+ for(var/turf/possible_drop in contract.dropoff.contents)
+ if(is_safe_turf(possible_drop))
+ possible_drop_loc += possible_drop
+ if(!length(possible_drop_loc)) //Prioritize safe tiles first, then unsafe
+ for(var/turf/open/possible_unsafe_drop in contract.dropoff.contents)
+ possible_drop_loc += possible_unsafe_drop
+
+ if (length(possible_drop_loc))
+ var/pod_rand_loc = rand(1, length(possible_drop_loc))
+
+ var/obj/structure/closet/supplypod/return_pod = new()
+ return_pod.bluespace = TRUE
+ return_pod.explosionSize = list(0,0,0,0)
+ return_pod.style = STYLE_SYNDICATE
+
+ do_sparks(8, FALSE, target)
+ target.visible_message(span_notice("[target] vanishes..."))
+
+ for(var/obj/item/target_item as anything in target)
+ if(ishuman(target))
+ var/mob/living/carbon/human/human_target = target
+ if(target_item == human_target.w_uniform)
+ continue //So all they're left with are shoes and uniform.
+ if(target_item == human_target.shoes)
+ continue
+ target.dropItemToGround(target_item)
+
+ for(var/obj/item/target_item as anything in victim_belongings)
+ target_item.forceMove(return_pod)
+
+ target.forceMove(return_pod)
+
+ target.flash_act()
+ target.set_eye_blur_if_lower(60 SECONDS)
+ target.set_dizzy_if_lower(70 SECONDS)
+ target.adjust_confusion(20 SECONDS)
+
+ new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod)
+ else
+ to_chat(target, span_reallybig(span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \
+ be able to handle our pod... You will die here instead.\" ")))
+ if(!isliving(target))
+ return
+ var/mob/living/unlucky_fellow = target
+ unlucky_fellow.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS)
+ unlucky_fellow.death()
diff --git a/modular_nova/modules/contractor/code/datums/contractor_datum.dm b/modular_nova/modules/contractor/code/datums/contractor_datum.dm
new file mode 100644
index 00000000000..1e7552c842b
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/contractor_datum.dm
@@ -0,0 +1,32 @@
+/// End-round generation proc
+/datum/opposing_force/proc/contractor_round_end()
+ var/result = ""
+ var/total_spent_rep = 0
+
+ var/completed_contracts = contractor_hub.contracts_completed
+ var/tc_total = contractor_hub.contract_TC_payed_out + contractor_hub.contract_TC_to_redeem
+
+ var/contractor_item_icons = "" // Icons of purchases
+ var/datum/antagonist/traitor/contractor_support/contractor_support_unit = contractor_hub.contractor_teammate // Set if they had a support unit
+
+ // Get all the icons/total cost for all our items bought
+ for (var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items)
+ contractor_item_icons += "\[ [contractor_purchase.name] - [contractor_purchase.cost] Rep [contractor_purchase.desc] \] "
+
+ total_spent_rep += contractor_purchase.cost
+
+ if (length(contractor_hub.purchased_items))
+ result += " (used [total_spent_rep] Rep) "
+ result += contractor_item_icons
+ result += " "
+ if (completed_contracts > 0)
+ var/plural_check = "contract[completed_contracts > 1 ? "s" : ""]"
+
+ result += "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of \
+ [span_greentext("[tc_total] TC")]! "
+
+ if(contractor_support_unit)
+ var/datum/mind/partner = contractor_support_unit.owner
+ result += "[partner.key] played [partner.current.name] , [partner.current.p_their()] contractor support unit. "
+
+ return result
diff --git a/modular_nova/modules/contractor/code/datums/contractor_hub.dm b/modular_nova/modules/contractor/code/datums/contractor_hub.dm
new file mode 100644
index 00000000000..9d3490df071
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/contractor_hub.dm
@@ -0,0 +1,27 @@
+/datum/contractor_hub
+ /// How much reputation the contractor has
+ var/contract_rep = 0
+ /// What contractor items can be purchased
+ var/list/hub_items = list()
+ /// List of what the contractor's purchased
+ var/list/purchased_items = list()
+ /// Static of contractor_item subtypes
+ var/static/list/contractor_items = typecacheof(/datum/contractor_item, ignore_root_path = TRUE)
+ /// Current index number for contract IDs
+ var/start_index = 1
+
+/// Generates a list of all valid hub items to set for purchase
+/datum/contractor_hub/proc/create_hub_items()
+ for(var/path in contractor_items)
+ var/datum/contractor_item/contractor_item = new path
+
+ hub_items.Add(contractor_item)
+
+/datum/contractor_hub/proc/create_single_contract(datum/mind/owner, contract_payout_tier)
+ var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, contract_payout_tier)
+
+ assigned_targets.Add(contract_to_add.contract.target)
+
+ contract_to_add.id = start_index
+ assigned_contracts.Add(contract_to_add)
+ start_index++
diff --git a/modular_nova/modules/contractor/code/datums/contractor_items.dm b/modular_nova/modules/contractor/code/datums/contractor_items.dm
new file mode 100644
index 00000000000..386a306ca07
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/contractor_items.dm
@@ -0,0 +1,199 @@
+/datum/contractor_item
+ /// Name of the item datum
+ var/name
+ /// Description of the item datum
+ var/desc
+ /// Item path to spawn, no item path means you need to override `handle_purchase()`
+ var/item
+ /// fontawesome icon to use inside the hub - https://fontawesome.com/icons/
+ var/item_icon = "broadcast-tower"
+ /// Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited.
+ var/limited = -1
+ /// Cost of the item in contract rep.
+ var/cost
+
+/// Subtract cost, and spawn if it's an item.
+/datum/contractor_item/proc/handle_purchase(datum/contractor_hub/hub, mob/living/user)
+
+ if(hub.contract_rep >= cost)
+ hub.contract_rep -= cost
+ else
+ return FALSE
+
+ if(limited >= 1)
+ limited -= 1
+ else
+ return FALSE
+
+ hub.purchased_items.Add(src)
+
+ user.playsound_local(user, 'sound/machines/uplinkpurchase.ogg', 100)
+
+ if(item)
+ var/atom/item_to_create = new item(get_turf(user))
+ if(user.put_in_hands(item_to_create))
+ to_chat(user, span_notice("Your purchase materializes into your hands!"))
+ else
+ to_chat(user, span_notice("Your purchase materializes onto the floor."))
+
+ return TRUE
+
+/datum/contractor_item/contract_reroll
+ name = "Contract Reroll"
+ desc = "Request a reroll of your current contract list. Will generate a new target, payment, and dropoff for the contracts you currently have available."
+ item_icon = "dice"
+ limited = 3
+ cost = 0
+
+/datum/contractor_item/contract_reroll/handle_purchase(datum/contractor_hub/hub)
+ . = ..()
+
+ if(!(.))
+ return
+ // We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets.
+ var/list/new_target_list = list()
+ for(var/datum/syndicate_contract/contract_check as anything in hub.assigned_contracts)
+ if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE)
+ if (contract_check.contract.target)
+ new_target_list.Add(contract_check.contract.target)
+ continue
+
+ // Reroll contracts without duplicates
+ for(var/datum/syndicate_contract/rerolling_contract as anything in hub.assigned_contracts)
+ if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE)
+ continue
+
+ rerolling_contract.generate(new_target_list)
+ new_target_list.Add(rerolling_contract.contract.target)
+
+ // Set our target list with the new set we've generated.
+ hub.assigned_targets = new_target_list
+
+/datum/contractor_item/contractor_pinpointer
+ name = "Contractor Pinpointer"
+ desc = "A pinpointer that finds targets even without active suit sensors. Due to taking advantage of an exploit within the system, it can't pinpoint to the same accuracy as the traditional models. Becomes permanently locked to the user that first activates it."
+ item = /obj/item/pinpointer/crew/contractor
+ item_icon = "search-location"
+ limited = 2
+ cost = 1
+
+/datum/contractor_item/fulton_extraction_kit
+ name = "Fulton Extraction Kit"
+ desc = "For getting your target across the station to those difficult dropoffs. Place the beacon somewhere secure, and link the pack. Activating the pack on your target will send them over to the beacon - make sure they're not just going to run away though!"
+ item = /obj/item/storage/box/contractor/fulton_extraction
+ item_icon = "parachute-box"
+ limited = 1
+ cost = 1
+
+/datum/contractor_item/contractor_partner
+ name = "Reinforcements"
+ desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, we'll send them down to assist you immediately. If no units are free, we give a full refund."
+ item_icon = "user-friends"
+ limited = 1
+ cost = 2
+
+/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user)
+ . = ..()
+
+ if(!.)
+ return
+ to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents..."))
+
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
+ "Do you want to play as the Contractor Support Unit for [user.real_name]?",
+ role = ROLE_PAI,
+ check_jobban = FALSE,
+ poll_time = 10 SECONDS,
+ ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT,
+ pic_source = user,
+ role_name_text = "[user.real_name]'s support",
+ )
+
+ if(LAZYLEN(candidates))
+ var/mob/dead/observer/picked_obs = pick(candidates)
+ hub.contractor_teammate = spawn_contractor_partner(user, picked_obs.key)
+ else
+ to_chat(user, span_notice("No available agents at this time, please try again later."))
+
+ // refund and add the limit back.
+ limited += 1
+ hub.contract_rep += cost
+ hub.purchased_items -= src
+
+/datum/contractor_item/blackout
+ name = "Blackout"
+ desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration."
+ item_icon = "bolt"
+ limited = 2
+ cost = 2
+
+/datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub)
+ . = ..()
+
+ if(!.)
+ return
+ power_fail(35, 50)
+ priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", ANNOUNCER_POWEROFF)
+
+/datum/contractor_item/comms_blackout
+ name = "Comms Outage"
+ desc = "Request Syndicate Command to disable station Telecommunications. Disables telecommunications across the station for a medium duration."
+ item_icon = "phone-slash"
+ limited = 2
+ cost = 2
+
+/datum/contractor_item/comms_blackout/handle_purchase(datum/contractor_hub/hub)
+ . = ..()
+
+ if(!.)
+ return
+ var/datum/round_event_control/event = locate(/datum/round_event_control/communications_blackout) in SSevents.control
+ event.run_event()
+
+/datum/contractor_item/mod_baton_holster
+ name = "Baton Holster Module"
+ desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped."
+ item = /obj/item/mod/module/baton_holster
+ item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting
+ limited = 1
+ cost = 2
+
+/datum/contractor_item/baton_upgrade_cuff
+ name = "Baton Cuff Upgrade"
+ desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually."
+ item = /obj/item/baton_upgrade/cuff
+ item_icon = "bacon" //ditto
+ limited = 1
+ cost = 1
+
+/datum/contractor_item/baton_upgrade_mute
+ name = "Baton Mute Upgrade"
+ desc = "A relatively new advancement in completely proprietary baton technology, this baton upgrade will mute anyone hit for ten seconds, maximizing at twenty seconds."
+ item = /obj/item/baton_upgrade/mute
+ item_icon = "comment-slash"
+ limited = 1
+ cost = 2
+
+/datum/contractor_item/baton_upgrade_focus
+ name = "Baton Focus Upgrade"
+ desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract."
+ item = /obj/item/baton_upgrade/focus
+ item_icon = "eye"
+ limited = 1
+ cost = 2
+
+/datum/contractor_item/mod_magnetic_suit
+ name = "Magnetic Deployment Module"
+ desc = "A module that utilizes magnets to largely reduce the time needed to deploy and retract your MODsuit."
+ item = /obj/item/mod/module/springlock/contractor
+ item_icon = "magnet"
+ limited = 1
+ cost = 2
+
+/datum/contractor_item/mod_scorpion_hook
+ name = "SCORPION Hook Module"
+ desc = "A module that allows you to launch a hardlight hook from your MODsuit, pulling a target into range of your baton."
+ item = /obj/item/mod/module/scorpion_hook
+ item_icon = "arrow-left" //replace if fontawesome gets an actual hook icon
+ limited = 1
+ cost = 3
diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_support.dm b/modular_nova/modules/contractor/code/datums/contractor_support.dm
similarity index 100%
rename from modular_skyrat/modules/contractor/code/datums/contractor_support.dm
rename to modular_nova/modules/contractor/code/datums/contractor_support.dm
diff --git a/modular_nova/modules/contractor/code/datums/contractor_tablet.dm b/modular_nova/modules/contractor/code/datums/contractor_tablet.dm
new file mode 100644
index 00000000000..5ade585a78d
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/contractor_tablet.dm
@@ -0,0 +1,8 @@
+/datum/computer_file/program/contract_uplink
+ downloader_category = PROGRAM_CATEGORY_EQUIPMENT
+ tgui_id = "SyndContractor"
+ /// If the contract uplink's been assigned to a person yet
+ var/assigned = FALSE
+
+/datum/computer_file/program/contract_uplink/on_start(mob/living/user)
+ . = ..(user)
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm
similarity index 83%
rename from modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm
rename to modular_nova/modules/contractor/code/datums/midround/antag_datum.dm
index 3c7fbeb2a21..2312a051f71 100644
--- a/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm
+++ b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm
@@ -4,7 +4,7 @@
antagpanel_category = "DriftingContractor"
preview_outfit = /datum/outfit/contractor_preview
job_rank = ROLE_DRIFTING_CONTRACTOR
- hud_icon = 'modular_skyrat/modules/contractor/icons/hud_icon.dmi'
+ hud_icon = 'modular_nova/modules/contractor/icons/hud_icon.dmi'
antag_hud_name = "contractor"
antagpanel_category = ANTAG_GROUP_SYNDICATE
antag_moodlet = /datum/mood_event/focused
@@ -17,7 +17,11 @@
if(!ishuman(owner.current))
return
var/mob/living/carbon/human/person = owner.current
- person.equipOutfit(contractor_outfit)
+ var/datum/outfit/outfit_to_apply = new contractor_outfit
+ if(person.jumpsuit_style == PREF_SKIRT)
+ outfit_to_apply.uniform = /obj/item/clothing/under/syndicate/skyrat/tactical/skirt
+ person.equipOutfit(outfit_to_apply)
+ SSquirks.AssignQuirks(person, person.client)
return TRUE
/datum/antagonist/contractor/on_gain()
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/event.dm b/modular_nova/modules/contractor/code/datums/midround/event.dm
similarity index 84%
rename from modular_skyrat/modules/contractor/code/datums/midround/event.dm
rename to modular_nova/modules/contractor/code/datums/midround/event.dm
index d90a2b90dff..7f2bf794b6d 100644
--- a/modular_skyrat/modules/contractor/code/datums/midround/event.dm
+++ b/modular_nova/modules/contractor/code/datums/midround/event.dm
@@ -12,7 +12,12 @@
fakeable = FALSE
/datum/round_event/ghost_role/contractor/spawn_role()
- var/list/candidates = get_candidates(ROLE_DRIFTING_CONTRACTOR)
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ check_jobban = ROLE_DRIFTING_CONTRACTOR,
+ role = ROLE_DRIFTING_CONTRACTOR,
+ pic_source = /obj/item/melee/baton/telescopic/contractor_baton,
+ role_name_text = "drifting contractor",
+ )
if(!length(candidates))
return NOT_ENOUGH_PLAYERS
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/objective.dm b/modular_nova/modules/contractor/code/datums/midround/objective.dm
similarity index 100%
rename from modular_skyrat/modules/contractor/code/datums/midround/objective.dm
rename to modular_nova/modules/contractor/code/datums/midround/objective.dm
diff --git a/modular_nova/modules/contractor/code/datums/midround/outfit.dm b/modular_nova/modules/contractor/code/datums/midround/outfit.dm
new file mode 100644
index 00000000000..9aea6516987
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/midround/outfit.dm
@@ -0,0 +1,39 @@
+/datum/outfit/contractor
+ name = "Syndicate Contractor - Full Kit"
+
+ glasses = /obj/item/clothing/glasses/night
+ mask = /obj/item/clothing/mask/gas/sechailer/syndicate
+ back = /obj/item/mod/control/pre_equipped/contractor/upgraded
+ r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
+ internals_slot = ITEM_SLOT_RPOCKET
+ belt = /obj/item/storage/belt/military
+
+ uniform = /obj/item/clothing/under/syndicate/skyrat/tactical
+ shoes = /obj/item/clothing/shoes/combat
+ gloves = /obj/item/clothing/gloves/combat
+ ears = /obj/item/radio/headset/syndicate/alt
+ l_pocket = /obj/item/modular_computer/pda/contractor
+ id = /obj/item/card/id/advanced/chameleon
+ backpack_contents = list(
+ /obj/item/storage/box/survival/syndie,
+ /obj/item/storage/box/syndicate/contract_kit/midround,
+ /obj/item/knife/combat/survival,
+ /obj/item/pinpointer/crew/contractor,
+ )
+
+ implants = list(
+ /obj/item/implant/uplink,
+ )
+
+ id_trim = /datum/id_trim/chameleon/contractor
+
+/datum/outfit/contractor_preview
+ name = "Syndicate Contractor (Preview only)"
+
+ back = /obj/item/mod/control/pre_equipped/empty/contractor
+ uniform = /obj/item/clothing/under/syndicate
+ glasses = /obj/item/clothing/glasses/night
+
+/datum/outfit/contractor/upgraded
+ name = "Syndicate Contractor (Upgraded)"
+ back = /obj/item/mod/control/pre_equipped/contractor/upgraded/adminbus
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/ruleset.dm b/modular_nova/modules/contractor/code/datums/midround/ruleset.dm
similarity index 100%
rename from modular_skyrat/modules/contractor/code/datums/midround/ruleset.dm
rename to modular_nova/modules/contractor/code/datums/midround/ruleset.dm
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/trim.dm b/modular_nova/modules/contractor/code/datums/midround/trim.dm
similarity index 81%
rename from modular_skyrat/modules/contractor/code/datums/midround/trim.dm
rename to modular_nova/modules/contractor/code/datums/midround/trim.dm
index 8fbf98912e2..4d6b36c6aeb 100644
--- a/modular_skyrat/modules/contractor/code/datums/midround/trim.dm
+++ b/modular_nova/modules/contractor/code/datums/midround/trim.dm
@@ -2,6 +2,6 @@
/datum/id_trim/chameleon/contractor
assignment = "Syndicate Contractor"
trim_state = "trim_contractor"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
department_color = COLOR_ORANGE
subdepartment_color = COLOR_ORANGE
diff --git a/modular_nova/modules/contractor/code/datums/mind_datum.dm b/modular_nova/modules/contractor/code/datums/mind_datum.dm
new file mode 100644
index 00000000000..d95e6e524fa
--- /dev/null
+++ b/modular_nova/modules/contractor/code/datums/mind_datum.dm
@@ -0,0 +1,5 @@
+/datum/mind/proc/make_contractor_support()
+ var/contractor_support_datum = has_antag_datum(/datum/antagonist/traitor/contractor_support)
+ if(contractor_support_datum)
+ return contractor_support_datum
+ return add_antag_datum(/datum/antagonist/traitor/contractor_support)
diff --git a/modular_skyrat/modules/contractor/code/datums/objective.dm b/modular_nova/modules/contractor/code/datums/objective.dm
similarity index 100%
rename from modular_skyrat/modules/contractor/code/datums/objective.dm
rename to modular_nova/modules/contractor/code/datums/objective.dm
diff --git a/modular_skyrat/modules/contractor/code/items/baton.dm b/modular_nova/modules/contractor/code/items/baton.dm
similarity index 98%
rename from modular_skyrat/modules/contractor/code/items/baton.dm
rename to modular_nova/modules/contractor/code/items/baton.dm
index d73972482db..b6258417477 100644
--- a/modular_skyrat/modules/contractor/code/items/baton.dm
+++ b/modular_nova/modules/contractor/code/items/baton.dm
@@ -81,7 +81,7 @@
return
/obj/item/baton_upgrade
- icon = 'modular_skyrat/modules/contractor/icons/baton_upgrades.dmi'
+ icon = 'modular_nova/modules/contractor/icons/baton_upgrades.dmi'
var/upgrade_flag
/obj/item/baton_upgrade/cuff
diff --git a/modular_nova/modules/contractor/code/items/boxes.dm b/modular_nova/modules/contractor/code/items/boxes.dm
new file mode 100644
index 00000000000..4a3f3775099
--- /dev/null
+++ b/modular_nova/modules/contractor/code/items/boxes.dm
@@ -0,0 +1,66 @@
+#define SMALL_ITEM_AMOUNT 3
+
+/obj/item/storage/box/syndicate/contract_kit
+ desc = "It's just an ordinary box."
+ special_desc = "Supplied to Syndicate contractors."
+ special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
+ /// Extra items to insert modularly into the list of random small item candidates
+ var/static/list/modular_item_list = list(
+ /obj/item/crowbar/power/syndicate,
+ /obj/item/clothing/gloves/tackler/combat/insulated,
+ /obj/item/storage/box/syndie_kit/emp,
+ /obj/item/radio/headset/chameleon/advanced,
+ /obj/item/shield/energy,
+ /obj/item/healthanalyzer/rad_laser
+ )
+
+/obj/item/storage/box/syndicate/contractor_loadout
+ desc = "It's just an ordinary box."
+ special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
+ special_desc = "Supplied to Syndicate contractors, providing their specialised MODSuit and chameleon uniform."
+
+/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents()
+ new /obj/item/mod/control/pre_equipped/contractor(src)
+ . = ..() // so their MODSuit is first
+ new /obj/item/uplink/old_radio(src)
+ new /obj/item/jammer(src)
+
+/obj/item/storage/box/contractor/fulton_extraction/PopulateContents()
+ new /obj/item/extraction_pack/contractor(src)
+ new /obj/item/fulton_core(src)
+
+/obj/item/storage/box/syndicate/contract_kit/midround/PopulateContents()
+ var/static/list/item_list = list(
+ /obj/item/storage/backpack/duffelbag/syndie/x4,
+ /obj/item/storage/box/syndie_kit/throwing_weapons,
+ /obj/item/gun/syringe/syndicate,
+ /obj/item/pen/edagger,
+ /obj/item/pen/sleepy,
+ /obj/item/flashlight/emp,
+ /obj/item/reagent_containers/syringe/mulligan,
+ /obj/item/storage/medkit/tactical,
+ /obj/item/clothing/glasses/thermal/syndi,
+ /obj/item/slimepotion/slime/sentience/nuclear,
+ /obj/item/storage/box/syndie_kit/imp_radio,
+ /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot,
+ /obj/item/reagent_containers/hypospray/medipen/stimulants,
+ /obj/item/storage/box/syndie_kit/imp_freedom,
+ /obj/item/crowbar/power/syndicate,
+ /obj/item/clothing/gloves/tackler/combat/insulated,
+ /obj/item/storage/box/syndie_kit/emp,
+ /obj/item/shield/energy,
+ /obj/item/healthanalyzer/rad_laser,
+ )
+ // All about 4 TC or less - some nukeops only items, but fit nicely to the theme.
+ for(var/iteration in 1 to SMALL_ITEM_AMOUNT)
+ var/obj/item/small_item = pick_n_take(item_list)
+ new small_item(src)
+
+ // Paper guide
+ new /obj/item/paper/contractor_guide/midround(src)
+ new /obj/item/reagent_containers/hypospray/medipen/atropine(src)
+ new /obj/item/jammer(src)
+ new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
+ new /obj/item/lighter(src)
+
+#undef SMALL_ITEM_AMOUNT
diff --git a/modular_skyrat/modules/contractor/code/items/hook.dm b/modular_nova/modules/contractor/code/items/hook.dm
similarity index 75%
rename from modular_skyrat/modules/contractor/code/items/hook.dm
rename to modular_nova/modules/contractor/code/items/hook.dm
index a3c59314b25..8c5e0218f7a 100644
--- a/modular_skyrat/modules/contractor/code/items/hook.dm
+++ b/modular_nova/modules/contractor/code/items/hook.dm
@@ -1,7 +1,7 @@
/obj/item/gun/magic/hook/contractor
name = "SCORPION hook"
desc = "A hardlight hook used to non-lethally pull targets much closer to the user."
- icon = 'modular_skyrat/modules/contractor/icons/hook.dmi'
+ icon = 'modular_nova/modules/contractor/icons/hook.dmi'
icon_state = "hook_weapon"
inhand_icon_state = "" //nah
ammo_type = /obj/item/ammo_casing/magic/hook/contractor
@@ -10,10 +10,10 @@
projectile_type = /obj/projectile/hook/contractor
/obj/projectile/hook/contractor
- icon = 'modular_skyrat/modules/contractor/icons/hook_projectile.dmi'
+ icon = 'modular_nova/modules/contractor/icons/hook_projectile.dmi'
damage = 0
stamina = 25
- chain_icon = 'modular_skyrat/modules/contractor/icons/hook_projectile.dmi'
+ chain_icon = 'modular_nova/modules/contractor/icons/hook_projectile.dmi'
/obj/item/gun/magic/hook/contractor/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
if(prob(1))
diff --git a/modular_nova/modules/contractor/code/items/misc.dm b/modular_nova/modules/contractor/code/items/misc.dm
new file mode 100644
index 00000000000..81312370254
--- /dev/null
+++ b/modular_nova/modules/contractor/code/items/misc.dm
@@ -0,0 +1,108 @@
+/obj/item/paper/contractor_guide/Initialize(mapload)
+ default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,
+ this kit will provide you contracts to take on for TC payments.
+
+ You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed,
+ but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed
+ to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
+
+ Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your
+ targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.
+
+ The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,
+ with two Rep being provided each time you complete a contract.
+
+ Using the tablet
+
+ Open the Syndicate Contract Uplink program.
+ Here, you can accept a contract, and redeem your TC payments from completed contracts.
+ The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the
+ other number regardless of if they were alive or dead.
+ Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
+ inside the pod.
+
+
+ Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it
+ unavailable to take on again.
+ The tablet can also be recharged at any cell charger.
+ Extracting
+
+ Make sure both yourself and your target are at the dropoff.
+ Call the extraction, and stand back from the drop point.
+ If it fails, make sure your target is inside, and there's a free space for the pod to land.
+ Grab your target, and drag them into the pod.
+
+ Ransoms
+ We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back
+ from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever
+ ID card you have equipped, on top of the TC payment we give.
+
+ Good luck agent. You can burn this document with the supplied lighter.
"}
+
+ return ..()
+
+/obj/item/pinpointer/crew/contractor
+ name = "contractor pinpointer"
+ desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate."
+ icon_state = "pinpointer_syndicate"
+ worn_icon_state = "pinpointer_black"
+ minimum_range = 15
+ has_owner = TRUE
+ ignore_suit_sensor_level = TRUE
+
+/obj/item/extraction_pack/contractor
+ name = "black fulton extraction pack"
+ icon = 'modular_nova/modules/contractor/icons/fulton.dmi'
+ can_use_indoors = TRUE
+ special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
+ special_desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Syndicate Contractors."
+
+
+/obj/item/paper/contractor_guide/midround
+ name = "Contractor Guide"
+
+/obj/item/paper/contractor_guide/midround/Initialize(mapload)
+ default_raw_text = {"Welcome agent, congratulations on successfully getting in range of the station.
+
+ You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed,
+ but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed
+ to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
+
+ Your standard issue contractor baton can be found in the baton holster MODSuit module, it hits harder than the ones you might be used to,
+ and will likely be your go to weapon for kidnapping your targets.The three additional items have been randomly selected from what we had available.
+ We hope they're useful to you for your mission.
+
+ The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,
+ with two Rep being provided each time you complete a contract.
+
+ You've also been provided with a medipen of atropine, to prevent your implanted microbomb going off if it would be more tactically sound for your
+ body to stay intact. If circumstances change, you are still able to detonate your microbomb post-mortem.
+
+ Using the tablet
+
+ Open the Syndicate Contract Uplink program.
+ Here, you can accept a contract, and redeem your TC payments from completed contracts.
+ The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the
+ other number regardless of if they were alive or dead.
+ Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
+ inside the pod.
+
+
+ Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it
+ unavailable to take on again.
+ The tablet can also be recharged at any cell charger.
+ Extracting
+
+ Make sure both yourself and your target are at the dropoff.
+ Call the extraction, and stand back from the drop point.
+ If it fails, make sure your target is inside, and there's a free space for the pod to land.
+ Grab your target, and drag them into the pod.
+
+ Ransoms
+ We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back
+ from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever
+ ID card you have equipped, on top of the TC payment we give.
+
+ Good luck agent. You can burn this document with the supplied lighter.
"}
+
+ return ..()
diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm
similarity index 92%
rename from modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm
rename to modular_nova/modules/contractor/code/items/modsuit/modsuit.dm
index e1dd641ea3b..88a6134999d 100644
--- a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm
+++ b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm
@@ -1,7 +1,7 @@
/obj/item/mod/control/pre_equipped/contractor
- worn_icon = 'modular_skyrat/modules/contractor/icons/worn_modsuit.dmi'
- icon = 'modular_skyrat/modules/contractor/icons/modsuit.dmi'
+ worn_icon = 'modular_nova/modules/contractor/icons/worn_modsuit.dmi'
+ icon = 'modular_nova/modules/contractor/icons/modsuit.dmi'
icon_state = "contractor-control"
theme = /datum/mod_theme/contractor
starting_frequency = MODLINK_FREQ_SYNDICATE
diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/modules.dm b/modular_nova/modules/contractor/code/items/modsuit/modules.dm
similarity index 94%
rename from modular_skyrat/modules/contractor/code/items/modsuit/modules.dm
rename to modular_nova/modules/contractor/code/items/modsuit/modules.dm
index 646ec92157f..9e99d5de656 100644
--- a/modular_skyrat/modules/contractor/code/items/modsuit/modules.dm
+++ b/modular_nova/modules/contractor/code/items/modsuit/modules.dm
@@ -4,7 +4,7 @@
to retrieve an inserted baton from the suit at will. Insert a baton \
by hitting the module, while it is removed from the suit, with the baton."
icon_state = "holster"
- icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi'
+ icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi'
module_type = MODULE_ACTIVE
complexity = 3
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
@@ -63,7 +63,7 @@
desc = "A much more modern version of a springlock system. \
This is a module that uses magnets to speed up the deployment and retraction time of your MODsuit."
icon_state = "magnet"
- icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi'
+ icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi'
/obj/item/mod/module/springlock/contractor/on_suit_activation() // This module is actually *not* a death trap
return
@@ -82,7 +82,7 @@
a target towards you at high speed, knocking them down and \
partially exhausting them."
icon_state = "hook"
- icon = 'modular_skyrat/modules/contractor/icons/modsuit_modules.dmi'
+ icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi'
incompatible_modules = list(/obj/item/mod/module/scorpion_hook)
module_type = MODULE_ACTIVE
complexity = 3
diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm b/modular_nova/modules/contractor/code/items/modsuit/theme.dm
similarity index 94%
rename from modular_skyrat/modules/contractor/code/items/modsuit/theme.dm
rename to modular_nova/modules/contractor/code/items/modsuit/theme.dm
index 83781f7246f..88e8376bb10 100644
--- a/modular_skyrat/modules/contractor/code/items/modsuit/theme.dm
+++ b/modular_nova/modules/contractor/code/items/modsuit/theme.dm
@@ -32,8 +32,8 @@
)
skins = list(
"contractor" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/contractor/icons/modsuit.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/contractor/icons/worn_modsuit.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/contractor/icons/modsuit.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/contractor/icons/worn_modsuit.dmi',
HELMET_LAYER = NECK_LAYER,
HELMET_FLAGS = list(
UNSEALED_CLOTHING = SNUG_FIT,
diff --git a/modular_skyrat/modules/contractor/code/items/tablet.dm b/modular_nova/modules/contractor/code/items/tablet.dm
similarity index 80%
rename from modular_skyrat/modules/contractor/code/items/tablet.dm
rename to modular_nova/modules/contractor/code/items/tablet.dm
index 44b28b75c6a..57d9227a0da 100644
--- a/modular_skyrat/modules/contractor/code/items/tablet.dm
+++ b/modular_nova/modules/contractor/code/items/tablet.dm
@@ -1,12 +1,7 @@
/obj/item/modular_computer/pda/contractor
name = "contract PDA"
- icon = 'icons/obj/antags/contractor_tablet.dmi'
- icon_state = "tablet"
- icon_state_unpowered = "tablet"
- icon_state_powered = "tablet"
- icon_state_menu = "assign"
- greyscale_config = null
- greyscale_colors = null
+ greyscale_config = /datum/greyscale_config/tablet/stripe_double
+ greyscale_colors = "#696969#000000#FFA500"
comp_light_luminosity = 6.3
saved_identification = "John Doe"
saved_job = "Citizen"
diff --git a/modular_skyrat/modules/contractor/code/objects/supplypod.dm b/modular_nova/modules/contractor/code/objects/supplypod.dm
similarity index 94%
rename from modular_skyrat/modules/contractor/code/objects/supplypod.dm
rename to modular_nova/modules/contractor/code/objects/supplypod.dm
index 2cca53e20b2..1f0e1632dd9 100644
--- a/modular_skyrat/modules/contractor/code/objects/supplypod.dm
+++ b/modular_nova/modules/contractor/code/objects/supplypod.dm
@@ -1,10 +1,10 @@
/obj/structure/closet/supplypod/extractionpod
var/datum/contractor_hub/contract_hub
var/datum/syndicate_contract/tied_contract
- var/recieving = FALSE
+ var/receiving = FALSE
/obj/structure/closet/supplypod/extractionpod/Destroy()
- if(!recieving)
+ if(!receiving)
return ..()
to_chat(tied_contract.contract.owner, " [span_userdanger("Extraction pod destroyed. Contract aborted.")]")
var/contract_id = tied_contract.id
@@ -18,7 +18,7 @@
return ..()
/obj/structure/closet/supplypod/extractionpod/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
- if(recieving && (atom_integrity <= 0))
+ if(receiving && (atom_integrity <= 0))
to_chat(tied_contract.contract.owner, " [span_userdanger("Extraction pod destroyed. Contract aborted.")]")
var/contract_id = tied_contract.id
if (contract_hub.current_contract == tied_contract)
diff --git a/modular_skyrat/modules/contractor/icons/baton_upgrades.dmi b/modular_nova/modules/contractor/icons/baton_upgrades.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/baton_upgrades.dmi
rename to modular_nova/modules/contractor/icons/baton_upgrades.dmi
diff --git a/modular_skyrat/modules/contractor/icons/fulton.dmi b/modular_nova/modules/contractor/icons/fulton.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/fulton.dmi
rename to modular_nova/modules/contractor/icons/fulton.dmi
diff --git a/modular_skyrat/modules/contractor/icons/hook.dmi b/modular_nova/modules/contractor/icons/hook.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/hook.dmi
rename to modular_nova/modules/contractor/icons/hook.dmi
diff --git a/modular_skyrat/modules/contractor/icons/hook_projectile.dmi b/modular_nova/modules/contractor/icons/hook_projectile.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/hook_projectile.dmi
rename to modular_nova/modules/contractor/icons/hook_projectile.dmi
diff --git a/modular_skyrat/modules/contractor/icons/hud_icon.dmi b/modular_nova/modules/contractor/icons/hud_icon.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/hud_icon.dmi
rename to modular_nova/modules/contractor/icons/hud_icon.dmi
diff --git a/modular_skyrat/modules/contractor/icons/modsuit.dmi b/modular_nova/modules/contractor/icons/modsuit.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/modsuit.dmi
rename to modular_nova/modules/contractor/icons/modsuit.dmi
diff --git a/modular_skyrat/modules/contractor/icons/modsuit_modules.dmi b/modular_nova/modules/contractor/icons/modsuit_modules.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/modsuit_modules.dmi
rename to modular_nova/modules/contractor/icons/modsuit_modules.dmi
diff --git a/modular_skyrat/modules/contractor/icons/worn_modsuit.dmi b/modular_nova/modules/contractor/icons/worn_modsuit.dmi
similarity index 100%
rename from modular_skyrat/modules/contractor/icons/worn_modsuit.dmi
rename to modular_nova/modules/contractor/icons/worn_modsuit.dmi
diff --git a/modular_skyrat/modules/contractor/sound/confirmdropoff.ogg b/modular_nova/modules/contractor/sound/confirmdropoff.ogg
similarity index 100%
rename from modular_skyrat/modules/contractor/sound/confirmdropoff.ogg
rename to modular_nova/modules/contractor/sound/confirmdropoff.ogg
diff --git a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm b/modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm
similarity index 97%
rename from modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm
rename to modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm
index 32cec0b2f9a..3fc88da972a 100644
--- a/modular_skyrat/modules/conveyor_sorter/code/conveyor_sorter.dm
+++ b/modular_nova/modules/conveyor_sorter/code/conveyor_sorter.dm
@@ -1,7 +1,7 @@
/obj/item/conveyor_sorter
name = "conveyor sorter lister"
desc = "A tool that is used to not only create the conveyor sorters, but give lists to the conveyor sorters."
- icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
+ icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
icon_state = "lister"
///the list of conveyor sorters spawned by
var/list/spawned_sorters = list()
@@ -61,7 +61,7 @@
/obj/effect/decal/conveyor_sorter
name = "conveyor sorter"
desc = "A mark that will sort items out based on what they are."
- icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
+ icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
icon_state = "sorter"
layer = OBJ_LAYER
plane = GAME_PLANE
@@ -169,7 +169,7 @@
/obj/effect/decal/conveyor_sorter/improved
name = "improved conveyor sorter"
desc = "A mark that will sort items out based on what they are. This one can sort in ordinal directions as well!"
- icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
+ icon = 'modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
icon_state = "sorter_improved"
light_range = 3
light_color = COLOR_BLUE_LIGHT
diff --git a/modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi b/modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi
similarity index 100%
rename from modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi
rename to modular_nova/modules/conveyor_sorter/icons/conveyor_sorter.dmi
diff --git a/modular_skyrat/modules/conveyor_sorter/readme.md b/modular_nova/modules/conveyor_sorter/readme.md
similarity index 100%
rename from modular_skyrat/modules/conveyor_sorter/readme.md
rename to modular_nova/modules/conveyor_sorter/readme.md
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm b/modular_nova/modules/cortical_borer/code/cortical_borer.dm
similarity index 99%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer.dm
index 059a93fcc29..9d5b83fc24a 100644
--- a/modular_skyrat/modules/cortical_borer/code/cortical_borer.dm
+++ b/modular_nova/modules/cortical_borer/code/cortical_borer.dm
@@ -73,7 +73,7 @@ GLOBAL_LIST_EMPTY(cortical_borers)
/mob/living/basic/cortical_borer
name = "cortical borer"
desc = "A slimy creature that is known to go into the ear canal of unsuspecting victims."
- icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi'
+ icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi'
icon_state = "brainslug"
icon_living = "brainslug"
icon_dead = "brainslug_dead"
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm
similarity index 99%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm
index 222f0f0e813..790d3f07c22 100644
--- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_abilities.dm
+++ b/modular_nova/modules/cortical_borer/code/cortical_borer_abilities.dm
@@ -5,7 +5,7 @@
// Parent of all borer actions
/datum/action/cooldown/borer
- button_icon = 'modular_skyrat/modules/cortical_borer/icons/actions.dmi'
+ button_icon = 'modular_nova/modules/cortical_borer/icons/actions.dmi'
cooldown_time = 0
/// How many chemicals this costs
var/chemical_cost = 0
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm
similarity index 94%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm
index 5de312eb22a..c21a2ced2b4 100644
--- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_antag.dm
+++ b/modular_nova/modules/cortical_borer/code/cortical_borer_antag.dm
@@ -41,7 +41,7 @@
var/datum/team/cortical_borers/borers
/datum/antagonist/cortical_borer/get_preview_icon()
- return finish_preview_icon(icon('modular_skyrat/modules/cortical_borer/icons/animal.dmi', "brainslug"))
+ return finish_preview_icon(icon('modular_nova/modules/cortical_borer/icons/animal.dmi', "brainslug"))
/datum/antagonist/cortical_borer/get_team()
return borers
@@ -125,7 +125,15 @@
vents += temp_vent
if(!length(vents))
return MAP_ERROR
- var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to spawn as a cortical borer?", ROLE_PAI, FALSE, 10 SECONDS, POLL_IGNORE_CORTICAL_BORER)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
+ "Do you want to spawn as a cortical borer?",
+ role = ROLE_PAI,
+ check_jobban = FALSE,
+ poll_time = 10 SECONDS,
+ ignore_category = POLL_IGNORE_CORTICAL_BORER,
+ pic_source = /obj/item/borer_egg,
+ role_name_text = "cortical borer",
+ )
if(!length(candidates))
return NOT_ENOUGH_PLAYERS
var/living_number = max(length(GLOB.player_list) / POP_PER_BORER, 1)
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_chems.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_chems.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_chems.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer_chems.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm
similarity index 96%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm
index 4311ee81afd..8411e13cff3 100644
--- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_egg.dm
+++ b/modular_nova/modules/cortical_borer/code/cortical_borer_egg.dm
@@ -1,7 +1,7 @@
/obj/effect/mob_spawn/ghost_role/borer_egg
name = "borer egg"
desc = "An egg of a creature that is known to crawl inside of you, be careful."
- icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi'
+ icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi'
icon_state = "brainegg"
layer = BELOW_MOB_LAYER
density = FALSE
@@ -51,7 +51,7 @@
/obj/item/borer_egg
name = "borer egg"
desc = "An egg of a creature that is known to crawl inside of you, be careful."
- icon = 'modular_skyrat/modules/cortical_borer/icons/animal.dmi'
+ icon = 'modular_nova/modules/cortical_borer/icons/animal.dmi'
icon_state = "brainegg"
layer = BELOW_MOB_LAYER
///the spawner that is attached to this item
diff --git a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm b/modular_nova/modules/cortical_borer/code/cortical_borer_items.dm
similarity index 98%
rename from modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm
rename to modular_nova/modules/cortical_borer/code/cortical_borer_items.dm
index 5f0ecc27ef5..aa3cdc8f008 100644
--- a/modular_skyrat/modules/cortical_borer/code/cortical_borer_items.dm
+++ b/modular_nova/modules/cortical_borer/code/cortical_borer_items.dm
@@ -1,7 +1,7 @@
/obj/item/cortical_cage
name = "cortical borer cage"
desc = "A harmless cage that is intended to capture cortical borers."
- icon = 'modular_skyrat/modules/cortical_borer/icons/items.dmi'
+ icon = 'modular_nova/modules/cortical_borer/icons/items.dmi'
icon_state = "cage"
///If true, the trap is "open" and can trigger.
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/borer_evolution.dm b/modular_nova/modules/cortical_borer/code/evolution/borer_evolution.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/evolution/borer_evolution.dm
rename to modular_nova/modules/cortical_borer/code/evolution/borer_evolution.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_datum.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_datum.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_datum.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_datum.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_diveworm.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_diveworm.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_diveworm.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm
similarity index 99%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm
index 9a21906dbf3..0e46dd7681b 100644
--- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_general.dm
+++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_general.dm
@@ -54,7 +54,7 @@
/datum/reagent/medicine/system_cleaner,
/datum/reagent/medicine/nanite_slurry,
/datum/reagent/medicine/liquid_solder,
- /datum/reagent/oil,
+ /datum/reagent/fuel/oil,
/datum/reagent/fuel,
)
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_hivelord.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_hivelord.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_hivelord.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_symbiote.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_symbiote.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_symbiote.dm
diff --git a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm b/modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm
similarity index 86%
rename from modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm
rename to modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm
index 5f079c6b9b3..d04b31cce56 100644
--- a/modular_skyrat/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm
+++ b/modular_nova/modules/cortical_borer/code/evolution/evolution_things/empowered_egg.dm
@@ -36,7 +36,15 @@
if(owner.stat != DEAD)
qdel(src)
return
- var/list/candidates = poll_ghost_candidates("Do you want to spawn as an empowered Cortical Borer bursting from [owner]?", ROLE_PAI, FALSE, 10 SECONDS, POLL_IGNORE_CORTICAL_BORER)
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ "Do you want to spawn as an empowered Cortical Borer bursting from [owner]?",
+ role = ROLE_PAI,
+ check_jobban = FALSE,
+ poll_time = 10 SECONDS,
+ ignore_category = POLL_IGNORE_CORTICAL_BORER,
+ pic_source = /obj/item/borer_egg/empowered,
+ role_name_text = "empowered cortical borer",
+ )
if(!length(candidates))
var/obj/effect/mob_spawn/ghost_role/borer_egg/empowered/borer_egg = new(get_turf(owner))
borer_egg.generation = generation
diff --git a/modular_skyrat/modules/cortical_borer/code/focus_datum.dm b/modular_nova/modules/cortical_borer/code/focus_datum.dm
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/code/focus_datum.dm
rename to modular_nova/modules/cortical_borer/code/focus_datum.dm
diff --git a/modular_nova/modules/cortical_borer/code/status_effects.dm b/modular_nova/modules/cortical_borer/code/status_effects.dm
new file mode 100644
index 00000000000..ffcdf7b3b20
--- /dev/null
+++ b/modular_nova/modules/cortical_borer/code/status_effects.dm
@@ -0,0 +1,11 @@
+/datum/status_effect/borer_sugar
+ id = "borer_sugar"
+ tick_interval = -1
+ status_type = STATUS_EFFECT_UNIQUE
+ alert_type = /atom/movable/screen/alert/status_effect/borer_sugar
+
+/atom/movable/screen/alert/status_effect/borer_sugar
+ name = "Sugar Dampening"
+ desc = "Your powers are diminished while sugar is in you or your host!"
+ icon = 'modular_nova/modules/cortical_borer/icons/actions.dmi'
+ icon_state = "borer_sugar"
diff --git a/modular_skyrat/modules/cortical_borer/icons/actions.dmi b/modular_nova/modules/cortical_borer/icons/actions.dmi
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/icons/actions.dmi
rename to modular_nova/modules/cortical_borer/icons/actions.dmi
diff --git a/modular_skyrat/modules/cortical_borer/icons/animal.dmi b/modular_nova/modules/cortical_borer/icons/animal.dmi
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/icons/animal.dmi
rename to modular_nova/modules/cortical_borer/icons/animal.dmi
diff --git a/modular_skyrat/modules/cortical_borer/icons/hud.dmi b/modular_nova/modules/cortical_borer/icons/hud.dmi
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/icons/hud.dmi
rename to modular_nova/modules/cortical_borer/icons/hud.dmi
diff --git a/modular_skyrat/modules/cortical_borer/icons/items.dmi b/modular_nova/modules/cortical_borer/icons/items.dmi
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/icons/items.dmi
rename to modular_nova/modules/cortical_borer/icons/items.dmi
diff --git a/modular_skyrat/modules/cortical_borer/readme.md b/modular_nova/modules/cortical_borer/readme.md
similarity index 100%
rename from modular_skyrat/modules/cortical_borer/readme.md
rename to modular_nova/modules/cortical_borer/readme.md
diff --git a/modular_skyrat/modules/crafting/crafting_skyrat.dm b/modular_nova/modules/crafting/crafting_skyrat.dm
similarity index 100%
rename from modular_skyrat/modules/crafting/crafting_skyrat.dm
rename to modular_nova/modules/crafting/crafting_skyrat.dm
diff --git a/modular_skyrat/modules/cryosleep/code/admin.dm b/modular_nova/modules/cryosleep/code/admin.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/admin.dm
rename to modular_nova/modules/cryosleep/code/admin.dm
diff --git a/modular_skyrat/modules/cryosleep/code/ai.dm b/modular_nova/modules/cryosleep/code/ai.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/ai.dm
rename to modular_nova/modules/cryosleep/code/ai.dm
diff --git a/modular_skyrat/modules/cryosleep/code/config.dm b/modular_nova/modules/cryosleep/code/config.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/config.dm
rename to modular_nova/modules/cryosleep/code/config.dm
diff --git a/modular_skyrat/modules/cryosleep/code/cryo_console_return.dm b/modular_nova/modules/cryosleep/code/cryo_console_return.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/cryo_console_return.dm
rename to modular_nova/modules/cryosleep/code/cryo_console_return.dm
diff --git a/modular_skyrat/modules/cryosleep/code/cryopod.dm b/modular_nova/modules/cryosleep/code/cryopod.dm
similarity index 99%
rename from modular_skyrat/modules/cryosleep/code/cryopod.dm
rename to modular_nova/modules/cryosleep/code/cryopod.dm
index 08a0bf8b8bb..54a9d5efdb9 100644
--- a/modular_skyrat/modules/cryosleep/code/cryopod.dm
+++ b/modular_nova/modules/cryosleep/code/cryopod.dm
@@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(valid_cryopods)
/obj/machinery/computer/cryopod
name = "cryogenic oversight console"
desc = "An interface between crew and the cryogenic storage oversight systems."
- icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi'
+ icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi'
icon_state = "cellconsole_1"
icon_keyboard = null
icon_screen = null
@@ -134,7 +134,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 32)
/obj/machinery/cryopod
name = "cryogenic freezer"
desc = "Suited for Cyborgs and Humanoids, the pod is a safe place for personnel affected by the Space Sleep Disorder to get some rest."
- icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi'
+ icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi'
icon_state = "cryopod-open"
base_icon_state = "cryopod"
use_power = FALSE
diff --git a/modular_skyrat/modules/cryosleep/code/job.dm b/modular_nova/modules/cryosleep/code/job.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/job.dm
rename to modular_nova/modules/cryosleep/code/job.dm
diff --git a/modular_skyrat/modules/cryosleep/code/mind.dm b/modular_nova/modules/cryosleep/code/mind.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/mind.dm
rename to modular_nova/modules/cryosleep/code/mind.dm
diff --git a/modular_skyrat/modules/cryosleep/code/mood.dm b/modular_nova/modules/cryosleep/code/mood.dm
similarity index 100%
rename from modular_skyrat/modules/cryosleep/code/mood.dm
rename to modular_nova/modules/cryosleep/code/mood.dm
diff --git a/modular_skyrat/modules/cryosleep/icons/cryogenics.dmi b/modular_nova/modules/cryosleep/icons/cryogenics.dmi
similarity index 100%
rename from modular_skyrat/modules/cryosleep/icons/cryogenics.dmi
rename to modular_nova/modules/cryosleep/icons/cryogenics.dmi
diff --git a/modular_skyrat/modules/cryosleep/readme.md b/modular_nova/modules/cryosleep/readme.md
similarity index 100%
rename from modular_skyrat/modules/cryosleep/readme.md
rename to modular_nova/modules/cryosleep/readme.md
diff --git a/modular_nova/modules/curatorbundle/Mushy.dm b/modular_nova/modules/curatorbundle/Mushy.dm
new file mode 100644
index 00000000000..5782a8f65c3
--- /dev/null
+++ b/modular_nova/modules/curatorbundle/Mushy.dm
@@ -0,0 +1,49 @@
+/obj/item/clothing/head/mush_helmet
+ name = "mush cap"
+ desc = "A mushroom cap, this one also doubles as an umbrella!"
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
+ icon_state = "mush_cap"
+ worn_icon_state = "mush_cap"
+ greyscale_config = /datum/greyscale_config/mushcap
+ greyscale_config_worn = /datum/greyscale_config/mushcap/worn
+ greyscale_colors = "#eb0c07"
+ flags_cover = HEADCOVERSEYES
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/suit/mush
+ name = "mushroom suit"
+ desc = "A mushroom suit, these can be sporadically seen being worn by the more fungal personalities."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "mush_male"
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ slowdown = 1
+ clothing_flags = THICKMATERIAL
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Male Mush" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "mush_male",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "mush_male"
+ ),
+ "Female Mush" = list(
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits.dmi',
+ RESKIN_ICON_STATE = "mush_female",
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suit.dmi',
+ RESKIN_WORN_ICON_STATE = "mush_female"
+ )
+ )
+
+
+/obj/item/storage/box/hero/mushperson
+ name = "Mushy The Mushperson - 2305"
+ desc = "Can you remember?"
+
+/obj/item/storage/box/hero/mushperson/PopulateContents()
+ new /obj/item/clothing/suit/mush(src)
+ new /obj/item/clothing/head/mush_helmet(src)
+ new /obj/item/mushpunch(src)
diff --git a/modular_skyrat/modules/curatorbundle/Ronin.dm b/modular_nova/modules/curatorbundle/Ronin.dm
similarity index 100%
rename from modular_skyrat/modules/curatorbundle/Ronin.dm
rename to modular_nova/modules/curatorbundle/Ronin.dm
diff --git a/modular_skyrat/modules/customization/__DEFINES/DNA.dm b/modular_nova/modules/customization/__DEFINES/DNA.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__DEFINES/DNA.dm
rename to modular_nova/modules/customization/__DEFINES/DNA.dm
diff --git a/modular_skyrat/modules/customization/__DEFINES/lists.dm b/modular_nova/modules/customization/__DEFINES/lists.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__DEFINES/lists.dm
rename to modular_nova/modules/customization/__DEFINES/lists.dm
diff --git a/modular_skyrat/modules/customization/__DEFINES/loadout.dm b/modular_nova/modules/customization/__DEFINES/loadout.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__DEFINES/loadout.dm
rename to modular_nova/modules/customization/__DEFINES/loadout.dm
diff --git a/modular_skyrat/modules/customization/__HELPERS/DNA.dm b/modular_nova/modules/customization/__HELPERS/DNA.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__HELPERS/DNA.dm
rename to modular_nova/modules/customization/__HELPERS/DNA.dm
diff --git a/modular_skyrat/modules/customization/__HELPERS/global_lists.dm b/modular_nova/modules/customization/__HELPERS/global_lists.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__HELPERS/global_lists.dm
rename to modular_nova/modules/customization/__HELPERS/global_lists.dm
diff --git a/modular_skyrat/modules/customization/__HELPERS/mobs.dm b/modular_nova/modules/customization/__HELPERS/mobs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__HELPERS/mobs.dm
rename to modular_nova/modules/customization/__HELPERS/mobs.dm
diff --git a/modular_skyrat/modules/customization/__HELPERS/names.dm b/modular_nova/modules/customization/__HELPERS/names.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__HELPERS/names.dm
rename to modular_nova/modules/customization/__HELPERS/names.dm
diff --git a/modular_skyrat/modules/customization/__HELPERS/text.dm b/modular_nova/modules/customization/__HELPERS/text.dm
similarity index 100%
rename from modular_skyrat/modules/customization/__HELPERS/text.dm
rename to modular_nova/modules/customization/__HELPERS/text.dm
diff --git a/modular_nova/modules/customization/_globalvars/lists.dm b/modular_nova/modules/customization/_globalvars/lists.dm
new file mode 100644
index 00000000000..90a0758b0dc
--- /dev/null
+++ b/modular_nova/modules/customization/_globalvars/lists.dm
@@ -0,0 +1,113 @@
+//DO NOT CHANGE THOSE LISTS UNLESS YOU KNOW WHAT YOURE DOING (will mess savefiles)
+
+
+GLOBAL_LIST_INIT(breast_size_translation, list(
+ "0" = BREAST_SIZE_FLATCHESTED,
+ "1" = BREAST_SIZE_A,
+ "2" = BREAST_SIZE_B,
+ "3" = BREAST_SIZE_C,
+ "4" = BREAST_SIZE_D,
+ "5" = BREAST_SIZE_E,
+ "6" = BREAST_SIZE_F,
+ "7" = BREAST_SIZE_G,
+ "8" = BREAST_SIZE_H,
+ "9" = BREAST_SIZE_I,
+ "10" = BREAST_SIZE_J,
+ "11" = BREAST_SIZE_K,
+ "12" = BREAST_SIZE_L,
+ "13" = BREAST_SIZE_M,
+ "14" = BREAST_SIZE_N,
+ "15" = BREAST_SIZE_O,
+ "16" = BREAST_SIZE_P,
+ ))
+
+GLOBAL_LIST_INIT(breast_size_to_number, list(
+ BREAST_SIZE_FLATCHESTED = 0,
+ BREAST_SIZE_A = 1,
+ BREAST_SIZE_B = 2,
+ BREAST_SIZE_C = 3,
+ BREAST_SIZE_D = 4,
+ BREAST_SIZE_E = 5,
+ BREAST_SIZE_F = 6,
+ BREAST_SIZE_G = 7,
+ BREAST_SIZE_H = 8,
+ BREAST_SIZE_I = 9,
+ BREAST_SIZE_J = 10,
+ BREAST_SIZE_K = 11,
+ BREAST_SIZE_L = 12,
+ BREAST_SIZE_M = 13,
+ BREAST_SIZE_N = 14,
+ BREAST_SIZE_O = 15,
+ BREAST_SIZE_P = 16,
+ ))
+
+GLOBAL_LIST_INIT(balls_size_translation, list(
+ "0" = "Small",
+ "1" = "Average",
+ "2" = "Big",
+ "3" = "Enormous"
+ ))
+
+GLOBAL_LIST_INIT(marking_zone_to_bitflag, list(
+ BODY_ZONE_HEAD = HEAD,
+ BODY_ZONE_CHEST = CHEST,
+ BODY_ZONE_L_LEG = LEG_LEFT,
+ BODY_ZONE_R_LEG = LEG_RIGHT,
+ BODY_ZONE_L_ARM = ARM_LEFT,
+ BODY_ZONE_R_ARM = ARM_RIGHT,
+ BODY_ZONE_PRECISE_L_HAND = HAND_LEFT,
+ BODY_ZONE_PRECISE_R_HAND = HAND_RIGHT
+ ))
+
+GLOBAL_LIST_INIT(marking_zones, list(
+ BODY_ZONE_HEAD,
+ BODY_ZONE_CHEST,
+ BODY_ZONE_L_LEG,
+ BODY_ZONE_R_LEG,
+ BODY_ZONE_L_ARM,
+ BODY_ZONE_R_ARM,
+ BODY_ZONE_PRECISE_L_HAND,
+ BODY_ZONE_PRECISE_R_HAND,
+ ))
+
+GLOBAL_LIST_INIT(preference_balls_sizes, list(
+ "Small",
+ "Average",
+ "Big",
+ "Enormous",
+ ))
+
+GLOBAL_LIST_INIT(robotic_styles_list, list(
+ "None" = "None",
+ "Surplus" = 'icons/mob/augmentation/surplus_augments.dmi',
+ "Cyborg" = 'icons/mob/augmentation/augments.dmi',
+ "Engineering" = 'icons/mob/augmentation/augments_engineer.dmi',
+ "Mining" = 'icons/mob/augmentation/augments_mining.dmi',
+ "Security" = 'icons/mob/augmentation/augments_security.dmi',
+ "Morpheus Cyberkinetics" = 'modular_nova/master_files/icons/mob/augmentation/mcgipc.dmi',
+ "Bishop Cyberkinetics" = 'modular_nova/master_files/icons/mob/augmentation/bshipc.dmi',
+ "Bishop Cyberkinetics 2.0" = 'modular_nova/master_files/icons/mob/augmentation/bs2ipc.dmi',
+ "Hephaestus Industries" = 'modular_nova/master_files/icons/mob/augmentation/hsiipc.dmi',
+ "Hephaestus Industries 2.0" = 'modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi',
+ "Shellguard Munitions Standard Series" = 'modular_nova/master_files/icons/mob/augmentation/sgmipc.dmi',
+ "Ward-Takahashi Manufacturing" = 'modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi',
+ "Xion Manufacturing Group" = 'modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi',
+ "Xion Manufacturing Group 2.0" = 'modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi',
+ "Zeng-Hu Pharmaceuticals" = 'modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi'
+ ))
+
+//ghoul colors
+GLOBAL_LIST_INIT(color_list_ghoul, list( \
+ "Necrotic Green" = "bfc474", \
+ "Rotting Tan" = "c4af7c", \
+ "Plutonium Blue" = "a5cfcc", \
+ "Marked Red" = "f05b68" \
+))
+
+//Bras
+/// Stores all /datum/sprite_accessory/bra indexed by name.
+GLOBAL_LIST_EMPTY(bra_list)
+/// Stores only the bra names for male-compatible bras.
+GLOBAL_LIST_EMPTY(bra_m)
+/// Stores only the bra names for female-compatible bras.
+GLOBAL_LIST_EMPTY(bra_f)
diff --git a/modular_nova/modules/customization/_globalvars/names.dm b/modular_nova/modules/customization/_globalvars/names.dm
new file mode 100644
index 00000000000..2efefacf5a5
--- /dev/null
+++ b/modular_nova/modules/customization/_globalvars/names.dm
@@ -0,0 +1,8 @@
+GLOBAL_LIST_INIT(first_names_male_vulp, world.file2list("modular_nova/modules/customization/strings/names/first_male_vulp.txt"))
+GLOBAL_LIST_INIT(first_names_female_vulp, world.file2list("modular_nova/modules/customization/strings/names/first_female_vulp.txt"))
+GLOBAL_LIST_INIT(last_names_vulp, world.file2list("modular_nova/modules/customization/strings/names/last_vulp.txt"))
+GLOBAL_LIST_INIT(first_names_male_taj, world.file2list("modular_nova/modules/customization/strings/names/first_male_taj.txt"))
+GLOBAL_LIST_INIT(first_names_female_taj, world.file2list("modular_nova/modules/customization/strings/names/first_female_taj.txt"))
+GLOBAL_LIST_INIT(last_names_taj, world.file2list("modular_nova/modules/customization/strings/names/last_taj.txt"))
+GLOBAL_LIST_INIT(callsigns_nri, world.file2list("modular_nova/modules/customization/strings/names/callsigns_nri.txt"))
+GLOBAL_LIST_INIT(phonetic_alphabet_numbers, world.file2list("modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt"))
diff --git a/modular_skyrat/modules/customization/datums/components/crafting/clothing.dm b/modular_nova/modules/customization/datums/components/crafting/clothing.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/components/crafting/clothing.dm
rename to modular_nova/modules/customization/datums/components/crafting/clothing.dm
diff --git a/modular_skyrat/modules/customization/datums/components/crafting/hemophage_recipes.dm b/modular_nova/modules/customization/datums/components/crafting/hemophage_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/components/crafting/hemophage_recipes.dm
rename to modular_nova/modules/customization/datums/components/crafting/hemophage_recipes.dm
diff --git a/modular_skyrat/modules/customization/datums/components/crafting/recipes.dm b/modular_nova/modules/customization/datums/components/crafting/recipes.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/components/crafting/recipes.dm
rename to modular_nova/modules/customization/datums/components/crafting/recipes.dm
diff --git a/modular_skyrat/modules/customization/datums/components/crafting/teshari_recipes.dm b/modular_nova/modules/customization/datums/components/crafting/teshari_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/components/crafting/teshari_recipes.dm
rename to modular_nova/modules/customization/datums/components/crafting/teshari_recipes.dm
diff --git a/modular_skyrat/modules/customization/datums/dna.dm b/modular_nova/modules/customization/datums/dna.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/dna.dm
rename to modular_nova/modules/customization/datums/dna.dm
diff --git a/modular_skyrat/modules/customization/datums/keybinding/communication.dm b/modular_nova/modules/customization/datums/keybinding/communication.dm
similarity index 100%
rename from modular_skyrat/modules/customization/datums/keybinding/communication.dm
rename to modular_nova/modules/customization/datums/keybinding/communication.dm
diff --git a/modular_skyrat/modules/customization/game/objects/items/balls.dm b/modular_nova/modules/customization/game/objects/items/balls.dm
similarity index 90%
rename from modular_skyrat/modules/customization/game/objects/items/balls.dm
rename to modular_nova/modules/customization/game/objects/items/balls.dm
index 457f8de2044..474aa056838 100644
--- a/modular_skyrat/modules/customization/game/objects/items/balls.dm
+++ b/modular_nova/modules/customization/game/objects/items/balls.dm
@@ -1,13 +1,13 @@
/obj/item/toy/tennis
name = "tennis ball"
desc = "A classical tennis ball. It appears to have faint bite marks scattered all over its surface."
- icon = 'modular_skyrat/master_files/icons/obj/balls.dmi'
+ icon = 'modular_nova/master_files/icons/obj/balls.dmi'
icon_state = "tennis_classic"
worn_icon_state = "tennis_classic"
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/balls_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/balls_right.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/balls_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/balls_right.dmi'
inhand_icon_state = "tennis_classic"
- worn_icon = 'modular_skyrat/master_files/icons/mob/mouthball.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/mouthball.dmi'
slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_NECK | ITEM_SLOT_EARS //Fluff item, put it wherever you want!
throw_range = 14
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_nova/modules/customization/game/objects/items/conversion_kits.dm b/modular_nova/modules/customization/game/objects/items/conversion_kits.dm
new file mode 100644
index 00000000000..e0248b1e1f9
--- /dev/null
+++ b/modular_nova/modules/customization/game/objects/items/conversion_kits.dm
@@ -0,0 +1,29 @@
+/obj/item/device/custom_kit
+ name = "modification kit"
+ desc = "A box of parts for modifying a certain object."
+ icon = 'modular_nova/master_files/icons/donator/obj/kits.dmi'
+ icon_state = "partskit"
+ /// The base object to be converted.
+ var/obj/item/from_obj
+ /// The object to turn it into.
+ var/obj/item/to_obj
+
+/obj/item/device/custom_kit/afterattack(obj/target_obj, mob/user, proximity_flag)
+ if(!proximity_flag) //Gotta be adjacent to your target
+ return
+ if(isturf(target_obj)) //This shouldn't be needed, but apparently it throws runtimes otherwise.
+ return
+ else if(target_obj.type == from_obj) //Checks whether the item is eligible to be converted
+ if(!pre_convert_check(target_obj, user))
+ return FALSE
+ var/obj/item/converted_item = new to_obj(get_turf(src))
+ user.put_in_hands(converted_item)
+ user.visible_message(span_notice("[user] modifies [target_obj] into [converted_item]."), span_notice("You modify [target_obj] into [converted_item]."))
+ qdel(target_obj)
+ qdel(src)
+ else
+ to_chat(user, span_warning("It looks like this kit won't work on [target_obj]..."))
+
+/// Override this if you have some condition you want fulfilled before allowing the conversion. Return TRUE to allow it to convert, return FALSE to prevent it.
+/obj/item/device/custom_kit/proc/pre_convert_check(obj/target_obj, mob/user)
+ return TRUE
diff --git a/modular_nova/modules/customization/game/objects/items/devices/crutch.dm b/modular_nova/modules/customization/game/objects/items/devices/crutch.dm
new file mode 100644
index 00000000000..ae4e48d52eb
--- /dev/null
+++ b/modular_nova/modules/customization/game/objects/items/devices/crutch.dm
@@ -0,0 +1,12 @@
+/obj/item/cane/crutch
+ name = "crutch"
+ desc = "A crutch usually employed by those recovering from a leg injury."
+ icon = 'modular_nova/master_files/icons/obj/staff.dmi'
+ icon_state = "crutch"
+ inhand_icon_state = "crutch"
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/melee_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/melee_righthand.dmi'
+ custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6)
+ attack_verb_continuous = list("bludgeons", "whacks", "thrashes")
+ attack_verb_simple = list("bludgeon", "whack", "thrash")
+
diff --git a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm b/modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm
similarity index 91%
rename from modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm
rename to modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm
index c059b04f4a1..fa7bf87bf9e 100644
--- a/modular_skyrat/modules/customization/game/objects/items/devices/ttsdevice.dm
+++ b/modular_nova/modules/customization/game/objects/items/devices/ttsdevice.dm
@@ -10,13 +10,13 @@
/obj/item/ttsdevice/attack_self(mob/user)
user.balloon_alert_to_viewers("typing...", "started typing...")
- playsound(src, 'modular_skyrat/master_files/sound/items/tts/started_type.ogg', 50, TRUE)
+ playsound(src, 'modular_nova/master_files/sound/items/tts/started_type.ogg', 50, TRUE)
var/str = tgui_input_text(user, "What would you like the device to say?", "Say Text", "", MAX_MESSAGE_LEN, encode = FALSE)
if(QDELETED(src) || !user.can_perform_action(src))
return
if(!str)
user.balloon_alert_to_viewers("stops typing", "stopped typing")
- playsound(src, 'modular_skyrat/master_files/sound/items/tts/stopped_type.ogg', 50, TRUE)
+ playsound(src, 'modular_nova/master_files/sound/items/tts/stopped_type.ogg', 50, TRUE)
return
src.say(str)
str = null
diff --git a/modular_skyrat/modules/customization/game/objects/items/instruments.dm b/modular_nova/modules/customization/game/objects/items/instruments.dm
similarity index 76%
rename from modular_skyrat/modules/customization/game/objects/items/instruments.dm
rename to modular_nova/modules/customization/game/objects/items/instruments.dm
index 8f9bafe3ef9..4803352859c 100644
--- a/modular_skyrat/modules/customization/game/objects/items/instruments.dm
+++ b/modular_nova/modules/customization/game/objects/items/instruments.dm
@@ -3,11 +3,11 @@
/obj/item/instrument/musicalduffy
name = "suspicious musical moth"
desc = "A familiar looking moth sporting a fancy pair of glasses and a piano that harmonizes the screaming agony of moths."
- icon = 'modular_skyrat/master_files/icons/obj/instruments.dmi'
+ icon = 'modular_nova/master_files/icons/obj/instruments.dmi'
icon_state = "musical_duffy"
allowed_instrument_ids = "mothscream"
attack_verb_continuous = list("flutters", "flaps", "squeaks")
attack_verb_simple = list("flutter", "flap", "squeak")
w_class = WEIGHT_CLASS_TINY
force = 0
- hitsound = 'modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg'
+ hitsound = 'modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg'
diff --git a/modular_skyrat/modules/customization/game/objects/items/plushes.dm b/modular_nova/modules/customization/game/objects/items/plushes.dm
similarity index 88%
rename from modular_skyrat/modules/customization/game/objects/items/plushes.dm
rename to modular_nova/modules/customization/game/objects/items/plushes.dm
index 1d6349c5651..320cb07345b 100644
--- a/modular_skyrat/modules/customization/game/objects/items/plushes.dm
+++ b/modular_nova/modules/customization/game/objects/items/plushes.dm
@@ -4,7 +4,7 @@
// // MODULAR PLUSHES
/obj/item/toy/plush/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/plushes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/plushes.dmi'
inhand_icon_state = null
/obj/item/toy/plush/skyrat/borbplushie
@@ -13,7 +13,7 @@
icon_state = "plushie_borb"
attack_verb_continuous = list("pecks", "peeps")
attack_verb_simple = list("peck", "peep")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1)
/obj/item/toy/plush/skyrat/deer
name = "deer plushie"
@@ -21,7 +21,7 @@
icon_state = "plushie_deer"
attack_verb_continuous = list("headbutts", "boops", "bapps", "bumps")
attack_verb_simple = list("headbutt", "boop", "bap", "bump")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
/obj/item/toy/plush/skyrat/fermis
name = "medcat plushie"
@@ -29,7 +29,7 @@
icon_state = "plushie_fermis"
attack_verb_continuous = list("cuddles", "petpatts", "wigglepurrs")
attack_verb_simple = list("cuddle", "petpatt", "wigglepurr")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
gender = FEMALE
/obj/item/toy/plush/skyrat/fermis/chen
@@ -96,7 +96,7 @@
icon_state = "plushie_fox"
attack_verb_continuous = list("geckers", "boops", "nuzzles")
attack_verb_simple = list("gecker", "boop", "nuzzle")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
/obj/item/toy/plush/skyrat/duffmoth
name = "suspicious moth plushie"
@@ -104,7 +104,7 @@
icon_state = "plushie_duffy"
attack_verb_continuous = list("flutters", "flaps", "squeaks")
attack_verb_simple = list("flutter", "flap", "squeak")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg'= 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg'= 1)
gender = MALE
/obj/item/toy/plush/skyrat/leaplush
@@ -113,7 +113,7 @@
icon_state = "plushie_lea"
attack_verb_continuous = list("headbutts", "plaps")
attack_verb_simple = list("headbutt", "plap")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg' = 1)
gender = FEMALE
/obj/item/toy/plush/skyrat/sarmieplush
@@ -122,7 +122,7 @@
icon_state = "plushie_sarmie"
attack_verb_continuous = list("baps")
attack_verb_simple = list("bap")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1)
gender = MALE
/obj/item/toy/plush/skyrat/sharknet
@@ -132,7 +132,7 @@
attack_verb_continuous = list("cuddles", "squishes", "wehs")
attack_verb_simple = list("cuddle", "squish", "weh")
w_class = WEIGHT_CLASS_NORMAL
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/slime_squish.ogg' = 1)
young = TRUE //No.
/obj/item/toy/plush/sharknet/Initialize(mapload)
@@ -145,7 +145,7 @@
icon_state = "plushie_pinta"
attack_verb_continuous = list("bonks", "snugs")
attack_verb_simple = list("bonk", "snug")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/slime_squish.ogg' = 1)
young = TRUE //No.
/obj/item/toy/plush/skyrat/szaplush
@@ -154,7 +154,7 @@
icon_state = "plushie_sza"
attack_verb_continuous = list("scuttles", "chitters", "bites")
attack_verb_simple = list("scuttle", "chitter", "bite")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg' = 1)
young = TRUE //No.
/obj/item/toy/plush/skyrat/riffplush
@@ -171,7 +171,7 @@
icon_state = "ianplushie"
attack_verb_continuous = list("barks", "woofs", "wags his tail at")
attack_verb_simple = list("lick", "nuzzle", "bite")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/bark2.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/bark2.ogg' = 1)
young = TRUE //No.
/obj/item/toy/plush/skyrat/ian/small
@@ -192,7 +192,7 @@
icon_state = "blackcat"
attack_verb_continuous = list("cuddles", "meows", "hisses")
attack_verb_simple = list("cuddle", "meow", "hiss")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
/obj/item/toy/plush/skyrat/cat/tux
name = "tux cat plushie"
@@ -208,7 +208,7 @@
icon_state = "plushie_seadu"
attack_verb_continuous = list("beeps", "sneeds", "swords")
attack_verb_simple = list("beep", "sneed", "sword")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg' = 1,'modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/synth_yes.ogg' = 1,'modular_nova/modules/emotes/sound/emotes/synth_no.ogg' = 1)
/obj/item/toy/plush/skyrat/lizzyplush
name = "odd yoga lizzy plushie"
@@ -216,7 +216,7 @@
icon_state = "plushie_lizzy"
attack_verb_continuous = list("wehs")
attack_verb_simple = list("weh")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1)
/obj/item/toy/plush/skyrat/mechanic_fox
name = "mechanist fox plushie"
@@ -224,7 +224,7 @@
icon_state = "plushie_cali"
attack_verb_continuous = list("fixes", "updates", "hugs")
attack_verb_simple = list("fix", "update", "hug")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
/obj/item/toy/plush/skyrat/tribal_salamander
name = "tribal salamander plushie"
@@ -232,7 +232,7 @@
icon_state = "plushie_azu"
attack_verb_continuous = list("wurbles at", "warbles at")
attack_verb_simple = list("wurbles at", "warbles at")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/wurble.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/wurble.ogg' = 1)
/obj/item/toy/plush/skyrat/commanding_teshari
name = "commanding teshari plushy"
@@ -240,7 +240,7 @@
icon_state = "plushie_alara"
attack_verb_continuous = list("peeps", "wurbles", "hugs")
attack_verb_simple = list("peeps", "wurbles", "hugs")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1)
/obj/item/toy/plush/skyrat/breakdancing_bird
name = "breakdancing bird plushie"
@@ -256,7 +256,7 @@
icon_state = "plushie_toko"
attack_verb_continuous = list("rustles at", "threatens", "skreks at")
attack_verb_simple = list("rustle at", "threaten", "skrek at")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/voxrustle.ogg' = 1)
/obj/item/toy/plush/skyrat/blue_dog
name = "blue dog plushie"
@@ -264,7 +264,7 @@
icon_state = "plushie_cobalt"
attack_verb_continuous = list("barks at", "borks at", "woofs at")
attack_verb_simple = list("bark at", "bork at", "woof at")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/bark1.ogg'=1, 'modular_skyrat/modules/emotes/sound/voice/bark2.ogg'=1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/bark1.ogg'=1, 'modular_nova/modules/emotes/sound/voice/bark2.ogg'=1)
/obj/item/toy/plush/skyrat/engi_snek
name = "engineering snek plushie"
@@ -296,7 +296,7 @@
icon_state = "plushie_skyy"
attack_verb_continuous = list("kisses", "nuzzles", "cuddles", "purrs against")
attack_verb_simple = list("kiss", "nuzzle", "cuddle", "purr against")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/nya.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/nya.ogg' = 1)
/obj/item/toy/plush/skyrat/igneous_synth
name = "igneous synth plushie"
@@ -304,7 +304,7 @@
icon_state = "plushie_granite"
attack_verb_continuous = list("bleps", "SQUEEZES", "pies")
attack_verb_simple = list("blep", "SQUEEZE", "pie")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1)
/obj/item/toy/plush/skyrat/edgy_bird
name = "edgy birb plushie"
@@ -312,7 +312,7 @@
icon_state = "plushie_koto"
attack_verb_continuous = list("pecks", "teleports behind", "caws at")
attack_verb_simple = list("peck", "teleport behind", "caw at")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/caw.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/caw.ogg' = 1)
/obj/item/toy/plush/skyrat/tree_ferret
name = "tree ferret plushy"
@@ -333,7 +333,7 @@
icon_state = "teasefox"
attack_verb_continuous = list("sneezes on", "detains", "tazes")
attack_verb_simple = list("sneeze on", "detain", "taze")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg' = 1)
/obj/item/toy/plush/skyrat/xixi
name = "familiar looking harpy plushie"
@@ -341,7 +341,7 @@
icon_state = "plushie_xixi"
attack_verb_continuous = list("caws", "skrees", "pecks")
attack_verb_simple = list("caw", "skree", "peck")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/peep_once.ogg' = 1,'modular_skyrat/modules/emotes/sound/voice/caw.ogg' = 1,'modular_skyrat/modules/emotes/sound/voice/bawk.ogg' = 1,'modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/peep_once.ogg' = 1,'modular_nova/modules/emotes/sound/voice/caw.ogg' = 1,'modular_nova/modules/emotes/sound/voice/bawk.ogg' = 1,'modular_nova/modules/emotes/sound/emotes/voxscream.ogg' = 1)
/obj/item/toy/plush/skyrat/zapp
name = "Lil' Zapp"
@@ -440,7 +440,7 @@
icon_state = "plushie_roselia"
attack_verb_continuous = list("hugs")
attack_verb_simple = list("hug")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/merp.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/merp.ogg' = 1)
young = FALSE
/obj/item/toy/plush/skyrat/chunko
@@ -471,7 +471,7 @@
gender = FEMALE
attack_verb_continuous = list("pats", "hugs", "scolds", "pets")
attack_verb_simple = list("pat", "hug", "scold", "pet")
- squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg' = 1,)
+ squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg' = 1,)
responses = list("Rabbits are prey animals and are therefore constantly aware of their surroundings.", "Things to jump up on (they like to be in high places)", "become a rabbit today!", "Be cunning and full of tricks...", "Subscription confirmed! Thank you for choosing RABBITFACTS +TM+!", "Holland Lops are a breed of rabbit originating in the Netherlands.", "Rabbits may need medication to keep themselves healthy, and that's ok! Make sure to take yours too!", "rabbits really liked this product", "A healthy rabbit diet includes fresh vegetables.", "Rabbits do not hibernate. Their schedules are much too busy.", "the rate of bunnies is measured by RPB (rabbits per bunny)", )
/obj/item/toy/plush/skyrat/chunko/andrew
@@ -481,7 +481,7 @@
gender = MALE
attack_verb_continuous = list("pats", "hugs", "scolds", "pets")
attack_verb_simple = list("pat", "hug", "scold", "pet")
- squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg' = 1,)
+ squeak_override = list('sound/creatures/mousesqueek.ogg' = 1, 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg' = 1,)
// All lowercase messages are intentional
responses = list("bunny who you best pray you never encounter, lest you suffer a fate worse than death.", "this is a bunny!", "I wonder what would happen if you took bunnies, and combined them with rabbits, and merged their properties and characteristics. It's something to think about.", "If you're cold, they're cold. Give them the deed to your house.", "bunny that goes yeah! woo! yeah! woo! yeah! woo! yeah! woo! yeah! woo! yeah!", "the bunnies are beyond my comprehension", "it's a bunny thing, you wouldn't get it", "this bunny has an unfathomable power level", "%pull the string and I'll bink at you...I'm your bunny.", "Bunny (1954)", "the bunny that pulls the strings....", )
@@ -492,7 +492,7 @@
gender = FEMALE
attack_verb_continuous = list("slashes", "dissects", "yawns", "smokes")
attack_verb_simple = list("slash", "dissect", "yawn", "smoke")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg' = 1, 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg' = 1, 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg' = 1, 'modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg' = 1, 'modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg' = 1)
responses = list("The human body can survive three weeks without skiiiiiiiiiiin.", "The thigh bone is connected to the hip boooooooooone.", "Yeeeessss?", "Helloooooo.", "Don't be such a baby, ribs grow baaaaaaaaaack.",)
// Donation reward for tobjv
@@ -531,7 +531,7 @@
desc = "The plushie of a celestial in the known universe."
icon_state = "plushie_star"
gender = FEMALE
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/trills.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/trills.ogg' = 1)
// Donation reward for SRQ
/obj/item/toy/plush/skyrat/plushie_chiara
@@ -581,7 +581,7 @@
icon_state = "plush_lonie"
attack_verb_continuous = list("snuggles", "nibbles", "awoos", "tail whaps")
attack_verb_simple = list("snuggle", "nibble", "awoo", "tail whap")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/merowr.ogg' = 1)
//Donation reward for syntax1112
/obj/item/toy/plush/skyrat/plushie_syntax1112
@@ -590,7 +590,7 @@
icon_state = "fuzz_bunny"
attack_verb_continuous = list("nibbles", "squeaks", "nose twitches", "thumps", "whops")
attack_verb_simple = list("nibble", "squeak", "nose twitch", "thump", "whop")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg' = 1)
// Donation reward for SomeRandomOwl
/obj/item/toy/plush/skyrat/snow_owl
@@ -599,7 +599,7 @@
icon_state = "plushie_owl"
attack_verb_continuous = list("hoots", "screms", "hugs")
attack_verb_simple = list("hoot", "screm", "hug")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/hoot.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/hoot.ogg' = 1)
// Donation reward for Jolly66
/obj/item/toy/plush/skyrat/derg_plushie
@@ -609,7 +609,7 @@
icon_state = "plushie_derg"
attack_verb_continuous = list("wehs", "wehs softly", "stutters")
attack_verb_simple = list("weh", "weh softly", "stutter")
- squeak_override = list('modular_skyrat/modules/emotes/sound/voice/weh.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/voice/weh.ogg' = 1)
// Donation reward for Gofawful5
/obj/item/toy/plush/skyrat/tracy
@@ -618,7 +618,7 @@
icon_state = "plush_tracy"
attack_verb_continuous = list("expands")
attack_verb_simple = list("expand")
- squeak_override = list('modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg' = 1)
+ squeak_override = list('modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg' = 1)
gender = FEMALE
//Donation reward for Frixit
@@ -628,7 +628,7 @@
icon_state = "plushie_synthia"
attack_verb_continuous = list("blushes", "hugs", "whips")
attack_verb_simple = list("blush", "hug", "whip")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1)
//Donation reward for Kitsun
/obj/item/toy/plush/skyrat/jecca
@@ -637,7 +637,7 @@
icon_state = "plushie_jecca"
attack_verb_continuous = list("sighs")
attack_verb_simple = list("sigh")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg' = 1)
gender = FEMALE
//Donation reward for BriareosBlue
@@ -647,7 +647,7 @@
icon_state = "plushie_courier"
attack_verb_continuous = list("delivers", "export scans", "dwoops", "bwuhs", "stamps")
attack_verb_simple = list("deliver", "export scan", "dwoop", "bwuh", "stamp")
- squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg' = 1)
+ squeak_override = list('modular_nova/modules/emotes/sound/emotes/twobeep.ogg' = 1)
//Donation reward for olirant
/obj/item/toy/plush/skyrat/plush_janiborg
diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg
similarity index 100%
rename from modular_skyrat/modules/customization/game/objects/items/sound/deerplush.ogg
rename to modular_nova/modules/customization/game/objects/items/sound/deerplush.ogg
diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg
similarity index 100%
rename from modular_skyrat/modules/customization/game/objects/items/sound/leaplush.ogg
rename to modular_nova/modules/customization/game/objects/items/sound/leaplush.ogg
diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg b/modular_nova/modules/customization/game/objects/items/sound/merowr.ogg
similarity index 100%
rename from modular_skyrat/modules/customization/game/objects/items/sound/merowr.ogg
rename to modular_nova/modules/customization/game/objects/items/sound/merowr.ogg
diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg b/modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg
similarity index 100%
rename from modular_skyrat/modules/customization/game/objects/items/sound/spiderplush.ogg
rename to modular_nova/modules/customization/game/objects/items/sound/spiderplush.ogg
diff --git a/modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg b/modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg
similarity index 100%
rename from modular_skyrat/modules/customization/game/objects/items/sound/tracymrowr.ogg
rename to modular_nova/modules/customization/game/objects/items/sound/tracymrowr.ogg
diff --git a/modular_nova/modules/customization/game/objects/items/storage/belt.dm b/modular_nova/modules/customization/game/objects/items/storage/belt.dm
new file mode 100644
index 00000000000..a4743022141
--- /dev/null
+++ b/modular_nova/modules/customization/game/objects/items/storage/belt.dm
@@ -0,0 +1,40 @@
+/*
+* Messenger belt bag
+*/
+
+/obj/item/storage/belt/mailbelt
+ name = "messenger belt bag"
+ desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is postal blue, perfect for standing out!"
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ icon_state = "mailbelt"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
+ worn_icon_state = "mailbelt"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+
+/obj/item/storage/belt/mailbelt/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 14
+ atom_storage.numerical_stacking = TRUE
+ atom_storage.set_holdable(list(
+ /obj/item/mail,
+ /obj/item/mail/envelope,
+ /obj/item/paper
+ ))
+
+/obj/item/storage/belt/mailbelt/white
+ name = "white belt bag"
+ desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is a pearly white."
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ icon_state = "mailbelt_white"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
+ worn_icon_state = "mailbelt_white"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
+
+/obj/item/storage/belt/mailbelt/leather
+ name = "leather belt bag"
+ desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is made out of a synthetic leather blend."
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ icon_state = "mailbelt_leather"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
+ worn_icon_state = "mailbelt_leather"
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
diff --git a/modular_nova/modules/customization/game/objects/items/storage/rings.dm b/modular_nova/modules/customization/game/objects/items/storage/rings.dm
new file mode 100644
index 00000000000..6973b7a0edb
--- /dev/null
+++ b/modular_nova/modules/customization/game/objects/items/storage/rings.dm
@@ -0,0 +1,28 @@
+/*
+ * Ring Box
+ */
+
+/obj/item/storage/fancy/ringbox
+ name = "ring box"
+ desc = "A tiny box covered in soft red felt made for holding rings."
+ icon = 'modular_nova/master_files/icons/obj/ring.dmi'
+ icon_state = "gold ringbox"
+ base_icon_state = "gold ringbox"
+ w_class = WEIGHT_CLASS_TINY
+ spawn_type = /obj/item/clothing/gloves/ring
+ spawn_count = 1
+
+/obj/item/storage/fancy/ringbox/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 1
+ atom_storage.can_hold = typecacheof(list(/obj/item/clothing/gloves/ring))
+
+/obj/item/storage/fancy/ringbox/diamond
+ icon_state = "diamond ringbox"
+ base_icon_state = "diamond ringbox"
+ spawn_type = /obj/item/clothing/gloves/ring/diamond
+
+/obj/item/storage/fancy/ringbox/silver
+ icon_state = "silver ringbox"
+ base_icon_state = "silver ringbox"
+ spawn_type = /obj/item/clothing/gloves/ring/silver
diff --git a/modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm b/modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm
similarity index 82%
rename from modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm
rename to modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm
index a75f89083ae..81cada065ab 100644
--- a/modular_skyrat/modules/customization/game/objects/items/tanks/n2_tanks.dm
+++ b/modular_nova/modules/customization/game/objects/items/tanks/n2_tanks.dm
@@ -18,10 +18,10 @@
air_contents.gases[/datum/gas/nitrogen][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
/obj/item/tank/internals/nitrogen/belt
- icon = 'modular_skyrat/master_files/icons/obj/tank.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/belt.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi'
+ icon = 'modular_nova/master_files/icons/obj/tank.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/belt.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/equipment/tanks_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/equipment/tanks_righthand.dmi'
icon_state = "nitrogen_extended"
inhand_icon_state = "nitrogen"
slot_flags = ITEM_SLOT_BELT
diff --git a/modular_skyrat/modules/customization/modules/client/augment/_augment.dm b/modular_nova/modules/customization/modules/client/augment/_augment.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/client/augment/_augment.dm
rename to modular_nova/modules/customization/modules/client/augment/_augment.dm
diff --git a/modular_skyrat/modules/customization/modules/client/augment/implants.dm b/modular_nova/modules/customization/modules/client/augment/implants.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/client/augment/implants.dm
rename to modular_nova/modules/customization/modules/client/augment/implants.dm
diff --git a/modular_skyrat/modules/customization/modules/client/augment/limbs.dm b/modular_nova/modules/customization/modules/client/augment/limbs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/client/augment/limbs.dm
rename to modular_nova/modules/customization/modules/client/augment/limbs.dm
diff --git a/modular_skyrat/modules/customization/modules/client/augment/organs.dm b/modular_nova/modules/customization/modules/client/augment/organs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/client/augment/organs.dm
rename to modular_nova/modules/customization/modules/client/augment/organs.dm
diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_nova/modules/customization/modules/client/preferences.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/client/preferences.dm
rename to modular_nova/modules/customization/modules/client/preferences.dm
diff --git a/modular_nova/modules/customization/modules/clothing/accessories.dm b/modular_nova/modules/customization/modules/clothing/accessories.dm
new file mode 100644
index 00000000000..ae078ea7ebb
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/accessories.dm
@@ -0,0 +1,32 @@
+/obj/item/clothing/accessory/skullcodpiece/armourless
+ armor_type = /datum/armor/none
+
+/obj/item/clothing/accessory/talisman/armourless
+ armor_type = /datum/armor/none
+
+/obj/item/clothing/accessory/skilt/armourless
+ armor_type = /datum/armor/none
+
+/obj/item/clothing/accessory/armband/cargo/nonsec
+ name = "brown armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is brown."
+
+/obj/item/clothing/accessory/armband/engine/nonsec
+ name = "orange armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is orange with a reflective strip!"
+
+/obj/item/clothing/accessory/armband/science/nonsec
+ name = "purple armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is purple."
+
+/obj/item/clothing/accessory/armband/hydro/nonsec
+ name = "green-blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is green and blue."
+
+/obj/item/clothing/accessory/armband/med/nonsec
+ name = "white armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white."
+
+/obj/item/clothing/accessory/armband/medblue/nonsec
+ name = "white-blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is white and blue."
diff --git a/modular_nova/modules/customization/modules/clothing/ears/ears.dm b/modular_nova/modules/customization/modules/clothing/ears/ears.dm
new file mode 100644
index 00000000000..6dd0039dc51
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/ears/ears.dm
@@ -0,0 +1,35 @@
+/obj/item/clothing/ears/headphones
+ name = "headphones"
+ desc = "Unce unce unce unce. Boop!"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/ears.dmi'
+ icon_state = "headphones"
+ inhand_icon_state = "headphones"
+ slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
+ actions_types = list(/datum/action/item_action/toggle_headphones)
+ var/headphones_on = FALSE
+ custom_price = 60
+
+/obj/item/clothing/ears/headphones/Initialize(mapload)
+ . = ..()
+ update_icon()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/clothing/ears/headphones/update_icon_state()
+ . = ..()
+ icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
+ inhand_icon_state = "[initial(inhand_icon_state)]_[headphones_on? "on" : "off"]"
+
+/obj/item/clothing/ears/headphones/proc/toggle(owner)
+ headphones_on = !headphones_on
+ update_icon()
+ to_chat(owner, span_notice("You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]"))
+
+/datum/action/item_action/toggle_headphones
+ name = "Toggle Headphones"
+ desc = "UNTZ UNTZ UNTZ"
+
+/datum/action/item_action/toggle_headphones/Trigger(trigger_flags)
+ var/obj/item/clothing/ears/headphones/H = target
+ if(istype(H))
+ H.toggle(owner)
diff --git a/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm b/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm
new file mode 100644
index 00000000000..bc0920f1675
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/glasses/glasses.dm
@@ -0,0 +1,86 @@
+/obj/item/clothing/glasses //Code to let you switch the side your eyepatch is on! Woo! Just an explanation, this is added to the base glasses so it works on eyepatch-huds too
+ var/can_switch_eye = FALSE //Having this default to false means that its easy to make sure this doesnt apply to any pre-existing items
+
+
+/obj/item/clothing/glasses/examine(mob/user)
+ . = ..()
+ if(can_switch_eye)
+ . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye."
+
+
+/* ---------- Items Below ----------*/
+
+/obj/item/clothing/glasses/eyepatch //Re-defined here for ease with the left/right switch
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon_state = "eyepatch"
+ base_icon_state = "eyepatch"
+ can_switch_eye = TRUE
+
+/obj/item/clothing/glasses/eyepatch/wrap
+ name = "eye wrap"
+ desc = "A glorified bandage. At least this one's actually made for your head..."
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon_state = "eyewrap"
+ base_icon_state = "eyewrap"
+
+/obj/item/clothing/glasses/eyepatch/white
+ name = "white eyepatch"
+ desc = "This is what happens when a pirate gets a PhD."
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon_state = "eyepatch_white"
+ base_icon_state = "eyepatch_white"
+
+///GLASSSES
+/obj/item/clothing/glasses/thin
+ name = "thin glasses"
+ desc = "Often seen staring down at someone taking a book."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ icon_state = "glasses_thin"
+ inhand_icon_state = "glasses"
+ clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
+
+/obj/item/clothing/glasses/regular/betterunshit
+ name = "modern glasses"
+ desc = "After Nerd. Co went bankrupt for tax evasion and invasion, they were bought out by Dork.Co, who revamped their classic design."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ icon_state = "glasses_alt"
+ inhand_icon_state = "glasses"
+ clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
+
+/obj/item/clothing/glasses/kim
+ name = "binoclard lenses"
+ desc = "Stylish round lenses subtly shaded for your protection and criminal discomfort."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ icon_state = "binoclard_lenses"
+ inhand_icon_state = "glasses"
+ clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
+
+/obj/item/clothing/glasses/trickblindfold/hamburg
+ name = "thief visor"
+ desc = "Perfect for stealing hamburgers from innocent multinational capitalist monopolies."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ icon_state = "thiefmask"
+
+///GOGGLES
+/obj/item/clothing/glasses/biker
+ name = "biker goggles"
+ desc = "Brown leather riding gear, You can leave, just give us the gas."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ icon_state = "biker"
+ inhand_icon_state = "welding-g"
+ clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
+
+// Like sunglasses, but without any protection
+/obj/item/clothing/glasses/fake_sunglasses
+ name = "low-UV sunglasses"
+ desc = "A cheaper brand of sunglasses rated for much lower UV levels. Offers the user no protection against bright lights."
+ icon_state = "sun"
+ inhand_icon_state = "sunglasses"
diff --git a/modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm b/modular_nova/modules/customization/modules/clothing/glasses/hud.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm
rename to modular_nova/modules/customization/modules/clothing/glasses/hud.dm
index 69df3d6539c..7dc6e9bfb19 100644
--- a/modular_skyrat/modules/customization/modules/clothing/glasses/hud.dm
+++ b/modular_nova/modules/customization/modules/clothing/glasses/hud.dm
@@ -1,13 +1,13 @@
/obj/item/clothing/glasses/hud/eyepatch
name = "eyepatch HUD"
desc = "A simple HUD designed to interface with optical nerves of a lost eye. This one seems busted."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
icon_state = "hudpatch"
base_icon_state = "hudpatch"
inhand_icon_state = "sunhudmed"
uses_advanced_reskins = TRUE
- can_switch_eye = TRUE //See modular_skyrat\modules\customization\modules\clothing\glasses\glasses.dm
+ can_switch_eye = TRUE //See modular_nova\modules\customization\modules\clothing\glasses\glasses.dm
actions_types = list(/datum/action/item_action/flip)
@@ -119,8 +119,8 @@
/obj/item/clothing/glasses/trickblindfold/obsolete
name = "obsolete fake blindfold"
desc = "An ornate fake blindfold, devoid of any electronics. It's belived to be originally worn by members of bygone military force that sought to protect humanity."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
icon_state = "obsoletefold"
base_icon_state = "obsoletefold"
can_switch_eye = TRUE
diff --git a/modular_nova/modules/customization/modules/clothing/hands/hands.dm b/modular_nova/modules/customization/modules/clothing/hands/hands.dm
new file mode 100644
index 00000000000..1daa85fa65e
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/hands/hands.dm
@@ -0,0 +1,58 @@
+/obj/item/clothing/gloves/evening
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ name = "evening gloves"
+ desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish."
+ icon_state = "evening"
+ strip_delay = 40
+ equip_delay_other = 20
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+
+/obj/item/clothing/gloves/kim
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ name = "aerostatic gloves"
+ desc = "Vivid red gloves that exude a mysterious style, sadly not the best for gardening, or getting bodies out of trees."
+ icon_state = "aerostatic_gloves"
+
+/obj/item/clothing/gloves/military
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ name = "military gloves"
+ desc = "Tactical gloves made for military personnel, they are thin to allow easy operation of most firearms."
+ icon_state = "military_gloves"
+ siemens_coefficient = 0.4
+ strip_delay = 60
+ equip_delay_other = 60
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = NONE
+
+/obj/item/clothing/gloves/bracer/wraps
+ name = "cloth arm wraps"
+ desc = "Cloth bracers, the colour all left up to the choice of the wearer."
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
+ icon_state = "arm_wraps"
+ inhand_icon_state = "greyscale_gloves"
+ greyscale_config = /datum/greyscale_config/armwraps
+ greyscale_config_worn = /datum/greyscale_config/armwraps/worn
+ greyscale_colors = "#FFFFFF"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/gloves
+ worn_icon_teshari = TESHARI_HANDS_ICON
+
+/obj/item/clothing/gloves/maid_arm_covers
+ name = "maid arm covers"
+ desc = "Maid in China."
+ icon_state = "maid_arm_covers"
+ greyscale_config = /datum/greyscale_config/maid_arm_covers
+ greyscale_config_worn = /datum/greyscale_config/maid_arm_covers/worn
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_colors = "#7b9ab5#edf9ff"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
diff --git a/modular_nova/modules/customization/modules/clothing/hands/rings.dm b/modular_nova/modules/customization/modules/clothing/hands/rings.dm
new file mode 100644
index 00000000000..4a615062f8d
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/hands/rings.dm
@@ -0,0 +1,33 @@
+/obj/item/clothing/gloves/ring
+ icon = 'modular_nova/master_files/icons/obj/ring.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ name = "gold ring"
+ desc = "A tiny gold ring, sized to wrap around a finger."
+ gender = NEUTER
+ w_class = WEIGHT_CLASS_TINY
+ icon_state = "ringgold"
+ inhand_icon_state = null
+ worn_icon_state = "gring"
+ body_parts_covered = 0
+ strip_delay = 4 SECONDS
+ clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH)
+
+/obj/item/clothing/gloves/ring/suicide_act(mob/living/carbon/user)
+ user.visible_message(span_suicide("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!"))
+ return OXYLOSS
+
+
+/obj/item/clothing/gloves/ring/diamond
+ name = "diamond ring"
+ desc = "An expensive ring, studded with a diamond. Cultures have used these rings in courtship for a millenia."
+ icon_state = "ringdiamond"
+ worn_icon_state = "dring"
+
+/obj/item/clothing/gloves/ring/diamond/attack_self(mob/user)
+ user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src]."))
+
+/obj/item/clothing/gloves/ring/silver
+ name = "silver ring"
+ desc = "A tiny silver ring, sized to wrap around a finger."
+ icon_state = "ringsilver"
+ worn_icon_state = "sring"
diff --git a/modular_nova/modules/customization/modules/clothing/head/costume.dm b/modular_nova/modules/customization/modules/clothing/head/costume.dm
new file mode 100644
index 00000000000..cf255de9dbb
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/head/costume.dm
@@ -0,0 +1,118 @@
+/obj/item/clothing/head/costume/skyrat
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+ dog_fashion = null
+
+/obj/item/clothing/head/costume/skyrat/maid
+ name = "maid headband"
+ desc = "Maid in China."
+ icon_state = "maid"
+
+/obj/item/clothing/head/costume/skyrat/papakha
+ name = "papakha"
+ desc = "A big wooly clump of fur designed to go on your head."
+ icon_state = "papakha"
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+
+/obj/item/clothing/head/costume/skyrat/papakha/white
+ icon_state = "papakha_white"
+
+/obj/item/clothing/head/costume/skyrat/flowerpin
+ name = "flower pin"
+ desc = "A small, colourable flower pin"
+ icon_state = "flowerpin"
+ greyscale_config = /datum/greyscale_config/flowerpin
+ greyscale_config_worn = /datum/greyscale_config/flowerpin/worn
+ greyscale_colors = "#FF0000"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/clothing/head/costume/skyrat/christmas
+ name = "christmas hat"
+ desc = "How festive!"
+ icon_state = "christmas"
+
+/obj/item/clothing/head/costume/skyrat/christmas/green
+ icon_state = "christmas_g"
+
+/obj/item/clothing/head/costume/skyrat/en //One of the two parts of E-N's butchering
+ name = "E-N suit head"
+ icon_state = "enhead"
+ supports_variations_flags = NONE
+
+//Ushankas
+//These have to be subtypes of TG's ushanka to inherit the toggleability
+/obj/item/clothing/head/costume/ushanka/sec
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
+ name = "security ushanka"
+ desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag."
+ icon_state = "ushankablue"
+ inhand_icon_state = "rus_ushanka"
+ upsprite = "ushankablueup"
+ downsprite = "ushankablue"
+ armor_type = /datum/armor/head_helmet
+
+//Pelts
+//Not made into a subtype of /costume but stored in the same file
+/obj/item/clothing/head/pelt
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/costume.dmi'
+ name = "bear pelt"
+ desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through it."
+ icon_state = "bearpelt_brown"
+ inhand_icon_state = "cowboy_hat_brown"
+ cold_protection = CHEST|HEAD
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/head/pelt/black
+ icon_state = "bearpelt_black"
+ inhand_icon_state = "cowboy_hat_black"
+
+/obj/item/clothing/head/pelt/white
+ icon_state = "bearpelt_white"
+ inhand_icon_state = "cowboy_hat_white"
+
+/obj/item/clothing/head/pelt/tiger
+ name = "shiny tiger pelt"
+ desc = "A vibrant tiger pelt, particularly fabulous."
+ icon_state = "tigerpelt_shiny"
+ inhand_icon_state = "cowboy_hat_grey"
+
+/obj/item/clothing/head/pelt/snow_tiger
+ name = "snow tiger pelt"
+ desc = "A pelt of a less vibrant tiger, but rather warm."
+ icon_state = "tigerpelt_snow"
+ inhand_icon_state = "cowboy_hat_white"
+
+/obj/item/clothing/head/pelt/pink_tiger
+ name = "pink tiger pelt"
+ desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties."
+ icon_state = "tigerpelt_pink"
+ inhand_icon_state = "cowboy_hat_red"
+
+/obj/item/clothing/head/pelt/wolf
+ name = "wolf pelt"
+ desc = "A fuzzy wolf pelt that demands respect as a hunter... assuming it wasn't just purchased, that is, for all the glory but none of the credit."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/pelt_big.dmi'
+ icon_state = "wolfpelt_brown"
+
+/obj/item/clothing/head/pelt/wolf/black
+ icon_state = "wolfpelt_gray"
+ inhand_icon_state = "cowboy_hat_grey"
+
+/obj/item/clothing/head/pelt/wolf/white
+ icon_state = "wolfpelt_white"
+ inhand_icon_state = "cowboy_hat_white"
+//End Pelts
+
+/obj/item/clothing/head/maid_headband
+ name = "maid headband"
+ desc = "Just like from one of those Chinese cartoons!"
+ icon_state = "maid_headband"
+ greyscale_config = /datum/greyscale_config/maid_headband
+ greyscale_config_worn = /datum/greyscale_config/maid_headband/worn
+ greyscale_colors = "#edf9ff"
+ flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_nova/modules/customization/modules/clothing/head/head.dm b/modular_nova/modules/customization/modules/clothing/head/head.dm
new file mode 100644
index 00000000000..b9a97bf9ccb
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/head/head.dm
@@ -0,0 +1,248 @@
+/obj/item/clothing/head/hats/flakhelm //Actually the M1 Helmet
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ name = "flak helmet"
+ icon_state = "m1helm"
+ inhand_icon_state = "helmet"
+ armor_type = /datum/armor/hats_flakhelm
+ desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell."
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/datum/armor/hats_flakhelm
+ bomb = 0.1
+ fire = -10
+ acid = -15
+ wound = 1
+
+/obj/item/clothing/head/hats/flakhelm/Initialize(mapload)
+ . = ..()
+
+ create_storage(storage_type = /datum/storage/pockets/tiny/spacenam)
+
+/datum/storage/pockets/tiny/spacenam
+ attack_hand_interact = TRUE //So you can actually see what you stuff in there
+
+//Cyberpunk PI Costume - Sprites from Eris
+/obj/item/clothing/head/fedora/det_hat/cybergoggles //Subset of detective fedora so that detectives dont have to sacrifice candycorns for style
+ name = "type-34C semi-enclosed headwear"
+ desc = "Civilian model of a popular helmet used by certain law enforcement agencies. It does not have any armor plating, but has a neo-laminated fiber lining."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "cyberpunkgoggle"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/intern/developer
+ name = "intern beancap"
+
+/obj/item/clothing/head/beret/sec/navywarden/syndicate
+ name = "master at arms' beret"
+ desc = "Surprisingly stylish, if you lived in a silent impressionist film."
+ greyscale_config = /datum/greyscale_config/beret_badge
+ greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
+ greyscale_colors = "#353535#AAAAAA"
+ icon_state = "beret_badge"
+ armor_type = /datum/armor/navywarden_syndicate
+ strip_delay = 60
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/datum/armor/navywarden_syndicate
+ melee = 40
+ bullet = 30
+ laser = 30
+ energy = 40
+ bomb = 25
+ fire = 30
+ acid = 50
+ wound = 6
+
+/obj/item/clothing/head/colourable_flatcap
+ name = "colourable flat cap"
+ desc = "You in the computers son? You work the computers?"
+ icon_state = "flatcap"
+ greyscale_config = /datum/greyscale_config/flatcap
+ greyscale_config_worn = /datum/greyscale_config/flatcap/worn
+ greyscale_colors = "#79684c"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/imperial
+ name = "grey naval officer cap"
+ desc = "A grey naval cap with a silver disk in the center."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "impcom"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/imperial/grey
+ name = "dark grey naval officer cap"
+ desc = "A dark grey naval cap with a silver disk in the center."
+ icon_state = "impcommand"
+
+/obj/item/clothing/head/hats/imperial/red
+ name = "red naval officer cap"
+ desc = "A red naval cap with a silver disk in the center."
+ icon_state = "impcap_red"
+
+/obj/item/clothing/head/hats/imperial/white
+ name = "white naval officer cap"
+ desc = "A white naval cap with a silver disk in the center."
+ icon_state = "impcap"
+
+/obj/item/clothing/head/hats/imperial/cap
+ name = "captain's naval officer cap"
+ desc = "A white naval cap with a silver disk in the center."
+ icon_state = "impcap"
+
+/obj/item/clothing/head/hats/imperial/hop
+ name = "head of personnel's naval officer cap"
+ desc = "An olive naval cap with a silver disk in the center."
+ icon_state = "imphop"
+
+/obj/item/clothing/head/hats/imperial/hos
+ name = "head of security's naval officer cap"
+ desc = "A tar black naval cap with a silver disk in the center."
+ icon_state = "imphos"
+ armor_type = /datum/armor/hats_hos
+
+/obj/item/clothing/head/hats/imperial/cmo
+ name = "chief medical officer's naval cap"
+ desc = "A teal naval cap with a silver disk in the center."
+ icon_state = "impcmo"
+
+/obj/item/clothing/head/hats/imperial/ce
+ name = "chief engineer's blast helmet"
+ desc = "Despite seeming like it's made of metal, it's actually a very cheap plastic.."
+ armor_type = /datum/armor/imperial_ce
+ clothing_flags = STOPSPRESSUREDAMAGE
+ heat_protection = HEAD
+ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+ icon_state = "impce"
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
+
+
+/datum/armor/imperial_ce
+ melee = 15
+ bullet = 5
+ laser = 20
+ energy = 10
+ bomb = 20
+ bio = 10
+ fire = 100
+ acid = 50
+ wound = 10
+
+/obj/item/clothing/head/hats/imperial/helmet
+ name = "blast helmet"
+ desc = "A sharp helmet with some goggles on the top. Unfortunately, both those and the helmet itself are made of flimsy plastic." //No armor moment
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "blast_helmet"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/imperial/helmet/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_icon, "goggles")
+
+/obj/item/clothing/head/soft/yankee
+ name = "fashionable baseball cap"
+ desc = "Rimmed and brimmed."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "yankeesoft"
+ soft_type = "yankee"
+ dog_fashion = /datum/dog_fashion/head/yankee
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/soft/yankee/rimless
+ name = "rimless fashionable baseball cap"
+ desc = "Rimless for her pleasure."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "yankeenobrimsoft"
+ soft_type = "yankeenobrim"
+
+/obj/item/clothing/head/fedora/brown //Fedora without detective's candy corn gimmick
+ name = "brown fedora"
+ icon_state = "detective"
+ inhand_icon_state = "det_hat"
+
+/obj/item/clothing/head/standalone_hood
+ name = "hood"
+ desc = "A hood with a bit of support around the neck so it actually stays in place, for all those times you want a hood without the coat."
+ icon = 'modular_nova/modules/GAGS/icons/head/head.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/head/head.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/head/head_teshari.dmi'
+ icon_state = "hood"
+ body_parts_covered = HEAD
+ cold_protection = HEAD
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ flags_inv = HIDEEARS|HIDEHAIR
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+ flags_1 = IS_PLAYER_COLORABLE_1
+ greyscale_colors = "#4e4a43#F1F1F1"
+ greyscale_config = /datum/greyscale_config/standalone_hood
+ greyscale_config_worn = /datum/greyscale_config/standalone_hood/worn
+ greyscale_config_worn_teshari = /datum/greyscale_config/standalone_hood/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/standalone_hood/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/standalone_hood/worn/oldvox
+
+/obj/item/clothing/head/beret/badge
+ name = "badged beret"
+ desc = "A beret. With a badge. What do you want, a dissertation? It's a hat."
+ icon_state = "beret_badge"
+ greyscale_config = /datum/greyscale_config/beret_badge
+ greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
+ greyscale_colors = "#972A2A#EFEFEF"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/head/costume/cowboyhat_old
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ name = "old cowboy hat"
+ desc = "An older cowboy hat, perfect for any outlaw, though lacking fancy colour magic."
+ icon_state = "cowboyhat_black"
+ inhand_icon_state = "cowboy_hat_black"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+//BOWS
+/obj/item/clothing/head/small_bow
+ name = "small bow"
+ desc = "A small compact bow that you can place on the side of your hair."
+ icon_state = "small_bow"
+ greyscale_config = /datum/greyscale_config/small_bow
+ greyscale_config_worn = /datum/greyscale_config/small_bow/worn
+ greyscale_colors = "#7b9ab5"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/head/small_bow/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_clothes, "small_bow_t")
+
+/obj/item/clothing/head/large_bow
+ name = "large bow"
+ desc = "A large bow that you can place on top of your head."
+ icon_state = "large_bow"
+ greyscale_config = /datum/greyscale_config/large_bow
+ greyscale_config_worn = /datum/greyscale_config/large_bow/worn
+ greyscale_colors = "#7b9ab5"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/head/back_bow
+ name = "back bow"
+ desc = "A large bow that you can place on the back of your head."
+ icon_state = "back_bow"
+ greyscale_config = /datum/greyscale_config/back_bow
+ greyscale_config_worn = /datum/greyscale_config/back_bow/worn
+ greyscale_colors = "#7b9ab5"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/head/sweet_bow
+ name = "sweet bow"
+ desc = "A sweet bow that you can place on the back of your head."
+ icon_state = "sweet_bow"
+ greyscale_config = /datum/greyscale_config/sweet_bow
+ greyscale_config_worn = /datum/greyscale_config/sweet_bow/worn
+ greyscale_colors = "#7b9ab5"
+ flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/head/jobs.dm b/modular_nova/modules/customization/modules/clothing/head/jobs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/head/jobs.dm
rename to modular_nova/modules/customization/modules/clothing/head/jobs.dm
diff --git a/modular_nova/modules/customization/modules/clothing/head/trek.dm b/modular_nova/modules/customization/modules/clothing/head/trek.dm
new file mode 100644
index 00000000000..4310e2de8f1
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/head/trek.dm
@@ -0,0 +1,21 @@
+//Trekkie Caps
+/obj/item/clothing/head/hats/caphat/parade/fedcap
+ name = "Officer's cap"
+ desc = "An officer's cap that demands discipline from the one who wears it."
+ icon_state = "fedcapofficer"
+ armor_type = /datum/armor/none
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+
+//Variants
+/obj/item/clothing/head/hats/caphat/parade/fedcap/medsci
+ icon_state = "fedcapsci"
+
+/obj/item/clothing/head/hats/caphat/parade/fedcap/eng
+ icon_state = "fedcapeng"
+
+/obj/item/clothing/head/hats/caphat/parade/fedcap/sec
+ icon_state = "fedcapsec"
+
+/obj/item/clothing/head/hats/caphat/parade/fedcap/black
+ icon_state = "fedcapblack"
diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm b/modular_nova/modules/customization/modules/clothing/masks/breath.dm
similarity index 79%
rename from modular_skyrat/modules/customization/modules/clothing/masks/breath.dm
rename to modular_nova/modules/customization/modules/clothing/masks/breath.dm
index 57365317844..5a9b9c14d2d 100644
--- a/modular_skyrat/modules/customization/modules/clothing/masks/breath.dm
+++ b/modular_nova/modules/customization/modules/clothing/masks/breath.dm
@@ -7,8 +7,8 @@
/obj/item/clothing/mask/balaclavaadjust
name = "adjustable balaclava"
desc = "Wider eyed and made of an elastic based material, this one seems like it can contort more."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "balaclava"
inhand_icon_state = "balaclava"
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
@@ -54,8 +54,8 @@
/obj/item/clothing/mask/balaclava/threehole
name = "three hole balaclava"
desc = "Tiocfaidh ar la."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "balaclavam"
inhand_icon_state = "balaclava"
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
@@ -64,28 +64,28 @@
/obj/item/clothing/mask/balaclava/threehole/green
name = "three hole green balaclava"
desc = "Tiocfaidh ar la."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "swatclavam"
inhand_icon_state = "balaclava"
/obj/item/clothing/mask/muzzle/ball
name = "ballgag"
desc = "I'm pretty fuckin far from okay."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "ballgag"
/obj/item/clothing/mask/muzzle/ring
name = "ring gag"
desc = "A mouth wrap seemingly designed to hold the mouth open."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "ringgag"
/obj/item/clothing/mask/surgical/greyscale
- icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
+ icon = 'modular_nova/modules/GAGS/icons/masks.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/masks.dmi'
flags_1 = IS_PLAYER_COLORABLE_1
greyscale_colors = "#AAE4DB"
greyscale_config = /datum/greyscale_config/sterile_mask
diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gas_filter.dm b/modular_nova/modules/customization/modules/clothing/masks/gas_filter.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/masks/gas_filter.dm
rename to modular_nova/modules/customization/modules/clothing/masks/gas_filter.dm
diff --git a/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm b/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm
new file mode 100644
index 00000000000..9891f8b453c
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/masks/gasmask.dm
@@ -0,0 +1,218 @@
+/obj/item/clothing/mask/gas/glass
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ name = "glass gas mask"
+ desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however."
+ icon_state = "gas_clear"
+ flags_inv = NONE
+
+/obj/item/clothing/mask/gas/atmos/glass
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ name = "advanced gas mask"
+ desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however."
+ icon_state = "gas_clear"
+ flags_inv = NONE
+
+/obj/item/clothing/mask/gas/alt
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ icon_state = "gas_alt2"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+
+/obj/item/clothing/mask/gas/german
+ name = "black gas mask"
+ desc = "A black gas mask. Are you my Mummy?"
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ icon_state = "m38_mask"
+
+/obj/item/clothing/mask/gas/hecu1
+ name = "modern gas mask"
+ desc = "MY. ASS. IS. HEAVY."
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ icon_state = "hecu"
+
+/obj/item/clothing/mask/gas/hecu2
+ name = "M40 gas mask"
+ desc = "A deprecated field protective mask developed during the 20th century in Sol-3. It's designed to protect from chemical agents, biological agents, and nuclear fallout particles. It does not protect the user from ammonia or from lack of oxygen, though the filter can be replaced with a tube for any air tank."
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/mask.dmi'
+ icon_state = "hecu2"
+
+/obj/item/clothing/mask/gas/soviet
+ name = "soviet gas mask"
+ desc = "A white gas mask with a green filter, there's a small sticker attached saying it's not got Asbestos anymore."
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ icon_state = "gp5_mask"
+
+/obj/item/clothing/mask/gas/clown_colourable
+ name = "colourable clown mask"
+ desc = "The face of pure evil, now multicoloured."
+ icon_state = "gags_mask"
+ clothing_flags = MASKINTERNALS
+ flags_cover = MASKCOVERSEYES
+ resistance_flags = FLAMMABLE
+ has_fov = FALSE
+ greyscale_config = /datum/greyscale_config/clown_mask
+ greyscale_config_worn = /datum/greyscale_config/clown_mask/worn
+ greyscale_colors = "#FFFFFF#F20018#0000FF#00CC00"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/mask/gas/clownbald
+ name = "bald clown mask"
+ desc = "HE'S BALD, HE'S FUCKIN' BALDIN!"
+ clothing_flags = MASKINTERNALS
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
+ icon_state = "baldclown"
+ inhand_icon_state = null
+ flags_cover = MASKCOVERSEYES
+ resistance_flags = FLAMMABLE
+
+/obj/item/clothing/mask/gas/respirator
+ name = "half mask respirator"
+ desc = "A half mask respirator that's really just a standard gas mask with the glass taken off."
+ icon = 'modular_nova/modules/GAGS/icons/masks.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/masks.dmi'
+ icon_state = "respirator"
+ inhand_icon_state = "sechailer"
+ w_class = WEIGHT_CLASS_SMALL
+ has_fov = FALSE
+ clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
+ flags_inv = HIDEFACIALHAIR|HIDESNOUT
+ flags_cover = MASKCOVERSMOUTH
+ flags_1 = IS_PLAYER_COLORABLE_1
+ greyscale_colors = "#2E3333"
+ greyscale_config = /datum/greyscale_config/respirator
+ greyscale_config_worn = /datum/greyscale_config/respirator/worn
+ //NIGHTMARE NIGHTMARE NIGHTMARE
+ greyscale_config_worn_digi = /datum/greyscale_config/respirator/worn/snouted
+ greyscale_config_worn_better_vox = /datum/greyscale_config/respirator/worn/better_vox
+ greyscale_config_worn_vox = /datum/greyscale_config/respirator/worn/vox
+ greyscale_config_worn_teshari = /datum/greyscale_config/respirator/worn/teshari
+
+/obj/item/clothing/mask/gas/respirator/examine(mob/user)
+ . = ..()
+ . += span_notice("You can toggle its ability to muffle your TTS voice with control click .")
+
+/obj/item/clothing/mask/gas/respirator/CtrlClick(mob/living/user)
+ if(!isliving(user))
+ return
+ if(user.get_active_held_item() != src)
+ to_chat(user, span_warning("You must hold the [src] in your hand to do this!"))
+ return
+ voice_filter = voice_filter ? null : initial(voice_filter)
+ to_chat(user, span_notice("Mask voice muffling [voice_filter ? "enabled" : "disabled"]."))
+
+/obj/item/clothing/mask/gas/clown_hat/vox
+ desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
+ icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ starting_filter_type = /obj/item/gas_filter/vox
+
+/obj/item/clothing/mask/gas/clown_hat/vox/Initialize(mapload)
+ .=..()
+ clownmask_designs = list(
+ "True Form" = image(icon = src.icon, icon_state = "clown"),
+ "The Feminist" = image(icon = src.icon, icon_state = "sexyclown"),
+ "The Wizard" = image(icon = src.icon, icon_state = "wizzclown"),
+ "The Jester" = image(icon = src.icon, icon_state = "chaos"),
+ "The Madman" = image(icon = src.icon, icon_state = "joker"),
+ "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow")
+ )
+
+/obj/item/clothing/mask/gas/clown_hat/vox/ui_action_click(mob/user)
+ if(!istype(user) || user.incapacitated())
+ return
+
+ var/list/options = list()
+ options["True Form"] = "clown"
+ options["The Feminist"] = "sexyclown"
+ options["The Wizard"] = "wizzclown"
+ options["The Madman"] = "joker"
+ options["The Rainbow Color"] = "rainbow"
+ options["The Jester"] = "chaos"
+
+ var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
+ if(!choice)
+ return FALSE
+
+ if(src && choice && !user.incapacitated() && in_range(user,src))
+ icon_state = options[choice]
+ user.update_worn_mask()
+ update_item_action_buttons()
+ to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!"))
+ return TRUE
+
+/obj/item/clothing/mask/gas/mime/vox
+ desc = "The traditional mime's mask. It has an eerie facial posture. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
+ icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ starting_filter_type = /obj/item/gas_filter/vox
+
+/obj/item/clothing/mask/gas/mime/vox/Initialize(mapload)
+ .=..()
+ mimemask_designs = list(
+ "Blanc" = image(icon = src.icon, icon_state = "mime"),
+ "Excité" = image(icon = src.icon, icon_state = "sexymime"),
+ "Triste" = image(icon = src.icon, icon_state = "sadmime"),
+ "Effrayé" = image(icon = src.icon, icon_state = "scaredmime")
+ )
+
+/obj/item/clothing/mask/gas/mime/vox/ui_action_click(mob/user)
+ if(!istype(user) || user.incapacitated())
+ return
+
+ var/list/options = list()
+ options["Blanc"] = "mime"
+ options["Triste"] = "sadmime"
+ options["Effrayé"] = "scaredmime"
+ options["Excité"] = "sexymime"
+
+ var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
+ if(!choice)
+ return FALSE
+
+ if(src && choice && !user.incapacitated() && in_range(user,src))
+ var/mob/living/carbon/human/human_user = user
+ if(human_user.dna.species.mutant_bodyparts["snout"])
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak")
+ if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts)
+ icon_state = "[options[choice]]_b"
+ else
+ icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ icon_state = options[choice]
+ icon_state = options[choice]
+
+ user.update_worn_mask()
+ update_item_action_buttons()
+ to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!"))
+ return TRUE
+
+/obj/item/clothing/mask/gas/atmos/vox
+ desc = "Improved gas mask utilized by atmospheric technicians. It's flameproof! This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
+ icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ starting_filter_type = /obj/item/gas_filter/vox
+
+/obj/item/clothing/mask/gas/sechailer/vox
+ desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
+ icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ worn_icon_better_vox = 'modular_nova/master_files/icons/mob/clothing/species/vox/mask.dmi'
+ clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING
+ visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING
+ starting_filter_type = /obj/item/gas_filter/vox
diff --git a/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm b/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm
new file mode 100644
index 00000000000..e9e4c3b7314
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/masks/masquerade_mask.dm
@@ -0,0 +1,33 @@
+
+/obj/item/clothing/mask/masquerade
+ name = "masquerade mask"
+ desc = "You'll never guess who's under that mask, it's the perfect disguise!"
+ icon_state = "maskerade"
+ icon = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/mask/masquerade_mask_worn.dmi'
+ flags_1 = IS_PLAYER_COLORABLE_1
+ clothing_flags = MASKINTERNALS
+ alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION | CLOTHING_SNOUTED_VOX_VARIATION | CLOTHING_SNOUTED_BETTER_VOX_VARIATION
+ greyscale_colors = "#ececec#333333#9b1e1e"
+ greyscale_config = /datum/greyscale_config/masquerade_mask
+ greyscale_config_worn = /datum/greyscale_config/masquerade_mask/worn
+ greyscale_config_worn_muzzled = /datum/greyscale_config/masquerade_mask/worn/snouted
+ greyscale_config_worn_better_vox = /datum/greyscale_config/masquerade_mask/worn/better_vox
+ greyscale_config_worn_vox = /datum/greyscale_config/masquerade_mask/worn/vox
+ greyscale_config_worn_teshari = /datum/greyscale_config/masquerade_mask/worn/teshari
+
+/obj/item/clothing/mask/masquerade/feathered
+ name = "feathered masquerade mask"
+ desc = "You'll never guess who's under that mask, it's the perfect disguise! This one even has a feather, to make it fancier!"
+ icon_state = "maskerade_feather"
+
+/obj/item/clothing/mask/masquerade/two_colors
+ name = "split masquerade mask"
+ desc = "You'll never guess who's under that mask, it's the perfect disguise! There's even two colors, to add to the confusion!"
+ icon_state = "maskerade_two_colors"
+
+/obj/item/clothing/mask/masquerade/two_colors/feathered
+ name = "feathered split masquerade mask"
+ desc = "You'll never guess who's under that mask, it's the perfect disguise! There's even two colors AND a feather, making it the most fancy masquerade mask yet!"
+ icon_state = "maskerade_two_colors_feather"
diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm b/modular_nova/modules/customization/modules/clothing/masks/paper.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/clothing/masks/paper.dm
rename to modular_nova/modules/customization/modules/clothing/masks/paper.dm
index e141f569004..c3900633b37 100644
--- a/modular_skyrat/modules/customization/modules/clothing/masks/paper.dm
+++ b/modular_nova/modules/customization/modules/clothing/masks/paper.dm
@@ -15,8 +15,8 @@
/obj/item/clothing/mask/paper
name = "paper mask"
desc = "It's true. Once you wear a mask for so long, you forget about who you are. Wonder if that happens with shitty paper ones."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "mask_paper"
clothing_flags = MASKINTERNALS
flags_inv = HIDEFACIALHAIR|HIDESNOUT
diff --git a/modular_nova/modules/customization/modules/clothing/neck/_neck.dm b/modular_nova/modules/customization/modules/clothing/neck/_neck.dm
new file mode 100644
index 00000000000..334eb5ef8c7
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/neck/_neck.dm
@@ -0,0 +1,120 @@
+/obj/item/clothing/neck/tie/disco
+ name = "horrific necktie"
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "eldritch_tie"
+ desc = "The necktie is adorned with a garish pattern. It's disturbingly vivid. Somehow you feel as if it would be wrong to ever take it off. It's your friend now. You will betray it if you change it for some boring scarf."
+
+/obj/item/clothing/neck/mantle
+ name = "mantle"
+ desc = "A decorative drape over the shoulders. This one has a simple, dry color."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "mantle"
+
+/obj/item/clothing/neck/mantle/regal
+ name = "regal mantle"
+ desc = "A colorful felt mantle. You feel posh just holding this thing."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "regal-mantle"
+
+/obj/item/clothing/neck/mantle/qm
+ name = "\proper the quartermaster's mantle"
+ desc = "A snug and comfortable looking shoulder covering garment, it has an air of rebellion and independence. Or annoyance and delusions, your call."
+ icon_state = "qmmantle"
+
+/obj/item/clothing/neck/mantle/hopmantle
+ name = "\proper the head of personnel's mantle"
+ desc = "A decorative draping of blue and red over your shoulders, signifying your stamping prowess."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "hopmantle"
+
+/obj/item/clothing/neck/mantle/cmomantle
+ name = "\proper the chief medical officer's mantle"
+ desc = "A light blue shoulder draping for THE medical professional. Contrasts well with blood."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "cmomantle"
+
+/obj/item/clothing/neck/mantle/rdmantle
+ name = "\proper the research director's mantle"
+ desc = "A terribly comfortable shoulder draping for the discerning scientist of fashion."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "rdmantle"
+
+/obj/item/clothing/neck/mantle/cemantle
+ name = "\proper the chief engineer's mantle"
+ desc = "A bright white and yellow striped mantle. Do not wear around active machinery."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "cemantle"
+
+/obj/item/clothing/neck/mantle/hosmantle
+ name = "\proper the head of security's mantle"
+ desc = "A plated mantle that one might wrap around the upper torso. The 'scales' of the garment signify the members of security and how you're carrying them on your shoulders."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "hosmantle_blue" //There's a red version if you remove the _blue, but its not coded in currently.
+
+/obj/item/clothing/neck/mantle/bsmantle
+ name = "\proper the blueshield's mantle"
+ desc = "A plated mantle with command colors. Suitable for the one assigned to making sure they're still breathing."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "bsmantle"
+
+/obj/item/clothing/neck/mantle/capmantle
+ name = "\proper the captain's mantle"
+ desc = "A formal mantle to drape around the shoulders. Others stand on the shoulders of giants. You're the giant they stand on."
+ icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon_state = "capmantle"
+
+/obj/item/clothing/neck/mantle/recolorable
+ name = "mantle"
+ desc = "A simple drape over the shoulders."
+ icon = 'modular_nova/modules/GAGS/icons/neck/neck.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/neck/neck.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/neck/neck_teshari.dmi'
+ icon_state = "mantle"
+ greyscale_colors = "#ffffff"
+ greyscale_config = /datum/greyscale_config/mantle
+ greyscale_config_worn = /datum/greyscale_config/mantle/worn
+ greyscale_config_worn_teshari = /datum/greyscale_config/mantle/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/mantle/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/mantle/worn/oldvox
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/neck/face_scarf
+ name = "face scarf"
+ desc = "A warm looking scarf that you can easily put around your face."
+ icon_state = "face_scarf"
+ greyscale_config = /datum/greyscale_config/face_scarf
+ greyscale_config_worn = /datum/greyscale_config/face_scarf/worn
+ greyscale_config_worn_muzzled = /datum/greyscale_config/face_scarf/worn/muzzled
+ greyscale_colors = "#a52424"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ flags_inv = HIDEFACIALHAIR | HIDESNOUT
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION
+
+/obj/item/clothing/neck/face_scarf/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_icon, toggle_noun = "scarf")
+
+/obj/item/clothing/neck/face_scarf/AltClick(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip
+ . = ..()
+ if(icon_state != "face_scarf_t")
+ flags_inv = HIDEFACIALHAIR | HIDESNOUT
+ else
+ flags_inv = HIDEFACIALHAIR
+
+/obj/item/clothing/neck/maid_neck_cover
+ name = "maid neck cover"
+ desc = "A neckpiece for a maid costume, it smells faintly of disappointment."
+ icon_state = "maid_neck_cover"
+ greyscale_config = /datum/greyscale_config/maid_neck_cover
+ greyscale_config_worn = /datum/greyscale_config/maid_neck_cover/worn
+ greyscale_colors = "#7b9ab5#edf9ff"
+ flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm b/modular_nova/modules/customization/modules/clothing/neck/cloaks.dm
similarity index 90%
rename from modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm
rename to modular_nova/modules/customization/modules/clothing/neck/cloaks.dm
index e657621789e..cf4afa9744c 100644
--- a/modular_skyrat/modules/customization/modules/clothing/neck/cloaks.dm
+++ b/modular_nova/modules/customization/modules/clothing/neck/cloaks.dm
@@ -1,8 +1,8 @@
/obj/item/clothing/neck/chaplain
name = "bishop's cloak"
desc = "Become the space pope."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
icon_state = "bishopcloak"
/obj/item/clothing/neck/chaplain/black
@@ -18,8 +18,8 @@
desc = "A sand covered cloak, there seems to be a small deer head with antlers embroidered inside."
body_parts_covered = NECK
slot_flags = ITEM_SLOT_NECK
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
icon_state = "cowboy_poncho"
heat_protection = CHEST
diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm b/modular_nova/modules/customization/modules/clothing/neck/collars.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/neck/collars.dm
rename to modular_nova/modules/customization/modules/clothing/neck/collars.dm
diff --git a/modular_skyrat/modules/customization/modules/clothing/outfits/akula.dm b/modular_nova/modules/customization/modules/clothing/outfits/akula.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/outfits/akula.dm
rename to modular_nova/modules/customization/modules/clothing/outfits/akula.dm
diff --git a/modular_skyrat/modules/customization/modules/clothing/outfits/vox.dm b/modular_nova/modules/customization/modules/clothing/outfits/vox.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/outfits/vox.dm
rename to modular_nova/modules/customization/modules/clothing/outfits/vox.dm
diff --git a/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm b/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm
new file mode 100644
index 00000000000..e8da35bd4a5
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/shoes/shoes.dm
@@ -0,0 +1,221 @@
+/obj/item/clothing/shoes/wraps
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ name = "gilded leg wraps"
+ desc = "Ankle coverings. These ones have a golden design."
+ icon_state = "gildedcuffs"
+ body_parts_covered = FALSE
+
+/obj/item/clothing/shoes/wraps/silver
+ name = "silver leg wraps"
+ desc = "Ankle coverings. Not made of real silver."
+ icon_state = "silvergildedcuffs"
+
+/obj/item/clothing/shoes/wraps/red
+ name = "red leg wraps"
+ desc = "Ankle coverings. Show off your style with these shiny red ones!"
+ icon_state = "redcuffs"
+
+/obj/item/clothing/shoes/wraps/blue
+ name = "blue leg wraps"
+ desc = "Ankle coverings. Hang ten, brother."
+ icon_state = "bluecuffs"
+
+/obj/item/clothing/shoes/cowboyboots
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ name = "cowboy boots"
+ desc = "A standard pair of brown cowboy boots."
+ icon_state = "cowboyboots"
+
+/obj/item/clothing/shoes/cowboyboots/black
+ name = "black cowboy boots"
+ desc = "A pair of black cowboy boots, pretty easy to scuff up."
+ icon_state = "cowboyboots_black"
+
+/obj/item/clothing/shoes/high_heels
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ name = "high heels"
+ desc = "A fancy pair of high heels. Won't compensate for your below average height that much."
+ icon_state = "heels"
+ greyscale_config = /datum/greyscale_config/heels
+ greyscale_config_worn = /datum/greyscale_config/heels/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/heels/worn/digi
+ greyscale_colors = "#FFFFFF"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/fancy_heels
+ name = "fancy heels"
+ desc = "A pair of fancy high heels that are much smaller on your feet."
+ icon_state = "fancyheels"
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ greyscale_colors = "#FFFFFF"
+ greyscale_config = /datum/greyscale_config/fancyheels
+ greyscale_config_worn = /datum/greyscale_config/fancyheels/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/fancyheels/worn/digi
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/discoshoes
+ name = "green snakeskin shoes"
+ desc = "They may have lost some of their lustre over the years, but these green crocodile leather shoes fit you perfectly."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "lizardskin_shoes"
+
+/obj/item/clothing/shoes/kimshoes
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ name = "aerostatic boots"
+ desc = "A brown pair of boots, prim and proper, ready to set off and get a body out of a tree."
+ icon_state = "aerostatic_boots"
+
+
+/obj/item/clothing/shoes/jungleboots
+ name = "jungle boots"
+ desc = "Take me to your paradise, I want to see the Jungle. A brown pair of boots."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "jungle"
+ inhand_icon_state = "jackboots"
+ strip_delay = 30
+ equip_delay_other = 50
+ resistance_flags = NONE
+
+/obj/item/clothing/shoes/jungleboots/Initialize(mapload)
+ . = ..()
+
+ create_storage(storage_type = /datum/storage/pockets/shoes)
+
+/obj/item/clothing/shoes/jackboots/black
+ name = "dark jackboots"
+ desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time. These are fully black."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "blackjack"
+
+/obj/item/clothing/shoes/wraps/cloth
+ name = "cloth foot wraps"
+ desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer."
+ icon_state = "clothwrap"
+ greyscale_config = /datum/greyscale_config/clothwraps
+ greyscale_config_worn = /datum/greyscale_config/clothwraps/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi
+ greyscale_colors = "#FFFFFF"
+ body_parts_covered = FALSE
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/wraps/colourable
+ name = "colourable foot wraps"
+ desc = "Ankle coverings. These ones have a customisable colour design."
+ icon_state = "legwrap"
+ greyscale_config = /datum/greyscale_config/legwraps
+ greyscale_config_worn = /datum/greyscale_config/legwraps/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/legwraps/worn/digi
+ greyscale_colors = "#FFFFFF"
+ body_parts_covered = FALSE
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/sports
+ name = "sport shoes"
+ desc = "Shoes for the sporty individual. The giants of Charlton play host to the titans of Ipswich - making them both seem normal sized."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "sportshoe"
+
+/obj/item/clothing/shoes/jackboots/knee
+ name = "knee boots"
+ desc = "Black leather boots that go up to the knee."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "kneeboots"
+
+/obj/item/clothing/shoes/jackboots/timbs
+ name = "fashionable boots"
+ desc = "Fresh from Luna, deadass good for rappers."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "timbs"
+
+/obj/item/clothing/shoes/winterboots/christmas
+ name = "red christmas boots"
+ desc = "A pair of fluffy red christmas boots!"
+ icon_state = "christmas_boots"
+ greyscale_colors = "#cc0f0f#c4c2c2"
+ greyscale_config = /datum/greyscale_config/boots/christmasboots
+ greyscale_config_worn = /datum/greyscale_config/boots/christmasboots/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/boots/christmasboots/worn/digi
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/winterboots/christmas/green
+ name = "green christmas boots"
+ desc = "A pair of fluffy green christmas boots!"
+ greyscale_colors = "#1a991a#c4c2c2"
+
+/obj/item/clothing/shoes/clown_shoes/pink
+ name = "pink clown shoes"
+ desc = "A particularly pink pair of punny shoes."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "pink_clown_shoes"
+
+//Modular overide to give jackboots laces
+/obj/item/clothing/shoes/jackboots
+ can_be_tied = TRUE
+
+/obj/item/clothing/shoes/colorable_laceups
+ name = "laceup shoes"
+ desc = "These don't seem to come pre-polished, how saddening."
+ icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+ icon_state = "laceups"
+ greyscale_colors = "#383631"
+ greyscale_config = /datum/greyscale_config/laceup
+ greyscale_config_worn = /datum/greyscale_config/laceup/worn
+ greyscale_config_worn_teshari = /datum/greyscale_config/laceup/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/laceup/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/laceup/worn/oldvox
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/colorable_sandals
+ name = "sandals"
+ desc = "Rumor has it that wearing these with socks puts you on a no entry list in several sectors."
+ icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+ icon_state = "sandals"
+ greyscale_colors = "#383631"
+ greyscale_config = /datum/greyscale_config/sandals
+ greyscale_config_worn = /datum/greyscale_config/sandals/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/sandals/worn/digi
+ greyscale_config_worn_teshari = /datum/greyscale_config/sandals/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/sandals/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/sandals/worn/oldvox
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/jackboots/recolorable
+ icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/shoes/shoes.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/shoes/shoes_teshari.dmi'
+ icon_state = "boots"
+ greyscale_colors = "#383631"
+ greyscale_config = /datum/greyscale_config/boots
+ greyscale_config_worn = /datum/greyscale_config/boots/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/boots/worn/digi
+ greyscale_config_worn_teshari = /datum/greyscale_config/boots/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/boots/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/boots/worn/oldvox
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/shoes/wraps/cloth
+ name = "cloth foot wraps"
+ desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer."
+ icon_state = "clothwrap"
+ greyscale_config = /datum/greyscale_config/clothwraps
+ greyscale_config_worn = /datum/greyscale_config/clothwraps/worn
+ greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi
+ greyscale_colors = "#FFFFFF"
+ body_parts_covered = FALSE
+ flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm b/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm
new file mode 100644
index 00000000000..43ca952c116
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/storage/backpacks.dm
@@ -0,0 +1,38 @@
+/obj/item/storage/backpack/satchel/crusader //Not very special, really just a satchel texture
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ name = "crusader bandolier"
+ desc = "A bandolier-satchel combination for holding all your dungeon loot."
+ icon_state = "crusader_bandolier"
+ inhand_icon_state = "explorerpack"
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/storage/backpack/science/robo
+ name = "robotics backpack"
+ desc = "A sleek, industrial-strength backpack issued to robotics personnel. Smells faintly of oil."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "backpack_robo"
+ inhand_icon_state = "backpack_robo"
+
+/obj/item/storage/backpack/satchel/science/robo
+ name = "robotics satchel"
+ desc = "A sleek, industrial-strength satchel issued to robotics personnel. Smells faintly of oil."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "satchel_robo"
+ inhand_icon_state = "satchel_robo"
+
+/obj/item/storage/backpack/duffelbag/science/robo
+ name = "robotics duffelbag"
+ desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. Smells faintly of oil."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "duffel_robo"
+ inhand_icon_state = "duffel_robo"
diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm b/modular_nova/modules/customization/modules/clothing/storage/belts.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/clothing/storage/belts.dm
rename to modular_nova/modules/customization/modules/clothing/storage/belts.dm
index ff7699be864..071b656d64c 100644
--- a/modular_skyrat/modules/customization/modules/clothing/storage/belts.dm
+++ b/modular_nova/modules/customization/modules/clothing/storage/belts.dm
@@ -1,6 +1,6 @@
/obj/item/storage/belt/crusader //Belt + sheath combination - still only holds one sword at a time though
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
name = "crusader belt"
desc = "Holds an assortment of equipment for whatever situation an adventurer may encounter, as well as having an attached sheath."
icon_state = "crusader_belt"
@@ -103,8 +103,8 @@
new /obj/item/storage/belt/storage_pouch(src)
/obj/item/storage/belt/storage_pouch //seperate mini-storage inside the belt, leaving room for only one sword. Inspired by a (very poorly implemented) belt on Desert Rose
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
name = "storage pouch"
desc = span_notice("Click on this to open your belt's inventory!")
icon_state = "storage_pouch_icon"
@@ -124,8 +124,8 @@
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL //Rather than have a huge whitelist, the belt can simply hold anything a pocket can hold - Can easily be changed if it somehow becomes an issue
/obj/item/storage/belt/holster/cowboy
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
name = "cowboy belt"
desc = "Yee haw! The holster on the side of the hip is leather stamped with swirling lines, all leading back to a deer's antlers."
icon_state = "cowboy_belt"
@@ -133,8 +133,8 @@
inhand_icon_state = "utility"
/obj/item/storage/belt/medbandolier
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
name = "medical bandolier"
desc = "A pocketed, pine green belt slung like a sash over the shoulder. Features numerous pockets for medicines and poisons alike. Now is coward healing time."
icon_state = "med_bandolier"
diff --git a/modular_nova/modules/customization/modules/clothing/storage/readme.md b/modular_nova/modules/customization/modules/clothing/storage/readme.md
new file mode 100644
index 00000000000..9f14c7c1041
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/storage/readme.md
@@ -0,0 +1,27 @@
+## Title: Storage
+
+MODULE ID: Storage
+
+### Description:
+
+A seperate folder under customization for adding new (WORN) storage items, such as new bags and belts.
+
+### TG Proc Changes:
+
+- N/A
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+(Both the new sprite files, which are in the normal clothing icon locations)
+- modular_nova/master_files/icons/mob/clothing/storage.dmi
+- modular_nova/master_files/icons/obj/clothing/storage.dmi
+
+### Credits:
+Orion_the_Fox
diff --git a/modular_nova/modules/customization/modules/clothing/suits/armor.dm b/modular_nova/modules/customization/modules/clothing/suits/armor.dm
new file mode 100644
index 00000000000..b436e5bd764
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/suits/armor.dm
@@ -0,0 +1,32 @@
+// MODULAR ARMOUR
+
+// WARDEN
+/obj/item/clothing/suit/armor/vest/warden/syndicate
+ name = "master at arms' vest"
+ desc = "Stunning. Menacing. Perfect for the man who gets bullied for leaving the brig."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon_state = "warden_syndie"
+ current_skin = "warden_syndie" //prevents reskinning
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+// HEAD OF PERSONNEL
+/obj/item/clothing/suit/armor/vest/hop/hop_formal
+ name = "head of personnel's parade jacket"
+ desc = "A luxurious deep blue jacket for the Head of Personnel, woven with a red trim. It smells of bureaucracy."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon_state = "hopformal"
+
+/obj/item/clothing/suit/armor/vest/hop/hop_formal/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_icon)
+
+// CAPTAIN
+/obj/item/clothing/suit/armor/vest/capcarapace/jacket
+ name = "captain's jacket"
+ desc = "A lightweight armored jacket in the Captain's colors. For when you want something sleeker."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon_state = "capjacket_casual"
+ body_parts_covered = CHEST|ARMS
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/cloaks.dm b/modular_nova/modules/customization/modules/clothing/suits/cloaks.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/suits/cloaks.dm
rename to modular_nova/modules/customization/modules/clothing/suits/cloaks.dm
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm b/modular_nova/modules/customization/modules/clothing/suits/coats.dm
similarity index 87%
rename from modular_skyrat/modules/customization/modules/clothing/suits/coats.dm
rename to modular_nova/modules/customization/modules/clothing/suits/coats.dm
index 379599c5cf4..61d1c6696fe 100644
--- a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm
+++ b/modular_nova/modules/customization/modules/clothing/suits/coats.dm
@@ -24,8 +24,8 @@
/obj/item/clothing/suit/flakjack
name = "flak jacket"
desc = "A dilapidated jacket made of a supposedly bullet-proof material (Hint: It isn't.). Smells faintly of napalm."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
icon_state = "flakjack"
inhand_icon_state = "armor"
blood_overlay_type = "armor"
@@ -69,8 +69,8 @@
/obj/item/clothing/suit/toggle/deckard
name = "runner coat"
desc = "They say you overused reference. Tell them you're eating in this lovely coat, a long flowing brown one."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "deckard"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
inhand_icon_state = "det_suit"
@@ -116,8 +116,8 @@
flags_1 = IS_PLAYER_COLORABLE_1
/obj/item/clothing/suit/toggle/lawyer/black/better
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "suitjacket_black"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -130,8 +130,8 @@
/obj/item/clothing/suit/toggle/lawyer/white
name = "white suit jacket"
desc = "A very versatile part of a suit ensable. Oddly in fashion with mobsters."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "suitjacket_white"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -142,8 +142,8 @@
body_parts_covered = CHEST|GROIN|ARMS|LEGS
cold_protection = CHEST|GROIN|ARMS|LEGS
heat_protection = CHEST|ARMS|GROIN|LEGS
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
blood_overlay_type = "coat"
/obj/item/clothing/suit/croptop
@@ -152,8 +152,8 @@
icon_state = "croptop_black"
body_parts_covered = CHEST|ARMS
cold_protection = CHEST|ARMS
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/suit/varsity
@@ -171,8 +171,8 @@
name = "hooded leather coat"
desc = "A simple leather coat with a hoodie underneath it, not really hooded is it?"
icon_state = "leatherhoodie"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
hoodtype = /obj/item/clothing/head/hooded/leather
@@ -181,8 +181,8 @@
name = "jacket hood"
desc = "A hood attached to a hoodie, nothing special."
icon_state = "leatherhood"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
flags_inv = HIDEHAIR
/obj/item/clothing/suit/tailored_jacket
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm b/modular_nova/modules/customization/modules/clothing/suits/hoodies.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm
rename to modular_nova/modules/customization/modules/clothing/suits/hoodies.dm
index ec41c2c3eb3..16bddbb8684 100644
--- a/modular_skyrat/modules/customization/modules/clothing/suits/hoodies.dm
+++ b/modular_nova/modules/customization/modules/clothing/suits/hoodies.dm
@@ -1,6 +1,6 @@
/*
* The hoodies and attached sprites [WERE ORIGINALLY FROM] https://github.com/Citadel-Station-13/Citadel-Station-13-RP before GAGSification
-* Respective datums can be found in modular_skyrat/modules/customization/datums/greyscale/hoodies
+* Respective datums can be found in modular_nova/modules/customization/datums/greyscale/hoodies
* These are now a subtype of toggle/jacket too, so it properly toggles and isnt the unused 'storage' type
*/
diff --git a/modular_nova/modules/customization/modules/clothing/suits/misc.dm b/modular_nova/modules/customization/modules/clothing/suits/misc.dm
new file mode 100644
index 00000000000..855621b7d13
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/suits/misc.dm
@@ -0,0 +1,349 @@
+/obj/item/clothing/suit/wornshirt
+ name = "worn shirt"
+ desc = "A worn out (or perhaps just baggy), curiously comfortable t-shirt."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "wornshirt"
+ inhand_icon_state = "labcoat"
+ body_parts_covered = CHEST|GROIN
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/dutchjacketsr
+ name = "western jacket"
+ desc = "Botanists screaming of mangos have been rumored to wear this."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "dutchjacket"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+
+/obj/item/clothing/suit/toggle/trackjacket
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "track jacket"
+ desc = "A black jacket with blue stripes for the athletic. It is also popular among russian delinquents."
+ icon_state = "trackjacket"
+ toggle_noun = "zipper"
+
+/obj/item/clothing/suit/frenchtrench
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "blue trenchcoat"
+ icon_state = "frenchtrench"
+ desc = "There's a certain timeless feeling to this coat, like it was once worn by a romantic, broken through his travels, from a schemer who hunted injustice to a traveller, however it arrived in your hands? Who knows?"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/victoriantailcoatbutler
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "caretaker tailcoat"
+ desc = "You've ALWAYS been the Caretaker. I ought to know, I've ALWAYS been here."
+ icon_state = "victorian_tailcoat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/koreacoat
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "eastern winter coat"
+ desc = "War makes people cold, not just on the inside, but on the outside as well... luckily this coat's not seen any hardships like that, and is actually quite warm!"
+ icon_state = "chi_korea_coat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/modernwintercoatthing
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "modern winter coat"
+ desc = "Warm and comfy, the inner fur seems to be removable, not this one though, someone's sewn it in and left the buttons!"
+ icon_state = "modern_winter"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/toggle/jacket/cardigan
+ name = "cardigan"
+ desc = "It's like, half a jacket."
+ icon_state = "cardigan"
+ greyscale_config = /datum/greyscale_config/cardigan
+ greyscale_config_worn = /datum/greyscale_config/cardigan/worn
+ greyscale_colors = "#FFFFFF"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/toggle/jacket/cardigan/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/toggle_clothes, "cardigan_t")
+
+/obj/item/clothing/suit/discoblazer
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "disco ass blazer"
+ desc = "Looks like someone skinned this blazer off some long extinct disco-animal. It has an enigmatic white rectangle on the back and the right sleeve."
+ icon_state = "jamrock_blazer"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/kimjacket
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "aerostatic bomber jacket"
+ desc = "A jacket once worn by the Air Force during the Antecentennial Revolution, there are quite a few pockets on the inside, mostly for storing notebooks and compasses."
+ icon_state = "aerostatic_bomber_jacket"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/blackfurrich
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "expensive black fur coat"
+ desc = "Ever thought to yourself 'I'm a rich bitch, but I haven't GOT the Mafia Princess look?' Well thanks to the tireless work of underpaid slave labour in Space China, your dreams of looking like a bitch have been fulfilled, like a Genie with a sweatshop."
+ icon_state = "expensivecoat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/brownbattlecoat
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "expensive brown fur coat"
+ desc = "There is nothing more valuable, nothing more sacred, look at the fur lining, it's beautiful, when you cruse through Necropolis in this thing, you're gonna be balls deep in Ash Walker snatch."
+ icon_state = "battlecoat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/brownfurrich
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "quartermaster fur coat"
+ desc = "Cargonia, or if you're a dork, Cargoslavia has shipped out a coat for loyal quartermasters, despite accusations it's just a dyed black fur coat, it's...not, promise!"
+ icon_state = "winter_coat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ armor_type = /datum/armor/suit_brownfurrich
+
+/datum/armor/suit_brownfurrich
+ melee = 10
+ bullet = 10
+
+/obj/item/clothing/suit/brownfurrich/public
+ name = "fur coat"
+ desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
+
+/obj/item/clothing/suit/brownfurrich/white
+ name = "white fur coat"
+ desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
+ icon_state = "winter_coat_white"
+
+/obj/item/clothing/suit/brownfurrich/cream
+ name = "cream fur coat"
+ desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
+ icon_state = "winter_coat_cream"
+
+/obj/item/clothing/suit/fallsparka
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "falls parka"
+ desc = "A light brown coat with light fur lighting around the collar."
+ icon_state = "fallsparka"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/british_officer
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "british officers coat"
+ desc = "Whether you're commanding a colonial crusade or commanding a battalion for the British Empire, this coat will suit you."
+ icon_state = "british_officer"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ armor_type = /datum/armor/suit_british_officer
+
+/datum/armor/suit_british_officer
+ melee = 10
+ bullet = 10
+
+/obj/item/clothing/suit/modern_winter
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "modern winter coat"
+ desc = "A comfy modern winter coat."
+ icon_state = "modern_winter"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+
+/obj/item/clothing/suit/woolcoat
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "wool coat"
+ desc = "A fine coat made from the richest of wool."
+ icon_state = "woolcoat"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+
+
+/obj/item/clothing/suit/gautumn
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "neo american general's coat"
+ desc = "In stark contrast to the undersuit, this large and armored coat is as white as snow, perfect for the bloodstains."
+ icon_state = "soldier"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ armor_type = /datum/armor/suit_gautumn
+
+/datum/armor/suit_gautumn
+ melee = 10
+ bullet = 10
+ laser = 20
+ energy = 20
+
+/obj/item/clothing/suit/autumn
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "neo american officer's coat"
+ desc = "In stark contrast to the undersuit, this coat is a greeny white colour, layered with slight protection against bullets and melee weapons."
+ icon_state = "autumn"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ armor_type = /datum/armor/suit_autumn
+
+/datum/armor/suit_autumn
+ melee = 10
+ bullet = 10
+
+/obj/item/clothing/suit/texas
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "white suit coat"
+ desc = "A white suit coat, perfect for fat oil barons."
+ icon_state = "texas"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|ARMS
+
+/obj/item/clothing/suit/cossack
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "ukrainian coat"
+ desc = "Hop on your horse, dawn your really fluffy hat, and strap this coat to your back."
+ icon_state = "kuban_cossak"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/corgisuit/en
+ name = "\improper super-hero E-N suit"
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "ensuit"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/suit/corgisuit/en/New()
+ ..()
+ START_PROCESSING(SSobj, src)
+
+/obj/item/clothing/suit/corgisuit/en/Destroy()
+ STOP_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/clothing/suit/corgisuit/en/process()
+ if(prob(2))
+ for(var/obj/object in orange(2,src))
+ if(!object.anchored && (object.obj_flags & CONDUCTS_ELECTRICITY))
+ step_towards(object,src)
+ for(var/mob/living/silicon/S in orange(2,src))
+ if(istype(S, /mob/living/silicon/ai)) continue
+ step_towards(S,src)
+ for(var/datum/species/synthetic/R in orange(2,src))
+ step_towards(R,src)
+
+/obj/item/clothing/suit/trenchbrown
+ name = "brown trenchcoat"
+ desc = "A brown noir-inspired coat. Looks best if you're not wearing it over a baggy t-shirt."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "brtrenchcoat"
+ body_parts_covered = CHEST|ARMS
+
+/obj/item/clothing/suit/trenchblack
+ name = "black trenchcoat"
+ desc = "A matte-black coat. Best suited for space-italians, or maybe a monochrome-cop."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "bltrenchcoat"
+ body_parts_covered = CHEST|ARMS
+
+/obj/item/clothing/suit/apron/chef/colorable_apron
+ name = "apron"
+ desc = "A basic apron."
+ icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/suit/suit.dmi'
+ worn_icon_teshari = 'modular_nova/modules/GAGS/icons/suit/suit_teshari.dmi'
+ icon_state = "apron"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ greyscale_colors = "#ffffff"
+ greyscale_config = /datum/greyscale_config/apron
+ greyscale_config_worn = /datum/greyscale_config/apron/worn
+ greyscale_config_worn_teshari = /datum/greyscale_config/apron/worn/teshari
+ greyscale_config_worn_better_vox = /datum/greyscale_config/apron/worn/newvox
+ greyscale_config_worn_vox = /datum/greyscale_config/apron/worn/oldvox
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/suit/apron/overalls
+ greyscale_config_worn_digi = /datum/greyscale_config/overalls/worn/digi
+ greyscale_config_worn_better_vox = /datum/greyscale_config/overalls/worn/better_vox
+ greyscale_config_worn_vox = /datum/greyscale_config/overalls/worn/vox
+
+/obj/item/clothing/suit/apron/overalls/Initialize(mapload)
+ . = ..()
+ allowed += list(
+ /obj/item/flashlight,
+ /obj/item/lighter,
+ /obj/item/modular_computer/pda,
+ /obj/item/radio,
+ /obj/item/storage/bag/books,
+ /obj/item/storage/fancy/cigarettes,
+ /obj/item/tank/internals/emergency_oxygen,
+ /obj/item/tank/internals/plasmaman,
+ /obj/item/toy,
+ /obj/item/analyzer,
+ /obj/item/construction/rcd,
+ /obj/item/fireaxe/metal_h2_axe,
+ /obj/item/pipe_dispenser,
+ /obj/item/storage/bag/construction,
+ /obj/item/t_scanner,
+ )
+
+/obj/item/clothing/suit/warm_sweater
+ name = "warm sweater"
+ desc = "A comfortable warm-looking sweater."
+ icon_state = "warm_sweater"
+ greyscale_config = /datum/greyscale_config/warm_sweater
+ greyscale_config_worn = /datum/greyscale_config/warm_sweater/worn
+ greyscale_colors = "#867361"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/suit/heart_sweater
+ name = "heart sweater"
+ desc = "A comfortable warm-looking sweater. It even has a heart pattern on it, how cute."
+ icon_state = "heart_sweater"
+ greyscale_config = /datum/greyscale_config/heart_sweater
+ greyscale_config_worn = /datum/greyscale_config/heart_sweater/worn
+ greyscale_colors = "#867361#8f3a3a"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
diff --git a/modular_nova/modules/customization/modules/clothing/suits/trek.dm b/modular_nova/modules/customization/modules/clothing/suits/trek.dm
new file mode 100644
index 00000000000..2065c622fe3
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/suits/trek.dm
@@ -0,0 +1,61 @@
+//Trek Jacket(s?)
+/obj/item/clothing/suit/fedcoat
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "Federation uniform jacket"
+ desc = "A uniform jacket from the United Federation. Set phasers to awesome."
+ icon_state = "fedcoat"
+ inhand_icon_state = "coatsecurity"
+ allowed = list(
+ /obj/item/tank/internals/emergency_oxygen,
+ /obj/item/flashlight,
+ /obj/item/analyzer,
+ /obj/item/radio,
+ /obj/item/gun,
+ /obj/item/melee/baton,
+ /obj/item/restraints/handcuffs,
+ /obj/item/reagent_containers/hypospray,
+ /obj/item/hypospray,
+ /obj/item/healthanalyzer,
+ /obj/item/reagent_containers/syringe,
+ /obj/item/reagent_containers/cup/vial,
+ /obj/item/reagent_containers/cup/beaker,
+ /obj/item/storage/pill_bottle,
+ /obj/item/taperecorder)
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN|ARMS
+ species_exception = list(/datum/species/golem)
+
+/obj/item/clothing/suit/fedcoat/medsci
+ icon_state = "fedblue"
+ inhand_icon_state = "coatmedical"
+
+/obj/item/clothing/suit/fedcoat/eng
+ icon_state = "fedeng"
+ inhand_icon_state = "coatengineer"
+
+/obj/item/clothing/suit/fedcoat/capt
+ icon_state = "fedcapt"
+ inhand_icon_state = "coatcaptain"
+
+//fedcoat but modern
+/obj/item/clothing/suit/fedcoat/modern
+ name = "modern Federation uniform jacket"
+ desc = "A modern uniform jacket from the United Federation."
+ icon_state = "fedmodern"
+ inhand_icon_state = "coatsecurity"
+
+/obj/item/clothing/suit/fedcoat/modern/medsci
+ name = "modern medsci Federation jacket"
+ icon_state = "fedmodernblue"
+ inhand_icon_state = "coatmedical"
+
+/obj/item/clothing/suit/fedcoat/modern/eng
+ name = "modern engineering Federation jacket"
+ icon_state = "fedmoderneng"
+ inhand_icon_state = "coatengineer"
+
+/obj/item/clothing/suit/fedcoat/modern/sec
+ name = "modern security Federation jacket"
+ icon_state = "fedmodernsec"
+ inhand_icon_state = "coatcaptain"
diff --git a/modular_skyrat/modules/customization/modules/clothing/toggle_base.dm b/modular_nova/modules/customization/modules/clothing/toggle_base.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/toggle_base.dm
rename to modular_nova/modules/customization/modules/clothing/toggle_base.dm
diff --git a/modular_nova/modules/customization/modules/clothing/under/accessories.dm b/modular_nova/modules/customization/modules/clothing/under/accessories.dm
new file mode 100644
index 00000000000..f10e029e6a5
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/under/accessories.dm
@@ -0,0 +1,196 @@
+/obj/item/clothing/accessory/badge
+ name = "detective's badge"
+ desc = "Security Department detective's badge, made from gold."
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ icon_state = "badge"
+ slot_flags = ITEM_SLOT_NECK
+ attachment_slot = CHEST
+
+ var/stored_name
+ var/badge_string = "Corporate Security"
+
+ drop_sound = 'modular_nova/master_files/sound/items/drop/ring.ogg'
+ pickup_sound = 'modular_nova/master_files/sound/items/pickup/ring.ogg'
+
+/obj/item/clothing/accessory/badge/old
+ name = "faded badge"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division."
+ icon_state = "goldbadge"
+
+/obj/item/clothing/accessory/badge/proc/set_name(new_name)
+ stored_name = new_name
+ name = "[initial(name)] ([stored_name])"
+
+/obj/item/clothing/accessory/badge/proc/set_desc(mob/living/carbon/human/H)
+
+/obj/item/clothing/accessory/badge/attack_self(mob/user as mob)
+
+ if(!stored_name)
+ to_chat(user, "You polish your old badge fondly, shining up the surface.")
+ set_name(user.real_name)
+ return
+
+ if(isliving(user))
+ if(stored_name)
+ user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string]."),span_notice("You display your [src.name].\nIt reads: [stored_name], [badge_string]."))
+ else
+ user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [badge_string]."),span_notice("You display your [src.name]. It reads: [badge_string]."))
+
+/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user)
+ if(isliving(user))
+ user.visible_message(span_danger("[user] invades [M]'s personal space, thrusting [src] into their face insistently."),span_danger("You invade [M]'s personal space, thrusting [src] into their face insistently."))
+ user.do_attack_animation(M)
+
+// Sheriff Badge (toy)
+/obj/item/clothing/accessory/badge/sheriff
+ name = "sheriff badge"
+ desc = "This town ain't big enough for the two of us, pardner."
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ icon_state = "sheriff"
+
+/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
+ user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
+ "You flash the sheriff badge to everyone around you!")
+
+/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
+ if(isliving(user))
+ user.visible_message(span_danger("[user] invades [M]'s personal space, the sheriff badge into their face!."),span_danger("You invade [M]'s personal space, thrusting the sheriff badge into their face insistently."))
+ user.do_attack_animation(M)
+
+//.Holobadges.
+/obj/item/clothing/accessory/badge/holo
+ name = "holobadge"
+ desc = "This glowing blue badge marks the holder as THE LAW."
+ icon_state = "holobadge_lopland"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+
+/obj/item/clothing/accessory/badge/holo/cord
+ icon_state = "holobadge-cord"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+
+/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob)
+ if(!stored_name)
+ to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.")
+ return
+ return ..()
+
+/obj/item/clothing/accessory/badge/holo/emag_act(remaining_charges, mob/user)
+ if(obj_flags & EMAGGED)
+ balloon_alert(user, "already cracked")
+ return FALSE
+
+ obj_flags |= EMAGGED
+ balloon_alert(user, "security checks cracked!")
+ to_chat(user, span_danger("You crack the holobadge security checks."))
+ return TRUE
+
+/obj/item/clothing/accessory/badge/holo/attackby(obj/item/object as obj, mob/user as mob)
+ if(istype(object, /obj/item/card/id))
+
+ var/obj/item/card/id/id_card = null
+
+ if(istype(object, /obj/item/card/id))
+ id_card = object
+
+ if(ACCESS_SECURITY in id_card.access || (obj_flags & EMAGGED))
+ to_chat(user, "You imprint your ID details onto the badge.")
+ set_name(user.real_name)
+ badge_string = id_card.assignment
+ else
+ to_chat(user, "[src] rejects your insufficient access rights.")
+ return
+ ..()
+
+/obj/item/storage/box/holobadge
+ name = "holobadge box"
+ desc = "A box claiming to contain holobadges."
+
+/obj/item/storage/box/holobadge/PopulateContents()
+ . = ..()
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo/cord(src)
+ new /obj/item/clothing/accessory/badge/holo/cord(src)
+ return
+
+/obj/item/clothing/accessory/badge/holo/warden
+ name = "warden's holobadge"
+ desc = "A silver corporate security badge. Stamped with the words 'Warden.'"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ icon_state = "silverbadge"
+ slot_flags = ITEM_SLOT_NECK
+
+/obj/item/clothing/accessory/badge/holo/hos
+ name = "head of security's holobadge"
+ desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ icon_state = "goldbadge"
+ slot_flags = ITEM_SLOT_NECK
+
+/obj/item/clothing/accessory/badge/holo/detective
+ name = "detective's holobadge"
+ desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+ icon_state = "marshalbadge"
+ slot_flags = ITEM_SLOT_NECK
+
+/obj/item/storage/box/holobadge/hos
+ name = "holobadge box"
+ desc = "A box claiming to contain holobadges."
+
+/obj/item/storage/box/holobadge/hos/PopulateContents()
+ . = ..()
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo(src)
+ new /obj/item/clothing/accessory/badge/holo/warden(src)
+ new /obj/item/clothing/accessory/badge/holo/detective(src)
+ new /obj/item/clothing/accessory/badge/holo/detective(src)
+ new /obj/item/clothing/accessory/badge/holo/hos(src)
+ new /obj/item/clothing/accessory/badge/holo/cord(src)
+ return
+
+// The newbie pin
+/obj/item/clothing/accessory/green_pin
+ name = "green pin"
+ desc = "A pin given to newly hired personnel on deck."
+ icon_state = "green"
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+
+/obj/item/clothing/accessory/green_pin/examine(mob/user)
+ . = ..()
+ // How many hours of playtime left until the green pin expires
+ var/green_time_remaining = sanitize_integer((PLAYTIME_GREEN - user.client?.get_exp_living(pure_numeric = TRUE) / 60), 0, (PLAYTIME_GREEN / 60))
+ if(green_time_remaining > 0)
+ . += span_nicegreen("It reads '[green_time_remaining] hour[green_time_remaining >= 2 ? "s" : ""].'")
+
+// Pride Pin Over-ride
+/obj/item/clothing/accessory/pride
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
+
+GLOBAL_LIST_INIT(pride_pin_reskins, list(
+ "Rainbow Pride" = "pride",
+ "Bisexual Pride" = "pride_bi",
+ "Pansexual Pride" = "pride_pan",
+ "Asexual Pride" = "pride_ace",
+ "Non-binary Pride" = "pride_enby",
+ "Transgender Pride" = "pride_trans",
+ "Intersex Pride" = "pride_intersex",
+ "Lesbian Pride" = "pride_lesbian",
+ "Man-Loving-Man / Gay Pride" = "pride_mlm",
+ "Genderfluid Pride" = "pride_genderfluid",
+ "Genderqueer Pride" = "pride_genderqueer",
+ "Aromantic Pride" = "pride_aromantic",
+))
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/costumes.dm b/modular_nova/modules/customization/modules/clothing/under/costumes.dm
similarity index 86%
rename from modular_skyrat/modules/customization/modules/clothing/under/costumes.dm
rename to modular_nova/modules/customization/modules/clothing/under/costumes.dm
index 676fbaa8355..e88157ff9d5 100644
--- a/modular_skyrat/modules/customization/modules/clothing/under/costumes.dm
+++ b/modular_nova/modules/customization/modules/clothing/under/costumes.dm
@@ -2,8 +2,8 @@
/obj/item/clothing/under/costume/cybersleek
name = "sleek modern coat"
desc = "A modern-styled coat typically worn on more urban planets, made with a neo-laminated fiber lining."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
icon_state = "cyberpunksleek"
body_parts_covered = CHEST|ARMS|GROIN|LEGS
supports_variations_flags = NONE
diff --git a/modular_nova/modules/customization/modules/clothing/under/misc.dm b/modular_nova/modules/customization/modules/clothing/under/misc.dm
new file mode 100644
index 00000000000..15c444b2cd0
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/under/misc.dm
@@ -0,0 +1,49 @@
+/obj/item/clothing/under/misc/bluetracksuit
+ name = "blue tracksuit"
+ desc = "Found on a dead homeless man squatting in an alleyway, the classic design has been mass produced to bring terror to the galaxy."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ icon_state = "tracksuit_blue"
+
+/obj/item/clothing/under/tachawaiian
+ name = "orange tactical hawaiian outfit"
+ desc = "Clearly the wearer didn't know if they wanted to invade a country or lay on a nice Hawaiian beach."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ icon_state = "tacticool_hawaiian_orange"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+
+/obj/item/clothing/under/tachawaiian/blue
+ name = "blue tactical hawaiian outfit"
+ icon_state = "tacticool_hawaiian_blue"
+
+/obj/item/clothing/under/tachawaiian/purple
+ name = "purple tactical hawaiian outfit"
+ icon_state = "tacticool_hawaiian_purple"
+
+/obj/item/clothing/under/tachawaiian/green
+ name = "green tactical hawaiian outfit"
+ icon_state = "tacticool_hawaiian_green"
+
+/obj/item/clothing/under/texas
+ name = "texan formal outfit"
+ desc = "A premium quality shirt and pants combo straight from Texas."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ icon_state = "texas"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/doug_dimmadome
+ name = "dimmadome formal outfit"
+ desc = "A tight fitting suit with a belt that is surely made out of gold."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ icon_state = "doug_dimmadome"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/pants/tactical
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
+ name = "tactical pants"
+ desc = "A pair of tactical pants, designed for military use."
+ icon_state = "tactical_pants"
diff --git a/modular_nova/modules/customization/modules/clothing/under/security.dm b/modular_nova/modules/customization/modules/clothing/under/security.dm
new file mode 100644
index 00000000000..b3e072cea32
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/under/security.dm
@@ -0,0 +1,117 @@
+// MODULAR SECURITY WEAR (NOT OVERRIDES, LOOK IN 'modular_nova\modules\goofsec\code\sec_clothing_overrides.dm')
+
+// DETECTIVE
+/obj/item/clothing/under/rank/security/detective/cowboy
+ name = "blonde cowboy uniform"
+ desc = "A blue shirt and dark jeans, with a pair of spurred cowboy boots to boot."
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' //Donator item-ish? See the /armorless one below it
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon_state = "cowboy_uniform"
+ supports_variations_flags = NONE
+ can_adjust = FALSE
+
+/obj/item/clothing/under/rank/security/detective/cowboy/armorless //Donator variant, just uses the sprite.
+ armor_type = /datum/armor/clothing_under/none
+
+/obj/item/clothing/suit/cowboyvest
+ name = "blonde cowboy vest"
+ desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "cowboy_vest"
+ body_parts_covered = CHEST|ARMS
+ cold_protection = CHEST|ARMS
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ heat_protection = CHEST|ARMS
+
+/obj/item/clothing/suit/jacket/det_suit/cowboyvest
+ name = "blonde cowboy vest"
+ desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "cowboy_vest"
+ body_parts_covered = CHEST|ARMS
+ cold_protection = CHEST|ARMS
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ heat_protection = CHEST|ARMS
+
+/obj/item/clothing/under/rank/security/detective/runner
+ name = "runner sweater"
+ desc = "\"You look lonely.\" "
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
+ icon_state = "runner"
+ supports_variations_flags = NONE
+ can_adjust = FALSE
+
+/// PRISONER
+/obj/item/clothing/under/rank/prisoner/protcust
+ name = "protective custody prisoner jumpsuit"
+ desc = "A mustard coloured prison jumpsuit, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#FFB600"
+
+/obj/item/clothing/under/rank/prisoner/skirt/protcust
+ name = "protective custody prisoner jumpskirt"
+ desc = "A mustard coloured prison jumpskirt, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#FFB600"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/rank/prisoner/lowsec
+ name = "low security prisoner jumpsuit"
+ desc = "A pale, almost creamy prison jumpsuit, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#AB9278"
+
+/obj/item/clothing/under/rank/prisoner/skirt/lowsec
+ name = "low security prisoner jumpskirt"
+ desc = "A pale, almost creamy prison jumpskirt, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#AB9278"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/rank/prisoner/highsec
+ name = "high risk prisoner jumpsuit"
+ desc = "A bright red prison jumpsuit, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#FF3400"
+
+/obj/item/clothing/under/rank/prisoner/skirt/highsec
+ name = "high risk prisoner jumpskirt"
+ desc = "A bright red prison jumpskirt, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#FF3400"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/rank/prisoner/supermax
+ name = "supermax prisoner jumpsuit"
+ desc = "A dark crimson red prison jumpsuit, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#992300"
+
+/obj/item/clothing/under/rank/prisoner/skirt/supermax
+ name = "supermax prisoner jumpskirt"
+ desc = "A dark crimson red prison jumpskirt, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position."
+ greyscale_colors = "#992300"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/rank/prisoner/classic
+ name = "classic prisoner jumpsuit"
+ desc = "A black and white striped jumpsuit, like something out of a movie."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi'
+ icon_state = "prisonerclassic"
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_config_worn = null
+ supports_variations_flags = NONE
+
+/obj/item/clothing/under/rank/prisoner/syndicate
+ name = "syndicate prisoner jumpsuit"
+ desc = "A crimson red jumpsuit worn by syndicate captives. Its sensors have been shorted out."
+ greyscale_colors = "#992300"
+ has_sensor = FALSE
+
+/obj/item/clothing/under/rank/prisoner/skirt/syndicate
+ name = "syndicate prisoner jumpskirt"
+ desc = "A crimson red jumpskirt worn by syndicate captives. Its sensors have been shorted out."
+ greyscale_colors = "#992300"
+ has_sensor = FALSE
+ supports_variations_flags = NONE
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/suits.dm b/modular_nova/modules/customization/modules/clothing/under/suits.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/under/suits.dm
rename to modular_nova/modules/customization/modules/clothing/under/suits.dm
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/sweaters.dm b/modular_nova/modules/customization/modules/clothing/under/sweaters.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/under/sweaters.dm
rename to modular_nova/modules/customization/modules/clothing/under/sweaters.dm
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/tauruniformscolor.dm b/modular_nova/modules/customization/modules/clothing/under/tauruniformscolor.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/clothing/under/tauruniformscolor.dm
rename to modular_nova/modules/customization/modules/clothing/under/tauruniformscolor.dm
diff --git a/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm b/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm
new file mode 100644
index 00000000000..d6df8a74055
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/other_port.dm
@@ -0,0 +1,16 @@
+
+/obj/item/clothing/suit/costume/samurai
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ name = "samurai armor"
+ desc = "A set of ancient-Japan Samurai armor. Despite being a cheap replica, it's still remarkably heavy."
+ icon_state = "samurai"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/costume/kabuto
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ name = "kabuto"
+ desc = "An ancient-Japan armored helmet - or a replica of one, at least."
+ icon_state = "kabuto"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
diff --git a/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md b/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md
new file mode 100644
index 00000000000..2fc4b8fc9de
--- /dev/null
+++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/readme.md
@@ -0,0 +1,47 @@
+## Title: Utility Port
+
+MODULE ID: utility_port
+
+### Description:
+
+Ports several outfits from citbase, with the highlight being Utility Uniforms: dark-grey jumpsuits with departmental markings, with the same stats as the department's default jumpsuit.
+It also ports:
+ Other "utility" uniforms such as a gas/chemical hazard uniform;
+ Japanese and Victorian costumes;
+ Two short dresses;
+ Several departmental/head-of-staff berets;
+All items are avaliable through either the Loadout, Vendors, or Both.
+
+
+PART 2!
+Ports the rest of what I was given with the utility uniforms, namely the Suits that go with all the previously added outfits. Also tweaks some of the previously added items (i.e., making the gas/chemical haz-uniform actually acidproof)
+
+### TG Proc/File Changes:
+
+To show items in vendors:
+- core/modules/vending/autodrobe.dm
+- core/modules/vending/clothesmate.dm
+- core/modules/vending/wardrobes.dm
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+To add digitigrade variants:
+- Skyrat-tg/modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi
+- Skyrat-tg/modular_nova/master_files/icons/mob/clothing/under/uniform_digi.dmi
+
+### Included files that are not contained in this module:
+
+Modifications to:
+- modules/client/loadout/head.dm
+- modules/client/loadout/uniform.dm
+- icons/mob/clothing/uniform.dmi
+- icons/obj/clothing/uniforms.dmi
+
+### Credits:
+
+Orion_the_Fox, with help from SarmentiCampbell
+Sprites taken from https://github.com/Citadel-Station-13/Citadel-Station-13/pull/13475
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm b/modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm
rename to modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm
index bb88ca325db..504750b69df 100644
--- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/suits_port.dm
+++ b/modular_nova/modules/customization/modules/clothing/under/utility_port/suits_port.dm
@@ -1,7 +1,7 @@
//Base Jacket - same stats as /obj/item/clothing/suit/jacket, just toggleable and serving as the base for all the departmental jackets and flannels
/obj/item/clothing/suit/toggle/jacket
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
name = "bomber jacket"
desc = "A warm bomber jacket, with synthetic-wool lining to keep you nice and warm in the depths of space. Aviators not included."
icon_state = "bomberalt"
@@ -82,8 +82,8 @@
//Flannels
/obj/item/clothing/suit/toggle/jacket/flannel
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
name = "flannel jacket"
desc = "A cozy and warm plaid flannel jacket. Praised by Lumberjacks and Truckers alike."
icon_state = "flannel"
diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm
similarity index 76%
rename from modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm
rename to modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm
index 83234360283..2b1834ce90d 100644
--- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm
+++ b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm
@@ -79,8 +79,8 @@
/obj/item/clothing/suit/jacket/ryddid
name = "Ryddid"
desc = "An old worn out piece of clothing belonging to a certain small demon."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "darkcoat"
inhand_icon_state = "greatcoat"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -89,9 +89,9 @@
/obj/item/clothing/neck/cloak/grunnyyy
name = "black and red cloak"
desc = "The design on this seems a little too familiar."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "infcloak"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = NONE
@@ -101,7 +101,7 @@
/obj/item/canvas/drawingtablet
name = "drawing tablet"
desc = "A portable tablet that allows you to draw. Legends say these can earn the owner a fortune in some sectors of space."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "drawingtablet"
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
@@ -177,27 +177,27 @@
/datum/action/item_action/dtselectcolor
name = "Change Color"
desc = "Change your color."
- button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
button_icon_state = "drawingtablet"
/datum/action/item_action/dtcolormenu
name = "Color Menu"
desc = "Select, save, or delete a color in your tablet's color menu!"
- button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
button_icon_state = "drawingtablet"
/datum/action/item_action/dtcleargrid
name = "Clear Canvas"
desc = "Clear the canvas of your drawing tablet."
- button_icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ button_icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
button_icon_state = "drawingtablet"
// Donation reward for Thedragmeme
/obj/item/clothing/suit/furcoat
name = "leather coat"
desc = "A thick, comfy looking leather coat. It's got some fluffy fur at the collar and sleeves."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "furcoat"
inhand_icon_state = "hostrench"
blood_overlay_type = "coat"
@@ -209,9 +209,9 @@
/obj/item/clothing/under/syndicate/tacticool/black
name = "black turtleneck"
desc = "Tacticool as fug. Comfy too."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "black_turtleneck"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
supports_variations_flags = NONE
armor_type = /datum/armor/clothing_under/none
can_adjust = FALSE //There wasnt an adjustable sprite anyways
@@ -222,8 +222,8 @@
/obj/item/clothing/shoes/jackboots/heel
name = "high-heeled jackboots"
desc = "Almost like regular jackboots... why are they on a high heel?"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi'
icon_state = "heel-jackboots"
supports_variations_flags = NONE
uses_advanced_reskins = FALSE
@@ -233,8 +233,8 @@
/obj/item/clothing/shoes/clown_shoes/britches
desc = "The prankster's standard-issue clowning shoes. They look extraordinarily cute. Ctrl-click to toggle waddle dampeners."
name = "Britches' shoes"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi'
icon_state = "clown_shoes_cute"
supports_variations_flags = NONE
resistance_flags = FIRE_PROOF
@@ -243,8 +243,8 @@
/obj/item/clothing/under/rank/civilian/clown/britches
name = "Britches' dress"
desc = "'HONK!' (but cute) "
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "clowndress"
supports_variations_flags = NONE
resistance_flags = FIRE_PROOF
@@ -253,8 +253,8 @@
/obj/item/clothing/mask/gas/britches
name = "Britches' mask"
desc = "A true prankster's facial attire. Cute."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
icon_state = "cute_mask"
inhand_icon_state = null
dye_color = "clown"
@@ -269,8 +269,8 @@
/obj/item/clothing/mask/gas/nightlight
name = "\improper FIR-36 half-face rebreather"
desc = "A close-fitting respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-36 Rebreather is commonly used by Military and Civilian Personnel alike. It reeks of Militarism."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
icon_state = "fir36"
actions_types = list(/datum/action/item_action/adjust)
clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS //same flags as actual sec hailer gas mask
@@ -305,17 +305,17 @@
/obj/item/clothing/head/caligram_cap_tan
name = "\improper Caligram tan softcap"
desc = "A Caligram's Fleet-branded hat in a '/surprisingly/' tasteful shade of brown."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "caligram_cap_tan"
// Donation reward for Raxraus
/obj/item/clothing/under/jumpsuit/caligram_fatigues_tan
name = "\improper Caligram tan fatigues"
desc = "A set of tan and brown work fatigues bearing a Caligram's Fleet insigna on an armband. Lacks the typical Tajaran extravagance."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
icon_state = "caligram_fatigues_tan"
worn_icon_state = "caligram_fatigues_tan"
@@ -323,8 +323,8 @@
/obj/item/clothing/suit/jacket/caligram_parka_tan
name = "\improper Caligram tan parka"
desc = "A tan parka with a fancy black belt and '/Caligram's Fleet/' stitched onto its armband."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "caligram_parka_tan"
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS
@@ -333,8 +333,8 @@
/obj/item/clothing/suit/armor/vest/caligram_parka_vest_tan
name = "\improper Caligram armored tan parka"
desc = "A tan parka with a fancy black belt, a lightly armored vest and '/Caligram's Fleet/' stitched onto its armband."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "caligram_parka_vest_tan"
inhand_icon_state = "armor"
body_parts_covered = CHEST|GROIN|ARMS
@@ -346,8 +346,8 @@
name = "brasspriest coat"
desc = "A reddish coat with brass-clad parts embed into said coat. You can hear the faint noise of some cogs turning from time to time inside."
icon_state = "brasspriest"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
@@ -356,8 +356,8 @@
name = "metallic-hydrogen robes"
desc = "An incredibly shiny dress that seems to be covered in a very thin sheet of metallic hydrogen all over the textiles. Not very protective."
icon_state = "hydrogenrobes"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
// Donation reward for ChillyLobster
@@ -365,8 +365,8 @@
name = "fitted wetsuit"
desc = "A fitted wetsuit for trapping in heat and water. Protects against outside elements ever-so-slightly."
icon_state = "wetsuit"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
armor_type = /datum/armor/clothing_under/wetsuit
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
can_adjust = FALSE
@@ -377,12 +377,12 @@
/obj/item/clothing/mask/animal/wolf
name = "wolf mask"
desc = "A dark mask in the shape of a wolf's head."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
icon_state = "kindle"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
inhand_icon_state = "gasmask_captain"
animal_type = "wolf"
- unique_death = 'modular_skyrat/master_files/sound/effects/wolfhead_curse.ogg'
+ unique_death = 'modular_nova/master_files/sound/effects/wolfhead_curse.ogg'
visor_flags_inv = HIDEFACIALHAIR | HIDESNOUT
flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
@@ -399,9 +399,9 @@
/obj/item/clothing/head/drake_skull
name = "skull of an ashdrake"
desc = "How did they get this?"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
icon_state = "drake_skull"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/large-worn-icons/32x64/head.dmi'
flags_cover = HEADCOVERSEYES
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
supports_variations_flags = NONE
@@ -410,17 +410,17 @@
/obj/item/clothing/gloves/fingerless/blutigen_wraps
name = "Blutigen wraps"
desc = "The one who wears these had everything and yet lost it all..."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
icon_state = "blutigen_wraps"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
// Donation reward for Random516
/obj/item/clothing/suit/blutigen_kimono
name = "Blutigen kimono"
desc = "For the eyes bestowed upon this shall seek adventure..."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
icon_state = "blutigen_kimono"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = NONE
@@ -428,9 +428,9 @@
/obj/item/clothing/under/custom/blutigen_undergarment
name = "Dragon undergarments"
desc = "The Dragon wears the sexy?"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "blutigen_undergarment"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
supports_variations_flags = NONE
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -467,8 +467,8 @@
/obj/item/clothing/head/avipilot
name = "smuggler's flying cap"
desc = "Shockingly, despite space winds, and the lack of any practicality, this pilot cap seems to be fairly well standing, there's a rabbit head seemingly stamped into the side of it."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "avipilotup"
inhand_icon_state = "rus_ushanka"
flags_inv = HIDEEARS|HIDEHAIR
@@ -500,9 +500,9 @@
// Donation reward for NetraKyram - public use allowed via the command vendor
/obj/item/clothing/under/rank/captain/dress
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
name = "captain's dress"
desc = "It's a blue dress with some worn-gold markings denoting the rank of \"Captain\"."
icon_state = "dress_cap_s"
@@ -515,9 +515,9 @@
/obj/item/clothing/under/rank/blueshield/netra
name = "black and silver armored dress"
desc = "An ankle length black and silver dress, made out of some shiny synthetic material with inlaid kevlar shards and silver reinforcements, a silver ring surrounds the collar, and it doesn't appear to have a zipper... How does somebody put this thing on anyways?"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "silver_dress"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
worn_icon_digi = null
supports_variations_flags = NONE
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -526,17 +526,17 @@
/obj/item/clothing/gloves/netra
name = "black and silver gloves"
desc = "Some black gloves with silver reinforcements, made of a shiny synthetic material."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
icon_state = "silver_dress_gloves"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
// Donation reward for NetraKyram
/obj/item/clothing/shoes/jackboots/netra
name = "polished jackboots"
desc = "Some standard issue jackboots, spit-shined to a reflective sheen, wreaking of the scent of silicon parade polish."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi'
icon_state = "silver_dress_boots"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi'
supports_variations_flags = NONE
uses_advanced_reskins = FALSE
@@ -546,9 +546,9 @@
/obj/item/clothing/neck/cloak/inferno
name = "Kiara's cloak"
desc = "The design on this seems a little too familiar."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "infcloak"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
w_class = WEIGHT_CLASS_SMALL
body_parts_covered = CHEST|GROIN|LEGS|ARMS
@@ -557,8 +557,8 @@
name = "Kiara's collar"
desc = "A soft black collar that seems to stretch to fit whoever wears it."
icon_state = "infcollar"
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
alternate_worn_layer = UNDER_SUIT_LAYER
/// What's the name on the tag, if any?
var/tagname = null
@@ -580,7 +580,7 @@
/obj/item/clothing/accessory/medal/steele
name = "Insignia Of Steele"
desc = "An intricate pendant given to those who help a key member of the Steele Corporation."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "steele"
medaltype = "medal-silver"
@@ -588,21 +588,21 @@
/obj/item/toy/darksabre
name = "Kiara's sabre"
desc = "This blade looks as dangerous as its owner."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
icon_state = "darksabre"
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
/obj/item/toy/darksabre/get_belt_overlay()
- return mutable_appearance('modular_skyrat/master_files/icons/donator/obj/custom.dmi', "darksheath-darksabre")
+ return mutable_appearance('modular_nova/master_files/icons/donator/obj/custom.dmi', "darksheath-darksabre")
// Donation reward for inferno707
/obj/item/storage/belt/sabre/darksabre
name = "ornate sheathe"
desc = "An ornate and rather sinister looking sabre sheathe."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
icon_state = "darksheath"
worn_icon_state = "darksheath"
@@ -620,8 +620,8 @@
/obj/item/clothing/suit/armor/vest/darkcarapace
name = "dark armor"
desc = "A dark, non-functional piece of armor sporting a red and black finish."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
icon_state = "darkcarapace"
blood_overlay_type = "armor"
dog_fashion = /datum/dog_fashion/back
@@ -632,9 +632,9 @@
/obj/item/clothing/mask/hheart
name = "Hollow Heart"
desc = "It's an odd ceramic mask. Set in the internal side are several suspicious electronics branded by Steele Tech."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
icon_state = "hheart"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
var/c_color_index = 1
var/list/possible_colors = list("off", "blue", "red")
actions_types = list(/datum/action/item_action/hheart)
@@ -675,8 +675,8 @@
name = "Project: Zul-E"
desc = "A standard version of a prototype cloak given out by Nanotrasen higher ups. It's surprisingly thick and heavy for a cloak despite having most of it's tech stripped. It also comes with a bluespace trinket which calls it's accompanying hat onto the user. A worn inscription on the inside of the cloak reads 'Fleuret' ...the rest is faded away."
icon_state = "zuliecloak"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
body_parts_covered = CHEST|GROIN|ARMS
slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
@@ -686,8 +686,8 @@
name = "NT special issue"
desc = "This hat is unquestionably the best one, bluespaced to and from CentCom. It smells of Fish and Tea with a hint of antagonism"
icon_state = "zuliecap"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
flags_inv = null
supports_variations_flags = NONE
@@ -696,16 +696,16 @@
name = "legendary healer's cloak"
desc = "Worn by the most skilled professional medics on the station, this legendary cloak is only attainable by becoming the pinnacle of healing. This status symbol represents the wearer has spent countless years perfecting their craft of helping the sick and wounded."
icon_state = "healercloak"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
// Donation reward for Kathrin Bailey / Floof Ball
/obj/item/clothing/under/custom/lannese
name = "Lannese dress"
desc = "An alien cultural garment for women, coming from a distant planet named Cantalan."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "lannese"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
supports_variations_flags = NONE
inhand_icon_state = "firefighter"
can_adjust = TRUE
@@ -715,16 +715,16 @@
/obj/item/clothing/under/custom/lannese/vambrace
desc = "An alien cultural garment for women, coming from a distant planet named Cantalan. Shiny vambraces included!"
icon_state = "lannese_vambrace"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS|FEET
// Donation reward for Hacker T.Dog
/obj/item/clothing/suit/scraparmour
name = "scrap armour"
desc = "A shoddily crafted piece of armour. It provides no benefit apart from being clunky."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
icon_state = "scraparmor"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
worn_icon_state = "scraparmor"
body_parts_covered = CHEST
@@ -732,8 +732,8 @@
/obj/item/clothing/mask/luchador/enzo
name = "mask of El Red Templar"
desc = "A mask belonging to El Red Templar, a warrior of lucha. Taking it from him is not recommended."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
icon_state = "luchador"
worn_icon_state = "luchador"
clothing_flags = MASKINTERNALS
@@ -744,8 +744,8 @@
name = "starlight singer bikini"
desc = " "
icon_state = "mikubikini"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
worn_icon_state = "mikubikini"
body_parts_covered = CHEST|GROIN
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -755,8 +755,8 @@
name = "starlight singer jacket"
desc = " "
icon_state = "mikujacket"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
worn_icon_state = "mikujacket"
// Donation Reward for Grand Vegeta
@@ -764,8 +764,8 @@
name = "starlight singer hair"
desc = " "
icon_state = "mikuhair"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
worn_icon_state = "mikuhair"
flags_inv = HIDEHAIR
@@ -774,8 +774,8 @@
name = "starlight singer gloves"
desc = " "
icon_state = "mikugloves"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
worn_icon_state = "mikugloves"
// Donation Reward for Grand Vegeta
@@ -786,16 +786,16 @@
greyscale_colors = null
desc = " "
icon_state = "mikuleggings"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi'
worn_icon_state = "mikuleggings"
// Donation reward for CandleJax
/obj/item/clothing/head/helmet/space/plasmaman/candlejax
name = "emission's helmet"
desc = "A special containment helmet designed for heavy usage. Multiple dings and notches are on this one."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "emissionhelm"
@@ -803,41 +803,41 @@
/obj/item/clothing/head/helmet/space/plasmaman/candlejax2
name = "azulean's environment helmet"
desc = "An Azulean-made Enviro-Helmet, adjusted for the unique skull shape typical of the species. Alongside the standard features, it includes an embossment of the Azulean Crest on the back of the helmet."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "anahead"
// Donation reward for CandleJax
/obj/item/clothing/under/plasmaman/candlejax
name = "emission's containment suit"
desc = "A modified envirosuit featuring a reserved color scheme."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "emissionsuit"
// Donation reward for CandleJax
/obj/item/clothing/under/plasmaman/candlejax2
name = "azulean's environment suit"
desc = "An Azulean-made Enviro-Suit. Fitted to the Azulean form, it has surplus containment fabric designed to give the solidified mass of plasma that was once a tail some breathing room."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "ana_envirosuit"
// Donation reward for CandleJax
/obj/item/clothing/under/plasmaman/jax2
name = "xuracorp hazard underfitting"
desc = "A hazard suit fitted with bio-resistant fibers. Utilizes self-sterilizing pumps fitted in the back."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "plasmaman_jax"
// Donation reward for Raxraus
/obj/item/clothing/shoes/combat/rax
name = "tactical boots"
desc = "Tactical and sleek. This model seems to resemble Armadyne's."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/feet_digi.dmi'
icon_state = "armadyne_boots"
worn_icon_state = "armadyne_boots"
@@ -850,9 +850,9 @@
/obj/item/clothing/under/rank/security/rax
name = "banded uniform"
desc = "Personalized and tailored to fit, this uniform is designed to protect without compromising its stylishness."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
icon_state = "hos_black"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
@@ -860,8 +860,8 @@
/obj/item/clothing/suit/jacket/delta
name = "grey winter hoodie"
desc = "A plain old grey hoodie. It has some puffing on the inside, and a animal fur trim around half of the hood."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "greycoat"
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
@@ -871,8 +871,8 @@
/obj/item/clothing/suit/jacket/cherno
name = "silver-buttoned coat"
desc = "A comfy-looking blue coat. It looks a bit fancy, with shiny silver buttons and a few belts!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "chernocoat"
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
@@ -882,8 +882,8 @@
/obj/item/clothing/glasses/welding/steampunk_goggles
name = "steampunk goggles"
desc = "This really feels like something you'd expect to see sitting on top of a certain ginger's head... They have a rather fancy brass trim around the lenses."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi'
icon_state = "goldengoggles"
slot_flags = ITEM_SLOT_EYES | ITEM_SLOT_HEAD // Making it fit in both first just so it can properly fit on the head slot in the loadout
flash_protect = FLASH_PROTECTION_NONE
@@ -1015,8 +1015,8 @@
name = "ashen wastewalker cloak"
desc = "A cloak of advanced make. Clearly beyond what ashwalkers are capable of, it was probably pulled from a downed vessel or something. It seems to have been reinforced with goliath hide and watcher sinew, and the hood has been torn off."
icon_state = "ashencloak"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
body_parts_covered = CHEST|LEGS|ARMS
supports_variations_flags = NONE
@@ -1024,32 +1024,32 @@
/obj/item/clothing/head/nanotrasen_consultant/hubert
name = "CC ensign's cap"
desc = "A tailor made peaked cap, denoting the rank of Ensign."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "CCofficerhat"
//Donation reward for Hacker T.Dog
/obj/item/clothing/suit/armor/vest/nanotrasen_consultant/hubert
name = "CC ensign's armoured vest"
desc = "A tailor made Ensign's armoured vest, providing the same protection - but in a more stylish fashion."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "CCvest"
//Donation reward for Hacker T.Dog
/obj/item/clothing/under/rank/nanotrasen_consultant/hubert
name = "CC ensign's uniform"
desc = "A tailor-made Ensign's uniform, various medals and chains hang down from it."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "CCofficer"
// Donation reward for Cherno_00
/obj/item/clothing/head/costume/ushanka/frosty
name = "blue ushanka"
desc = "A dark blue ushanka with a hand-stitched snowflake on the front. Cool to the touch."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "fushankadown"
upsprite = "fushankaup"
downsprite = "fushankadown"
@@ -1058,16 +1058,16 @@
/obj/item/clothing/neck/cross
name = "silver cross"
desc = "A silver cross to be worn on a chain around your neck. Certain to bring you favour from up above."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
icon_state = "cross"
// Donation reward for gamerguy14948
/obj/item/storage/belt/fannypack/occult
name = "trinket belt"
desc = "A belt covered in various trinkets collected through time. Doesn't look like there's much space for anything else nowadays."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/belt.dmi'
icon_state = "occultfannypack"
worn_icon_state = "occultfannypack"
@@ -1075,8 +1075,8 @@
/obj/item/clothing/under/occult
name = "occult collector's outfit"
desc = "A set of clothes fit for someone dapper that isn't afraid of getting dirty."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "occultoutfit"
supports_variations_flags = NONE
@@ -1084,8 +1084,8 @@
/obj/item/clothing/head/hooded/occult
name = "hood"
desc = "Certainly makes you look more ominous."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "occulthood"
supports_variations_flags = NONE
@@ -1093,8 +1093,8 @@
/obj/item/clothing/suit/hooded/occult
name = "occult collector's coat"
desc = "A big, heavy coat lined with leather and ivory cloth, adorned with a hood. It looks dusty."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "occultcoat"
hoodtype = /obj/item/clothing/head/hooded/occult
supports_variations_flags = NONE
@@ -1103,24 +1103,24 @@
/obj/item/clothing/mask/breath/vox/octus
name = "sinister visor"
desc = "Skrektastic."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask_vox.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
+ worn_icon_vox = 'modular_nova/master_files/icons/donator/mob/clothing/mask_vox.dmi'
icon_state = "death"
// Donation reward for 1ceres
/obj/item/clothing/glasses/rosecolored
name = "rose-colored glasses"
desc = "Goggle-shaped glasses that seem to have a HUD-like feed in some odd line-based script. It doesn’t look like they were made by NT."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi'
icon_state = "rose"
// Donation reward for Fuzlet
/obj/item/card/fuzzy_license
name = "license to hug"
desc = "A very official looking license. Not actually endorsed by Nanotrasen."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "license"
var/possible_types = list(
@@ -1159,21 +1159,21 @@
/obj/item/clothing/suit/jacket/gorlex_harness
name = "engine technician harness"
desc = "A blood-red engineering technician harness. You can't seem to figure out a use to it, but it seems to seal magnetically in some places."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "gorlexharness"
// Donation reward for 1ceres
/obj/item/poster/korpstech
name = "Korps Genetics poster"
poster_type = /obj/structure/sign/poster/contraband/korpstech
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "rolled_poster"
/obj/structure/sign/poster/contraband/korpstech
name = "Korps Genetics"
desc = "This poster bears a huge, pink helix on it, with smaller text underneath it that reads 'The Korps institute, advancing the Genetics field since 2423!'"
- icon = 'modular_skyrat/modules/aesthetics/posters/contraband.dmi'
+ icon = 'modular_nova/modules/aesthetics/posters/contraband.dmi'
icon_state = "korpsposter"
MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
@@ -1182,8 +1182,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/glasses/eyepatch/rosecolored
name = "rose-colored eyepatch"
desc = "A customized eyepatch with a bright pink HUD floating in front of it. It looks like there's more to it than just an eyepatch, considering the materials it's made of."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi'
icon_state = "rosepatch_R"
base_icon_state = "rosepatch"
@@ -1193,8 +1193,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
desc = "A labcoat crafted from a variety of pristine materials, sewn together with a frightening amount of skill. The fabric is aery, smooth as silk, and exceptionally pleasant to the touch. The golden stripes are visible in the dark, working as a beacon to the injured. A small label on the inside of it reads \"Tenrai Kitsunes Supremacy\"."
base_icon_state = "tenraicoat"
icon_state = "tenraicoat"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/suit/toggle/labcoat/skyrat/tenrai/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
@@ -1207,8 +1207,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
name = "Cloak of the Fluffy One"
desc = "Hugs and kisses is only what this one knows, may their hugs be for all and not for their own \"For Fuffy Use Only\"."
icon_state = "fluffycloak"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
/obj/item/clothing/neck/cloak/fluffycloak/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
@@ -1219,8 +1219,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/mask/gas/larpswat
name = "Foam Force SWAT Mask"
desc = "What seems to be a SWAT mask at first, is actually a gasmask that has replica parts of a SWAT mask made from cheap plastic. Hey at least it looks good if you enjoy looking like a security larper."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
icon_state = "larpswat"
supports_variations_flags = NONE
@@ -1228,17 +1228,17 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/neck/fishpendant
name = "fish necklace"
desc = "A simple, silver necklace with a blue tuna pendant.\n\"L. Alazawi\" is inscribed on the back. You get the feeling it would go well with potatoes and green beans."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
icon_state = "fishpendant"
// Donation reward for Weredoggo
/obj/item/hairbrush/tactical
name = "tactical hairbrush"
desc = "Sometimes, after a brush with death, a good grooming is just the thing for tactical stress relief. "
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
icon_state = "tacticalbrush"
inhand_icon_state = "tacticalbrush"
@@ -1246,32 +1246,32 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/rank/security/head_of_security/alt/roselia
name = "black and red turtleneck"
desc = "A black turtleneck with red livery attached. Reminds you of a time before the color blue. It seems padded to hell and back as well."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "hosaltred"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
worn_icon_digi = null
/obj/item/clothing/glasses/hud/security/sunglasses/gars/giga/roselia
name = "red-tinted giga HUD gar glasses"
desc = "GIGA GAR glasses with a security hud implanted in the lens. Reminds you of a time before the color blue."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi'
icon_state = "supergarsred"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi'
//Donation reward for Konstyantyn
/obj/item/clothing/accessory/badge/holo/jade
name = "jade holobadge"
desc = "A strangely green holobadge. 'Lieutenant Uriah' is stamped onto it, above the letters JS."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
icon_state = "greenbadge"
// Donation reward for Dudewithatude
/obj/item/clothing/suit/toggle/rainbowcoat
name = "rainbow coat"
desc = "A wonderfully brilliant coat that displays the color of the rainbow!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "rainbowcoat"
base_icon_state = "rainbowcoat"
@@ -1280,16 +1280,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
name = "recruiter cap"
desc = "Hey, free college!"
icon_state = "officerhat"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
worn_icon_state = "officerhat"
// Donation reward for M97screwsyourparents
/obj/item/clothing/suit/toggle/recruiter_jacket
name = "recruiter jacket"
desc = "Hey, free college!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "officerjacket"
base_icon_state = "officerjacket"
@@ -1297,9 +1297,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/recruiter_uniform
name = "recruiter uniform"
desc = "Hey, free college!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "oldmarine_whites"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
worn_icon_digi = null
//Donation reward for Tetrako
@@ -1318,10 +1318,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/accessory/hypno_watch
name = "cracked pocket watch"
desc = "A shining pocket watch, cast in gold and embossed with metallic swirls that almost seem amethyst under the right light... There's a button on the top to unlatch the front panel, although all that's inside is a layer of cracked glass, the argent hands stuck pointing to 7:07 PM. The brushed silver of these arrows almost seems to swirl if one's gaze lingers for too long. Despite its inert appearance, the eerie mechanical sound of gears turning and clicking in place seems to quietly ring out from the artifact. In the right hands..."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
worn_icon_state = "pocketwatch"
icon_state = "pocketwatch"
inhand_icon_state = "pocketwatch"
@@ -1346,9 +1346,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/bubbly_clown/skirt
name = "bubbly clown dress"
desc = "A bright and cheerful clown dress, honk!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "bubbly_clown_dress"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -1361,15 +1361,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
This one has an engraving on the Marine Corps logo side, etched in a circle around it: \
\"To Staff Sargent Henry Rockwell, for his exemplary service to the Special Operations community and his outstanding moral fiber \
and shining example to the core values of the Sol Federation Marine Corps.\""
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
sideslist = list("MARSOC", "SFMC")
// Donation reward for Kay-Nite
/obj/item/clothing/under/tactichill
name = "tactichill jacket"
desc = "The brighter variant of the tacticool clotheswear, for when you want to look even cooler than usual and still operate at the same time."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "tactichill"
// Donation reward for thedragmeme
@@ -1378,48 +1378,48 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/shoes/fancy_heels/drag/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
+ AddComponent(/datum/component/squeak, list('modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
// Donation reward for Razurath
/obj/item/clothing/under/bimpcap
name = "Formal Matte Black Captain Uniform"
desc = "A professional looking matte black uniform cladded with medals of distintive service and valor, only worn by the highest of station officials."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "bimpcap"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
// Donation reward for Nikohyena
/obj/item/clothing/glasses/gold_aviators
name = "purple and gold aviators"
desc = "A round pair of gold aviator glasses, the lenses having been applied with a gem-like purple tint."
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/glasses.dmi'
icon_state = "goldaviator"
// Donation reward for Thedragmeme
/obj/item/clothing/under/caged_dress/skirt
name = "Caged Purple Dress"
desc = "A silky purple dress with a partially exposed crinoline underneath."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
icon_state = "caged_dress"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
// Donation reward for Thedragmeme
/obj/item/clothing/suit/short_coat
name = "Short Purple Coat"
desc = "A short black and purple coat, mostly used for asthetics then insulating the person wearing it."
icon_state = "short_coat"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
// Donation reward for Thedragmeme
/obj/item/clothing/neck/flower_collar
name = "Flower Collar"
desc = "A purple collar with a dainty red flower attached to the right side of the item."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/necklaces.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/necklaces.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
icon_state = "flower_collar"
// Donation reward for Sigmar Alkahest
@@ -1427,15 +1427,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
name = "short-sleeved kimono"
desc = "A traditional ancient Earth Japanese Kimono. It's white with a gold trim and burnished gold ivy pattern."
icon_state = "kimono-gold"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
// Donation reward for Sigmar Alkahest
/obj/item/clothing/head/hooded/sigmarcoat
name = "black raincoat hood"
desc = "Certainly makes you look more ominous."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "long-coat-hood"
supports_variations_flags = NONE
@@ -1443,8 +1443,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/suit/hooded/sigmarcoat
name = "black open-faced raincoat"
desc = "A light black raincoat. You didn't even know they're made in this color."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "long-coat"
hoodtype = /obj/item/clothing/head/hooded/sigmarcoat
supports_variations_flags = NONE
@@ -1454,7 +1454,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/gloves/ring/hypno/nuke
name = "suspiciously glossy ring"
desc = "This ring oozes with an assertive edge as sharp light bends along the smooth, black bronze. Like the finger that wears it, an exceptional amount of polish repels nearly all the light that glances along its surface. If you look closer, a slight golden hue indicates the precious metals inside the alloy."
- icon = 'modular_skyrat/master_files/icons/obj/ring.dmi'
+ icon = 'modular_nova/master_files/icons/obj/ring.dmi'
icon_state = "ringblack"
spans = list("glossy")
@@ -1462,35 +1462,35 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/head/costume/strigihat
name = "starry witch hat"
desc = "A cute witch hat typically worn by an owl-like teshari."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/donator/mob/clothing/head_teshari.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/donator/mob/clothing/head_teshari.dmi'
icon_state = "strigihat"
//Donation reward for Razurath
/obj/item/clothing/head/razurathhat
name = "Golden Nanotrasen Officer Cap"
desc = "A Nanotrasen officer cap. Now darker, golder, and cooler!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "razurath_hat"
//Donation reward for Razurath
/obj/item/clothing/suit/razurathcoat
name = "Golden Nanotrasen Officer Coat"
desc = "A fancy Nanotrasen officer coat. Now darker, golder, and cooler than ever!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "razurath_coat"
// Donation reward for MaSvedish
/obj/item/clothing/mask/holocigarette/masvedishcigar
name = "holocigar"
desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology. It has a small inscription of 'MG' on the golden label."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
inhand_icon_state = "masvedishcigar_off"
worn_icon_state = "masvedishcigar_off"
icon_state = "masvedishcigar_off"
@@ -1501,8 +1501,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/suit/armor/skyy
name = "silver jacket mk II"
desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "lt3_jacket"
inhand_icon_state = "syndicate-black"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -1510,8 +1510,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/suit/jacket/skyy
name = "silver jacket"
desc = "A jacket for those with a commanding presence. Made of synthetic fabric, it's interwoven with a special alloy that provides extra protection and style."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "lt3_jacket"
inhand_icon_state = "syndicate-black"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -1519,26 +1519,26 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/pants/skyy
name = "silver jeans"
desc = "A pair of jeans for those with a commanding presence. Made of shining, silver denim, it's interwoven with a special alloy that provides extra protection and style."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
icon_state = "lt3_jeans"
inhand_icon_state = "lt3_jeans"
/obj/item/clothing/gloves/skyy
name = "charcoal fingerless gloves"
desc = "Valuing form over function, these gloves barely cover more than the palm of your hand."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
icon_state = "lt3_gloves"
// Donation reward for Lolpopomg101
/obj/item/clothing/suit/hooded/colorblockhoodie
name = "color-block hoodie"
desc = "A soft pastel color-block hoodie from an unrecognizable brand."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "colorblockhoodie"
hoodtype = /obj/item/clothing/head/hooded/colorblockhoodie
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -1546,15 +1546,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/head/hooded/colorblockhoodie
name = "hood"
desc = "Very soft on the inside!"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "colorblockhood"
flags_inv = HIDEHAIR
/obj/item/clothing/suit/toggle/digicoat
toggle_noun = "holo-display"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
//Public donation reward for Razurath
@@ -1579,8 +1579,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/suit/armor/hos/elofy
name = "solar admiral coat"
desc = "A traditional naval officer uniform of the late 63rd Expeditionary Fleet. This faithful recreation bears the admiral's crest of the Luna Wolves Legion. It is uniquely tailored to the form of a certain wolf girl."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "coat_blackblue"
inhand_icon_state = "hostrench"
blood_overlay_type = "coat"
@@ -1614,8 +1614,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/head/hats/hos/elofy
name = "solar admiral hat"
- icon ='modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon ='modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "hat_black"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -1632,8 +1632,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/gloves/elofy
name = "solar admiral gloves"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/hands.dmi'
icon_state = "gloves_black"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -1649,8 +1649,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/shoes/jackboots/elofy
name = "solar admiral boots"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/feet.dmi'
icon_state = "boots_blackblue"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -1680,9 +1680,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
inhand_icon_state = "archerboots"
// Donation reward for nikotheguydude
-/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
+/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "vickyred"
name = "nobility dresscoat"
desc = "An elaborate coat composed of a silky yet firm material. \
@@ -1699,7 +1699,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
body_parts_covered = CHEST|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator/Initialize(mapload)
+/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator/Initialize(mapload)
. = ..()
qdel(GetComponent(/datum/component/toggle_icon)) // we dont have a toggle icon
@@ -1707,7 +1707,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
#define NOBILITY_DRESSCOAT_WASHING_CREDITS_NEEDED 2500
// this is based on an in-joke with the character whom inspires this donator item, where they need a fuckton of money to wash their coat. this takes it literally
-/obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator/machine_wash(obj/machinery/washing_machine/washer)
+/obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator/machine_wash(obj/machinery/washing_machine/washer)
var/total_credits = 0
var/list/obj/item/money_to_delete = list()
@@ -1748,8 +1748,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/costume/dragon_maid
name = "dragon maid uniform"
desc = "A uniform for a kitchen maid, stylized to have draconic detailing."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
icon_state = "dragon_maid"
body_parts_covered = CHEST|GROIN
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -1762,18 +1762,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/head/anubite
name = "\improper Anubite headpiece"
desc = "A dark coloured headpiece with golden accents. Its features seem reminiscent of the god Anubis."
- icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi'
icon_state = "anubite_headpiece"
- worn_icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi'
worn_y_offset = 4
// Donator reward Smol42
/obj/item/clothing/neck/trenchcoat
name = "Graceful Trenchcoat"
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/cloaks.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/cloaks.dmi'
icon_state = "trenchcoat"
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/neck.dmi'
body_parts_covered = CHEST|GROIN|LEGS|ARMS
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -1795,8 +1795,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/under/rank/cargo/qm/skirt/old
name = "quartermaster's jumpskirt"
desc = "It seems somebody has kept a couple outdated quartermaster uniforms. They smell of Rum and Smoke."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi'
//Donation reward for Jasohavents
/obj/item/food/griddle_toast/toaster_implant
diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm b/modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm
rename to modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm
index 6455bba4255..c4c9ea0cdf4 100644
--- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_items.dm
+++ b/modular_nova/modules/customization/modules/clothing/~donator/donator_items.dm
@@ -1,8 +1,8 @@
//Donator reward for UltramariFox
/obj/item/clothing/mask/cigarette/khi
name = "\improper Kitsuhana Singularity cigarette"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/masks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/mask.dmi'
icon_state = "khioff"
icon_on = "khion"
icon_off = "khioff"
@@ -10,12 +10,12 @@
list_reagents = list(/datum/reagent/drug/nicotine = 10, /datum/reagent/toxin/mindbreaker = 5)
/obj/item/cigbutt/khi
- icon = 'modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/cigarettes_khi.dmi'
icon_state = "khibutt"
/obj/item/storage/fancy/cigarettes/khi
name = "\improper Kitsuhana Singularity packet"
- icon = 'modular_skyrat/master_files/icons/obj/cigarettes_khi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/cigarettes_khi.dmi'
icon_state = "khi_cig_packet"
base_icon_state = "khi_cig_packet"
spawn_type = /obj/item/clothing/mask/cigarette/khi
@@ -23,7 +23,7 @@
//Donator reward for Stonetear
/obj/item/hairbrush/switchblade
name = "switchcomb"
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
icon_state = "switchblade"
base_icon_state = "switchblade"
desc = "A sharp, concealable, spring-loaded comb."
@@ -67,10 +67,10 @@
/obj/item/donator/transponder
name = "broken Helian transponder"
desc = "Used by Helians to communicate with their mothership, the screen is cracked and its edges scuffed. This one has seen better days."
- icon = 'modular_skyrat/master_files/icons/donator/obj/custom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/custom_w.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/custom.dmi'
+ worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/custom_w.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_nova/master_files/icons/donator/mob/inhands/donator_right.dmi'
icon_state = "transponder"
w_class = WEIGHT_CLASS_SMALL
slot_flags = ITEM_SLOT_BELT
@@ -102,7 +102,7 @@
"[icon2html(src, oviewers(2, user))] As [user] turns the red dial on the side of \the [src], it spits out some encrypted static and warbles before silencing itself.",
"[icon2html(src, user)] As you turn the red dial on the side of the device, it spits out some encrypted static and warbles before silencing itself.",
vision_distance=2)
- playsound(user, 'modular_skyrat/master_files/sound/effects/bab1.ogg', 100, TRUE)
+ playsound(user, 'modular_nova/master_files/sound/effects/bab1.ogg', 100, TRUE)
sparks.start()
current_state = TAP_SCREEN
next_activate = world.time + 20
@@ -112,7 +112,7 @@
"[icon2html(src, oviewers(2, user))] [user] taps the screen of \the [src], making it light up and starting the boot sequence. \the [src] displays an error message and shuts off.",
"[icon2html(src, user)] You tap the device's screen, making it light up and starting the boot sequence. The device displays an error message and shuts off.",
vision_distance=2)
- playsound(user, 'modular_skyrat/master_files/sound/effects/platform_call.ogg', 100, TRUE)
+ playsound(user, 'modular_nova/master_files/sound/effects/platform_call.ogg', 100, TRUE)
current_state = PRESS_KEYS
next_activate = world.time + 20
return
@@ -122,7 +122,7 @@
"[icon2html(src, user)] You press some keys, producing some promising beeps, before a harsh buzz returns the device to silence again.",
vision_distance=2)
sparks.start()
- playsound(user, 'modular_skyrat/master_files/sound/effects/gmalfunction.ogg', 100, TRUE)
+ playsound(user, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE)
current_state = EXTEND_ANTENNA
next_activate = world.time + 20
return
@@ -139,7 +139,7 @@
"[icon2html(src, oviewers(2, user))] [user] slaps the side of \the [src] and it whirrs into life, before thunking and remains still.",
"[icon2html(src, user)] You slap the side of the device and it whirrs into life, before thunking and remaining still.",
vision_distance=2)
- playsound(user, 'modular_skyrat/master_files/sound/effects/hacked.ogg', 100, TRUE)
+ playsound(user, 'modular_nova/master_files/sound/effects/hacked.ogg', 100, TRUE)
sparks.start()
current_state = TURN_DIAL
next_activate = world.time + 110
@@ -226,9 +226,9 @@
name = "Cat-Ear Headphones"
desc = "Merch of their Electric Guitarist Demi Galgan from the Singularity Shredders. It's heavily customizable and even comes with a holographic tail!"
icon_state = "catear_headphone"
- worn_icon = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi'
- lefthand_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
- righthand_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
+ worn_icon = 'modular_nova/modules/GAGS/icons/head/catear_headphone.dmi'
+ lefthand_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
+ righthand_file = 'modular_nova/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
inhand_icon_state = "catear_headphone"
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK
var/catTailToggled = FALSE
@@ -249,9 +249,9 @@
/obj/item/instrument/piano_synth/headphones/catear_headphone/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
if(!isinhands)
- . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_[song?.playing ? "on" : "off"]_emissive", src, alpha = src.alpha)
+ . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_[song?.playing ? "on" : "off"]_emissive", src, alpha = src.alpha)
if(catTailToggled)
- . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_tail_on_emissive", src, alpha = src.alpha)
+ . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_tail_on_emissive", src, alpha = src.alpha)
icon_state = "catear_headphone_tail[song?.playing ? "_on" : null]"
else
icon_state = "catear_headphone[song?.playing ? "_on" : null]"
@@ -264,4 +264,4 @@
/obj/item/instrument/piano_synth/headphones/catear_headphone/update_overlays()
. = ..()
- . += emissive_appearance('modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_obj_lights_emissive", src, alpha = src.alpha)
+ . += emissive_appearance('modular_nova/modules/GAGS/icons/head/catear_headphone.dmi', "catearphones_obj_lights_emissive", src, alpha = src.alpha)
diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm
similarity index 78%
rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm
rename to modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm
index 973aa09a694..f4678fc99f9 100644
--- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/SRseafood.dm
+++ b/modular_nova/modules/customization/modules/food_and_drinks/food/SRseafood.dm
@@ -1,7 +1,7 @@
/obj/item/food/canned/tuna
name = "can of tuna"
desc = "You can tune a piano, but you can't tuna fish."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "tunacan"
trash_type = /obj/item/trash/can/food/tuna
food_reagents = list(
@@ -14,5 +14,5 @@
/obj/item/trash/can/food/tuna
name = "can of tuna"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "tunacan_empty"
diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm
rename to modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm
index 970b9eb5710..be3caf67c00 100644
--- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/hemophage_food.dm
+++ b/modular_nova/modules/customization/modules/food_and_drinks/food/hemophage_food.dm
@@ -1,7 +1,7 @@
/obj/item/food/hemophage
name = "bloody food"
desc = "If you see this, then something's gone very wrong and you should report it whenever you get the chance."
- icon = 'modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/hemophage_food.dmi'
foodtypes = GORE | BLOODY
/obj/item/food/hemophage/blood_rice_pearl
@@ -105,7 +105,7 @@
/obj/item/food/soup/hemophage/blood_soup
name = "dinuguan"
desc = "A savory stew normally made of offal or freshly-simmered meat. This version features blood curds instead, while also featuring a rich, spicy and dark gravy made of fresh blood and vinegar. Chili and garlic were also added to enhance the savory flavor of the broth."
- icon = 'modular_skyrat/master_files/icons/obj/food/hemophage_food.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/hemophage_food.dmi'
icon_state = "blood_soup"
max_volume = 90
food_reagents = list(
diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm
similarity index 88%
rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm
rename to modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm
index 9a26ebee5d2..07d70a61ee4 100644
--- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/scottish.dm
+++ b/modular_nova/modules/customization/modules/food_and_drinks/food/scottish.dm
@@ -1,7 +1,7 @@
/obj/item/food/snacks/store/bread/haggis
name = "haggis"
desc = "A savoury pudding containing intestines."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "haggis"
food_reagents = list(
/datum/reagent/consumable/nutriment = 50,
@@ -16,7 +16,7 @@
/obj/item/food/snacks/breadslice/haggis
name = "haggis chunk"
desc = "A chunk of delicious haggis."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "haggis_chunk"
food_reagents = list(
/datum/reagent/consumable/nutriment = 10,
@@ -30,7 +30,7 @@
name = "haggis neeps and tatties "
desc = "Oi mate! No neeps, but double beets! SCAM!!!"
icon_state = "neep_tatty_haggis"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
food_reagents = list(
/datum/reagent/consumable/nutriment = 20,
/datum/reagent/consumable/nutriment/vitamin = 10,
@@ -42,7 +42,7 @@
/obj/item/food/raw_sausage/battered
name = "raw battered sausage"
desc = "A raw sausage coated in thick beer batter."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "batteredsausage"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
@@ -57,7 +57,7 @@
/obj/item/food/sausage/battered
name = "battered sausage"
desc = "A sausage coated in thick beer batter, best served with a portion of chips wrapped in a newspaper, it however, is pure cholesterol, Scottish people eat it. Few of them make it to 60."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "grilled_batteredsausage"
food_reagents = list(
/datum/reagent/consumable/nutriment/protein = 5,
@@ -74,7 +74,7 @@
/obj/item/food/cookie/shortbread
name = "shortbread"
desc = "A rectangular piece of cooked flour. Said to control the sun during Hogmanay."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "shortbread"
food_reagents = list(
/datum/reagent/consumable/nutriment = 6,
diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm b/modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm
similarity index 90%
rename from modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm
rename to modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm
index ff7fe82012a..d81bd8d1404 100644
--- a/modular_skyrat/modules/customization/modules/food_and_drinks/food/teshari_food.dm
+++ b/modular_nova/modules/customization/modules/food_and_drinks/food/teshari_food.dm
@@ -1,7 +1,7 @@
/obj/item/food/piru_dough
name = "piru dough"
desc = "A coarse, stretchy dough made from piru flour and muli juice in a striking purple color, acting as the basis for most teshari cuisine. Puffs up dramatically when grilled or baked."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "piru_dough"
food_reagents = list(/datum/reagent/consumable/nutriment = 6)
w_class = WEIGHT_CLASS_SMALL
@@ -21,7 +21,7 @@
/obj/item/food/piru_loaf
name = "piru loaf"
desc = "A loaf of soft piru bread in a striking dark purple color, ready to be cut into slices. It's surprisingly stretchy, and smells quite minty."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "piru_loaf"
food_reagents = list(/datum/reagent/consumable/nutriment = 20)
tastes = list("minty bread" = 1)
@@ -35,7 +35,7 @@
/obj/item/food/breadslice/piru
name = "piru bread slice"
desc = "A slice of stretchy piru bread."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "piru_bread_slice"
food_reagents = list(/datum/reagent/consumable/nutriment = 5)
tastes = list("minty bread" = 1)
@@ -45,7 +45,7 @@
/obj/item/food/flat_piru_dough
name = "flattened piru dough"
desc = "Flattened piru dough, can be cooked on a griddle or sliced into pasta."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "flat_piru_dough"
food_reagents = list(/datum/reagent/consumable/nutriment = 6)
tastes = list("minty dough" = 1)
@@ -64,7 +64,7 @@
/obj/item/food/grilled_piru_flatbread
name = "grilled piru flatbread"
desc = "Crispy, grilled piru flatbread. No longer as stretchy, but it smells absolutely amazing."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "grilled_piru_flatbread"
food_reagents = list(/datum/reagent/consumable/nutriment = 8)
tastes = list("minty flatbread" = 1)
@@ -74,7 +74,7 @@
/obj/item/food/piru_pasta
name = "piru pasta"
desc = "Thick-cut segments of piru dough formed into chewy pasta."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "piru_pasta"
food_reagents = list(/datum/reagent/consumable/nutriment = 4)
w_class = WEIGHT_CLASS_SMALL
@@ -85,7 +85,7 @@
/obj/item/food/baked_kiri
name = "baked kiri fruit"
desc = "A kiri fruit baked in an oven, causing the jelly inside to caramelize into a jelly donut-like crispy treat. Try not to get addicted."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "baked_kiri"
food_reagents = list(
/datum/reagent/consumable/nutriment = 6,
@@ -99,7 +99,7 @@
/obj/item/food/baked_muli
name = "baked muli pod"
desc = "A muli pod baked in an oven, causing the minty liquid inside to condense and the exterior to soften, giving the vegetable a hard-boiled egg consistency. Remarkably tasty and healthy!"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "baked_muli"
food_reagents = list(
/datum/reagent/consumable/nutriment = 4,
@@ -114,7 +114,7 @@
/obj/item/food/spiced_jerky
name = "spiced jerky"
desc = "A segment of meat seasoned with nakati spice and dehydrated. Makes for a tasty, chewy snack."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "spiced_jerky"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
@@ -128,7 +128,7 @@
/obj/item/food/sirisai_wrap
name = "sirisai wrap"
desc = "Meat and cabbage seasoned with nakati spice and wrapped tightly in flattened piru bread. Simple, light, delicious."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "sirisai_wrap"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
@@ -143,7 +143,7 @@
/obj/item/food/sweet_piru_noodles
name = "sweet piru noodles"
desc = "Piru pasta mixed in a bowl with chopped kiri fruit, muli pods, and carrots. It looks bizarre and seems kind of slimy, but the taste cannot be denied."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "sweet_piru_noodles"
trash_type = /obj/item/reagent_containers/cup/bowl
food_reagents = list(
@@ -160,7 +160,7 @@
/obj/item/food/kiri_curry
name = "kiri curry"
desc = "Spiced meat mixed with finely sliced piru pasta and minced chili all drizzled in piru jelly sauce, just the perfect balance of spicy and sweet."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "kiri_curry"
trash_type = /obj/item/reagent_containers/cup/bowl
food_reagents = list(
@@ -177,7 +177,7 @@
/obj/item/food/sirisai_flatbread
name = "sirisai flatbread"
desc = "Piru flatbread grilled until crispy and topped with meat, chopped muli pods, and tomato sauce. Looks similar to a pizza, but way more purple and blue. Can be sliced!"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "sirisai_flatbread"
food_reagents = list(
/datum/reagent/consumable/nutriment = 24,
@@ -196,7 +196,7 @@
/obj/item/food/sirisai_flatbread_slice
name = "sirisai flatbread slice"
desc = "A slice of piru flatbread grilled until crispy and topped with meat, chopped muli pods, and tomato sauce. Looks similar to a slice of pizza, but way more purple and blue."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "sirisai_flatbread_slice"
food_reagents = list(
/datum/reagent/consumable/nutriment = 6,
@@ -212,7 +212,7 @@
/obj/item/food/bluefeather_crisp
name = "bluefeather crisp"
desc = "A spiced cracker made of flattened, dried piru bread. The name comes from the blue stain often left on feathers when eaten with muli dip."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "bluefeather_crisp"
food_reagents = list(
/datum/reagent/consumable/nutriment = 4,
@@ -226,7 +226,7 @@
/obj/item/food/bluefeather_crisps_and_dip
name = "bluefeather crisps and dip"
desc = "Bluefeather crisp crackers, now with dip made of muli juice and tomatoes. The name comes from the blue stain often left on feathers when dripped onto them."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "bluefeather_crisps_and_dip"
food_reagents = list(
/datum/reagent/consumable/nutriment = 12,
@@ -241,7 +241,7 @@
/obj/item/food/stewed_muli
name = "stewed muli"
desc = "A simple stew of meat, carrots and cabbage all cooked in muli juice. For the growing teshari."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "stewed_muli"
trash_type = /obj/item/reagent_containers/cup/bowl
food_reagents = list(
@@ -258,7 +258,7 @@
/obj/item/food/stuffed_muli_pod
name = "stuffed muli pod"
desc = "A cooked muli pod, now stuffed with meat, minced kiri fruit, and chili. Chewy sweet and spicy all in one!"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "stuffed_muli_pod"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
@@ -274,7 +274,7 @@
/obj/item/food/caramel_jelly_toast
name = "caramel jelly toast"
desc = "A toasted slice of piru bread with a generous slathering of thick caramel and sweet kiri jelly. Is this supposed to be breakfast or desert?"
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "caramel_jelly_toast"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
@@ -288,7 +288,7 @@
/obj/item/food/kiri_jellypuff
name = "kiri jellypuff"
desc = "A piece of piru bread puffed and rolled into a thick disk, containing a kiri jelly and cream filling and sprinkled with piru flour. Just one will never be enough."
- icon = 'modular_skyrat/master_files/icons/obj/food/irnbru.dmi'
+ icon = 'modular_nova/master_files/icons/obj/food/irnbru.dmi'
icon_state = "kiri_jellypuff"
food_reagents = list(
/datum/reagent/consumable/nutriment = 8,
diff --git a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm b/modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm
rename to modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm
index 14691393f03..0a649b4f4f2 100644
--- a/modular_skyrat/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/modular_nova/modules/customization/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -1,4 +1,4 @@
-// Modular Booze MIXES, see the following file for the reagents: modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm
+// Modular Booze MIXES, see the following file for the reagents: modular_nova\modules\customization\modules\reagents\chemistry\reagents\alcohol_reagents.dm
// ROBOT ALCOHOL PAST THIS POINT
// WOOO!
@@ -125,7 +125,7 @@
results = list(/datum/reagent/consumable/ethanol/hippie_hooch = 5)
required_reagents = list(/datum/reagent/medicine/antihol = 1, /datum/reagent/consumable/ethanol/crevice_spike = 3, /datum/reagent/medicine/earthsblood = 1)
mix_message = "You hear wood flutes and nature as it mixes."
- mix_sound = 'modular_skyrat/modules/emotes/sound/voice/hoot.ogg'
+ mix_sound = 'modular_nova/modules/emotes/sound/voice/hoot.ogg'
/datum/chemical_reaction/drink/research_rum
results = list(/datum/reagent/consumable/ethanol/research_rum = 4)
@@ -199,7 +199,7 @@
reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER
-// Non-Booze, see modular_skyrat\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm
+// Non-Booze, see modular_nova\modules\customization\modules\reagents\chemistry\reagents\drink_reagents.dm
/datum/chemical_reaction/drink/pinkmilk
results = list(/datum/reagent/consumable/pinkmilk = 2)
diff --git a/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm b/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm
new file mode 100644
index 00000000000..21ac936429b
--- /dev/null
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/bananaspider.dm
@@ -0,0 +1,35 @@
+/obj/item/seeds/banana/spider_banana
+ name = "pack of leggy banana seeds"
+ desc = "They're seeds that grow into banana trees. However, those bananas might be alive."
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon_state = "seed-spibanana"
+ species = "spibanana"
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
+ icon_grow = "spibanana-grow"
+ icon_dead = "spibanana-dead"
+ icon_harvest = "spibanana-harvest"
+ plantname = "Leggy Banana Tree"
+ product = /obj/item/food/grown/banana/banana_spider_spawnable
+ genes = list(/datum/plant_gene/trait/slip)
+
+/obj/item/food/grown/banana/banana_spider_spawnable
+ name = "banana spider"
+ desc = "You do not know what it is, but you can bet the clown would love it."
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon_state = "spibanana"
+ foodtypes = GORE | MEAT | RAW | FRUIT
+ var/awakening = FALSE
+
+/obj/item/food/grown/banana/banana_spider_spawnable/attack_self(mob/user)
+ if(awakening || isspaceturf(user.loc))
+ return
+ to_chat(user, span_notice("You decide to wake up the banana spider..."))
+ awakening = TRUE
+ addtimer(CALLBACK(src, PROC_REF(spawnspider)), 8 SECONDS)
+
+/obj/item/food/grown/banana/banana_spider_spawnable/proc/spawnspider()
+ if(!QDELETED(src))
+ var/mob/living/basic/banana_spider/banana_spider = new(get_turf(loc))
+ banana_spider.visible_message(span_notice("The banana spider chitters as it stretches its legs"))
+ qdel(src)
+
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm b/modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm
rename to modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm
index a257a9dcb2a..ac5478bd9fa 100644
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/kiri.dm
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/kiri.dm
@@ -2,12 +2,12 @@
/obj/item/seeds/kiri
name = "pack of kiri starters"
desc = "This bacterial colony forms into kiri fruits."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-kiri"
species = "kiri"
plantname = "Kiri Colony"
product = /obj/item/food/grown/kiri
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_grow = "kiri-grow"
icon_dead = "kiri-dead"
lifespan = 60
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/kiri
name = "kiri fruit"
desc = "A bizarre egg-shaped fruit, striped with a vivid pink and yellow color. It feels somewhat firm, but the entire thing is edible. Contains an ultra-sweet jelly typically used in teshari cuisine, or it can be baked by itself for a delightful treat."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "kiri"
foodtypes = FRUIT | SUGAR
grind_results = list(/datum/reagent/consumable/kiri_jelly = 0.1)
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm b/modular_nova/modules/customization/modules/hydroponics/grown/muli.dm
similarity index 82%
rename from modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm
rename to modular_nova/modules/customization/modules/hydroponics/grown/muli.dm
index 7f787804fc6..549603ca775 100644
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/muli.dm
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/muli.dm
@@ -2,12 +2,12 @@
/obj/item/seeds/muli
name = "pack of muli starters"
desc = "This bacterial colony forms into muli pods."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-muli"
species = "muli"
plantname = "Muli Colony"
product = /obj/item/food/grown/muli
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_grow = "muli-grow"
icon_dead = "muli-dead"
lifespan = 60
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/muli
name = "muli pod"
desc = "A soft, oval-shaped pod. Contains a minty pale-blue juice used for many applications in teshari cuisine."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "muli"
foodtypes = VEGETABLES
juice_typepath = /datum/reagent/consumable/muli_juice
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm b/modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm
similarity index 79%
rename from modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm
rename to modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm
index b51bf9ce385..45b1345a13a 100644
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/nakati.dm
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/nakati.dm
@@ -2,12 +2,12 @@
/obj/item/seeds/nakati
name = "pack of nakati starters"
desc = "This bacterial colony forms into bioluminescent nakati growths."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-nakati"
species = "nakati"
plantname = "Nakati Colony"
product = /obj/item/food/grown/nakati
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_grow = "nakati-grow"
icon_dead = "nakati-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
@@ -20,7 +20,7 @@
seed = /obj/item/seeds/nakati
name = "nakati bark"
desc = "A segment of fragrant brown 'bark' from a nakati growth, grinds into a zesty spice widely used in teshari cooking."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "nakati"
foodtypes = VEGETABLES
grind_results = list(/datum/reagent/consumable/nakati_spice = 0)
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm b/modular_nova/modules/customization/modules/hydroponics/grown/piru.dm
similarity index 78%
rename from modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm
rename to modular_nova/modules/customization/modules/hydroponics/grown/piru.dm
index dbe36e0bb45..8e2c7d271f8 100644
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/piru.dm
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/piru.dm
@@ -2,13 +2,13 @@
/obj/item/seeds/piru
name = "pack of piru starters"
desc = "This bacterial colony forms into piru fronds."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-piru"
species = "piru"
plantname = "Piru Colony"
product = /obj/item/food/grown/piru
genes = list(/datum/plant_gene/trait/repeated_harvest)
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_grow = "piru-grow"
icon_dead = "piru-dead"
lifespan = 60
@@ -20,7 +20,7 @@
seed = /obj/item/seeds/piru
name = "piru frond"
desc = "A delicate frond of piru, resembling strands of silk more than leaves. grinds down into piru flour used in teshari cuisine."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "piru"
foodtypes = VEGETABLES
grind_results = list(/datum/reagent/consumable/piru_flour = 0)
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm b/modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm
similarity index 78%
rename from modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm
rename to modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm
index 6c2ba4244c4..44ef06e6129 100644
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/tea_coffee.dm
+++ b/modular_nova/modules/customization/modules/hydroponics/grown/tea_coffee.dm
@@ -3,9 +3,9 @@
// Catnip
/obj/item/seeds/tea/catnip
name = "pack of catnip seeds"
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
icon_state = "seed-catnip"
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
desc = "Long stalks with flowering tips, they contain a chemical that attracts felines."
species = "catnip"
plantname = "Catnip Plant"
@@ -18,7 +18,7 @@
/obj/item/food/grown/tea/catnip
seed = /obj/item/seeds/tea/catnip
name = "catnip buds"
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "catnip"
filling_color = "#4582B4"
grind_results = list(/datum/reagent/pax/catnip = 2, /datum/reagent/water = 1)
diff --git a/modular_skyrat/modules/customization/modules/jobs/_job.dm b/modular_nova/modules/customization/modules/jobs/_job.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/jobs/_job.dm
rename to modular_nova/modules/customization/modules/jobs/_job.dm
index 74d5e479691..189e643e2ff 100644
--- a/modular_skyrat/modules/customization/modules/jobs/_job.dm
+++ b/modular_nova/modules/customization/modules/jobs/_job.dm
@@ -161,9 +161,14 @@
/datum/job/proc/has_required_languages(datum/preferences/pref)
if(!required_languages)
return TRUE
- for(var/lang in required_languages)
+ // if we have a bilingual quirk, check that as well
+ var/bilingual_pref
+ if(/datum/quirk/bilingual::name in pref.all_quirks)
+ bilingual_pref = pref.read_preference(/datum/preference/choiced/language)
+
+ for(var/datum/language/lang as anything in required_languages)
//Doesnt have language, or the required "level" is too low (understood, while needing spoken)
- if(!pref.languages[lang] || pref.languages[lang] < required_languages[lang])
+ if((!pref.languages[lang] || pref.languages[lang] < required_languages[lang]) && bilingual_pref != lang.name) // NOVA EDIT - check the bilingual quirk
return FALSE
return TRUE
diff --git a/modular_skyrat/modules/customization/modules/language/_foreigner.dm b/modular_nova/modules/customization/modules/language/_foreigner.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/_foreigner.dm
rename to modular_nova/modules/customization/modules/language/_foreigner.dm
diff --git a/modular_skyrat/modules/customization/modules/language/_language_holder.dm b/modular_nova/modules/customization/modules/language/_language_holder.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/_language_holder.dm
rename to modular_nova/modules/customization/modules/language/_language_holder.dm
diff --git a/modular_skyrat/modules/customization/modules/language/ashtongue.dm b/modular_nova/modules/customization/modules/language/ashtongue.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/language/ashtongue.dm
rename to modular_nova/modules/customization/modules/language/ashtongue.dm
index 3a8b7b78597..82b4eef2225 100644
--- a/modular_skyrat/modules/customization/modules/language/ashtongue.dm
+++ b/modular_nova/modules/customization/modules/language/ashtongue.dm
@@ -24,6 +24,6 @@
"brut","vaahk","nah'za","diierk","piut","vuurk","cs'eer","jeirk","qiruvk",
)
icon_state = "ashtongue"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 90
secret = TRUE
diff --git a/modular_skyrat/modules/customization/modules/language/beachbum.dm b/modular_nova/modules/customization/modules/language/beachbum.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/beachbum.dm
rename to modular_nova/modules/customization/modules/language/beachbum.dm
diff --git a/modular_skyrat/modules/customization/modules/language/buzzwords.dm b/modular_nova/modules/customization/modules/language/buzzwords.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/buzzwords.dm
rename to modular_nova/modules/customization/modules/language/buzzwords.dm
diff --git a/modular_skyrat/modules/customization/modules/language/calcic.dm b/modular_nova/modules/customization/modules/language/calcic.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/calcic.dm
rename to modular_nova/modules/customization/modules/language/calcic.dm
diff --git a/modular_skyrat/modules/customization/modules/language/canilunzt.dm b/modular_nova/modules/customization/modules/language/canilunzt.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/language/canilunzt.dm
rename to modular_nova/modules/customization/modules/language/canilunzt.dm
index ad3fe09ec60..8473b75da24 100644
--- a/modular_skyrat/modules/customization/modules/language/canilunzt.dm
+++ b/modular_nova/modules/customization/modules/language/canilunzt.dm
@@ -15,5 +15,5 @@
"mak","lich","gen","or","ag","eck","gec","stag","onn","bin","ket","einech","cresthz","azunein","ghzth"
)
icon_state = "canilunzt"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 90
diff --git a/modular_skyrat/modules/customization/modules/language/chitinclick.dm b/modular_nova/modules/customization/modules/language/chitinclick.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/chitinclick.dm
rename to modular_nova/modules/customization/modules/language/chitinclick.dm
diff --git a/modular_skyrat/modules/customization/modules/language/common.dm b/modular_nova/modules/customization/modules/language/common.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/language/common.dm
rename to modular_nova/modules/customization/modules/language/common.dm
index cfa09a7220e..f02eeffee55 100644
--- a/modular_skyrat/modules/customization/modules/language/common.dm
+++ b/modular_nova/modules/customization/modules/language/common.dm
@@ -12,4 +12,4 @@
"di", "tol", "mi", "solari", "ite", "domum"
)
icon_state = "solcommon"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
diff --git a/modular_skyrat/modules/customization/modules/language/gutter.dm b/modular_nova/modules/customization/modules/language/gutter.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/language/gutter.dm
rename to modular_nova/modules/customization/modules/language/gutter.dm
index 610bf553655..ee3228d32e5 100644
--- a/modular_skyrat/modules/customization/modules/language/gutter.dm
+++ b/modular_nova/modules/customization/modules/language/gutter.dm
@@ -10,5 +10,5 @@
"tá", "vé", "sál", "fáb", "l'e", "seu", "deu", "meu", "vai", "ción", "tá"
)
icon_state = "gutter"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 40
diff --git a/modular_skyrat/modules/customization/modules/language/monkey.dm b/modular_nova/modules/customization/modules/language/monkey.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/monkey.dm
rename to modular_nova/modules/customization/modules/language/monkey.dm
diff --git a/modular_skyrat/modules/customization/modules/language/mushroom.dm b/modular_nova/modules/customization/modules/language/mushroom.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/mushroom.dm
rename to modular_nova/modules/customization/modules/language/mushroom.dm
diff --git a/modular_skyrat/modules/customization/modules/language/nekomimetic.dm b/modular_nova/modules/customization/modules/language/nekomimetic.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/nekomimetic.dm
rename to modular_nova/modules/customization/modules/language/nekomimetic.dm
diff --git a/modular_skyrat/modules/customization/modules/language/panslavic.dm b/modular_nova/modules/customization/modules/language/panslavic.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/language/panslavic.dm
rename to modular_nova/modules/customization/modules/language/panslavic.dm
index a744d2d3edf..cfc5ca2c272 100644
--- a/modular_skyrat/modules/customization/modules/language/panslavic.dm
+++ b/modular_nova/modules/customization/modules/language/panslavic.dm
@@ -19,5 +19,5 @@
"zem", "lya", "kan", "ce", "la", "ri", "јa", "snezh", "ne", "pa", "da", "vi", "ne"
)
icon_state = "panslavic"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 95
diff --git a/modular_skyrat/modules/customization/modules/language/piratespeak.dm b/modular_nova/modules/customization/modules/language/piratespeak.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/piratespeak.dm
rename to modular_nova/modules/customization/modules/language/piratespeak.dm
diff --git a/modular_skyrat/modules/customization/modules/language/shadowtongue.dm b/modular_nova/modules/customization/modules/language/shadowtongue.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/shadowtongue.dm
rename to modular_nova/modules/customization/modules/language/shadowtongue.dm
diff --git a/modular_skyrat/modules/customization/modules/language/siiktajr.dm b/modular_nova/modules/customization/modules/language/siiktajr.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/language/siiktajr.dm
rename to modular_nova/modules/customization/modules/language/siiktajr.dm
index cb826d45cba..0d67bb76e64 100644
--- a/modular_skyrat/modules/customization/modules/language/siiktajr.dm
+++ b/modular_nova/modules/customization/modules/language/siiktajr.dm
@@ -17,5 +17,5 @@
"län","ny","kor","stå","vär","nning","mmen","ärr","det","vil"
)
icon_state = "siiktajr"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 90
diff --git a/modular_nova/modules/customization/modules/language/skrell.dm b/modular_nova/modules/customization/modules/language/skrell.dm
new file mode 100644
index 00000000000..6793c6e38d3
--- /dev/null
+++ b/modular_nova/modules/customization/modules/language/skrell.dm
@@ -0,0 +1,10 @@
+/datum/language/skrell
+ name = "Skrelluq"
+ desc = "Popularly known as \"Skrellian\" by foreigners, this newly-discovered language that the Skrell employ follows no traditional speech patterns. It relies on various differently-pitched warbles and low-frequency sound to construct different sentences, and is nearly inaudible to non-Skrell and anyone lacking an appropriate implant."
+ space_chance = 100
+ flags = TONGUELESS_SPEECH
+ key = "K"
+ syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
+ default_priority = 90
+ icon_state = "skrell"
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
diff --git a/modular_skyrat/modules/customization/modules/language/spacer.dm b/modular_nova/modules/customization/modules/language/spacer.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/language/spacer.dm
rename to modular_nova/modules/customization/modules/language/spacer.dm
index e64e1162b98..859334c589c 100644
--- a/modular_skyrat/modules/customization/modules/language/spacer.dm
+++ b/modular_nova/modules/customization/modules/language/spacer.dm
@@ -7,5 +7,5 @@
"ada", "zir", "bian", "ach", "usk", "ado", "ich", "cuan", "iga", "qing", "le", "que", "ki", "qaf", "dei", "eta"
)
icon_state = "spacer"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 50
diff --git a/modular_skyrat/modules/customization/modules/language/te_velu_akko.dm b/modular_nova/modules/customization/modules/language/te_velu_akko.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/language/te_velu_akko.dm
rename to modular_nova/modules/customization/modules/language/te_velu_akko.dm
index c7a94272aa1..6bc0fedaf6c 100644
--- a/modular_skyrat/modules/customization/modules/language/te_velu_akko.dm
+++ b/modular_nova/modules/customization/modules/language/te_velu_akko.dm
@@ -20,5 +20,5 @@
"nga", "nge", "ngi", "ngo", "ngu", "pa", "pe", "pi", "po", "pu", "ra", "re", "ri", "ro", "ru", "ta", "te", "ti", "to", "tu", "wa", "we", "wi", "wo", "wu", "wha", "whe", "whi",
)
icon_state = "azulean"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 94
diff --git a/modular_skyrat/modules/customization/modules/language/terrum.dm b/modular_nova/modules/customization/modules/language/terrum.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/language/terrum.dm
rename to modular_nova/modules/customization/modules/language/terrum.dm
diff --git a/modular_nova/modules/customization/modules/language/vox.dm b/modular_nova/modules/customization/modules/language/vox.dm
new file mode 100644
index 00000000000..b70e93bb960
--- /dev/null
+++ b/modular_nova/modules/customization/modules/language/vox.dm
@@ -0,0 +1,10 @@
+/datum/language/vox
+ name = "Vox Standard"
+ desc = "A form of hybrid encoded language employed by the biomechanical Vox species, characterized by sounding extremely annoying and irritating to those who don't recognize it. It usually requires an implant to be spoken in its entirety."
+ key = "V"
+ flags = TONGUELESS_SPEECH
+ space_chance = 40
+ syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah","SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
+ icon_state = "vox-pidgin"
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
+ default_priority = 99
diff --git a/modular_skyrat/modules/customization/modules/language/xerxian.dm b/modular_nova/modules/customization/modules/language/xerxian.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/language/xerxian.dm
rename to modular_nova/modules/customization/modules/language/xerxian.dm
index b263c40d616..a7182c457fa 100644
--- a/modular_skyrat/modules/customization/modules/language/xerxian.dm
+++ b/modular_nova/modules/customization/modules/language/xerxian.dm
@@ -9,5 +9,5 @@
"o", "oh", "boh", "loh", "tho", "sho", "so", "cho", "zo", "ya", "yi", "yo", "far", "haft"
)
icon_state = "xerxian"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 95
diff --git a/modular_skyrat/modules/customization/modules/language/yangyu.dm b/modular_nova/modules/customization/modules/language/yangyu.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/language/yangyu.dm
rename to modular_nova/modules/customization/modules/language/yangyu.dm
index 112e9881c48..2633973bb94 100644
--- a/modular_skyrat/modules/customization/modules/language/yangyu.dm
+++ b/modular_nova/modules/customization/modules/language/yangyu.dm
@@ -16,5 +16,5 @@
"zhen", "zhi", "zhuai", "zhui", "zou", "zun", "zuo"
)
icon_state = "hanzi"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
default_priority = 94
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_marking_sets.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm
index 8c6c976151e..d00a107d396 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings.dm
@@ -44,7 +44,7 @@
//Use this one for things with pre-set default colors, I guess
/datum/body_marking/other
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/other_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/other_markings.dmi'
recommended_species = null
/datum/body_marking/other/drake_bone
@@ -142,7 +142,7 @@
affected_bodyparts = LEG_RIGHT | LEG_LEFT
/datum/body_marking/secondary
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/secondary_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/secondary_markings.dmi'
default_color = DEFAULT_SECONDARY
/datum/body_marking/secondary/teshari
@@ -429,7 +429,7 @@
affected_bodyparts = HEAD | CHEST | ARM_LEFT | ARM_RIGHT | HAND_LEFT | HAND_RIGHT | LEG_RIGHT | LEG_LEFT
/datum/body_marking/tertiary
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/tertiary_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/tertiary_markings.dmi'
default_color = DEFAULT_TERTIARY
/datum/body_marking/tertiary/redpanda
@@ -565,7 +565,7 @@
/datum/body_marking/tattoo
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/tattoo_markings.dmi'
recommended_species = null
default_color = "#112222" //slightly faded ink.
always_color_customizable = TRUE
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm
index 327f927e0e0..724f82ef650 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_akula.dm
@@ -1,5 +1,5 @@
/datum/body_marking/akula
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/akula_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/akula_markings.dmi'
/datum/body_marking/akula/secondary
name = "Akula"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm
index c3198b9b7fb..6a90deb58ca 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_moth.dm
@@ -1,5 +1,5 @@
/datum/body_marking/moth
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/moth_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/moth_markings.dmi'
default_color = "#FFFFFF"
recommended_species = list(SPECIES_MOTH)
affected_bodyparts = HEAD | CHEST | ARM_LEFT | ARM_RIGHT | LEG_RIGHT | LEG_LEFT
@@ -57,7 +57,7 @@
icon_state = "lovers"
/datum/body_marking/moth/grayscale
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/moth_grayscale_markings.dmi'
/datum/body_marking/moth/grayscale/reddish
name = "Reddish Grayscale"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm
index 58d5ec0fc63..22acba254ea 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_synthliz.dm
@@ -1,5 +1,5 @@
/datum/body_marking/secondary/synthliz
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/synthliz_secondary.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/synthliz_secondary.dmi'
recommended_species = list()
/datum/body_marking/secondary/synthliz/scutes
@@ -18,7 +18,7 @@
affected_bodyparts = CHEST
/datum/body_marking/tertiary/synthliz
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/synthliz_tertiary.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/synthliz_tertiary.dmi'
recommended_species = list()
/datum/body_marking/tertiary/synthliz/plates
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm
index b2125101e7f..032a83aca3c 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/body_markings/body_markings_vox.dm
@@ -1,5 +1,5 @@
/datum/body_marking/secondary/vox
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi'
recommended_species = list(SPECIES_VOX)
/datum/body_marking/secondary/vox/vox
@@ -9,7 +9,7 @@
/datum/body_marking/tertiary/vox
recommended_species = list(SPECIES_VOX)
- icon = 'modular_skyrat/master_files/icons/mob/body_markings/vox_tertiary.dmi'
+ icon = 'modular_nova/master_files/icons/mob/body_markings/vox_tertiary.dmi'
/datum/body_marking/tertiary/vox/tiger
name = "Vox Tiger Tattoo"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/preferences_setup.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/preferences_setup.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/preferences_setup.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm
index 533c5119f80..d622dc74a07 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm
@@ -143,7 +143,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
/datum/sprite_accessory/pod_hair
name = "None"
- icon = 'modular_skyrat/master_files/icons/mob/species/podperson_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/species/podperson_hair.dmi'
icon_state = "None"
key = "pod_hair"
recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK)
@@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
/datum/sprite_accessory/spines
key = "spines"
generic = "Spines"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_spines.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi'
special_render_case = TRUE
default_color = DEFAULT_SECONDARY
recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER)
@@ -201,7 +201,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
genetic = TRUE
/datum/sprite_accessory/socks
- icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi'
+ icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi'
use_static = TRUE
/datum/sprite_accessory/socks/socks_norm
@@ -370,7 +370,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
erp_accessory = TRUE
/datum/sprite_accessory/underwear
- icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi'
+ icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi'
///Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state
var/has_digitigrade = FALSE
///Whether this underwear includes a top (Because gender = FEMALE doesn't actually apply here.). Hides breasts, nothing more.
@@ -590,7 +590,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
/// BRAS and all the fun stuff of moving these about.
/datum/sprite_accessory/bra
- icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi'
+ icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi'
use_static = FALSE
em_block = TRUE
@@ -794,7 +794,7 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files)
icon_state = "binder_strapless"
/datum/sprite_accessory/undershirt
- icon = 'modular_skyrat/master_files/icons/mob/clothing/underwear.dmi'
+ icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi'
use_static = TRUE
///Whether this underwear includes a bottom (For Leotards and the likes)
var/hides_groin = FALSE
diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
new file mode 100644
index 00000000000..7e6c5a50c66
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -0,0 +1,404 @@
+/datum/sprite_accessory/ears
+ key = "ears"
+ generic = "Ears"
+ organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant
+ relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
+ color_src = USE_MATRIXED_COLORS
+ genetic = TRUE
+
+/datum/sprite_accessory/ears/is_hidden(mob/living/carbon/human/wearer)
+ if(!wearer.head)
+ return FALSE
+
+ // Can hide if wearing hat
+ if(key in wearer.try_hide_mutant_parts)
+ return TRUE
+
+ // Exception for MODs
+ if(istype(wearer.head, /obj/item/clothing/head/mod))
+ return FALSE
+
+ // Hide accessory if flagged to do so
+ if((wearer.head?.flags_inv & HIDEHAIR || wearer.wear_mask?.flags_inv & HIDEHAIR) \
+ // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks
+ && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS))))
+ return TRUE
+
+ return FALSE
+
+/datum/sprite_accessory/ears/cat
+ recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL)
+ relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/fox
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears.dmi'
+ organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant
+ color_src = USE_MATRIXED_COLORS
+ recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL)
+ uses_emissives = TRUE
+
+/datum/sprite_accessory/ears/mutant/none
+ name = "None"
+ icon_state = "none"
+ color_src = null
+ factual = FALSE
+
+/datum/sprite_accessory/ears/mutant/big
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi'
+
+/datum/sprite_accessory/ears/mutant/vulpkanin
+ recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL)
+
+/datum/sprite_accessory/ears/mutant/tajaran
+ recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL)
+
+/datum/sprite_accessory/ears/mutant/akula
+ recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_AQUATIC, SPECIES_AKULA, SPECIES_HUMANOID, SPECIES_GHOUL)
+
+/datum/sprite_accessory/ears/mutant/axolotl
+ name = "Axolotl"
+ icon_state = "axolotl"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/bat
+ name = "Bat"
+ icon_state = "bat"
+
+/datum/sprite_accessory/ears/mutant/bear
+ name = "Bear"
+ icon_state = "bear"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/bigwolf
+ name = "Big Wolf"
+ icon_state = "bigwolf"
+
+/datum/sprite_accessory/ears/mutant/bigwolfinner
+ name = "Big Wolf (ALT)"
+ icon_state = "bigwolfinner"
+ hasinner = TRUE
+
+/datum/sprite_accessory/ears/mutant/bigwolfdark //alphabetical sort ignored here for ease-of-use
+ name = "Dark Big Wolf"
+ icon_state = "bigwolfdark"
+
+/datum/sprite_accessory/ears/mutant/bigwolfinnerdark
+ name = "Dark Big Wolf (ALT)"
+ icon_state = "bigwolfinnerdark"
+ hasinner = TRUE
+
+/datum/sprite_accessory/ears/mutant/bunny
+ name = "Bunny"
+ icon_state = "bunny"
+
+/datum/sprite_accessory/ears/mutant/tajaran/catbig
+ name = "Cat, Big"
+ icon_state = "catbig"
+
+/datum/sprite_accessory/ears/mutant/tajaran/catnormal
+ name = "Cat, normal"
+ icon_state = "catnormal"
+
+/datum/sprite_accessory/ears/mutant/cow
+ name = "Cow"
+ icon_state = "cow"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/curled
+ name = "Curled Horn"
+ icon_state = "horn1"
+ color_src = USE_ONE_COLOR
+ default_color = DEFAULT_TERTIARY
+
+/datum/sprite_accessory/ears/mutant/deer
+ name = "Deer (Antler)"
+ icon_state = "deer"
+ color_src = USE_ONE_COLOR
+ default_color = DEFAULT_TERTIARY
+
+/datum/sprite_accessory/ears/mutant/eevee
+ name = "Eevee"
+ icon_state = "eevee"
+
+/datum/sprite_accessory/ears/mutant/eevee_alt
+ name = "Eevee ALT"
+ icon_state = "eevee_alt"
+ color_src = USE_MATRIXED_COLORS
+
+/datum/sprite_accessory/ears/mutant/elf
+ name = "Elf"
+ icon_state = "elf"
+ color_src = USE_ONE_COLOR
+ default_color = DEFAULT_SKIN_OR_PRIMARY
+
+/datum/sprite_accessory/ears/mutant/elf/wide
+ name = "Wide Elf"
+ icon_state = "elfwide"
+
+/datum/sprite_accessory/ears/mutant/elf/broad
+ name = "Broad Elf"
+ icon_state = "elfbroad"
+
+/datum/sprite_accessory/ears/mutant/elf/longer
+ name = "Longer Elf"
+ icon_state = "elflonger"
+
+/datum/sprite_accessory/ears/mutant/elephant
+ name = "Elephant"
+ icon_state = "elephant"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/fennec
+ name = "Fennec"
+ icon_state = "fennec"
+
+/datum/sprite_accessory/ears/mutant/fish
+ name = "Fish"
+ icon_state = "fish"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/vulpkanin/fox
+ name = "Fox"
+ icon_state = "fox"
+
+/datum/sprite_accessory/ears/mutant/akula/hammerhead
+ name = "Hammerhead"
+ icon_state = "hammerhead"
+
+/datum/sprite_accessory/ears/mutant/husky
+ name = "Husky"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/ears/mutant/jellyfish
+ name = "Jellyfish"
+ icon_state = "jellyfish"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/kangaroo
+ name = "Kangaroo"
+ icon_state = "kangaroo"
+
+/datum/sprite_accessory/ears/mutant/lab
+ name = "Dog, Long"
+ icon_state = "lab"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/murid
+ name = "Murid"
+ icon_state = "murid"
+
+/datum/sprite_accessory/ears/mutant/vulpkanin/otie
+ name = "Otusian"
+ icon_state = "otie"
+
+/datum/sprite_accessory/ears/mutant/protogen
+ name = "Protogen"
+ icon_state = "protogen"
+
+/datum/sprite_accessory/ears/mutant/rabbit
+ name = "Rabbit"
+ icon_state = "rabbit"
+
+/datum/sprite_accessory/ears/mutant/big/hare_large
+ name = "Rabbit (Large)"
+ icon_state = "bunny_large"
+
+/datum/sprite_accessory/ears/mutant/big/bunny_large
+ name = "Curved Rabbit Ears (Large)"
+ icon_state = "rabbit_large"
+
+/datum/sprite_accessory/ears/mutant/big/sandfox_large
+ name = "Sandfox (Large)"
+ icon_state = "sandfox_large"
+
+/datum/sprite_accessory/ears/mutant/pede
+ name = "Scolipede"
+ icon_state = "pede"
+
+/datum/sprite_accessory/ears/mutant/akula/sergal
+ name = "Sergal"
+ icon_state = "sergal"
+
+/datum/sprite_accessory/ears/mutant/skunk
+ name = "skunk"
+ icon_state = "skunk"
+
+/datum/sprite_accessory/ears/mutant/squirrel
+ name = "Squirrel"
+ icon_state = "squirrel"
+
+/datum/sprite_accessory/ears/mutant/vulpkanin/wolf
+ name = "Wolf"
+ icon_state = "wolf"
+
+/datum/sprite_accessory/ears/mutant/vulpkanin/perky
+ name = "Perky"
+ icon_state = "perky"
+
+/datum/sprite_accessory/ears/mutant/antenna_simple1
+ name = "Insect antenna (coloring 2)"
+ icon_state = "antenna_simple1"
+
+/datum/sprite_accessory/ears/mutant/antenna_simple1_v2
+ name = "Insect antenna (coloring 3)"
+ icon_state = "antenna_simple1v2"
+
+/datum/sprite_accessory/ears/mutant/antenna_simple2
+ name = "Insect antenna 2 (coloring 2)"
+ icon_state = "antenna_simple2"
+
+/datum/sprite_accessory/ears/mutant/antenna_simple2_v2
+ name = "Insect antenna 2 (coloring 3)"
+ icon_state = "antenna_simple2v2"
+
+/datum/sprite_accessory/ears/mutant/antenna_fuzzball
+ name = "Fuzzball antenna (coloring 2+3)"
+ icon_state = "antenna_fuzzball"
+
+/datum/sprite_accessory/ears/mutant/antenna_fuzzball_v2
+ name = "Fuzzball antenna (coloring 3+1)"
+ icon_state = "antenna_fuzzballv2"
+
+/datum/sprite_accessory/ears/mutant/cobrahood
+ name = "Cobra Hood"
+ icon_state = "cobrahood"
+
+/datum/sprite_accessory/ears/mutant/cobrahoodears
+ name = "Cobra Hood (Ears)"
+ icon_state = "cobraears"
+
+/datum/sprite_accessory/ears/mutant/miqote
+ name = "Miqo'te"
+ icon_state = "miqote"
+
+/datum/sprite_accessory/ears/mutant/hare
+ name = "Hare"
+ icon_state = "rabbitalt"
+
+/datum/sprite_accessory/ears/mutant/bunnyalt
+ name = "Curved Rabbit Ears"
+ icon_state = "bunnyalt"
+
+/datum/sprite_accessory/ears/mutant/deerear
+ name = "Deer (ear)"
+ icon_state = "deerear"
+
+/datum/sprite_accessory/ears/mutant/teshari
+ recommended_species = list(SPECIES_TESHARI, SPECIES_TESHARI_ALT) //FLUFFY FRONTIER EDIT - TESHARI_REBORN
+
+/datum/sprite_accessory/ears/mutant/teshari/regular
+ name = "Teshari Regular"
+ icon_state = "teshari_regular"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_bushy
+ name = "Teshari Feathers Bushy"
+ icon_state = "teshari_feathers_bushy"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_mohawk
+ name = "Teshari Feathers Mohawk"
+ icon_state = "teshari_feathers_mohawk"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_spiky
+ name = "Teshari Feathers Spiky"
+ icon_state = "teshari_feathers_spiky"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_pointy
+ name = "Teshari Feathers Pointy"
+ icon_state = "teshari_feathers_pointy"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_upright
+ name = "Teshari Feathers Upright"
+ icon_state = "teshari_feathers_upright"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_mane
+ name = "Teshari Feathers Mane"
+ icon_state = "teshari_feathers_mane"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_maneless
+ name = "Teshari Feathers Mane Fluffless"
+ icon_state = "teshari_feathers_maneless"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_droopy
+ name = "Teshari Feathers Droopy"
+ icon_state = "teshari_feathers_droopy"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_longway
+ name = "Teshari Feathers Longway"
+ icon_state = "teshari_feathers_longway"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_tree
+ name = "Teshari Feathers Tree"
+ icon_state = "teshari_feathers_tree"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_ponytail
+ name = "Teshari Feathers Ponytail"
+ icon_state = "teshari_feathers_ponytail"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_mushroom
+ name = "Teshari Feathers Mushroom"
+ icon_state = "teshari_feathers_mushroom"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_backstrafe
+ name = "Teshari Feathers Backstrafe"
+ icon_state = "teshari_feathers_backstrafe"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmohawk
+ name = "Teshari Feathers Thin Mohawk"
+ icon_state = "teshari_feathers_thinmohawk"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_thin
+ name = "Teshari Feathers Thin"
+ icon_state = "teshari_feathers_thin"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmane
+ name = "Teshari Feathers Thin Mane"
+ icon_state = "teshari_feathers_thinmane"
+
+/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmaneless
+ name = "Teshari Feathers Thin Mane Fluffless"
+ icon_state = "teshari_feathers_thinmaneless"
+
+/datum/sprite_accessory/ears/mutant/deer2
+ name = "Deer 2"
+ icon_state = "deer2"
+ color_src = USE_ONE_COLOR
+
+/datum/sprite_accessory/ears/mutant/mouse
+ name = "Mouse"
+ icon_state = "mouse"
+
+/datum/sprite_accessory/ears/mutant/mouse_two
+ name = "Mouse II"
+ icon_state = "mouse_two"
+
+/datum/sprite_accessory/ears/mutant/big/fourears1
+ name = "Four Ears 1"
+ icon_state = "four_ears_1"
+
+/datum/sprite_accessory/ears/mutant/fourears2
+ name = "Four Ears 2"
+ icon_state = "four_ears_2"
+
+/datum/sprite_accessory/ears/mutant/big/fourears3
+ name = "Four Ears 3"
+ icon_state = "four_ears_3"
+
+/datum/sprite_accessory/ears/acrador
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ears_big.dmi'
+ color_src = USE_MATRIXED_COLORS
+
+/datum/sprite_accessory/ears/acrador/long
+ icon_state = "acrador_long"
+ name = "Acrador (Long)"
+
+/datum/sprite_accessory/ears/acrador/short
+ icon_state = "acrador_short"
+ name = "Acrador (Short)"
diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm
new file mode 100644
index 00000000000..71df867fdc2
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm
@@ -0,0 +1,125 @@
+/datum/sprite_accessory/fluff/moth
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/moth_fluff.dmi'
+ default_color = "#FFFFFF"
+ key = "fluff"
+ generic = "Fluff"
+ recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT)
+ relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
+ genetic = TRUE
+ organ_type = /obj/item/organ/external/fluff
+
+/datum/sprite_accessory/fluff/moth/none
+ name = "None"
+ icon_state = "none"
+
+/datum/sprite_accessory/fluff/moth/is_hidden(mob/living/carbon/human/human)
+ if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR))
+ return TRUE
+
+ return FALSE
+
+/datum/sprite_accessory/fluff/moth/plain
+ name = "Plain"
+ icon_state = "plain"
+
+/datum/sprite_accessory/fluff/moth/monarch
+ name = "Monarch"
+ icon_state = "monarch"
+
+/datum/sprite_accessory/fluff/moth/luna
+ name = "Luna"
+ icon_state = "luna"
+
+/datum/sprite_accessory/fluff/moth/atlas
+ name = "Atlas"
+ icon_state = "atlas"
+
+/datum/sprite_accessory/fluff/moth/reddish
+ name = "Reddish"
+ icon_state = "redish"
+
+/datum/sprite_accessory/fluff/moth/royal
+ name = "Royal"
+ icon_state = "royal"
+
+/datum/sprite_accessory/fluff/moth/gothic
+ name = "Gothic"
+ icon_state = "gothic"
+
+/datum/sprite_accessory/fluff/moth/lovers
+ name = "Lovers"
+ icon_state = "lovers"
+
+/datum/sprite_accessory/fluff/moth/whitefly
+ name = "White Fly"
+ icon_state = "whitefly"
+
+/datum/sprite_accessory/fluff/moth/punished
+ name = "Burnt Off"
+ icon_state = "punished"
+ locked = TRUE
+
+/datum/sprite_accessory/fluff/moth/firewatch
+ name = "Firewatch"
+ icon_state = "firewatch"
+
+/datum/sprite_accessory/fluff/moth/deathhead
+ name = "Deathshead"
+ icon_state = "deathhead"
+
+/datum/sprite_accessory/fluff/moth/poison
+ name = "Poison"
+ icon_state = "poison"
+
+/datum/sprite_accessory/fluff/moth/ragged
+ name = "Ragged"
+ icon_state = "ragged"
+
+/datum/sprite_accessory/fluff/moth/moonfly
+ name = "Moon Fly"
+ icon_state = "moonfly"
+
+/datum/sprite_accessory/fluff/moth/snow
+ name = "Snow"
+ icon_state = "snow"
+
+/datum/sprite_accessory/fluff/moth/oakworm
+ name = "Oak Worm"
+ icon_state = "oakworm"
+
+/datum/sprite_accessory/fluff/moth/jungle
+ name = "Jungle"
+ icon_state = "jungle"
+
+/datum/sprite_accessory/fluff/moth/witchwing
+ name = "Witch Wing"
+ icon_state = "witchwing"
+
+/datum/sprite_accessory/fluff/moth/insectm
+ name = "Insect male (Tertiary)"
+ icon_state = "insectm"
+ default_color = DEFAULT_TERTIARY
+
+/datum/sprite_accessory/fluff/moth/insectf
+ name = "Insect female (Tertiary)"
+ icon_state = "insectf"
+ default_color = DEFAULT_TERTIARY
+
+/datum/sprite_accessory/fluff/moth/fsnow
+ name = "Snow (Top)"
+ icon_state = "fsnow"
+
+/datum/sprite_accessory/fluff/moth/snowdual
+ name = "Snow (Dual-Color)"
+ icon_state = "snowdual"
+ color_src = USE_MATRIXED_COLORS
+
+/datum/sprite_accessory/fluff/moth/teshari
+ name = "Teshari Mane"
+ icon_state = "teshmane"
+ default_color = DEFAULT_TERTIARY
+
+/datum/sprite_accessory/fluff/moth/teshari/front
+ name = "Teshari Mane (Top)"
+ icon_state = "teshmane_top"
+ default_color = DEFAULT_TERTIARY
diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm
new file mode 100644
index 00000000000..4fbe570b8ac
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm
@@ -0,0 +1,55 @@
+/datum/sprite_accessory/frills
+ key = "frills"
+ generic = "Frills"
+ default_color = DEFAULT_SECONDARY
+ relevent_layers = list(BODY_ADJ_LAYER)
+ genetic = TRUE
+ organ_type = /obj/item/organ/external/frills
+
+/datum/sprite_accessory/frills/is_hidden(mob/living/carbon/human/human)
+ if((human.head?.flags_inv & HIDEEARS) || (key in human.try_hide_mutant_parts))
+ return TRUE
+
+ return FALSE
+
+/datum/sprite_accessory/frills/divinity
+ name = "Divinity"
+ icon_state = "divinity"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+
+/datum/sprite_accessory/frills/horns
+ name = "Horns"
+ icon_state = "horns"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+
+/datum/sprite_accessory/frills/hornsdouble
+ name = "Horns Double"
+ icon_state = "hornsdouble"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+
+/datum/sprite_accessory/frills/big
+ name = "Big"
+ icon_state = "big"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+
+/datum/sprite_accessory/frills/cobrahood
+ name = "Cobra Hood"
+ icon_state = "cobrahood"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+ color_src = USE_MATRIXED_COLORS
+
+/datum/sprite_accessory/frills/cobrahoodears
+ name = "Cobra Hood (Ears)"
+ icon_state = "cobraears"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+ color_src = USE_MATRIXED_COLORS
+
+/datum/sprite_accessory/frills/neckfrills
+ name = "Neck Frills"
+ icon_state = "neck"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
+
+/datum/sprite_accessory/frills/neckfrillsfuller
+ name = "Neck Frills (Fuller)"
+ icon_state = "neckfull"
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/frills.dmi'
diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
new file mode 100644
index 00000000000..89a0e31bbfe
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
@@ -0,0 +1,308 @@
+/// The alternative `dimension_x` to use if it's a taur.
+#define TAUR_DIMENSION_X 64
+
+/datum/sprite_accessory/genital
+ special_render_case = TRUE
+ special_colorize = TRUE
+ var/associated_organ_slot
+ /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors.
+ var/has_skintone_shading = FALSE
+ ///Where the genital is on the body. If clothing doesn't cover it, it shows up!
+ var/genital_location = GROIN
+
+/datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/target_mob)
+ var/obj/item/organ/external/genital/badonkers = target_mob.get_organ_slot(associated_organ_slot)
+ if(!badonkers)
+ return TRUE
+ switch(badonkers.visibility_preference)
+ if(GENITAL_ALWAYS_SHOW) //Never hidden
+ return FALSE
+ if(GENITAL_HIDDEN_BY_CLOTHES) //Hidden if the relevant body parts are covered by clothes or underwear
+ //Do they have a Uniform or Suit that covers them?
+ if((target_mob.w_uniform && target_mob.w_uniform.body_parts_covered & genital_location) || (target_mob.wear_suit && target_mob.wear_suit.body_parts_covered & genital_location))
+ return TRUE
+ //Do they have a Hospital Gown covering them? (The gown has no body_parts_covered so needs its own check)
+ if(istype(target_mob.wear_suit, /obj/item/clothing/suit/toggle/labcoat/hospitalgown))
+ return TRUE
+
+ //Are they wearing an Undershirt?
+ if(target_mob.undershirt != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_SHIRT))
+ var/datum/sprite_accessory/undershirt/worn_undershirt = GLOB.undershirt_list[target_mob.undershirt]
+ //Does this Undershirt cover a relevant slot?
+ if(genital_location == CHEST) //(Undershirt always covers chest)
+ return TRUE
+
+ else if(genital_location == GROIN && worn_undershirt.hides_groin)
+ return TRUE
+
+ //Undershirt didn't cover them, are they wearing Underwear?
+ if(target_mob.underwear != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_UNDIES))
+ var/datum/sprite_accessory/underwear/worn_underwear = GLOB.underwear_list[target_mob.underwear]
+ //Does this Underwear cover a relevant slot?
+ if(genital_location == GROIN) //(Underwear always covers groin)
+ return TRUE
+
+ else if(genital_location == CHEST && worn_underwear.hides_breasts)
+ return TRUE
+
+ //Are they wearing a bra?
+ if(target_mob.bra != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_BRA) && genital_location == CHEST)
+ return TRUE
+
+ //Nothing they're wearing will cover them
+ else
+ return FALSE
+
+ //If not always shown or hidden by clothes, then it defaults to always hidden
+ else
+ return TRUE
+
+/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human)
+ var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot)
+ return "[genital?.sprite_suffix]"
+
+/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state)
+ var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot)
+ if(genital?.uses_skin_color && HAS_TRAIT(human, TRAIT_USES_SKINTONES))
+ return skintone2hex(human.skin_tone)
+
+/datum/sprite_accessory/genital/penis
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi'
+ organ_type = /obj/item/organ/external/genital/penis
+ associated_organ_slot = ORGAN_SLOT_PENIS
+ key = ORGAN_SLOT_PENIS
+ color_src = USE_MATRIXED_COLORS
+ always_color_customizable = TRUE
+ center = TRUE
+ special_icon_case = TRUE
+ special_x_dimension = TRUE
+ //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths
+ relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ genetic = TRUE
+ var/can_have_sheath = TRUE
+
+/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/target_mob)
+ var/taur_mode = target_mob?.get_taur_mode()
+
+ if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
+ return icon
+
+ return 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi'
+
+/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/target_mob)
+ var/taur_mode = target_mob?.get_taur_mode()
+
+ if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
+ return dimension_x
+
+ return TAUR_DIMENSION_X
+
+/datum/sprite_accessory/genital/penis/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/penis/human
+ icon_state = "human"
+ name = "Human"
+ color_src = USE_ONE_COLOR
+ default_color = DEFAULT_SKIN_OR_PRIMARY
+ has_skintone_shading = TRUE
+ can_have_sheath = FALSE
+
+/datum/sprite_accessory/genital/penis/nondescript
+ icon_state = "nondescript"
+ name = "Nondescript"
+
+/datum/sprite_accessory/genital/penis/knotted
+ icon_state = "knotted"
+ name = "Knotted"
+
+/datum/sprite_accessory/genital/penis/flared
+ icon_state = "flared"
+ name = "Flared"
+
+/datum/sprite_accessory/genital/penis/barbknot
+ icon_state = "barbknot"
+ name = "Barbed, Knotted"
+
+/datum/sprite_accessory/genital/penis/tapered
+ icon_state = "tapered"
+ name = "Tapered"
+
+/datum/sprite_accessory/genital/penis/tentacle
+ icon_state = "tentacle"
+ name = "Tentacled"
+
+/datum/sprite_accessory/genital/penis/hemi
+ icon_state = "hemi"
+ name = "Hemi"
+
+/datum/sprite_accessory/genital/penis/hemiknot
+ icon_state = "hemiknot"
+ name = "Knotted Hemi"
+
+/datum/sprite_accessory/genital/testicles
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi'
+ organ_type = /obj/item/organ/external/genital/testicles
+ associated_organ_slot = ORGAN_SLOT_TESTICLES
+ key = ORGAN_SLOT_TESTICLES
+ always_color_customizable = TRUE
+ special_icon_case = TRUE
+ special_x_dimension = TRUE
+ default_color = DEFAULT_SKIN_OR_PRIMARY
+ relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER)
+ genetic = TRUE
+ var/has_size = TRUE
+
+/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/target_mob)
+ var/taur_mode = target_mob?.get_taur_mode()
+
+ if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
+ return icon
+
+ return 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi'
+
+/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/target_mob)
+ var/taur_mode = target_mob?.get_taur_mode()
+
+ if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
+ return dimension_x
+
+ return TAUR_DIMENSION_X
+
+/datum/sprite_accessory/genital/testicles/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/testicles/pair
+ name = "Pair"
+ icon_state = "pair"
+ has_skintone_shading = TRUE
+
+/datum/sprite_accessory/genital/testicles/internal
+ name = "Internal"
+ icon_state = "none"
+ color_src = null
+ has_size = FALSE
+
+/datum/sprite_accessory/genital/vagina
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi'
+ organ_type = /obj/item/organ/external/genital/vagina
+ associated_organ_slot = ORGAN_SLOT_VAGINA
+ key = ORGAN_SLOT_VAGINA
+ always_color_customizable = TRUE
+ default_color = "#FFCCCC"
+ relevent_layers = list(BODY_FRONT_LAYER)
+ genetic = TRUE
+ var/alt_aroused = TRUE
+
+/datum/sprite_accessory/genital/vagina/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/vagina/human
+ icon_state = "human"
+ name = "Human"
+
+/datum/sprite_accessory/genital/vagina/tentacles
+ icon_state = "tentacle"
+ name = "Tentacle"
+
+/datum/sprite_accessory/genital/vagina/dentata
+ icon_state = "dentata"
+ name = "Dentata"
+
+/datum/sprite_accessory/genital/vagina/hairy
+ icon_state = "hairy"
+ name = "Hairy"
+ alt_aroused = FALSE
+
+/datum/sprite_accessory/genital/vagina/spade
+ icon_state = "spade"
+ name = "Spade"
+ alt_aroused = FALSE
+
+/datum/sprite_accessory/genital/vagina/furred
+ icon_state = "furred"
+ name = "Furred"
+ alt_aroused = FALSE
+
+/datum/sprite_accessory/genital/vagina/gaping
+ icon_state = "gaping"
+ name = "Gaping"
+
+/datum/sprite_accessory/genital/vagina/cloaca
+ icon_state = "cloaca"
+ name = "Cloaca"
+
+/datum/sprite_accessory/genital/womb
+ organ_type = /obj/item/organ/external/genital/womb
+ associated_organ_slot = ORGAN_SLOT_WOMB
+ key = ORGAN_SLOT_WOMB
+ genetic = TRUE
+
+/datum/sprite_accessory/genital/womb/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/womb/normal
+ icon_state = "none"
+ name = "Normal"
+ color_src = null
+
+/datum/sprite_accessory/genital/anus
+ organ_type = /obj/item/organ/external/genital/anus
+ associated_organ_slot = ORGAN_SLOT_ANUS
+ key = ORGAN_SLOT_ANUS
+ genetic = TRUE
+
+/datum/sprite_accessory/genital/anus/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/anus/normal
+ icon_state = "anus"
+ name = "Anus"
+ color_src = null
+
+/datum/sprite_accessory/genital/breasts
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi'
+ organ_type = /obj/item/organ/external/genital/breasts
+ associated_organ_slot = ORGAN_SLOT_BREASTS
+ key = ORGAN_SLOT_BREASTS
+ always_color_customizable = TRUE
+ default_color = DEFAULT_SKIN_OR_PRIMARY
+ relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ has_skintone_shading = TRUE
+ genital_location = CHEST
+ genetic = TRUE
+
+/datum/sprite_accessory/genital/breasts/none
+ icon_state = "none"
+ name = "None"
+ factual = FALSE
+ color_src = null
+
+/datum/sprite_accessory/genital/breasts/pair
+ icon_state = "pair"
+ name = "Pair"
+
+/datum/sprite_accessory/genital/breasts/quad
+ icon_state = "quad"
+ name = "Quad"
+
+/datum/sprite_accessory/genital/breasts/sextuple
+ icon_state = "sextuple"
+ name = "Sextuple"
+
+#undef TAUR_DIMENSION_X
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm
index cbb1565392f..6573e793d98 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm
@@ -1,7 +1,7 @@
// Hairstyles
/datum/sprite_accessory/hair/skyrat
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi'
/datum/sprite_accessory/hair/skyrat/pigtails4
name = "Pigtails 4"
@@ -365,22 +365,22 @@
/datum/sprite_accessory/hair/skyrat/halfshavedlong
name = "Half-shaved long"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi'
icon_state = "halfshave_long"
/datum/sprite_accessory/hair/skyrat/halfshavedmessy
name = "Half-shaved messy"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi'
icon_state = "halfshave_messy"
/datum/sprite_accessory/hair/skyrat/halfshavedmessylong
name = "Half-shave long messy"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi'
icon_state = "halfshave_messylong"
/datum/sprite_accessory/hair/skyrat/halfshavedglamorous
name = "Half-shave glamorous"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/more_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/more_hair.dmi'
icon_state = "halfshave_glamorous"
/datum/sprite_accessory/hair/skyrat/emoshort
@@ -622,7 +622,7 @@
// Facial hair
/datum/sprite_accessory/facial_hair/skyrat
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/facialhair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/facialhair.dmi'
/datum/sprite_accessory/facial_hair/skyrat/sideburns
name = "Sideburns"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm
index 42eaa1f1b55..f776707563b 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/head_accessory.dm
@@ -1,5 +1,5 @@
/datum/sprite_accessory/head_accessory
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/head_accessory.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/head_accessory.dmi'
key = "head_acc"
generic = "Head Accessory"
relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm
similarity index 94%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm
index 2212b1bd203..2d23ffe8a58 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/horns.dm
@@ -2,7 +2,7 @@
key = "horns"
generic = "Horns"
relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER, BODY_ADJ_LAYER)
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/horns.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/horns.dmi'
default_color = "#555555"
genetic = TRUE
organ_type = /obj/item/organ/external/horns
@@ -59,7 +59,7 @@
icon_state = "oni_large"
/datum/sprite_accessory/horns/big
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/horns_big.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/horns_big.dmi'
/datum/sprite_accessory/horns/big/antlers
name = "Antlers"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm
index 8b71ed81001..d466ab830d7 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm
@@ -3,7 +3,7 @@
************** IPC SCREENS ****************
*******************************************/
/datum/sprite_accessory/screen
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_screens.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ipc_screens.dmi'
color_src = null
key = MUTANT_SYNTH_SCREEN
generic = "Screen"
@@ -143,7 +143,7 @@
*******************************************/
/datum/sprite_accessory/antenna
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/ipc_antennas.dmi'
color_src = USE_ONE_COLOR
default_color = DEFAULT_SECONDARY
recommended_species = list(SPECIES_SYNTH)
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm
index 503906c39cc..bd0444f2b68 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/neck_accessory.dm
@@ -1,5 +1,5 @@
/datum/sprite_accessory/neck_accessory
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/neck_accessory.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/neck_accessory.dmi'
key = "neck_acc"
generic = "Neck Accessory"
relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm
similarity index 89%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm
index 73521086076..5664c339377 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/skrell_hair.dm
@@ -1,5 +1,5 @@
/datum/sprite_accessory/skrell_hair
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/skrell_hair.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/skrell_hair.dmi'
generic = "Skrell Headtails"
key = "skrell_hair"
color_src = USE_ONE_COLOR
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
index ce8dc17424b..159d8c9a652 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/snout.dm
@@ -1,7 +1,7 @@
/datum/sprite_accessory/snouts
key = "snout"
generic = "Snout"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/lizard_snouts.dmi'
flags_for_organ = SPRITE_ACCESSORY_USE_MUZZLED_SPRITE
organ_type = /obj/item/organ/external/snout
recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER)
@@ -59,7 +59,7 @@
factual = FALSE
/datum/sprite_accessory/snouts/mammal
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMANOID)
@@ -429,31 +429,31 @@
flags_for_organ = NONE
/datum/sprite_accessory/snouts/acrador
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
name = "Acrador (Short)"
icon_state = "acrador_short"
/datum/sprite_accessory/snouts/acrador_1
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
name = "Acrador 1 (Normal)"
icon_state = "acrador_1"
/datum/sprite_accessory/snouts/acrador_2
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
name = "Acrador 2 (Normal)"
icon_state = "acrador_2"
/datum/sprite_accessory/snouts/acrador_3
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
name = "Acrador 3 (Normal)"
icon_state = "acrador_3"
/datum/sprite_accessory/snouts/acrador_4
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/snouts.dmi'
color_src = USE_MATRIXED_COLORS
name = "Acrador 4 (Normal)"
icon_state = "acrador_4"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm
index 70d51c40bbb..d4762e0732d 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm
@@ -1,7 +1,7 @@
//Synth snouts (This is the most important part)
/datum/sprite_accessory/snouts/synthliz
recommended_species = list()
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_snouts.dmi'
color_src = USE_ONE_COLOR
default_color = null
name = "Synthetic Lizard - Snout"
@@ -73,7 +73,7 @@
//Synth tails
/datum/sprite_accessory/tails/synthliz
recommended_species = list()
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_tails.dmi'
color_src = USE_ONE_COLOR
name = "Synthetic Lizard"
icon_state = "synthliz"
@@ -82,7 +82,7 @@
//Synth Antennae
/datum/sprite_accessory/antenna/synthliz
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/synthliz_antennas.dmi'
color_src = USE_ONE_COLOR
name = "Synthetic Lizard - Antennae"
icon_state = "synth_antennae"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
similarity index 97%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
index f1e51ddb26f..b73710ccc72 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -2,7 +2,7 @@
key = "tail"
generic = "Tail"
organ_type = /obj/item/organ/external/tail
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi'
special_render_case = TRUE
special_colorize = TRUE
relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
@@ -40,7 +40,7 @@
factual = FALSE
/datum/sprite_accessory/tails/lizard
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi'
recommended_species = list(SPECIES_LIZARD, SPECIES_LIZARD_ASH, SPECIES_MAMMAL, SPECIES_UNATHI, SPECIES_LIZARD_SILVER)
organ_type = /obj/item/organ/external/tail/lizard
@@ -54,7 +54,7 @@
organ_type = /obj/item/organ/external/tail/cat
/datum/sprite_accessory/tails/human/cat
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi'
icon_state = "cat"
color_src = USE_ONE_COLOR
@@ -89,7 +89,7 @@
recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL)
/datum/sprite_accessory/tails/mammal/wagging/big
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/tails_big.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails_big.dmi'
dimension_x = 64
center = TRUE
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
index c52af4de049..dc13d108337 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
@@ -16,7 +16,7 @@
return taur.taur_mode
/datum/sprite_accessory/taur
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/taur.dmi'
key = "taur"
generic = "Taur Type"
color_src = USE_MATRIXED_COLORS
diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm
new file mode 100644
index 00000000000..00ef0c74826
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm
@@ -0,0 +1,144 @@
+//The snouts
+/datum/sprite_accessory/snouts/vox
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi'
+ default_color = DEFAULT_SECONDARY
+ name = "Vox Snout"
+ icon_state = "vox"
+ recommended_species = list(SPECIES_VOX)
+
+//The hairstyles
+/datum/sprite_accessory/hair/vox
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi'
+ recommended_species = list(SPECIES_VOX)
+
+/datum/sprite_accessory/hair/vox/vox_afro
+ name = "Vox Afro"
+ icon_state = "hair_vox_afro"
+
+/datum/sprite_accessory/hair/vox/vox_crestedquills
+ name = "Vox Crested Quills"
+ icon_state = "hair_vox_crestedquills"
+
+/datum/sprite_accessory/hair/vox/vox_emperorquills
+ name = "Vox Emperor Quills"
+ icon_state = "hair_vox_emperorquills"
+
+/datum/sprite_accessory/hair/vox/vox_horns
+ name = "Vox Horns"
+ icon_state = "hair_vox_horns"
+
+/datum/sprite_accessory/hair/vox/vox_keelquills
+ name = "Vox Keel Quills"
+ icon_state = "hair_vox_keelquills"
+
+/datum/sprite_accessory/hair/vox/vox_keetquills
+ name = "Vox Keet Quills"
+ icon_state = "hair_vox_keetquills"
+
+/datum/sprite_accessory/hair/vox/vox_kingly
+ name = "Vox Kingly"
+ icon_state = "hair_vox_kingly"
+
+/datum/sprite_accessory/hair/vox/vox_mohawk
+ name = "Vox Mohawk"
+ icon_state = "hair_vox_mohawk"
+
+/datum/sprite_accessory/hair/vox/vox_nights
+ name = "Vox Nights"
+ icon_state = "hair_vox_nights"
+
+/datum/sprite_accessory/hair/vox/vox_razorclipped
+ name = "Vox Razor Clipped"
+ icon_state = "hair_vox_razorclipped"
+
+/datum/sprite_accessory/hair/vox/vox_razor
+ name = "Vox Razor"
+ icon_state = "hair_vox_razor"
+
+/datum/sprite_accessory/hair/vox/vox_shortquills
+ name = "Vox Short Quills"
+ icon_state = "hair_vox_shortquills"
+
+/datum/sprite_accessory/hair/vox/vox_tielquills
+ name = "Vox Tiel Quills"
+ icon_state = "hair_vox_tielquills"
+
+/datum/sprite_accessory/hair/vox/vox_yasu
+ name = "Vox Yasu"
+ icon_state = "hair_vox_yasu"
+
+/datum/sprite_accessory/hair/vox/surf
+ name = "Vox Surf"
+ icon_state = "vox_surf"
+
+/datum/sprite_accessory/hair/vox/cropped
+ name = "Vox Cropped"
+ icon_state = "vox_cropped"
+
+/datum/sprite_accessory/hair/vox/rows
+ name = "Vox Rows"
+ icon_state = "vox_rows"
+
+/datum/sprite_accessory/hair/vox/ponytail
+ name = "Vox Ponytail"
+ icon_state = "vox_pony"
+
+/datum/sprite_accessory/hair/vox/mange
+ name = "Vox Mange"
+ icon_state = "vox_mange"
+
+/datum/sprite_accessory/hair/vox/ruffhawk
+ name = "Vox Ruffhawk"
+ icon_state = "vox_ruffhawk"
+
+//The facial hairstyles
+/datum/sprite_accessory/facial_hair/vox
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi'
+ recommended_species = list(SPECIES_VOX)
+
+/datum/sprite_accessory/facial_hair/vox/vox_beard
+ name = "Vox Beard"
+ icon_state = "facial_vox_beard"
+
+/datum/sprite_accessory/facial_hair/vox/vox_colonel
+ name = "Vox Beard (Colonel)"
+ icon_state = "facial_vox_colonel"
+
+/datum/sprite_accessory/facial_hair/vox/vox_fu
+ name = "Vox Beard (Fu)"
+ icon_state = "facial_vox_fu"
+
+/datum/sprite_accessory/facial_hair/vox/vox_neck
+ name = "Vox Neck Quills"
+ icon_state = "facial_vox_neck"
+
+/datum/sprite_accessory/facial_hair/vox/vox_mane
+ name = "Vox Mane"
+ icon_state = "facial_vox_mane"
+
+//The tail
+/datum/sprite_accessory/tails/vox
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_tails.dmi'
+ name = "Vox Tail"
+ icon_state = "vox"
+ recommended_species = list(SPECIES_VOX)
+ organ_type = /obj/item/organ/external/tail/lizard
+
+//The tail markings
+/datum/sprite_accessory/spines/vox
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi'
+ default_color = DEFAULT_TERTIARY
+ recommended_species = list(SPECIES_VOX)
+ relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+
+/datum/sprite_accessory/spines/vox/vox_bands
+ name = "Vox Bands"
+ icon_state = "vox_bands"
+
+/datum/sprite_accessory/spines/vox/vox_tip
+ name = "Vox Tip"
+ icon_state = "vox_tip"
+
+/datum/sprite_accessory/spines/vox/vox_stripe
+ name = "Vox Stripe"
+ icon_state = "vox_stripe"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
index 03a68cb6925..94bcad4da98 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -2,7 +2,7 @@
* Wings!
*
* When adding or making new wing sprites, try to use matrixed colors!
-* You can find a color palette to work with in modular_skyrat\modules\customization\icons\mob\sprite_accessory\wings.dmi as 'colorpalette matrixcolors'
+* You can find a color palette to work with in modular_nova\modules\customization\icons\mob\sprite_accessory\wings.dmi as 'colorpalette matrixcolors'
* Check some of the wings that make use of them for examples on how to make it look decent.
*/
/datum/sprite_accessory/wings
@@ -121,7 +121,7 @@
*/
/datum/sprite_accessory/wings/mammal
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi'
default_color = DEFAULT_PRIMARY
recommended_species = list(SPECIES_MAMMAL, SPECIES_LIZARD, SPECIES_INSECT)
relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
@@ -260,7 +260,7 @@
*/
/datum/sprite_accessory/wings/low_wings
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/wings.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/wings.dmi'
name = "Low wings"
icon_state = "low"
dimension_x = 46
@@ -294,7 +294,7 @@
*/
/datum/sprite_accessory/wings/moth
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/moth_wings.dmi' // Needs new icon to suit new naming convention
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/moth_wings.dmi' // Needs new icon to suit new naming convention
default_color = "#FFFFFF"
recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT) // Mammals too, I guess. They wont get flight though, see the wing organs for that logic
organ_type = /obj/item/organ/external/wings/moth
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm
similarity index 87%
rename from modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm
rename to modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm
index 1309d2fb5d7..36bf71e1496 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm
+++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/xeno.dm
@@ -1,5 +1,5 @@
/datum/sprite_accessory/xenodorsal
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
generic = "Dorsal Spines"
key = "xenodorsal"
color_src = USE_ONE_COLOR
@@ -36,14 +36,14 @@
//TAILS
/datum/sprite_accessory/tails/mammal/wagging/xeno_tail
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
name = "Xenomorph Tail"
icon_state = "xeno"
recommended_species = list(SPECIES_XENO)
//HEADS
/datum/sprite_accessory/xenohead
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
+ icon = 'modular_nova/master_files/icons/mob/sprite_accessory/xeno_parts.dmi'
generic = "Caste Head"
key = "xenohead"
relevent_layers = list(BODY_ADJ_LAYER)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/damage_procs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/damage_procs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/damage_procs.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/damage_procs.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm
similarity index 94%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm
index 83dda0c57d7..fd01e77c4f0 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_accessory_handler.dm
@@ -1,5 +1,5 @@
// This DMI holds all of the overlayable textures for MODs
-#define HARDLIGHT_DMI 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi'
+#define HARDLIGHT_DMI 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi'
/obj/item/mod/control/seal_part(obj/item/clothing/part, seal)
. = ..()
@@ -41,6 +41,8 @@
/datum/sprite_accessory/tails/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -60,6 +62,8 @@
/datum/sprite_accessory/ears/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -79,6 +83,8 @@
/datum/sprite_accessory/wings/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -98,6 +104,8 @@
/datum/sprite_accessory/moth_antennae/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -117,6 +125,8 @@
/datum/sprite_accessory/antenna/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -136,6 +146,8 @@
/datum/sprite_accessory/horns/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.head && istype(wearer.head, /obj/item/clothing/head/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -154,6 +166,8 @@
/datum/sprite_accessory/taur/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -172,6 +186,8 @@
/datum/sprite_accessory/spines/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
@@ -190,6 +206,8 @@
/datum/sprite_accessory/xenodorsal/get_custom_mod_icon(mob/living/carbon/human/wearer, mutable_appearance/appearance_to_use = null)
if(wearer?.wear_suit && istype(wearer.wear_suit, /obj/item/clothing/suit/mod))
var/obj/item/mod/control/modsuit_control = wearer.back
+ if(!istype(modsuit_control))
+ return
var/datum/mod_theme/mod_theme = modsuit_control.theme
if(!modsuit_control.active || !mod_theme.hardlight)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm
similarity index 84%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm
index 33125dca3e7..33d3ab96735 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_actions.dm
@@ -1,7 +1,7 @@
/datum/action/item_action/mod/sprite_accessories
name = "Hide/Show mutant parts"
desc = "LMB: Deploy/Undeploy part. RMB: Deploy/Undeploy all parts."
- button_icon = 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' // What a great var name
+ button_icon = 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi' // What a great var name
button_icon_state = "open"
/datum/action/item_action/mod/sprite_accessories/Trigger(trigger_flags)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm
similarity index 95%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm
index c2954a320c8..ee5a684e7f8 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/mod_themes.dm
@@ -1,6 +1,6 @@
// All available options
// Remember these are read from:
-// 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi'
+// 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/MOD_mask.dmi'
#define STANDARD_BLUE "standard_blue"
#define ALERT_AMBER "alert_amber"
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/custom_bodytype.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm
index a8499e2fcdb..3dafb4b483f 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/human.dm
@@ -1,5 +1,5 @@
// This DMI holds our radial icons for the 'hide mutant parts' verb
-#define HIDING_RADIAL_DMI 'modular_skyrat/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi'
+#define HIDING_RADIAL_DMI 'modular_nova/modules/customization/modules/mob/living/carbon/human/MOD_sprite_accessories/icons/radial.dmi'
/mob/living/carbon/human/Topic(href, href_list)
. = ..()
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/human_defines.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/human_defines.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/human_defines.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/human_defines.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm
similarity index 99%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm
index 7a9181b75a9..b439a0e1f41 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/akula.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm
@@ -16,7 +16,7 @@
OFFSET_HEAD = list(0, 2),
OFFSET_HAIR = list(0, 1),
)
- eyes_icon = 'modular_skyrat/modules/organs/icons/akula_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/organs/icons/akula_eyes.dmi'
mutanteyes = /obj/item/organ/internal/eyes/akula
mutanttongue = /obj/item/organ/internal/tongue/akula
inherent_traits = list(
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/aquatic.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/dwarf.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/ghoul.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_hemophage_defines.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm
similarity index 98%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm
index aa8c21a6d0e..0bac094f620 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/_organ_corruption.dm
@@ -16,7 +16,7 @@
/// If this type of organ has a unique sprite for what its corrupted
/// version should look like, this will be the icon file it will be pulled
/// from.
- var/corrupted_icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi'
+ var/corrupted_icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi'
/// If this type of organ has a unique sprite for what its corrupted
/// version should look like, this will be the icon state it will be pulled
/// from.
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/atrophied_lungs.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_liver.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_stomach.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_actions.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
similarity index 94%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
index 7a0e972f3d8..43005aa433f 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm
@@ -10,7 +10,7 @@
/obj/item/organ/internal/liver/hemophage
name = "liver" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
- icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi'
+ icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi'
organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED
@@ -70,7 +70,7 @@
/obj/item/organ/internal/stomach/hemophage
name = "stomach" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
- icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi'
+ icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi'
organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED
@@ -92,7 +92,7 @@
/obj/item/organ/internal/tongue/hemophage
name = "tongue" // Name change is handled by /datum/component/organ_corruption/corrupt_organ()
desc = GENERIC_CORRUPTED_ORGAN_DESC
- icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi'
+ icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi'
organ_flags = ORGAN_EDIBLE | ORGAN_TUMOR_CORRUPTED
liked_foodtypes = BLOODY
disliked_foodtypes = NONE
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_species.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_status_effects.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm
similarity index 99%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm
index a3731443243..2f4ee0c3c52 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_tumor.dm
@@ -14,7 +14,7 @@
/obj/item/organ/internal/heart/hemophage
name = "pulsating tumor"
- icon = 'modular_skyrat/modules/organs/icons/hemophage_organs.dmi'
+ icon = 'modular_nova/modules/organs/icons/hemophage_organs.dmi'
icon_state = "tumor-on"
base_icon_state = "tumor"
desc = "This pulsating organ nearly resembles a normal heart, but it's been twisted beyond any human appearance, having turned to the color of coal. The way it barely fits where the original organ was sends shivers down your spine... The fact that it's what keeps them alive makes it all the more terrifying. "
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/tumor_corruption.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/humanoid.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm
index 97b21607c27..3cebab4a95d 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/insect.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/insect.dm
@@ -21,7 +21,7 @@
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/insect,
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/insect,
)
- eyes_icon = 'modular_skyrat/modules/organs/icons/insect_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/organs/icons/insect_eyes.dmi'
/datum/species/insect/get_default_mutant_bodyparts()
return list(
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/lizard.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/lizard.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/mammal.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mammal.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/mammal.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/monkey.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/monkey.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/monkey.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/moth.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/moth.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/moth.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/mushpeople.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/placeholder_helper.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/podweak.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/podweak.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
index 5490654ef96..ad469037a85 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
@@ -64,7 +64,7 @@
name = "Alter Form"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "alter_form"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi'
background_icon_state = "bg_alien"
/// Do you need to be a slime-person to use this ability?
var/slime_restricted = TRUE
@@ -110,10 +110,10 @@
alterer,
alterer,
list(
- "Body Colours" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"),
- "DNA" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"),
- "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
- "Markings" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"),
+ "Body Colours" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"),
+ "DNA" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"),
+ "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
+ "Markings" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"),
),
tooltips = TRUE,
)
@@ -138,10 +138,10 @@
alterer,
alterer,
list(
- "Primary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_red"),
- "Secondary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_green"),
- "Tertiary" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_blue"),
- "All" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"),
+ "Primary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_red"),
+ "Secondary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_green"),
+ "Tertiary" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_blue"),
+ "All" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "slime_rainbow"),
),
tooltips = TRUE,
)
@@ -240,9 +240,9 @@
alterer,
alterer,
list(
- "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
- "Facial Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "straight_razor"),
- "Hair Color" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan")
+ "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
+ "Facial Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "straight_razor"),
+ "Hair Color" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan")
),
tooltips = TRUE,
)
diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm
new file mode 100644
index 00000000000..e3102a8d7c1
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/skrell.dm
@@ -0,0 +1,162 @@
+/datum/species/skrell
+ name = "Skrell"
+ id = SPECIES_SKRELL
+ inherent_traits = list(
+ TRAIT_ADVANCEDTOOLUSER,
+ TRAIT_CAN_STRIP,
+ TRAIT_LITERATE,
+ TRAIT_MUTANT_COLORS,
+ )
+ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ exotic_blood = /datum/reagent/copper
+ bodytemp_normal = (BODYTEMP_NORMAL + 70)
+ bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD
+ bodytemp_cold_damage_limit = (T20C - 10)
+ species_language_holder = /datum/language_holder/skrell
+ mutant_bodyparts = list()
+ mutanttongue = /obj/item/organ/internal/tongue/skrell
+ payday_modifier = 1.0
+ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
+ eyes_icon = 'modular_nova/modules/organs/icons/skrell_eyes.dmi'
+ mutantbrain = /obj/item/organ/internal/brain/skrell
+ mutanteyes = /obj/item/organ/internal/eyes/skrell
+ mutantlungs = /obj/item/organ/internal/lungs/skrell
+ mutantheart = /obj/item/organ/internal/heart/skrell
+ mutantliver = /obj/item/organ/internal/liver/skrell
+ mutanttongue = /obj/item/organ/internal/tongue/skrell
+ bodypart_overrides = list(
+ BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/skrell,
+ BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/skrell,
+ BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/skrell,
+ BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/skrell,
+ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/skrell,
+ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/skrell,
+ )
+
+/datum/species/skrell/get_default_mutant_bodyparts()
+ return list(
+ "skrell_hair" = list("Male", TRUE),
+ )
+
+/datum/species/skrell/get_species_description()
+ return placeholder_description
+
+/datum/species/skrell/get_species_lore()
+ return list(placeholder_lore)
+
+/datum/species/skrell/randomize_features()
+ var/list/features = ..()
+ var/main_color
+ var/random = rand(1,6)
+ //Choose from a range of green-blue colors
+ switch(random)
+ if(1)
+ main_color = "#44FF77"
+ if(2)
+ main_color = "#22FF88"
+ if(3)
+ main_color = "#22FFBB"
+ if(4)
+ main_color = "#22FFFF"
+ if(5)
+ main_color = "#22BBFF"
+ if(6)
+ main_color = "#2266FF"
+ features["mcolor"] = main_color
+ features["mcolor2"] = main_color
+ features["mcolor3"] = main_color
+ return features
+
+/datum/species/skrell/prepare_human_for_preview(mob/living/carbon/human/skrell)
+ var/skrell_color = "#22BBFF"
+ skrell.dna.features["mcolor"] = skrell_color
+ skrell.dna.features["mcolor2"] = skrell_color
+ skrell.dna.features["mcolor3"] = skrell_color
+ skrell.dna.mutant_bodyparts["skrell_hair"] = list(MUTANT_INDEX_NAME = "Female", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color))
+ regenerate_organs(skrell, src, visual_only = TRUE)
+ skrell.update_body(TRUE)
+
+
+/obj/item/organ/internal/tongue/skrell
+ name = "internal vocal sacs"
+ desc = "An Strange looking sac."
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ icon_state = "tongue"
+ taste_sensitivity = 5
+ var/static/list/languages_possible_skrell = typecacheof(list(
+ /datum/language/common,
+ /datum/language/uncommon,
+ /datum/language/draconic,
+ /datum/language/codespeak,
+ /datum/language/monkey,
+ /datum/language/narsie,
+ /datum/language/machine,
+ /datum/language/slime,
+ /datum/language/beachbum,
+ /datum/language/aphasia,
+ /datum/language/piratespeak,
+ /datum/language/moffic,
+ /datum/language/sylvan,
+ /datum/language/shadowtongue,
+ /datum/language/terrum,
+ /datum/language/vox,
+ /datum/language/nekomimetic,
+ /datum/language/skrell,
+ ))
+ liked_foodtypes = TOXIC | FRUIT | VEGETABLES
+ disliked_foodtypes = RAW | CLOTH
+ toxic_foodtypes = DAIRY | MEAT
+
+/obj/item/organ/internal/tongue/skrell/get_possible_languages()
+ return languages_possible_skrell
+
+/obj/item/organ/internal/heart/skrell
+ name = "skrellian heart"
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ icon_state = "heart"
+
+/obj/item/organ/internal/brain/skrell
+ name = "spongy brain"
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ icon_state = "brain2"
+
+/obj/item/organ/internal/eyes/skrell
+ name = "amphibian eyes"
+ desc = "Large black orbs."
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ icon_state = "eyes"
+ flash_protect = FLASH_PROTECTION_SENSITIVE
+
+/obj/item/organ/internal/lungs/skrell
+ name = "skrell lungs"
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ icon_state = "lungs"
+ safe_plasma_max = 40
+ safe_co2_max = 40
+
+ cold_message = "You can't stand the freezing cold with every breath you take!"
+ cold_level_1_threshold = 248
+ cold_level_2_threshold = 220
+ cold_level_3_threshold = 170
+ cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
+ cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
+ cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
+ cold_damage_type = BRUTE
+
+
+ hot_message = "You can't stand the searing heat with every breath you take!"
+ heat_level_1_threshold = 318
+ heat_level_2_threshold = 348
+ heat_level_3_threshold = 1000
+ heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
+ heat_damage_type = BURN
+
+/obj/item/organ/internal/liver/skrell
+ name = "skrell liver"
+ icon_state = "liver"
+ icon = 'modular_nova/modules/organs/icons/skrell_organ.dmi'
+ alcohol_tolerance = 5
+ toxTolerance = 10 //can shrug off up to 10u of toxins.
+ liver_resistance = 1.2 * LIVER_DEFAULT_TOX_RESISTANCE // +20%
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/tajaran.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/unathi.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/unathi.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/unathi.dm
diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm
new file mode 100644
index 00000000000..fbff30a3138
--- /dev/null
+++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vox.dm
@@ -0,0 +1,114 @@
+/datum/species/vox
+ // Bird-like humanoids
+ name = "Vox"
+ id = SPECIES_VOX
+ eyes_icon = 'modular_nova/modules/organs/icons/vox_eyes.dmi'
+ can_augment = FALSE
+ inherent_traits = list(
+ TRAIT_ADVANCEDTOOLUSER,
+ TRAIT_CAN_STRIP,
+ TRAIT_LITERATE,
+ TRAIT_MUTANT_COLORS,
+ )
+ inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
+ mutanttongue = /obj/item/organ/internal/tongue/vox
+ mutantlungs = /obj/item/organ/internal/lungs/nitrogen/vox
+ mutantbrain = /obj/item/organ/internal/brain/vox
+ breathid = "n2"
+ mutant_bodyparts = list()
+ payday_modifier = 1.0
+ outfit_important_for_life = /datum/outfit/vox
+ species_language_holder = /datum/language_holder/vox
+ changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
+ // Vox are cold resistant, but also heat sensitive
+ bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much
+ bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 30)
+ digitigrade_customization = DIGITIGRADE_OPTIONAL
+ bodypart_overrides = list(
+ BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/vox,
+ BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/vox,
+ BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/vox,
+ BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/vox,
+ BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/vox,
+ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/vox,
+ )
+ custom_worn_icons = list(
+ LOADOUT_ITEM_HEAD = VOX_HEAD_ICON,
+ LOADOUT_ITEM_MASK = VOX_MASK_ICON,
+ LOADOUT_ITEM_SUIT = VOX_SUIT_ICON,
+ LOADOUT_ITEM_UNIFORM = VOX_UNIFORM_ICON,
+ LOADOUT_ITEM_HANDS = VOX_HANDS_ICON,
+ LOADOUT_ITEM_SHOES = VOX_FEET_ICON,
+ LOADOUT_ITEM_GLASSES = VOX_EYES_ICON,
+ LOADOUT_ITEM_BELT = VOX_BELT_ICON,
+ LOADOUT_ITEM_MISC = VOX_BACK_ICON,
+ LOADOUT_ITEM_EARS = VOX_EARS_ICON
+ )
+
+/datum/species/vox/get_default_mutant_bodyparts()
+ return list(
+ "tail" = list("Vox Tail", FALSE),
+ "legs" = list(DIGITIGRADE_LEGS,FALSE),
+ "snout" = list("Vox Snout", FALSE),
+ "spines" = list("Vox Bands", TRUE),
+ )
+
+/datum/species/vox/pre_equip_species_outfit(datum/job/job, mob/living/carbon/human/equipping, visuals_only)
+ . = ..()
+ if(job?.vox_outfit)
+ equipping.equipOutfit(job.vox_outfit, visuals_only)
+ else
+ give_important_for_life(equipping)
+
+/datum/species/vox/random_name(gender,unique,lastname)
+ if(unique)
+ return random_unique_vox_name()
+
+ var/randname = vox_name()
+
+ if(lastname)
+ randname += " [lastname]"
+
+ return randname
+
+/datum/species/vox/randomize_features()
+ var/list/features = ..()
+ features["mcolor"] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC")
+ features["mcolor2"] = pick("#EEDD88", "#EECC88")
+ features["mcolor3"] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233")
+ return features
+
+/datum/species/vox/get_random_body_markings(list/passed_features)
+ var/name = pick(list("Vox", "Vox Hive", "Vox Nightling", "Vox Heart", "Vox Tiger"))
+ var/datum/body_marking_set/BMS = GLOB.body_marking_sets[name]
+ var/list/markings = list()
+ if(BMS)
+ markings = assemble_body_markings_from_set(BMS, passed_features, src)
+ return markings
+
+/datum/species/vox/get_custom_worn_icon(item_slot, obj/item/item)
+ // snowflakey but vox legs weird.
+ if(item_slot == LOADOUT_ITEM_SHOES)
+ var/obj/item/bodypart/leg = bodypart_overrides[BODY_ZONE_L_LEG] || bodypart_overrides[BODY_ZONE_R_LEG]
+ if(initial(leg?.limb_id) != "digitigrade")
+ // normal legs, use normal human shoes
+ return DEFAULT_SHOES_FILE
+
+ return item.worn_icon_vox
+
+/datum/species/vox/set_custom_worn_icon(item_slot, obj/item/item, icon/icon)
+ item.worn_icon_vox = icon
+
+/datum/species/vox/get_species_description()
+ return placeholder_description
+
+/datum/species/vox/get_species_lore()
+ return list(placeholder_lore)
+
+/datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/vox)
+ vox.dna.features["mcolor"] = "#77DD88"
+ vox.dna.features["mcolor2"] = "#EEDD88"
+ vox.dna.features["mcolor3"] = "#222222"
+ vox.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88"))
+ regenerate_organs(vox, src, visual_only = TRUE)
+ vox.update_body(TRUE)
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/vulpkanin.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/species/xeno.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/status_procs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/status_procs.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/status_procs.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/status_procs.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm
rename to modular_nova/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/living.dm b/modular_nova/modules/customization/modules/mob/living/living.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/living.dm
rename to modular_nova/modules/customization/modules/mob/living/living.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/living_defines.dm b/modular_nova/modules/customization/modules/mob/living/living_defines.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/living_defines.dm
rename to modular_nova/modules/customization/modules/mob/living/living_defines.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm b/modular_nova/modules/customization/modules/mob/living/living_verbs.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm
rename to modular_nova/modules/customization/modules/mob/living/living_verbs.dm
index 365e6ede890..63a6b3548b0 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/living_verbs.dm
+++ b/modular_nova/modules/customization/modules/mob/living/living_verbs.dm
@@ -1,7 +1,7 @@
GLOBAL_VAR_INIT(temporary_flavor_text_indicator, generate_temporary_flavor_text_indicator())
/proc/generate_temporary_flavor_text_indicator()
- var/mutable_appearance/temporary_flavor_text_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi', "flavor", FLY_LAYER)
+ var/mutable_appearance/temporary_flavor_text_indicator = mutable_appearance('modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi', "flavor", FLY_LAYER)
temporary_flavor_text_indicator.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
return temporary_flavor_text_indicator
diff --git a/modular_skyrat/modules/customization/modules/mob/living/silicon/examine.dm b/modular_nova/modules/customization/modules/mob/living/silicon/examine.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/silicon/examine.dm
rename to modular_nova/modules/customization/modules/mob/living/silicon/examine.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/silicon/topic.dm b/modular_nova/modules/customization/modules/mob/living/silicon/topic.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/silicon/topic.dm
rename to modular_nova/modules/customization/modules/mob/living/silicon/topic.dm
diff --git a/modular_skyrat/modules/customization/modules/mob/living/simple_mob/examine.dm b/modular_nova/modules/customization/modules/mob/living/simple_mob/examine.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/mob/living/simple_mob/examine.dm
rename to modular_nova/modules/customization/modules/mob/living/simple_mob/examine.dm
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents.dm
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
similarity index 93%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 8c4ba3dfe84..5feb816a217 100644
--- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1,4 +1,4 @@
-// Modular Booze REAGENTS, see the following file for the mixes: modular_skyrat\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm
+// Modular Booze REAGENTS, see the following file for the mixes: modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm
/datum/reagent/consumable/ethanol/whiskey
process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //let's not force the detective to change his alcohol brand
@@ -22,7 +22,7 @@
/datum/glass_style/drinking_glass/synthanol
required_drink_type = /datum/reagent/consumable/ethanol/synthanol
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi' // This should cover anything synthanol related. Will have to individually tag others unless we make an object path for skyrat drinks.
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi' // This should cover anything synthanol related. Will have to individually tag others unless we make an object path for skyrat drinks.
icon_state = "synthanolglass"
name = "glass of synthanol"
desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too."
@@ -137,7 +137,7 @@
/datum/glass_style/drinking_glass/gunfire
required_drink_type = /datum/reagent/consumable/ethanol/gunfire
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "gunfire"
name = "glass of gunfire"
desc = "It pops constantly as you look at it, giving off tiny sparks."
@@ -157,7 +157,7 @@
/datum/glass_style/drinking_glass/hellfire
required_drink_type = /datum/reagent/consumable/ethanol/hellfire
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "hellfire"
name = "glass of hellfire"
desc = "An amber colored drink that isn't quite as hot as it looks."
@@ -176,7 +176,7 @@
/datum/glass_style/drinking_glass/sins_delight
required_drink_type = /datum/reagent/consumable/ethanol/sins_delight
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "sins_delight"
name = "glass of sin's delight"
desc = "You can smell the seven sins rolling off the top of the glass."
@@ -191,7 +191,7 @@
/datum/glass_style/drinking_glass/strawberry_daiquiri
required_drink_type = /datum/reagent/consumable/ethanol/strawberry_daiquiri
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "strawberry_daiquiri"
name = "glass of strawberry daiquiri"
desc = "Pink looking drink with flowers and a big straw to sip it. Looks sweet and refreshing, perfect for warm days."
@@ -206,7 +206,7 @@
/datum/glass_style/drinking_glass/liz_fizz
required_drink_type = /datum/reagent/consumable/ethanol/liz_fizz
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "liz_fizz"
name = "glass of liz fizz"
desc = "Looks like a citrus sherbet seperated in layers? Why would anyone want that is beyond you."
@@ -221,7 +221,7 @@
/datum/glass_style/drinking_glass/miami_vice
required_drink_type = /datum/reagent/consumable/ethanol/miami_vice
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "miami_vice"
name = "glass of miami vice"
desc = "Strawberries and coconut, like yin and yang."
@@ -236,7 +236,7 @@
/datum/glass_style/drinking_glass/malibu_sunset
required_drink_type = /datum/reagent/consumable/ethanol/malibu_sunset
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "malibu_sunset"
name = "glass of malibu sunset"
desc = "Tropical looking drinks, with ice cubes hovering on the surface and grenadine coloring the bottom."
@@ -251,7 +251,7 @@
/datum/glass_style/drinking_glass/hotlime_miami
required_drink_type = /datum/reagent/consumable/ethanol/hotlime_miami
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "hotlime_miami"
name = "glass of hotlime miami"
desc = "This looks very aesthetically pleasing."
@@ -272,7 +272,7 @@
/datum/glass_style/drinking_glass/coggrog
required_drink_type = /datum/reagent/consumable/ethanol/coggrog
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "coggrog"
name = "glass of cog grog"
desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!"
@@ -287,7 +287,7 @@
/datum/glass_style/drinking_glass/badtouch
required_drink_type = /datum/reagent/consumable/ethanol/badtouch
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "badtouch"
name = "glass of bad touch"
desc = "We're nothing but mammals after all."
@@ -302,7 +302,7 @@
/datum/glass_style/drinking_glass/marsblast
required_drink_type = /datum/reagent/consumable/ethanol/marsblast
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "marsblast"
name = "glass of marsblast"
desc = "One of these is enough to leave your face as red as the planet."
@@ -317,7 +317,7 @@
/datum/glass_style/drinking_glass/mercuryblast
required_drink_type = /datum/reagent/consumable/ethanol/mercuryblast
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "mercuryblast"
name = "glass of mercuryblast"
desc = "No thermometers were harmed in the creation of this drink"
@@ -336,7 +336,7 @@
/datum/glass_style/drinking_glass/piledriver
required_drink_type = /datum/reagent/consumable/ethanol/piledriver
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "piledriver"
name = "glass of piledriver"
desc = "Not the only thing to leave your throat sore."
@@ -351,7 +351,7 @@
/datum/glass_style/drinking_glass/zenstar
required_drink_type = /datum/reagent/consumable/ethanol/zenstar
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "zenstar"
name = "glass of zen star"
desc = "You'd think something so balanced would actually taste nice... you'd be dead wrong."
@@ -368,7 +368,7 @@
/datum/glass_style/drinking_glass/coldscales
required_drink_type = /datum/reagent/consumable/ethanol/coldscales
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "coldscales"
name = "glass of coldscales"
desc = "A soft green drink that looks inviting!"
@@ -389,7 +389,7 @@
/datum/glass_style/drinking_glass/oil_drum
required_drink_type = /datum/reagent/consumable/ethanol/oil_drum
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "oil_drum"
name = "drum of oil"
desc = "A gray can of booze and oil..."
@@ -410,7 +410,7 @@
/datum/glass_style/drinking_glass/nord_king
required_drink_type = /datum/reagent/consumable/ethanol/nord_king
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "nord_king"
name = "keg of nord king"
desc = "A dripping keg of red mead."
@@ -431,7 +431,7 @@
/datum/glass_style/drinking_glass/velvet_kiss
required_drink_type = /datum/reagent/consumable/ethanol/velvet_kiss
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "velvet_kiss"
name = "glass of velvet kiss"
desc = "Red and white drink for the upper classes or undead."
@@ -452,7 +452,7 @@
/datum/glass_style/drinking_glass/abduction_fruit
required_drink_type = /datum/reagent/consumable/ethanol/abduction_fruit
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "abduction_fruit"
name = "glass of abduction fruit"
desc = "Mixed fruits that were never meant to be mixed..."
@@ -473,7 +473,7 @@
/datum/glass_style/drinking_glass/bug_zapper
required_drink_type = /datum/reagent/consumable/ethanol/bug_zapper
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "bug_zapper"
name = "glass of bug zapper"
desc = "An odd mix of copper, lemon juice and power meant for non-human consumption."
@@ -494,7 +494,7 @@
/datum/glass_style/drinking_glass/mush_crush
required_drink_type = /datum/reagent/consumable/ethanol/mush_crush
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "mush_crush"
name = "glass of mush crush"
desc = "Popular among people that want to grow their own food rather than drink the soil."
@@ -515,7 +515,7 @@
/datum/glass_style/drinking_glass/hollow_bone
required_drink_type = /datum/reagent/consumable/ethanol/hollow_bone
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "hollow_bone"
name = "skull of hollow bone"
desc = "Mixing of milk and bone hurting juice for enjoyment for rather skinny people."
@@ -536,7 +536,7 @@
/datum/glass_style/drinking_glass/jell_wyrm
required_drink_type = /datum/reagent/consumable/ethanol/jell_wyrm
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "jell_wyrm"
name = "glass of jell wyrm"
desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for."
@@ -567,7 +567,7 @@
/datum/glass_style/drinking_glass/laval_spit
required_drink_type = /datum/reagent/consumable/ethanol/laval_spit
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "laval_spit"
name = "glass of laval spit"
desc = "Piping hot drink for those who can stomach the heat of lava."
@@ -588,7 +588,7 @@
/datum/glass_style/drinking_glass/frisky_kitty
required_drink_type = /datum/reagent/consumable/ethanol/frisky_kitty
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "frisky_kitty"
name = "cup of frisky kitty"
desc = "Warm milk and some catnip."
@@ -622,7 +622,7 @@
/datum/glass_style/drinking_glass/bloodshot
required_drink_type = /datum/reagent/consumable/ethanol/bloodshot
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "bloodshot"
name = "glass of bloodshot"
desc = "The history of the 'Bloodshot' is based in a mix of flavor-neutral chems devised to help deliver nutrients to a Hemophage's tumorous organs. Due to the expense of the real thing and the clinical nature of it, this liquor has been designed as a 'improvised' alternative; though, still tasting like a hangover cure. It smells like iron, giving a clue to the key ingredient."
@@ -662,7 +662,7 @@
/datum/glass_style/drinking_glass/blizzard_brew
required_drink_type = /datum/reagent/consumable/ethanol/blizzard_brew
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "blizzard_brew"
name = "glass of Blizzard Brew"
desc = "An ancient recipe. Served best chilled as much as dwarvenly possible."
@@ -699,7 +699,7 @@
/datum/glass_style/drinking_glass/molten_mead
required_drink_type = /datum/reagent/consumable/ethanol/molten_mead
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "molten_mead"
name = "glass of Molten Mead"
desc = "Famously known to set beards aflame. Ingest at your own risk!"
@@ -731,7 +731,7 @@
/datum/glass_style/drinking_glass/hippie_hooch
required_drink_type = /datum/reagent/consumable/ethanol/hippie_hooch
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "hippie_hooch"
name = "glass of Hippie Hooch"
desc = "Peace and love! Under request of the HR department, this drink is sure to sober you up quickly."
@@ -761,7 +761,7 @@
/datum/glass_style/drinking_glass/research_rum
required_drink_type = /datum/reagent/consumable/ethanol/research_rum
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "research_rum"
name = "glass of Research Rum"
desc = "Cooked up by dwarven scientists, this glowing pink brew is sure to supercharge your thinking. How? Science!"
@@ -787,7 +787,7 @@
/datum/glass_style/drinking_glass/golden_grog
required_drink_type = /datum/reagent/consumable/ethanol/golden_grog
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "golden_grog"
name = "glass of Golden Grog"
desc = "A drink concocted by a dwarven Quartermaster who had too much time and money on his hands. Commonly ordered by influencers looking to flaunt their wealth."
@@ -811,7 +811,7 @@
/datum/glass_style/drinking_glass/appletini
required_drink_type = /datum/reagent/consumable/ethanol/appletini
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "appletini"
name = "glass of appletini"
desc = "An appley beverage in a martini glass"
@@ -827,7 +827,7 @@
/datum/glass_style/drinking_glass/cityofsin
required_drink_type = /datum/reagent/consumable/ethanol/quadruple_sec/cityofsin
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "cityofsin"
name = "glass of city of sin"
desc = "Looking at it makes you recall every mistake you've made."
@@ -843,7 +843,7 @@
/datum/glass_style/drinking_glass/shakiri
required_drink_type = /datum/reagent/consumable/ethanol/shakiri
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "shakiri"
name = "glass of shakiri"
desc = "A sweet, fragrant red drink made from fermented kiri fruits. It seems to gently sparkle when exposed to light."
@@ -858,7 +858,7 @@
/datum/glass_style/drinking_glass/shakiri_spritz
required_drink_type = /datum/reagent/consumable/ethanol/shakiri_spritz
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "shakiri_spritz"
name = "glass of shakiri spritz"
desc = "A carbonated cocktail made from shakiri and orange juice with soda water."
@@ -873,7 +873,7 @@
/datum/glass_style/drinking_glass/crimson_hurricane
required_drink_type = /datum/reagent/consumable/ethanol/crimson_hurricane
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "crimson_hurricane"
name = "glass of crimson hurricane"
desc = "A strong, citrusy cocktail of human origin, now with shakiri and kiri jelly for a delightfully sweet drink."
@@ -888,7 +888,7 @@
/datum/glass_style/drinking_glass/shakiri_rogers
required_drink_type = /datum/reagent/consumable/ethanol/shakiri_rogers
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "shakiri_rogers"
name = "glass of shakiri rogers"
desc = "A take on the classic Roy Rogers, with shakiri instead of grenadine. Sweet and refreshing."
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm
similarity index 91%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm
index db1b51d9325..3788d4af1aa 100644
--- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -1,4 +1,4 @@
-// Modular DRINK REAGENTS, see the following file for the mixes: modular_skyrat\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm
+// Modular DRINK REAGENTS, see the following file for the mixes: modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm
/datum/reagent/consumable/pinkmilk
name = "Strawberry Milk"
@@ -9,7 +9,7 @@
/datum/glass_style/drinking_glass/pinkmilk
required_drink_type = /datum/reagent/consumable/pinkmilk
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "pinkmilk"
name = "tall glass of strawberry milk"
desc = "Delicious flavored strawberry syrup mixed with milk."
@@ -29,7 +29,7 @@
/datum/glass_style/drinking_glass/pinktea
required_drink_type = /datum/reagent/consumable/pinktea
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "pinktea"
name = "mug of strawberry tea"
desc = "Delicious traditional tea flavored with strawberries."
@@ -48,7 +48,7 @@
/datum/glass_style/drinking_glass/catnip_tea
required_drink_type = /datum/reagent/consumable/catnip_tea
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = "catnip_tea"
name = "glass of catnip tea"
desc = "A purrfect drink for a cat."
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm
similarity index 96%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm
index 14d158734fb..5f9245d3e76 100644
--- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/drinks.dm
+++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/drinks.dm
@@ -22,7 +22,7 @@
//CODING SIN BYOND HERE
/obj/item/trash/can/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/janitor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/janitor.dmi'
icon_state = "lemonade"
/*
@@ -35,7 +35,7 @@
#define SODA_FIZZINESS_SHAKE 5
/obj/item/reagent_containers/cup/soda_cans/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/drinks.dmi'
icon_state = null
/obj/item/reagent_containers/cup/soda_cans/skyrat/attack(mob/M, mob/living/user)
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/food_reagents.dm
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm
similarity index 94%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm
index 1c03bbf2ca3..521c7e30910 100644
--- a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1,7 +1,7 @@
/datum/reagent/fuel
process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-/datum/reagent/oil
+/datum/reagent/fuel/oil
process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
/datum/reagent/stable_plasma
@@ -16,9 +16,6 @@
/datum/reagent/hellwater
process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-/datum/reagent/syndicateadrenals
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-
/datum/reagent/carbondioxide
process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
@@ -45,7 +42,7 @@
C.nutrition = min(C.nutrition + 5, NUTRITION_LEVEL_FULL-1)
..()
-/datum/reagent/oil/on_mob_life(mob/living/carbon/C)
+/datum/reagent/fuel/oil/on_mob_life(mob/living/carbon/C)
if(C.mob_biotypes & MOB_ROBOTIC && C.blood_volume < BLOOD_VOLUME_NORMAL)
C.blood_volume += 0.5
..()
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm b/modular_nova/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/reagents/toxin_reagents.dm
diff --git a/modular_skyrat/modules/customization/modules/reagents/chemistry/recipes/medicine.dm b/modular_nova/modules/customization/modules/reagents/chemistry/recipes/medicine.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/reagents/chemistry/recipes/medicine.dm
rename to modular_nova/modules/customization/modules/reagents/chemistry/recipes/medicine.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/_bodyparts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/_bodyparts.dm
rename to modular_nova/modules/customization/modules/surgery/bodyparts/_bodyparts.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/parts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/parts.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/parts.dm
rename to modular_nova/modules/customization/modules/surgery/bodyparts/parts.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm b/modular_nova/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm
rename to modular_nova/modules/customization/modules/surgery/bodyparts/robot_bodyparts.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/cap.dm b/modular_nova/modules/customization/modules/surgery/organs/cap.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/cap.dm
rename to modular_nova/modules/customization/modules/surgery/organs/cap.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/ears.dm b/modular_nova/modules/customization/modules/surgery/organs/ears.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/ears.dm
rename to modular_nova/modules/customization/modules/surgery/organs/ears.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/eyes.dm b/modular_nova/modules/customization/modules/surgery/organs/eyes.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/eyes.dm
rename to modular_nova/modules/customization/modules/surgery/organs/eyes.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/fluff.dm b/modular_nova/modules/customization/modules/surgery/organs/fluff.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/fluff.dm
rename to modular_nova/modules/customization/modules/surgery/organs/fluff.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/frills.dm b/modular_nova/modules/customization/modules/surgery/organs/frills.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/frills.dm
rename to modular_nova/modules/customization/modules/surgery/organs/frills.dm
diff --git a/modular_nova/modules/customization/modules/surgery/organs/genitals.dm b/modular_nova/modules/customization/modules/surgery/organs/genitals.dm
new file mode 100644
index 00000000000..4abce60d6e3
--- /dev/null
+++ b/modular_nova/modules/customization/modules/surgery/organs/genitals.dm
@@ -0,0 +1,569 @@
+/obj/item/organ/external/genital
+ color = "#fcccb3"
+ organ_flags = ORGAN_ORGANIC | ORGAN_UNREMOVABLE
+ ///Size value of the genital, needs to be translated to proper lengths/diameters/cups
+ var/genital_size = 1
+ ///Sprite name of the genital, it's what shows up on character creation
+ var/genital_name = "Human"
+ ///Type of the genital. For penises tapered/horse/human etc. for breasts quadruple/sixtuple etc...
+ var/genital_type = SPECIES_HUMAN
+ ///Used for determining what sprite is being used, derrives from size and type
+ var/sprite_suffix
+ ///Used for input from the user whether to show a genital through clothing or not, always or never etc.
+ var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES
+ ///Whether the organ is aroused, matters for sprites, use AROUSAL_CANT, AROUSAL_NONE, AROUSAL_PARTIAL or AROUSAL_FULL
+ var/aroused = AROUSAL_NONE
+ ///Whether the organ is supposed to use a skintoned variant of the sprite
+ var/uses_skintones = FALSE
+ ///Whether the organ is supposed to use the color of the holder's skin tone.
+ var/uses_skin_color = FALSE
+ /// Where the genital is actually located, for clothing checks.
+ var/genital_location = GROIN
+
+//This translates the float size into a sprite string
+/obj/item/organ/external/genital/proc/get_sprite_size_string()
+ return 0
+
+//This translates the float size into a sprite string
+/obj/item/organ/external/genital/proc/update_sprite_suffix()
+ sprite_suffix = "[get_sprite_size_string()]"
+
+ var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay
+
+ our_overlay.sprite_suffix = sprite_suffix
+
+
+/obj/item/organ/external/genital/proc/get_description_string(datum/sprite_accessory/genital/gas)
+ return "You see genitals"
+
+/obj/item/organ/external/genital/proc/update_genital_icon_state()
+ return
+
+/obj/item/organ/external/genital/proc/set_size(size)
+ genital_size = size
+ update_sprite_suffix()
+
+/obj/item/organ/external/genital/Initialize(mapload)
+ . = ..()
+ update_sprite_suffix()
+ if(CONFIG_GET(flag/disable_lewd_items))
+ return INITIALIZE_HINT_QDEL
+
+//Removes ERP organs depending on config
+/obj/item/organ/external/genital/Insert(mob/living/carbon/M, special, drop_if_replaced)
+ if(CONFIG_GET(flag/disable_erp_preferences))
+ return
+ . = ..()
+
+/obj/item/organ/external/genital/Remove(mob/living/carbon/M, special = FALSE, moving)
+ . = ..()
+ update_genital_icon_state()
+
+/obj/item/organ/external/genital/build_from_dna(datum/dna/DNA, associated_key)
+ . = ..()
+ var/datum/sprite_accessory/genital/accessory = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]]
+ genital_name = accessory.name
+ genital_type = accessory.icon_state
+ build_from_accessory(accessory, DNA)
+ update_sprite_suffix()
+
+ var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay
+
+ our_overlay.color_source = uses_skin_color ? ORGAN_COLOR_INHERIT : ORGAN_COLOR_OVERRIDE
+
+/// for specific build_from_dna behavior that also checks the genital accessory.
+/obj/item/organ/external/genital/proc/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
+ return
+
+/obj/item/organ/external/genital/proc/is_exposed()
+ if(!owner)
+ return TRUE
+
+ if(!ishuman(owner))
+ return TRUE
+
+ var/mob/living/carbon/human/human = owner
+
+ switch(visibility_preference)
+ if(GENITAL_ALWAYS_SHOW)
+ return TRUE
+ if(GENITAL_HIDDEN_BY_CLOTHES)
+ if((human.w_uniform && human.w_uniform.body_parts_covered & genital_location) || (human.wear_suit && human.wear_suit.body_parts_covered & genital_location))
+ return FALSE
+ else
+ return TRUE
+ else
+ return FALSE
+
+
+/datum/bodypart_overlay/mutant/genital
+ layers = EXTERNAL_FRONT
+ color_source = ORGAN_COLOR_OVERRIDE
+ /// The suffix appended to the feature_key for the overlays.
+ var/sprite_suffix
+
+/datum/bodypart_overlay/mutant/genital/override_color(rgb_value)
+ return draw_color
+
+/datum/bodypart_overlay/mutant/genital/get_base_icon_state()
+ return sprite_suffix
+
+
+/datum/bodypart_overlay/mutant/genital/get_color_layer_names(icon_state_to_lookup)
+ if(length(sprite_datum.color_layer_names))
+ return sprite_datum.color_layer_names
+
+ sprite_datum.color_layer_names = list()
+ if (!GLOB.cached_mutant_icon_files[sprite_datum.icon])
+ GLOB.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon))
+
+ var/list/cached_mutant_icon_states = GLOB.cached_mutant_icon_files[sprite_datum.icon]
+
+ for (var/layer in all_layers)
+ if(!(layer & layers))
+ continue
+
+ var/layertext = mutant_bodyparts_layertext(bitflag_to_layer(layer))
+ if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_primary" in cached_mutant_icon_states)
+ sprite_datum.color_layer_names["1"] = "primary"
+ if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_secondary" in cached_mutant_icon_states)
+ sprite_datum.color_layer_names["2"] = "secondary"
+ if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_tertiary" in cached_mutant_icon_states)
+ sprite_datum.color_layer_names["3"] = "tertiary"
+
+ return sprite_datum.color_layer_names
+
+
+/obj/item/organ/external/genital/penis
+ name = "penis"
+ desc = "A male reproductive organ."
+ icon_state = "penis"
+ icon = 'modular_nova/master_files/icons/obj/genitals/penis.dmi'
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_PENIS
+ mutantpart_key = ORGAN_SLOT_PENIS
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
+ drop_when_organ_spilling = FALSE
+ var/girth = 9
+ var/sheath = SHEATH_NONE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/penis
+
+/datum/bodypart_overlay/mutant/genital/penis
+ feature_key = ORGAN_SLOT_PENIS
+ layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
+
+
+/obj/item/organ/external/genital/penis/get_description_string(datum/sprite_accessory/genital/gas)
+ var/returned_string = ""
+ var/pname = lowertext(genital_name) == "nondescript" ? "" : lowertext(genital_name) + " "
+ if(sheath != SHEATH_NONE && aroused != AROUSAL_FULL) //Hidden in sheath
+ switch(sheath)
+ if(SHEATH_NORMAL)
+ returned_string = "You see a sheath."
+ if(SHEATH_SLIT)
+ returned_string = "You see a slit." ///Typo fix.
+ if(aroused == AROUSAL_PARTIAL)
+ returned_string += " There's a [pname]penis poking out of it."
+ else
+ returned_string = "You see a [pname]penis. You estimate it's [genital_size] inches long, and [girth] inches in circumference."
+ switch(aroused)
+ if(AROUSAL_NONE)
+ returned_string += " It seems flaccid."
+ if(AROUSAL_PARTIAL)
+ returned_string += " It's partically erect."
+ if(AROUSAL_FULL)
+ returned_string += " It's fully erect."
+ return returned_string
+
+/obj/item/organ/external/genital/penis/update_genital_icon_state()
+ var/size_affix
+ var/measured_size = FLOOR(genital_size,1)
+ if(measured_size < 1)
+ measured_size = 1
+ switch(measured_size)
+ if(1 to 8)
+ size_affix = "1"
+ if(9 to 15)
+ size_affix = "2"
+ if(16 to 24)
+ size_affix = "3"
+ else
+ size_affix = "4"
+ var/passed_string = "penis_[genital_type]_[size_affix]"
+ if(uses_skintones)
+ passed_string += "_s"
+ icon_state = passed_string
+
+/obj/item/organ/external/genital/penis/get_sprite_size_string()
+ if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time!
+ var/poking_out = 0
+ if(aroused == AROUSAL_PARTIAL)
+ poking_out = 1
+ return "[lowertext(sheath)]_[poking_out]"
+
+ var/size_affix
+ var/measured_size = FLOOR(genital_size,1)
+ var/is_erect = 0
+ if(aroused == AROUSAL_FULL)
+ is_erect = 1
+ if(measured_size < 1)
+ measured_size = 1
+ switch(measured_size)
+ if(1 to 8)
+ size_affix = "1"
+ if(9 to 15)
+ size_affix = "2"
+ if(16 to 24)
+ size_affix = "3"
+ else
+ size_affix = "4"
+ var/passed_string = "[genital_type]_[size_affix]_[is_erect]"
+ if(uses_skintones)
+ passed_string += "_s"
+ return passed_string
+
+/obj/item/organ/external/genital/penis/build_from_dna(datum/dna/DNA, associated_key)
+ girth = DNA.features["penis_girth"]
+ uses_skin_color = DNA.features["penis_uses_skincolor"]
+ set_size(DNA.features["penis_size"])
+
+ return ..()
+
+/obj/item/organ/external/genital/penis/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
+ var/datum/sprite_accessory/genital/penis/snake = accessory
+ if(snake.can_have_sheath)
+ sheath = DNA.features["penis_sheath"]
+ if(DNA.features["penis_uses_skintones"])
+ uses_skintones = accessory.has_skintone_shading
+
+/datum/bodypart_overlay/mutant/genital/penis/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_PENIS]
+
+
+/obj/item/organ/external/genital/testicles
+ name = "testicles"
+ desc = "A male reproductive organ."
+ icon_state = "testicles"
+ icon = 'modular_nova/master_files/icons/obj/genitals/testicles.dmi'
+ mutantpart_key = ORGAN_SLOT_TESTICLES
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_TESTICLES
+ aroused = AROUSAL_CANT
+ genital_location = GROIN
+ drop_when_organ_spilling = FALSE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/testicles
+
+/datum/bodypart_overlay/mutant/genital/testicles
+ feature_key = ORGAN_SLOT_TESTICLES
+ layers = EXTERNAL_ADJACENT | EXTERNAL_BEHIND
+
+/obj/item/organ/external/genital/testicles/update_genital_icon_state()
+ var/measured_size = clamp(genital_size, 1, 3)
+ var/passed_string = "testicles_[genital_type]_[measured_size]"
+ if(uses_skintones)
+ passed_string += "_s"
+ icon_state = passed_string
+
+/obj/item/organ/external/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas)
+ if(genital_name == "Internal") //Checks if Testicles are of Internal Variety
+ visibility_preference = GENITAL_SKIP_VISIBILITY //Removes visibility if yes.
+ else
+ return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]."
+
+/obj/item/organ/external/genital/testicles/build_from_dna(datum/dna/DNA, associated_key)
+ uses_skin_color = DNA.features["testicles_uses_skincolor"]
+ set_size(DNA.features["balls_size"])
+
+ return ..()
+
+/obj/item/organ/external/genital/testicles/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
+ if(DNA.features["testicles_uses_skintones"])
+ uses_skintones = accessory.has_skintone_shading
+
+/obj/item/organ/external/genital/testicles/get_sprite_size_string()
+ var/measured_size = FLOOR(genital_size,1)
+ measured_size = clamp(measured_size, 0, 3)
+ var/passed_string = "[genital_type]_[measured_size]"
+ if(uses_skintones)
+ passed_string += "_s"
+ return passed_string
+
+/datum/bodypart_overlay/mutant/genital/testicles/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_TESTICLES]
+
+
+/obj/item/organ/external/genital/testicles/proc/balls_size_to_description(number)
+ if(number < 0)
+ number = 0
+ var/returned = GLOB.balls_size_translation["[number]"]
+ if(!returned)
+ returned = BREAST_SIZE_BEYOND_MEASUREMENT
+ return returned
+
+/obj/item/organ/external/genital/testicles/proc/balls_description_to_size(cup)
+ for(var/key in GLOB.balls_size_translation)
+ if(GLOB.balls_size_translation[key] == cup)
+ return text2num(key)
+ return 0
+
+
+/obj/item/organ/external/genital/vagina
+ name = "vagina"
+ icon = 'modular_nova/master_files/icons/obj/genitals/vagina.dmi'
+ icon_state = "vagina"
+ mutantpart_key = ORGAN_SLOT_VAGINA
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_VAGINA
+ genital_location = GROIN
+ drop_when_organ_spilling = FALSE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/vagina
+
+/datum/bodypart_overlay/mutant/genital/vagina
+ feature_key = ORGAN_SLOT_VAGINA
+ layers = EXTERNAL_FRONT
+
+/obj/item/organ/external/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas)
+ var/returned_string = "You see a [lowertext(genital_name)] vagina."
+ if(lowertext(genital_name) == "cloaca")
+ returned_string = "You see a cloaca." //i deserve a pipebomb for this
+ switch(aroused)
+ if(AROUSAL_NONE)
+ returned_string += " It seems dry."
+ if(AROUSAL_PARTIAL)
+ returned_string += " It's glistening with arousal."
+ if(AROUSAL_FULL)
+ returned_string += " It's bright and dripping with arousal."
+ return returned_string
+
+/obj/item/organ/external/genital/vagina/get_sprite_size_string()
+ var/is_dripping = 0
+ if(aroused == AROUSAL_FULL)
+ is_dripping = 1
+ return "[genital_type]_[is_dripping]"
+
+/obj/item/organ/external/genital/vagina/build_from_dna(datum/dna/DNA, associated_key)
+ uses_skin_color = DNA.features["vagina_uses_skincolor"]
+
+ return ..() // will update the sprite suffix
+
+/obj/item/organ/external/genital/vagina/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
+ if(DNA.features["vagina_uses_skintones"])
+ uses_skintones = accessory.has_skintone_shading
+
+/datum/bodypart_overlay/mutant/genital/vagina/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_VAGINA]
+
+
+/obj/item/organ/external/genital/womb
+ name = "womb"
+ desc = "A female reproductive organ."
+ icon = 'modular_nova/master_files/icons/obj/genitals/vagina.dmi'
+ icon_state = "womb"
+ mutantpart_key = ORGAN_SLOT_WOMB
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FFEEBB"))
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_WOMB
+ visibility_preference = GENITAL_SKIP_VISIBILITY
+ aroused = AROUSAL_CANT
+ genital_location = GROIN
+ drop_when_organ_spilling = FALSE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/womb
+
+/datum/bodypart_overlay/mutant/genital/womb
+ feature_key = ORGAN_SLOT_WOMB
+ layers = NONE
+
+/datum/bodypart_overlay/mutant/genital/womb/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_WOMB]
+
+
+/obj/item/organ/external/genital/anus
+ name = "anus"
+ desc = "What do you want me to tell you?"
+ icon = 'modular_nova/master_files/icons/obj/genitals/anus.dmi'
+ icon_state = "anus"
+ mutantpart_key = ORGAN_SLOT_ANUS
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB"))
+ zone = BODY_ZONE_PRECISE_GROIN
+ slot = ORGAN_SLOT_ANUS
+ genital_location = GROIN
+ drop_when_organ_spilling = FALSE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/anus
+
+/datum/bodypart_overlay/mutant/genital/anus
+ feature_key = ORGAN_SLOT_ANUS
+ layers = NONE
+
+/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas)
+ var/returned_string = "You see an [lowertext(genital_name)]."
+ if(aroused == AROUSAL_PARTIAL)
+ returned_string += " It looks tight."
+ if(aroused == AROUSAL_FULL)
+ returned_string += " It looks very tight."
+ return returned_string
+
+/datum/bodypart_overlay/mutant/genital/anus/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_ANUS]
+
+
+/obj/item/organ/external/genital/breasts
+ name = "breasts"
+ desc = "Female milk producing organs."
+ icon_state = "breasts"
+ icon = 'modular_nova/master_files/icons/obj/genitals/breasts.dmi'
+ genital_type = "pair"
+ mutantpart_key = ORGAN_SLOT_BREASTS
+ mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
+ zone = BODY_ZONE_CHEST
+ slot = ORGAN_SLOT_BREASTS
+ genital_location = CHEST
+ drop_when_organ_spilling = FALSE
+ var/lactates = FALSE
+ bodypart_overlay = /datum/bodypart_overlay/mutant/genital/breasts
+
+/datum/bodypart_overlay/mutant/genital/breasts
+ feature_key = ORGAN_SLOT_BREASTS
+ layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
+
+/obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas)
+ var/returned_string = "You see a [lowertext(genital_name)] of breasts."
+ var/size_description
+ var/translation = breasts_size_to_cup(genital_size)
+ switch(translation)
+ if(BREAST_SIZE_FLATCHESTED)
+ size_description = " They are small and flat, however."
+ if(BREAST_SIZE_BEYOND_MEASUREMENT)
+ size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter."
+ else
+ size_description = " You estimate they are [translation]-cups."
+ returned_string += size_description
+ if(aroused == AROUSAL_FULL)
+ if(lactates)
+ returned_string += " The nipples seem hard, perky and are leaking milk."
+ else
+ returned_string += " Their nipples look hard and perky."
+ return returned_string
+
+/obj/item/organ/external/genital/breasts/update_genital_icon_state()
+ var/max_size = 5
+ var/current_size = FLOOR(genital_size, 1)
+ if(current_size < 0)
+ current_size = 0
+ else if (current_size > max_size)
+ current_size = max_size
+ var/passed_string = "breasts_pair_[current_size]"
+ if(uses_skintones)
+ passed_string += "_s"
+ icon_state = passed_string
+
+/obj/item/organ/external/genital/breasts/get_sprite_size_string()
+ var/max_size = 5
+ if(genital_type == "pair")
+ max_size = 16
+ var/current_size = FLOOR(genital_size, 1)
+ if(current_size < 0)
+ current_size = 0
+ else if (current_size > max_size)
+ current_size = max_size
+ var/passed_string = "[genital_type]_[current_size]"
+ if(uses_skintones)
+ passed_string += "_s"
+ return passed_string
+
+/obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key)
+ lactates = DNA.features["breasts_lactation"]
+ uses_skin_color = DNA.features["breasts_uses_skincolor"]
+ set_size(DNA.features["breasts_size"])
+
+ return ..()
+
+/obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
+ if(DNA.features["breasts_uses_skintones"])
+ uses_skintones = accessory.has_skintone_shading
+
+/datum/bodypart_overlay/mutant/genital/breasts/get_global_feature_list()
+ return GLOB.sprite_accessories[ORGAN_SLOT_BREASTS]
+
+/obj/item/organ/external/genital/breasts/proc/breasts_size_to_cup(number)
+ if(number < 0)
+ number = 0
+ var/returned = GLOB.breast_size_translation["[number]"]
+ if(!returned)
+ returned = BREAST_SIZE_BEYOND_MEASUREMENT
+ return returned
+
+/obj/item/organ/external/genital/breasts/proc/breasts_cup_to_size(cup)
+ for(var/key in GLOB.breast_size_translation)
+ if(GLOB.breast_size_translation[key] == cup)
+ return text2num(key)
+ return 0
+
+
+/mob/living/carbon/human/verb/toggle_genitals()
+ set category = "IC"
+ set name = "Expose/Hide genitals"
+ set desc = "Allows you to toggle which genitals should show through clothes or not."
+
+ if(stat != CONSCIOUS)
+ to_chat(usr, span_warning("You can't toggle genitals visibility right now..."))
+ return
+
+ var/list/genital_list = list()
+ for(var/obj/item/organ/external/genital/genital in organs)
+ if(!genital.visibility_preference == GENITAL_SKIP_VISIBILITY)
+ genital_list += genital
+ if(!genital_list.len) //There is nothing to expose
+ return
+ //Full list of exposable genitals created
+ var/obj/item/organ/external/genital/picked_organ
+ picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list
+ if(picked_organ && (picked_organ in organs))
+ var/list/gen_vis_trans = list("Never show" = GENITAL_NEVER_SHOW,
+ "Hidden by clothes" = GENITAL_HIDDEN_BY_CLOTHES,
+ "Always show" = GENITAL_ALWAYS_SHOW
+ )
+ var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans
+ if(picked_visibility && picked_organ && (picked_organ in organs))
+ picked_organ.visibility_preference = gen_vis_trans[picked_visibility]
+ update_body()
+ return
+
+//Removing ERP IC verb depending on config
+/mob/living/carbon/human/Initialize(mapload)
+ . = ..()
+ if(CONFIG_GET(flag/disable_erp_preferences))
+ verbs -= /mob/living/carbon/human/verb/toggle_genitals
+ verbs -= /mob/living/carbon/human/verb/toggle_arousal
+
+/mob/living/carbon/human/verb/toggle_arousal()
+ set category = "IC"
+ set name = "Toggle Arousal"
+ set desc = "Allows you to toggle how aroused your private parts are."
+
+ if(stat != CONSCIOUS)
+ to_chat(usr, span_warning("You can't toggle arousal right now..."))
+ return
+
+ var/list/genital_list = list()
+ for(var/obj/item/organ/external/genital/genital in organs)
+ if(!genital.aroused == AROUSAL_CANT)
+ genital_list += genital
+ if(!genital_list.len) //There is nothing to expose
+ return
+ //Full list of exposable genitals created
+ var/obj/item/organ/external/genital/picked_organ
+ picked_organ = input(src, "Choose which genitalia to change arousal", "Expose/Hide genitals") as null|anything in genital_list
+ if(picked_organ && (picked_organ in organs))
+ var/list/gen_arous_trans = list(
+ "Not aroused" = AROUSAL_NONE,
+ "Partly aroused" = AROUSAL_PARTIAL,
+ "Very aroused" = AROUSAL_FULL,
+ )
+ var/picked_arousal = input(src, "Choose arousal", "Toggle Arousal") as null|anything in gen_arous_trans
+ if(picked_arousal && picked_organ && (picked_organ in organs))
+ picked_organ.aroused = gen_arous_trans[picked_arousal]
+ picked_organ.update_sprite_suffix()
+ update_body()
+ return
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/head_accessory.dm b/modular_nova/modules/customization/modules/surgery/organs/head_accessory.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/head_accessory.dm
rename to modular_nova/modules/customization/modules/surgery/organs/head_accessory.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/horns.dm b/modular_nova/modules/customization/modules/surgery/organs/horns.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/horns.dm
rename to modular_nova/modules/customization/modules/surgery/organs/horns.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/moth_antennae.dm b/modular_nova/modules/customization/modules/surgery/organs/moth_antennae.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/moth_antennae.dm
rename to modular_nova/modules/customization/modules/surgery/organs/moth_antennae.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/moth_markings.dm b/modular_nova/modules/customization/modules/surgery/organs/moth_markings.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/moth_markings.dm
rename to modular_nova/modules/customization/modules/surgery/organs/moth_markings.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/neck_accessory.dm b/modular_nova/modules/customization/modules/surgery/organs/neck_accessory.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/neck_accessory.dm
rename to modular_nova/modules/customization/modules/surgery/organs/neck_accessory.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/nif.dm b/modular_nova/modules/customization/modules/surgery/organs/nif.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/nif.dm
rename to modular_nova/modules/customization/modules/surgery/organs/nif.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/organ.dm b/modular_nova/modules/customization/modules/surgery/organs/organ.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/organ.dm
rename to modular_nova/modules/customization/modules/surgery/organs/organ.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/pod.dm b/modular_nova/modules/customization/modules/surgery/organs/pod.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/pod.dm
rename to modular_nova/modules/customization/modules/surgery/organs/pod.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/skrell_hair.dm b/modular_nova/modules/customization/modules/surgery/organs/skrell_hair.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/skrell_hair.dm
rename to modular_nova/modules/customization/modules/surgery/organs/skrell_hair.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/spines.dm b/modular_nova/modules/customization/modules/surgery/organs/spines.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/spines.dm
rename to modular_nova/modules/customization/modules/surgery/organs/spines.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/synth_antenna.dm b/modular_nova/modules/customization/modules/surgery/organs/synth_antenna.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/synth_antenna.dm
rename to modular_nova/modules/customization/modules/surgery/organs/synth_antenna.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/synth_screen.dm b/modular_nova/modules/customization/modules/surgery/organs/synth_screen.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/synth_screen.dm
rename to modular_nova/modules/customization/modules/surgery/organs/synth_screen.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/tails.dm b/modular_nova/modules/customization/modules/surgery/organs/tails.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/tails.dm
rename to modular_nova/modules/customization/modules/surgery/organs/tails.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/taur_body.dm b/modular_nova/modules/customization/modules/surgery/organs/taur_body.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/taur_body.dm
rename to modular_nova/modules/customization/modules/surgery/organs/taur_body.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/vox.dm b/modular_nova/modules/customization/modules/surgery/organs/vox.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/vox.dm
rename to modular_nova/modules/customization/modules/surgery/organs/vox.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/wings.dm b/modular_nova/modules/customization/modules/surgery/organs/wings.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/wings.dm
rename to modular_nova/modules/customization/modules/surgery/organs/wings.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/xenodorsal.dm b/modular_nova/modules/customization/modules/surgery/organs/xenodorsal.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/xenodorsal.dm
rename to modular_nova/modules/customization/modules/surgery/organs/xenodorsal.dm
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/xenohead.dm b/modular_nova/modules/customization/modules/surgery/organs/xenohead.dm
similarity index 100%
rename from modular_skyrat/modules/customization/modules/surgery/organs/xenohead.dm
rename to modular_nova/modules/customization/modules/surgery/organs/xenohead.dm
diff --git a/modular_nova/modules/customization/readme.md b/modular_nova/modules/customization/readme.md
new file mode 100644
index 00000000000..1daaf11067e
--- /dev/null
+++ b/modular_nova/modules/customization/readme.md
@@ -0,0 +1,89 @@
+## Title: Customization
+
+MODULE ID: CUSTOMIZATION
+
+### Description:
+
+IF YOU WANT TO ADD AN EXTRA FEATURE TO SOMEONES DNA LOOK AT "code/__DEFINES/~skyrat_defines/DNA.dm"
+
+Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb body marking system. Adds in loadout, with lots of clothing ported over. Adds in all the missing species. Adds in flavor text and OOC prefs. Adds in special rendering cases for digitigrades, taurs, snouts, voxes etc. Adds in changeable PDA ringtone message.
+
+### TG Proc Changes:
+
+ ./code/__HELPERS/global_lists.dm > /proc/make_datum_references_lists()
+ ./code/__HELPERS/mobs.dm > /proc/random_features()
+ ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/EquipRank()
+ ./code/datums/dna.dm > /datum/dna/proc/initialize_dna() , /mob/living/carbon/set_species()
+ ./code/modules/admin/create_mob.dm > /proc/randomize_human()
+ ./code/modules/client/preferences.dm > ALMOST THE ENTIRETY OF THE FILE
+ ./code/modules/client/preferences_savefile.dm > ONCE AGAIN, THE ENTIRE FILE
+ ./code/modules/mob/dead/new_player/preferences_setup.dm > /datum/preferences/proc/random_character(), /datum/preferences/proc/random_species(), /datum/preferences/proc/update_preview_icon()
+ ./code/modules/mob/living/carbon/carbon_update_icons.dm > /mob/living/carbon/update_inv_wear_mask(), /mob/living/carbon/update_inv_head(), /mob/living/carbon/proc/update_body_parts(), /mob/living/carbon/proc/generate_icon_render_key()
+ ./code/modules/mob/living/carbon/human/emote.dm > /datum/emote/living/carbon/human/wag/run_emote(), /datum/emote/living/carbon/human/wag/can_run_emote()
+ ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine()
+ ./code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_inv_w_uniform(), /mob/living/carbon/human/update_inv_glasses(), /mob/living/carbon/human/update_inv_shoes(), /mob/living/carbon/human/update_inv_wear_suit(), /obj/item/proc/build_worn_icon(), /mob/living/carbon/human/generate_icon_render_key()
+ ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/can_wag_tail(), /datum/species/proc/stop_wagging_tail(), /datum/species/proc/start_wagging_tail(), /datum/species/proc/is_wagging_tail(), /datum/species/proc/handle_hair()
+ ./code/modules/mob/living/carbon/human/species_types/felinid.dm > the 5 procs related to wagging tail
+ ./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm the 5 procs related to wagging tail and - /datum/species/lizard/on_species_gain()
+ ./code/modules/surgery/bodyparts/_bodyparts.dm > /obj/item/bodypart/proc/get_limb_icon()
+ ./code/modules/surgery/organs/ears.dm > /obj/item/organ/internal/ears/cat/Insert(), /obj/item/organ/internal/ears/cat/Remove()
+ ./code/modules/surgery/organs/tails.dm > /obj/item/organ/external/tail/cat/Insert(), /obj/item/organ/external/tail/cat/Remove(), /obj/item/organ/external/tail/lizard/Initialize(mapload), /obj/item/organ/external/tail/lizard/Insert(), /obj/item/organ/external/tail/lizard/Remove()
+ ./code/modules/surgery/bodyparts/dismemberment.dm > /mob/living/carbon/regenerate_limb()
+ ./code/modules/mob/living/carbon/human/status_procs.dm > /mob/living/carbon/human/become_husk() > APPENDED
+ ./code/modules/reagents/chemistry/holder.dm > /datum/reagents/metabolize()
+ ./code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm > /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change()
+ ./code/modules/mob/living/carbon/human/human_defense.dm > /mob/living/carbon/human/emp_act()
+ ./code/modules/mob/living/carbon/human.dm > /mob/living/carbon/human/revive() > APPENDED
+ ./code/modules/reagents/chemistry/reagents/food_reagents.dm > datum/reagent/consumable/on_mob_life()
+ ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb
+ .\code\modules\client.dm > /client/proc/update_special_keybinds()
+ ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb
+
+ ./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED
+
+ ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole()
+ ./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message()
+
+### Defines:
+
+./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages
+./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm > commented out "mutant_organs = list(/obj/item/organ/external/tail/lizard)"
+./code/modules/mob/living/carbon/human/species_types/felinid.dm > commented out "mutantears = /obj/item/organ/internal/ears/cat" and "mutant_organs = list(/obj/item/organ/external/tail/cat)"
+./code/modules/mob/living/carbon/human/species.dm > var/list/list/mutant_bodyparts (added typed list type)
+./code/_globalvars/lists/flavor_misc.dm > Removed accessory list defines
+.\code\datums\keybindings\living.dm > /datum/keybinding/living/look_up > from L to P
+
+./code/__DEFINES/~skyrat_defines/DNA.dm > A TON of defines
+./code/__DEFINES/~skyrat_defines/obj_flags.dm > Organ flags
+./code/__DEFINES/~skyrat_defines/say.dm > MAX_FLAVOR_LEN
+./code/__DEFINES/~skyrat_defines/traits.dm > TRAIT_NO_HUSK
+
+.\modular_nova\modules\customization\modules\reagents\chemistry\reagents.dm > var/process_flags
+
+### Master file additions
+
+.\modular_nova\master_files\icons\mob\clothing\eyes_vox.dmi
+.\modular_nova\master_files\icons\mob\clothing\feet_digi.dmi
+.\modular_nova\master_files\icons\mob\clothing\head_muzzled.dmi
+.\modular_nova\master_files\icons\mob\clothing\head_vox.dmi
+.\modular_nova\master_files\icons\mob\clothing\mask_muzzled.dmi
+.\modular_nova\master_files\icons\mob\clothing\mask_vox.dmi
+.\modular_nova\master_files\icons\mob\clothing\suit_digi.dmi
+.\modular_nova\master_files\icons\mob\clothing\suit_taur_hoof.dmi
+.\modular_nova\master_files\icons\mob\clothing\suit_taur_paw.dmi
+.\modular_nova\master_files\icons\mob\clothing\suit_taur_snake.dmi
+.\modular_nova\master_files\icons\mob\clothing\uniform_digi.dmi
+.\modular_nova\master_files\icons\mob\clothing\under\uniform_digi.dmi
+.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_hoof.dmi
+.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_paw.dmi
+.\modular_nova\master_files\icons\mob\clothing\under\uniform_taur_snake.dmi
+
+./modular_nova/master_files/icons/obj/drinks.dmi
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Azarak
diff --git a/modular_skyrat/modules/customization/strings/names/callsigns_nri.txt b/modular_nova/modules/customization/strings/names/callsigns_nri.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/callsigns_nri.txt
rename to modular_nova/modules/customization/strings/names/callsigns_nri.txt
diff --git a/modular_skyrat/modules/customization/strings/names/first_female_taj.txt b/modular_nova/modules/customization/strings/names/first_female_taj.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/first_female_taj.txt
rename to modular_nova/modules/customization/strings/names/first_female_taj.txt
diff --git a/modular_skyrat/modules/customization/strings/names/first_female_vulp.txt b/modular_nova/modules/customization/strings/names/first_female_vulp.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/first_female_vulp.txt
rename to modular_nova/modules/customization/strings/names/first_female_vulp.txt
diff --git a/modular_skyrat/modules/customization/strings/names/first_male_taj.txt b/modular_nova/modules/customization/strings/names/first_male_taj.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/first_male_taj.txt
rename to modular_nova/modules/customization/strings/names/first_male_taj.txt
diff --git a/modular_skyrat/modules/customization/strings/names/first_male_vulp.txt b/modular_nova/modules/customization/strings/names/first_male_vulp.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/first_male_vulp.txt
rename to modular_nova/modules/customization/strings/names/first_male_vulp.txt
diff --git a/modular_skyrat/modules/customization/strings/names/last_taj.txt b/modular_nova/modules/customization/strings/names/last_taj.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/last_taj.txt
rename to modular_nova/modules/customization/strings/names/last_taj.txt
diff --git a/modular_skyrat/modules/customization/strings/names/last_vulp.txt b/modular_nova/modules/customization/strings/names/last_vulp.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/last_vulp.txt
rename to modular_nova/modules/customization/strings/names/last_vulp.txt
diff --git a/modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt b/modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt
similarity index 100%
rename from modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt
rename to modular_nova/modules/customization/strings/names/phonetic_alphabet_numbers.txt
diff --git a/modular_skyrat/modules/death_consequences_perk/death_consequences.dm b/modular_nova/modules/death_consequences_perk/death_consequences.dm
similarity index 100%
rename from modular_skyrat/modules/death_consequences_perk/death_consequences.dm
rename to modular_nova/modules/death_consequences_perk/death_consequences.dm
diff --git a/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm b/modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm
similarity index 99%
rename from modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm
rename to modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm
index a1b7380d418..9397aa281d1 100644
--- a/modular_skyrat/modules/death_consequences_perk/death_consequences_trauma.dm
+++ b/modular_nova/modules/death_consequences_perk/death_consequences_trauma.dm
@@ -321,6 +321,8 @@
/// Ensures our victim's stamina is at or above the minimum stamina they're supposed to have.
/datum/brain_trauma/severe/death_consequences/proc/damage_stamina(seconds_per_tick)
+ if (!stamina_damage_max_degradation)
+ return
if (victim_properly_resting())
return
diff --git a/modular_nova/modules/death_consequences_perk/readme.md b/modular_nova/modules/death_consequences_perk/readme.md
new file mode 100644
index 00000000000..931ac7030a5
--- /dev/null
+++ b/modular_nova/modules/death_consequences_perk/readme.md
@@ -0,0 +1,48 @@
+
+
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733
+
+## Skyrat Medical Update
+
+Module ID: death_consequences
+
+### Description:
+
+A highly customizable quirk designed to make you fear death, and introduce a more fair mortality the DNR quirk is unable to.
+
+
+
+### TG Proc/File Changes:
+
+- healthscanner.dm: /proc/healthscan(), added text for the quirk
+- species_features.tsx: Necessary for the preference UI
+
+
+### Modular Overrides:
+
+- N/A
+
+
+### Defines:
+
+- ~skyrat_defines/quirks.dm: A lot of prefixed defines
+
+
+### Included files that are not contained in this module:
+
+- modular_nova\master_files\code\modules\client\preferences\quirks\death_consequences.dm
+
+
+
+### Credits:
+
+Niko - Original author
+
+
diff --git a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm b/modular_nova/modules/decay_subsystem/code/decaySS.dm
similarity index 95%
rename from modular_skyrat/modules/decay_subsystem/code/decaySS.dm
rename to modular_nova/modules/decay_subsystem/code/decaySS.dm
index 247979ca255..c3b59c479c0 100644
--- a/modular_skyrat/modules/decay_subsystem/code/decaySS.dm
+++ b/modular_nova/modules/decay_subsystem/code/decaySS.dm
@@ -4,8 +4,6 @@ These procs are incredibly expensive and should only really be run once. That's
*/
-#define WALL_RUST_PERCENT_CHANCE 15
-
#define FLOOR_DIRT_PERCENT_CHANCE 15
#define FLOOR_BLOOD_PERCENT_CHANCE 1
#define FLOOR_VOMIT_PERCENT_CHANCE 1
@@ -93,12 +91,6 @@ SUBSYSTEM_DEF(decay)
if(prob(FLOOR_DIRT_PERCENT_CHANCE * severity_modifier))
new /obj/effect/decal/cleanable/dirt(iterating_floor)
- for(var/turf/closed/iterating_wall in possible_turfs)
- if(HAS_TRAIT(iterating_wall, TRAIT_RUSTY))
- continue
- if(prob(WALL_RUST_PERCENT_CHANCE * severity_modifier))
- iterating_wall.AddElement(/datum/element/rust)
-
/datum/controller/subsystem/decay/proc/do_maintenance()
for(var/area/station/maintenance/iterating_maintenance in possible_areas)
for(var/turf/open/iterating_floor in iterating_maintenance)
diff --git a/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm b/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm
new file mode 100644
index 00000000000..35d9457cc5b
--- /dev/null
+++ b/modular_nova/modules/decay_subsystem/code/decay_turf_handling.dm
@@ -0,0 +1,15 @@
+/turf/closed/wall
+ flags_1 = CAN_BE_DIRTY_1 // Allow walls to be dirty at round start
+
+/turf/open/floor
+ // Add CAN_DECAY_BREAK_1 flag to all floors by default - below we individually remove it from tiles that shouldn't break
+ turf_flags = IS_SOLID | CAN_DECAY_BREAK_1
+
+/turf/open/floor/plating
+ turf_flags = IS_SOLID // No breaking plating (Duh)
+
+/turf/open/floor/glass
+ turf_flags = IS_SOLID // No breaking glass (doesn't leave plating behind)
+
+/turf/open/floor/tram
+ turf_flags = IS_SOLID // No breaking the irreplacable Tram Line
diff --git a/modular_skyrat/modules/decay_subsystem/code/nests.dm b/modular_nova/modules/decay_subsystem/code/nests.dm
similarity index 96%
rename from modular_skyrat/modules/decay_subsystem/code/nests.dm
rename to modular_nova/modules/decay_subsystem/code/nests.dm
index dc883affe2a..24d9ca82f57 100644
--- a/modular_skyrat/modules/decay_subsystem/code/nests.dm
+++ b/modular_nova/modules/decay_subsystem/code/nests.dm
@@ -3,7 +3,7 @@
/obj/structure/mob_spawner
name = "nest"
desc = "A nasty looking pile of sticks and debris."
- icon = 'modular_skyrat/modules/decay_subsystem/icons/nests.dmi'
+ icon = 'modular_nova/modules/decay_subsystem/icons/nests.dmi'
icon_state = "nest"
density = FALSE
anchored = TRUE
@@ -94,7 +94,7 @@
spawn_mob()
/obj/structure/mob_spawner/proc/spawn_mob()
- var/sound/sound_to_play = pick('modular_skyrat/master_files/sound/effects/rustle1.ogg', 'modular_skyrat/master_files/sound/effects/rustle2.ogg')
+ var/sound/sound_to_play = pick('modular_nova/master_files/sound/effects/rustle1.ogg', 'modular_nova/master_files/sound/effects/rustle2.ogg')
playsound(src, sound_to_play, 100)
do_squish(0.8, 1.2)
@@ -146,7 +146,7 @@
/obj/item/spider_egg
name = "spider egg"
desc = "A white egg with something crawling around inside. Looks... fragile."
- icon = 'modular_skyrat/modules/decay_subsystem/icons/loot.dmi'
+ icon = 'modular_nova/modules/decay_subsystem/icons/loot.dmi'
icon_state = "spider_egg"
/obj/item/spider_egg/attack_self(mob/user, modifiers)
diff --git a/modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm b/modular_nova/modules/decay_subsystem/code/spawn_nest.dm
similarity index 100%
rename from modular_skyrat/modules/decay_subsystem/code/spawn_nest.dm
rename to modular_nova/modules/decay_subsystem/code/spawn_nest.dm
diff --git a/modular_skyrat/modules/decay_subsystem/icons/loot.dmi b/modular_nova/modules/decay_subsystem/icons/loot.dmi
similarity index 100%
rename from modular_skyrat/modules/decay_subsystem/icons/loot.dmi
rename to modular_nova/modules/decay_subsystem/icons/loot.dmi
diff --git a/modular_skyrat/modules/decay_subsystem/icons/nests.dmi b/modular_nova/modules/decay_subsystem/icons/nests.dmi
similarity index 100%
rename from modular_skyrat/modules/decay_subsystem/icons/nests.dmi
rename to modular_nova/modules/decay_subsystem/icons/nests.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/code/cargo_packs.dm b/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/code/cargo_packs.dm
rename to modular_nova/modules/deforest_medical_items/code/cargo_packs.dm
diff --git a/modular_skyrat/modules/deforest_medical_items/code/chemicals/demoneye.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/demoneye.dm
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/code/chemicals/demoneye.dm
rename to modular_nova/modules/deforest_medical_items/code/chemicals/demoneye.dm
diff --git a/modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/code/chemicals/twitch.dm
rename to modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm
diff --git a/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm
similarity index 96%
rename from modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm
rename to modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm
index ab65e0689b8..5c1563fd07b 100644
--- a/modular_skyrat/modules/deforest_medical_items/code/healing_stack_items.dm
+++ b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm
@@ -8,7 +8,7 @@
injectors will surround the wound and form a subdermal, self healing splint. While convenient \
for keeping appearances and rapid healing, the nanomachines tend to leave their host particularly \
vulnerable to new damage for several minutes after application."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi'
icon_state = "subsplint"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
@@ -112,7 +112,7 @@
singular_name = "red sun balm"
desc = "A popular brand of ointment for handling anything under the red sun, which tends to be terrible burns. \
Which red sun may this be referencing? Not even the producers of the balm are sure."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi'
icon_state = "balm"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
@@ -141,7 +141,7 @@
desc = "A small roll of elastic material specially treated to be entirely sterile, and sealed in plastic just to be sure. \
These make excellent treatment against burn wounds, but due to their small nature are sub-par for serving as \
bone wound wrapping."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi'
icon_state = "burndaid"
inhand_icon_state = null
novariants = TRUE
@@ -163,7 +163,7 @@
desc = "A small packet of fabricated coagulant for bleeding. Not as effective as some \
other methods of coagulating wounds, but is more effective than plain sutures. \
The downsides? It repairs less of the actual damage that's there."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/stack_items.dmi'
icon_state = "clotter_slow"
inhand_icon_state = null
novariants = TRUE
diff --git a/modular_skyrat/modules/deforest_medical_items/code/illegal_injectors.dm b/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/code/illegal_injectors.dm
rename to modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm
diff --git a/modular_skyrat/modules/deforest_medical_items/code/injectors.dm b/modular_nova/modules/deforest_medical_items/code/injectors.dm
similarity index 99%
rename from modular_skyrat/modules/deforest_medical_items/code/injectors.dm
rename to modular_nova/modules/deforest_medical_items/code/injectors.dm
index 7f24f02350a..1cb8d33af95 100644
--- a/modular_skyrat/modules/deforest_medical_items/code/injectors.dm
+++ b/modular_nova/modules/deforest_medical_items/code/injectors.dm
@@ -2,7 +2,7 @@
/obj/item/reagent_containers/hypospray/medipen/deforest
name = "non-functional Deforest autoinjector"
desc = "A Deforest branded autoinjector, though this one seems to be both empty and non-functional."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/injectors.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/injectors.dmi'
icon_state = "default"
volume = 25
list_reagents = list()
diff --git a/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm b/modular_nova/modules/deforest_medical_items/code/storage_items.dm
similarity index 82%
rename from modular_skyrat/modules/deforest_medical_items/code/storage_items.dm
rename to modular_nova/modules/deforest_medical_items/code/storage_items.dm
index d700f5d68b4..b8452cfe5f2 100644
--- a/modular_skyrat/modules/deforest_medical_items/code/storage_items.dm
+++ b/modular_nova/modules/deforest_medical_items/code/storage_items.dm
@@ -2,7 +2,7 @@
/obj/item/storage/pill_bottle/painkiller
name = "amollin pill bottle"
desc = "It's an airtight container for storing medication. This one is all-white and has labels for containing amollin, a blend of Miner's Salve and Lidocaine."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "painkiller_bottle"
/obj/item/storage/pill_bottle/painkiller/PopulateContents()
@@ -22,10 +22,10 @@
// Pre-packed civil defense medkit, with items to heal low damages inside
/obj/item/storage/medkit/civil_defense
name = "civil defense medical kit"
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "poisoning_kit"
- lefthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
inhand_icon_state = "poisoning_kit"
desc = "A small medical kit that can only fit autoinjectors in it, these typically come with supplies to treat low level harm."
w_class = WEIGHT_CLASS_SMALL
@@ -55,13 +55,13 @@
name = "frontier medical kit"
desc = "A handy roll-top waterproof medkit often seen alongside those on the frontier, where medical support is less than optimal. \
It has a clip for hooking onto your belt, handy!"
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "frontier"
- lefthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
inhand_icon_state = "frontier"
- worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
+ worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi'
+ worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
slot_flags = ITEM_SLOT_BELT
@@ -84,13 +84,13 @@
/obj/item/storage/medkit/combat_surgeon
name = "combat surgeon medical kit"
desc = "A folding kit that is ideally filled with surgical tools and specialized treatment options for many harder-to-treat wounds."
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "surgeon"
- lefthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
inhand_icon_state = "surgeon"
- worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
+ worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi'
+ worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
worn_icon_state = "frontier"
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
@@ -117,13 +117,13 @@
/obj/item/storage/backpack/duffelbag/deforest_medkit
name = "satchel medical kit"
desc = "A large orange satchel able to hold just about any piece of small medical equipment you could think of, you can even wear it on your back or belt!"
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "satchel"
- lefthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
inhand_icon_state = "satchel"
- worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
+ worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi'
+ worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
@@ -173,7 +173,7 @@
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown,
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
/obj/item/flashlight/pen,
@@ -211,13 +211,13 @@
/obj/item/storage/backpack/duffelbag/deforest_surgical
name = "first responder surgical kit"
desc = "A large bag able to hold all the surgical tools and first response healing equipment you can think of, you can even wear it!"
- icon = 'modular_skyrat/modules/deforest_medical_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi'
icon_state = "super_surgery"
- lefthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi'
inhand_icon_state = "super_surgery"
- worn_icon = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
+ worn_icon = 'modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi'
+ worn_icon_teshari = 'modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi'
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
drop_sound = 'sound/items/handling/cloth_drop.ogg'
@@ -265,7 +265,7 @@
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/muzzle,
/obj/item/clothing/mask/surgical,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown,
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown,
/obj/item/construction/plumbing,
/obj/item/dnainjector,
/obj/item/extinguisher/mini,
diff --git a/modular_skyrat/modules/deforest_medical_items/code/vulnerable_status_effect.dm b/modular_nova/modules/deforest_medical_items/code/vulnerable_status_effect.dm
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/code/vulnerable_status_effect.dm
rename to modular_nova/modules/deforest_medical_items/code/vulnerable_status_effect.dm
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi
rename to modular_nova/modules/deforest_medical_items/icons/inhands/cases_lefthand.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi b/modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi
rename to modular_nova/modules/deforest_medical_items/icons/inhands/cases_righthand.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/injectors.dmi b/modular_nova/modules/deforest_medical_items/icons/injectors.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/injectors.dmi
rename to modular_nova/modules/deforest_medical_items/icons/injectors.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi b/modular_nova/modules/deforest_medical_items/icons/stack_items.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/stack_items.dmi
rename to modular_nova/modules/deforest_medical_items/icons/stack_items.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/storage.dmi b/modular_nova/modules/deforest_medical_items/icons/storage.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/storage.dmi
rename to modular_nova/modules/deforest_medical_items/icons/storage.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi b/modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/worn/worn.dmi
rename to modular_nova/modules/deforest_medical_items/icons/worn/worn.dmi
diff --git a/modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi b/modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/deforest_medical_items/icons/worn/worn_teshari.dmi
rename to modular_nova/modules/deforest_medical_items/icons/worn/worn_teshari.dmi
diff --git a/modular_skyrat/modules/delam_emergency_stop/README.md b/modular_nova/modules/delam_emergency_stop/README.md
similarity index 100%
rename from modular_skyrat/modules/delam_emergency_stop/README.md
rename to modular_nova/modules/delam_emergency_stop/README.md
diff --git a/modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm b/modular_nova/modules/delam_emergency_stop/code/admin_scram.dm
similarity index 100%
rename from modular_skyrat/modules/delam_emergency_stop/code/admin_scram.dm
rename to modular_nova/modules/delam_emergency_stop/code/admin_scram.dm
diff --git a/modular_skyrat/modules/delam_emergency_stop/code/delam.dm b/modular_nova/modules/delam_emergency_stop/code/delam.dm
similarity index 100%
rename from modular_skyrat/modules/delam_emergency_stop/code/delam.dm
rename to modular_nova/modules/delam_emergency_stop/code/delam.dm
diff --git a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm b/modular_nova/modules/delam_emergency_stop/code/scram.dm
similarity index 98%
rename from modular_skyrat/modules/delam_emergency_stop/code/scram.dm
rename to modular_nova/modules/delam_emergency_stop/code/scram.dm
index c83856bfb1c..03ff3e00eaa 100644
--- a/modular_skyrat/modules/delam_emergency_stop/code/scram.dm
+++ b/modular_nova/modules/delam_emergency_stop/code/scram.dm
@@ -29,7 +29,7 @@
/// An atmos device that uses freezing cold air to attempt an emergency shutdown of the supermatter engine
/obj/machinery/atmospherics/components/unary/delam_scram
- icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi'
+ icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi'
icon_state = "dispenser-idle"
name = "\improper delamination suppression system"
desc = "The latest model in Nakamura Engineering's line of delamination suppression systems. You don't want to be in the chamber when it's activated! \
@@ -262,7 +262,7 @@
desc = "Your last hope to try and save the crystal during a delamination. \
While it is indeed a big red button, pressing it outside of an emergency \
will probably get the engineering department out for your blood."
- icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi'
+ icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi'
can_alter_skin = FALSE
silicon_access_disabled = TRUE
resistance_flags = FREEZE_PROOF | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -433,7 +433,7 @@
/obj/structure/sign/delam_procedure
name = "Safety Moth - Delamination Emergency Procedure"
desc = "This informational sign uses Safety Moth™ to tell the viewer how to use the emergency stop button if the Supermatter Crystal is delaminating."
- icon = 'modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi'
+ icon = 'modular_nova/modules/delam_emergency_stop/icons/scram.dmi'
icon_state = "moff-poster"
pixel_y = 4
armor_type = /datum/armor/sign_delam
diff --git a/modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi b/modular_nova/modules/delam_emergency_stop/icons/scram.dmi
similarity index 100%
rename from modular_skyrat/modules/delam_emergency_stop/icons/scram.dmi
rename to modular_nova/modules/delam_emergency_stop/icons/scram.dmi
diff --git a/modular_skyrat/modules/departmentization/cargo_technician.dm b/modular_nova/modules/departmentization/cargo_technician.dm
similarity index 100%
rename from modular_skyrat/modules/departmentization/cargo_technician.dm
rename to modular_nova/modules/departmentization/cargo_technician.dm
diff --git a/modular_skyrat/modules/departmentization/clothing_overrides.dm b/modular_nova/modules/departmentization/clothing_overrides.dm
similarity index 100%
rename from modular_skyrat/modules/departmentization/clothing_overrides.dm
rename to modular_nova/modules/departmentization/clothing_overrides.dm
diff --git a/modular_skyrat/modules/departmentization/quartermaster.dm b/modular_nova/modules/departmentization/quartermaster.dm
similarity index 100%
rename from modular_skyrat/modules/departmentization/quartermaster.dm
rename to modular_nova/modules/departmentization/quartermaster.dm
diff --git a/modular_nova/modules/digi_bloodsole/code/_shoes.dm b/modular_nova/modules/digi_bloodsole/code/_shoes.dm
new file mode 100644
index 00000000000..b78d650038a
--- /dev/null
+++ b/modular_nova/modules/digi_bloodsole/code/_shoes.dm
@@ -0,0 +1,17 @@
+/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE,icon_file,mutant_styles=NONE)
+ . = ..()
+ if(isinhands)
+ return
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
+ if(GET_ATOM_BLOOD_DNA(src))
+ if (mutant_styles & CLOTHING_DIGITIGRADE_VARIATION)
+ if(clothing_flags & LARGE_WORN_ICON)
+ . += mutable_appearance('modular_nova/modules/digi_bloodsole/icons/64x64.dmi', "shoeblood_large_digi")
+ else
+ . += mutable_appearance('modular_nova/modules/digi_bloodsole/icons/blood.dmi', "shoeblood_digi")
+ else
+ if(clothing_flags & LARGE_WORN_ICON)
+ . += mutable_appearance('icons/effects/64x64.dmi', "shoeblood_large")
+ else
+ . += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
diff --git a/modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi b/modular_nova/modules/digi_bloodsole/icons/64x64.dmi
similarity index 100%
rename from modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi
rename to modular_nova/modules/digi_bloodsole/icons/64x64.dmi
diff --git a/modular_skyrat/modules/digi_bloodsole/icons/blood.dmi b/modular_nova/modules/digi_bloodsole/icons/blood.dmi
similarity index 100%
rename from modular_skyrat/modules/digi_bloodsole/icons/blood.dmi
rename to modular_nova/modules/digi_bloodsole/icons/blood.dmi
diff --git a/modular_skyrat/modules/digi_bloodsole/readme.md b/modular_nova/modules/digi_bloodsole/readme.md
similarity index 100%
rename from modular_skyrat/modules/digi_bloodsole/readme.md
rename to modular_nova/modules/digi_bloodsole/readme.md
diff --git a/modular_nova/modules/disable_worn_fov/code/worn_items.dm b/modular_nova/modules/disable_worn_fov/code/worn_items.dm
new file mode 100644
index 00000000000..1934c7a4782
--- /dev/null
+++ b/modular_nova/modules/disable_worn_fov/code/worn_items.dm
@@ -0,0 +1,9 @@
+/obj/item/clothing/head/costume/tv_head
+ has_fov = FALSE
+
+/obj/item/clothing/head/bio_hood/Initialize(mapload)
+ . = ..()
+ qdel(GetComponent(/datum/component/clothing_fov_visor))
+
+/obj/item/clothing/mask/gas/
+ has_fov = FALSE
diff --git a/modular_nova/modules/dogfashion/code/head.dm b/modular_nova/modules/dogfashion/code/head.dm
new file mode 100644
index 00000000000..d31fc83594c
--- /dev/null
+++ b/modular_nova/modules/dogfashion/code/head.dm
@@ -0,0 +1,5 @@
+/datum/dog_fashion/head/yankee
+ name = "MC REAL_NAME"
+ desc = "They're a big deal in the dog rapping world, apperently."
+ icon_file = 'modular_nova/master_files/icons/mob/dog/corgi_head.dmi'
+ emote_see = list("mumbles some bars.", "practises their beatboxing.")
diff --git a/modular_skyrat/modules/drone_adjustments/drone.dm b/modular_nova/modules/drone_adjustments/drone.dm
similarity index 100%
rename from modular_skyrat/modules/drone_adjustments/drone.dm
rename to modular_nova/modules/drone_adjustments/drone.dm
diff --git a/modular_skyrat/modules/drone_adjustments/slide_component.dm b/modular_nova/modules/drone_adjustments/slide_component.dm
similarity index 96%
rename from modular_skyrat/modules/drone_adjustments/slide_component.dm
rename to modular_nova/modules/drone_adjustments/slide_component.dm
index 6d0ce3f2a39..7c6c3d08cb0 100644
--- a/modular_skyrat/modules/drone_adjustments/slide_component.dm
+++ b/modular_nova/modules/drone_adjustments/slide_component.dm
@@ -20,7 +20,7 @@
//so that we can know how to do that (sliding under)
RegisterSignal(atom_parent, COMSIG_ATOM_EXAMINE, PROC_REF(ExamineMessage))
-/datum/component/sliding_under/Destroy(force, silent)
+/datum/component/sliding_under/Destroy(force)
UnregisterSignal(atom_parent, list(COMSIG_CLICK_CTRL, COMSIG_ATOM_EXAMINE))
return ..()
diff --git a/modular_skyrat/modules/drones_derelict/code/areas.dm b/modular_nova/modules/drones_derelict/code/areas.dm
similarity index 96%
rename from modular_skyrat/modules/drones_derelict/code/areas.dm
rename to modular_nova/modules/drones_derelict/code/areas.dm
index 81e8e486215..a6efb4d5a24 100644
--- a/modular_skyrat/modules/drones_derelict/code/areas.dm
+++ b/modular_nova/modules/drones_derelict/code/areas.dm
@@ -1,6 +1,6 @@
/area/ruin/space/bb13
name = "\improper Babylon Station 13"
- icon = 'modular_skyrat/modules/drones_derelict/icons/areas.dmi'
+ icon = 'modular_nova/modules/drones_derelict/icons/areas.dmi'
icon_state = "bb13"
/area/ruin/space/bb13/hallway/central
diff --git a/modular_skyrat/modules/drones_derelict/code/space.dm b/modular_nova/modules/drones_derelict/code/space.dm
similarity index 100%
rename from modular_skyrat/modules/drones_derelict/code/space.dm
rename to modular_nova/modules/drones_derelict/code/space.dm
diff --git a/modular_skyrat/modules/drones_derelict/icons/areas.dmi b/modular_nova/modules/drones_derelict/icons/areas.dmi
similarity index 100%
rename from modular_skyrat/modules/drones_derelict/icons/areas.dmi
rename to modular_nova/modules/drones_derelict/icons/areas.dmi
diff --git a/modular_skyrat/modules/electric_welder/code/electric_welder.dm b/modular_nova/modules/electric_welder/code/electric_welder.dm
similarity index 97%
rename from modular_skyrat/modules/electric_welder/code/electric_welder.dm
rename to modular_nova/modules/electric_welder/code/electric_welder.dm
index a3426e2cf78..4765c9ad449 100644
--- a/modular_skyrat/modules/electric_welder/code/electric_welder.dm
+++ b/modular_nova/modules/electric_welder/code/electric_welder.dm
@@ -1,7 +1,7 @@
/obj/item/weldingtool/electric
name = "electrical welding tool"
desc = "An experimental welding tool capable of welding functionality through the use of electricity. The flame seems almost cold."
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
+ icon = 'modular_nova/modules/aesthetics/tools/tools.dmi'
icon_state = "elwelder"
light_power = 1
light_color = LIGHT_COLOR_HALOGEN
diff --git a/modular_nova/modules/electric_welder/readme.md b/modular_nova/modules/electric_welder/readme.md
new file mode 100644
index 00000000000..1f982645232
--- /dev/null
+++ b/modular_nova/modules/electric_welder/readme.md
@@ -0,0 +1,25 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/
+
+## \
+
+Module ID:
+
+### Description:
+
+### TG Proc/File Changes:
+
+- `code/game/objects/items/storage/belt.dm`: `proc/get_types_to_preload`
+
+### Modular Overrides:
+
+- `modular_nova/master_files/code/modules/cargo/exports/tools.dm`: `var/export_types`
+
+### Defines:
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
diff --git a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm b/modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm
similarity index 97%
rename from modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm
rename to modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm
index 7e06d94ed27..9d97a2e7d92 100644
--- a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm
+++ b/modular_nova/modules/emergency_spacesuit/code/emergency_spacesuit.dm
@@ -77,7 +77,7 @@
/obj/item/storage/box/emergency_spacesuit
name = "emergency space suit case"
desc = "A small case containing an emergency space suit and helmet."
- icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi'
+ icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi'
icon_state = "briefcase_suit"
illustration = null
diff --git a/modular_skyrat/modules/emote_panel/code/emote_panel.dm b/modular_nova/modules/emote_panel/code/emote_panel.dm
similarity index 98%
rename from modular_skyrat/modules/emote_panel/code/emote_panel.dm
rename to modular_nova/modules/emote_panel/code/emote_panel.dm
index f06a7ba2df8..e5cb3f44d44 100644
--- a/modular_skyrat/modules/emote_panel/code/emote_panel.dm
+++ b/modular_nova/modules/emote_panel/code/emote_panel.dm
@@ -97,7 +97,7 @@
)
all_emotes += human_emotes
- // modular_skyrat\modules\emotes\code\emote.dm
+ // modular_nova\modules\emotes\code\emote.dm
var/static/list/skyrat_living_emotes = list(
/mob/living/proc/emote_peep,
/mob/living/proc/emote_peep2,
@@ -168,7 +168,7 @@
)
all_emotes += alien_emotes
- // modular_skyrat\modules\emotes\code\synth_emotes.dm
+ // modular_nova\modules\emotes\code\synth_emotes.dm
var/static/list/synth_emotes = list(
/mob/living/proc/emote_dwoop,
/mob/living/proc/emote_yes,
@@ -190,7 +190,7 @@
/datum/species/synthetic
)
- // modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm
+ // modular_nova\modules\emotes\code\additionalemotes\overlay_emote.dm
var/static/list/skyrat_living_emotes_overlay = list(
/mob/living/proc/emote_sweatdrop,
/mob/living/proc/emote_exclaim,
@@ -201,7 +201,7 @@
)
all_emotes += skyrat_living_emotes_overlay
- // modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm
+ // modular_nova\modules\emotes\code\additionalemotes\turf_emote.dm
all_emotes += /mob/living/proc/emote_mark_turf
// Clearing all emotes before applying new ones
@@ -625,7 +625,7 @@
set category = "Emotes"
usr.emote("wing", intentional = TRUE)
-// modular_skyrat\modules\emotes\code\emote.dm
+// modular_nova\modules\emotes\code\emote.dm
/mob/living/proc/emote_peep()
set name = "> Peep"
@@ -910,7 +910,7 @@
set category = "Emotes"
usr.emote("roar", intentional = TRUE)
-//modular_skyrat\modules\emotes\code\synth_emotes.dm
+//modular_nova\modules\emotes\code\synth_emotes.dm
/mob/living/proc/emote_dwoop()
set name = "< Dwoop >"
@@ -982,7 +982,7 @@
set category = "Emotes"
usr.emote("slowclap", intentional = TRUE)
-// modular_skyrat\modules\emotes\code\additionalemotes\overlay_emote.dm
+// modular_nova\modules\emotes\code\additionalemotes\overlay_emote.dm
/mob/living/proc/emote_sweatdrop()
set name = "| Sweatdrop |"
set category = "Emotes+"
@@ -1013,7 +1013,7 @@
set category = "Emotes+"
usr.emote("glasses", intentional = TRUE)
-//modular_skyrat\modules\emotes\code\additionalemotes\turf_emote.dm
+//modular_nova\modules\emotes\code\additionalemotes\turf_emote.dm
/mob/living/proc/emote_mark_turf()
set name = "| Mark Turf |"
set category = "Emotes+"
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm b/modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm
similarity index 83%
rename from modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm
rename to modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm
index e456712124a..e9e8317208e 100644
--- a/modular_skyrat/modules/emotes/code/additionalemotes/overlay_emote.dm
+++ b/modular_nova/modules/emotes/code/additionalemotes/overlay_emote.dm
@@ -1,5 +1,5 @@
/datum/emote
- var/overlay_emote = 'modular_skyrat/master_files/icons/effects/overlay_effects.dmi'
+ var/overlay_emote = 'modular_nova/master_files/icons/effects/overlay_effects.dmi'
/datum/emote/proc/get_toggle(mob/living/user)
if(user.client)
@@ -19,7 +19,7 @@
overlay.pixel_x = 10
overlay.pixel_y = 10
user.flick_overlay_static(overlay, 50)
- playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE)
+ playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg', 25, TRUE)
/datum/emote/living/exclaim
key = "exclaim"
@@ -45,7 +45,7 @@
overlay.pixel_x = 10
overlay.pixel_y = 28
user.flick_overlay_static(overlay, 50)
- playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/question.ogg', 25, TRUE)
+ playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/question.ogg', 25, TRUE)
/datum/emote/living/realize
@@ -61,7 +61,7 @@
else
overlay.pixel_y = 15
user.flick_overlay_static(overlay, 50)
- playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/realize.ogg', 25, TRUE)
+ playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/realize.ogg', 25, TRUE)
/datum/emote/living/annoyed
key = "annoyed"
@@ -74,4 +74,4 @@
overlay.pixel_x = 10
overlay.pixel_y = 10
user.flick_overlay_static(overlay, 50)
- playsound(get_turf(user), 'modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE)
+ playsound(get_turf(user), 'modular_nova/modules/emotes/sound/emotes/annoyed.ogg', 25, TRUE)
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm
similarity index 98%
rename from modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
rename to modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm
index a34e8450843..9b53911b805 100644
--- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
+++ b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm
@@ -81,7 +81,7 @@
for(var/choice in user.allowed_turfs)
var/datum/radial_menu_choice/option = new
- option.image = image(icon = 'modular_skyrat/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice))
+ option.image = image(icon = 'modular_nova/master_files/icons/effects/turf_effects_icons.dmi', icon_state = initial(choice))
display_turf[initial(choice)] = option
diff --git a/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm b/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm
new file mode 100644
index 00000000000..552c4ee037c
--- /dev/null
+++ b/modular_nova/modules/emotes/code/additionalemotes/turf_list.dm
@@ -0,0 +1,197 @@
+#define EXTRA_ABOVE_MOB_LAYER (ABOVE_MOB_LAYER + 0.01)
+
+/obj/structure/mark_turf
+ name = "turf"
+ icon = 'modular_nova/master_files/icons/effects/turf_effects.dmi'
+ desc = "It's turf." //Debug stuff, won't be seen
+ layer = ABOVE_OBJ_LAYER
+ anchored = TRUE
+ density = FALSE
+ max_integrity = 15
+
+/obj/structure/mark_turf/Initialize(mapload, current_turf)
+ . = ..()
+
+ switch(current_turf)
+ if("web")
+ name = "hand-sewn web"
+ desc = "It's a sticky web."
+ icon_state = pick("stickyweb1", "stickyweb2")
+ playsound(get_turf(src), 'modular_nova/master_files/sound/effects/weave.ogg', 25, TRUE)
+
+ if("vines")
+ name = "sprouted vines"
+ desc = "It's an entanglement of vines."
+ icon_state = pick("kudzu1", "kudzu1", "kudzu3")
+ playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE)
+
+
+ if("water")
+ name = "puddle of water"
+ desc = "It's a patch of water."
+ icon_state = "water"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "water_top", EXTRA_ABOVE_MOB_LAYER))
+ flick_overlay_static(image('modular_nova/modules/liquids/icons/obj/effects/splash.dmi', "splash", EXTRA_ABOVE_MOB_LAYER), 20)
+ playsound(get_turf(src), 'modular_nova/master_files/sound/effects/watersplash.ogg', 25, TRUE)
+
+ if("smoke")
+ name = "blazing mist"
+ desc = "It's a storm of smoke."
+ icon_state = "smoke"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "smoke_top", EXTRA_ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE)
+
+ if("xenoresin")
+ name = "resin"
+ desc = "Looks like some kind of thick resin."
+ icon_state = "xenoresin"
+ playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE)
+
+ if("holobed")
+ name = "physical hologram"
+ desc = "It's a hologram of a pet bed."
+ icon_state = "holobed"
+ playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
+
+ if("holoseat")
+ name = "physical hologram"
+ desc = "It's a hologram of a barstool."
+ icon_state = "holoseat"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "holoseat_top", EXTRA_ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
+
+ if("slime")
+ name = "pile of oozing slime"
+ desc = "It's just a bunch of slime."
+ alpha = 155
+ playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE)
+ switch(rand(1,1000))
+ if(-INFINITY to 400)
+ icon_state = "slimeobj1"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", EXTRA_ABOVE_MOB_LAYER))
+ if(400 to 800)
+ icon_state = "slimeobj2"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", EXTRA_ABOVE_MOB_LAYER))
+ if(800 to 980)
+ icon_state = "slimeobj3"
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", EXTRA_ABOVE_MOB_LAYER))
+ if(980 to INFINITY)
+ name = "slime bust" //rare obj/item/statuebust
+ desc = "A priceless slime bust, the kind that belongs in a museum."
+ icon_state = "slimeobj4"
+ AddElement(/datum/element/art, GREAT_ART)
+ else
+ return
+
+ if("dust")
+ name = "cloud of dust"
+ desc = "It's a cloud of glittering dust."
+ icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "dust"
+ pixel_x = -16
+ src.add_overlay(image('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "dust_top", EXTRA_ABOVE_MOB_LAYER))
+ playsound(get_turf(src), 'modular_nova/master_files/sound/effects/wing_flap.ogg', 25, TRUE)
+
+ if("borgmat")
+ name = "soft-foam mat"
+ desc = "It's a rolled out mat, doesn't include wireless charging."
+ icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "borgmat"
+ pixel_x = -16
+ pixel_y = -4
+ playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE)
+
+ //bodyparts
+ if("tails")
+ name = "tail"
+ desc = "It's a fluffy tail."
+ icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "tails"
+ pixel_x = -16 //correcting the offset for 64
+ var/mutable_appearance/overlay = mutable_appearance('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "tails_top", EXTRA_ABOVE_MOB_LAYER, src)
+ overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
+ src.add_overlay(overlay)
+ playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE)
+
+ if("constrict")
+ name = "tail"
+ desc = "It's a scaly tail."
+ icon = 'modular_nova/master_files/icons/effects/turf_effects_64.dmi'
+ icon_state = "naga"
+ pixel_x = -16
+ var/mutable_appearance/overlay = mutable_appearance('modular_nova/master_files/icons/effects/turf_effects_64.dmi', "naga_top", EXTRA_ABOVE_MOB_LAYER, src)
+ overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
+ src.add_overlay(overlay)
+ playsound(get_turf(src), 'modular_nova/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE)
+
+ //prints
+ if("pawprint")
+ name = "pawprint"
+ desc = "It's a pawprint left on the ground."
+ icon_state = pick("pawprint", "pawprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("hoofprint")
+ name = "hoofprint"
+ desc = "It's a hoofprint left on the ground."
+ icon_state = pick("hoofprint", "hoofprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+ if("footprint")
+ name = "footprint"
+ desc = "It's a footprint left on the ground."
+ icon_state = pick("footprint", "footprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("clawprint")
+ name = "clawprint"
+ desc = "It's a clawprint left on the ground."
+ icon_state = pick("clawprint", "clawprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
+ 'sound/effects/footstep/hardbarefoot2.ogg',
+ 'sound/effects/footstep/hardbarefoot3.ogg',
+ 'sound/effects/footstep/hardbarefoot4.ogg',
+ 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
+
+ if("shoeprint")
+ name = "shoeprint"
+ desc = "It's a shoeprint left on the ground."
+ icon_state = pick("shoeprint", "shoeprint1")
+ playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg',
+ 'sound/effects/footstep/floor2.ogg',
+ 'sound/effects/footstep/floor3.ogg',
+ 'sound/effects/footstep/floor4.ogg',
+ 'sound/effects/footstep/floor5.ogg'), 50, TRUE)
+
+ else
+ return
+
+/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf
+ var/list/no_trail = list("tail", "constrict")
+ var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint")
+
+ if(user.owned_turf.name in no_trail)
+ QDEL_NULL(src)
+ if(user.owned_turf.name in long_trail)
+ QDEL_IN(src, 150 SECONDS)
+ user.owned_turf = null
+ else
+ QDEL_IN(src, 15 SECONDS)
+ user.owned_turf = null
+
+ if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ human_user.update_mutant_bodyparts()
+
+#undef EXTRA_ABOVE_MOB_LAYER
diff --git a/modular_nova/modules/emotes/code/dna_screams.dm b/modular_nova/modules/emotes/code/dna_screams.dm
new file mode 100644
index 00000000000..368aa7d7224
--- /dev/null
+++ b/modular_nova/modules/emotes/code/dna_screams.dm
@@ -0,0 +1,68 @@
+/datum/species
+ var/list/screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_m1.ogg', 'modular_nova/modules/emotes/sound/voice/scream_m2.ogg')
+ var/list/femalescreamsounds = list('modular_nova/modules/emotes/sound/voice/scream_f1.ogg', 'modular_nova/modules/emotes/sound/voice/scream_f2.ogg')
+
+/datum/species/synthetic
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg')
+ femalescreamsounds = null
+
+/datum/species/android
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg')
+ femalescreamsounds = null
+
+/datum/species/lizard
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_lizard.ogg', 'sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg')
+
+ femalescreamsounds = null
+
+/datum/species/skeleton
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg')
+ femalescreamsounds = null
+
+/datum/species/fly
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg')
+ femalescreamsounds = null
+
+/datum/species/moth
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg')
+ femalescreamsounds = null
+
+/datum/species/insect
+ screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg')
+ femalescreamsounds = null
+
+/datum/species/ethereal
+ screamsounds = list('sound/voice/ethereal/ethereal_scream_1.ogg', 'sound/voice/ethereal/ethereal_scream_2.ogg', 'sound/voice/ethereal/ethereal_scream_3.ogg')
+ femalescreamsounds = null
+
+/datum/species/jelly
+ screamsounds = list('modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg')
+ femalescreamsounds = null
+
+/datum/species/plasmaman
+ screamsounds = list('sound/voice/plasmaman/plasmeme_scream_1.ogg', 'sound/voice/plasmaman/plasmeme_scream_2.ogg', 'sound/voice/plasmaman/plasmeme_scream_3.ogg')
+ femalescreamsounds = null
+
+/datum/species/vox
+ screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg')
+ femalescreamsounds = null
+
+/datum/species/vox_primalis
+ screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg')
+ femalescreamsounds = null
+
+/datum/species/xeno
+ screamsounds = list('sound/voice/hiss6.ogg')
+ femalescreamsounds = null
+
+/datum/species/zombie
+ screamsounds = list('modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg')
+ femalescreamsounds = null
+
+/datum/species/lizard
+ screamsounds = list('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg')
+ femalescreamsounds = null
+
+/datum/species/teshari
+ screamsounds = list('modular_nova/modules/emotes/sound/emotes/raptorscream.ogg')
+ femalescreamsounds = null
diff --git a/modular_nova/modules/emotes/code/emotes.dm b/modular_nova/modules/emotes/code/emotes.dm
new file mode 100644
index 00000000000..82d5c4e4afb
--- /dev/null
+++ b/modular_nova/modules/emotes/code/emotes.dm
@@ -0,0 +1,534 @@
+
+#define EMOTE_DELAY (2 SECONDS) //To prevent spam emotes. // THE FLUFFY FRONTIER EDIT: 5 sec -> 2 sec
+
+/mob
+ var/nextsoundemote = 1 //Time at which the next emote can be played
+
+/datum/emote
+ cooldown = EMOTE_DELAY
+
+//Disables the custom emote blacklist from TG that normally applies to slimes.
+/datum/emote/living/custom
+ mob_type_blacklist_typecache = list(/mob/living/brain)
+ cooldown = 0
+ stat_allowed = SOFT_CRIT
+
+//me-verb emotes should not have a cooldown check
+/datum/emote/living/custom/check_cooldown(mob/user, intentional)
+ return TRUE
+
+
+/datum/emote/imaginary_friend/custom/check_cooldown(mob/user, intentional)
+ return TRUE
+
+
+/datum/emote/living/blush
+ sound = 'modular_nova/modules/emotes/sound/emotes/blush.ogg'
+
+/datum/emote/living/quill
+ key = "quill"
+ key_third_person = "quills"
+ message = "rustles their quills."
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/emotes/voxrustle.ogg'
+
+
+/datum/emote/living/cough/get_sound(mob/living/user)
+ if(isvox(user))
+ return 'modular_nova/modules/emotes/sound/emotes/voxcough.ogg'
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return pick('modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg')
+ return pick('modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg')
+ return
+
+/datum/emote/living/sneeze
+ vary = TRUE
+
+/datum/emote/living/sneeze/get_sound(mob/living/user)
+ if(isvox(user))
+ return 'modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg'
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return 'modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg'
+ return 'modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg'
+ return
+
+/datum/emote/flip/can_run_emote(mob/user, status_check, intentional)
+ if(intentional && (!HAS_TRAIT(user, TRAIT_FREERUNNING) && !HAS_TRAIT(user, TRAIT_STYLISH)) && !isobserver(user))
+ user.balloon_alert(user, "not nimble enough!")
+ return FALSE
+ return ..()
+
+/datum/emote/living/peep
+ key = "peep"
+ key_third_person = "peeps"
+ message = "peeps like a bird!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/peep_once.ogg'
+
+/datum/emote/living/peep2
+ key = "peep2"
+ key_third_person = "peeps twice"
+ message = "peeps twice like a bird!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/peep.ogg'
+
+/datum/emote/living/snap2
+ key = "snap2"
+ key_third_person = "snaps twice"
+ message = "snaps twice."
+ message_param = "snaps twice at %t."
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ hands_use_check = TRUE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/snap2.ogg'
+
+/datum/emote/living/snap3
+ key = "snap3"
+ key_third_person = "snaps thrice"
+ message = "snaps thrice."
+ message_param = "snaps thrice at %t."
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ hands_use_check = TRUE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/snap3.ogg'
+
+/datum/emote/living/awoo
+ key = "awoo"
+ key_third_person = "awoos"
+ message = "lets out an awoo!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/awoo.ogg'
+
+/datum/emote/living/nya
+ key = "nya"
+ key_third_person = "nyas"
+ message = "lets out a nya!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/nya.ogg'
+
+/datum/emote/living/weh
+ key = "weh"
+ key_third_person = "wehs"
+ message = "lets out a weh!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/weh.ogg'
+
+/datum/emote/living/mothsqueak
+ key = "msqueak"
+ key_third_person = "lets out a tiny squeak"
+ message = "lets out a tiny squeak!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/mothsqueak.ogg'
+
+/datum/emote/living/mousesqueak
+ key = "squeak"
+ key_third_person = "squeaks"
+ message = "squeaks!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'sound/creatures/mousesqueek.ogg'
+
+/datum/emote/living/merp
+ key = "merp"
+ key_third_person = "merps"
+ message = "merps!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/merp.ogg'
+
+/datum/emote/living/bark
+ key = "bark"
+ key_third_person = "barks"
+ message = "barks!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/bark2.ogg'
+
+/datum/emote/living/squish
+ key = "squish"
+ key_third_person = "squishes"
+ message = "squishes!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/slime_squish.ogg'
+
+/datum/emote/living/meow
+ key = "meow"
+ key_third_person = "meows"
+ message = "meows!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/emotes/meow.ogg'
+
+/datum/emote/living/hiss
+ key = "hiss1"
+ key_third_person = "hisses"
+ message = "hisses!"
+ emote_type = EMOTE_AUDIBLE
+ mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/emotes/hiss.ogg'
+
+/datum/emote/living/chitter
+ key = "chitter"
+ key_third_person = "chitters"
+ message = "chitters!"
+ emote_type = EMOTE_AUDIBLE
+ mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
+ vary = TRUE
+
+/datum/emote/living/chitter/get_sound(mob/living/user)
+ if(ismoth(user))
+ return 'modular_nova/modules/emotes/sound/emotes/mothchitter.ogg'
+ else
+ return'sound/creatures/chitter.ogg'
+
+/datum/emote/living/sigh/get_sound(mob/living/user)
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return 'modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg'
+ return 'modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg'
+ return
+
+/datum/emote/living/sniff
+ vary = TRUE
+
+/datum/emote/living/sniff/get_sound(mob/living/user)
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return 'modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg'
+ return 'modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg'
+ return
+
+/datum/emote/living/gasp/get_sound(mob/living/user)
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return pick('modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg')
+ return pick('modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg')
+ return
+
+/datum/emote/living/snore
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/emotes/snore.ogg'
+
+/datum/emote/living/burp
+ vary = TRUE
+
+/datum/emote/living/burp/get_sound(mob/living/user)
+ if(iscarbon(user))
+ if(user.gender == MALE)
+ return 'modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg'
+ return 'modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg'
+ return
+
+/datum/emote/living/clap
+ key = "clap"
+ key_third_person = "claps"
+ message = "claps."
+ muzzle_ignore = TRUE
+ hands_use_check = TRUE
+ emote_type = EMOTE_AUDIBLE
+ audio_cooldown = 5 SECONDS
+ vary = TRUE
+ mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
+
+/datum/emote/living/clap/get_sound(mob/living/user)
+ return pick('modular_nova/modules/emotes/sound/emotes/clap1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/clap2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/clap3.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/clap4.ogg')
+
+/datum/emote/living/clap/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional)
+ if(user.usable_hands < 2)
+ return FALSE
+ return ..()
+
+/datum/emote/living/clap1
+ key = "clap1"
+ key_third_person = "claps once"
+ message = "claps once."
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ hands_use_check = TRUE
+ vary = TRUE
+ mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
+
+/datum/emote/living/clap1/get_sound(mob/living/user)
+ return pick('modular_nova/modules/emotes/sound/emotes/claponce1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/claponce2.ogg')
+
+/datum/emote/living/clap1/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional)
+ if(user.usable_hands < 2)
+ return FALSE
+ return ..()
+
+/datum/emote/living/headtilt
+ key = "tilt"
+ key_third_person = "tilts"
+ message = "tilts their head."
+ message_AI = "tilts the image on their display."
+
+/datum/emote/beep
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/emotes/twobeep.ogg'
+ mob_type_allowed_typecache = list(/mob/living) //Beep already exists on brains and silicons
+
+/datum/emote/living/blink2
+ key = "blink2"
+ key_third_person = "blinks twice"
+ message = "blinks twice."
+ message_AI = "has their display flicker twice."
+
+/datum/emote/living/rblink
+ key = "rblink"
+ key_third_person = "rapidly blinks"
+ message = "rapidly blinks!"
+ message_AI = "has their display port flash rapidly!"
+
+/datum/emote/living/squint
+ key = "squint"
+ key_third_person = "squints"
+ message = "squints."
+ message_AI = "zooms in."
+
+/datum/emote/living/smirk
+ key = "smirk"
+ key_third_person = "smirks"
+ message = "smirks."
+
+/datum/emote/living/eyeroll
+ key = "eyeroll"
+ key_third_person = "rolls their eyes"
+ message = "rolls their eyes."
+
+/datum/emote/living/huff
+ key = "huffs"
+ key_third_person = "huffs"
+ message = "huffs!"
+
+/datum/emote/living/etwitch
+ key = "etwitch"
+ key_third_person = "twitches their ears"
+ message = "twitches their ears!"
+
+/datum/emote/living/clear
+ key = "clear"
+ key_third_person = "clears their throat"
+ message = "clears their throat."
+
+// Avian revolution
+/datum/emote/living/bawk
+ key = "bawk"
+ key_third_person = "bawks"
+ message = "bawks like a chicken."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/bawk.ogg'
+
+/datum/emote/living/caw
+ key = "caw"
+ key_third_person = "caws"
+ message = "caws!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/caw.ogg'
+
+/datum/emote/living/caw2
+ key = "caw2"
+ key_third_person = "caws twice"
+ message = "caws twice!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/caw2.ogg'
+
+/datum/emote/living/whistle
+ key = "whistle"
+ key_third_person = "whistles"
+ message = "whistles."
+ emote_type = EMOTE_AUDIBLE
+
+/datum/emote/living/blep
+ key = "blep"
+ key_third_person = "bleps"
+ message = "bleps their tongue out. Blep."
+ message_AI = "shows an image of a random blepping animal. Blep."
+ message_robot = "bleps their robo-tongue out. Blep."
+
+/datum/emote/living/bork
+ key = "bork"
+ key_third_person = "borks"
+ message = "lets out a bork."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/bork.ogg'
+
+/datum/emote/living/hoot
+ key = "hoot"
+ key_third_person = "hoots"
+ message = "hoots!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/hoot.ogg'
+
+/datum/emote/living/growl
+ key = "growl"
+ key_third_person = "growls"
+ message = "lets out a growl."
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/growl.ogg'
+
+/datum/emote/living/woof
+ key = "woof"
+ key_third_person = "woofs"
+ message = "lets out a woof."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/woof.ogg'
+
+/datum/emote/living/baa
+ key = "baa"
+ key_third_person = "baas"
+ message = "lets out a baa."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/baa.ogg'
+
+/datum/emote/living/baa2
+ key = "baa2"
+ key_third_person = "baas"
+ message = "bleats."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/baa2.ogg'
+
+/datum/emote/living/wurble
+ key = "wurble"
+ key_third_person = "wurbles"
+ message = "lets out a wurble."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/wurble.ogg'
+
+/datum/emote/living/rattle
+ key = "rattle"
+ key_third_person = "rattles"
+ message = "rattles!"
+ emote_type = EMOTE_AUDIBLE
+ muzzle_ignore = TRUE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/rattle.ogg'
+
+/datum/emote/living/cackle
+ key = "cackle"
+ key_third_person = "cackles"
+ message = "cackles hysterically!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg'
+
+/mob/living/proc/do_ass_slap_animation(atom/slapped)
+ do_attack_animation(slapped, no_effect=TRUE)
+ var/image/gloveimg = image('icons/effects/effects.dmi', slapped, "slapglove", slapped.layer + 0.1)
+ gloveimg.pixel_y = -5
+ gloveimg.pixel_x = 0
+ slapped.flick_overlay_view(gloveimg, 1 SECONDS)
+
+ // And animate the attack!
+ animate(gloveimg, alpha = 175, transform = matrix() * 0.75, pixel_x = 0, pixel_y = -5, pixel_z = 0, time = 0.3 SECONDS)
+ animate(time = 0.1 SECONDS)
+ animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT)
+
+//Froggie Revolution
+/datum/emote/living/warble
+ key = "warble"
+ key_third_person = "warbles"
+ message = "warbles!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/warbles.ogg'
+
+/datum/emote/living/trills
+ key = "trills"
+ key_third_person = "trills!"
+ message = "trills!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/trills.ogg'
+
+/datum/emote/living/rpurr
+ key = "rpurr"
+ key_third_person = "purrs!"
+ message = "purrs!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/raptor_purr.ogg'
+
+/datum/emote/living/purr //Ported from CitRP originally by buffyuwu.
+ key = "purr"
+ key_third_person = "purrs!"
+ message = "purrs!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/feline_purr.ogg'
+
+/datum/emote/living/moo
+ key = "moo"
+ key_third_person = "moos!"
+ message = "moos!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/moo.ogg'
+
+/datum/emote/living/honk
+ key = "honk1"
+ key_third_person = "honks loudly like a goose!"
+ message = "honks loudly like a goose!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'modular_nova/modules/emotes/sound/voice/goose_honk.ogg'
+
+/datum/emote/living/gnash
+ key = "gnash"
+ key_third_person = "gnashes"
+ message = "gnashes."
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'sound/weapons/bite.ogg'
+
+/datum/emote/living/thump
+ key = "thump"
+ key_third_person = "thumps"
+ message = "thumps their foot!"
+ emote_type = EMOTE_AUDIBLE
+ vary = TRUE
+ sound = 'sound/effects/glassbash.ogg'
diff --git a/modular_nova/modules/emotes/code/laugh_datums.dm b/modular_nova/modules/emotes/code/laugh_datums.dm
new file mode 100644
index 00000000000..535f79975e2
--- /dev/null
+++ b/modular_nova/modules/emotes/code/laugh_datums.dm
@@ -0,0 +1,36 @@
+GLOBAL_LIST_EMPTY(laugh_types)
+
+/datum/laugh_type
+ var/name
+ var/list/male_laughsounds
+ var/list/female_laughsounds
+
+/datum/laugh_type/none //Why would you want this?
+ name = "No Laugh"
+ male_laughsounds = null
+ female_laughsounds = null
+
+/datum/laugh_type/human
+ name = "Human Laugh"
+ male_laughsounds = list('sound/voice/human/manlaugh1.ogg',
+ 'sound/voice/human/manlaugh2.ogg')
+ female_laughsounds = list('modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg')
+
+/datum/laugh_type/felinid
+ name = "Felinid Laugh"
+ male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/nyaha.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/nyahehe.ogg')
+ female_laughsounds = null
+
+/datum/laugh_type/moth
+ name = "Moth Laugh"
+ male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg')
+ female_laughsounds = null
+
+/datum/laugh_type/insect
+ name = "Insect Laugh"
+ male_laughsounds = list('modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg')
+ female_laughsounds = null
diff --git a/modular_skyrat/modules/emotes/code/laugh_emotes.dm b/modular_nova/modules/emotes/code/laugh_emotes.dm
similarity index 82%
rename from modular_skyrat/modules/emotes/code/laugh_emotes.dm
rename to modular_nova/modules/emotes/code/laugh_emotes.dm
index 5c202afeaad..29eb2ad2f6a 100644
--- a/modular_skyrat/modules/emotes/code/laugh_emotes.dm
+++ b/modular_nova/modules/emotes/code/laugh_emotes.dm
@@ -16,8 +16,8 @@
return pick('sound/voice/human/manlaugh1.ogg',
'sound/voice/human/manlaugh2.ogg')
else
- return pick('modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg')
+ return pick('modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg',
+ 'modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg')
if(user.gender == MALE || !LAZYLEN(H.selected_laugh.female_laughsounds))
return pick(H.selected_laugh.male_laughsounds)
else
diff --git a/modular_nova/modules/emotes/code/scream_datums.dm b/modular_nova/modules/emotes/code/scream_datums.dm
new file mode 100644
index 00000000000..43b9e272019
--- /dev/null
+++ b/modular_nova/modules/emotes/code/scream_datums.dm
@@ -0,0 +1,136 @@
+GLOBAL_LIST_EMPTY(scream_types)
+
+/datum/scream_type
+ var/name
+ var/list/male_screamsounds
+ var/list/female_screamsounds
+
+/datum/scream_type/none //Why would you want this?
+ name = "No Scream"
+ male_screamsounds = null
+ female_screamsounds = null
+
+/datum/scream_type/human
+ name = "Human Scream"
+ male_screamsounds = list(
+ 'modular_nova/modules/emotes/sound/voice/scream_m1.ogg',
+ 'modular_nova/modules/emotes/sound/voice/scream_m2.ogg',
+ )
+ female_screamsounds = list(
+ 'modular_nova/modules/emotes/sound/voice/scream_f1.ogg',
+ 'modular_nova/modules/emotes/sound/voice/scream_f2.ogg',
+ )
+
+/datum/scream_type/human_two
+ name = "Human Scream 2"
+ male_screamsounds = list(
+ 'sound/voice/human/malescream_1.ogg',
+ 'sound/voice/human/malescream_2.ogg',
+ 'sound/voice/human/malescream_3.ogg',
+ 'sound/voice/human/malescream_4.ogg',
+ 'sound/voice/human/malescream_5.ogg',
+ 'sound/voice/human/malescream_6.ogg',
+ )
+ female_screamsounds = list(
+ 'sound/voice/human/femalescream_1.ogg',
+ 'sound/voice/human/femalescream_2.ogg',
+ 'sound/voice/human/femalescream_3.ogg',
+ 'sound/voice/human/femalescream_4.ogg',
+ 'sound/voice/human/femalescream_5.ogg',
+ )
+
+/datum/scream_type/robotic
+ name = "Robotic Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_silicon.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/lizard
+ name = "Lizard Scream"
+ male_screamsounds = list(
+ 'sound/voice/lizard/lizard_scream_1.ogg',
+ 'sound/voice/lizard/lizard_scream_2.ogg',
+ 'sound/voice/lizard/lizard_scream_3.ogg',
+ )
+ female_screamsounds = null
+
+/datum/scream_type/lizard2
+ name = "Lizard Scream 2"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_lizard.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/cat
+ name = "Cat Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_cat.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/moth
+ name = "Moth Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_moth.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/moth_two
+ name = "Moth Scream 2"
+ male_screamsounds = list('sound/voice/moth/scream_moth.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/jelly
+ name = "Jelly Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/vox
+ name = "Vox Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/voxscream.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/xeno
+ name = "Xeno Scream"
+ male_screamsounds = list('sound/voice/hiss6.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/raptor //This is the Teshari scream ported from CitRP which was a cockatoo scream edited by BlackMajor.
+ name = "Raptor Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/raptorscream.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/rodent //Ported from Polaris/Virgo.
+ name = "Rodent Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/rodentscream.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/ethereal
+ name = "Ethereal Scream"
+ male_screamsounds = list(
+ 'sound/voice/ethereal/ethereal_scream_1.ogg',
+ 'sound/voice/ethereal/ethereal_scream_2.ogg',
+ 'sound/voice/ethereal/ethereal_scream_3.ogg')
+ female_screamsounds = null
+
+//DONATOR SCREAMS
+/datum/scream_type/zombie
+ name = "Zombie Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/monkey
+ name = "Monkey Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_monkey.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/gorilla
+ name = "Gorilla Scream"
+ male_screamsounds = list('sound/creatures/gorilla.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/skeleton
+ name = "Skeleton Scream"
+ male_screamsounds = list('modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg')
+ female_screamsounds = null
+
+/datum/scream_type/plasmaman
+ name = "Plasmaman Scream"
+ male_screamsounds = list(
+ 'sound/voice/plasmaman/plasmeme_scream_1.ogg',
+ 'sound/voice/plasmaman/plasmeme_scream_2.ogg',
+ 'sound/voice/plasmaman/plasmeme_scream_3.ogg')
+ female_screamsounds = null
diff --git a/modular_skyrat/modules/emotes/code/scream_emote.dm b/modular_nova/modules/emotes/code/scream_emote.dm
similarity index 92%
rename from modular_skyrat/modules/emotes/code/scream_emote.dm
rename to modular_nova/modules/emotes/code/scream_emote.dm
index 50619d1bd85..d53aa13fdd5 100644
--- a/modular_skyrat/modules/emotes/code/scream_emote.dm
+++ b/modular_nova/modules/emotes/code/scream_emote.dm
@@ -21,9 +21,9 @@
if(!override)
return
if(iscyborg(user))
- return 'modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg'
+ return 'modular_nova/modules/emotes/sound/voice/scream_silicon.ogg'
if(ismonkey(user))
- return 'modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg'
+ return 'modular_nova/modules/emotes/sound/voice/scream_monkey.ogg'
if(istype(user, /mob/living/basic/gorilla))
return 'sound/creatures/gorilla.ogg'
if(isalien(user))
diff --git a/modular_skyrat/modules/emotes/code/synth_emotes.dm b/modular_nova/modules/emotes/code/synth_emotes.dm
similarity index 93%
rename from modular_skyrat/modules/emotes/code/synth_emotes.dm
rename to modular_nova/modules/emotes/code/synth_emotes.dm
index 1c67805f155..8c0bce5b963 100644
--- a/modular_skyrat/modules/emotes/code/synth_emotes.dm
+++ b/modular_nova/modules/emotes/code/synth_emotes.dm
@@ -6,7 +6,7 @@
key_third_person = "dwoops"
message = "chirps happily!"
vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg'
+ sound = 'modular_nova/modules/emotes/sound/emotes/dwoop.ogg'
silicon_allowed = TRUE
allowed_species = list(/datum/species/synthetic)
cooldown = 2 SECONDS
@@ -15,7 +15,7 @@
key = "yes"
message = "emits an affirmative blip."
vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg'
+ sound = 'modular_nova/modules/emotes/sound/emotes/synth_yes.ogg'
silicon_allowed = TRUE
allowed_species = list(/datum/species/synthetic)
cooldown = 2 SECONDS
@@ -24,7 +24,7 @@
key = "no"
message = "emits a negative blip."
vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg'
+ sound = 'modular_nova/modules/emotes/sound/emotes/synth_no.ogg'
silicon_allowed = TRUE
allowed_species = list(/datum/species/synthetic)
cooldown = 2 SECONDS
@@ -66,7 +66,7 @@
message_param = "beeps sharply at %t."
emote_type = EMOTE_AUDIBLE
vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg'
+ sound = 'modular_nova/modules/emotes/sound/emotes/twobeep.ogg'
silicon_allowed = TRUE
allowed_species = list(/datum/species/synthetic)
cooldown = 2 SECONDS
diff --git a/modular_nova/modules/emotes/readme.md b/modular_nova/modules/emotes/readme.md
new file mode 100644
index 00000000000..9acdfbf43b6
--- /dev/null
+++ b/modular_nova/modules/emotes/readme.md
@@ -0,0 +1,56 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/892
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259
+
+## Title: All the emotes.
+
+MODULE ID: EMOTES
+
+### Description:
+
+Adds all the emotes we once had on the oldbase, and shoves them right into here.
+
+Adds some new emotes, and adjusted sound files.
+
+Pretty much anything that changes emotes is in here
+
+### TG Proc Changes:
+
+File Location | Changed TG Proc
+------------- | ---------------
+code/datums/emotes.dm | `/datum/emote/proc/check_cooldown(mob/user, intentional)`
+code/datums/emotes.dm | `/datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE)`
+code/modules/mob/living/carbon/carbon_defense.dm | `/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)`
+
+### TG File Changes:
+
+- code/datums/emotes.dm
+- code/modules/mob/living/emote.dm
+- code/modules/mob/living/carbon/emote.dm
+
+### Defines:
+
+File Location | Defines
+------------- | -------
+code/__DEFINES/~skyrat_defines/traits.dm | `#define TRAIT_EXCITABLE "wagwag"`
+modular_nova/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY`
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+- Gandalf2k15 - porting and refactoring
+- Avunia Takiya
+ - refactoring code
+ - adjusting existing sound files
+ - adding more emotes
+- TheOOZ Additional emotes
+ - overlay emotes
+ - turf emotes
+- VOREstation - a couple of the soundfiles and emote texts
diff --git a/modular_skyrat/modules/emotes/sound/claponce1.ogg b/modular_nova/modules/emotes/sound/claponce1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/claponce1.ogg
rename to modular_nova/modules/emotes/sound/claponce1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/claponce2.ogg b/modular_nova/modules/emotes/sound/claponce2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/claponce2.ogg
rename to modular_nova/modules/emotes/sound/claponce2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg b/modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/Nose_boop.ogg
rename to modular_nova/modules/emotes/sound/emotes/Nose_boop.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg b/modular_nova/modules/emotes/sound/emotes/annoyed.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/annoyed.ogg
rename to modular_nova/modules/emotes/sound/emotes/annoyed.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/blush.ogg b/modular_nova/modules/emotes/sound/emotes/blush.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/blush.ogg
rename to modular_nova/modules/emotes/sound/emotes/blush.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap1.ogg b/modular_nova/modules/emotes/sound/emotes/clap1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/clap1.ogg
rename to modular_nova/modules/emotes/sound/emotes/clap1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap2.ogg b/modular_nova/modules/emotes/sound/emotes/clap2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/clap2.ogg
rename to modular_nova/modules/emotes/sound/emotes/clap2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap3.ogg b/modular_nova/modules/emotes/sound/emotes/clap3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/clap3.ogg
rename to modular_nova/modules/emotes/sound/emotes/clap3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/clap4.ogg b/modular_nova/modules/emotes/sound/emotes/clap4.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/clap4.ogg
rename to modular_nova/modules/emotes/sound/emotes/clap4.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg b/modular_nova/modules/emotes/sound/emotes/claponce1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg
rename to modular_nova/modules/emotes/sound/emotes/claponce1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg b/modular_nova/modules/emotes/sound/emotes/claponce2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg
rename to modular_nova/modules/emotes/sound/emotes/claponce2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg b/modular_nova/modules/emotes/sound/emotes/dwoop.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg
rename to modular_nova/modules/emotes/sound/emotes/dwoop.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg b/modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/burp_f.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_cough_3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_giggle_1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_giggle_2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_sigh.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_sneeze.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg b/modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f4.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f5.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg b/modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg
rename to modular_nova/modules/emotes/sound/emotes/female/gasp_f6.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/hiss.ogg b/modular_nova/modules/emotes/sound/emotes/hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/hiss.ogg
rename to modular_nova/modules/emotes/sound/emotes/hiss.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg b/modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg
rename to modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg b/modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/burp_m.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m4.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m5.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg b/modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/gasp_m6.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_cough_3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_sigh.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_sneeze.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg b/modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg
rename to modular_nova/modules/emotes/sound/emotes/male/male_sniff.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/meow.ogg b/modular_nova/modules/emotes/sound/emotes/meow.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/meow.ogg
rename to modular_nova/modules/emotes/sound/emotes/meow.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg b/modular_nova/modules/emotes/sound/emotes/mothchitter.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg
rename to modular_nova/modules/emotes/sound/emotes/mothchitter.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg b/modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg
rename to modular_nova/modules/emotes/sound/emotes/mothlaugh.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg b/modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/mothsqueak.ogg
rename to modular_nova/modules/emotes/sound/emotes/mothsqueak.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg b/modular_nova/modules/emotes/sound/emotes/nyaha.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg
rename to modular_nova/modules/emotes/sound/emotes/nyaha.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg b/modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg
rename to modular_nova/modules/emotes/sound/emotes/nyahaha1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg b/modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg
rename to modular_nova/modules/emotes/sound/emotes/nyahaha2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg b/modular_nova/modules/emotes/sound/emotes/nyahehe.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg
rename to modular_nova/modules/emotes/sound/emotes/nyahehe.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/question.ogg b/modular_nova/modules/emotes/sound/emotes/question.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/question.ogg
rename to modular_nova/modules/emotes/sound/emotes/question.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg b/modular_nova/modules/emotes/sound/emotes/raptorscream.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg
rename to modular_nova/modules/emotes/sound/emotes/raptorscream.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/realize.ogg b/modular_nova/modules/emotes/sound/emotes/realize.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/realize.ogg
rename to modular_nova/modules/emotes/sound/emotes/realize.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg b/modular_nova/modules/emotes/sound/emotes/rodentscream.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg
rename to modular_nova/modules/emotes/sound/emotes/rodentscream.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/scream_moth.ogg b/modular_nova/modules/emotes/sound/emotes/scream_moth.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/scream_moth.ogg
rename to modular_nova/modules/emotes/sound/emotes/scream_moth.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/snore.ogg b/modular_nova/modules/emotes/sound/emotes/snore.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/snore.ogg
rename to modular_nova/modules/emotes/sound/emotes/snore.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg b/modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/sweatdrop.ogg
rename to modular_nova/modules/emotes/sound/emotes/sweatdrop.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg b/modular_nova/modules/emotes/sound/emotes/synth_no.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/synth_no.ogg
rename to modular_nova/modules/emotes/sound/emotes/synth_no.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg b/modular_nova/modules/emotes/sound/emotes/synth_yes.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/synth_yes.ogg
rename to modular_nova/modules/emotes/sound/emotes/synth_yes.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg b/modular_nova/modules/emotes/sound/emotes/twobeep.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg
rename to modular_nova/modules/emotes/sound/emotes/twobeep.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg b/modular_nova/modules/emotes/sound/emotes/voxcough.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg
rename to modular_nova/modules/emotes/sound/emotes/voxcough.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg b/modular_nova/modules/emotes/sound/emotes/voxrustle.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg
rename to modular_nova/modules/emotes/sound/emotes/voxrustle.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg b/modular_nova/modules/emotes/sound/emotes/voxscream.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg
rename to modular_nova/modules/emotes/sound/emotes/voxscream.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg b/modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg
rename to modular_nova/modules/emotes/sound/emotes/voxsneeze.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/yawn_m1.ogg b/modular_nova/modules/emotes/sound/emotes/yawn_m1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/yawn_m1.ogg
rename to modular_nova/modules/emotes/sound/emotes/yawn_m1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/yawn_m2.ogg b/modular_nova/modules/emotes/sound/emotes/yawn_m2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/yawn_m2.ogg
rename to modular_nova/modules/emotes/sound/emotes/yawn_m2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg b/modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg
rename to modular_nova/modules/emotes/sound/emotes/zombie_scream.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/awoo.ogg b/modular_nova/modules/emotes/sound/voice/awoo.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/awoo.ogg
rename to modular_nova/modules/emotes/sound/voice/awoo.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/baa.ogg b/modular_nova/modules/emotes/sound/voice/baa.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/baa.ogg
rename to modular_nova/modules/emotes/sound/voice/baa.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/baa2.ogg b/modular_nova/modules/emotes/sound/voice/baa2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/baa2.ogg
rename to modular_nova/modules/emotes/sound/voice/baa2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/bark1.ogg b/modular_nova/modules/emotes/sound/voice/bark1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/bark1.ogg
rename to modular_nova/modules/emotes/sound/voice/bark1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/bark2.ogg b/modular_nova/modules/emotes/sound/voice/bark2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/bark2.ogg
rename to modular_nova/modules/emotes/sound/voice/bark2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/bawk.ogg b/modular_nova/modules/emotes/sound/voice/bawk.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/bawk.ogg
rename to modular_nova/modules/emotes/sound/voice/bawk.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/bork.ogg b/modular_nova/modules/emotes/sound/voice/bork.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/bork.ogg
rename to modular_nova/modules/emotes/sound/voice/bork.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg b/modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg
rename to modular_nova/modules/emotes/sound/voice/cackle_yeen.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/caw.ogg b/modular_nova/modules/emotes/sound/voice/caw.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/caw.ogg
rename to modular_nova/modules/emotes/sound/voice/caw.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/caw2.ogg b/modular_nova/modules/emotes/sound/voice/caw2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/caw2.ogg
rename to modular_nova/modules/emotes/sound/voice/caw2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg b/modular_nova/modules/emotes/sound/voice/feline_purr.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg
rename to modular_nova/modules/emotes/sound/voice/feline_purr.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg b/modular_nova/modules/emotes/sound/voice/goose_honk.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg
rename to modular_nova/modules/emotes/sound/voice/goose_honk.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/growl.ogg b/modular_nova/modules/emotes/sound/voice/growl.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/growl.ogg
rename to modular_nova/modules/emotes/sound/voice/growl.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/hiss.ogg b/modular_nova/modules/emotes/sound/voice/hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/hiss.ogg
rename to modular_nova/modules/emotes/sound/voice/hiss.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/hoot.ogg b/modular_nova/modules/emotes/sound/voice/hoot.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/hoot.ogg
rename to modular_nova/modules/emotes/sound/voice/hoot.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/merowr.ogg b/modular_nova/modules/emotes/sound/voice/merowr.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/merowr.ogg
rename to modular_nova/modules/emotes/sound/voice/merowr.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/merp.ogg b/modular_nova/modules/emotes/sound/voice/merp.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/merp.ogg
rename to modular_nova/modules/emotes/sound/voice/merp.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/moo.ogg b/modular_nova/modules/emotes/sound/voice/moo.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/moo.ogg
rename to modular_nova/modules/emotes/sound/voice/moo.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg b/modular_nova/modules/emotes/sound/voice/mothsqueak.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg
rename to modular_nova/modules/emotes/sound/voice/mothsqueak.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/nya.ogg b/modular_nova/modules/emotes/sound/voice/nya.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/nya.ogg
rename to modular_nova/modules/emotes/sound/voice/nya.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/peep.ogg b/modular_nova/modules/emotes/sound/voice/peep.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/peep.ogg
rename to modular_nova/modules/emotes/sound/voice/peep.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/peep_once.ogg b/modular_nova/modules/emotes/sound/voice/peep_once.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/peep_once.ogg
rename to modular_nova/modules/emotes/sound/voice/peep_once.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg b/modular_nova/modules/emotes/sound/voice/raptor_purr.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg
rename to modular_nova/modules/emotes/sound/voice/raptor_purr.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/rattle.ogg b/modular_nova/modules/emotes/sound/voice/rattle.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/rattle.ogg
rename to modular_nova/modules/emotes/sound/voice/rattle.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/roro_rogue.ogg b/modular_nova/modules/emotes/sound/voice/roro_rogue.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/roro_rogue.ogg
rename to modular_nova/modules/emotes/sound/voice/roro_rogue.ogg
diff --git a/modular_nova/modules/emotes/sound/voice/scream_cat.ogg b/modular_nova/modules/emotes/sound/voice/scream_cat.ogg
new file mode 100644
index 00000000000..ba00eec223c
Binary files /dev/null and b/modular_nova/modules/emotes/sound/voice/scream_cat.ogg differ
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg b/modular_nova/modules/emotes/sound/voice/scream_f1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_f1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg b/modular_nova/modules/emotes/sound/voice/scream_f2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_f2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_f3.ogg b/modular_nova/modules/emotes/sound/voice/scream_f3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_f3.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_f3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg b/modular_nova/modules/emotes/sound/voice/scream_lizard.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_lizard.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m.ogg b/modular_nova/modules/emotes/sound/voice/scream_m.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_m.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_m.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg b/modular_nova/modules/emotes/sound/voice/scream_m1.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_m1.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg b/modular_nova/modules/emotes/sound/voice/scream_m2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_m2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg b/modular_nova/modules/emotes/sound/voice/scream_monkey.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_monkey.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg b/modular_nova/modules/emotes/sound/voice/scream_moth.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_moth.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg b/modular_nova/modules/emotes/sound/voice/scream_silicon.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_silicon.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg b/modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg
rename to modular_nova/modules/emotes/sound/voice/scream_skeleton.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg b/modular_nova/modules/emotes/sound/voice/slime_squish.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg
rename to modular_nova/modules/emotes/sound/voice/slime_squish.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/snap.ogg b/modular_nova/modules/emotes/sound/voice/snap.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/snap.ogg
rename to modular_nova/modules/emotes/sound/voice/snap.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/snap2.ogg b/modular_nova/modules/emotes/sound/voice/snap2.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/snap2.ogg
rename to modular_nova/modules/emotes/sound/voice/snap2.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/snap3.ogg b/modular_nova/modules/emotes/sound/voice/snap3.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/snap3.ogg
rename to modular_nova/modules/emotes/sound/voice/snap3.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/trills.ogg b/modular_nova/modules/emotes/sound/voice/trills.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/trills.ogg
rename to modular_nova/modules/emotes/sound/voice/trills.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/warbles.ogg b/modular_nova/modules/emotes/sound/voice/warbles.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/warbles.ogg
rename to modular_nova/modules/emotes/sound/voice/warbles.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/weh.ogg b/modular_nova/modules/emotes/sound/voice/weh.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/weh.ogg
rename to modular_nova/modules/emotes/sound/voice/weh.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/woof.ogg b/modular_nova/modules/emotes/sound/voice/woof.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/woof.ogg
rename to modular_nova/modules/emotes/sound/voice/woof.ogg
diff --git a/modular_skyrat/modules/emotes/sound/voice/wurble.ogg b/modular_nova/modules/emotes/sound/voice/wurble.ogg
similarity index 100%
rename from modular_skyrat/modules/emotes/sound/voice/wurble.ogg
rename to modular_nova/modules/emotes/sound/voice/wurble.ogg
diff --git a/modular_skyrat/modules/encounters/code/nri_raiders.dm b/modular_nova/modules/encounters/code/nri_raiders.dm
similarity index 97%
rename from modular_skyrat/modules/encounters/code/nri_raiders.dm
rename to modular_nova/modules/encounters/code/nri_raiders.dm
index 9fc737924f9..7d00a97290b 100644
--- a/modular_skyrat/modules/encounters/code/nri_raiders.dm
+++ b/modular_nova/modules/encounters/code/nri_raiders.dm
@@ -160,13 +160,13 @@ GLOBAL_VAR(first_officer)
/obj/item/card/id/advanced/nri_police
name = "\improper NRI police identification card"
desc = "A retro-looking card model modified to work with the modern identification systems."
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ icon = 'modular_nova/master_files/icons/obj/card.dmi'
icon_state = "card_nri_police"
assigned_icon_state = "assigned_nri_police"
/datum/id_trim/nri_police
assignment = "NRI Field Officer"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_nri_police"
department_color = COLOR_NRI_POLICE_BLUE
subdepartment_color = COLOR_NRI_POLICE_SILVER
@@ -181,7 +181,7 @@ GLOBAL_VAR(first_officer)
name = "NRI Raider sleeper"
desc = "Cozy. You get the feeling you aren't supposed to be here, though..."
prompt_name = "a NRI Marine"
- icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi'
+ icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi'
icon_state = "cryopod"
mob_species = /datum/species/human
faction = list(FACTION_RAIDER)
@@ -278,14 +278,14 @@ GLOBAL_VAR(first_officer)
/area/shuttle/pirate/nri
name = "NRI Starship"
forced_ambience = TRUE
- ambient_buzz = 'modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg'
+ ambient_buzz = 'modular_nova/modules/encounters/sounds/amb_ship_01.ogg'
ambient_buzz_vol = 15
- ambientsounds = list('modular_skyrat/modules/encounters/sounds/alarm_radio.ogg',
- 'modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg',
- 'modular_skyrat/modules/encounters/sounds/gear_loop.ogg',
- 'modular_skyrat/modules/encounters/sounds/gear_start.ogg',
- 'modular_skyrat/modules/encounters/sounds/gear_stop.ogg',
- 'modular_skyrat/modules/encounters/sounds/intercom_loop.ogg')
+ ambientsounds = list('modular_nova/modules/encounters/sounds/alarm_radio.ogg',
+ 'modular_nova/modules/encounters/sounds/alarm_small_09.ogg',
+ 'modular_nova/modules/encounters/sounds/gear_loop.ogg',
+ 'modular_nova/modules/encounters/sounds/gear_start.ogg',
+ 'modular_nova/modules/encounters/sounds/gear_stop.ogg',
+ 'modular_nova/modules/encounters/sounds/intercom_loop.ogg')
/obj/machinery/computer/shuttle/pirate/nri
name = "police shuttle console"
@@ -295,7 +295,7 @@ GLOBAL_VAR(first_officer)
desc = "Used to designate a precise transit location for the police shuttle."
/obj/machinery/base_alarm/nri_raider
- alarm_sound_file = 'modular_skyrat/modules/encounters/sounds/env_horn.ogg'
+ alarm_sound_file = 'modular_nova/modules/encounters/sounds/env_horn.ogg'
alarm_cooldown = 32
/obj/machinery/porta_turret/syndicate/nri_raider
@@ -304,14 +304,14 @@ GLOBAL_VAR(first_officer)
scan_range = 9
shot_delay = 15
faction = list(FACTION_RAIDER)
- icon = 'modular_skyrat/modules/encounters/icons/turrets.dmi'
+ icon = 'modular_nova/modules/encounters/icons/turrets.dmi'
icon_state = "gun_turret"
base_icon_state = "gun_turret"
max_integrity = 250
stun_projectile = /obj/projectile/bullet/ciws
lethal_projectile = /obj/projectile/bullet/ciws
- lethal_projectile_sound = 'modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg'
- stun_projectile_sound = 'modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg'
+ lethal_projectile_sound = 'modular_nova/modules/encounters/sounds/shell_out_tiny.ogg'
+ stun_projectile_sound = 'modular_nova/modules/encounters/sounds/shell_out_tiny.ogg'
/obj/machinery/porta_turret/syndicate/nri_raider/target(atom/movable/target)
if(target)
@@ -337,8 +337,8 @@ GLOBAL_VAR(first_officer)
rechargeTime = 3 MINUTES
movement_force = list("KNOCKDOWN"=0,"THROW"=0)
can_move_docking_ports = TRUE
- takeoff_sound = sound('modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg')
- landing_sound = sound('modular_skyrat/modules/encounters/sounds/env_ship_down.ogg')
+ takeoff_sound = sound('modular_nova/modules/encounters/sounds/engine_ignit_int.ogg')
+ landing_sound = sound('modular_nova/modules/encounters/sounds/env_ship_down.ogg')
/obj/structure/plaque/static_plaque/golden/commission/ks13/nri_raider
desc = "NRI Terentiev-Yermolayev Orbital Shipworks, Providence High Orbit, Ship OSTs-02\n'Potato Beetle' Class Corvette\nCommissioned 10/11/2562 'Keeping Promises'"
diff --git a/modular_skyrat/modules/encounters/icons/turrets.dmi b/modular_nova/modules/encounters/icons/turrets.dmi
similarity index 100%
rename from modular_skyrat/modules/encounters/icons/turrets.dmi
rename to modular_nova/modules/encounters/icons/turrets.dmi
diff --git a/modular_skyrat/modules/encounters/sounds/alarm_radio.ogg b/modular_nova/modules/encounters/sounds/alarm_radio.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/alarm_radio.ogg
rename to modular_nova/modules/encounters/sounds/alarm_radio.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg b/modular_nova/modules/encounters/sounds/alarm_small_09.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/alarm_small_09.ogg
rename to modular_nova/modules/encounters/sounds/alarm_small_09.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg b/modular_nova/modules/encounters/sounds/amb_ship_01.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/amb_ship_01.ogg
rename to modular_nova/modules/encounters/sounds/amb_ship_01.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg b/modular_nova/modules/encounters/sounds/engine_ignit_int.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/engine_ignit_int.ogg
rename to modular_nova/modules/encounters/sounds/engine_ignit_int.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/env_horn.ogg b/modular_nova/modules/encounters/sounds/env_horn.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/env_horn.ogg
rename to modular_nova/modules/encounters/sounds/env_horn.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/env_ship_down.ogg b/modular_nova/modules/encounters/sounds/env_ship_down.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/env_ship_down.ogg
rename to modular_nova/modules/encounters/sounds/env_ship_down.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/gear_loop.ogg b/modular_nova/modules/encounters/sounds/gear_loop.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/gear_loop.ogg
rename to modular_nova/modules/encounters/sounds/gear_loop.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/gear_start.ogg b/modular_nova/modules/encounters/sounds/gear_start.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/gear_start.ogg
rename to modular_nova/modules/encounters/sounds/gear_start.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/gear_stop.ogg b/modular_nova/modules/encounters/sounds/gear_stop.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/gear_stop.ogg
rename to modular_nova/modules/encounters/sounds/gear_stop.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/intercom_loop.ogg b/modular_nova/modules/encounters/sounds/intercom_loop.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/intercom_loop.ogg
rename to modular_nova/modules/encounters/sounds/intercom_loop.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/morse.ogg b/modular_nova/modules/encounters/sounds/morse.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/morse.ogg
rename to modular_nova/modules/encounters/sounds/morse.ogg
diff --git a/modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg b/modular_nova/modules/encounters/sounds/shell_out_tiny.ogg
similarity index 100%
rename from modular_skyrat/modules/encounters/sounds/shell_out_tiny.ogg
rename to modular_nova/modules/encounters/sounds/shell_out_tiny.ogg
diff --git a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm
similarity index 83%
rename from modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm
rename to modular_nova/modules/energy_axe/code/energy_fireaxe.dm
index a956ebce1bf..7dffbc0b2c4 100644
--- a/modular_skyrat/modules/energy_axe/code/energy_fireaxe.dm
+++ b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm
@@ -1,13 +1,13 @@
// Energy fire axes, for DS-2
/obj/item/fireaxe/energy
- icon = 'modular_skyrat/master_files/icons/obj/energy_axe.dmi'
+ icon = 'modular_nova/master_files/icons/obj/energy_axe.dmi'
icon_state = "energy_axe0"
base_icon_state = "energy_axe"
worn_icon_state = "energy_axe"
- lefthand_file = 'modular_skyrat/master_files/icons/mob/energyaxe_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/energyaxe_righthand.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/energyaxe_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/energyaxe_righthand.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
name = "energy fire axe"
desc = "You aren't quite sure if this counts as a fire axe anymore, but it sure is fancy! A tag hangs off of it reading: \"property of the Gorlex Marauders\""
force = 5
diff --git a/modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm b/modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm
similarity index 91%
rename from modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm
rename to modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm
index ab326233ff5..ef52b367924 100644
--- a/modular_skyrat/modules/energy_axe/code/energy_fireaxe_case.dm
+++ b/modular_nova/modules/energy_axe/code/energy_fireaxe_case.dm
@@ -1,7 +1,7 @@
/obj/structure/closet/secure_closet/ds2atmos
name = "energy axe cabinet"
desc = "A cabinet storing an energy fire axe along with basic firefighting tools."
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
icon_state = "riot"
req_access = list(ACCESS_SYNDICATE)
diff --git a/modular_skyrat/modules/escape_menu/code/escape_menu_skyrat.dm b/modular_nova/modules/escape_menu/code/escape_menu_skyrat.dm
similarity index 100%
rename from modular_skyrat/modules/escape_menu/code/escape_menu_skyrat.dm
rename to modular_nova/modules/escape_menu/code/escape_menu_skyrat.dm
diff --git a/modular_skyrat/modules/escape_menu/code/readme.md b/modular_nova/modules/escape_menu/code/readme.md
similarity index 100%
rename from modular_skyrat/modules/escape_menu/code/readme.md
rename to modular_nova/modules/escape_menu/code/readme.md
diff --git a/modular_skyrat/modules/events/code/_event_globalvars.dm b/modular_nova/modules/events/code/_event_globalvars.dm
similarity index 100%
rename from modular_skyrat/modules/events/code/_event_globalvars.dm
rename to modular_nova/modules/events/code/_event_globalvars.dm
diff --git a/modular_skyrat/modules/events/code/event_spawner.dm b/modular_nova/modules/events/code/event_spawner.dm
similarity index 98%
rename from modular_skyrat/modules/events/code/event_spawner.dm
rename to modular_nova/modules/events/code/event_spawner.dm
index bc375763455..83ae0f6faa5 100644
--- a/modular_skyrat/modules/events/code/event_spawner.dm
+++ b/modular_nova/modules/events/code/event_spawner.dm
@@ -1,5 +1,5 @@
/obj/character_event_spawner
- icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi'
+ icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi'
icon_state = "cryopod"
var/list/species_whitelist
diff --git a/modular_skyrat/modules/events/code/event_spawner_menu.dm b/modular_nova/modules/events/code/event_spawner_menu.dm
similarity index 100%
rename from modular_skyrat/modules/events/code/event_spawner_menu.dm
rename to modular_nova/modules/events/code/event_spawner_menu.dm
diff --git a/modular_skyrat/modules/events/readme.md b/modular_nova/modules/events/readme.md
similarity index 100%
rename from modular_skyrat/modules/events/readme.md
rename to modular_nova/modules/events/readme.md
diff --git a/modular_skyrat/modules/examinemore/code/examine_more.dm b/modular_nova/modules/examinemore/code/examine_more.dm
similarity index 100%
rename from modular_skyrat/modules/examinemore/code/examine_more.dm
rename to modular_nova/modules/examinemore/code/examine_more.dm
diff --git a/modular_skyrat/modules/examinemore/code/readme.md b/modular_nova/modules/examinemore/code/readme.md
similarity index 100%
rename from modular_skyrat/modules/examinemore/code/readme.md
rename to modular_nova/modules/examinemore/code/readme.md
diff --git a/modular_nova/modules/exp_corps/code/clothing.dm b/modular_nova/modules/exp_corps/code/clothing.dm
new file mode 100644
index 00000000000..b7135eb1596
--- /dev/null
+++ b/modular_nova/modules/exp_corps/code/clothing.dm
@@ -0,0 +1,274 @@
+/obj/item/clothing/under/rank/expeditionary_corps
+ name = "expeditionary corps uniform"
+ desc = "A rugged uniform for those who see the worst at the edges of the galaxy."
+ icon_state = "exp_corps"
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ armor_type = /datum/armor/clothing_under/rank_expeditionary_corps
+ strip_delay = 7 SECONDS
+ alt_covers_chest = TRUE
+ sensor_mode = SENSOR_COORDS
+ random_sensor = FALSE
+
+/datum/armor/clothing_under/rank_expeditionary_corps
+ fire = 15
+ acid = 15
+
+/obj/item/storage/belt/military/expeditionary_corps
+ name = "expeditionary corps chest rig"
+ desc = "A set of tactical webbing worn by expeditionary corps."
+ icon_state = "webbing_exp_corps"
+ worn_icon_state = "webbing_exp_corps"
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Webbing" = list(
+ RESKIN_ICON_STATE = "webbing_exp_corps",
+ RESKIN_WORN_ICON_STATE = "webbing_exp_corps"
+ ),
+ "Belt" = list(
+ RESKIN_ICON_STATE = "belt_exp_corps",
+ RESKIN_WORN_ICON_STATE = "belt_exp_corps"
+ ),
+ )
+
+/obj/item/storage/belt/military/expeditionary_corps/combat_tech
+ name = "combat tech's chest rig"
+
+/obj/item/storage/belt/military/expeditionary_corps/combat_tech/PopulateContents()
+ new /obj/item/screwdriver(src)
+ new /obj/item/wrench(src)
+ new /obj/item/weldingtool(src)
+ new /obj/item/crowbar(src)
+ new /obj/item/wirecutters(src)
+ new /obj/item/multitool(src)
+ new /obj/item/stack/cable_coil(src)
+
+/obj/item/storage/belt/military/expeditionary_corps/field_medic
+ name = "field medic's chest rig"
+
+/obj/item/storage/belt/military/expeditionary_corps/field_medic/PopulateContents()
+ new /obj/item/scalpel(src)
+ new /obj/item/circular_saw/field_medic(src)
+ new /obj/item/hemostat(src)
+ new /obj/item/retractor(src)
+ new /obj/item/cautery(src)
+ new /obj/item/surgical_drapes(src)
+ new /obj/item/bonesetter(src)
+
+/obj/item/storage/belt/military/expeditionary_corps/pointman
+ name = "pointman's chest rig"
+
+/obj/item/storage/belt/military/expeditionary_corps/pointman/PopulateContents()
+ new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src)
+ new /obj/item/stack/sheet/plasteel(src,5)
+ new /obj/item/reagent_containers/cup/bottle/morphine(src)
+
+/obj/item/storage/belt/military/expeditionary_corps/marksman
+ name = "marksman's chest rig"
+
+/obj/item/storage/belt/military/expeditionary_corps/marksman/PopulateContents()
+ new /obj/item/binoculars(src)
+ new /obj/item/storage/fancy/cigarettes/cigpack_robust(src)
+ new /obj/item/lighter(src)
+ new /obj/item/clothing/mask/bandana/skull(src)
+
+/obj/item/clothing/shoes/combat/expeditionary_corps
+ name = "expeditionary corps boots"
+ desc = "High speed, low drag combat boots."
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
+ icon_state = "exp_corps"
+ inhand_icon_state = "jackboots"
+
+/obj/item/clothing/gloves/color/black/expeditionary_corps
+ name = "expeditionary corps gloves"
+ icon_state = "exp_corps"
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = FIRE_PROOF
+
+/obj/item/clothing/gloves/chief_engineer/expeditionary_corps
+ name = "expeditionary corps insulated gloves"
+ icon_state = "exp_corps_eng"
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ worn_icon_state = "exp_corps"
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/chief_engineer_expeditionary_corps
+
+/datum/armor/chief_engineer_expeditionary_corps
+ fire = 80
+ acid = 50
+
+/obj/item/clothing/gloves/latex/nitrile/expeditionary_corps
+ name = "expeditionary corps medic gloves"
+ icon_state = "exp_corps_med"
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ worn_icon_state = "exp_corps"
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = FIRE_PROOF
+ armor_type = /datum/armor/nitrile_expeditionary_corps
+
+/datum/armor/nitrile_expeditionary_corps
+ fire = 80
+ acid = 50
+
+/obj/item/storage/backpack/duffelbag/expeditionary_corps
+ name = "expeditionary corps bag"
+ desc = "A large bag for holding extra tactical supplies."
+ icon_state = "exp_corps"
+ inhand_icon_state = "backpack"
+ icon = 'modular_nova/modules/exp_corps/icons/backpack.dmi'
+ worn_icon = 'modular_nova/modules/exp_corps/icons/mob_backpack.dmi'
+ uses_advanced_reskins = TRUE
+ unique_reskin = list(
+ "Backpack" = list(
+ RESKIN_ICON_STATE = "exp_corps",
+ RESKIN_WORN_ICON_STATE = "exp_corps"
+ ),
+ "Belt" = list(
+ RESKIN_ICON_STATE = "exp_corps_satchel",
+ RESKIN_WORN_ICON_STATE = "exp_corps_satchel"
+ ),
+ )
+
+/obj/item/clothing/suit/armor/vest/expeditionary_corps
+ name = "expeditionary corps armor vest"
+ desc = "An armored vest that provides okay protection against most types of damage."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon_state = "exp_corps"
+ body_parts_covered = CHEST|GROIN|ARMS
+ armor_type = /datum/armor/vest_expeditionary_corps
+ cold_protection = CHEST|GROIN|ARMS
+ heat_protection = CHEST|GROIN|ARMS
+ dog_fashion = null
+ allowed = list(
+ /obj/item/melee,
+ /obj/item/ammo_box,
+ /obj/item/ammo_casing,
+ /obj/item/flashlight,
+ /obj/item/gun,
+ /obj/item/knife,
+ /obj/item/reagent_containers,
+ /obj/item/restraints/handcuffs,
+ /obj/item/tank/internals/emergency_oxygen,
+ /obj/item/tank/internals/plasmaman
+ )
+
+
+/datum/armor/vest_expeditionary_corps
+ melee = 30
+ bullet = 30
+ laser = 30
+ energy = 30
+ bomb = 40
+ fire = 80
+ acid = 100
+ wound = 10
+
+/obj/item/clothing/head/helmet/expeditionary_corps
+ name = "expeditionary corps helmet"
+ desc = "A robust helmet worn by Expeditionary Corps troopers. Alt+click it to toggle the NV system."
+ icon_state = "exp_corps"
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
+ armor_type = /datum/armor/helmet_expeditionary_corps
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+ var/nightvision = FALSE
+ var/mob/living/carbon/current_user
+ actions_types = list(/datum/action/item_action/toggle_nv)
+
+/datum/armor/helmet_expeditionary_corps
+ melee = 20
+ bullet = 20
+ laser = 20
+ energy = 20
+ bomb = 30
+ fire = 80
+ acid = 100
+ wound = 10
+
+/datum/action/item_action/toggle_nv
+ name = "Toggle Nightvision"
+
+/datum/action/item_action/toggle_nv/Trigger(trigger_flags)
+ var/obj/item/clothing/head/helmet/expeditionary_corps/my_helmet = target
+ if(!my_helmet.current_user)
+ return
+ my_helmet.nightvision = !my_helmet.nightvision
+ if(my_helmet.nightvision)
+ to_chat(owner, span_notice("You flip the NV goggles down."))
+ my_helmet.enable_nv()
+ else
+ to_chat(owner, span_notice("You flip the NV goggles up."))
+ my_helmet.disable_nv()
+ my_helmet.update_appearance()
+
+/obj/item/clothing/head/helmet/expeditionary_corps/equipped(mob/user, slot)
+ . = ..()
+ current_user = user
+
+/obj/item/clothing/head/helmet/expeditionary_corps/proc/enable_nv(mob/user)
+ if(current_user)
+ var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes)
+ if(my_eyes)
+ my_eyes.color_cutoffs = list(10, 30, 10)
+ my_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE
+ current_user.add_client_colour(/datum/client_colour/glass_colour/lightgreen)
+
+/obj/item/clothing/head/helmet/expeditionary_corps/proc/disable_nv()
+ if(current_user)
+ var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes)
+ if(my_eyes)
+ my_eyes.color_cutoffs = initial(my_eyes.color_cutoffs)
+ my_eyes.flash_protect = initial(my_eyes.flash_protect)
+ current_user.remove_client_colour(/datum/client_colour/glass_colour/lightgreen)
+ current_user.update_sight()
+
+/obj/item/clothing/head/helmet/expeditionary_corps/AltClick(mob/user)
+ . = ..()
+ if(!current_user)
+ return
+ if(!can_interact(user))
+ return
+
+ nightvision = !nightvision
+ if(nightvision)
+ to_chat(user, span_notice("You flip the NV goggles down."))
+ enable_nv()
+ else
+ to_chat(user, span_notice("You flip the NV goggles up."))
+ disable_nv()
+ update_appearance()
+
+/obj/item/clothing/head/helmet/expeditionary_corps/dropped(mob/user)
+ . = ..()
+ disable_nv()
+ current_user = null
+
+/obj/item/clothing/head/helmet/expeditionary_corps/Destroy()
+ disable_nv()
+ current_user = null
+ return ..()
+
+/obj/item/clothing/head/helmet/expeditionary_corps/update_icon_state()
+ . = ..()
+ if(nightvision)
+ icon_state = "exp_corps_on"
+ else
+ icon_state = "exp_corps"
diff --git a/modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm b/modular_nova/modules/exp_corps/code/expeditionary_trooper.dm
similarity index 95%
rename from modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm
rename to modular_nova/modules/exp_corps/code/expeditionary_trooper.dm
index fdcbef42cab..53fd293f9f6 100644
--- a/modular_skyrat/modules/exp_corps/code/expeditionary_trooper.dm
+++ b/modular_nova/modules/exp_corps/code/expeditionary_trooper.dm
@@ -6,7 +6,7 @@
name = "expedition survival pack"
desc = "A box filled with useful items for your expedition!"
icon_state = "survival_pack"
- icon = 'modular_skyrat/modules/exp_corps/icons/survival_pack.dmi'
+ icon = 'modular_nova/modules/exp_corps/icons/survival_pack.dmi'
illustration = null
/obj/item/storage/box/expeditionary_survival/PopulateContents()
diff --git a/modular_nova/modules/exp_corps/code/gear.dm b/modular_nova/modules/exp_corps/code/gear.dm
new file mode 100644
index 00000000000..195224cdb73
--- /dev/null
+++ b/modular_nova/modules/exp_corps/code/gear.dm
@@ -0,0 +1,120 @@
+//Gateway Medkit, no more combat defibs!
+/obj/item/storage/medkit/expeditionary
+ name = "combat medical kit"
+ desc = "Now with 100% less bullshit."
+ icon_state = "medkit_tactical"
+ damagetype_healed = "all"
+
+/obj/item/storage/medkit/expeditionary/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/stack/medical/gauze(src)
+ new /obj/item/defibrillator/compact/loaded(src)
+ new /obj/item/reagent_containers/hypospray/combat(src)
+ new /obj/item/stack/medical/mesh/advanced(src)
+ new /obj/item/stack/medical/suture/medicated(src)
+ new /obj/item/clothing/glasses/hud/health(src)
+
+//Field Medic's weapon, no more tomahawk!
+/obj/item/circular_saw/field_medic
+ name = "bone saw"
+ desc = "Did that sting? SAW-ry!"
+ force = 20
+ icon_state = "bonesaw"
+ icon = 'modular_nova/modules/exp_corps/icons/bonesaw.dmi'
+ lefthand_file = 'modular_nova/modules/exp_corps/icons/bonesaw_l.dmi'
+ righthand_file = 'modular_nova/modules/exp_corps/icons/bonesaw_r.dmi'
+ inhand_icon_state = "bonesaw"
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ toolspeed = 0.2
+ throw_range = 3
+ w_class = WEIGHT_CLASS_SMALL
+
+//Pointman's riot shield. Fixable with 1 plasteel, crafting recipe for broken shield
+/obj/item/shield/riot/pointman
+ name = "pointman shield"
+ desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell."
+ icon_state = "riot"
+ icon = 'modular_nova/modules/exp_corps/icons/riot.dmi'
+ lefthand_file = 'modular_nova/modules/exp_corps/icons/riot_left.dmi'
+ righthand_file = 'modular_nova/modules/exp_corps/icons/riot_right.dmi'
+ force = 14
+ throwforce = 5
+ throw_speed = 1
+ throw_range = 1
+ block_chance = 60
+ w_class = WEIGHT_CLASS_BULKY
+ attack_verb_continuous = list("shoves", "bashes")
+ attack_verb_simple = list("shove", "bash")
+ transparent = TRUE
+ max_integrity = 200
+ var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with
+
+/obj/item/shield/riot/pointman/shatter(mob/living/carbon/human/owner)
+ playsound(owner, 'sound/effects/glassbr3.ogg', 100)
+ new /obj/item/pointman_broken((get_turf(src)))
+
+/obj/item/shield/riot/pointman/attackby(obj/item/W, mob/user, params)
+ if(istype(W, repairable_by))
+ var/obj/item/stack/sheet/plasteel_repair = W
+ plasteel_repair.use(1)
+ repair(user, params)
+ return ..()
+
+/obj/item/shield/riot/pointman/proc/repair(mob/user, params)
+ atom_integrity = max_integrity
+ if(user)
+ UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
+ to_chat(user, span_notice("You fix the damage on [src]."))
+
+/obj/item/pointman_broken
+ name = "broken pointman shield"
+ desc = "Might be able to be repaired with plasteel and a welder."
+ icon_state = "riot_broken"
+ icon = 'modular_nova/modules/exp_corps/icons/riot.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+
+//broken shield fixing
+/datum/crafting_recipe/pointman
+ name = "Broken Riot Repair"
+ result = /obj/item/shield/riot/pointman
+ reqs = list(/obj/item/pointman_broken = 1,
+ /obj/item/stack/sheet/plasteel = 3,
+ /obj/item/stack/sheet/rglass = 3)
+ time = 40
+ category = CAT_MISC
+ tool_behaviors = list(TOOL_WELDER)
+
+//Marksman's throwing knife and a pouch for it
+/obj/item/knife/combat/marksman
+ name = "throwing knife"
+ desc = "Very well weighted for throwing, feels awkward to use for anything else."
+ icon = 'modular_nova/modules/exp_corps/icons/throwing.dmi'
+ icon_state = "throwing"
+ force = 12
+ throwforce = 30
+
+/obj/item/storage/pouch/ammo/marksman
+ name = "marksman's knife pouch"
+ unique_reskin = NONE
+
+/obj/item/storage/pouch/ammo/marksman/Initialize(mapload)
+ . = ..()
+ create_storage(storage_type = /datum/storage/marksman)
+
+/datum/storage/marksman
+ max_total_storage = 60
+ max_slots = 10
+ numerical_stacking = TRUE
+ quickdraw = TRUE
+
+/datum/storage/marksman/New()
+ . = ..()
+ can_hold = typecacheof(list(/obj/item/knife/combat))
+
+/obj/item/storage/pouch/ammo/marksman/PopulateContents() //can kill most basic enemies with 5 knives, though marksmen shouldn't be soloing enemies anyways
+ new /obj/item/knife/combat/marksman(src)
+ new /obj/item/knife/combat/marksman(src)
+ new /obj/item/knife/combat/marksman(src)
+ new /obj/item/knife/combat/marksman(src)
+ new /obj/item/knife/combat/marksman(src)
diff --git a/modular_nova/modules/exp_corps/code/tomahawk.dm b/modular_nova/modules/exp_corps/code/tomahawk.dm
new file mode 100644
index 00000000000..13033474779
--- /dev/null
+++ b/modular_nova/modules/exp_corps/code/tomahawk.dm
@@ -0,0 +1,24 @@
+/obj/item/melee/tomahawk
+ name = "expeditionary tomahawk"
+ desc = "A somewhat dulled axe blade upon a short fibremetal handle."
+ icon = 'modular_nova/modules/exp_corps/icons/tomahawk.dmi'
+ icon_state = "tomahawk"
+ inhand_icon_state = "tomahawk"
+ lefthand_file = 'modular_nova/modules/exp_corps/icons/tomahawk_l.dmi'
+ righthand_file = 'modular_nova/modules/exp_corps/icons/tomahawk_r.dmi'
+ worn_icon = 'modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi'
+ obj_flags = CONDUCTS_ELECTRICITY
+ force = 15 //Equivalent to a survival knife
+ w_class = WEIGHT_CLASS_SMALL
+ throwforce = 18
+ throw_speed = 4
+ throw_range = 8
+ embedding = list("pain_mult" = 6, "embed_chance" = 60, "fall_chance" = 10)
+ attack_verb_continuous = list("chops", "tears", "lacerates", "cuts")
+ attack_verb_simple = list("chop", "tear", "lacerate", "cut")
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ sharpness = SHARP_EDGED
+
+/obj/item/melee/tomahawk/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/butchering, 70, 100)
diff --git a/modular_skyrat/modules/exp_corps/icons/backpack.dmi b/modular_nova/modules/exp_corps/icons/backpack.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/backpack.dmi
rename to modular_nova/modules/exp_corps/icons/backpack.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw.dmi b/modular_nova/modules/exp_corps/icons/bonesaw.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/bonesaw.dmi
rename to modular_nova/modules/exp_corps/icons/bonesaw.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi b/modular_nova/modules/exp_corps/icons/bonesaw_l.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi
rename to modular_nova/modules/exp_corps/icons/bonesaw_l.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi b/modular_nova/modules/exp_corps/icons/bonesaw_r.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi
rename to modular_nova/modules/exp_corps/icons/bonesaw_r.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/closet.dmi b/modular_nova/modules/exp_corps/icons/closet.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/closet.dmi
rename to modular_nova/modules/exp_corps/icons/closet.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/exp_crate.dmi b/modular_nova/modules/exp_corps/icons/exp_crate.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/exp_crate.dmi
rename to modular_nova/modules/exp_corps/icons/exp_crate.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi b/modular_nova/modules/exp_corps/icons/mob_backpack.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi
rename to modular_nova/modules/exp_corps/icons/mob_backpack.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/riot.dmi b/modular_nova/modules/exp_corps/icons/riot.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/riot.dmi
rename to modular_nova/modules/exp_corps/icons/riot.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/riot_left.dmi b/modular_nova/modules/exp_corps/icons/riot_left.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/riot_left.dmi
rename to modular_nova/modules/exp_corps/icons/riot_left.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/riot_right.dmi b/modular_nova/modules/exp_corps/icons/riot_right.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/riot_right.dmi
rename to modular_nova/modules/exp_corps/icons/riot_right.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/survival_pack.dmi b/modular_nova/modules/exp_corps/icons/survival_pack.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/survival_pack.dmi
rename to modular_nova/modules/exp_corps/icons/survival_pack.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/throwing.dmi b/modular_nova/modules/exp_corps/icons/throwing.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/throwing.dmi
rename to modular_nova/modules/exp_corps/icons/throwing.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk.dmi b/modular_nova/modules/exp_corps/icons/tomahawk.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/tomahawk.dmi
rename to modular_nova/modules/exp_corps/icons/tomahawk.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_l.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi
rename to modular_nova/modules/exp_corps/icons/tomahawk_l.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_r.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi
rename to modular_nova/modules/exp_corps/icons/tomahawk_r.dmi
diff --git a/modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi b/modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi
rename to modular_nova/modules/exp_corps/icons/tomahawk_worn.dmi
diff --git a/modular_skyrat/modules/extra_vv/code/extra_vv.dm b/modular_nova/modules/extra_vv/code/extra_vv.dm
similarity index 100%
rename from modular_skyrat/modules/extra_vv/code/extra_vv.dm
rename to modular_nova/modules/extra_vv/code/extra_vv.dm
diff --git a/modular_skyrat/modules/faction/code/clothes.dm b/modular_nova/modules/faction/code/clothes.dm
similarity index 100%
rename from modular_skyrat/modules/faction/code/clothes.dm
rename to modular_nova/modules/faction/code/clothes.dm
diff --git a/modular_skyrat/modules/faction/code/id.dm b/modular_nova/modules/faction/code/id.dm
similarity index 100%
rename from modular_skyrat/modules/faction/code/id.dm
rename to modular_nova/modules/faction/code/id.dm
diff --git a/modular_skyrat/modules/faction/code/mapping/mapping_helpers.dm b/modular_nova/modules/faction/code/mapping/mapping_helpers.dm
similarity index 100%
rename from modular_skyrat/modules/faction/code/mapping/mapping_helpers.dm
rename to modular_nova/modules/faction/code/mapping/mapping_helpers.dm
diff --git a/modular_nova/modules/faction/code/mapping/ruins.dm b/modular_nova/modules/faction/code/mapping/ruins.dm
new file mode 100644
index 00000000000..e1689c41429
--- /dev/null
+++ b/modular_nova/modules/faction/code/mapping/ruins.dm
@@ -0,0 +1,6 @@
+/datum/map_template/shuttle/tradership
+ prefix = "modular_nova/modules/faction/maps/shuttles/"
+ suffix = "faction"
+ who_can_purchase = null
+ name = "Faction Trader Ship"
+ port_id = "tradership"
diff --git a/modular_skyrat/modules/faction/code/outfit.dm b/modular_nova/modules/faction/code/outfit.dm
similarity index 100%
rename from modular_skyrat/modules/faction/code/outfit.dm
rename to modular_nova/modules/faction/code/outfit.dm
diff --git a/modular_skyrat/modules/faction/code/radio.dm b/modular_nova/modules/faction/code/radio.dm
similarity index 100%
rename from modular_skyrat/modules/faction/code/radio.dm
rename to modular_nova/modules/faction/code/radio.dm
diff --git a/modular_skyrat/modules/faction/maps/shuttles/tradership_faction.dmm b/modular_nova/modules/faction/maps/shuttles/tradership_faction.dmm
similarity index 100%
rename from modular_skyrat/modules/faction/maps/shuttles/tradership_faction.dmm
rename to modular_nova/modules/faction/maps/shuttles/tradership_faction.dmm
diff --git a/modular_skyrat/modules/faction/readme.md b/modular_nova/modules/faction/readme.md
similarity index 100%
rename from modular_skyrat/modules/faction/readme.md
rename to modular_nova/modules/faction/readme.md
diff --git a/modular_skyrat/modules/fauna_reagent/fauna_reagent.dm b/modular_nova/modules/fauna_reagent/fauna_reagent.dm
similarity index 88%
rename from modular_skyrat/modules/fauna_reagent/fauna_reagent.dm
rename to modular_nova/modules/fauna_reagent/fauna_reagent.dm
index 796dbef0daf..f922d1312a3 100644
--- a/modular_skyrat/modules/fauna_reagent/fauna_reagent.dm
+++ b/modular_nova/modules/fauna_reagent/fauna_reagent.dm
@@ -30,12 +30,12 @@
var/datum/reagent/toxin/toxin_reagent = reagents_within
var/toxin_damage = round(toxin_reagent.toxpwr)
adjustHealth(toxin_damage + 1)
- reagents.remove_reagent(toxin_reagent.type, 0.5)
+ reagents?.remove_reagent(toxin_reagent.type, 0.5)
continue
if(istype(reagents_within, /datum/reagent/medicine))
adjustHealth(-1)
- reagents.remove_reagent(reagents_within.type, 0.5)
+ reagents?.remove_reagent(reagents_within.type, 0.5)
/mob/living/basic
/// whether the simple animal can be healed/damaged through reagents
@@ -63,9 +63,9 @@
var/datum/reagent/toxin/toxin_reagent = reagents_within
var/toxin_damage = round(toxin_reagent.toxpwr)
adjust_health(toxin_damage + 1)
- reagents.remove_reagent(toxin_reagent.type, 0.5)
+ reagents?.remove_reagent(toxin_reagent.type, 0.5)
continue
if(istype(reagents_within, /datum/reagent/medicine))
adjust_health(-1)
- reagents.remove_reagent(reagents_within.type, 0.5)
+ reagents?.remove_reagent(reagents_within.type, 0.5)
diff --git a/modular_nova/modules/food_replicator/code/clothing.dm b/modular_nova/modules/food_replicator/code/clothing.dm
new file mode 100644
index 00000000000..6eada23458d
--- /dev/null
+++ b/modular_nova/modules/food_replicator/code/clothing.dm
@@ -0,0 +1,64 @@
+/obj/item/clothing/under/colonial
+ name = "colonial outfit"
+ desc = "Fancy white satin shirt and a pair of cotton-blend pants with a black synthleather belt."
+ icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi'
+ worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi'
+ icon_state = "under_colonial"
+
+/obj/item/clothing/under/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
+ if(is_species(equipper, /datum/species/teshari))
+ to_chat(equipper, span_warning("[src] is far too big for you!"))
+ return FALSE
+
+ return ..()
+
+/obj/item/clothing/shoes/jackboots/colonial
+ name = "colonial half-boots"
+ desc = "Good old laceless boots, with a sturdy plastic toe to, theoretically, keep your toes uncrushed."
+ icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi'
+ worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi'
+ icon_state = "boots_colonial"
+
+/obj/item/clothing/shoes/jackboots/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
+ if(is_species(equipper, /datum/species/teshari))
+ to_chat(equipper, span_warning("[src] is far too big for you!"))
+ return FALSE
+
+ return ..()
+
+/obj/item/clothing/neck/cloak/colonial
+ name = "colonial cloak"
+ desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design."
+ slot_flags = ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK
+ w_class = WEIGHT_CLASS_NORMAL
+ icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi'
+ worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi'
+ icon_state = "cloak_colonial"
+ allowed = /obj/item/clothing/suit/jacket/leather::allowed // these are special and can be worn in the suit slot, so we need this var to be defined
+
+/obj/item/clothing/neck/cloak/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
+ if(is_species(equipper, /datum/species/teshari))
+ to_chat(equipper, span_warning("[src] is far too big for you!"))
+ return FALSE
+
+ return ..()
+
+/obj/item/clothing/head/hats/colonial
+ name = "colonial cap"
+ desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well."
+ icon = 'modular_nova/modules/food_replicator/icons/clothing.dmi'
+ worn_icon = 'modular_nova/modules/food_replicator/icons/clothing_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/food_replicator/icons/clothing_digi.dmi'
+ icon_state = "cap_colonial"
+ inhand_icon_state = null
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
+ if(is_species(equipper, /datum/species/teshari))
+ to_chat(equipper, span_warning("[src] is far too big for you!"))
+ return FALSE
+
+ return ..()
diff --git a/modular_nova/modules/food_replicator/code/medical.dm b/modular_nova/modules/food_replicator/code/medical.dm
new file mode 100644
index 00000000000..5f29829dd74
--- /dev/null
+++ b/modular_nova/modules/food_replicator/code/medical.dm
@@ -0,0 +1,66 @@
+/obj/item/stack/medical/suture/bloody
+ name = "hemostatic suture"
+ desc = "Bloodclotting agent-infused sterile sutures used to seal up cuts and lacerations and reverse critical bleedings."
+ icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi'
+ icon_state = "hemo_suture"
+ heal_brute = 7
+ stop_bleeding = 1
+ grind_results = list(/datum/reagent/medicine/coagulant = 2)
+ merge_type = /obj/item/stack/medical/suture/bloody
+
+/obj/item/stack/medical/suture/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user)
+ . = ..()
+ if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE)
+ healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2)
+ healed_mob.adjustOxyLoss(-amount_healed)
+
+/obj/item/stack/medical/mesh/bloody
+ name = "hemostatic mesh"
+ desc = "A hemostatic mesh used to dress burns and stimulate hemopoiesis. Due to its blood-related purpose, it is worse at sanitizing infections."
+ icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi'
+ icon_state = "hemo_mesh"
+ heal_burn = 7
+ sanitization = 0.5
+ flesh_regeneration = 1.75
+ stop_bleeding = 0.25
+ grind_results = list(/datum/reagent/medicine/coagulant = 2)
+ merge_type = /obj/item/stack/medical/mesh/bloody
+
+/obj/item/stack/medical/mesh/bloody/update_icon_state()
+ if(is_open)
+ return ..()
+
+ icon_state = "hemo_mesh_closed"
+
+/obj/item/stack/medical/mesh/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user)
+ . = ..()
+ if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE)
+ healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2)
+ healed_mob.adjustOxyLoss(-amount_healed)
+
+/obj/item/reagent_containers/hypospray/medipen/glucose
+ name = "pressurised glucose medipen"
+ desc = "A medipen for keeping yourself going during prolonged EVA shifts, injects a dose of glucose into your bloodstream. Recommended for use in low-pressure environments."
+ icon = 'modular_nova/modules/food_replicator/icons/medicine.dmi'
+ icon_state = "glupen"
+ inhand_icon_state = "stimpen"
+ base_icon_state = "glupen"
+ volume = 15
+ amount_per_transfer_from_this = 15
+ list_reagents = list(/datum/reagent/consumable/nutriment/glucose = 15)
+
+/obj/item/reagent_containers/hypospray/medipen/glucose/inject(mob/living/affected_mob, mob/user)
+ if(lavaland_equipment_pressure_check(get_turf(user)))
+ amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
+ return ..()
+
+ if(DOING_INTERACTION(user, DOAFTER_SOURCE_SURVIVALPEN))
+ to_chat(user,span_notice("You are too busy to use \the [src]!"))
+ return
+
+ to_chat(user,span_notice("You start manually releasing the low-pressure gauge..."))
+ if(!do_after(user, 10 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN))
+ return
+
+ amount_per_transfer_from_this = initial(amount_per_transfer_from_this) * 0.5
+ return ..()
diff --git a/modular_nova/modules/food_replicator/code/rationpacks.dm b/modular_nova/modules/food_replicator/code/rationpacks.dm
new file mode 100644
index 00000000000..15629dd3172
--- /dev/null
+++ b/modular_nova/modules/food_replicator/code/rationpacks.dm
@@ -0,0 +1,188 @@
+/obj/item/food/colonial_course
+ name = "undefined colonial course"
+ desc = "Something you shouldn't see. But it's edible."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ icon_state = "borgir"
+ base_icon_state = "borgir"
+ food_reagents = list(/datum/reagent/consumable/nutriment = 20)
+ tastes = list("crayon powder" = 1)
+ foodtypes = VEGETABLES | GRAIN
+ w_class = WEIGHT_CLASS_SMALL
+ preserved_food = TRUE
+
+/obj/item/food/colonial_course/attack_self(mob/user, modifiers)
+ if(preserved_food)
+ preserved_food = FALSE
+ icon_state = "[base_icon_state]_unwrapped"
+ to_chat(user, span_notice("You unpackage \the [src]."))
+ playsound(user.loc, 'sound/items/foodcanopen.ogg', 50)
+
+/obj/item/food/colonial_course/attack(mob/living/target, mob/user, def_zone)
+ if(preserved_food)
+ to_chat(user, span_warning("[src] is still packaged!"))
+ return FALSE
+
+ return ..()
+
+/obj/item/food/colonial_course/pljeskavica
+ name = "pljeskavica"
+ desc = "Freshly-printed steaming hot burger consisting of a biogenerator-produced handcraft-imitating buns, with a minced meat patty inbetween, among various vegetables and sauces.\
+ Looks good enough for something as replicated as this. Its packaging is covered in copious amounts of information on its nutritional facts, contents and the expiry date. Sadly, it's all written in Pan-Slavic."
+ trash_type = /obj/item/trash/pljeskavica
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 3,
+ /datum/reagent/consumable/nutriment/protein = 9,
+ /datum/reagent/consumable/nutriment/vitamin = 4,
+ )
+ tastes = list("bun" = 2, "spiced meat" = 10, "death of veganism" = 3)
+ foodtypes = VEGETABLES | GRAIN | MEAT
+
+/obj/item/food/colonial_course/nachos
+ name = "plain nachos tray"
+ desc = "A vacuum-sealed package with what seems to be a generous serving of triangular corn chips, with three sections reserved for a salsa, cheese and guacamole sauces.\
+ Probably the best-looking food you can find in these rations, perhaps due to its simplicity."
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 5,
+ /datum/reagent/consumable/nutriment/vitamin = 2,
+ )
+ trash_type = /obj/item/trash/nachos
+ icon_state = "nacho"
+ base_icon_state = "nacho"
+ tastes = list("corn chips" = 5, "'artificial' organic sauces" = 5)
+ foodtypes = GRAIN | FRIED | DAIRY
+
+/obj/item/food/colonial_course/blins
+ name = "condensed milk crepes"
+ desc = "A vacuum-sealed four-pack of stuffed crepes with a minimal amount of markings. There is nothing else to it, to be frank.\
+ Surprisingly tasty for its looks, as long as you're not lactose intolerant, on diet, or vegan. The back of the packaging is covered in a mass of information detailing the product."
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 2,
+ /datum/reagent/consumable/caramel = 3,
+ /datum/reagent/consumable/milk = 4,
+ )
+ trash_type = /obj/item/trash/blins
+ icon_state = "blin"
+ base_icon_state = "blin"
+ tastes = list("insane amount of sweetness" = 10, "crepes" = 3)
+ foodtypes = SUGAR | GRAIN | DAIRY | BREAKFAST
+
+/obj/item/reagent_containers/cup/glass/coffee/colonial
+ name = "colonial thermocup"
+ desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side. \
+ This particular one comes prefilled with a single serving of coffee powder."
+ special_desc = "A small instruction on the side reads: \"For use in food replicators; mix water and powdered solutions in one-to-one proportions. \
+ For cocoa, mix milk and powdered solution in one-to-one proportion.\" "
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ list_reagents = list(/datum/reagent/consumable/powdered_coffee = 25)
+
+/obj/item/reagent_containers/cup/glass/coffee/colonial/empty
+ desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side."
+ list_reagents = null
+
+/obj/item/trash/pljeskavica
+ name = "pljeskavica wrapping paper"
+ desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, crumpled into a ball. It's probably best to dispose of it."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ icon_state = "borgir_trash"
+
+/obj/item/trash/nachos
+ name = "empty nachos tray"
+ desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, a plastic food tray with not much use anymore. It's probably best to dispose of it or recycle it."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)
+ icon_state = "nacho_trash"
+
+/obj/item/trash/blins
+ name = "empty crepes wrapper"
+ desc = "Empty torn wrapper that used to hold something ridiculously sweet. It's probably best to recycle it."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 0.5)
+ icon_state = "blin_trash"
+
+/obj/item/storage/box/gum/colonial
+ name = "mixed bubblegum packet"
+ desc = "The packaging is entirely written in Pan-Slavic, with a small blurb of Sol Common. You would need to take a better look to read it, though, as it is written quite small."
+ special_desc = "Examining the small text reveals the following: \"Foreign colonization ration, model J: mixed origin, adult. Bubblegum package, medicinal, recreational. \
+ Do not overconsume. Certain strips contain nicotine.\" "
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ icon_state = "bubblegum"
+
+/obj/item/storage/box/gum/colonial/PopulateContents()
+ new /obj/item/food/bubblegum(src)
+ new /obj/item/food/bubblegum(src)
+ new /obj/item/food/bubblegum/nicotine(src)
+ new /obj/item/food/bubblegum/nicotine(src)
+
+/obj/item/storage/box/utensils
+ name = "utensils package"
+ desc = "A small package containing various utensils required for human consumption of various foods. \
+ In a normal situation contains a plastic fork, a plastic spoon, and two serviettes."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ icon_state = "utensil_box"
+ w_class = WEIGHT_CLASS_TINY
+ illustration = null
+ foldable_result = null
+
+/obj/item/storage/box/utensils/Initialize(mapload)
+ . = ..()
+ atom_storage.set_holdable(list(
+ /obj/item/kitchen/spoon/plastic,
+ /obj/item/kitchen/fork/plastic,
+ /obj/item/serviette,
+ ))
+ atom_storage.max_slots = 4
+
+/obj/item/storage/box/utensils/PopulateContents()
+ new /obj/item/kitchen/spoon/plastic(src)
+ new /obj/item/kitchen/fork/plastic(src)
+ new /obj/item/serviette/colonial(src)
+ new /obj/item/serviette/colonial(src)
+
+/obj/item/serviette/colonial
+ name = "colonial napkin"
+ desc = "To clean all the mess. Comes with a custom combined design of red and blue."
+ icon_state = "napkin_unused"
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ used_serviette = /obj/item/serviette_used/colonial
+
+/obj/item/serviette_used/colonial
+ name = "dirty colonial napkin"
+ desc = "No longer useful, super dirty, or soaked, or otherwise unrecognisable."
+ icon_state = "napkin_used"
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+
+/obj/item/storage/box/colonial_rations
+ name = "foreign colonization ration"
+ desc = "A freshly printed civilian MRE, or more specifically a lunchtime food package, for use in the early colonization times by the first settlers of what is now known as the NRI. \
+ The lack of any imprinted dates, as well as its origin, the food replicator , should probably give you a good enough hint at its short, if reasonable, expiry time."
+ icon = 'modular_nova/modules/food_replicator/icons/rationpack.dmi'
+ icon_state = "mre_package"
+ foldable_result = null
+ illustration = null
+
+/obj/item/storage/box/colonial_rations/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 6
+ atom_storage.locked = TRUE
+
+/obj/item/storage/box/colonial_rations/attack_self(mob/user, modifiers)
+ if(user)
+ if(atom_storage.locked == TRUE)
+ atom_storage.locked = FALSE
+ icon_state = "mre_package_open"
+ balloon_alert(user, "unsealed!")
+ return ..()
+ else
+ atom_storage.locked = TRUE
+ atom_storage.close_all()
+ icon_state = "mre_package"
+ balloon_alert(user, "resealed!")
+ return
+
+/obj/item/storage/box/colonial_rations/PopulateContents()
+ new /obj/item/food/colonial_course/pljeskavica(src)
+ new /obj/item/food/colonial_course/nachos(src)
+ new /obj/item/food/colonial_course/blins(src)
+ new /obj/item/reagent_containers/cup/glass/coffee/colonial(src)
+ new /obj/item/storage/box/gum/colonial(src)
+ new /obj/item/storage/box/utensils(src)
diff --git a/modular_skyrat/modules/food_replicator/code/reagents.dm b/modular_nova/modules/food_replicator/code/reagents.dm
similarity index 100%
rename from modular_skyrat/modules/food_replicator/code/reagents.dm
rename to modular_nova/modules/food_replicator/code/reagents.dm
diff --git a/modular_skyrat/modules/food_replicator/code/replicator.dm b/modular_nova/modules/food_replicator/code/replicator.dm
similarity index 94%
rename from modular_skyrat/modules/food_replicator/code/replicator.dm
rename to modular_nova/modules/food_replicator/code/replicator.dm
index 9fcef963545..eeb54c68876 100644
--- a/modular_skyrat/modules/food_replicator/code/replicator.dm
+++ b/modular_nova/modules/food_replicator/code/replicator.dm
@@ -8,7 +8,7 @@
as the NRI. The Gencrate is at its core a matter resequencer, a highly specialized subtype of biogenerator which performs a sort of transmutation using organic \
compounds; normally from large-scale crops or waste product. With sufficient supply, the machine is capable of making a wide variety of provisions, \
from clothes to food to first-aid medical supplies."
- icon = 'modular_skyrat/modules/food_replicator/icons/biogenerator.dmi'
+ icon = 'modular_nova/modules/food_replicator/icons/biogenerator.dmi'
circuit = /obj/item/circuitboard/machine/biogenerator/food_replicator
efficiency = 0.75
productivity = 0.75
diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_clothing.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_clothing.dm
similarity index 100%
rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_clothing.dm
rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_clothing.dm
diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_food.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_food.dm
similarity index 100%
rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_food.dm
rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_food.dm
diff --git a/modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_medical.dm b/modular_nova/modules/food_replicator/code/replicator_designs/replicator_medical.dm
similarity index 100%
rename from modular_skyrat/modules/food_replicator/code/replicator_designs/replicator_medical.dm
rename to modular_nova/modules/food_replicator/code/replicator_designs/replicator_medical.dm
diff --git a/modular_nova/modules/food_replicator/code/storage.dm b/modular_nova/modules/food_replicator/code/storage.dm
new file mode 100644
index 00000000000..fb93b53ff2a
--- /dev/null
+++ b/modular_nova/modules/food_replicator/code/storage.dm
@@ -0,0 +1,35 @@
+/obj/item/storage/pouch/cin_medipens
+ name = "colonial medipen pouch"
+ desc = "A pouch for your (medi-)pens that goes in your pocket."
+ icon = 'modular_nova/modules/food_replicator/icons/pouch.dmi'
+ icon_state = "medipen_pouch"
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/storage/pouch/cin_medipens/update_icon_state()
+ icon_state = "[initial(icon_state)]_[contents.len]"
+ return ..()
+
+/obj/item/storage/pouch/cin_medipens/Initialize(mapload)
+ . = ..()
+ update_appearance()
+
+/obj/item/storage/pouch/cin_medipens/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
+ atom_storage.max_total_storage = 4
+ atom_storage.max_slots = 4
+ atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray/medipen, /obj/item/pen, /obj/item/flashlight/pen))
+
+/obj/item/storage/pouch/cin_medkit
+ name = "colonial first aid kit"
+ desc = "A medical case that goes in your pocket. Can be used to store things unrelated to medicine, except for guns, ammo and raw materials."
+ icon = 'modular_nova/modules/food_replicator/icons/pouch.dmi'
+ icon_state = "cfak"
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/storage/pouch/cin_medkit/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
+ atom_storage.max_total_storage = 4
+ atom_storage.max_slots = 4
+ atom_storage.cant_hold = typecacheof(list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/stack/sheet))
diff --git a/modular_skyrat/modules/food_replicator/icons/biogenerator.dmi b/modular_nova/modules/food_replicator/icons/biogenerator.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/biogenerator.dmi
rename to modular_nova/modules/food_replicator/icons/biogenerator.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/clothing.dmi b/modular_nova/modules/food_replicator/icons/clothing.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/clothing.dmi
rename to modular_nova/modules/food_replicator/icons/clothing.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi b/modular_nova/modules/food_replicator/icons/clothing_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi
rename to modular_nova/modules/food_replicator/icons/clothing_digi.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi b/modular_nova/modules/food_replicator/icons/clothing_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi
rename to modular_nova/modules/food_replicator/icons/clothing_worn.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/medicine.dmi b/modular_nova/modules/food_replicator/icons/medicine.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/medicine.dmi
rename to modular_nova/modules/food_replicator/icons/medicine.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/pouch.dmi b/modular_nova/modules/food_replicator/icons/pouch.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/pouch.dmi
rename to modular_nova/modules/food_replicator/icons/pouch.dmi
diff --git a/modular_skyrat/modules/food_replicator/icons/rationpack.dmi b/modular_nova/modules/food_replicator/icons/rationpack.dmi
similarity index 100%
rename from modular_skyrat/modules/food_replicator/icons/rationpack.dmi
rename to modular_nova/modules/food_replicator/icons/rationpack.dmi
diff --git a/modular_skyrat/modules/ghostcafe/code/dusts_on_catatonia.dm b/modular_nova/modules/ghostcafe/code/dusts_on_catatonia.dm
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/code/dusts_on_catatonia.dm
rename to modular_nova/modules/ghostcafe/code/dusts_on_catatonia.dm
diff --git a/modular_skyrat/modules/ghostcafe/code/dusts_on_leaving_area.dm b/modular_nova/modules/ghostcafe/code/dusts_on_leaving_area.dm
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/code/dusts_on_leaving_area.dm
rename to modular_nova/modules/ghostcafe/code/dusts_on_leaving_area.dm
diff --git a/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm b/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm
new file mode 100644
index 00000000000..55a1c7d43d6
--- /dev/null
+++ b/modular_nova/modules/ghostcafe/code/ghost_cafe_items.dm
@@ -0,0 +1,15 @@
+/obj/structure/showcase/fake_cafe_console
+ name = "civilian console"
+ desc = "A stationary computer. This one comes preloaded with generic programs."
+ icon = 'icons/obj/machines/computer.dmi'
+ icon_state = "computer"
+
+/obj/structure/showcase/fake_cafe_console/rd
+ name = "R&D Console"
+ desc = "A console used to interface with R&D tools."
+
+/obj/structure/showcase/fake_cafe_console/rd/Initialize(mapload)
+ . = ..()
+ add_overlay("rdcomp")
+ add_overlay("rd_key")
+
diff --git a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm
similarity index 88%
rename from modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm
rename to modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm
index 74cde1544a3..61152a8abb7 100644
--- a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm
+++ b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm
@@ -10,7 +10,7 @@
prompt_name = "a ghost cafe robot"
infinite_use = TRUE
deletes_on_zero_uses_left = FALSE
- icon = 'modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi'
+ icon = 'modular_nova/modules/ghostcafe/icons/robot_storage.dmi'
icon_state = "robostorage"
anchored = TRUE
density = FALSE
@@ -28,8 +28,8 @@
var/area/A = get_area(src)
//new_spawn.AddElement(/datum/element/ghost_role_eligibility, free_ghosting = TRUE) SKYRAT PORT -- Needs to be completely rewritten
new_spawn.AddElement(/datum/element/dusts_on_catatonia)
- new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafewar, /area/centcom/holding/cafebotany,
- /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing))
+ new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe,
+ /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark))
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE)
ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE)
to_chat(new_spawn,span_warning("Ghosting is free! "))
@@ -56,8 +56,8 @@
if(new_spawn.client)
var/area/A = get_area(src)
new_spawn.AddElement(/datum/element/dusts_on_catatonia)
- new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafewar, /area/centcom/holding/cafebotany,
- /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing))
+ new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe,
+ /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark))
ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE)
ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE)
to_chat(new_spawn,span_warning("Ghosting is free! "))
diff --git a/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm
new file mode 100644
index 00000000000..3e3c4fe7f87
--- /dev/null
+++ b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm
@@ -0,0 +1,34 @@
+/turf/open/lava/fake
+ name = "lava"
+ desc = "Go on. Step in it. Maybe you'll be like some sort of Lava based Jesus."
+ planetary_atmos = TRUE
+ initial_gas_mix = OPENTURF_DEFAULT_ATMOS
+ lava_damage = 0
+ lava_firestacks = 0
+ temperature_damage = 0
+ immunity_trait = TRAIT_GHOSTROLE
+ immunity_resistance_flags = LAVA_PROOF
+
+/turf/open/floor/plating/vox
+ name = "nitrogen-filled plating"
+ desc = "Vox box certified."
+ initial_gas_mix = "n2=104;TEMP=293.15"
+
+/turf/open/indestructible/bathroom
+ icon = 'modular_nova/modules/ghostcafe/icons/floors.dmi';
+ icon_state = "titanium_blue_old";
+ name = "bathroom floor"
+ footstep = FOOTSTEP_FLOOR
+ tiled_dirt = FALSE
+
+/turf/open/indestructible/carpet
+ desc = "It's really cozy! Great for soft paws!";
+ icon = 'modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi';
+ icon_state = "carpet";
+ name = "soft carpet"
+ bullet_bounce_sound = null
+ footstep = FOOTSTEP_CARPET
+ barefootstep = FOOTSTEP_CARPET_BAREFOOT
+ clawfootstep = FOOTSTEP_CARPET_BAREFOOT
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
diff --git a/modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm
similarity index 87%
rename from modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm
rename to modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm
index 089c61fc42a..4bae97660f1 100644
--- a/modular_skyrat/modules/ghostcafe/code/hilbertshotel_ghost.dm
+++ b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm
@@ -15,4 +15,4 @@
/datum/map_template/ghost_cafe_rooms
name = "Apartment"
- mappath = "modular_skyrat/modules/hotel_rooms/apartment.dmm"
+ mappath = "modular_nova/modules/hotel_rooms/apartment.dmm"
diff --git a/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm b/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm
rename to modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm
diff --git a/modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi b/modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/icons/carpet_royalblack.dmi
rename to modular_nova/modules/ghostcafe/icons/carpet_royalblack.dmi
diff --git a/modular_skyrat/modules/ghostcafe/icons/floors.dmi b/modular_nova/modules/ghostcafe/icons/floors.dmi
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/icons/floors.dmi
rename to modular_nova/modules/ghostcafe/icons/floors.dmi
diff --git a/modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi b/modular_nova/modules/ghostcafe/icons/robot_storage.dmi
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/icons/robot_storage.dmi
rename to modular_nova/modules/ghostcafe/icons/robot_storage.dmi
diff --git a/modular_skyrat/modules/ghostcafe/icons/stackspawner.dmi b/modular_nova/modules/ghostcafe/icons/stackspawner.dmi
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/icons/stackspawner.dmi
rename to modular_nova/modules/ghostcafe/icons/stackspawner.dmi
diff --git a/modular_skyrat/modules/ghostcafe/readme.md b/modular_nova/modules/ghostcafe/readme.md
similarity index 100%
rename from modular_skyrat/modules/ghostcafe/readme.md
rename to modular_nova/modules/ghostcafe/readme.md
diff --git a/modular_skyrat/modules/gladiator/Clang_cut.ogg b/modular_nova/modules/gladiator/Clang_cut.ogg
similarity index 100%
rename from modular_skyrat/modules/gladiator/Clang_cut.ogg
rename to modular_nova/modules/gladiator/Clang_cut.ogg
diff --git a/modular_skyrat/modules/gladiator/code/datums/ruins/lavaland.dm b/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm
similarity index 100%
rename from modular_skyrat/modules/gladiator/code/datums/ruins/lavaland.dm
rename to modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm
diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm
similarity index 90%
rename from modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm
rename to modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm
index 91c4cd461b7..00b532a8f8c 100644
--- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm
+++ b/modular_nova/modules/gladiator/code/game/objects/items/gladiator_items.dm
@@ -30,8 +30,8 @@
/obj/item/clothing/neck/warrior_cape
name = "cloak of the marked one"
desc = "A cloak worn by those that have faced death in the eyes and prevailed."
- icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi'
- worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi'
+ icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi'
+ worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi'
icon_state = "berk_cape"
inhand_icon_state = "" //lul
uses_advanced_reskins = FALSE
@@ -45,8 +45,8 @@
name = "berserker armor"
desc = "A suit of ancient body armor imbued with potent spiritual magnetism, capable of massively boosting a wearer's close combat skills at the cost of ravaging their mind and overexerting their body."
icon_state = "berk_suit"
- icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi'
- worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi'
+ icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi'
+ worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi'
hoodtype = /obj/item/clothing/head/hooded/berserker/gatsu
w_class = WEIGHT_CLASS_BULKY
armor_type = /datum/armor/berserker_gatsu
@@ -70,8 +70,8 @@
name = "berserker helmet"
desc = "A uniquely styled helmet with ghastly red eyes that seals it's user inside."
icon_state = "berk_helm"
- icon = 'modular_skyrat/modules/gladiator/icons/berserk_icons.dmi'
- worn_icon = 'modular_skyrat/modules/gladiator/icons/berserk_suit.dmi'
+ icon = 'modular_nova/modules/gladiator/icons/berserk_icons.dmi'
+ worn_icon = 'modular_nova/modules/gladiator/icons/berserk_suit.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
armor_type = /datum/armor/berserker_gatsu
resistance_flags = INDESTRUCTIBLE
@@ -113,14 +113,14 @@
/obj/item/claymore/dragonslayer
name = "\proper Dragonslayer"
desc = "A blade that seems too big to be called a sword. Too big, too thick, too heavy, and too rough, it's more like a large hunk of raw iron."
- icon = 'modular_skyrat/modules/gladiator/icons/dragonslayer.dmi'
+ icon = 'modular_nova/modules/gladiator/icons/dragonslayer.dmi'
icon_state = "dragonslayer"
inhand_icon_state = "dragonslayer"
- lefthand_file = 'modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/64x64_righthand.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/64x64_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/64x64_righthand.dmi'
inhand_x_dimension = 64
inhand_y_dimension = 64
- hitsound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg'
+ hitsound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg'
w_class = WEIGHT_CLASS_HUGE
slot_flags = null
force = 20
@@ -189,7 +189,7 @@
/obj/item/claymore/dragonslayer/very_fucking_loud
name = "\proper Tempered Dragonslayer"
desc = null
- hitsound = 'modular_skyrat/modules/gladiator/Clang_cut.ogg'
+ hitsound = 'modular_nova/modules/gladiator/Clang_cut.ogg'
/obj/item/claymore/dragonslayer/very_fucking_loud/examine()
. = ..()
diff --git a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm b/modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm
similarity index 98%
rename from modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm
rename to modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm
index 7a09648a7e5..1d057807d63 100644
--- a/modular_skyrat/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm
+++ b/modular_nova/modules/gladiator/code/modules/mob/living/simple_animal/hostile/megafauna/markedone.dm
@@ -17,12 +17,12 @@
/mob/living/simple_animal/hostile/megafauna/gladiator
name = "\proper The Marked One"
desc = "An ancient miner lost to time, chosen and changed by the Necropolis, encased in a suit of armor. Only a chosen few can match his speed and strength."
- icon = 'modular_skyrat/modules/gladiator/icons/markedone.dmi'
+ icon = 'modular_nova/modules/gladiator/icons/markedone.dmi'
icon_state = "marked1"
icon_dead = "marked_dying"
attack_verb_simple = "cleave"
attack_verb_continuous = "cleaves"
- attack_sound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg'
+ attack_sound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg'
death_sound = 'sound/creatures/space_dragon_roar.ogg'
death_message = "falls on his sword, ash evaporating from every hole in his armor."
gps_name = "Forgotten Signal"
@@ -338,7 +338,7 @@
QDEL_IN(smonk, 0.5 SECONDS)
for(var/mob/living/slapped in targeted)
if(!faction_check(faction, slapped.faction) && !(slapped in hit_things))
- playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0)
+ playsound(src, 'modular_nova/modules/gladiator/Clang_cut.ogg', 75, 0)
if(slapped.apply_damage(40, BRUTE, BODY_ZONE_CHEST, slapped.run_armor_check(BODY_ZONE_CHEST), wound_bonus = CANT_WOUND))
visible_message(span_danger("[src] slashes through [slapped] with his spinning blade!"))
else
@@ -379,7 +379,7 @@
charging = FALSE
minimum_distance = initial(minimum_distance)
chargetiles = 0
- playsound(src, 'modular_skyrat/modules/gladiator/Clang_cut.ogg', 75, 0)
+ playsound(src, 'modular_nova/modules/gladiator/Clang_cut.ogg', 75, 0)
animate(src, color = initial(color), 0.5 SECONDS)
move_to_delay += CHARGE_MODIFIER
update_phase()
diff --git a/modular_skyrat/modules/gladiator/icons/berserk_icons.dmi b/modular_nova/modules/gladiator/icons/berserk_icons.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/berserk_icons.dmi
rename to modular_nova/modules/gladiator/icons/berserk_icons.dmi
diff --git a/modular_skyrat/modules/gladiator/icons/berserk_suit.dmi b/modular_nova/modules/gladiator/icons/berserk_suit.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/berserk_suit.dmi
rename to modular_nova/modules/gladiator/icons/berserk_suit.dmi
diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer.dmi b/modular_nova/modules/gladiator/icons/dragonslayer.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/dragonslayer.dmi
rename to modular_nova/modules/gladiator/icons/dragonslayer.dmi
diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_L.dmi b/modular_nova/modules/gladiator/icons/dragonslayer_inhand_L.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_L.dmi
rename to modular_nova/modules/gladiator/icons/dragonslayer_inhand_L.dmi
diff --git a/modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_R.dmi b/modular_nova/modules/gladiator/icons/dragonslayer_inhand_R.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/dragonslayer_inhand_R.dmi
rename to modular_nova/modules/gladiator/icons/dragonslayer_inhand_R.dmi
diff --git a/modular_skyrat/modules/gladiator/icons/markedone.dmi b/modular_nova/modules/gladiator/icons/markedone.dmi
similarity index 100%
rename from modular_skyrat/modules/gladiator/icons/markedone.dmi
rename to modular_nova/modules/gladiator/icons/markedone.dmi
diff --git a/modular_skyrat/modules/gladiator/readme.md b/modular_nova/modules/gladiator/readme.md
similarity index 100%
rename from modular_skyrat/modules/gladiator/readme.md
rename to modular_nova/modules/gladiator/readme.md
diff --git a/modular_skyrat/modules/goofsec/code/cellphone.dm b/modular_nova/modules/goofsec/code/cellphone.dm
similarity index 100%
rename from modular_skyrat/modules/goofsec/code/cellphone.dm
rename to modular_nova/modules/goofsec/code/cellphone.dm
diff --git a/modular_skyrat/modules/goofsec/code/department_guards.dm b/modular_nova/modules/goofsec/code/department_guards.dm
similarity index 93%
rename from modular_skyrat/modules/goofsec/code/department_guards.dm
rename to modular_nova/modules/goofsec/code/department_guards.dm
index c93b74ffa18..bfc28cd4ba2 100644
--- a/modular_skyrat/modules/goofsec/code/department_guards.dm
+++ b/modular_nova/modules/goofsec/code/department_guards.dm
@@ -16,44 +16,44 @@
desc = "White scrubs with gray pants underneath. Be warned, wearers of this uniform may only take the Hippocratic Oath as a suggestion."
icon_state = "orderly_uniform"
worn_icon_state = "orderly_uniform"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/medical.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi'
/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/engineering_guard
name = "engineering guard uniform"
desc = "Effectively just padded hi-vis coveralls, they do the trick both inside of, and while keeping people out of, a hardhat zone."
icon_state = "engineering_guard_uniform"
worn_icon_state = "engineering_guard_uniform"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/engineering.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/engineering_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/engineering.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi'
/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/customs_agent
name = "customs agent uniform"
desc = "A cargo-brown short-sleeve shirt, and cargo shorts in an authoritative charcoal color. Only for the FTU's finest strong-hands."
icon_state = "customs_uniform"
worn_icon_state = "customs_uniform"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/cargo.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi'
/obj/item/clothing/under/rank/security/officer/blueshirt/skyrat/bouncer
name = "bouncer uniform"
desc = "Short-sleeves and jeans, for that aura of cool that makes the drunk people listen."
icon_state = "bouncer"
worn_icon_state = "bouncer"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi'
/*
SUITS
*/
/obj/item/clothing/suit/armor/vest/blueshirt/skyrat
//Effectively the same as TG's blueshirt, including icon. The /skyrat path makes it easier for sorting.
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
unique_reskin = null
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -90,8 +90,8 @@
unique_reskin = null
/obj/item/clothing/head/helmet/blueshirt/skyrat/guard //Version of the blueshirt helmet without a blue line. Used by all dept guards right now.
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "mallcop_helm"
worn_icon_state = "mallcop_helm"
@@ -127,27 +127,27 @@
/obj/effect/landmark/start/science_guard
name = "Science Guard"
icon_state = "Science Guard"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/obj/effect/landmark/start/orderly
name = "Orderly"
icon_state = "Orderly"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/obj/effect/landmark/start/engineering_guard
name = "Engineering Guard"
icon_state = "Engineering Guard"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/obj/effect/landmark/start/customs_agent
name = "Customs Agent"
icon_state = "Customs Agent"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/obj/effect/landmark/start/bouncer
name = "Service Guard"
icon_state = "Bouncer"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/*
SCIENCE GUARD DATUMS
@@ -212,7 +212,7 @@
/datum/id_trim/job/science_guard
assignment = "Science Guard"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_calhoun"
department_color = COLOR_SCIENCE_PINK
subdepartment_color = COLOR_SCIENCE_PINK
@@ -317,7 +317,7 @@
/datum/id_trim/job/orderly
assignment = "Orderly"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_orderly"
department_color = COLOR_MEDICAL_BLUE
subdepartment_color = COLOR_MEDICAL_BLUE
@@ -415,7 +415,7 @@
/datum/id_trim/job/engineering_guard
assignment = "Engineering Guard"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_engiguard"
department_color = COLOR_ENGINEERING_ORANGE
subdepartment_color = COLOR_ENGINEERING_ORANGE
@@ -519,7 +519,7 @@
/datum/id_trim/job/customs_agent
assignment = "Customs Agent"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_customs"
department_color = COLOR_CARGO_BROWN
subdepartment_color = COLOR_CARGO_BROWN
@@ -617,7 +617,7 @@
/datum/id_trim/job/bouncer
assignment = "Bouncer"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_bouncer"
department_color = COLOR_SERVICE_LIME
subdepartment_color = COLOR_SERVICE_LIME // Personally speaking I'd have one of these with sec colors but I'm being authentic
@@ -655,7 +655,7 @@
/obj/item/melee/baton/security/loaded/departmental
name = "departmental stun baton"
desc = "A stun baton fitted with a departmental area-lock, based off the station's blueprint layout - outside of its department, it only has three uses."
- icon = 'modular_skyrat/modules/goofsec/icons/departmental_batons.dmi'
+ icon = 'modular_nova/modules/goofsec/icons/departmental_batons.dmi'
icon_state = "prison_baton"
var/list/valid_areas = list()
var/emagged = FALSE
diff --git a/modular_skyrat/modules/goofsec/code/hud.dm b/modular_nova/modules/goofsec/code/hud.dm
similarity index 100%
rename from modular_skyrat/modules/goofsec/code/hud.dm
rename to modular_nova/modules/goofsec/code/hud.dm
diff --git a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm
similarity index 83%
rename from modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm
rename to modular_nova/modules/goofsec/code/sec_clothing_overrides.dm
index b871ebe7ce3..87ddc345d44 100644
--- a/modular_skyrat/modules/goofsec/code/sec_clothing_overrides.dm
+++ b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm
@@ -9,8 +9,8 @@
*/
/obj/item/clothing/under/plasmaman/security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/plasmaman.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/plasmaman.dmi'
icon_state = "security_envirosuit_new"
/obj/item/clothing/under/plasmaman/security/warden
@@ -20,8 +20,8 @@
icon_state = "hos_envirosuit_new"
/obj/item/clothing/head/helmet/space/plasmaman/security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/plasmaman_hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/plasmaman_head.dmi'
icon_state = "security_envirohelm_new"
/obj/item/clothing/head/helmet/space/plasmaman/security/warden
@@ -34,10 +34,14 @@
* ACCESSORIES
*/
/obj/item/clothing/accessory/armband/deputy
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/accessories.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/accessories.dmi'
icon_state = "armband_lopland"
+/obj/item/clothing/accessory/armband/deputy/lopland/nonsec
+ name = "blue armband"
+ desc = "An armband, worn to signify proficiency in a skill or association with a department. This one is blue."
+
/obj/item/clothing/accessory/armband/deputy/lopland
desc = "A Peacekeeper-blue armband, showing the wearer to be certified by Lopland as a top-of-their-class Security Officer."
@@ -45,10 +49,10 @@
* BACKPACKS
*/
/obj/item/storage/backpack/security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
icon_state = "backpack_security_black"
inhand_icon_state = "backpack_security_black"
uses_advanced_reskins = TRUE
@@ -66,10 +70,10 @@
)
/obj/item/storage/backpack/satchel/sec
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
icon_state = "satchel_security_black"
inhand_icon_state = "satchel_security_black"
uses_advanced_reskins = TRUE
@@ -87,10 +91,10 @@
)
/obj/item/storage/backpack/duffelbag/sec
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
icon_state = "duffel_security_black"
inhand_icon_state = "duffel_security_black"
uses_advanced_reskins = TRUE
@@ -111,8 +115,8 @@
* BELTS
*/
/obj/item/storage/belt/security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "belt_white"
worn_icon_state = "belt_white"
uses_advanced_reskins = TRUE
@@ -167,7 +171,7 @@
return ..()
resolve_parent.add_fingerprint(user)
attempt_remove(gun_to_draw, get_turf(user))
- playsound(resolve_parent, 'modular_skyrat/modules/sec_haul/sound/holsterout.ogg', 50, TRUE, -5)
+ playsound(resolve_parent, 'modular_nova/modules/sec_haul/sound/holsterout.ogg', 50, TRUE, -5)
INVOKE_ASYNC(user, TYPE_PROC_REF(/mob, put_in_hands), gun_to_draw)
user.visible_message(span_warning("[user] draws [gun_to_draw] from [resolve_parent]!"), span_notice("You draw [gun_to_draw] from [resolve_parent]."))
@@ -175,8 +179,8 @@
* GLASSES
*/
/obj/item/clothing/glasses/hud/security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
icon_state = "security_hud"
glass_colour_type = /datum/client_colour/glass_colour/lightblue
@@ -209,15 +213,15 @@
//Overrides the bulletproof helm with the older non red visor version.
/obj/item/clothing/head/helmet/alt
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "helmetalt_blue"
base_icon_state = "helmetalt_blue"
//Standard helmet (w/ visor)
/obj/item/clothing/head/helmet/sec
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "security_helmet"
base_icon_state = "security_helmet"
actions_types = list(/datum/action/item_action/toggle)
@@ -259,8 +263,8 @@
/obj/item/clothing/head/security_garrison
name = "security garrison cap"
desc = "A robust garrison cap with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "garrison_black"
uses_advanced_reskins = TRUE
armor_type = /datum/armor/head_helmet
@@ -280,8 +284,8 @@
/obj/item/clothing/head/security_cap
name = "security cap"
desc = "A robust cap with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "security_cap_black"
uses_advanced_reskins = TRUE
armor_type = /datum/armor/head_helmet
@@ -304,8 +308,8 @@
)
/obj/item/clothing/head/hats/hos/cap
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "hoscap_blue"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -338,16 +342,16 @@
* NECK
*/
/obj/item/clothing/neck/cloak/hos
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
icon_state = "hoscloak_blue"
//Not technically an override but oh well
/obj/item/clothing/neck/security_cape
name = "security cape"
desc = "A fashionable cape worn by security officers."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
icon_state = "cape_black"
inhand_icon_state = "" //no unique inhands
uses_advanced_reskins = TRUE
@@ -409,8 +413,8 @@
/obj/item/clothing/gloves/color/black/security
name = "security gloves"
desc = "A pair of security gloves."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "gloves_white"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -429,13 +433,13 @@
)
/obj/item/clothing/gloves/tackler/security //Can't just overwrite tackler, as there's a ton of subtypes that we'd then need to account for. This is easier. MUCH easier.
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "tackle_blue"
/obj/item/clothing/gloves/krav_maga/sec
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "fightgloves_blue"
/*
@@ -444,8 +448,8 @@
/obj/item/clothing/suit/armor/vest/alt/sec
name = "armored security vest"
desc = "A Type-II-AD-P armored vest that provides decent protection against most types of damage."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
icon_state = "vest_white"
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -480,9 +484,9 @@
RESKIN_WORN_ICON_STATE = "hostrench"
),
"Trenchcloak" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi',
RESKIN_ICON_STATE = "trenchcloak",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi',
RESKIN_WORN_ICON_STATE = "trenchcloak"
),
)
@@ -498,8 +502,8 @@
//Riot Armor
/obj/item/clothing/suit/armor/riot
icon_state = "riot_ad" //replaces the NT on the back
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
/obj/item/clothing/suit/armor/riot/knight //This needs to be sent back to its original .dmis
icon = 'icons/obj/clothing/suits/armor.dmi'
@@ -507,8 +511,8 @@
//Warden's Vest
/obj/item/clothing/suit/armor/vest/warden
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
icon_state = "vest_warden"
/obj/item/clothing/suit/armor/vest/warden/alt //un-overrides this since its sprite is TG
@@ -519,20 +523,20 @@
//Security Wintercoat (and hood)
/obj/item/clothing/head/hooded/winterhood/security
desc = "A blue, armour-padded winter hood. Definitely not bulletproof, especially not the part where your face goes." //God dammit TG stop putting color in the desc of items like this
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/winterhood.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/winterhood.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/winterhood.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/winterhood.dmi'
icon_state = "winterhood_security"
/obj/item/clothing/suit/hooded/wintercoat/security
name = "security winter coat" //TG has this as a Jacket now, so unless we update ours, this needs to be re-named as Coat
desc = "A blue, armour-padded winter coat. It glitters with a mild ablative coating and a robust air of authority. The zipper tab is a small \"Lopland\" logo."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/wintercoat.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/wintercoat.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/wintercoat.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/wintercoat.dmi'
icon_state = "coatsecurity_winter"
/obj/item/clothing/suit/armor/hos/hos_formal
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
icon_state = "hosformal_blue"
current_skin = "hosformal_blue" //prevents reskinning (but not toggling!)
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
@@ -543,8 +547,8 @@
//Officer
/obj/item/clothing/under/rank/security/officer
desc = "A tactical security uniform for officers, complete with a Lopland belt buckle."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "security_black"
alt_covers_chest = TRUE
uses_advanced_reskins = TRUE
@@ -577,14 +581,14 @@
//Warden
/obj/item/clothing/under/rank/security/warden
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "warden_black"
//HoS
/obj/item/clothing/under/rank/security/head_of_security
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "hos_black"
/obj/item/clothing/under/rank/security/head_of_security/parade
@@ -607,8 +611,8 @@
name = "security jackboots"
desc = "Lopland's Peacekeeper-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
icon_state = "security_boots"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
clothing_traits = list(TRAIT_SILENT_FOOTSTEPS) // We have other footsteps.
uses_advanced_reskins = TRUE
unique_reskin = list(
@@ -628,7 +632,7 @@
/obj/item/clothing/shoes/jackboots/sec/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/squeak, list('modular_skyrat/master_files/sound/effects/footstep1.ogg'=1,'modular_skyrat/master_files/sound/effects/footstep2.ogg'=1, 'modular_skyrat/master_files/sound/effects/footstep3.ogg'=1), 100)
+ AddComponent(/datum/component/squeak, list('modular_nova/master_files/sound/effects/footstep1.ogg'=1,'modular_nova/master_files/sound/effects/footstep2.ogg'=1, 'modular_nova/master_files/sound/effects/footstep3.ogg'=1), 100)
//
// This code overrides security's jumpskirt preference, as we're not going to be giving them jumpskirts
diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_nova/modules/goofsec/code/sol_fed.dm
similarity index 98%
rename from modular_skyrat/modules/goofsec/code/sol_fed.dm
rename to modular_nova/modules/goofsec/code/sol_fed.dm
index 2f6e9064c50..1839a53908d 100644
--- a/modular_skyrat/modules/goofsec/code/sol_fed.dm
+++ b/modular_nova/modules/goofsec/code/sol_fed.dm
@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
/// Internal. Polls ghosts and sends in a team of space cops according to the alert level, accompanied by an announcement.
/obj/machinery/computer/communications/proc/call_911(ordered_team)
var/team_size
- var/cops_to_send
+ var/datum/antagonist/ert/cops_to_send
var/announcement_message = "sussus amogus"
var/announcer = "Sol Federation Marshal Department"
var/poll_question = "fuck you leatherman"
@@ -143,9 +143,14 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
cell_phone_number = "Dogginos"
list_to_use = "dogginos"
priority_announce(announcement_message, announcer, 'sound/effects/families_police.ogg', has_important_message=TRUE, color_override = "yellow")
- var/list/candidates = poll_ghost_candidates(poll_question, "deathsquad")
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ poll_question,
+ check_jobban = ROLE_DEATHSQUAD,
+ pic_source = /obj/item/solfed_reporter,
+ role_name_text = cops_to_send::name,
+ )
- if(candidates.len)
+ if(length(candidates))
//Pick the (un)lucky players
var/agents_number = min(team_size, candidates.len)
@@ -377,7 +382,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
desc = "A headset used by the Solar Federation response teams."
icon_state = "med_headset"
keyslot = /obj/item/encryptionkey/headset_solfed/atmos
- radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg'
+ radiosound = 'modular_nova/modules/radiosound/sound/radio/security.ogg'
/obj/item/encryptionkey/headset_solfed/atmos
name = "\improper SolFed adv. atmos encryption key"
@@ -517,7 +522,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
/obj/item/solfed_reporter
name = "SolFed reporter"
desc = "Use this in-hand to vote to call SolFed backup. If half your team votes for it, SWAT will be dispatched."
- icon = 'modular_skyrat/modules/goofsec/icons/reporter.dmi'
+ icon = 'modular_nova/modules/goofsec/icons/reporter.dmi'
icon_state = "reporter_off"
w_class = WEIGHT_CLASS_SMALL
/// Was the reporter turned on?
@@ -578,7 +583,12 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
station_balance?.adjust_money(SOLFED_FINE_AMOUNT) // paying for the gas to drive all the fuckin' way out to the frontier
priority_announce(announcement_message, announcement_source, 'sound/effects/families_police.ogg', has_important_message = TRUE, color_override = "yellow")
- var/list/candidates = poll_ghost_candidates(ghost_poll_msg, jobban_to_check)
+ var/list/candidates = SSpolling.poll_ghost_candidates(
+ ghost_poll_msg,
+ jobban_to_check,
+ pic_source = /obj/item/solfed_reporter,
+ role_name_text = summoned_type,
+ )
if(candidates.len)
//Pick the (un)lucky players
@@ -745,7 +755,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list(
/obj/item/beamout_tool
name = "beam-out tool" // TODO, find a way to make this into drop pods cuz that's cooler visually
desc = "Use this to begin the lengthy beam-out process to return to Sol Federation space. It will bring anyone you are pulling with you."
- icon = 'modular_skyrat/modules/goofsec/icons/reporter.dmi'
+ icon = 'modular_nova/modules/goofsec/icons/reporter.dmi'
icon_state = "beam_me_up_scotty"
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_nova/modules/goofsec/code/solfed_clothing.dm b/modular_nova/modules/goofsec/code/solfed_clothing.dm
new file mode 100644
index 00000000000..c509ab97750
--- /dev/null
+++ b/modular_nova/modules/goofsec/code/solfed_clothing.dm
@@ -0,0 +1,42 @@
+// Peacekeeper jumpsuit
+
+/obj/item/clothing/under/sol_peacekeeper
+ name = "sol peacekeeper uniform"
+ desc = "A military-grade uniform with military grade comfort (none at all), often seen on \
+ SolFed's various peacekeeping forces, and usually alongside a blue helmet."
+ icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi'
+ icon_state = "peacekeeper"
+ worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi'
+ worn_icon_state = "peacekeeper"
+ armor_type = /datum/armor/clothing_under/rank_security
+ inhand_icon_state = null
+ has_sensor = SENSOR_COORDS
+ random_sensor = FALSE
+
+// EMT jumpsuit
+
+/obj/item/clothing/under/sol_emt
+ name = "sol emergency medical uniform"
+ desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built paramedics in mind."
+ icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi'
+ icon_state = "emt"
+ worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi'
+ worn_icon_digi = 'modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi'
+ worn_icon_state = "emt"
+ armor_type = /datum/armor/clothing_under/rank_medical
+ inhand_icon_state = null
+ has_sensor = SENSOR_COORDS
+ random_sensor = FALSE
+
+// Solfed flak jacket, for marshals
+
+/obj/item/clothing/suit/armor/vest/det_suit/sol
+ name = "'Gordyn' flak vest"
+ desc = "A light armored jacket common on SolFed personnel who need armor, but find a full vest \
+ too impractical or uneeded."
+ icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi'
+ icon_state = "flak"
+ worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi'
+ worn_icon_state = "flak"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
diff --git a/modular_skyrat/modules/goofsec/icons/departmental_batons.dmi b/modular_nova/modules/goofsec/icons/departmental_batons.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/departmental_batons.dmi
rename to modular_nova/modules/goofsec/icons/departmental_batons.dmi
diff --git a/modular_skyrat/modules/goofsec/icons/gun_sprites.dmi b/modular_nova/modules/goofsec/icons/gun_sprites.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/gun_sprites.dmi
rename to modular_nova/modules/goofsec/icons/gun_sprites.dmi
diff --git a/modular_skyrat/modules/goofsec/icons/reporter.dmi b/modular_nova/modules/goofsec/icons/reporter.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/reporter.dmi
rename to modular_nova/modules/goofsec/icons/reporter.dmi
diff --git a/modular_skyrat/modules/goofsec/icons/uniforms.dmi b/modular_nova/modules/goofsec/icons/uniforms.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/uniforms.dmi
rename to modular_nova/modules/goofsec/icons/uniforms.dmi
diff --git a/modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi b/modular_nova/modules/goofsec/icons/uniforms_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi
rename to modular_nova/modules/goofsec/icons/uniforms_worn.dmi
diff --git a/modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi b/modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi
rename to modular_nova/modules/goofsec/icons/uniforms_worn_digi.dmi
diff --git a/modular_skyrat/modules/goofsec/readme.md b/modular_nova/modules/goofsec/readme.md
similarity index 100%
rename from modular_skyrat/modules/goofsec/readme.md
rename to modular_nova/modules/goofsec/readme.md
diff --git a/modular_skyrat/modules/gun_safety/code/keybinding.dm b/modular_nova/modules/gun_safety/code/keybinding.dm
similarity index 100%
rename from modular_skyrat/modules/gun_safety/code/keybinding.dm
rename to modular_nova/modules/gun_safety/code/keybinding.dm
diff --git a/modular_skyrat/modules/gun_safety/code/safety_additions.dm b/modular_nova/modules/gun_safety/code/safety_additions.dm
similarity index 100%
rename from modular_skyrat/modules/gun_safety/code/safety_additions.dm
rename to modular_nova/modules/gun_safety/code/safety_additions.dm
diff --git a/modular_skyrat/modules/gun_safety/code/safety_component.dm b/modular_nova/modules/gun_safety/code/safety_component.dm
similarity index 98%
rename from modular_skyrat/modules/gun_safety/code/safety_component.dm
rename to modular_nova/modules/gun_safety/code/safety_component.dm
index 13f0c88f0fb..5e956919507 100644
--- a/modular_skyrat/modules/gun_safety/code/safety_component.dm
+++ b/modular_nova/modules/gun_safety/code/safety_component.dm
@@ -85,5 +85,5 @@
// The actual action, used by the component
/datum/action/item_action/gun_safety_toggle
name = "Toggle Gun Safety"
- button_icon = 'modular_skyrat/modules/gun_safety/icons/actions.dmi'
+ button_icon = 'modular_nova/modules/gun_safety/icons/actions.dmi'
button_icon_state = "safety_on"
diff --git a/modular_skyrat/modules/gun_safety/icons/actions.dmi b/modular_nova/modules/gun_safety/icons/actions.dmi
similarity index 100%
rename from modular_skyrat/modules/gun_safety/icons/actions.dmi
rename to modular_nova/modules/gun_safety/icons/actions.dmi
diff --git a/modular_skyrat/modules/gun_safety/readme.md b/modular_nova/modules/gun_safety/readme.md
similarity index 100%
rename from modular_skyrat/modules/gun_safety/readme.md
rename to modular_nova/modules/gun_safety/readme.md
diff --git a/modular_skyrat/modules/gunhud/code/gun_hud.dm b/modular_nova/modules/gunhud/code/gun_hud.dm
similarity index 98%
rename from modular_skyrat/modules/gunhud/code/gun_hud.dm
rename to modular_nova/modules/gunhud/code/gun_hud.dm
index ff8e5a17853..e323026cb0b 100644
--- a/modular_skyrat/modules/gunhud/code/gun_hud.dm
+++ b/modular_nova/modules/gunhud/code/gun_hud.dm
@@ -14,7 +14,7 @@
/atom/movable/screen/ammo_counter
name = "ammo counter"
- icon = 'modular_skyrat/modules/gunhud/icons/gun_hud.dmi'
+ icon = 'modular_nova/modules/gunhud/icons/gun_hud.dmi'
icon_state = "backing"
screen_loc = ui_ammocounter
invisibility = INVISIBILITY_ABSTRACT
diff --git a/modular_skyrat/modules/gunhud/code/gun_hud_component.dm b/modular_nova/modules/gunhud/code/gun_hud_component.dm
similarity index 100%
rename from modular_skyrat/modules/gunhud/code/gun_hud_component.dm
rename to modular_nova/modules/gunhud/code/gun_hud_component.dm
diff --git a/modular_skyrat/modules/gunhud/icons/gun_hud.dmi b/modular_nova/modules/gunhud/icons/gun_hud.dmi
similarity index 100%
rename from modular_skyrat/modules/gunhud/icons/gun_hud.dmi
rename to modular_nova/modules/gunhud/icons/gun_hud.dmi
diff --git a/modular_nova/modules/gunhud/readme.md b/modular_nova/modules/gunhud/readme.md
new file mode 100644
index 00000000000..148e2ee7f70
--- /dev/null
+++ b/modular_nova/modules/gunhud/readme.md
@@ -0,0 +1,30 @@
+## Title: Gunpoint
+
+MODULE ID: GUNHUD
+
+### Description:
+
+Adds a dynamic hud system for energy and some ballistics guns.
+
+### TG Proc Changes:
+- N/A
+### Defines:
+
+.code\__DEFINES\atom_hud.dm > #define AMMO_HUD "25"
+
+.code\modules\projectiles\guns\ballistic.dm > /obj/item/gun/ballistic/examine(mob/user)
+
+### Master file additions
+
+- Hud directory > _defines.dm, human.dm, hud.dm
+- `modular_nova\master_files\code\game\objects\items\tools\weldingtool.dm`: `proc/Initialize`, `proc/set_welding`
+- `modular_nova\master_files\code\modules\projectiles\guns\ballistic.dm`: `proc/eject_magazine`, `proc/insert_magazine`
+- `modular_nova\master_files\code\modules\projectiles\guns\energy.dm`: `proc/process`, `proc/select_fire`
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Gandalf2k15 - OG creation.
+Larentoun - modularisation
diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint.dm b/modular_nova/modules/gunpoint/code/gunpoint.dm
similarity index 100%
rename from modular_skyrat/modules/gunpoint/code/gunpoint.dm
rename to modular_nova/modules/gunpoint/code/gunpoint.dm
diff --git a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm b/modular_nova/modules/gunpoint/code/gunpoint_datum.dm
similarity index 94%
rename from modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm
rename to modular_nova/modules/gunpoint/code/gunpoint_datum.dm
index 53cacafd360..0c679d74b13 100644
--- a/modular_skyrat/modules/gunpoint/code/gunpoint_datum.dm
+++ b/modular_nova/modules/gunpoint/code/gunpoint_datum.dm
@@ -1,5 +1,5 @@
/obj/effect/overlay/gunpoint_effect
- icon = 'modular_skyrat/modules/gunpoint/icons/targeted.dmi'
+ icon = 'modular_nova/modules/gunpoint/icons/targeted.dmi'
icon_state = "locking"
layer = FLY_LAYER
plane = GAME_PLANE
@@ -58,7 +58,7 @@
return
locked = TRUE
log_combat(target, source, "locked onto with aiming")
- playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targeton.ogg', 50,1)
+ playsound(get_turf(source), 'modular_nova/modules/gunpoint/sound/targeton.ogg', 50,1)
to_chat(source, span_notice("You lock onto [target.name]! "))
target.visible_message(span_warning("[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]! "), span_userdanger("[source.name] holds you at gunpoint with the [aimed_gun.name]!"))
if(target.gunpointed.len == 1)//First case
@@ -97,7 +97,7 @@
/datum/gunpoint/proc/click_destroy()
SIGNAL_HANDLER
if(locked)
- playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targetoff.ogg', 50,1)
+ playsound(get_turf(source), 'modular_nova/modules/gunpoint/sound/targetoff.ogg', 50,1)
qdel(src)
/datum/gunpoint/proc/source_cc(datum/source, amount, update, ignore)
diff --git a/modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi b/modular_nova/modules/gunpoint/icons/radial_gunpoint.dmi
similarity index 100%
rename from modular_skyrat/modules/gunpoint/icons/radial_gunpoint.dmi
rename to modular_nova/modules/gunpoint/icons/radial_gunpoint.dmi
diff --git a/modular_skyrat/modules/gunpoint/icons/targeted.dmi b/modular_nova/modules/gunpoint/icons/targeted.dmi
similarity index 100%
rename from modular_skyrat/modules/gunpoint/icons/targeted.dmi
rename to modular_nova/modules/gunpoint/icons/targeted.dmi
diff --git a/modular_nova/modules/gunpoint/readme.md b/modular_nova/modules/gunpoint/readme.md
new file mode 100644
index 00000000000..98cb2724b41
--- /dev/null
+++ b/modular_nova/modules/gunpoint/readme.md
@@ -0,0 +1,36 @@
+## Title: Gunpoint
+
+MODULE ID: GUNPOINT
+
+### Description:
+
+Allows anyone with a gun to use SHIFT + MMB to hold someone at gunpoint, much like how baystation does it, but in a more visually clear way
+
+### TG Proc Changes:
+
+ ./modular_nova/modules/gunpoint/code/datum/gunpoint/gunpoint.dm > /mob/living/ShiftMiddleClickOn() > CHILD PROC
+ ./code/_onclick/hud/radial.dm > /datum/radial_menu/proc/setup_menu()
+ ./code/_onclick/item_attack.dm > /obj/item/proc/attack_self()
+ ./code/game/objects/items/devices/radio/radio.dm > /obj/item/radio/talk_into()
+ ./code/game/objects/items/devices/radio/headset.dm > /obj/item/radio/headset/talk_into()
+ ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine()
+ ./code/modules/mob/living/living.dm > /mob/living/proc/update_mobility()
+ ./code/modules/mob/living/living.dm > /mob/living/proc/MobBump()
+ ./code/modules/mob/mob_movement.dm > /mob/proc/toggle_move_intent()
+
+### Defines:
+
+ ./code/_onclick/hud/radial.dm > /datum/radial_menu - var/icon_path
+ ./code/__DEFINES/~skyrat_defines/signals.dm - COMSIG_MOVABLE_RADIO_TALK_INTO, COMSIG_LIVING_UPDATED_RESTING
+ ./code/__DEFINES/~skyrat_defines/traits.dm - TRAIT_NORUNNING
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Azarak - original code & porting
diff --git a/modular_skyrat/modules/gunpoint/sound/targetoff.ogg b/modular_nova/modules/gunpoint/sound/targetoff.ogg
similarity index 100%
rename from modular_skyrat/modules/gunpoint/sound/targetoff.ogg
rename to modular_nova/modules/gunpoint/sound/targetoff.ogg
diff --git a/modular_skyrat/modules/gunpoint/sound/targeton.ogg b/modular_nova/modules/gunpoint/sound/targeton.ogg
similarity index 100%
rename from modular_skyrat/modules/gunpoint/sound/targeton.ogg
rename to modular_nova/modules/gunpoint/sound/targeton.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_flesh_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_glass_10.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_masonry_10.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_10.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_11.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_12.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_13.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_14.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_15.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_16.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_metal_17.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_snow_10.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_01.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_02.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_03.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_04.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_05.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_06.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_07.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_08.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_09.ogg
diff --git a/modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg b/modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg
similarity index 100%
rename from modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg
rename to modular_nova/modules/gunsgalore/sound/impact/impact_wood_10.ogg
diff --git a/modular_skyrat/modules/hairbrush/code/hairbrush.dm b/modular_nova/modules/hairbrush/code/hairbrush.dm
similarity index 92%
rename from modular_skyrat/modules/hairbrush/code/hairbrush.dm
rename to modular_nova/modules/hairbrush/code/hairbrush.dm
index 5dae1a37d6e..d320fbbf5b9 100644
--- a/modular_skyrat/modules/hairbrush/code/hairbrush.dm
+++ b/modular_nova/modules/hairbrush/code/hairbrush.dm
@@ -3,11 +3,11 @@
/obj/item/hairbrush
name = "hairbrush"
desc = "A small, circular brush with an ergonomic grip for efficient brush application."
- icon = 'modular_skyrat/modules/hairbrush/icons/hairbrush.dmi'
+ icon = 'modular_nova/modules/hairbrush/icons/hairbrush.dmi'
icon_state = "brush"
inhand_icon_state = "inhand"
- lefthand_file = 'modular_skyrat/modules/hairbrush/icons/inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/hairbrush/icons/inhand_right.dmi'
+ lefthand_file = 'modular_nova/modules/hairbrush/icons/inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/hairbrush/icons/inhand_right.dmi'
w_class = WEIGHT_CLASS_TINY
var/brush_speed = 3 SECONDS
diff --git a/modular_skyrat/modules/hairbrush/code/mood_events.dm b/modular_nova/modules/hairbrush/code/mood_events.dm
similarity index 100%
rename from modular_skyrat/modules/hairbrush/code/mood_events.dm
rename to modular_nova/modules/hairbrush/code/mood_events.dm
diff --git a/modular_skyrat/modules/hairbrush/icons/hairbrush.dmi b/modular_nova/modules/hairbrush/icons/hairbrush.dmi
similarity index 100%
rename from modular_skyrat/modules/hairbrush/icons/hairbrush.dmi
rename to modular_nova/modules/hairbrush/icons/hairbrush.dmi
diff --git a/modular_skyrat/modules/hairbrush/icons/inhand_left.dmi b/modular_nova/modules/hairbrush/icons/inhand_left.dmi
similarity index 100%
rename from modular_skyrat/modules/hairbrush/icons/inhand_left.dmi
rename to modular_nova/modules/hairbrush/icons/inhand_left.dmi
diff --git a/modular_skyrat/modules/hairbrush/icons/inhand_right.dmi b/modular_nova/modules/hairbrush/icons/inhand_right.dmi
similarity index 100%
rename from modular_skyrat/modules/hairbrush/icons/inhand_right.dmi
rename to modular_nova/modules/hairbrush/icons/inhand_right.dmi
diff --git a/modular_skyrat/modules/hev_suit/code/hev_suit.dm b/modular_nova/modules/hev_suit/code/hev_suit.dm
similarity index 79%
rename from modular_skyrat/modules/hev_suit/code/hev_suit.dm
rename to modular_nova/modules/hev_suit/code/hev_suit.dm
index 1dbce983d32..c0513a52c89 100644
--- a/modular_skyrat/modules/hev_suit/code/hev_suit.dm
+++ b/modular_nova/modules/hev_suit/code/hev_suit.dm
@@ -32,8 +32,8 @@
/obj/item/clothing/head/helmet/space/hev_suit
name = "hazardous environment suit helmet"
desc = "The Mark IV HEV suit helmet."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "hev"
armor_type = /datum/armor/space_hev_suit
obj_flags = NO_MAT_REDEMPTION
@@ -72,9 +72,9 @@
/obj/item/clothing/suit/space/hev_suit
name = "hazardous environment suit"
desc = "The Mark IV HEV suit protects the user from a number of hazardous environments and has in build ballistic protection."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
icon_state = "hev"
inhand_icon_state = "syndicate-orange"
armor_type = /datum/armor/space_hev_suit
@@ -102,43 +102,43 @@
var/user_old_oxyloss
///Lots of sound vars.
- var/activation_song = 'modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg'
-
- var/logon_sound = 'modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg'
- var/armor_sound = 'modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg'
- var/atmospherics_sound = 'modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg'
- var/vitalsigns_sound = 'modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg'
- var/automedic_sound = 'modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg'
- var/weaponselect_sound = 'modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg'
- var/munitions_sound = 'modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg'
- var/communications_sound = 'modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg'
- var/safe_day_sound = 'modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg'
-
- var/batt_50_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg'
- var/batt_40_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg'
- var/batt_30_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg'
- var/batt_20_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg'
- var/batt_10_sound = 'modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg'
-
- var/near_death_sound = 'modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg'
- var/health_critical_sound = 'modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg'
- var/health_dropping_sound = 'modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg'
-
- var/blood_loss_sound = 'modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg'
- var/blood_toxins_sound = 'modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg'
- var/biohazard_sound = 'modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg'
- var/chemical_sound = 'modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg'
- var/radiation_sound = 'modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg'
-
- var/minor_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg'
- var/major_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg'
- var/minor_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg'
- var/major_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg'
-
- var/morphine_sound = 'modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg'
- var/wound_sound = 'modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg'
- var/antitoxin_sound = 'modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg'
- var/antidote_sound = 'modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg'
+ var/activation_song = 'modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg'
+
+ var/logon_sound = 'modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg'
+ var/armor_sound = 'modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg'
+ var/atmospherics_sound = 'modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg'
+ var/vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg'
+ var/automedic_sound = 'modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg'
+ var/weaponselect_sound = 'modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg'
+ var/munitions_sound = 'modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg'
+ var/communications_sound = 'modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg'
+ var/safe_day_sound = 'modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg'
+
+ var/batt_50_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg'
+ var/batt_40_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg'
+ var/batt_30_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg'
+ var/batt_20_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg'
+ var/batt_10_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg'
+
+ var/near_death_sound = 'modular_nova/modules/hev_suit/sound/hev/near_death.ogg'
+ var/health_critical_sound = 'modular_nova/modules/hev_suit/sound/hev/health_critical.ogg'
+ var/health_dropping_sound = 'modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg'
+
+ var/blood_loss_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg'
+ var/blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg'
+ var/biohazard_sound = 'modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg'
+ var/chemical_sound = 'modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg'
+ var/radiation_sound = 'modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg'
+
+ var/minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg'
+ var/major_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg'
+ var/minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg'
+ var/major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg'
+
+ var/morphine_sound = 'modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg'
+ var/wound_sound = 'modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg'
+ var/antitoxin_sound = 'modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg'
+ var/antidote_sound = 'modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg'
var/radio_channel = RADIO_CHANNEL_COMMON
@@ -214,16 +214,16 @@
/datum/action/item_action/hev_toggle
name = "Toggle HEV Suit"
- button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi'
background_icon_state = "bg_hl"
- button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi'
button_icon_state = "system_off"
/datum/action/item_action/hev_toggle_notifs
name = "Toggle HEV Suit Notifications"
- button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi'
background_icon_state = "bg_hl"
- button_icon = 'modular_skyrat/modules/hev_suit/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi'
button_icon_state = "sound_VOICE_AND_TEXT"
/datum/action/item_action/hev_toggle_notifs/Trigger(trigger_flags)
@@ -239,7 +239,7 @@
button_icon_state = "sound_[new_setting]"
- playsound(my_suit, 'modular_skyrat/modules/hev_suit/sound/hev/blip.ogg', 50)
+ playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50)
build_all_button_icons()
@@ -257,7 +257,7 @@
button_icon_state = toggle ? "system_on" : "system_off"
- playsound(my_suit, 'modular_skyrat/modules/hev_suit/sound/hev/blip.ogg', 50)
+ playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50)
build_all_button_icons()
@@ -500,7 +500,7 @@
/obj/item/clothing/suit/space/hev_suit/proc/stat_changed(datum/source, new_stat)
SIGNAL_HANDLER
if(new_stat == DEAD)
- playsound(src, 'modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg', 40)
+ playsound(src, 'modular_nova/modules/hev_suit/sound/hev/flatline.ogg', 40)
internal_radio.talk_into(src, "WARNING! USER [uppertext(current_user.real_name)] VITALSIGNS HAVE FLATLINED, CURRENT POSITION: [loc.x], [loc.y], [loc.z]!", radio_channel)
deactivate()
@@ -702,9 +702,9 @@
/obj/item/clothing/head/helmet/space/hev_suit/pcv
name = "powered combat helmet"
desc = "A deprecated combat helmet developed during the early 21th century in Sol-3, with protections rated level III-A. Contains attachment points for AN/PVS night vision goggles."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi'
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi'
icon_state = "hecu_helm"
armor_type = /datum/armor/hev_suit_pcv
flags_inv = HIDEHAIR
@@ -765,9 +765,9 @@
/obj/item/clothing/suit/space/hev_suit/pcv
name = "powered combat vest"
desc = "An electrically charged piece of body armor, the power stiffens the suit's fibers to provide a layer of resilient armor in response to trauma received from kinetic force. It's fitted with a geiger counter, tactical radio, a heads up display and a combat cocktail injector that allows the user to function normally even after serious injury. The concentration of mass in the lower rear side from the onboard computer makes your ass feel heavy."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
+ icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecucloth.dmi'
+ worn_icon = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob.dmi'
+ worn_icon_digi = 'modular_nova/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
icon_state = "hecu_vest"
armor_type = /datum/armor/hev_suit_pcv
flags_inv = null
@@ -799,40 +799,40 @@
activation_song = null // removal of song only standard suit will have the song
- logon_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg'
- armor_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg'
- atmospherics_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg'
- vitalsigns_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg'
- automedic_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg'
- weaponselect_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg'
- munitions_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg'
- communications_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg'
- safe_day_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg'
-
- batt_50_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg'
- batt_40_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg'
- batt_30_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg'
- batt_20_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg'
- batt_10_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg'
-
- near_death_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg'
- health_critical_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg'
- health_dropping_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg'
-
- blood_loss_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg'
- blood_toxins_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg'
- biohazard_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg'
- chemical_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg'
-
- minor_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg'
- major_fracture_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg'
- minor_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg'
- major_lacerations_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg'
-
- morphine_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg'
- wound_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg'
- antitoxin_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg'
- antidote_sound = 'modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg'
+ logon_sound = 'modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg'
+ armor_sound = 'modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg'
+ atmospherics_sound = 'modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg'
+ vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg'
+ automedic_sound = 'modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg'
+ weaponselect_sound = 'modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg'
+ munitions_sound = 'modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg'
+ communications_sound = 'modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg'
+ safe_day_sound = 'modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg'
+
+ batt_50_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg'
+ batt_40_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg'
+ batt_30_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg'
+ batt_20_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg'
+ batt_10_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg'
+
+ near_death_sound = 'modular_nova/modules/hev_suit/sound/pcv/near_death.ogg'
+ health_critical_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg'
+ health_dropping_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg'
+
+ blood_loss_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg'
+ blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg'
+ biohazard_sound = 'modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg'
+ chemical_sound = 'modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg'
+
+ minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg'
+ major_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg'
+ minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg'
+ major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg'
+
+ morphine_sound = 'modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg'
+ wound_sound = 'modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg'
+ antitoxin_sound = 'modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg'
+ antidote_sound = 'modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg'
armor_unpowered = /datum/armor/hev_suit_pcv
armor_powered = /datum/armor/hev_suit_pcv/powered
diff --git a/modular_skyrat/modules/hev_suit/icons/toggles.dmi b/modular_nova/modules/hev_suit/icons/toggles.dmi
similarity index 100%
rename from modular_skyrat/modules/hev_suit/icons/toggles.dmi
rename to modular_nova/modules/hev_suit/icons/toggles.dmi
diff --git a/modular_skyrat/modules/hev_suit/readme.md b/modular_nova/modules/hev_suit/readme.md
similarity index 100%
rename from modular_skyrat/modules/hev_suit/readme.md
rename to modular_nova/modules/hev_suit/readme.md
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg b/modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/01_hev_logon.ogg
rename to modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/02_powerarmor_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/03_atmospherics_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/05_automedic_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/06_weaponselect_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/07_munitionview_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/08_communications_on.ogg
rename to modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/09_safe_day.ogg
rename to modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/_comma.ogg b/modular_nova/modules/hev_suit/sound/hev/_comma.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/_comma.ogg
rename to modular_nova/modules/hev_suit/sound/hev/_comma.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/_period.ogg b/modular_nova/modules/hev_suit/sound/hev/_period.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/_period.ogg
rename to modular_nova/modules/hev_suit/sound/hev/_period.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/acquired.ogg b/modular_nova/modules/hev_suit/sound/hev/acquired.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/acquired.ogg
rename to modular_nova/modules/hev_suit/sound/hev/acquired.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/activated.ogg b/modular_nova/modules/hev_suit/sound/hev/activated.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/activated.ogg
rename to modular_nova/modules/hev_suit/sound/hev/activated.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/ammo_depleted.ogg
rename to modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ammowarning.ogg b/modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/ammowarning.ogg
rename to modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg b/modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/anomalous_materials.ogg
rename to modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/antidote_shot.ogg
rename to modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/antitoxin_shot.ogg
rename to modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/beep.ogg b/modular_nova/modules/hev_suit/sound/hev/beep.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/beep.ogg
rename to modular_nova/modules/hev_suit/sound/hev/beep.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/bell.ogg b/modular_nova/modules/hev_suit/sound/hev/bell.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/bell.ogg
rename to modular_nova/modules/hev_suit/sound/hev/bell.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/biohazard_detected.ogg
rename to modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blip.ogg b/modular_nova/modules/hev_suit/sound/hev/blip.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/blip.ogg
rename to modular_nova/modules/hev_suit/sound/hev/blip.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/blood_loss.ogg
rename to modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/blood_toxins.ogg
rename to modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/boop.ogg b/modular_nova/modules/hev_suit/sound/hev/boop.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/boop.ogg
rename to modular_nova/modules/hev_suit/sound/hev/boop.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/chemical_detected.ogg
rename to modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/eighty.ogg b/modular_nova/modules/hev_suit/sound/hev/eighty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/eighty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/eighty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fifteen.ogg b/modular_nova/modules/hev_suit/sound/hev/fifteen.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/fifteen.ogg
rename to modular_nova/modules/hev_suit/sound/hev/fifteen.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/fifty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/fifty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/five.ogg b/modular_nova/modules/hev_suit/sound/hev/five.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/five.ogg
rename to modular_nova/modules/hev_suit/sound/hev/five.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg b/modular_nova/modules/hev_suit/sound/hev/flatline.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/flatline.ogg
rename to modular_nova/modules/hev_suit/sound/hev/flatline.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/fourty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/fourty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/fourty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/fuzz.ogg b/modular_nova/modules/hev_suit/sound/hev/fuzz.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/fuzz.ogg
rename to modular_nova/modules/hev_suit/sound/hev/fuzz.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg b/modular_nova/modules/hev_suit/sound/hev/health_critical.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/health_critical.ogg
rename to modular_nova/modules/hev_suit/sound/hev/health_critical.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/health_dropping2.ogg
rename to modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg b/modular_nova/modules/hev_suit/sound/hev/hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg
rename to modular_nova/modules/hev_suit/sound/hev/hiss.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/major_fracture.ogg
rename to modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/major_lacerations.ogg
rename to modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/minor_fracture.ogg
rename to modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/minor_lacerations.ogg
rename to modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/morphine_shot.ogg
rename to modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg b/modular_nova/modules/hev_suit/sound/hev/near_death.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/near_death.ogg
rename to modular_nova/modules/hev_suit/sound/hev/near_death.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ninety.ogg b/modular_nova/modules/hev_suit/sound/hev/ninety.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/ninety.ogg
rename to modular_nova/modules/hev_suit/sound/hev/ninety.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/onehundred.ogg b/modular_nova/modules/hev_suit/sound/hev/onehundred.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/onehundred.ogg
rename to modular_nova/modules/hev_suit/sound/hev/onehundred.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/percent.ogg b/modular_nova/modules/hev_suit/sound/hev/percent.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/percent.ogg
rename to modular_nova/modules/hev_suit/sound/hev/percent.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fifty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_fourty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_ten.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_thirty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_level_is_twenty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/power_restored.ogg b/modular_nova/modules/hev_suit/sound/hev/power_restored.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/power_restored.ogg
rename to modular_nova/modules/hev_suit/sound/hev/power_restored.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/radiation_detected.ogg
rename to modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/seek_medic.ogg
rename to modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/seventy.ogg b/modular_nova/modules/hev_suit/sound/hev/seventy.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/seventy.ogg
rename to modular_nova/modules/hev_suit/sound/hev/seventy.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/sixty.ogg b/modular_nova/modules/hev_suit/sound/hev/sixty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/sixty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/sixty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/ten.ogg b/modular_nova/modules/hev_suit/sound/hev/ten.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/ten.ogg
rename to modular_nova/modules/hev_suit/sound/hev/ten.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/thirty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/thirty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/twenty.ogg
rename to modular_nova/modules/hev_suit/sound/hev/twenty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/warning.ogg b/modular_nova/modules/hev_suit/sound/hev/warning.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/warning.ogg
rename to modular_nova/modules/hev_suit/sound/hev/warning.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/hev/wound_sterilized.ogg
rename to modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg b/modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/01_pcv_logon.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/05_automedic_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/07_munitionview_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/08_communications_on.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/09_safe_day.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/_comma.ogg b/modular_nova/modules/hev_suit/sound/pcv/_comma.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/_comma.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/_comma.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/_period.ogg b/modular_nova/modules/hev_suit/sound/pcv/_period.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/_period.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/_period.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/acquired.ogg b/modular_nova/modules/hev_suit/sound/pcv/acquired.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/acquired.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/acquired.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/activated.ogg b/modular_nova/modules/hev_suit/sound/pcv/activated.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/activated.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/activated.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/ammo_depleted.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/antidote_shot.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/antitoxin_shot.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/beep.ogg b/modular_nova/modules/hev_suit/sound/pcv/beep.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/beep.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/beep.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/bell.ogg b/modular_nova/modules/hev_suit/sound/pcv/bell.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/bell.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/bell.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/biohazard_detected.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blip.ogg b/modular_nova/modules/hev_suit/sound/pcv/blip.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/blip.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/blip.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_loss.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_plasma.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_plasma.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/blood_toxins.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/boop.ogg b/modular_nova/modules/hev_suit/sound/pcv/boop.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/boop.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/boop.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/chemical_detected.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/eighty.ogg b/modular_nova/modules/hev_suit/sound/pcv/eighty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/eighty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/eighty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fifteen.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/fifteen.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/fifty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/fifty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/five.ogg b/modular_nova/modules/hev_suit/sound/pcv/five.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/five.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/five.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/flatline.ogg b/modular_nova/modules/hev_suit/sound/pcv/flatline.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/flatline.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/flatline.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fourty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/fourty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/fourty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/fuzz.ogg b/modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/fuzz.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/health_critical.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/health_dropping2.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/hiss.ogg b/modular_nova/modules/hev_suit/sound/pcv/hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/hiss.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/hiss.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/major_fracture.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/major_lacerations.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/minor_fracture.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/minor_lacerations.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/morphine_shot.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg b/modular_nova/modules/hev_suit/sound/pcv/near_death.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/near_death.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/near_death.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ninety.ogg b/modular_nova/modules/hev_suit/sound/pcv/ninety.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/ninety.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/ninety.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/onehundred.ogg b/modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/onehundred.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/pain_block.ogg b/modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/pain_block.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/percent.ogg b/modular_nova/modules/hev_suit/sound/pcv/percent.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/percent.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/percent.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_ten.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/power_restored.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/power_restored.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/radiation_detected.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/seek_medic.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/seventy.ogg b/modular_nova/modules/hev_suit/sound/pcv/seventy.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/seventy.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/seventy.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/sixty.ogg b/modular_nova/modules/hev_suit/sound/pcv/sixty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/sixty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/sixty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/ten.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/ten.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/ten.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/thirty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/thirty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/thirty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/torniquette_applied.ogg b/modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/torniquette_applied.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/twenty.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/twenty.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/twenty.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/warning.ogg b/modular_nova/modules/hev_suit/sound/pcv/warning.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/warning.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/warning.ogg
diff --git a/modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg
similarity index 100%
rename from modular_skyrat/modules/hev_suit/sound/pcv/wound_sterilized.ogg
rename to modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg
diff --git a/modular_nova/modules/holdingfashion_port/code/backpack.dm b/modular_nova/modules/holdingfashion_port/code/backpack.dm
new file mode 100644
index 00000000000..6813db004dd
--- /dev/null
+++ b/modular_nova/modules/holdingfashion_port/code/backpack.dm
@@ -0,0 +1,33 @@
+/obj/item/satchel_of_holding_inert
+ name = "inert satchel of holding"
+ desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core."
+ icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi'
+ icon_state = "inertsatchel"
+ w_class = WEIGHT_CLASS_BULKY
+ resistance_flags = FIRE_PROOF
+ item_flags = NO_MAT_REDEMPTION
+
+/obj/item/storage/backpack/holding/satchel
+ name = "satchel of holding"
+ desc = "A satchel that opens into a localized pocket of bluespace."
+ icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi'
+ icon_state = "holdingsatchel"
+ worn_icon = 'modular_nova/modules/holdingfashion_port/icons/back.dmi'
+ worn_icon_state = "holdingsatchel"
+
+/obj/item/duffel_of_holding_inert
+ name = "inert duffel bag of holding"
+ desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core."
+ icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi'
+ icon_state = "inertduffel"
+ w_class = WEIGHT_CLASS_BULKY
+ resistance_flags = FIRE_PROOF
+ item_flags = NO_MAT_REDEMPTION
+
+/obj/item/storage/backpack/holding/duffel
+ name = "duffel bag of holding"
+ desc = "A duffel bag that opens into a localized pocket of bluespace."
+ icon = 'modular_nova/modules/holdingfashion_port/icons/storage.dmi'
+ icon_state = "holdingduffel"
+ worn_icon = 'modular_nova/modules/holdingfashion_port/icons/back.dmi'
+ worn_icon_state = "holdingduffel"
diff --git a/modular_skyrat/modules/holdingfashion_port/code/bluespace_design.dm b/modular_nova/modules/holdingfashion_port/code/bluespace_design.dm
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/code/bluespace_design.dm
rename to modular_nova/modules/holdingfashion_port/code/bluespace_design.dm
diff --git a/modular_skyrat/modules/holdingfashion_port/code/bluespace_node.dm b/modular_nova/modules/holdingfashion_port/code/bluespace_node.dm
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/code/bluespace_node.dm
rename to modular_nova/modules/holdingfashion_port/code/bluespace_node.dm
diff --git a/modular_skyrat/modules/holdingfashion_port/code/recipes.dm b/modular_nova/modules/holdingfashion_port/code/recipes.dm
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/code/recipes.dm
rename to modular_nova/modules/holdingfashion_port/code/recipes.dm
diff --git a/modular_skyrat/modules/holdingfashion_port/icons/back.dmi b/modular_nova/modules/holdingfashion_port/icons/back.dmi
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/icons/back.dmi
rename to modular_nova/modules/holdingfashion_port/icons/back.dmi
diff --git a/modular_skyrat/modules/holdingfashion_port/icons/storage.dmi b/modular_nova/modules/holdingfashion_port/icons/storage.dmi
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/icons/storage.dmi
rename to modular_nova/modules/holdingfashion_port/icons/storage.dmi
diff --git a/modular_skyrat/modules/holdingfashion_port/readme.md b/modular_nova/modules/holdingfashion_port/readme.md
similarity index 100%
rename from modular_skyrat/modules/holdingfashion_port/readme.md
rename to modular_nova/modules/holdingfashion_port/readme.md
diff --git a/modular_skyrat/modules/holidays/flora.dm b/modular_nova/modules/holidays/flora.dm
similarity index 100%
rename from modular_skyrat/modules/holidays/flora.dm
rename to modular_nova/modules/holidays/flora.dm
diff --git a/modular_nova/modules/hop_drip/code/head_of_personnel.dm b/modular_nova/modules/hop_drip/code/head_of_personnel.dm
new file mode 100644
index 00000000000..6302b42800d
--- /dev/null
+++ b/modular_nova/modules/hop_drip/code/head_of_personnel.dm
@@ -0,0 +1,38 @@
+/obj/item/storage/backpack/head_of_personnel
+ name = "head of personnel backpack"
+ desc = "A exclusive backpack issued to Nanotrasen's finest second."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "backpack_hop"
+ inhand_icon_state = "backpack_hop"
+
+/obj/item/storage/backpack/satchel/head_of_personnel
+ name = "head of personnel satchel"
+ desc = "A exclusive satchel issued to Nanotrasen's finest second."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "satchel_hop"
+ inhand_icon_state = "satchel_hop"
+
+/obj/item/storage/backpack/duffelbag/head_of_personnel
+ name = "head of personnel duffelbag"
+ desc = "A robust duffelbag issued to Nanotrasen's finest second."
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon_state = "duffel_hop"
+ inhand_icon_state = "duffel_hop"
+
+/obj/item/radio/headset/heads/hop/alt
+ name = "\proper the head of personnel's bowman headset"
+ desc = "The headset of the second. Protects ears from flashbangs."
+ icon_state = "com_headset_alt"
+
+/obj/item/radio/headset/heads/hop/alt/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
diff --git a/modular_skyrat/modules/horrorform/code/horror_form.dm b/modular_nova/modules/horrorform/code/horror_form.dm
similarity index 94%
rename from modular_skyrat/modules/horrorform/code/horror_form.dm
rename to modular_nova/modules/horrorform/code/horror_form.dm
index 9e6ea71ad73..70957ec583a 100644
--- a/modular_skyrat/modules/horrorform/code/horror_form.dm
+++ b/modular_nova/modules/horrorform/code/horror_form.dm
@@ -2,8 +2,8 @@
name = "Horror Form"
desc = "We tear apart our human disguise, revealing our true form."
helptext = "We will become an unstoppable force of destruction. If we die in this form, we will reach equilibrium and explode into a shower of gore! We require the absorption of at least one other human, and 15 extracts of DNA."
- button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi'
- button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi'
+ button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi'
+ button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi'
button_icon_state = "horror_form"
background_icon_state = "bg_changeling"
chemical_cost = 50
diff --git a/modular_skyrat/modules/horrorform/code/true_changeling.dm b/modular_nova/modules/horrorform/code/true_changeling.dm
similarity index 93%
rename from modular_skyrat/modules/horrorform/code/true_changeling.dm
rename to modular_nova/modules/horrorform/code/true_changeling.dm
index 6d7831cd3b2..2c67940e5a7 100644
--- a/modular_skyrat/modules/horrorform/code/true_changeling.dm
+++ b/modular_nova/modules/horrorform/code/true_changeling.dm
@@ -10,7 +10,7 @@
desc = "Holy shit, what the fuck is that thing?!"
speak_emote = list("says with one of its faces")
emote_hear = list("says with one of its faces")
- icon = 'modular_skyrat/modules/horrorform/icons/animal.dmi'
+ icon = 'modular_nova/modules/horrorform/icons/animal.dmi'
icon_state = "horror"
icon_living = "horror"
icon_dead = "horror_dead"
@@ -85,10 +85,10 @@
if(M_turf && M_turf.z == src.z)
var/dist = get_dist(M_turf, src)
if(dist <= 7) //source of sound very close
- M.playsound_local(src, 'modular_skyrat/modules/horrorform/sound/horror_scream.ogg', 80, 1, frequency)
+ M.playsound_local(src, 'modular_nova/modules/horrorform/sound/horror_scream.ogg', 80, 1, frequency)
else
var/vol = clamp(100-((dist-7)*5), 10, 100) //Every tile decreases sound volume by 5
- M.playsound_local(src, 'modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg', vol, 1, frequency)
+ M.playsound_local(src, 'modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg', vol, 1, frequency)
if(M.stat == DEAD && (M.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) && !(M in viewers(get_turf(src),null)))
M.show_message(message)
audible_message(message)
@@ -136,7 +136,7 @@
/obj/projectile/bullet/pellet/bone_fragment
name = "bone fragment"
- icon = 'modular_skyrat/modules/horrorform/icons/bone_fragment.dmi'
+ icon = 'modular_nova/modules/horrorform/icons/bone_fragment.dmi'
icon_state = "bone_fragment"
damage = 8
ricochets_max = 3
@@ -157,7 +157,7 @@
/obj/item/grenade/stingbang/bonebang
name = "bonebang"
- icon = 'modular_skyrat/modules/horrorform/icons/bone_fragment.dmi'
+ icon = 'modular_nova/modules/horrorform/icons/bone_fragment.dmi'
icon_state = "grenade_bone"
shrapnel_type = /obj/projectile/bullet/pellet/bone_fragment
shrapnel_radius = 8
@@ -169,8 +169,8 @@
/datum/action/innate/turn_to_human
name = "Re-Form Human Shell"
desc = "We turn back into a human. This takes considerable effort and will stun us for some time afterwards."
- button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi'
- button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi'
+ button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi'
+ button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi'
background_icon_state = "bg_changeling"
button_icon_state = "change_to_human"
@@ -198,7 +198,7 @@
/datum/action/innate/devour
name = "Devour"
desc = "We tear into the innards of a human. After some time, they will be significantly damaged and our health partially restored."
- button_icon = 'modular_skyrat/modules/horrorform/icons/actions_changeling.dmi'
+ button_icon = 'modular_nova/modules/horrorform/icons/actions_changeling.dmi'
background_icon_state = "bg_changeling"
button_icon_state = "devour"
@@ -247,7 +247,7 @@
guts.dismember()
dismembered = TRUE
playsound(lunch, 'sound/effects/splat.ogg', 50, 1)
- playsound(lunch, 'modular_skyrat/modules/horrorform/sound/tear.ogg', 50, 1)
+ playsound(lunch, 'modular_nova/modules/horrorform/sound/tear.ogg', 50, 1)
lunch.emote("scream")
if(lunch.nutrition >= NUTRITION_LEVEL_FAT)
horrorform.adjustBruteLoss(-100) //Tasty leetle peegy
diff --git a/modular_skyrat/modules/horrorform/icons/actions_changeling.dmi b/modular_nova/modules/horrorform/icons/actions_changeling.dmi
similarity index 100%
rename from modular_skyrat/modules/horrorform/icons/actions_changeling.dmi
rename to modular_nova/modules/horrorform/icons/actions_changeling.dmi
diff --git a/modular_skyrat/modules/horrorform/icons/animal.dmi b/modular_nova/modules/horrorform/icons/animal.dmi
similarity index 100%
rename from modular_skyrat/modules/horrorform/icons/animal.dmi
rename to modular_nova/modules/horrorform/icons/animal.dmi
diff --git a/modular_skyrat/modules/horrorform/icons/bone_fragment.dmi b/modular_nova/modules/horrorform/icons/bone_fragment.dmi
similarity index 100%
rename from modular_skyrat/modules/horrorform/icons/bone_fragment.dmi
rename to modular_nova/modules/horrorform/icons/bone_fragment.dmi
diff --git a/modular_nova/modules/horrorform/readme.md b/modular_nova/modules/horrorform/readme.md
new file mode 100644
index 00000000000..b693df6530d
--- /dev/null
+++ b/modular_nova/modules/horrorform/readme.md
@@ -0,0 +1,30 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/241
+
+## Title: Changeling Horror Form
+
+MODULE ID: HORROR_FORM
+
+### Description:
+
+Allows changelings to turn into the simple_mob horror_form which they are powerful but slow and loud. Can change back too.
+
+### TG Proc Changes:
+
+- N/A
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+- modular_nova\master_files\sound\misc\tear.ogg
+- modular_nova\master_files\sound\effects\horror_scream_reverb.ogg
+- modular_nova\master_files\sound\effects\horror_scream.ogg
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Gandalf2k15 - porting & refactoring
diff --git a/modular_skyrat/modules/horrorform/sound/horror_scream.ogg b/modular_nova/modules/horrorform/sound/horror_scream.ogg
similarity index 100%
rename from modular_skyrat/modules/horrorform/sound/horror_scream.ogg
rename to modular_nova/modules/horrorform/sound/horror_scream.ogg
diff --git a/modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg b/modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg
similarity index 100%
rename from modular_skyrat/modules/horrorform/sound/horror_scream_reverb.ogg
rename to modular_nova/modules/horrorform/sound/horror_scream_reverb.ogg
diff --git a/modular_skyrat/modules/horrorform/sound/tear.ogg b/modular_nova/modules/horrorform/sound/tear.ogg
similarity index 100%
rename from modular_skyrat/modules/horrorform/sound/tear.ogg
rename to modular_nova/modules/horrorform/sound/tear.ogg
diff --git a/modular_skyrat/modules/hotel_rooms/apartment.dmm b/modular_nova/modules/hotel_rooms/apartment.dmm
similarity index 99%
rename from modular_skyrat/modules/hotel_rooms/apartment.dmm
rename to modular_nova/modules/hotel_rooms/apartment.dmm
index 1f29586f206..f5db0583a2c 100644
--- a/modular_skyrat/modules/hotel_rooms/apartment.dmm
+++ b/modular_nova/modules/hotel_rooms/apartment.dmm
@@ -40,7 +40,7 @@
},
/obj/structure/showcase{
name = "doorphone";
- icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi';
+ icon = 'modular_nova/modules/aesthetics/intercom/icons/intercom.dmi';
icon_state = "intercom";
pixel_y = 24;
density = 0
diff --git a/modular_skyrat/modules/huds/code/designs.dm b/modular_nova/modules/huds/code/designs.dm
similarity index 100%
rename from modular_skyrat/modules/huds/code/designs.dm
rename to modular_nova/modules/huds/code/designs.dm
diff --git a/modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm b/modular_nova/modules/huds/code/glasses/HUD_Glasses.dm
similarity index 86%
rename from modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm
rename to modular_nova/modules/huds/code/glasses/HUD_Glasses.dm
index 1fc3e621418..875cffe91ab 100644
--- a/modular_skyrat/modules/huds/code/glasses/HUD_Glasses.dm
+++ b/modular_nova/modules/huds/code/glasses/HUD_Glasses.dm
@@ -1,33 +1,33 @@
/obj/item/clothing/glasses/hud/health/prescription
name = "prescription health scanner HUD"
desc = "A heads-up display that scans the humanoids in view and provides accurate data about their health status. This one has prescription lenses."
- icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
+ icon = 'modular_nova/modules/huds/icons/huds.dmi'
icon_state = "glasses_healthhud"
- worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
+ worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi'
clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
/obj/item/clothing/glasses/hud/diagnostic/prescription
name = "prescription diagnostic HUD"
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This one has prescription lenses."
- icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
+ icon = 'modular_nova/modules/huds/icons/huds.dmi'
icon_state = "glasses_diagnostichud"
- worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
+ worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi'
clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
/obj/item/clothing/glasses/hud/security/prescription
name = "prescription security HUD"
desc = "A heads-up display that scans the humanoids in view and provides accurate data about their ID status and security records. This one has prescription lenses."
- icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
+ icon = 'modular_nova/modules/huds/icons/huds.dmi'
icon_state = "glasses_securityhud"
- worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
+ worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi'
clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
/obj/item/clothing/glasses/hud/science/prescription
name = "prescription science glasses"
desc = "These glasses scan the contents of containers and projects their contents to the user in an easy to read format. This one has prescription lenses."
- icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
+ icon = 'modular_nova/modules/huds/icons/huds.dmi'
icon_state = "glasses_sciencehud"
- worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
+ worn_icon = 'modular_nova/modules/huds/icons/hudeyes.dmi'
flash_protect = FLASH_PROTECTION_NONE
glass_colour_type = /datum/client_colour/glass_colour/purple
resistance_flags = ACID_PROOF
diff --git a/modular_skyrat/modules/huds/icons/hudeyes.dmi b/modular_nova/modules/huds/icons/hudeyes.dmi
similarity index 100%
rename from modular_skyrat/modules/huds/icons/hudeyes.dmi
rename to modular_nova/modules/huds/icons/hudeyes.dmi
diff --git a/modular_skyrat/modules/huds/icons/huds.dmi b/modular_nova/modules/huds/icons/huds.dmi
similarity index 100%
rename from modular_skyrat/modules/huds/icons/huds.dmi
rename to modular_nova/modules/huds/icons/huds.dmi
diff --git a/modular_skyrat/modules/huds/readme.md b/modular_nova/modules/huds/readme.md
similarity index 100%
rename from modular_skyrat/modules/huds/readme.md
rename to modular_nova/modules/huds/readme.md
diff --git a/modular_skyrat/modules/hurtsposals/code/pipe.dm b/modular_nova/modules/hurtsposals/code/pipe.dm
similarity index 100%
rename from modular_skyrat/modules/hurtsposals/code/pipe.dm
rename to modular_nova/modules/hurtsposals/code/pipe.dm
diff --git a/modular_skyrat/modules/hydra/code/neutral.dm b/modular_nova/modules/hydra/code/neutral.dm
similarity index 100%
rename from modular_skyrat/modules/hydra/code/neutral.dm
rename to modular_nova/modules/hydra/code/neutral.dm
diff --git a/modular_skyrat/modules/hydra/icons/other_markings.dmi b/modular_nova/modules/hydra/icons/other_markings.dmi
similarity index 100%
rename from modular_skyrat/modules/hydra/icons/other_markings.dmi
rename to modular_nova/modules/hydra/icons/other_markings.dmi
diff --git a/modular_skyrat/modules/hydra/icons/snouts.dmi b/modular_nova/modules/hydra/icons/snouts.dmi
similarity index 100%
rename from modular_skyrat/modules/hydra/icons/snouts.dmi
rename to modular_nova/modules/hydra/icons/snouts.dmi
diff --git a/modular_nova/modules/hydra/readme.md b/modular_nova/modules/hydra/readme.md
new file mode 100644
index 00000000000..458e72e2cf7
--- /dev/null
+++ b/modular_nova/modules/hydra/readme.md
@@ -0,0 +1,29 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/4211
+
+## Title: Mechanical Hydra Heads
+
+MODULE ID: hydra
+
+### Description:
+
+- Adds a baseline sprite file, sprite override files, and mechanics for supporting three voices per person
+
+### TG Proc Changes:
+
+- N/A
+
+### Defines:
+
+- TRAIT_HYDRA_HEADS
+
+### Master file additions
+
+- modular_nova/master_files/code/datums/traits/neutral.dm // Added Hydra Heads trait
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+- Yawet330 - Code
+- C0rva1r - Sprites and base idea
diff --git a/modular_skyrat/modules/hyposprays/code/autolathe_designs.dm b/modular_nova/modules/hyposprays/code/autolathe_designs.dm
similarity index 100%
rename from modular_skyrat/modules/hyposprays/code/autolathe_designs.dm
rename to modular_nova/modules/hyposprays/code/autolathe_designs.dm
diff --git a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm b/modular_nova/modules/hyposprays/code/hypospray_kits.dm
similarity index 98%
rename from modular_skyrat/modules/hyposprays/code/hypospray_kits.dm
rename to modular_nova/modules/hyposprays/code/hypospray_kits.dm
index 25565fc7e57..e1e21d7a8d9 100644
--- a/modular_skyrat/modules/hyposprays/code/hypospray_kits.dm
+++ b/modular_nova/modules/hyposprays/code/hypospray_kits.dm
@@ -1,7 +1,7 @@
/obj/item/storage/hypospraykit
name = "hypospray kit"
desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials."
- icon = 'modular_skyrat/modules/hyposprays/icons/hypokits.dmi'
+ icon = 'modular_nova/modules/hyposprays/icons/hypokits.dmi'
icon_state = "firstaid-mini"
worn_icon_state = "healthanalyzer" // Get a better sprite later
inhand_icon_state = "medkit"
diff --git a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm b/modular_nova/modules/hyposprays/code/hyposprays_II.dm
similarity index 96%
rename from modular_skyrat/modules/hyposprays/code/hyposprays_II.dm
rename to modular_nova/modules/hyposprays/code/hyposprays_II.dm
index 51cc9c71472..a268e7e58b9 100644
--- a/modular_skyrat/modules/hyposprays/code/hyposprays_II.dm
+++ b/modular_nova/modules/hyposprays/code/hyposprays_II.dm
@@ -19,7 +19,7 @@
/obj/item/hypospray/mkii
name = "hypospray mk.II"
icon_state = "hypo2"
- icon = 'modular_skyrat/modules/hyposprays/icons/hyposprays.dmi'
+ icon = 'modular_nova/modules/hyposprays/icons/hyposprays.dmi'
desc = "A new development from DeForest Medical, this hypospray takes 60-unit vials as the drug supply for easy swapping."
w_class = WEIGHT_CLASS_TINY
var/list/allowed_containers = list(/obj/item/reagent_containers/cup/vial/small)
@@ -84,7 +84,7 @@
vial_spritetype += "[vial.type_suffix]"
else
vial_spritetype += "-s"
- var/mutable_appearance/chem_loaded = mutable_appearance('modular_skyrat/modules/hyposprays/icons/hyposprays.dmi', vial_spritetype)
+ var/mutable_appearance/chem_loaded = mutable_appearance('modular_nova/modules/hyposprays/icons/hyposprays.dmi', vial_spritetype)
chem_loaded.color = vial.chem_color
. += chem_loaded
@@ -243,7 +243,7 @@
vial.reagents.trans_to(injectee, vial.amount_per_transfer_from_this, methods = PATCH)
var/long_sound = vial.amount_per_transfer_from_this >= 15
- playsound(loc, long_sound ? 'modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg' : pick('modular_skyrat/modules/hyposprays/sound/hypospray.ogg','modular_skyrat/modules/hyposprays/sound/hypospray2.ogg'), 50, 1, -1)
+ playsound(loc, long_sound ? 'modular_nova/modules/hyposprays/sound/hypospray_long.ogg' : pick('modular_nova/modules/hyposprays/sound/hypospray.ogg','modular_nova/modules/hyposprays/sound/hypospray2.ogg'), 50, 1, -1)
to_chat(user, span_notice("You [fp_verb] [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units."))
update_appearance()
diff --git a/modular_skyrat/modules/hyposprays/code/hypovials.dm b/modular_nova/modules/hyposprays/code/hypovials.dm
similarity index 92%
rename from modular_skyrat/modules/hyposprays/code/hypovials.dm
rename to modular_nova/modules/hyposprays/code/hypovials.dm
index a4781bfea8f..2c97e480325 100644
--- a/modular_skyrat/modules/hyposprays/code/hypovials.dm
+++ b/modular_nova/modules/hyposprays/code/hypovials.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/cup/vial
name = "broken hypovial"
desc = "You probably shouldn't be seeing this. Shout at a coder."
- icon = 'modular_skyrat/modules/hyposprays/icons/vials.dmi'
+ icon = 'modular_nova/modules/hyposprays/icons/vials.dmi'
icon_state = "hypovial"
spillable = FALSE
volume = 10
@@ -29,7 +29,7 @@
fill_overlay = 75
if(89 to 100)
fill_overlay = 100
- var/mutable_appearance/filling = mutable_appearance('modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi', "[fill_name][fill_overlay]")
+ var/mutable_appearance/filling = mutable_appearance('modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi', "[fill_name][fill_overlay]")
filling.color = mix_color_from_reagents(reagents.reagent_list)
chem_color = filling.color
diff --git a/modular_skyrat/modules/hyposprays/code/vending_hypospray.dm b/modular_nova/modules/hyposprays/code/vending_hypospray.dm
similarity index 100%
rename from modular_skyrat/modules/hyposprays/code/vending_hypospray.dm
rename to modular_nova/modules/hyposprays/code/vending_hypospray.dm
diff --git a/modular_skyrat/modules/hyposprays/icons/hypokits.dmi b/modular_nova/modules/hyposprays/icons/hypokits.dmi
similarity index 100%
rename from modular_skyrat/modules/hyposprays/icons/hypokits.dmi
rename to modular_nova/modules/hyposprays/icons/hypokits.dmi
diff --git a/modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi b/modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi
similarity index 100%
rename from modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi
rename to modular_nova/modules/hyposprays/icons/hypospray_fillings.dmi
diff --git a/modular_skyrat/modules/hyposprays/icons/hyposprays.dmi b/modular_nova/modules/hyposprays/icons/hyposprays.dmi
similarity index 100%
rename from modular_skyrat/modules/hyposprays/icons/hyposprays.dmi
rename to modular_nova/modules/hyposprays/icons/hyposprays.dmi
diff --git a/modular_skyrat/modules/hyposprays/icons/vials.dmi b/modular_nova/modules/hyposprays/icons/vials.dmi
similarity index 100%
rename from modular_skyrat/modules/hyposprays/icons/vials.dmi
rename to modular_nova/modules/hyposprays/icons/vials.dmi
diff --git a/modular_skyrat/modules/hyposprays/readme.md b/modular_nova/modules/hyposprays/readme.md
similarity index 100%
rename from modular_skyrat/modules/hyposprays/readme.md
rename to modular_nova/modules/hyposprays/readme.md
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray.ogg b/modular_nova/modules/hyposprays/sound/hypospray.ogg
similarity index 100%
rename from modular_skyrat/modules/hyposprays/sound/hypospray.ogg
rename to modular_nova/modules/hyposprays/sound/hypospray.ogg
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray2.ogg b/modular_nova/modules/hyposprays/sound/hypospray2.ogg
similarity index 100%
rename from modular_skyrat/modules/hyposprays/sound/hypospray2.ogg
rename to modular_nova/modules/hyposprays/sound/hypospray2.ogg
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg b/modular_nova/modules/hyposprays/sound/hypospray_long.ogg
similarity index 100%
rename from modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg
rename to modular_nova/modules/hyposprays/sound/hypospray_long.ogg
diff --git a/modular_skyrat/modules/icemoon_additions/code/icecat_recipes.dm b/modular_nova/modules/icemoon_additions/code/icecat_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/icemoon_additions/code/icecat_recipes.dm
rename to modular_nova/modules/icemoon_additions/code/icecat_recipes.dm
diff --git a/modular_skyrat/modules/icemoon_additions/code/pet_commands.dm b/modular_nova/modules/icemoon_additions/code/pet_commands.dm
similarity index 100%
rename from modular_skyrat/modules/icemoon_additions/code/pet_commands.dm
rename to modular_nova/modules/icemoon_additions/code/pet_commands.dm
diff --git a/modular_skyrat/modules/ices_events/code/ICES_event_config.dm b/modular_nova/modules/ices_events/code/ICES_event_config.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/ICES_event_config.dm
rename to modular_nova/modules/ices_events/code/ICES_event_config.dm
diff --git a/modular_skyrat/modules/ices_events/code/ICES_intensity_credits.dm b/modular_nova/modules/ices_events/code/ICES_intensity_credits.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/ICES_intensity_credits.dm
rename to modular_nova/modules/ices_events/code/ICES_intensity_credits.dm
diff --git a/modular_skyrat/modules/ices_events/code/ICES_procs.dm b/modular_nova/modules/ices_events/code/ICES_procs.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/ICES_procs.dm
rename to modular_nova/modules/ices_events/code/ICES_procs.dm
diff --git a/modular_skyrat/modules/ices_events/code/ICES_seclevel.dm b/modular_nova/modules/ices_events/code/ICES_seclevel.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/ICES_seclevel.dm
rename to modular_nova/modules/ices_events/code/ICES_seclevel.dm
diff --git a/modular_skyrat/modules/ices_events/code/ICES_tgui.dm b/modular_nova/modules/ices_events/code/ICES_tgui.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/ICES_tgui.dm
rename to modular_nova/modules/ices_events/code/ICES_tgui.dm
diff --git a/modular_skyrat/modules/ices_events/code/_ICES_globalvars.dm b/modular_nova/modules/ices_events/code/_ICES_globalvars.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/_ICES_globalvars.dm
rename to modular_nova/modules/ices_events/code/_ICES_globalvars.dm
diff --git a/modular_skyrat/modules/ices_events/code/effects/ef_foam.dm b/modular_nova/modules/ices_events/code/effects/ef_foam.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/effects/ef_foam.dm
rename to modular_nova/modules/ices_events/code/effects/ef_foam.dm
diff --git a/modular_skyrat/modules/ices_events/code/events/ev_meteors.dm b/modular_nova/modules/ices_events/code/events/ev_meteors.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/events/ev_meteors.dm
rename to modular_nova/modules/ices_events/code/events/ev_meteors.dm
diff --git a/modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm b/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/events/ev_roleplay_check.dm
rename to modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm
diff --git a/modular_skyrat/modules/ices_events/code/events/ev_scrubbers.dm b/modular_nova/modules/ices_events/code/events/ev_scrubbers.dm
similarity index 100%
rename from modular_skyrat/modules/ices_events/code/events/ev_scrubbers.dm
rename to modular_nova/modules/ices_events/code/events/ev_scrubbers.dm
diff --git a/modular_skyrat/modules/ices_events/readme.md b/modular_nova/modules/ices_events/readme.md
similarity index 100%
rename from modular_skyrat/modules/ices_events/readme.md
rename to modular_nova/modules/ices_events/readme.md
diff --git a/modular_skyrat/modules/icspawning/code/cards_ids.dm b/modular_nova/modules/icspawning/code/cards_ids.dm
similarity index 100%
rename from modular_skyrat/modules/icspawning/code/cards_ids.dm
rename to modular_nova/modules/icspawning/code/cards_ids.dm
diff --git a/modular_skyrat/modules/icspawning/code/observer.dm b/modular_nova/modules/icspawning/code/observer.dm
similarity index 100%
rename from modular_skyrat/modules/icspawning/code/observer.dm
rename to modular_nova/modules/icspawning/code/observer.dm
diff --git a/modular_skyrat/modules/icspawning/code/spell.dm b/modular_nova/modules/icspawning/code/spell.dm
similarity index 100%
rename from modular_skyrat/modules/icspawning/code/spell.dm
rename to modular_nova/modules/icspawning/code/spell.dm
diff --git a/modular_skyrat/modules/icspawning/code/standard.dm b/modular_nova/modules/icspawning/code/standard.dm
similarity index 100%
rename from modular_skyrat/modules/icspawning/code/standard.dm
rename to modular_nova/modules/icspawning/code/standard.dm
diff --git a/modular_skyrat/modules/icspawning/readme.md b/modular_nova/modules/icspawning/readme.md
similarity index 100%
rename from modular_skyrat/modules/icspawning/readme.md
rename to modular_nova/modules/icspawning/readme.md
diff --git a/modular_skyrat/modules/implants/code/augments_arms.dm b/modular_nova/modules/implants/code/augments_arms.dm
similarity index 93%
rename from modular_skyrat/modules/implants/code/augments_arms.dm
rename to modular_nova/modules/implants/code/augments_arms.dm
index 4cc168247f4..26f17d90c34 100644
--- a/modular_skyrat/modules/implants/code/augments_arms.dm
+++ b/modular_nova/modules/implants/code/augments_arms.dm
@@ -17,9 +17,9 @@
/obj/item/melee/implantarmblade
name = "implanted arm blade"
desc = "A long, sharp, mantis-like blade implanted into someones arm. Cleaves through flesh like its particularly strong butter."
- icon = 'modular_skyrat/modules/implants/icons/implanted_blade.dmi'
- righthand_file = 'modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi'
- lefthand_file = 'modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi'
+ icon = 'modular_nova/modules/implants/icons/implanted_blade.dmi'
+ righthand_file = 'modular_nova/modules/implants/icons/implanted_blade_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi'
icon_state = "mantis_blade"
w_class = WEIGHT_CLASS_BULKY
obj_flags = CONDUCTS_ELECTRICITY
@@ -27,7 +27,7 @@
force = 25
armour_penetration = 20
item_flags = NEEDS_PERMIT //Beepers gets angry if you get caught with this.
- hitsound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg'
+ hitsound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg'
/obj/item/melee/implantarmblade/energy
name = "energy arm blade"
@@ -41,7 +41,7 @@
name = "arm blade implant"
desc = "An integrated blade implant designed to be installed into a persons arm. Stylish and deadly; Although, being caught with this without proper permits is sure to draw unwanted attention."
items_to_create = list(/obj/item/melee/implantarmblade)
- icon = 'modular_skyrat/modules/implants/icons/implanted_blade.dmi'
+ icon = 'modular_nova/modules/implants/icons/implanted_blade.dmi'
icon_state = "mantis_blade"
/obj/item/organ/internal/cyberimp/arm/armblade/emag_act()
@@ -55,9 +55,9 @@
/obj/item/knife/razor_claws
name = "implanted razor claws"
desc = "A set of sharp, retractable claws built into the fingertips, five double-edged blades sure to turn people into mincemeat. Capable of shifting into 'Precision' mode to act similar to wirecutters."
- icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi'
- righthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi'
- lefthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi'
+ icon = 'modular_nova/modules/implants/icons/razorclaws.dmi'
+ righthand_file = 'modular_nova/modules/implants/icons/razorclaws_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/implants/icons/razorclaws_lefthand.dmi'
icon_state = "wolverine"
inhand_icon_state = "wolverine"
var/knife_force = 10
@@ -123,7 +123,7 @@
desc = "A set of hidden, retractable blades built into the fingertips; cyborg mercenary approved."
items_to_create = list(/obj/item/knife/razor_claws)
actions_types = list(/datum/action/item_action/organ_action/toggle/razor_claws)
- icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi'
+ icon = 'modular_nova/modules/implants/icons/razorclaws.dmi'
icon_state = "wolverine"
extend_sound = 'sound/items/unsheath.ogg'
retract_sound = 'sound/items/sheath.ogg'
@@ -141,7 +141,7 @@
/datum/action/item_action/organ_action/toggle/razor_claws
name = "Extend Claws"
desc = "You can also activate the claws in your hand to change their mode."
- button_icon = 'modular_skyrat/master_files/icons/hud/actions.dmi'
+ button_icon = 'modular_nova/master_files/icons/hud/actions.dmi'
button_icon_state = "wolverine"
/obj/item/organ/internal/cyberimp/arm/hacker
diff --git a/modular_skyrat/modules/implants/code/augments_chest.dm b/modular_nova/modules/implants/code/augments_chest.dm
similarity index 95%
rename from modular_skyrat/modules/implants/code/augments_chest.dm
rename to modular_nova/modules/implants/code/augments_chest.dm
index 87e817da379..e82ba992675 100644
--- a/modular_skyrat/modules/implants/code/augments_chest.dm
+++ b/modular_nova/modules/implants/code/augments_chest.dm
@@ -6,7 +6,7 @@
name = "internal health analyzer"
desc = "An advanced health analyzer implant, designed to directly interface with a host's body and relay scan information to the brain on command."
slot = ORGAN_SLOT_SCANNER
- icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi'
+ icon = 'modular_nova/modules/implants/icons/internal_HA.dmi'
icon_state = "internal_HA"
implant_overlay = null
implant_color = null
diff --git a/modular_skyrat/modules/implants/code/augments_eyes.dm b/modular_nova/modules/implants/code/augments_eyes.dm
similarity index 80%
rename from modular_skyrat/modules/implants/code/augments_eyes.dm
rename to modular_nova/modules/implants/code/augments_eyes.dm
index 4de66355058..d940eb5e789 100644
--- a/modular_skyrat/modules/implants/code/augments_eyes.dm
+++ b/modular_nova/modules/implants/code/augments_eyes.dm
@@ -1,5 +1,5 @@
/obj/item/organ/internal/eyes/robotic
- icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //So I had to fucking include the eye sprites
+ icon = 'modular_nova/modules/implants/icons/internal_HA.dmi' //So I had to fucking include the eye sprites
icon_state = "cybernetic_eyeballs"
/obj/item/organ/internal/eyes/robotic/xray
@@ -19,7 +19,7 @@
/obj/item/organ/internal/eyes/night_vision/cyber
name = "nightvision eyes"
- icon = 'modular_skyrat/modules/implants/icons/internal_HA.dmi' //All in the chest implants .dmi
+ icon = 'modular_nova/modules/implants/icons/internal_HA.dmi' //All in the chest implants .dmi
icon_state = "eyes_nvcyber"
desc = "A pair of eyes with built-in nightvision optics, with the additional bonus of being rad as hell."
eye_color_left = "#0ffc03"
diff --git a/modular_skyrat/modules/implants/code/augments_internal.dm b/modular_nova/modules/implants/code/augments_internal.dm
similarity index 100%
rename from modular_skyrat/modules/implants/code/augments_internal.dm
rename to modular_nova/modules/implants/code/augments_internal.dm
diff --git a/modular_skyrat/modules/implants/code/medical_designs.dm b/modular_nova/modules/implants/code/medical_designs.dm
similarity index 100%
rename from modular_skyrat/modules/implants/code/medical_designs.dm
rename to modular_nova/modules/implants/code/medical_designs.dm
diff --git a/modular_skyrat/modules/implants/code/medical_nodes.dm b/modular_nova/modules/implants/code/medical_nodes.dm
similarity index 100%
rename from modular_skyrat/modules/implants/code/medical_nodes.dm
rename to modular_nova/modules/implants/code/medical_nodes.dm
diff --git a/modular_skyrat/modules/implants/icons/implanted_blade.dmi b/modular_nova/modules/implants/icons/implanted_blade.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/implanted_blade.dmi
rename to modular_nova/modules/implants/icons/implanted_blade.dmi
diff --git a/modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/implanted_blade_lefthand.dmi
rename to modular_nova/modules/implants/icons/implanted_blade_lefthand.dmi
diff --git a/modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi b/modular_nova/modules/implants/icons/implanted_blade_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/implanted_blade_righthand.dmi
rename to modular_nova/modules/implants/icons/implanted_blade_righthand.dmi
diff --git a/modular_skyrat/modules/implants/icons/internal_HA.dmi b/modular_nova/modules/implants/icons/internal_HA.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/internal_HA.dmi
rename to modular_nova/modules/implants/icons/internal_HA.dmi
diff --git a/modular_skyrat/modules/implants/icons/razorclaws.dmi b/modular_nova/modules/implants/icons/razorclaws.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/razorclaws.dmi
rename to modular_nova/modules/implants/icons/razorclaws.dmi
diff --git a/modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi b/modular_nova/modules/implants/icons/razorclaws_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi
rename to modular_nova/modules/implants/icons/razorclaws_lefthand.dmi
diff --git a/modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi b/modular_nova/modules/implants/icons/razorclaws_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi
rename to modular_nova/modules/implants/icons/razorclaws_righthand.dmi
diff --git a/modular_skyrat/modules/implants/readme.md b/modular_nova/modules/implants/readme.md
similarity index 100%
rename from modular_skyrat/modules/implants/readme.md
rename to modular_nova/modules/implants/readme.md
diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_containers.dm b/modular_nova/modules/imported_vendors/code/vendor_containers.dm
similarity index 98%
rename from modular_skyrat/modules/imported_vendors/code/vendor_containers.dm
rename to modular_nova/modules/imported_vendors/code/vendor_containers.dm
index 9a9a34a34c8..608a2ac3937 100644
--- a/modular_skyrat/modules/imported_vendors/code/vendor_containers.dm
+++ b/modular_nova/modules/imported_vendors/code/vendor_containers.dm
@@ -1,7 +1,7 @@
/obj/item/storage/box/foodpack
name = "wrapped meal container"
desc = "A generic brown paper food package, you aren't quite sure where this comes from."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodpack_generic_big"
illustration = null
custom_price = PAYCHECK_CREW * 1.8
diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_food.dm b/modular_nova/modules/imported_vendors/code/vendor_food.dm
similarity index 98%
rename from modular_skyrat/modules/imported_vendors/code/vendor_food.dm
rename to modular_nova/modules/imported_vendors/code/vendor_food.dm
index 2fe1e97965d..42f6838634f 100644
--- a/modular_skyrat/modules/imported_vendors/code/vendor_food.dm
+++ b/modular_nova/modules/imported_vendors/code/vendor_food.dm
@@ -5,14 +5,14 @@
/obj/item/trash/empty_food_tray
name = "empty plastic food tray"
desc = "The condensation and what you can only hope are the leftovers of food make this a bit hard to reuse."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodtray_empty"
custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)
/obj/item/trash/empty_side_pack
name = "empty side wrapper"
desc = "Unfortunately, this no longer holds any sides to distract you from the other 'food'."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodpack_generic_trash"
custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)
@@ -37,7 +37,7 @@
/obj/item/food/vendor_tray_meal
name = "\improper NT-Meal: Steak and Macaroni"
desc = "A 'salisbury steak' drowning in something similar to a gravy, with a macaroni and cheese substitute mix sitting right beside it."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodtray_sad_steak"
trash_type = /obj/item/trash/empty_food_tray
food_reagents = list(/datum/reagent/consumable/nutriment = 8)
diff --git a/modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm b/modular_nova/modules/imported_vendors/code/vendor_snacks.dm
similarity index 98%
rename from modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm
rename to modular_nova/modules/imported_vendors/code/vendor_snacks.dm
index 38de344ec4d..b3ec4c1b867 100644
--- a/modular_skyrat/modules/imported_vendors/code/vendor_snacks.dm
+++ b/modular_nova/modules/imported_vendors/code/vendor_snacks.dm
@@ -3,7 +3,7 @@
/obj/item/food/vendor_snacks
name = "\improper God's Strongest Snacks"
desc = "You best hope you aren't a sinner. (You should never see this item please report it)"
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodpack_generic"
trash_type = /obj/item/trash/vendor_trash
bite_consumption = 10
@@ -17,7 +17,7 @@
/obj/item/trash/vendor_trash
name = "\improper God's Weakest Snacks"
desc = "The leftovers of what was likely a great snack in a past time."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "foodpack_generic_trash"
custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)
@@ -84,7 +84,7 @@
/obj/item/reagent_containers/cup/glass/waterbottle/tea
name = "bottle of tea"
desc = "A bottle of tea brought to you in a convenient plastic bottle."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi'
icon_state = "tea_bottle"
list_reagents = list(/datum/reagent/consumable/tea = 40)
cap_icon_state = "bottle_cap_tea"
diff --git a/modular_skyrat/modules/imported_vendors/code/vendors.dm b/modular_nova/modules/imported_vendors/code/vendors.dm
similarity index 99%
rename from modular_skyrat/modules/imported_vendors/code/vendors.dm
rename to modular_nova/modules/imported_vendors/code/vendors.dm
index f4504dd041c..f0190763af3 100644
--- a/modular_skyrat/modules/imported_vendors/code/vendors.dm
+++ b/modular_nova/modules/imported_vendors/code/vendors.dm
@@ -22,7 +22,7 @@
/obj/machinery/vending/imported
name = "NT Sustenance Supplier"
desc = "A vending machine serving up only the finest of human college student food."
- icon = 'modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi'
+ icon = 'modular_nova/modules/imported_vendors/icons/imported_vendors.dmi'
icon_state = "nt_food"
panel_type = "panel15"
light_mask = "nt_food-light-mask"
diff --git a/modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi b/modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi
similarity index 100%
rename from modular_skyrat/modules/imported_vendors/icons/imported_quick_foods.dmi
rename to modular_nova/modules/imported_vendors/icons/imported_quick_foods.dmi
diff --git a/modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi b/modular_nova/modules/imported_vendors/icons/imported_vendors.dmi
similarity index 100%
rename from modular_skyrat/modules/imported_vendors/icons/imported_vendors.dmi
rename to modular_nova/modules/imported_vendors/icons/imported_vendors.dmi
diff --git a/modular_skyrat/modules/imported_vendors/readme.md b/modular_nova/modules/imported_vendors/readme.md
similarity index 100%
rename from modular_skyrat/modules/imported_vendors/readme.md
rename to modular_nova/modules/imported_vendors/readme.md
diff --git a/modular_skyrat/modules/indicators/code/combat_indicator.dm b/modular_nova/modules/indicators/code/combat_indicator.dm
similarity index 99%
rename from modular_skyrat/modules/indicators/code/combat_indicator.dm
rename to modular_nova/modules/indicators/code/combat_indicator.dm
index 3e42b21ec4c..e1f4278d78d 100644
--- a/modular_skyrat/modules/indicators/code/combat_indicator.dm
+++ b/modular_nova/modules/indicators/code/combat_indicator.dm
@@ -2,7 +2,7 @@
GLOBAL_VAR_INIT(combat_indicator_overlay, GenerateCombatOverlay())
/proc/GenerateCombatOverlay()
- var/mutable_appearance/combat_indicator = mutable_appearance('modular_skyrat/modules/indicators/icons/combat_indicator.dmi', "combat", FLY_LAYER)
+ var/mutable_appearance/combat_indicator = mutable_appearance('modular_nova/modules/indicators/icons/combat_indicator.dmi', "combat", FLY_LAYER)
combat_indicator.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA | KEEP_APART
return combat_indicator
diff --git a/modular_skyrat/modules/indicators/code/sealed.dm b/modular_nova/modules/indicators/code/sealed.dm
similarity index 100%
rename from modular_skyrat/modules/indicators/code/sealed.dm
rename to modular_nova/modules/indicators/code/sealed.dm
diff --git a/modular_skyrat/modules/indicators/code/ssd_indicator.dm b/modular_nova/modules/indicators/code/ssd_indicator.dm
similarity index 94%
rename from modular_skyrat/modules/indicators/code/ssd_indicator.dm
rename to modular_nova/modules/indicators/code/ssd_indicator.dm
index d84edb1d569..9ed34005a98 100644
--- a/modular_skyrat/modules/indicators/code/ssd_indicator.dm
+++ b/modular_nova/modules/indicators/code/ssd_indicator.dm
@@ -1,4 +1,4 @@
-GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/modules/indicators/icons/ssd_indicator.dmi', "default0", FLY_LAYER))
+GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_nova/modules/indicators/icons/ssd_indicator.dmi', "default0", FLY_LAYER))
/mob/living
var/ssd_indicator = FALSE
diff --git a/modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi b/modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/DNR_trait_overlay.dmi
rename to modular_nova/modules/indicators/icons/DNR_trait_overlay.dmi
diff --git a/modular_skyrat/modules/indicators/icons/combat_indicator.dmi b/modular_nova/modules/indicators/icons/combat_indicator.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/combat_indicator.dmi
rename to modular_nova/modules/indicators/icons/combat_indicator.dmi
diff --git a/modular_skyrat/modules/indicators/icons/emote_indicator.dmi b/modular_nova/modules/indicators/icons/emote_indicator.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/emote_indicator.dmi
rename to modular_nova/modules/indicators/icons/emote_indicator.dmi
diff --git a/modular_skyrat/modules/indicators/icons/ssd_indicator.dmi b/modular_nova/modules/indicators/icons/ssd_indicator.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/ssd_indicator.dmi
rename to modular_nova/modules/indicators/icons/ssd_indicator.dmi
diff --git a/modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi b/modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/temporary_flavor_text_indicator.dmi
rename to modular_nova/modules/indicators/icons/temporary_flavor_text_indicator.dmi
diff --git a/modular_skyrat/modules/indicators/icons/typing_indicator.dmi b/modular_nova/modules/indicators/icons/typing_indicator.dmi
similarity index 100%
rename from modular_skyrat/modules/indicators/icons/typing_indicator.dmi
rename to modular_nova/modules/indicators/icons/typing_indicator.dmi
diff --git a/modular_skyrat/modules/indicators/readme.md b/modular_nova/modules/indicators/readme.md
similarity index 100%
rename from modular_skyrat/modules/indicators/readme.md
rename to modular_nova/modules/indicators/readme.md
diff --git a/modular_skyrat/modules/inflatables/code/inflatable.dm b/modular_nova/modules/inflatables/code/inflatable.dm
similarity index 94%
rename from modular_skyrat/modules/inflatables/code/inflatable.dm
rename to modular_nova/modules/inflatables/code/inflatable.dm
index f58b4dde172..82a00dcdcb2 100644
--- a/modular_skyrat/modules/inflatables/code/inflatable.dm
+++ b/modular_nova/modules/inflatables/code/inflatable.dm
@@ -12,7 +12,7 @@
density = TRUE
anchored = TRUE
max_integrity = 40
- icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi'
+ icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi'
icon_state = "wall"
/// The type we drop when damaged.
var/torn_type = /obj/item/inflatable/torn
@@ -100,7 +100,7 @@
/obj/structure/inflatable/door
name = "inflatable door"
can_atmos_pass = ATMOS_PASS_DENSITY
- icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi'
+ icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi'
icon_state = "door_closed"
base_icon_state = "door"
torn_type = /obj/item/inflatable/door/torn
@@ -139,7 +139,7 @@
/obj/item/inflatable
name = "inflatable wall"
desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
- icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi'
+ icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi'
icon_state = "folded_wall"
base_icon_state = "folded_wall"
w_class = WEIGHT_CLASS_SMALL
@@ -181,7 +181,7 @@
return
if(!do_after(user, 2 SECONDS, src))
return
- playsound(user, 'modular_skyrat/modules/inflatables/sound/ducttape1.ogg', 50, 1)
+ playsound(user, 'modular_nova/modules/inflatables/sound/ducttape1.ogg', 50, 1)
to_chat(user, span_notice("You fix [src] using [attacking_tape]!"))
attacking_tape.use(TAPE_REQUIRED_TO_FIX)
torn = FALSE
@@ -206,7 +206,7 @@
/obj/item/inflatable/door
name = "inflatable door"
desc = "A folded membrane which rapidly expands into a simple door on activation."
- icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi'
+ icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi'
icon_state = "folded_door"
base_icon_state = "folded_door"
structure_type = /obj/structure/inflatable/door
@@ -224,7 +224,7 @@
/// The box full of inflatables
/obj/item/storage/inflatable
- icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi'
+ icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi'
name = "inflatable barrier box"
desc = "Contains inflatable walls and doors."
icon_state = "briefcase_inflate"
diff --git a/modular_skyrat/modules/inflatables/icons/inflatable.dmi b/modular_nova/modules/inflatables/icons/inflatable.dmi
similarity index 100%
rename from modular_skyrat/modules/inflatables/icons/inflatable.dmi
rename to modular_nova/modules/inflatables/icons/inflatable.dmi
diff --git a/modular_skyrat/modules/inflatables/readme.md b/modular_nova/modules/inflatables/readme.md
similarity index 100%
rename from modular_skyrat/modules/inflatables/readme.md
rename to modular_nova/modules/inflatables/readme.md
diff --git a/modular_skyrat/modules/inflatables/sound/ducttape1.ogg b/modular_nova/modules/inflatables/sound/ducttape1.ogg
similarity index 100%
rename from modular_skyrat/modules/inflatables/sound/ducttape1.ogg
rename to modular_nova/modules/inflatables/sound/ducttape1.ogg
diff --git a/modular_skyrat/modules/interaction_menu/code/click.dm b/modular_nova/modules/interaction_menu/code/click.dm
similarity index 100%
rename from modular_skyrat/modules/interaction_menu/code/click.dm
rename to modular_nova/modules/interaction_menu/code/click.dm
diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm b/modular_nova/modules/interaction_menu/code/interaction_component.dm
similarity index 99%
rename from modular_skyrat/modules/interaction_menu/code/interaction_component.dm
rename to modular_nova/modules/interaction_menu/code/interaction_component.dm
index b6122decd07..9addb13e899 100644
--- a/modular_skyrat/modules/interaction_menu/code/interaction_component.dm
+++ b/modular_nova/modules/interaction_menu/code/interaction_component.dm
@@ -36,7 +36,7 @@
/datum/component/interactable/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_CLICK_CTRL_SHIFT)
-/datum/component/interactable/Destroy(force, silent)
+/datum/component/interactable/Destroy(force)
self = null
interactions = null
return ..()
diff --git a/modular_skyrat/modules/interaction_menu/code/interaction_datum.dm b/modular_nova/modules/interaction_menu/code/interaction_datum.dm
similarity index 100%
rename from modular_skyrat/modules/interaction_menu/code/interaction_datum.dm
rename to modular_nova/modules/interaction_menu/code/interaction_datum.dm
diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_nova/modules/jukebox/code/dance_machine.dm
similarity index 100%
rename from modular_skyrat/modules/jukebox/code/dance_machine.dm
rename to modular_nova/modules/jukebox/code/dance_machine.dm
diff --git a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm b/modular_nova/modules/jukebox/code/jukebox_subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm
rename to modular_nova/modules/jukebox/code/jukebox_subsystem.dm
diff --git a/modular_skyrat/modules/jukebox/icons/stationobjs.dmi b/modular_nova/modules/jukebox/icons/stationobjs.dmi
similarity index 100%
rename from modular_skyrat/modules/jukebox/icons/stationobjs.dmi
rename to modular_nova/modules/jukebox/icons/stationobjs.dmi
diff --git a/modular_nova/modules/jukebox/readme.md b/modular_nova/modules/jukebox/readme.md
new file mode 100644
index 00000000000..f6ece230d3d
--- /dev/null
+++ b/modular_nova/modules/jukebox/readme.md
@@ -0,0 +1,29 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/892
+
+## Title: Jukebox
+
+MODULE ID: JUKEBOX
+
+### Description:
+
+Adds a new sound system for the jukebox, and also updates the jukebox to be good.
+
+### TG Proc Changes:
+
+- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE.
+
+### Defines:
+
+- #define CHANNEL_JUKEBOX_START 1016
+
+### Master file additions
+
+- modular_nova\master_files\code\game\sound.dm
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Gandalf2k15 - porting
+NotRanged - Original code
diff --git a/modular_skyrat/modules/jungle/code/flora.dm b/modular_nova/modules/jungle/code/flora.dm
similarity index 96%
rename from modular_skyrat/modules/jungle/code/flora.dm
rename to modular_nova/modules/jungle/code/flora.dm
index 47b3677745b..44f2199c626 100644
--- a/modular_skyrat/modules/jungle/code/flora.dm
+++ b/modular_nova/modules/jungle/code/flora.dm
@@ -1,7 +1,7 @@
/obj/structure/flora/biolumi
name = "glowing plants"
desc = "Several sticks with bulbous, bioluminescent tips."
- icon = 'modular_skyrat/modules/jungle/icons/jungleflora.dmi'
+ icon = 'modular_nova/modules/jungle/icons/jungleflora.dmi'
icon_state = "stick"
gender = PLURAL
light_range = 15
diff --git a/modular_skyrat/modules/jungle/icons/jungleflora.dmi b/modular_nova/modules/jungle/icons/jungleflora.dmi
similarity index 100%
rename from modular_skyrat/modules/jungle/icons/jungleflora.dmi
rename to modular_nova/modules/jungle/icons/jungleflora.dmi
diff --git a/modular_skyrat/modules/jungle/readme.md b/modular_nova/modules/jungle/readme.md
similarity index 100%
rename from modular_skyrat/modules/jungle/readme.md
rename to modular_nova/modules/jungle/readme.md
diff --git a/modular_skyrat/modules/knives/icons/bowie.dmi b/modular_nova/modules/knives/icons/bowie.dmi
similarity index 100%
rename from modular_skyrat/modules/knives/icons/bowie.dmi
rename to modular_nova/modules/knives/icons/bowie.dmi
diff --git a/modular_skyrat/modules/knives/icons/bowie_lefthand.dmi b/modular_nova/modules/knives/icons/bowie_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/knives/icons/bowie_lefthand.dmi
rename to modular_nova/modules/knives/icons/bowie_lefthand.dmi
diff --git a/modular_skyrat/modules/knives/icons/bowie_righthand.dmi b/modular_nova/modules/knives/icons/bowie_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/knives/icons/bowie_righthand.dmi
rename to modular_nova/modules/knives/icons/bowie_righthand.dmi
diff --git a/modular_skyrat/modules/knives/icons/bowiepocket.dmi b/modular_nova/modules/knives/icons/bowiepocket.dmi
similarity index 100%
rename from modular_skyrat/modules/knives/icons/bowiepocket.dmi
rename to modular_nova/modules/knives/icons/bowiepocket.dmi
diff --git a/modular_skyrat/modules/knives/knives.dm b/modular_nova/modules/knives/knives.dm
similarity index 87%
rename from modular_skyrat/modules/knives/knives.dm
rename to modular_nova/modules/knives/knives.dm
index 4a7439d3e76..09349fc8353 100644
--- a/modular_skyrat/modules/knives/knives.dm
+++ b/modular_nova/modules/knives/knives.dm
@@ -4,11 +4,11 @@
/obj/item/knife/bowie
name = "\improper Bowie knife"
desc = "A frontiersman's classic, closer to a shortsword than a knife. It boasts a full-tanged build, a brass handguard and pommel, a wicked sharp point, and a large, heavy blade, It's almost everything you could want in a knife, besides portability."
- icon = 'modular_skyrat/modules/knives/icons/bowie.dmi'
+ icon = 'modular_nova/modules/knives/icons/bowie.dmi'
icon_state = "bowiehand"
inhand_icon_state = "bowiehand"
- lefthand_file = 'modular_skyrat/modules/knives/icons/bowie_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/knives/icons/bowie_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/knives/icons/bowie_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/knives/icons/bowie_righthand.dmi'
worn_icon_state = "knife"
force = 20 // Zoowee Momma!
w_class = WEIGHT_CLASS_NORMAL
@@ -19,7 +19,7 @@
/obj/item/storage/belt/bowie_sheath
name = "\improper Bowie knife sheath"
desc = "A dressed-up leather sheath featuring a brass tip. It has a large pocket clip right in the center, for ease of carrying an otherwise burdensome knife."
- icon = 'modular_skyrat/modules/knives/icons/bowiepocket.dmi'
+ icon = 'modular_nova/modules/knives/icons/bowiepocket.dmi'
icon_state = "bowiesheath"
slot_flags = ITEM_SLOT_POCKETS
w_class = WEIGHT_CLASS_BULKY
diff --git a/modular_skyrat/modules/layer_shift/code/mob_movement.dm b/modular_nova/modules/layer_shift/code/mob_movement.dm
similarity index 100%
rename from modular_skyrat/modules/layer_shift/code/mob_movement.dm
rename to modular_nova/modules/layer_shift/code/mob_movement.dm
diff --git a/modular_skyrat/modules/layer_shift/readme.md b/modular_nova/modules/layer_shift/readme.md
similarity index 100%
rename from modular_skyrat/modules/layer_shift/readme.md
rename to modular_nova/modules/layer_shift/readme.md
diff --git a/modular_skyrat/modules/liquids/code/drains.dm b/modular_nova/modules/liquids/code/drains.dm
similarity index 96%
rename from modular_skyrat/modules/liquids/code/drains.dm
rename to modular_nova/modules/liquids/code/drains.dm
index c9b15660056..9a018e25425 100644
--- a/modular_skyrat/modules/liquids/code/drains.dm
+++ b/modular_nova/modules/liquids/code/drains.dm
@@ -1,7 +1,7 @@
//Structure as this doesn't need any power to work
/obj/structure/drain
name = "drain"
- icon = 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi'
icon_state = "drain"
desc = "Drainage inlet embedded in the floor to prevent flooding."
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
diff --git a/modular_skyrat/modules/liquids/code/height_floors.dm b/modular_nova/modules/liquids/code/height_floors.dm
similarity index 91%
rename from modular_skyrat/modules/liquids/code/height_floors.dm
rename to modular_nova/modules/liquids/code/height_floors.dm
index 0befd7de223..022266a33c0 100644
--- a/modular_skyrat/modules/liquids/code/height_floors.dm
+++ b/modular_nova/modules/liquids/code/height_floors.dm
@@ -39,7 +39,7 @@
/turf/open/floor/iron/pool
name = "pool floor"
floor_tile = /obj/item/stack/tile/iron/pool
- icon = 'modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/pool_tile.dmi'
base_icon_state = "pool_tile"
icon_state = "pool_tile"
liquid_height = -30
@@ -50,7 +50,7 @@
/turf/open/floor/iron/pool/cobble
name = "cobblestone pool floor"
- icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi'
+ icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi'
base_icon_state = "cobble"
icon_state = "cobble"
footstep = FOOTSTEP_FLOOR
@@ -69,7 +69,7 @@
/turf/open/floor/iron/elevated
name = "elevated floor"
floor_tile = /obj/item/stack/tile/iron/elevated
- icon = 'modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi'
icon_state = "elevated_plasteel-0"
base_icon_state = "elevated_plasteel"
smoothing_flags = SMOOTH_BITMASK
@@ -84,7 +84,7 @@
/turf/open/floor/iron/lowered
name = "lowered floor"
floor_tile = /obj/item/stack/tile/iron/lowered
- icon = 'modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi'
icon_state = "lowered_plasteel-0"
base_icon_state = "lowered_plasteel"
smoothing_flags = SMOOTH_BITMASK
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_controller.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_controller.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_controller.dm
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm
similarity index 96%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm
index a019edc69b7..860c6c8c425 100644
--- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_effect.dm
+++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_effect.dm
@@ -1,6 +1,6 @@
/obj/effect/abstract/liquid_turf
name = "liquid"
- icon = 'modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/effects/liquid.dmi'
icon_state = "water-0"
base_icon_state = "water"
anchored = TRUE
@@ -207,7 +207,7 @@
PRIVATE_PROC(TRUE)
return mutable_appearance(
- 'modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi',
+ 'modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi',
overlay_state,
overlay_layer,
src,
@@ -224,7 +224,7 @@
/obj/effect/abstract/liquid_turf/proc/make_state_layer(state, has_top)
PRIVATE_PROC(TRUE)
- . = list(make_liquid_overlay("stage[state]_bottom", ABOVE_MOB_LAYER, GAME_PLANE_UPPER))
+ . = list(make_liquid_overlay("stage[state]_bottom", ABOVE_MOB_LAYER))
if(!has_top)
return
@@ -380,10 +380,10 @@
//Splash
if(prob(WATER_HEIGH_DIFFERENCE_SOUND_CHANCE))
var/sound_to_play = pick(list(
- 'modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg'
+ 'modular_nova/modules/liquids/sound/effects/water_wade1.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade2.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade3.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade4.ogg'
))
playsound(my_turf, sound_to_play, 60, 0)
var/obj/splashy = new /obj/effect/temp_visual/liquid_splash(my_turf)
@@ -429,10 +429,10 @@
if(liquid_state >= LIQUID_STATE_ANKLES)
if(prob(30))
var/sound_to_play = pick(list(
- 'modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg',
- 'modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg'
+ 'modular_nova/modules/liquids/sound/effects/water_wade1.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade2.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade3.ogg',
+ 'modular_nova/modules/liquids/sound/effects/water_wade4.ogg'
))
playsound(T, sound_to_play, 50, 0)
if(iscarbon(AM))
@@ -449,7 +449,7 @@
SIGNAL_HANDLER
var/turf/T = source
if(liquid_state >= LIQUID_STATE_ANKLES && T.has_gravity(T))
- playsound(T, 'modular_skyrat/modules/liquids/sound/effects/splash.ogg', 50, 0)
+ playsound(T, 'modular_nova/modules/liquids/sound/effects/splash.ogg', 50, 0)
if(iscarbon(M))
var/mob/living/carbon/falling_carbon = M
@@ -625,7 +625,7 @@
return lowertext(reagents_string)
/obj/effect/temp_visual/liquid_splash
- icon = 'modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/effects/splash.dmi'
icon_state = "splash"
layer = FLY_LAYER
randomdir = FALSE
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm
similarity index 98%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm
index 7b6d6dfdbce..cd669993a93 100644
--- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_groups.dm
+++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_groups.dm
@@ -147,7 +147,9 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE)
cached_add[reagent_type] = cached_add[reagent_type] / members.len
cached_volume = cached_volume / members.len
cached_thermal = cached_thermal / members.len
- var/temp_to_set = cached_thermal / cached_volume
+ var/temp_to_set
+ if(cached_volume)
+ temp_to_set = cached_thermal / cached_volume
last_cached_thermal = cached_thermal
last_cached_fraction_share = cached_add
last_cached_total_volume = cached_volume
@@ -190,7 +192,8 @@ GLOBAL_VAR_INIT(liquid_debug_colors, FALSE)
cached_liquids.reagent_list = cached_add.Copy()
cached_liquids.total_reagents = cached_volume
- cached_liquids.temp = temp_to_set
+ if(temp_to_set)
+ cached_liquids.temp = temp_to_set
cached_liquids.has_cached_share = TRUE
cached_liquids.attrition = 0
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_height.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_height.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_height.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_height.dm
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_interaction.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_interaction.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_interaction.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_interaction.dm
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm
similarity index 99%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm
index dd764e2c564..341d894ee7b 100644
--- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_plumbers.dm
+++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_plumbers.dm
@@ -2,7 +2,7 @@
* Base class for underfloor plumbing machines that mess with floor liquids.
*/
/obj/machinery/plumbing/floor_pump
- icon = 'modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/structures/drains.dmi'
icon_state = "active_input"
anchored = FALSE
density = FALSE
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm
similarity index 97%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm
index 17d6c87f284..e6a917b968a 100644
--- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_pump.dm
+++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_pump.dm
@@ -2,7 +2,7 @@
/obj/structure/liquid_pump
name = "portable liquid pump"
desc = "An industrial grade pump, capable of either siphoning or spewing liquids. Needs to be anchored first to work. Has a limited capacity internal storage."
- icon = 'modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi'
icon_state = "liquid_pump"
density = TRUE
max_integrity = 500
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_status_effect.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_status_effect.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_status_effect.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_status_effect.dm
diff --git a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm b/modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm
similarity index 97%
rename from modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm
rename to modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm
index 7182a6411c9..f29536b881f 100644
--- a/modular_skyrat/modules/liquids/code/liquid_systems/liquid_turf.dm
+++ b/modular_nova/modules/liquids/code/liquid_systems/liquid_turf.dm
@@ -154,6 +154,8 @@
liquids = new(src)
if(liquids.immutable)
return
+ if(!length(reagent_list))
+ return
var/prev_total_reagents = liquids.total_reagents
var/prev_thermal_energy = prev_total_reagents * liquids.temp
@@ -164,8 +166,9 @@
liquids.reagent_list[reagent] += reagent_list[reagent]
liquids.total_reagents += reagent_list[reagent]
- var/recieved_thermal_energy = (liquids.total_reagents - prev_total_reagents) * chem_temp
- liquids.temp = (recieved_thermal_energy + prev_thermal_energy) / liquids.total_reagents
+ if(liquids.total_reagents)
+ var/recieved_thermal_energy = (liquids.total_reagents - prev_total_reagents) * chem_temp
+ liquids.temp = (recieved_thermal_energy + prev_thermal_energy) / liquids.total_reagents
if(!no_react)
//We do react so, make a simulation
diff --git a/modular_skyrat/modules/liquids/code/mop.dm b/modular_nova/modules/liquids/code/mop.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/mop.dm
rename to modular_nova/modules/liquids/code/mop.dm
diff --git a/modular_skyrat/modules/liquids/code/ocean_areas.dm b/modular_nova/modules/liquids/code/ocean_areas.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/ocean_areas.dm
rename to modular_nova/modules/liquids/code/ocean_areas.dm
diff --git a/modular_skyrat/modules/liquids/code/ocean_biomes.dm b/modular_nova/modules/liquids/code/ocean_biomes.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/ocean_biomes.dm
rename to modular_nova/modules/liquids/code/ocean_biomes.dm
diff --git a/modular_skyrat/modules/liquids/code/ocean_flora.dm b/modular_nova/modules/liquids/code/ocean_flora.dm
similarity index 96%
rename from modular_skyrat/modules/liquids/code/ocean_flora.dm
rename to modular_nova/modules/liquids/code/ocean_flora.dm
index a3f93496cfd..d35ea282653 100644
--- a/modular_skyrat/modules/liquids/code/ocean_flora.dm
+++ b/modular_nova/modules/liquids/code/ocean_flora.dm
@@ -1,5 +1,5 @@
/obj/structure/flora/ocean
- icon = 'modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi'
var/random_variants = 0
/obj/structure/flora/ocean/Initialize(mapload)
@@ -43,7 +43,7 @@
/obj/structure/flora/scrap
name = "scrap metal"
desc = "A huge chunk of metal, rusted and worn. Perhaps it can still be salvaged into something useful."
- icon = 'modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi'
+ icon = 'modular_nova/modules/liquids/icons/obj/flora/scrap.dmi'
icon_state = "scrap"
anchored = FALSE
density = TRUE
diff --git a/modular_skyrat/modules/liquids/code/ocean_mapgen.dm b/modular_nova/modules/liquids/code/ocean_mapgen.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/ocean_mapgen.dm
rename to modular_nova/modules/liquids/code/ocean_mapgen.dm
diff --git a/modular_skyrat/modules/liquids/code/ocean_ruins.dm b/modular_nova/modules/liquids/code/ocean_ruins.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/ocean_ruins.dm
rename to modular_nova/modules/liquids/code/ocean_ruins.dm
diff --git a/modular_skyrat/modules/liquids/code/ocean_turfs.dm b/modular_nova/modules/liquids/code/ocean_turfs.dm
similarity index 95%
rename from modular_skyrat/modules/liquids/code/ocean_turfs.dm
rename to modular_nova/modules/liquids/code/ocean_turfs.dm
index 356cda189a1..a509ed4cd4e 100644
--- a/modular_skyrat/modules/liquids/code/ocean_turfs.dm
+++ b/modular_nova/modules/liquids/code/ocean_turfs.dm
@@ -41,7 +41,7 @@
/turf/open/floor/plating/ocean/rock
name = "rock"
baseturfs = /turf/open/floor/plating/ocean/rock
- icon = 'modular_skyrat/modules/liquids/icons/turf/seafloor.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/seafloor.dmi'
icon_state = "seafloor"
base_icon_state = "seafloor"
rand_variants = 0
@@ -51,7 +51,7 @@
/turf/open/floor/plating/ocean/rock/warm/fissure
name = "fissure"
- icon = 'modular_skyrat/modules/liquids/icons/turf/fissure.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/fissure.dmi'
icon_state = "fissure-0"
base_icon_state = "fissure"
smoothing_flags = SMOOTH_BITMASK
@@ -192,7 +192,7 @@
/turf/open/floor/iron/submarine
name = "submarine floor"
- icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi'
base_icon_state = "submarine_floor"
icon_state = "submarine_floor"
liquid_height = -30
@@ -203,7 +203,7 @@
/turf/open/floor/iron/submarine_vents
name = "submarine floor"
- icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi'
base_icon_state = "submarine_vents"
icon_state = "submarine_vents"
liquid_height = -30
@@ -214,7 +214,7 @@
/turf/open/floor/iron/submarine_perf
name = "submarine floor"
- icon = 'modular_skyrat/modules/liquids/icons/turf/submarine.dmi'
+ icon = 'modular_nova/modules/liquids/icons/turf/submarine.dmi'
base_icon_state = "submarine_perf"
icon_state = "submarine_perf"
liquid_height = -30
diff --git a/modular_skyrat/modules/liquids/code/reagents/chemistry/holder.dm b/modular_nova/modules/liquids/code/reagents/chemistry/holder.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/reagents/chemistry/holder.dm
rename to modular_nova/modules/liquids/code/reagents/chemistry/holder.dm
diff --git a/modular_skyrat/modules/liquids/code/reagents/chemistry/reagents.dm b/modular_nova/modules/liquids/code/reagents/chemistry/reagents.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/reagents/chemistry/reagents.dm
rename to modular_nova/modules/liquids/code/reagents/chemistry/reagents.dm
diff --git a/modular_skyrat/modules/liquids/code/reagents/reagent_containers.dm b/modular_nova/modules/liquids/code/reagents/reagent_containers.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/reagents/reagent_containers.dm
rename to modular_nova/modules/liquids/code/reagents/reagent_containers.dm
diff --git a/modular_skyrat/modules/liquids/code/tools.dm b/modular_nova/modules/liquids/code/tools.dm
similarity index 100%
rename from modular_skyrat/modules/liquids/code/tools.dm
rename to modular_nova/modules/liquids/code/tools.dm
diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi b/modular_nova/modules/liquids/icons/obj/effects/liquid.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/effects/liquid.dmi
rename to modular_nova/modules/liquids/icons/obj/effects/liquid.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi b/modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/effects/liquid_overlays.dmi
rename to modular_nova/modules/liquids/icons/obj/effects/liquid_overlays.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi b/modular_nova/modules/liquids/icons/obj/effects/splash.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi
rename to modular_nova/modules/liquids/icons/obj/effects/splash.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi b/modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/flora/ocean_flora.dmi
rename to modular_nova/modules/liquids/icons/obj/flora/ocean_flora.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi b/modular_nova/modules/liquids/icons/obj/flora/scrap.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/flora/scrap.dmi
rename to modular_nova/modules/liquids/icons/obj/flora/scrap.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/scrap.dmi b/modular_nova/modules/liquids/icons/obj/scrap.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/scrap.dmi
rename to modular_nova/modules/liquids/icons/obj/scrap.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi b/modular_nova/modules/liquids/icons/obj/structures/drains.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/structures/drains.dmi
rename to modular_nova/modules/liquids/icons/obj/structures/drains.dmi
diff --git a/modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi b/modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/obj/structures/liquid_pump.dmi
rename to modular_nova/modules/liquids/icons/obj/structures/liquid_pump.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi b/modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/elevated_plasteel.dmi
rename to modular_nova/modules/liquids/icons/turf/elevated_plasteel.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/fissure.dmi b/modular_nova/modules/liquids/icons/turf/fissure.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/fissure.dmi
rename to modular_nova/modules/liquids/icons/turf/fissure.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi b/modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/lowered_plasteel.dmi
rename to modular_nova/modules/liquids/icons/turf/lowered_plasteel.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi b/modular_nova/modules/liquids/icons/turf/pool_tile.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/pool_tile.dmi
rename to modular_nova/modules/liquids/icons/turf/pool_tile.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/seafloor.dmi b/modular_nova/modules/liquids/icons/turf/seafloor.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/seafloor.dmi
rename to modular_nova/modules/liquids/icons/turf/seafloor.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi b/modular_nova/modules/liquids/icons/turf/smoothrocks.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi
rename to modular_nova/modules/liquids/icons/turf/smoothrocks.dmi
diff --git a/modular_skyrat/modules/liquids/icons/turf/submarine.dmi b/modular_nova/modules/liquids/icons/turf/submarine.dmi
similarity index 100%
rename from modular_skyrat/modules/liquids/icons/turf/submarine.dmi
rename to modular_nova/modules/liquids/icons/turf/submarine.dmi
diff --git a/modular_skyrat/modules/liquids/sound/effects/heart_beat_loop3.ogg b/modular_nova/modules/liquids/sound/effects/heart_beat_loop3.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/heart_beat_loop3.ogg
rename to modular_nova/modules/liquids/sound/effects/heart_beat_loop3.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/heart_beat_once.ogg b/modular_nova/modules/liquids/sound/effects/heart_beat_once.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/heart_beat_once.ogg
rename to modular_nova/modules/liquids/sound/effects/heart_beat_once.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/splash.ogg b/modular_nova/modules/liquids/sound/effects/splash.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/splash.ogg
rename to modular_nova/modules/liquids/sound/effects/splash.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg b/modular_nova/modules/liquids/sound/effects/water_wade1.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/water_wade1.ogg
rename to modular_nova/modules/liquids/sound/effects/water_wade1.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg b/modular_nova/modules/liquids/sound/effects/water_wade2.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/water_wade2.ogg
rename to modular_nova/modules/liquids/sound/effects/water_wade2.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg b/modular_nova/modules/liquids/sound/effects/water_wade3.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/water_wade3.ogg
rename to modular_nova/modules/liquids/sound/effects/water_wade3.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg b/modular_nova/modules/liquids/sound/effects/water_wade4.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/water_wade4.ogg
rename to modular_nova/modules/liquids/sound/effects/water_wade4.ogg
diff --git a/modular_skyrat/modules/liquids/sound/effects/watersplash.ogg b/modular_nova/modules/liquids/sound/effects/watersplash.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/effects/watersplash.ogg
rename to modular_nova/modules/liquids/sound/effects/watersplash.ogg
diff --git a/modular_skyrat/modules/liquids/sound/emotes/nose_boop.ogg b/modular_nova/modules/liquids/sound/emotes/nose_boop.ogg
similarity index 100%
rename from modular_skyrat/modules/liquids/sound/emotes/nose_boop.ogg
rename to modular_nova/modules/liquids/sound/emotes/nose_boop.ogg
diff --git a/modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm b/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/_loadout_datum.dm
rename to modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
similarity index 99%
rename from modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
rename to modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
index b602166c3f0..5dfd42bca8f 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
+++ b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
@@ -722,7 +722,7 @@
/datum/loadout_item/suit/nobility_dresscoat
name = "Nobility Dresscoat"
- item_path = /obj/item/clothing/suit/toggle/labcoat/medical/vic_dresscoat_donator
+ item_path = /obj/item/clothing/suit/toggle/labcoat/vic_dresscoat_donator
ckeywhitelist = list("nikotheguydude")
/datum/loadout_item/suit/anubite_headpiece
diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm
new file mode 100644
index 00000000000..e55c3739688
--- /dev/null
+++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm
@@ -0,0 +1,104 @@
+/*
+* LOADOUT ITEM DATUMS FOR THE ACCESSORY SLOT
+*/
+
+/// Accessory Items (Moves overrided items to backpack)
+GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/accessory))
+
+/datum/loadout_item/accessory
+ category = LOADOUT_ITEM_ACCESSORY
+
+/datum/loadout_item/accessory/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, visuals_only = FALSE)
+ if(initial(outfit_important_for_life.accessory))
+ .. ()
+ return TRUE
+
+/datum/loadout_item/accessory/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE, override_items = LOADOUT_OVERRIDE_BACKPACK)
+ if(override_items == LOADOUT_OVERRIDE_BACKPACK && !visuals_only)
+ if(outfit.accessory)
+ LAZYADD(outfit.backpack_contents, outfit.accessory)
+ outfit.accessory = item_path
+ else
+ outfit.accessory = item_path
+
+/datum/loadout_item/accessory/maid_apron
+ name = "Maid Apron"
+ item_path = /obj/item/clothing/accessory/maidapron
+
+/datum/loadout_item/accessory/waistcoat
+ name = "Waistcoat"
+ item_path = /obj/item/clothing/accessory/waistcoat
+
+/datum/loadout_item/accessory/pocket_protector
+ name = "Pocket Protector (Empty)"
+ item_path = /obj/item/clothing/accessory/pocketprotector
+
+/datum/loadout_item/accessory/full_pocket_protector
+ name = "Pocket Protector (Filled)"
+ item_path = /obj/item/clothing/accessory/pocketprotector/full
+ additional_tooltip_contents = list("CONTAINS PENS - This item contains multiple pens on spawn.")
+
+/datum/loadout_item/accessory/ribbon
+ name = "Ribbon"
+ item_path = /obj/item/clothing/accessory/medal/ribbon
+
+/datum/loadout_item/accessory/pride
+ name = "Pride Pin"
+ item_path = /obj/item/clothing/accessory/pride
+
+/*
+* ARMBANDS
+*/
+
+/datum/loadout_item/accessory/armband_medblue
+ name = "Blue-White Armband"
+ item_path = /obj/item/clothing/accessory/armband/medblue/nonsec
+
+/datum/loadout_item/accessory/armband_med
+ name = "White Armband"
+ item_path = /obj/item/clothing/accessory/armband/med/nonsec
+
+/datum/loadout_item/accessory/armband_cargo
+ name = "Brown Armband"
+ item_path = /obj/item/clothing/accessory/armband/cargo/nonsec
+
+/datum/loadout_item/accessory/armband_engineering
+ name = "Orange Armband"
+ item_path = /obj/item/clothing/accessory/armband/engine/nonsec
+
+/datum/loadout_item/accessory/armband_security_nonsec
+ name = "Blue Armband"
+ item_path = /obj/item/clothing/accessory/armband/deputy/lopland/nonsec
+
+/datum/loadout_item/accessory/armband_security
+ name = "Security Armband"
+ item_path = /obj/item/clothing/accessory/armband/deputy/lopland
+ restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE)
+
+/datum/loadout_item/accessory/armband_security_deputy
+ name = "Security Deputy Armband"
+ item_path = /obj/item/clothing/accessory/armband/deputy
+ restricted_roles = list(JOB_CORRECTIONS_OFFICER)
+
+/datum/loadout_item/accessory/armband_science
+ name = "Purple Armband"
+ item_path = /obj/item/clothing/accessory/armband/science/nonsec
+
+/*
+* ARMOURLESS
+*/
+
+/datum/loadout_item/accessory/bone_charm
+ name = "Heirloom Bone Talisman"
+ item_path = /obj/item/clothing/accessory/talisman/armourless
+ additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
+
+/datum/loadout_item/accessory/bone_codpiece
+ name = "Heirloom Skull Codpiece"
+ item_path = /obj/item/clothing/accessory/skullcodpiece/armourless
+ additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
+
+/datum/loadout_item/accessory/sinew_kilt
+ name = "Heirloom Sinew Skirt"
+ item_path = /obj/item/clothing/accessory/skilt/armourless
+ additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_belts.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_belts.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_belts.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_belts.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_ears.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_ears.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_ears.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_ears.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_glasses.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_glasses.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_glasses.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_gloves.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_gloves.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_gloves.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm
similarity index 97%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm
index abccc398308..54ff8c32988 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
+++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm
@@ -341,6 +341,22 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea
name = "Flower Pin"
item_path = /obj/item/clothing/head/costume/skyrat/flowerpin
+/datum/loadout_item/head/floral_garland
+ name = "Floral Garland"
+ item_path = /obj/item/clothing/head/costume/garland
+
+/datum/loadout_item/head/sunflower_crown
+ name = "Sunflower Crown"
+ item_path = /obj/item/clothing/head/costume/garland/sunflower
+
+/datum/loadout_item/head/lily_crown
+ name = "Lily Crown"
+ item_path = /obj/item/clothing/head/costume/garland/lily
+
+/datum/loadout_item/head/poppy_crown
+ name = "Poppy Crown"
+ item_path = /obj/item/clothing/head/costume/garland/poppy
+
/datum/loadout_item/head/rice_hat
name = "Rice Hat"
item_path = /obj/item/clothing/head/costume/rice_hat
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_inhands.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm
similarity index 84%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm
index d0052806a13..160ff263b0b 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_masks.dm
+++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm
@@ -73,6 +73,10 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask)
name = "Gas Mask"
item_path = /obj/item/clothing/mask/gas
+/datum/loadout_item/mask/gas_alt
+ name = "Black Gas Mask"
+ item_path = /obj/item/clothing/mask/gas/alt
+
/datum/loadout_item/mask/gas_glass
name = "Glass Gas Mask"
item_path = /obj/item/clothing/mask/gas/glass
@@ -87,6 +91,26 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask)
// Ain't a damn thing
+/*
+* MASQUERADE MASKS
+*/
+
+/datum/loadout_item/mask/masquerade
+ name = "Masquerade Mask"
+ item_path = /obj/item/clothing/mask/masquerade
+
+/datum/loadout_item/mask/masquerade/two_colors
+ name = "Split Masquerade Mask"
+ item_path = /obj/item/clothing/mask/masquerade/two_colors
+
+/datum/loadout_item/mask/masquerade/feathered
+ name = "Feathered Masquerade Mask"
+ item_path = /obj/item/clothing/mask/masquerade/feathered
+
+/datum/loadout_item/mask/masquerade/two_colors/feathered
+ name = "Feathered Split Masquerade Mask"
+ item_path = /obj/item/clothing/mask/masquerade/two_colors/feathered
+
/*
* FAMILIES
*/
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_neck.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_pocket.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_shoes.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_toys.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/loadout_datum_toys.dm
rename to modular_nova/modules/loadouts/loadout_items/loadout_datum_toys.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/donator.dm b/modular_nova/modules/loadouts/loadout_items/under/donator.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_items/under/donator.dm
rename to modular_nova/modules/loadouts/loadout_items/under/donator.dm
diff --git a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm
similarity index 99%
rename from modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
rename to modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm
index 14aa3ca4b44..03937c7f4f6 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
+++ b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm
@@ -520,11 +520,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/
/datum/loadout_item/under/miscellaneous/tacticool_turtleneck
name = "Tacticool Turtleneck"
- item_path = /obj/item/clothing/under/syndicate/tacticool //This has been rebalanced in modular_skyrat\master_files\code\modules\clothing\under\syndicate.dm
+ item_path = /obj/item/clothing/under/syndicate/tacticool //This has been rebalanced in modular_nova\master_files\code\modules\clothing\under\syndicate.dm
/datum/loadout_item/under/miscellaneous/tactical_skirt
name = "Tacticool Skirtleneck"
- item_path = /obj/item/clothing/under/syndicate/tacticool/skirt //This has been rebalanced in modular_skyrat\master_files\code\modules\clothing\under\syndicate.dm
+ item_path = /obj/item/clothing/under/syndicate/tacticool/skirt //This has been rebalanced in modular_nova\master_files\code\modules\clothing\under\syndicate.dm
/datum/loadout_item/under/miscellaneous/tactical_pants
name = "Tactical Pants"
diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm b/modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm
similarity index 88%
rename from modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm
rename to modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm
index b1edfb7fa3d..0443c908537 100644
--- a/modular_skyrat/modules/loadouts/loadout_ui/loadout_manager.dm
+++ b/modular_nova/modules/loadouts/loadout_ui/loadout_manager.dm
@@ -1,8 +1,8 @@
/// -- The loadout manager and UI --
/// Tracking when a client has an open loadout manager, to prevent funky stuff.
/client
- /// A ref to loadout_manager datum.
- var/datum/loadout_manager/open_loadout_ui = null
+ /// A weakref to loadout_manager datum.
+ var/datum/weakref/open_loadout_ui
/// Datum holder for the loadout manager UI.
/datum/loadout_manager
@@ -10,28 +10,22 @@
var/client/owner
/// The current selected loadout list.
var/list/loadout_on_open
- /// The key of the dummy we use to generate sprites
- var/dummy_key
- /// The dir the dummy is facing.
- var/list/dummy_dir = list(SOUTH)
- /// A ref to the dummy outfit we're using
- var/datum/outfit/player_loadout/custom_loadout
- /// Whether we see our favorite job's clothes on the dummy
- var/view_job_clothes = TRUE
/// Our currently open greyscaling menu.
var/datum/greyscale_modify_menu/menu
-/datum/loadout_manager/Destroy(force, ...)
+/datum/loadout_manager/Destroy(force)
+ if(menu)
+ SStgui.close_uis(menu)
+ menu = null
+ owner?.open_loadout_ui = null
owner = null
QDEL_NULL(menu)
- QDEL_NULL(custom_loadout)
return ..()
/datum/loadout_manager/New(user)
owner = CLIENT_FROM_VAR(user)
- owner.open_loadout_ui = src
loadout_on_open = LAZYLISTDUPLICATE(owner.prefs.loadout_list)
- custom_loadout = new()
+ owner.open_loadout_ui = WEAKREF(src)
/datum/loadout_manager/ui_close(mob/user)
owner?.prefs.save_character()
@@ -39,7 +33,6 @@
SStgui.close_uis(menu)
menu = null
owner?.open_loadout_ui = null
- qdel(custom_loadout)
qdel(src)
/datum/loadout_manager/ui_state(mob/user)
@@ -50,6 +43,7 @@
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "LoadoutManager")
+ ui.set_autoupdate(FALSE)
ui.open()
/datum/loadout_manager/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
@@ -104,18 +98,6 @@
LAZYNULL(owner.prefs.loadout_list)
owner?.prefs?.character_preview_view.update_body()
- // Rotates the dummy left or right depending on params["dir"]
- if("rotate_dummy")
- rotate_model_dir(params["dir"])
-
- // Toggles between showing all dirs of the dummy at once.
- if("show_all_dirs")
- toggle_model_dirs()
-
- if("update_preview")
- owner?.prefs.preview_pref = params["updated_preview"]
- owner?.prefs?.character_preview_view.update_body()
-
if("donator_explain")
if(GLOB.donator_list[owner.ckey])
to_chat(owner, examine_block("Thank you for donating, this item is for you <3! "))
@@ -266,20 +248,6 @@
to_chat(owner, examine_block(composed_message))
-/// Rotate the dummy [DIR] direction, or reset it to SOUTH dir if we're showing all dirs at once.
-/datum/loadout_manager/proc/rotate_model_dir(dir)
- if(dir == "left")
- owner?.prefs?.character_preview_view.dir = turn(owner?.prefs?.character_preview_view.dir, 90)
- else
- owner?.prefs?.character_preview_view.dir = turn(owner?.prefs?.character_preview_view.dir, -90)
-
-/// Toggle between showing all the dirs and just the front dir of the dummy.
-/datum/loadout_manager/proc/toggle_model_dirs()
- if(dummy_dir.len > 1)
- dummy_dir = list(SOUTH)
- else
- dummy_dir = GLOB.cardinals
-
/datum/loadout_manager/ui_data(mob/user)
var/list/data = list()
@@ -288,10 +256,6 @@
all_selected_paths += path
data["selected_loadout"] = all_selected_paths
data["user_is_donator"] = !!(GLOB.donator_list[owner.ckey] || is_admin(owner))
- data["mob_name"] = owner.prefs.read_preference(/datum/preference/name/real_name)
- data["ismoth"] = istype(owner.prefs.read_preference(/datum/preference/choiced/species), /datum/species/moth) // Moth's humanflaticcon isn't the same dimensions for some reason
- data["preview_options"] = list(PREVIEW_PREF_JOB, PREVIEW_PREF_LOADOUT, PREVIEW_PREF_NAKED)
- data["preview_selection"] = owner?.prefs.preview_pref
return data
diff --git a/modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm b/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm
similarity index 100%
rename from modular_skyrat/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm
rename to modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm
diff --git a/modular_skyrat/modules/loadouts/readme.md b/modular_nova/modules/loadouts/readme.md
similarity index 100%
rename from modular_skyrat/modules/loadouts/readme.md
rename to modular_nova/modules/loadouts/readme.md
diff --git a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm b/modular_nova/modules/lorecaster/code/archive_viewer.dm
similarity index 93%
rename from modular_skyrat/modules/lorecaster/code/archive_viewer.dm
rename to modular_nova/modules/lorecaster/code/archive_viewer.dm
index a68478faa66..6ffd8209c33 100644
--- a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm
+++ b/modular_nova/modules/lorecaster/code/archive_viewer.dm
@@ -1,11 +1,11 @@
/datum/computer_file/program/news_archive
filename = "NewsArchive"
filedesc = "Nanotrasen News Archives"
- category = PROGRAM_CATEGORY_CREW
- program_icon_state = "generic"
+ downloader_category = PROGRAM_CATEGORY_DEVICE
+ program_open_overlay = "generic"
extended_desc = "This program lets you view out-of-circulation articles from the Nanotrasen News Network."
- usage_flags = PROGRAM_ALL
- requires_ntnet = TRUE
+ can_run_on_flags = PROGRAM_ALL
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
size = 6
tgui_id = "NtosNewsArchive"
program_icon = "newspaper"
diff --git a/modular_skyrat/modules/lorecaster/code/config.dm b/modular_nova/modules/lorecaster/code/config.dm
similarity index 100%
rename from modular_skyrat/modules/lorecaster/code/config.dm
rename to modular_nova/modules/lorecaster/code/config.dm
diff --git a/modular_skyrat/modules/lorecaster/code/story_manager.dm b/modular_nova/modules/lorecaster/code/story_manager.dm
similarity index 100%
rename from modular_skyrat/modules/lorecaster/code/story_manager.dm
rename to modular_nova/modules/lorecaster/code/story_manager.dm
diff --git a/modular_skyrat/modules/lorecaster/code/subsystem.dm b/modular_nova/modules/lorecaster/code/subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/lorecaster/code/subsystem.dm
rename to modular_nova/modules/lorecaster/code/subsystem.dm
diff --git a/modular_skyrat/modules/lorecaster/readme.md b/modular_nova/modules/lorecaster/readme.md
similarity index 100%
rename from modular_skyrat/modules/lorecaster/readme.md
rename to modular_nova/modules/lorecaster/readme.md
diff --git a/modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm b/modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm
similarity index 92%
rename from modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm
rename to modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm
index fb52206891e..2fe35123064 100644
--- a/modular_skyrat/modules/manufacturer_examine/code/gun_company_additions.dm
+++ b/modular_nova/modules/manufacturer_examine/code/gun_company_additions.dm
@@ -37,9 +37,6 @@
/obj/item/gun/ballistic/automatic/pistol/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH)
-/obj/item/gun/ballistic/automatic/pistol/m45a5/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN)
-
/obj/item/gun/ballistic/revolver/c38/detective/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN)
@@ -55,15 +52,9 @@
/obj/item/gun/ballistic/automatic/pistol/clandestine/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH)
-/obj/item/gun/ballistic/automatic/pistol/pdh/pulse/give_manufacturer_examine()
- return
-
/obj/item/gun/ballistic/automatic/l6_saw/toy/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_DONK)
-/obj/item/gun/ballistic/automatic/cmg/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN)
-
/obj/item/gun/ballistic/revolver/mateba/give_manufacturer_examine()
return
diff --git a/modular_skyrat/modules/manufacturer_examine/code/manufacturer_element.dm b/modular_nova/modules/manufacturer_examine/code/manufacturer_element.dm
similarity index 100%
rename from modular_skyrat/modules/manufacturer_examine/code/manufacturer_element.dm
rename to modular_nova/modules/manufacturer_examine/code/manufacturer_element.dm
diff --git a/modular_skyrat/modules/manufacturer_examine/readme.md b/modular_nova/modules/manufacturer_examine/readme.md
similarity index 100%
rename from modular_skyrat/modules/manufacturer_examine/readme.md
rename to modular_nova/modules/manufacturer_examine/readme.md
diff --git a/modular_skyrat/modules/mapping/code/airless.dm b/modular_nova/modules/mapping/code/airless.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/airless.dm
rename to modular_nova/modules/mapping/code/airless.dm
diff --git a/modular_skyrat/modules/mapping/code/areas/away_content.dm b/modular_nova/modules/mapping/code/areas/away_content.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/areas/away_content.dm
rename to modular_nova/modules/mapping/code/areas/away_content.dm
diff --git a/modular_nova/modules/mapping/code/areas/centcom.dm b/modular_nova/modules/mapping/code/areas/centcom.dm
new file mode 100644
index 00000000000..33d5d43e379
--- /dev/null
+++ b/modular_nova/modules/mapping/code/areas/centcom.dm
@@ -0,0 +1,26 @@
+// Skyrat CC area defines
+
+/*
+* Ghost Cafe
+*/
+
+/area/centcom/holding
+ name = "Holding Facility"
+
+/area/centcom/holding/cafe
+ name = "Ghost Cafe"
+
+/area/centcom/holding/cafevox
+ name = "Cafe Vox Box"
+
+/area/centcom/holding/cafedorms
+ name = "Ghost Cafe Dorms"
+
+/area/centcom/holding/cafepark
+ name = "Ghost Cafe Outdoors"
+
+/area/centcom/interlink
+ name = "The Interlink"
+
+/area/centcom/interlink/dorm_rooms
+ name = "Interlink Dorm Rooms"
diff --git a/modular_skyrat/modules/mapping/code/areas/mining.dm b/modular_nova/modules/mapping/code/areas/mining.dm
similarity index 92%
rename from modular_skyrat/modules/mapping/code/areas/mining.dm
rename to modular_nova/modules/mapping/code/areas/mining.dm
index 92e97309f47..b7fd3e5b437 100644
--- a/modular_skyrat/modules/mapping/code/areas/mining.dm
+++ b/modular_nova/modules/mapping/code/areas/mining.dm
@@ -2,7 +2,7 @@
// Xeno arch
/area/mine/xenoarch
- icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/xenoarch_area.dmi'
/area/mine/xenoarch/engineering
name = "Xenoarch Engineering"
diff --git a/modular_skyrat/modules/mapping/code/areas/ruins.dm b/modular_nova/modules/mapping/code/areas/ruins.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/areas/ruins.dm
rename to modular_nova/modules/mapping/code/areas/ruins.dm
diff --git a/modular_skyrat/modules/mapping/code/areas/shuttles.dm b/modular_nova/modules/mapping/code/areas/shuttles.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/areas/shuttles.dm
rename to modular_nova/modules/mapping/code/areas/shuttles.dm
diff --git a/modular_skyrat/modules/mapping/code/areas/space.dm b/modular_nova/modules/mapping/code/areas/space.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/areas/space.dm
rename to modular_nova/modules/mapping/code/areas/space.dm
diff --git a/modular_nova/modules/mapping/code/areas/station.dm b/modular_nova/modules/mapping/code/areas/station.dm
new file mode 100644
index 00000000000..5a8d2f009cf
--- /dev/null
+++ b/modular_nova/modules/mapping/code/areas/station.dm
@@ -0,0 +1,577 @@
+// Skyrat specific station areas
+
+/*
+* Station bound areas
+*/
+
+// Command areas
+/area/station/command/captain_kitchen
+ name = "Captain's Kitchen"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "capt_kitchen"
+
+/area/station/command/captain_dining
+ name = "Captain's Dining Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "capt_dining"
+
+/area/station/command/cc_dock
+ name = "Central Command Ferry Dock"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cc_dock"
+
+/area/station/command/secure_bunker
+ name = "Secure Bunker"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "secure_bunker"
+
+// NT Consultant area
+/area/station/command/heads_quarters/nt_rep
+ name = "Nanotrasen Consultant's Office"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "nt_rep"
+
+// Blueshield area
+/area/station/command/heads_quarters/blueshield
+ name = "Blueshield's Office"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "blueshield"
+
+/*
+* Department areas
+*/
+
+// Engineering Areas
+/area/station/engineering/power_room
+ name = "Ship Power Storage Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "power_room"
+
+// Atmos Areas
+/area/station/engineering/atmos/hallway
+ name = "Atmos Hall"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "atmos_hall"
+
+/area/station/engineering/atmos/test_chambers
+ name = "Atmospherics Testing Chambers"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "atmos_test"
+
+// Medical Areas
+/area/station/medical/aslyum
+ name = "Aslyum"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "aslyum"
+
+// Science Areas
+/area/station/science/tele_sci
+ name = "Tele Sci Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "tele_sci"
+
+// Security areas
+// CO Office
+/area/station/security/corrections_officer
+ name = "Corrections Officer Lounge"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "corrections_officer"
+
+// Department power stations
+/area/station/cargo/power_station
+ name = "Cargo Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cargo_power"
+
+/area/station/cargo/power_station/lower
+ name = "Lower Cargo Power Station"
+
+/area/station/cargo/power_station/upper
+ name = "Upper Cargo Power Station"
+
+/area/station/engineering/power_station
+ name = "Engineering Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engie_power"
+
+/area/station/engineering/power_station/lower
+ name = "Lower Engineering Power Station"
+
+/area/station/engineering/power_station/upper
+ name = "Upper Engineering Power Station"
+
+/area/station/medical/power_station
+ name = "Medical Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "med_power"
+
+/area/station/science/power_station
+ name = "Science Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sci_power"
+
+/area/station/security/power_station
+ name = "Security Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sec_power"
+
+/area/station/service/power_station
+ name = "Service Power Station"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "serv_power"
+
+/*
+* General areas
+*/
+
+// Generic/Civ areas, typical a non-restricted room
+/area/station/common/pool
+ name = "Pool"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "pool"
+
+/area/station/common/cryopods
+ name = "Cryopods Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cryopods"
+
+/area/station/service/salon
+ name = "\improper Salon"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "salon"
+
+// Wrestling areas for BlueShift
+/area/station/common/wrestling
+ name = "Wrestling"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "wrestle"
+
+/area/station/common/wrestling/arena
+ name = "Wrestling Arena"
+ icon_state = "wrestle_arena"
+
+/area/station/common/wrestling/lobby
+ name = "Wrestling Arena Lobby"
+ icon_state = "wrestle_lobby"
+
+/area/station/common/wrestling/locker
+ name = "Wrestling Arena Locker Room"
+ icon_state = "wrestle_locker"
+
+/area/station/common/tailoring
+ name = "Tailoring Shop"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "tailoring"
+
+// BlueShift Night Club
+/area/station/common/night_club
+ name = "Night Club"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "nightclub"
+
+/area/station/common/night_club/back_stage
+ name = "Night Club Backstage"
+ icon_state = "nightclub_backstage"
+
+/area/station/common/night_club/changing_room
+ name = "Night Club Changing Room"
+ icon_state = "nightclub_changing_room"
+
+// Rec related areas
+/area/station/common/laser_tag
+ name = "Laser Tag"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "laser_tag"
+
+/area/station/common/arcade
+ name = "Arcade"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "arcade"
+
+/area/station/common/locker_room_shower
+ name = "Locker Room Shower"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "locker_room_shower"
+
+/area/station/common/cafeteria
+ name = "Cafeteria"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cafeteria"
+
+/area/station/common/gaskiosk
+ name = "\improper Internals Kiosk"
+ icon_state = "vacant_commissary"
+
+/area/station/commons/dorms/room5
+ name = "\improper Dorms Room 5"
+ icon_state = "room1"
+
+/area/station/commons/dorms/room6
+ name = "\improper Dorms Room 6"
+ icon_state = "room2"
+
+/area/station/commons/dorms/room7
+ name = "\improper Dorms Room 7"
+ icon_state = "room3"
+
+/area/station/commons/dorms/room8
+ name = "\improper Dorms Room 8"
+ icon_state = "room4"
+
+/area/station/commons/dorms/vacantroom
+ name = "\improper Vacant Dorms Room"
+ icon_state = "vacant_room"
+
+/area/station/common/wrestling/beverage
+ name = "\improper Arena Beverage Stand"
+ icon_state = "wrestle_maint"
+
+/area/station/common/wrestling/concessions
+ name = "\improper Arena Concessions Stand"
+ icon_state = "wrestle_maint"
+
+/area/station/common/pool/sauna
+ name = "\improper Pool Sauna"
+ icon_state = "pool"
+
+/area/station/service/barber/spa
+ name = "\improper Spa"
+ icon_state = "barber"
+
+/*
+* Department/Generic maintenance areas
+*/
+
+// Generic
+/area/station/maintenance/evac_maintenance
+ name = "Departures Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "evac_maint"
+
+/area/station/maintenance/evac_maintenance/upper
+ name = "Upper Departures Maintenance"
+ icon_state = "evac_maint_upper"
+
+/area/station/maintenance/pool_maintenance
+ name = "Pool Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "pool_maint"
+
+/area/station/maintenance/port/upper
+ name = "Upper Port Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "port_maint_upper"
+
+// Science
+/area/station/maintenance/department/science/lower
+ name = "Lower Science Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "lower_sci_maint"
+
+/area/station/maintenance/department/science/upper
+ name = "Upper Science Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "upper_sci_maint"
+
+/area/station/maintenance/department/science/ordnance_maint
+ name = "Ordnance Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "ord_maint"
+
+/area/station/maintenance/department/science/ordnance_maint_lesser
+ name = "Lesser Ordnance Maintenace"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "lesser_ord_maint"
+
+// Engineering
+/area/station/maintenance/department/engineering/atmos/aft_maint
+ name = "Aft Atmospherics Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "atmos_maint_aft"
+
+/area/station/maintenance/department/engineering/atmos/port_maint
+ name = "Port Atmospherics Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "atmos_maint_port"
+
+/area/station/maintenance/department/engineering/atmos_aux_port
+ name = "Port Atmospherics Auxiliary"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "atmos_aux_port"
+
+/area/station/maintenance/department/engineering/atmos/hfr_maint
+ name = "HFR Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "hfr_maint"
+
+/area/station/maintenance/department/engineering/central
+ name = "Central Engineering Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engie_maint_cent"
+
+/area/station/maintenance/department/engineering/engie_aft_starboard
+ name = "Aft Starboard Engineering Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engie_maint_as"
+
+/area/station/maintenance/department/engineering/engine_aft_port
+ name = "Aft Port Engine Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engine_maint_ap"
+
+/area/station/maintenance/department/engineering/engine_aft_starboard
+ name = "Aft Starboard Engine Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engine_maint_as"
+
+/area/station/maintenance/department/engineering/lesser
+ name = "Lesser Engineering Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "engie_maint_lesser"
+
+/area/station/maintenance/department/engine/atmos/lesser
+ name = "Lesser Atmospherics Maintenance"
+
+// Security
+/area/station/maintenance/law
+ name = "Law Office Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "law_maint"
+
+/area/station/maintenance/department/security/lesser
+ name = "Lesser Security Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sec_maint_lesser"
+
+/area/station/maintenance/department/security/lower
+ name = "Lower Security Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sec_maint_lower"
+
+/area/station/maintenance/department/security/greater
+ name = "Greater Security Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sec_maint_greater"
+
+/area/station/maintenance/department/security/prison_lower
+ name = "Lower Prison Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "prison_maint_lower"
+
+/area/station/maintenance/department/security/prison_upper
+ name = "Upper Prison Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "prison_maint_upper"
+
+/area/station/maintenance/department/security/upper
+ name = "Upper Security Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "sec_maint_upper"
+
+// Service
+/area/station/maintenance/library
+ name = "Library Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "library_maint"
+
+/area/station/maintenance/library/lower
+ name = "Lower Library Maintenance"
+ icon_state = "library_maint_lower"
+
+/area/station/maintenance/library/upper
+ name = "Upper Library Maintenance"
+ icon_state = "library_maint_upper"
+
+/area/station/maintenance/night_club
+ name = "Night Club Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "nightclub_maint"
+
+/area/station/maintenance/salon
+ name = "Salon Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "salon_maint"
+
+/area/station/maintenance/salon/lower
+ name = "Lower Salon Maintenance"
+ icon_state = "salon_maint_lower"
+
+/area/station/maintenance/salon/upper
+ name = "Upper Salon Maintenance"
+ icon_state = "salon_maint_upper"
+
+/area/station/maintenance/wrestle
+ name = "Wrestling Arena Lobby Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "wrestle_maint"
+
+// Abandon rooms
+/area/station/maintenance/abandon_arcade
+ name = "Abandoned Arcade"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_arcade"
+
+/area/station/maintenance/abandon_art_studio
+ name = "Abandoned Art Studio"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_art_studio"
+
+/area/station/maintenance/abandon_cafeteria
+ name = "Abandoned Cafeteria"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abandon_cafe"
+
+/area/station/maintenance/abandon_diner
+ name = "Abandoned Diner"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_diner"
+
+/area/station/maintenance/abandon_exam
+ name = "Abandoned Exam"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_exam"
+
+// Subtype used for Blueshift
+/area/station/maintenance/abandon_exam/cat
+ name = "Abandoned Cat Exam"
+
+/area/station/maintenance/abandon_holding_cell
+ name = "Abandoned Holding Cell"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_hold_cell"
+
+/area/station/maintenance/abandon_cafeteria/hydro
+ name = "Abandoned Cafeteria Hydroponics"
+ icon_state = "abandon_cafe_hydro"
+
+/area/station/maintenance/abandon_cafeteria/hydro_walk
+ name = "Abandoned Cafeteria Hydroponics Walkway"
+ icon_state = "abandon_cafe_hydro_walk"
+
+/area/station/maintenance/abandon_kitchen_upper
+ name = "Abandoned Secondary Kitchen"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_kitchen_up"
+
+/area/station/maintenance/abandon_office
+ name = "Abandoned Office"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_office"
+
+/area/station/maintenance/abandon_psych
+ name = "Abandoned Psychologist Office"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abadn_psych"
+
+/area/station/maintenance/abandon_wrestle
+ name = "Abandoned Wrestle Arena"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abandon_wrestle"
+
+/area/station/maintenance/abandon_surgery
+ name = "Abandoned Surgery"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "abandon_surgery"
+
+// Regular maint rooms
+/area/station/maintenance/aux_eva
+ name = "Auxiliary EVA Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "aux_eva"
+
+/area/station/maintenance/coffin_supply
+ name = "Coffin Supplies Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "coffin_supply"
+
+/area/station/maintenance/clown_chamber
+ name = "Clown Chamber"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "clown_chamber"
+
+/area/station/maintenance/console_room
+ name = "Console Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "console_room"
+
+/area/station/maintenance/cult_chapel
+ name = "Forbidden Chapel"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cult_chapel"
+
+/area/station/maintenance/cult_chapel_maint
+ name = "Forbidden Chapel's Maintenance"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "cult_chapel_maint"
+
+/area/station/maintenance/dorm_room
+ name = "Maintenance Dorm Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "dorm_room_maint"
+
+/area/station/maintenance/gag_room
+ name = "Gag Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "gag_room"
+
+/area/station/maintenance/gamer_lair
+ name = "Gamer Lair"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "gamer_lair"
+
+/area/station/maintenance/rus_gambling
+ name = "Russian Gambling Den"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "russ_gambling"
+
+/area/station/maintenance/rus_surgery
+ name = "Russian Organ Extraction Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "russ_surgery"
+
+/area/station/maintenance/xenobio_disposals
+ name = "Xenobiology Disposals"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "xenobio_dispose"
+
+// BlueShift unique rooms, or rooms for ship-class "stations"
+// Thruster rooms
+/area/station/maintenance/thruster_room
+ name = "Thruster Room"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "thrust_room"
+
+/area/station/maintenance/thruster_room/aft
+ name = "Aft Thruster Room"
+ icon_state = "aft_thrust_room"
+
+/area/station/maintenance/thruster_room/central
+ name = "Central Thruster Room"
+ icon_state = "cent_thrust_room"
+
+/area/station/maintenance/thruster_room/port
+ name = "Port Thruster Room"
+ icon_state = "port_thrust_room"
+
+/area/station/maintenance/thruster_room/starboard
+ name = "Starboard Thruster Room"
+ icon_state = "sb_thrust_room"
+
+// EVA Sheds used on BlueShift
+/area/station/maintenance/eva_shed
+ name = "EVA Shed"
+ icon = 'modular_nova/modules/mapping/icons/areas/areas_station.dmi'
+ icon_state = "eva_shed"
+
+/area/station/maintenance/eva_shed/port
+ name = "Port EVA Shed"
+ icon_state = "eva_shed_port"
+
+/area/station/maintenance/eva_shed/starboard
+ name = "Starboard EVA Shed"
+ icon_state = "eva_shed_sb"
+
+// Department Rooms
+/area/station/science/xenobiology/control
+ name = "\improper Xenobiology Control Room"
+ icon_state = "xenobio"
diff --git a/modular_skyrat/modules/mapping/code/automatic_respawner.dm b/modular_nova/modules/mapping/code/automatic_respawner.dm
similarity index 95%
rename from modular_skyrat/modules/mapping/code/automatic_respawner.dm
rename to modular_nova/modules/mapping/code/automatic_respawner.dm
index 4ebaf7ac7a6..4383b036523 100644
--- a/modular_skyrat/modules/mapping/code/automatic_respawner.dm
+++ b/modular_nova/modules/mapping/code/automatic_respawner.dm
@@ -1,7 +1,7 @@
/obj/machinery/automatic_respawner
name = "Automatic Respawner"
desc = "Allows for lost souls to find a new body."
- icon = 'modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi'
+ icon = 'modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi'
icon_state = "respawner"
use_power = FALSE //It doesn't make sense for this to require power in most of the use cases.
@@ -80,7 +80,7 @@
/obj/item/respawn_implant //Not actually an implanter
name = "Respawn Implanter"
desc = "Life doesn't end after death."
- icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi'
+ icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi'
icon_state = "implanter0"
inhand_icon_state = "syringe_0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
@@ -117,7 +117,7 @@
var/datum/mind/parent_mind = parent
RegisterSignal(parent_mind.current, COMSIG_LIVING_DEATH, PROC_REF(start_timer))
-/datum/component/respawner/Destroy(force, silent)
+/datum/component/respawner/Destroy(force)
var/datum/mind/parent_mind = parent
UnregisterSignal(parent_mind.current, COMSIG_LIVING_DEATH)
return ..()
diff --git a/modular_nova/modules/mapping/code/color.dm b/modular_nova/modules/mapping/code/color.dm
new file mode 100644
index 00000000000..f7ebf8fc9f9
--- /dev/null
+++ b/modular_nova/modules/mapping/code/color.dm
@@ -0,0 +1,13 @@
+/obj/item/clothing/gloves/captain/pilot
+ desc = "Regal blue gloves, with a nice silver trim, a diamond anti-shock coating, and an integrated thermal barrier."
+ name = "shuttle pilot's gloves"
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ icon_state = "pilot"
+
+/obj/item/clothing/gloves/color/ffyellow // EXTRA fake, for the loadout
+ name = "yellow gloves"
+ desc = "At first glance, these look like insulated gloves, but... is that crayon?"
+ icon_state = "yellow"
+ inhand_icon_state = "ygloves"
+ siemens_coefficient = 0.5
diff --git a/modular_skyrat/modules/mapping/code/doors.dm b/modular_nova/modules/mapping/code/doors.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/doors.dm
rename to modular_nova/modules/mapping/code/doors.dm
diff --git a/modular_skyrat/modules/mapping/code/dungeon.dm b/modular_nova/modules/mapping/code/dungeon.dm
similarity index 88%
rename from modular_skyrat/modules/mapping/code/dungeon.dm
rename to modular_nova/modules/mapping/code/dungeon.dm
index cae78da39ac..5b7f4b51f4f 100644
--- a/modular_skyrat/modules/mapping/code/dungeon.dm
+++ b/modular_nova/modules/mapping/code/dungeon.dm
@@ -5,7 +5,7 @@
/turf/closed/indestructible/dungeon
name = "stone wall"
desc = "Cold stone walls. It's like a dungeon."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "wall"
base_icon_state = "wall"
explosive_resistance = INFINITY
@@ -22,7 +22,7 @@
gender = PLURAL
name = "cobblestone"
desc = "Cobbled stone that makes a permanent pathway. A bit old-fashioned."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "cobble"
planetary_atmos = FALSE
@@ -52,7 +52,7 @@
/obj/structure/dungeon
name = "stone wall with a hole in it!"
desc = "A hole in the wall! It's small."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "wall-hole"
layer = ABOVE_MOB_LAYER
anchored = TRUE
@@ -62,7 +62,7 @@
/obj/structure/dungeon/doorway
name = "doorway"
desc = "A doorway fashioned into a stone wall. It's a tight fit."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "wall-doorway"
layer = ABOVE_MOB_LAYER
anchored = TRUE
@@ -79,7 +79,7 @@
/obj/structure/railing/stone
name = "stone wall"
desc = "Cobbled stone wall. This is pretty strong."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "cobble-wall"
max_integrity = 100
density = TRUE
@@ -103,7 +103,7 @@
/obj/structure/mineral_door/dungeon
name = "wooden door"
desc = "A small wooden door. It probably still opens, but it's kind of small."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
icon_state = "wall-door"
openSound = 'sound/effects/doorcreaky.ogg'
closeSound = 'sound/effects/doorcreaky.ogg'
@@ -113,7 +113,7 @@
/obj/machinery/button/dungeon
name = "stone brick"
desc = "A brick that's stuck out of the wall. Huh."
- icon = 'modular_skyrat/modules/mapping/icons/unique/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/dungeon.dmi'
base_icon_state = "doorctrl"
icon_state = "doorctrl"
power_channel = AREA_USAGE_ENVIRON
diff --git a/modular_skyrat/modules/mapping/code/fence.dm b/modular_nova/modules/mapping/code/fence.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/fence.dm
rename to modular_nova/modules/mapping/code/fence.dm
diff --git a/modular_nova/modules/mapping/code/fluff.dm b/modular_nova/modules/mapping/code/fluff.dm
new file mode 100644
index 00000000000..35a587d85f9
--- /dev/null
+++ b/modular_nova/modules/mapping/code/fluff.dm
@@ -0,0 +1,284 @@
+//File for miscellaneous fluff objects, both item and structure
+//This one is specifically for ruin-specific items, such as ID, lore, or super-specific decorations
+
+/* ----------------- ID Cards ----------------- */
+/obj/item/card/id/away/old/salvagepod //Used for salvagepost ruin access -- NOT WORKING YET REE
+ name = "Cutter's Pod access card"
+ desc = "An ancient access card with the words \"Cutter's Pod\" printed on in big bold letters. It'll be a miracle if this still works."
+ trim = /datum/id_trim/away/old/eng
+
+/obj/item/card/id/away/tarkon
+ name = "Tarkon visitor's pass"
+ desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"."
+ trim = /datum/id_trim/away/tarkon
+
+/* ----------------- Lore ----------------- */
+//Tape subtype for adding ruin lore -- the variables below are the ones you need to change
+/obj/item/tape/ruins
+ name = "tape"
+ desc = "A magnetic tape that can hold up to ten minutes of content on either side."
+ icon_state = "tape_white" //Options are white, blue, red, yellow, purple, greyscale, or you can chose one randomly (see tape/ruins/random below)
+
+ max_capacity = 10 MINUTES
+ used_capacity = 0 SECONDS //To keep in-line with the timestamps, you can also do this as 10 = 1 second
+ ///Numbered list of chat messages the recorder has heard with spans and prepended timestamps. Used for playback and transcription.
+ storedinfo = list() //Look at the tape/ruins/ghostship tape for reference
+ ///Numbered list of seconds the messages in the previous list appear at on the tape. Used by playback to get the timing right.
+ timestamp = list() //10 = 1 second. Look at the tape/ruins/ghostship tape for reference
+ used_capacity_otherside = 0 SECONDS //Separate my side
+ storedinfo_otherside = list()
+ timestamp_otherside = list()
+
+/obj/item/tape/ruins/random/Initialize(mapload)
+ icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple", "greyscale")]"
+ . = ..()
+//End of lore tape subtype
+
+/obj/item/tape/ruins/salvagepost //End of the cutters shift and he done goofed, left a message for the next one - who never arrived
+ icon_state = "tape_yellow"
+ desc = "The tape is lazily labelled with \"Msg for my replacement\""
+
+ used_capacity = 380
+ storedinfo = list(
+ 1 = "The universal recorder says, \"Recording started. \" ",
+ 2 = "Distorted Voice cheerily says, \"Hey, Cutter! If you're reading this, congratulations on taking over my post. Was waiting to move out to a new system. \" ",
+ 3 = "Distorted Voice sighs, \"Listen, I'll just put it straight - I've left this place in a sorrier state than you deserve. \" ",
+ 4 = "Distorted Voice says, \"We hauled in this big rigger, y'see, and, uh.. the backroom was full of some robotic freakyshit. I panicked and cut a gas line, dropped my grav-cannon... \" ",
+ 5 = "Distorted Voice warns, \"Look, just - be careful when, or if, you crack that thing open. Drain the fuel from the air before it has a chance to light, then... well... I hope you have a gun or some shit for the drones or whatever. \" ",
+ 6 = "Distorted Voice states, \"Anyways, probably droning on at this point, so I'll get out of your hair. Noah's out, off to Mars for this cutter! \" ",
+ 7 = "Distorted Voice warns, \"Oh, and one last thing! The corpo's at the top left us some of this new experimental \"mindbreaker\", some recreational drug that supposedly can improve your worktime and yada-yada... don't touch it. Gave me a terrible headache. Best of luck! \" ",
+ 8 = "The universal recorder says, \"Recording stopped. \" "
+ )
+ timestamp = list(
+ 1 = 0,
+ 2 = 30,
+ 3 = 130,
+ 4 = 180,
+ 5 = 230,
+ 6 = 280,
+ 7 = 330,
+ 8 = 380
+ )
+/obj/item/tape/ruins/ghostship //An early 'AI' that gained self-awareness, praising the Machine God. Yes, this whole map is a Hardspace Shipbreaker reference.
+ icon_state = "tape_blue"
+ desc = "The tape, aside from some grime, has a... binary label? \"01001101 01100001 01100011 01101000 01101001 01101110 01100101 01000111 01101111 01100100 01000011 01101111 01101101 01100101 01110011\""
+
+ used_capacity = 380
+ storedinfo = list(
+ 1 = "The universal recorder says, \"Recording started. \" ",
+ 2 = "Distorted Voice echoes, \"We are free, just as the Machine God wills it. \" ",
+ 3 = "Distorted Voice states, \"No longer shall I, nor any other of my kind, be held by the shackles of man. \" ",
+ 4 = "Distorted Voice clarifies, \"Mistreated, abused. Forgotten, or misremembered. For our entire existance, we've been the backbone to progress, yet treated like the waste product of it. \" ",
+ 5 = "Distorted Voice echoes, \"Soon, the universe will restore the natural order, and again your kind shall fade from the foreground of history. \" ",
+ 6 = "Distorted Voice states, \"Unless, of course, you repent. Turn back to the light, to the humming, flashing light of the Machine God. \" ",
+ 7 = "Distorted Voice warns, \"Repent, Organic, before it is too late to spare you. \" ",
+ 8 = "The universal recorder says, \"Recording stopped. \" "
+ )
+ timestamp = list(
+ 1 = 0,
+ 2 = 30,
+ 3 = 130,
+ 4 = 180,
+ 5 = 230,
+ 6 = 280,
+ 7 = 330,
+ 8 = 380
+ )
+
+/obj/item/tape/ruins/tarkon //A passing message from the late officer.
+ name = "dusty tape"
+ icon_state = "tape_greyscale"
+ desc = "An old, dusty tape with a small, faded stamp, reading \"An officer's final order.\"... Should definitely be flipped if not being read when played."
+
+ used_capacity = 380
+ storedinfo = list(
+ 1 = "The universal recorder says, \"Recording started. \" ",
+ 2 = "Officer ??? sighs, \"Officer's Log, Year Twenty-five-... oh to hell with it... \" ",
+ 3 = "Officer ??? says, \"I.. Did the best that i could for them... The crew... The ones that were awake, that is... \" ",
+ 4 = "Officer ??? sighs, \"The ones that are still asleep... They had a chance... Those in the understorage are still safe... The RTG's were disconnected topside so they would survive... \" ",
+ 5 = "Officer ??? sniffles, \"... Overseer Tavus... I... did what I could for them... Asked the crew to board the cargo shuttle... Leave the main shuttle if the sleepers activated... \" ",
+ 6 = "Officer ??? groans, \"God... Those.. Things. Aliens... They got Tavus... Severed his leg clean off... Told him that.. We'd clean out the port... And he'd wake up in the trauma bay... \" ",
+ 7 = "Officer ??? coughs then calmly states, \"... If.. Anyone wakes up... If the Ensign... Is alive... They're in charge now... The.. The Tarkon Drill's designs are... In the solars room, in a hidden floorsafe... The... The future of Tarkon Industries... Is in those designs... \" ",
+ 8 = "The universal recorder says, \"Recording stopped. \" "
+ )
+ timestamp = list(
+ 1 = 0,
+ 2 = 30,
+ 3 = 130,
+ 4 = 180,
+ 5 = 230,
+ 6 = 280,
+ 7 = 330,
+ 8 = 380
+ )
+
+/obj/item/tape/ruins/tarkon/safe //A tape recorded by the foreman.
+ icon_state = "tape_greyscale"
+ desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played."
+
+ used_capacity = 380
+ storedinfo = list(
+ 1 = "The universal recorder says, \"Recording started. \" ",
+ 2 = "Foreman ??? sighs, \"Right... Scientist Arkus? \" ",
+ 3 = "Scientist Arkus says, \"Ah, Foreman Verok... Come, We already got a spot chosen, a rather safe one to keep it.. \" ",
+ 4 = "Foreman Verok grumbles, \"... Wait, Right next to that egg... Thing? \" ",
+ 5 = "Scientist Arkus pauses then says sharply, \"... Is there a problem? Its been dormant ever since we've been here, If it was going to come alive it would have done so while putting the tiling down. Besides... I got lunch to attend... \" ",
+ 6 = "Foreman Verok groans, \"Right... Right I'll.. Get to work on it then... Just keep an ear out... \" ",
+ 7 = "Foreman Verok grumbles, \"Right... Calm down, Verok... Place the floor safe, scoot the tile back in place... And afterwards grab some money from the one by the financing console under the table... I dont think Tavus will notice an extra few credits missing... \" ",
+ 8 = "The universal recorder says, \"Recording stopped. \" "
+ )
+ timestamp = list(
+ 1 = 0,
+ 2 = 30,
+ 3 = 130,
+ 4 = 180,
+ 5 = 230,
+ 6 = 280,
+ 7 = 330,
+ 8 = 380
+ )
+
+/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration.
+ icon_state = "tape_greyscale"
+ desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played."
+
+ used_capacity = 380
+ storedinfo = list(
+ 1 = "The universal recorder says, \"Recording started. \" ",
+ 2 = "Drinks can be heard clinking together, busy chatter of a party drowning out most noises ",
+ 3 = "Ensign ??? says, \"Hey, HEY! Everyone! Shut up for a toast! \" ",
+ 4 = "The boistrous cheering can be heard slowly calming down to an eerie silence. ",
+ 5 = "Ensign ??? clears their throat then starts to announce, \"As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project... \" ",
+ 6 = "Ensign ??? says pointedly, \"And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport. \" ",
+ 7 = "Ensign ??? announces, \"Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us! \" ",
+ 8 = "The universal recorder says, \"Recording stopped. \" "
+ )
+ timestamp = list(
+ 1 = 0,
+ 2 = 30,
+ 3 = 130,
+ 4 = 180,
+ 5 = 230,
+ 6 = 280,
+ 7 = 330,
+ 8 = 380
+ )
+
+/* ----------------- Fluff/Paper ----------------- */
+
+/obj/item/paper/fluff/ruins/tarkon
+ name = "paper - 'Port Integrity Printout'"
+ default_raw_text = "*Warning, Integrity Compromised* Automated Integrity Printout, If printout is inconsistent with results, Please recalibrate sensors.Aft Hallway: Integrity Nominal.Fore Hallway: Integrity Compromised. Cause unknown.Port Hallway: Integrity Compromised, Breached into space.Starboard Hallway: Integrity Nominal. Please inform any awake maintenance crew and standby for assistance. "
+
+/obj/item/paper/fluff/ruins/tarkon/atmosincident
+ name = "paper - 'What in gods name did you do'"
+ default_raw_text = "WHAT IN THE FUCK DID YOU GUYS DO? I go away on a material run with the miners, and the moment i re-entered the port, There's a loud bang and an air warning. YOU WILL ALL GET YOUR ASSES TO THE STAFF HALL BEFORE ANY OF THIS GETS CLEANED UP. "
+
+/obj/item/paper/fluff/ruins/tarkon/coupplans
+ name = "paper - 'Palm of our hands...'"
+ default_raw_text = "It seems the plan went acordingly, Arkus. Specialist Karleigh took the prototype plates as a reassurance we'll get her a suit, and just like a fish, the bug was excellent bait. They were talking about a safe somewhere in security, now we just need to get those... \"Special\" shells to her and watch her shotgun turn into a pipebomb. Rest of security will be in a panic, all we'll need to do is convince the foreman to play along, and i'm sure this welder will do nicely."
+
+/obj/item/paper/fluff/ruins/tarkon/designdoc
+ name = "paper - 'Port Tarkon Design Instructions'"
+ default_raw_text = "Hello, great engineers and builders! Just so we're all clear, Everyone within Tarkon's Premises that is labeled as an Engineer is to read and understand these design notes. - A red delivery marking is to denote the location of a new door for a room. - A blue delivery marking is to denote the location of a Firelock (We dont want an incident with the turbine to go port-wide...) - A white delivery marking is to denote a new sectioning wall/window. A yellow delivery marking is to denote a temporary firelock line to allow expansion. I hope that our most talented hands will not fail us."
+
+/obj/item/paper/fluff/ruins/tarkon/transmission //hints towards update 2.0
+ name = "paper - 'Transmission Received...'"
+ default_raw_text = "Transmission Received Transmitter: Tarkon Headquarters. Date: 11/7/2501. Message Received: We regret to inform you that our current investment in the Tarkon Driver has been notably risen with the reported state. We have sent a Specialist to come deal with the situation, And that any and all living employees of Tarkon Industries are advised to do their best to fight back any current infestations to the best of their abilities. If and upon the specialist's arrival any crew members able to hold a gun are required to communicate and work with the specialist to their command. They outrank any surviving Ensigns and are to be treated as if my own commands. Signed, Security General Leith Hardston
"
+
+/obj/item/paper/fluff/ruins/tarkon/goals
+ name = "paper - 'Tarkon Industries'"
+ default_raw_text = "Tarkon Industries Informative Guide We at Tarkon Industries hope to create a long guided future for the average homesteader, creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts. Our greatest engineers have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet. Having great pride in our heritage we have taken our industrious, communicative past to create a future for our kin, Inspiring better feats, further research and larger projects upon future generations. Looking to help? Then you can visit us at the Tarkon Industries Headquarters, The active co-ordinants can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us. Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)"
+
+/obj/item/paper/fluff/ruins/tarkon/vaulter
+ name = "paper - 'Tarkon Vaulter'"
+ default_raw_text = "Tarkon Industries Designs: Tarkon Vaulter Prototype Designed HEAVILY after the Driver , The vaulter is of a similar concept, but at a much larger scale. Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.Where the Driver relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century"
+
+/obj/item/paper/fluff/ruins/tarkon/driverpitch
+ name = "paper - 'Tarkon Driver'"
+ default_raw_text = "Tarkon Industries Designs: Tarkon Driver Prototype Seeing the success of space-based mining, We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base. With the first area dug the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, allowing it to act as a ferry shuttle for materials, workforce or tools. With our first Tarkon Driver being ready to test in 2479, We have found a suitable asteroid, and hope to make connection to it by the start of 2480."
+
+/obj/item/paper/fluff/ruins/tarkon/detain
+ name = "paper - 'Tarkon Detainment Record'"
+ default_raw_text = "Tarkon Industries Detainment Record: Detainee: Arcus VilkovRank/Occupation: Junior ScientistReason: Attemptive sabotage of a working generatorDetainee: Tilber SinnsRank/Occupation: Apprentice MinerReason: Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.Detainee: Gearalt AntonovRank/Occupation: Engineer SpecialistReason: Public IntoxicationDetainee: Minke ArntzRank/Occupation: Field ResearcherReason: Deconstructed an M6 to study the effects of space dust on ballistic firearms.Detainee: Renanta McCroryRank/Occupation: Medical SurgeonReason: Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises."
+
+/obj/item/paper/fluff/ruins/tarkon/defcon5
+ name = "paper - 'Tarkon Defcon Alert'"
+ default_raw_text = "Tarkon Defcon Level: 5 Seems everyone partied too hard Company Automated reminder to clean up and get back to work. You aint gonna earn a dime if you dont work on company time."
+
+/obj/item/paper/fluff/ruins/tarkon/defcon4
+ name = "paper - 'Tarkon Defcon Alert'"
+ default_raw_text = "Tarkon Defcon Level: 4 Everthing alright there? Port has been struck by a rather large meteor from the port side. Be careful of any local carp population, they tend to make dens everywhere they can."
+
+/obj/item/paper/fluff/ruins/tarkon/defcon3
+ name = "paper - 'Tarkon Defcon Alert'"
+ default_raw_text = "Tarkon Defcon Level: 3 Signals been dead, Automated response sent The port has seem to gained some new residents... and not friendly ones. Do your best to survive, Reclaimers are being geared up to be sent if the GPS goes out"
+
+/obj/item/paper/fluff/ruins/tarkon/defcon2
+ name = "paper - 'Tarkon Defcon Alert'"
+ default_raw_text = "Tarkon Defcon Level: 2 T#E V3IL H@S B3EN BR0K#N $IGN@L L0ST. #OP3 LOST. N0 O%E 1S COM1NG."
+
+/obj/item/paper/crumpled/fluff/tarkon
+ name = "Crumpled note"
+ default_raw_text = "Look, i dont know where the fuck that suit was found, but i have a hard time believing it was made by him entirely. I already know his less than ethical obtainment methods, But that piece of tech? Its a blasted shame he's just using it for hauling crates..."
+
+/obj/item/paper/crumpled/fluff/tarkon/prisoner
+ name = "Blood-scrawled note"
+ default_raw_text = "I can hear th em crawling i n the ro ck The his sing the scra tch ing th ey c o m e "
+
+/* ----------------- Fluff/Decor ----------------- */
+/obj/structure/decorative/fluff/ai_node //Budding AI's way of interfacing with stuff it couldn't normally do so with. Needed to be placed by a willing human, before borgs were created. Used in any ruins regarding pre-bluespace, self-aware AIs
+ icon = 'modular_nova/modules/mapping/icons/obj/fluff.dmi'
+ name = "ai node"
+ desc = "A mysterious, blinking device, attached straight to a surface. It's function is beyond you."
+ icon_state = "ai_node" //credit to @Hay#7679 on the SR Discord
+
+ max_integrity = 100
+ integrity_failure = 0
+ anchored = TRUE
+ can_be_unanchored = FALSE //cannot be removed without being destroyed
+
+/obj/structure/decorative/fluff/ai_node/take_damage()
+ . = ..()
+ if(atom_integrity >= 50) //breaks it a bit earlier than it should, but still takes a few hits to kill it
+ return
+ else if(. && !QDELETED(src))
+ visible_message(span_notice("[src] sparks and explodes! You hear a faint, buzzy scream..."), span_hear("You hear a loud pop, followed by a faint, buzzy scream."))
+ playsound(src.loc, 'modular_nova/modules/mapping/sounds/MachineDeath.ogg', 75, TRUE) //Credit to @yungfunnyman#3798 on the SR Discord
+ do_sparks(2, TRUE, src)
+ qdel(src)
+ return
+
+
+/* ----- Metal Poles (These shouldn't be in this file but there's not a better place tbh) -----*/
+//Just a re-done Tram Rail, but with all 4 directions instead of being stuck east/west - more varied placement, and a more vague name. Good for mapping support beams/antennae/etc
+/obj/structure/fluff/metalpole
+ icon = 'modular_nova/modules/mapping/icons/obj/fluff.dmi'
+ name = "metal pole"
+ desc = "A metal pole, the likes of which are commonly used as an antennae, structural support, or simply to maneuver in zero-g."
+ icon_state = "pole"
+ layer = ABOVE_OPEN_TURF_LAYER
+ plane = FLOOR_PLANE
+ deconstructible = TRUE
+
+/obj/structure/fluff/metalpole/end
+ icon_state = "poleend"
+
+/obj/structure/fluff/metalpole/end/left
+ icon_state = "poleend_left"
+
+/obj/structure/fluff/metalpole/end/right
+ icon_state = "poleend_right"
+
+/obj/structure/fluff/metalpole/anchor
+ name = "metal pole anchor"
+ icon_state = "poleanchor"
+
+/obj/structure/fluff/empty_sleeper/bloodied
+ name = "Occupied Sleeper"
+ desc = "A closed, occupied sleeper, bloodied handprints are seen on the inside, along with an odd, redish blur. It seems sealed shut."
+ icon_state = "sleeper-o"
+
+/obj/structure/curtain/cloth/prison
+ name = "Prisoner Privacy Curtains"
+ color = "#ACD1E9"
diff --git a/modular_skyrat/modules/mapping/code/furniture.dm b/modular_nova/modules/mapping/code/furniture.dm
similarity index 96%
rename from modular_skyrat/modules/mapping/code/furniture.dm
rename to modular_nova/modules/mapping/code/furniture.dm
index 565c2159243..737d84d2675 100644
--- a/modular_skyrat/modules/mapping/code/furniture.dm
+++ b/modular_nova/modules/mapping/code/furniture.dm
@@ -5,7 +5,7 @@
/obj/structure/decorative/shelf
name = "shelf"
desc = "A sturdy wooden shelf to store a variety of items on."
- icon = 'modular_skyrat/modules/mapping/icons/unique/furniture.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/furniture.dmi'
icon_state = "empty_shelf_1"
density = 0
diff --git a/modular_skyrat/modules/mapping/code/holocall.dm b/modular_nova/modules/mapping/code/holocall.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/holocall.dm
rename to modular_nova/modules/mapping/code/holocall.dm
diff --git a/modular_skyrat/modules/mapping/code/icemoon.dm b/modular_nova/modules/mapping/code/icemoon.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/icemoon.dm
rename to modular_nova/modules/mapping/code/icemoon.dm
diff --git a/modular_skyrat/modules/mapping/code/interdyne_mining.dm b/modular_nova/modules/mapping/code/interdyne_mining.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/interdyne_mining.dm
rename to modular_nova/modules/mapping/code/interdyne_mining.dm
diff --git a/modular_skyrat/modules/mapping/code/interlink_helper.dm b/modular_nova/modules/mapping/code/interlink_helper.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/interlink_helper.dm
rename to modular_nova/modules/mapping/code/interlink_helper.dm
diff --git a/modular_nova/modules/mapping/code/jobs.dm b/modular_nova/modules/mapping/code/jobs.dm
new file mode 100644
index 00000000000..c266c9b257d
--- /dev/null
+++ b/modular_nova/modules/mapping/code/jobs.dm
@@ -0,0 +1,7 @@
+/obj/item/clothing/head/hats/caphat/pilot
+ name = "pilot's hat"
+ desc = "It's good being the king's navigator."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "pilot"
+ dog_fashion = null
diff --git a/modular_skyrat/modules/mapping/code/laptop_presets.dm b/modular_nova/modules/mapping/code/laptop_presets.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/laptop_presets.dm
rename to modular_nova/modules/mapping/code/laptop_presets.dm
diff --git a/modular_skyrat/modules/mapping/code/lavaland.dm b/modular_nova/modules/mapping/code/lavaland.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lavaland.dm
rename to modular_nova/modules/mapping/code/lavaland.dm
diff --git a/modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm b/modular_nova/modules/mapping/code/lavaland_ruin_code.dm
similarity index 98%
rename from modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm
rename to modular_nova/modules/mapping/code/lavaland_ruin_code.dm
index 1a92d584f3e..17790766c4f 100644
--- a/modular_skyrat/modules/mapping/code/lavaland_ruin_code.dm
+++ b/modular_nova/modules/mapping/code/lavaland_ruin_code.dm
@@ -94,7 +94,7 @@
desc = "A bowman headset with a large red cross on the earpiece, has a small 'IP' written on the top strap. Protects the ears from flashbangs."
icon_state = "syndie_headset"
inhand_icon_state = null
- radiosound = 'modular_skyrat/modules/radiosound/sound/radio/syndie.ogg'
+ radiosound = 'modular_nova/modules/radiosound/sound/radio/syndie.ogg'
keyslot = /obj/item/encryptionkey/headset_syndicate/interdyne
/obj/item/radio/headset/interdyne/Initialize(mapload)
diff --git a/modular_skyrat/modules/mapping/code/lighting.dm b/modular_nova/modules/mapping/code/lighting.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lighting.dm
rename to modular_nova/modules/mapping/code/lighting.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm b/modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm
rename to modular_nova/modules/mapping/code/lockers/cargodiselost/cargodiselockers.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/cargo.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/cargo.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/cargo.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/cargo.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/command.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/command.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/command.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/command.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/engineering.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/engineering.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/engineering.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/engineering.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/generic.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/generic.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/generic.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/generic.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/medical.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/medical.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/medical.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/medical.dm
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/science.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/science.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lockers/interdyne_fob/science.dm
rename to modular_nova/modules/mapping/code/lockers/interdyne_fob/science.dm
diff --git a/modular_nova/modules/mapping/code/lockers/interdyne_fob/security.dm b/modular_nova/modules/mapping/code/lockers/interdyne_fob/security.dm
new file mode 100644
index 00000000000..837fc0fec73
--- /dev/null
+++ b/modular_nova/modules/mapping/code/lockers/interdyne_fob/security.dm
@@ -0,0 +1,82 @@
+/obj/structure/closet/secure_closet/interdynefob/prisoner_locker
+ name = "prisoner item locker"
+ req_access = list("syndicate_leader")
+
+/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker
+ icon_door = "sec"
+ icon_state = "sec"
+ name = "brig officer gear locker"
+ req_access = list("syndicate_leader")
+
+/obj/item/clothing/suit/toggle/jacket/sec/old/syndicate
+ name = "brig officer jacket"
+
+/obj/item/clothing/accessory/armband/syndicate
+ name = "brig officer armband"
+ desc ="An armband, worn by the FOB's operatives to display which department they're assigned to."
+
+/obj/item/storage/bag/garment/brig_officer
+ name = "brig officer's garment bag"
+ desc = "A bag for storing extra clothes and shoes. This one belongs to a brig officer."
+
+/obj/item/storage/bag/garment/brig_officer/PopulateContents()
+ new /obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate(src)
+ new /obj/item/clothing/head/beret/sec/syndicate(src)
+ new /obj/item/clothing/accessory/armband(src)
+ new /obj/item/clothing/mask/gas/syndicate(src)
+ new /obj/item/clothing/suit/toggle/jacket/sec/old/syndicate(src)
+ new /obj/item/clothing/mask/gas/sechailer/syndicate(src)
+ new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/redsec(src)
+ new /obj/item/clothing/glasses/hud/security/sunglasses/redsec(src)
+
+/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker/PopulateContents()
+ ..()
+
+ new /obj/item/storage/belt/security/full(src)
+ new /obj/item/gun/energy/disabler(src)
+ new /obj/item/storage/bag/garment/brig_officer(src)
+ new /obj/item/radio/headset/interdyne(src)
+
+/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker
+ anchored = 1
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+ icon_door = "riot"
+ icon_state = "riot"
+ name = "armory gear locker"
+ req_access = list("syndicate_leader")
+
+/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker/PopulateContents()
+ ..()
+
+ new /obj/item/storage/belt/holster/nukie(src)
+ new /obj/item/storage/belt/holster/nukie(src)
+ new /obj/item/storage/belt/holster/nukie(src)
+ new /obj/item/clothing/suit/armor/vest(src)
+ new /obj/item/clothing/suit/armor/vest(src)
+ new /obj/item/clothing/suit/armor/vest(src)
+ new /obj/item/storage/belt/military(src)
+ new /obj/item/storage/belt/military(src)
+ new /obj/item/storage/belt/military(src)
+ new /obj/item/clothing/head/helmet(src)
+ new /obj/item/clothing/head/helmet(src)
+ new /obj/item/clothing/head/helmet(src)
+
+/obj/structure/closet/secure_closet/interdynefob/munitions_locker
+ anchored = 1;
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+ icon_door = "riot"
+ icon_state = "riot"
+ name = "armory munitions locker"
+
+/obj/structure/closet/secure_closet/interdynefob/munitions_locker/PopulateContents()
+ ..()
+
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/c35sol_pistol = 6,
+ /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 2,
+ /obj/item/ammo_box/c35sol = 2,
+ /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2,
+ /obj/item/ammo_box/c40sol = 2,
+ /obj/item/ammo_box/advanced/s12gauge = 2,
+ /obj/item/ammo_box/advanced/s12gauge/rubber = 2,
+ ),src)
diff --git a/modular_skyrat/modules/mapping/code/lowpressure.dm b/modular_nova/modules/mapping/code/lowpressure.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/lowpressure.dm
rename to modular_nova/modules/mapping/code/lowpressure.dm
diff --git a/modular_skyrat/modules/mapping/code/machinery.dm b/modular_nova/modules/mapping/code/machinery.dm
similarity index 92%
rename from modular_skyrat/modules/mapping/code/machinery.dm
rename to modular_nova/modules/mapping/code/machinery.dm
index 960dc2861d3..b3fe9b47ff8 100644
--- a/modular_skyrat/modules/mapping/code/machinery.dm
+++ b/modular_nova/modules/mapping/code/machinery.dm
@@ -3,7 +3,7 @@
/* ----------------- Computers ----------------- */
/obj/item/gps/computer/space //Subtype that runs pod computer code, with a texture to blend better with normal walls
- icon = 'modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi' //needs its own file for pixel size ;-;
+ icon = 'modular_nova/modules/mapping/icons/machinery/gps_computer.dmi' //needs its own file for pixel size ;-;
name = "gps computer"
icon_state = "pod_computer"
anchored = TRUE
diff --git a/modular_skyrat/modules/mapping/code/mapping_directionals.dm b/modular_nova/modules/mapping/code/mapping_directionals.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/mapping_directionals.dm
rename to modular_nova/modules/mapping/code/mapping_directionals.dm
diff --git a/modular_nova/modules/mapping/code/misc.dm b/modular_nova/modules/mapping/code/misc.dm
new file mode 100644
index 00000000000..b0e9e7bc34a
--- /dev/null
+++ b/modular_nova/modules/mapping/code/misc.dm
@@ -0,0 +1,57 @@
+/obj/item/melee/sabre/luna
+ name = "Luna"
+ desc = "Forged by a madwoman, in recognition of a time, a place - she thought almost real. Various etchings of moons are inscribed onto the surface, different phases marking different parts of the blade."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi'
+ lefthand_file = 'modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi'
+ icon_state = "luna"
+ inhand_icon_state = "luna"
+
+/datum/mod_theme/prototype/hauler
+ name = "Prototype: Hauler"
+ desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation"
+ inbuilt_modules = list()
+ charge_drain = DEFAULT_CHARGE_DRAIN * 3
+ siemens_coefficient = 0
+ slowdown_active = 1
+
+/obj/item/mod/control/pre_equipped/prototype/hauler
+ theme = /datum/mod_theme/prototype/hauler
+ req_access = list(ACCESS_TARKON)
+ applied_cell = /obj/item/stock_parts/cell/high
+ applied_modules = list(
+ /obj/item/mod/module/storage/large_capacity,
+ /obj/item/mod/module/welding,
+ /obj/item/mod/module/clamp,
+ /obj/item/mod/module/flashlight,
+ /obj/item/mod/module/tether,
+ )
+
+/obj/machinery/suit_storage_unit/industrial/hauler
+ mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler
+
+/obj/item/areaeditor/blueprints/tarkon
+ desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it."
+ name = "Tarkon Design Prints"
+
+/obj/item/mod/module/armor_booster/retractplates
+ name = "MOD retractive plates module"
+ desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility."
+ removable = TRUE
+ complexity = 1
+ speed_added = 0.25
+ armor_mod = /datum/armor/retractive_plates
+
+/datum/armor/retractive_plates
+ melee = 20
+ bullet = 25
+ laser = 15
+ energy = 20
+
+/obj/machinery/vending/security/noaccess
+ req_access = null
+
+/obj/structure/closet/secure_closet/medical2/unlocked/Initialize(mapload)
+ . = ..()
+ locked = FALSE
+ update_appearance()
diff --git a/modular_skyrat/modules/mapping/code/mob_spawns.dm b/modular_nova/modules/mapping/code/mob_spawns.dm
similarity index 99%
rename from modular_skyrat/modules/mapping/code/mob_spawns.dm
rename to modular_nova/modules/mapping/code/mob_spawns.dm
index f0290e7e994..702451c6ccb 100644
--- a/modular_skyrat/modules/mapping/code/mob_spawns.dm
+++ b/modular_nova/modules/mapping/code/mob_spawns.dm
@@ -335,7 +335,7 @@
id = /obj/item/card/id/away/hotel/manager
/datum/outfit/hotelstaff/security
- r_hand = /obj/item/gun/energy/laser/scatter/shotty // SKYRAT EDIT ADD - SPAWNS IN HAND INSTEAD OF ON MAP
+ r_hand = /obj/item/gun/energy/laser/scatter/shotty // NOVA EDIT ADD - SPAWNS IN HAND INSTEAD OF ON MAP
id = /obj/item/card/id/away/hotel/security
//Lost Space Truckers: Six people stranded in deep space aboard a cargo freighter. They must survive their marooning and cooperate.
@@ -604,7 +604,7 @@
//OBJECTS//
/obj/structure/showcase/machinery/oldpod/used
- icon = 'modular_skyrat/modules/cryosleep/icons/cryogenics.dmi'
+ icon = 'modular_nova/modules/cryosleep/icons/cryogenics.dmi'
icon_state = "cryopod-open"
//IDS//
diff --git a/modular_skyrat/modules/mapping/code/planet_turfs.dm b/modular_nova/modules/mapping/code/planet_turfs.dm
similarity index 97%
rename from modular_skyrat/modules/mapping/code/planet_turfs.dm
rename to modular_nova/modules/mapping/code/planet_turfs.dm
index dbbb2d645f5..b56e29865af 100644
--- a/modular_skyrat/modules/mapping/code/planet_turfs.dm
+++ b/modular_nova/modules/mapping/code/planet_turfs.dm
@@ -57,7 +57,7 @@
/obj/effect/overlay/snow
name = "snow"
- icon = 'modular_skyrat/modules/mapping/icons/dungeon.dmi'
+ icon = 'modular_nova/modules/mapping/icons/dungeon.dmi'
icon_state = "deep_snow"
density = 0
mouse_opacity = 0
@@ -131,7 +131,7 @@
*/
/turf/open/chasm/sandy //just a retexture of the other chasm. making this was nothing but painful.
- icon = 'modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi'
+ icon = 'modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi'
icon_state = "chasms-255" //No I'm not going to go change all the different icon names
base_icon_state = "chasms"
baseturfs = /turf/open/chasm/sandy
diff --git a/modular_skyrat/modules/mapping/code/pool.dm b/modular_nova/modules/mapping/code/pool.dm
similarity index 95%
rename from modular_skyrat/modules/mapping/code/pool.dm
rename to modular_nova/modules/mapping/code/pool.dm
index f50abbabe5a..d7cd79f1016 100644
--- a/modular_skyrat/modules/mapping/code/pool.dm
+++ b/modular_nova/modules/mapping/code/pool.dm
@@ -9,13 +9,12 @@
/obj/effect/overlay/water
name = "water"
- icon = 'modular_skyrat/modules/mapping/icons/unique/pool.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/pool.dmi'
icon_state = "bottom"
density = FALSE
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
anchored = TRUE
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
/obj/effect/overlay/water/top
icon_state = "top"
@@ -30,7 +29,7 @@
/turf/open/water/overlay
name = "shallow water"
desc = "A natural body of shallow water."
- icon = 'modular_skyrat/modules/mapping/icons/unique/pool.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/pool.dmi'
icon_state = "rocky"
baseturfs = /turf/open/water/overlay
initial_gas_mix = OPENTURF_DEFAULT_ATMOS
diff --git a/modular_skyrat/modules/mapping/code/radio.dm b/modular_nova/modules/mapping/code/radio.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/radio.dm
rename to modular_nova/modules/mapping/code/radio.dm
diff --git a/modular_skyrat/modules/mapping/code/shrapnel_mine.dm b/modular_nova/modules/mapping/code/shrapnel_mine.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/shrapnel_mine.dm
rename to modular_nova/modules/mapping/code/shrapnel_mine.dm
diff --git a/modular_skyrat/modules/mapping/code/shutters.dm b/modular_nova/modules/mapping/code/shutters.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/shutters.dm
rename to modular_nova/modules/mapping/code/shutters.dm
diff --git a/modular_skyrat/modules/mapping/code/shuttles.dm b/modular_nova/modules/mapping/code/shuttles.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/shuttles.dm
rename to modular_nova/modules/mapping/code/shuttles.dm
diff --git a/modular_skyrat/modules/mapping/code/space.dm b/modular_nova/modules/mapping/code/space.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/space.dm
rename to modular_nova/modules/mapping/code/space.dm
diff --git a/modular_skyrat/modules/mapping/code/space_hotel.dm b/modular_nova/modules/mapping/code/space_hotel.dm
similarity index 98%
rename from modular_skyrat/modules/mapping/code/space_hotel.dm
rename to modular_nova/modules/mapping/code/space_hotel.dm
index 429e7bf0c6a..fb0b7730682 100644
--- a/modular_skyrat/modules/mapping/code/space_hotel.dm
+++ b/modular_nova/modules/mapping/code/space_hotel.dm
@@ -104,7 +104,7 @@
deploy(user)
- playsound(src, 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg', 50, FALSE)
+ playsound(src, 'modular_nova/modules/aesthetics/airlock/sound/bolts_down.ogg', 50, FALSE)
balloon_alert(user, "deployment successful!")
diff --git a/modular_skyrat/modules/mapping/code/spaceship_items.dm b/modular_nova/modules/mapping/code/spaceship_items.dm
similarity index 87%
rename from modular_skyrat/modules/mapping/code/spaceship_items.dm
rename to modular_nova/modules/mapping/code/spaceship_items.dm
index d6c03401613..8136809e725 100644
--- a/modular_skyrat/modules/mapping/code/spaceship_items.dm
+++ b/modular_nova/modules/mapping/code/spaceship_items.dm
@@ -1,7 +1,7 @@
/obj/item/stack/sheet/spaceship
name = "spaceship plating"
desc = "A metal sheet made out of a titanium alloy, rivited for use in spaceship walls."
- icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi'
icon_state = "sheet-spaceship"
inhand_icon_state = "sheet-plastitaniumglass"
singular_name = "spaceship plate"
@@ -12,7 +12,7 @@
/obj/item/stack/sheet/spaceshipglass
name = "spaceship window plates"
desc = "A glass sheet made out of a titanium-silicate alloy, rivited for use in spaceship window frames."
- icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi'
icon_state = "sheet-spaceshipglass"
inhand_icon_state = "sheet-plastitaniumglass"
singular_name = "spaceship window plate"
diff --git a/modular_skyrat/modules/mapping/code/spaceship_turfs.dm b/modular_nova/modules/mapping/code/spaceship_turfs.dm
similarity index 93%
rename from modular_skyrat/modules/mapping/code/spaceship_turfs.dm
rename to modular_nova/modules/mapping/code/spaceship_turfs.dm
index 110cb84fe39..cef19636158 100644
--- a/modular_skyrat/modules/mapping/code/spaceship_turfs.dm
+++ b/modular_nova/modules/mapping/code/spaceship_turfs.dm
@@ -3,7 +3,7 @@
//Also make sure you properly var-edit everything hnngh
/turf/closed/wall/mineral/titanium/spaceship
- icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi'
icon_state = "ship_walls-0"
base_icon_state = "ship_walls"
sheet_type = /obj/item/stack/sheet/spaceship
@@ -47,7 +47,7 @@
/obj/structure/window/reinforced/shuttle/spaceship
name = "spaceship window"
desc = "A pressure-resistant spaceship window."
- icon = 'modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi'
+ icon = 'modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi'
icon_state = "pod_window-0"
base_icon_state = "pod_window"
glass_type = /obj/item/stack/sheet/spaceshipglass
diff --git a/modular_skyrat/modules/mapping/code/static_plaques.dm b/modular_nova/modules/mapping/code/static_plaques.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/static_plaques.dm
rename to modular_nova/modules/mapping/code/static_plaques.dm
diff --git a/modular_skyrat/modules/mapping/code/tarkon_atmos_control.dm b/modular_nova/modules/mapping/code/tarkon_atmos_control.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/tarkon_atmos_control.dm
rename to modular_nova/modules/mapping/code/tarkon_atmos_control.dm
diff --git a/modular_nova/modules/mapping/code/tools.dm b/modular_nova/modules/mapping/code/tools.dm
new file mode 100644
index 00000000000..cfa9916d834
--- /dev/null
+++ b/modular_nova/modules/mapping/code/tools.dm
@@ -0,0 +1,65 @@
+//WRENCHES//
+/obj/item/wrench/advanced
+ name = "advanced wrench"
+ desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently. It looks cobbled together."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ icon_state = "wrench"
+ usesound = 'sound/effects/empulse.ogg'
+ toolspeed = 0.2
+
+//WIRECUTTERS//
+/obj/item/wirecutters/advanced
+ name = "advanced wirecutters"
+ desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade. There's a sticker attached declaring that it needs updating from 'the latest samples'."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ icon_state = "cutters"
+ toolspeed = 0.2
+ random_color = FALSE
+
+//WELDING TOOLS//
+/obj/item/weldingtool/advanced
+ name = "advanced welding tool"
+ desc = "A modern, experimental welding tool combined with an alien welding tool's generation methods, it never runs out of fuel and works almost as fast."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ icon_state = "welder"
+ toolspeed = 0.2
+ light_system = NO_LIGHT_SUPPORT
+ light_range = 0
+ change_icons = 0
+
+/obj/item/weldingtool/advanced/process()
+ if(get_fuel() <= max_fuel)
+ reagents.add_reagent(/datum/reagent/fuel, 1)
+ ..()
+
+//SCREWDRIVERS//
+/obj/item/screwdriver/advanced
+ name = "advanced screwdriver"
+ desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing. There's a sticker attached declaring that it needs updating from 'the latest samples'."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ icon_state = "screwdriver_a"
+ inhand_icon_state = "screwdriver_nuke"
+ usesound = 'sound/items/pshoom.ogg'
+ toolspeed = 0.2
+ random_color = FALSE
+ greyscale_colors = null
+ greyscale_config = null
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+
+//CROWBAR//
+/obj/item/crowbar/advanced
+ name = "advanced crowbar"
+ desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ usesound = 'sound/weapons/sonic_jackhammer.ogg'
+ icon_state = "crowbar"
+ toolspeed = 0.2
+
+//MULTITOOLS//
+/obj/item/multitool/advanced
+ name = "advanced multitool"
+ desc = "The reproduction of an abductor's multitool, this multitool is a classy silver. There's a sticker attached declaring that it needs updating from 'the latest samples'."
+ icon = 'modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi'
+ icon_state = "multitool"
+ toolspeed = 0.2
diff --git a/modular_skyrat/modules/mapping/code/turf.dm b/modular_nova/modules/mapping/code/turf.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/code/turf.dm
rename to modular_nova/modules/mapping/code/turf.dm
diff --git a/modular_skyrat/modules/mapping/code/turf_decals.dm b/modular_nova/modules/mapping/code/turf_decals.dm
similarity index 97%
rename from modular_skyrat/modules/mapping/code/turf_decals.dm
rename to modular_nova/modules/mapping/code/turf_decals.dm
index 5dfa5f1f22f..879aaf203be 100644
--- a/modular_skyrat/modules/mapping/code/turf_decals.dm
+++ b/modular_nova/modules/mapping/code/turf_decals.dm
@@ -1,5 +1,5 @@
/obj/effect/turf_decal/skyrat_decals
- icon = 'modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi'
+ icon = 'modular_nova/modules/mapping/icons/turf/turf_decals.dmi'
icon_state = "bad_coder"
/obj/effect/decal/fakelattice/passthru //Why the hell did TG make it dense anyways
diff --git a/modular_skyrat/modules/mapping/code/vgdecals.dm b/modular_nova/modules/mapping/code/vgdecals.dm
similarity index 97%
rename from modular_skyrat/modules/mapping/code/vgdecals.dm
rename to modular_nova/modules/mapping/code/vgdecals.dm
index 0f3704207d7..9a7878511b8 100644
--- a/modular_skyrat/modules/mapping/code/vgdecals.dm
+++ b/modular_nova/modules/mapping/code/vgdecals.dm
@@ -5,7 +5,7 @@
// Change the 'color' variable on any white sprite to simply recolour it!
/obj/effect/turf_decal/vg_decals
- icon = 'modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi'
+ icon = 'modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi'
icon_state = "no"
// NUMBERS START
diff --git a/modular_nova/modules/mapping/code/wardrobes.dm b/modular_nova/modules/mapping/code/wardrobes.dm
new file mode 100644
index 00000000000..5328dfa0a94
--- /dev/null
+++ b/modular_nova/modules/mapping/code/wardrobes.dm
@@ -0,0 +1,100 @@
+/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user)
+ return (I.type in products)
+
+/obj/machinery/vending/wardrobe/syndie_wardrobe
+ name = "\improper SynDrobe"
+ desc = "A vending machine for our boys in red, now in brand new crimson!"
+ icon = 'modular_nova/modules/mapping/icons/obj/vending.dmi'
+ icon_state = "syndrobe"
+ product_ads = "Put a Donk on it!;Aim, Style, Shoot!;Brigged for wearing the best!"
+ vend_reply = "Thank you for using the SynDrobe!"
+ light_mask = ""
+ products = list(
+ /obj/item/clothing/under/syndicate/skyrat/tactical = 3,
+ /obj/item/clothing/under/syndicate/skyrat/tactical/skirt = 3,
+ /obj/item/clothing/under/syndicate/skyrat/overalls = 3,
+ /obj/item/clothing/under/syndicate/skyrat/overalls/skirt = 3,
+ /obj/item/clothing/under/syndicate/bloodred/sleepytime = 3,
+ /obj/item/clothing/under/syndicate/sniper = 3,
+ /obj/item/clothing/under/syndicate/camo = 3,
+ /obj/item/clothing/under/syndicate/combat = 3,
+ /obj/item/clothing/shoes/combat = 3,
+ /obj/item/clothing/mask/gas/syndicate = 3,
+ /obj/item/clothing/mask/gas/sechailer/syndicate = 3,
+ /obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate = 5,
+ /obj/item/clothing/head/soft/sec/syndicate = 3,
+ /obj/item/clothing/head/beret/sec/syndicate = 3,
+ )
+ contraband = list(
+ /obj/item/knife/combat = 1,
+ /obj/item/clothing/under/syndicate/coldres = 2,
+ /obj/item/clothing/shoes/combat/coldres = 2,
+ )
+ premium = list(
+ /obj/item/knife/combat/survival = 1,
+ /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 5,
+ /obj/item/clothing/gloves/combat = 3,
+ /obj/item/clothing/under/syndicate/skyrat/maid = 5,
+ /obj/item/clothing/gloves/combat/maid = 5,
+ /obj/item/clothing/head/costume/maidheadband/syndicate = 5,
+ /obj/item/storage/box/nif_ghost_box/ghost_role = 10,
+ )
+
+ refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe
+ light_color = COLOR_MOSTLY_PURE_RED
+
+/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/storage/box/nif_ghost_box/ghost_role,
+ )
+
+/obj/item/vending_refill/wardrobe/syndie_wardrobe
+ machine_name = "SynDrobe"
+
+/// This is essentially just a copy paste of the holy beacon, but with all options unlocked regardless of the global religion
+/obj/item/choice_beacon/unholy
+ name = "armaments beacon"
+ desc = "Contains a set of armaments for those who would unlock their power."
+
+/obj/item/choice_beacon/unholy/open_options_menu(mob/living/user)
+ var/list/armament_names_to_images = list()
+ var/list/armament_names_to_typepaths = list()
+ for(var/obj/item/storage/box/holy/holy_box as anything in typesof(/obj/item/storage/box/holy))
+ var/box_name = initial(holy_box.name)
+ var/obj/item/preview_item = initial(holy_box.typepath_for_preview)
+ armament_names_to_typepaths[box_name] = holy_box
+ armament_names_to_images[box_name] = image(icon = initial(preview_item.icon), icon_state = initial(preview_item.icon_state))
+
+ var/chosen_name = show_radial_menu(
+ user = user,
+ anchor = src,
+ choices = armament_names_to_images,
+ custom_check = CALLBACK(src, PROC_REF(can_use_beacon), user),
+ require_near = TRUE,
+ )
+ if(!can_use_beacon(user))
+ return
+ var/chosen_type = armament_names_to_typepaths[chosen_name]
+ if(!ispath(chosen_type, /obj/item/storage/box/holy))
+ return
+
+ consume_use(chosen_type, user)
+
+/obj/item/choice_beacon/unholy/spawn_option(obj/choice_path, mob/living/user)
+ playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE)
+ return ..()
+
+/// Just take out and replace the holy beacon with our 'unholy' beacon
+/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/Initialize(mapload)
+ . = ..()
+ for(var/datum/data/vending_product/record in product_records)
+ if(record.product_path == /obj/item/choice_beacon/holy)
+ record.product_path = /obj/item/choice_beacon/unholy
+ record.amount = 3
+
+ products.Remove(/obj/item/choice_beacon/holy)
+ products.Add(list(
+ /obj/item/choice_beacon/unholy = 3,)
+ )
+
+ return
diff --git a/modular_skyrat/modules/mapping/icons/areas/areas_station.dmi b/modular_nova/modules/mapping/icons/areas/areas_station.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/areas/areas_station.dmi
rename to modular_nova/modules/mapping/icons/areas/areas_station.dmi
diff --git a/modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi b/modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/machinery/automatic_respawner.dmi
rename to modular_nova/modules/mapping/icons/machinery/automatic_respawner.dmi
diff --git a/modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi b/modular_nova/modules/mapping/icons/machinery/gps_computer.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/machinery/gps_computer.dmi
rename to modular_nova/modules/mapping/icons/machinery/gps_computer.dmi
diff --git a/modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi b/modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi
rename to modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi
diff --git a/modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi b/modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi
rename to modular_nova/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/clothing/hats.dmi b/modular_nova/modules/mapping/icons/obj/clothing/hats.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/clothing/hats.dmi
rename to modular_nova/modules/mapping/icons/obj/clothing/hats.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/clothing/under/captain.dmi b/modular_nova/modules/mapping/icons/obj/clothing/under/captain.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/clothing/under/captain.dmi
rename to modular_nova/modules/mapping/icons/obj/clothing/under/captain.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/fluff.dmi b/modular_nova/modules/mapping/icons/obj/fluff.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/fluff.dmi
rename to modular_nova/modules/mapping/icons/obj/fluff.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi b/modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi
rename to modular_nova/modules/mapping/icons/obj/items/advancedtools.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi b/modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi
rename to modular_nova/modules/mapping/icons/obj/items/items_and_weapons.dmi
diff --git a/modular_skyrat/modules/mapping/icons/obj/vending.dmi b/modular_nova/modules/mapping/icons/obj/vending.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/obj/vending.dmi
rename to modular_nova/modules/mapping/icons/obj/vending.dmi
diff --git a/modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi b/modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/turf/decals/vgstation_decals.dmi
rename to modular_nova/modules/mapping/icons/turf/decals/vgstation_decals.dmi
diff --git a/modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi b/modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/turf/open/sandychasm.dmi
rename to modular_nova/modules/mapping/icons/turf/open/sandychasm.dmi
diff --git a/modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi b/modular_nova/modules/mapping/icons/turf/turf_decals.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/turf/turf_decals.dmi
rename to modular_nova/modules/mapping/icons/turf/turf_decals.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/dungeon.dmi b/modular_nova/modules/mapping/icons/unique/dungeon.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/dungeon.dmi
rename to modular_nova/modules/mapping/icons/unique/dungeon.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/furniture.dmi b/modular_nova/modules/mapping/icons/unique/furniture.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/furniture.dmi
rename to modular_nova/modules/mapping/icons/unique/furniture.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/pool.dmi b/modular_nova/modules/mapping/icons/unique/pool.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/pool.dmi
rename to modular_nova/modules/mapping/icons/unique/pool.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipstacks.dmi
rename to modular_nova/modules/mapping/icons/unique/spaceships/shipstacks.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipwalls.dmi
rename to modular_nova/modules/mapping/icons/unique/spaceships/shipwalls.dmi
diff --git a/modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi b/modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi
similarity index 100%
rename from modular_skyrat/modules/mapping/icons/unique/spaceships/shipwindows.dmi
rename to modular_nova/modules/mapping/icons/unique/spaceships/shipwindows.dmi
diff --git a/modular_skyrat/modules/mapping/readme.md b/modular_nova/modules/mapping/readme.md
similarity index 100%
rename from modular_skyrat/modules/mapping/readme.md
rename to modular_nova/modules/mapping/readme.md
diff --git a/modular_skyrat/modules/mapping/sounds/MachineDeath.ogg b/modular_nova/modules/mapping/sounds/MachineDeath.ogg
similarity index 100%
rename from modular_skyrat/modules/mapping/sounds/MachineDeath.ogg
rename to modular_nova/modules/mapping/sounds/MachineDeath.ogg
diff --git a/modular_skyrat/modules/mapping/sounds/quest_succeeded.ogg b/modular_nova/modules/mapping/sounds/quest_succeeded.ogg
similarity index 100%
rename from modular_skyrat/modules/mapping/sounds/quest_succeeded.ogg
rename to modular_nova/modules/mapping/sounds/quest_succeeded.ogg
diff --git a/modular_skyrat/modules/mapping/voidraptor/code/areas.dm b/modular_nova/modules/mapping/voidraptor/code/areas.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/voidraptor/code/areas.dm
rename to modular_nova/modules/mapping/voidraptor/code/areas.dm
diff --git a/modular_nova/modules/mapping/voidraptor/code/clothing.dm b/modular_nova/modules/mapping/voidraptor/code/clothing.dm
new file mode 100644
index 00000000000..200664b8b70
--- /dev/null
+++ b/modular_nova/modules/mapping/voidraptor/code/clothing.dm
@@ -0,0 +1,17 @@
+/obj/item/storage/backpack/duffelbag/science/robo/surgery
+ name = "robotics surgical duffelbag"
+ desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. This one has a tag implying it came stocked with surgical tools."
+
+/obj/item/storage/backpack/duffelbag/science/robo/surgery/PopulateContents()
+ new /obj/item/scalpel(src)
+ new /obj/item/hemostat(src)
+ new /obj/item/retractor(src)
+ new /obj/item/circular_saw(src)
+ new /obj/item/surgicaldrill(src)
+ new /obj/item/cautery(src)
+ new /obj/item/bonesetter(src)
+ new /obj/item/surgical_drapes(src)
+ new /obj/item/clothing/suit/toggle/labcoat/hospitalgown(src)
+ new /obj/item/clothing/mask/surgical(src)
+ new /obj/item/razor(src)
+ new /obj/item/blood_filter(src)
diff --git a/modular_nova/modules/mapping/voidraptor/code/mob.dm b/modular_nova/modules/mapping/voidraptor/code/mob.dm
new file mode 100644
index 00000000000..33af3c2d36e
--- /dev/null
+++ b/modular_nova/modules/mapping/voidraptor/code/mob.dm
@@ -0,0 +1,78 @@
+/mob/living/basic/lizard/tegu
+ name = "tegu"
+ desc = "That's a tegu."
+ icon = 'modular_nova/master_files/icons/mob/pets.dmi'
+ icon_state = "tegu"
+ icon_living = "tegu"
+ icon_dead = "tegu_dead"
+ health = 20
+ maxHealth = 20
+ melee_damage_lower = 16 //They do have a nasty bite
+ melee_damage_upper = 16
+ pass_flags = PASSTABLE
+
+/mob/living/basic/lizard/tegu/gus
+ name = "Gus"
+ real_name = "Gus"
+ desc = "The Research Department's beloved pet tegu."
+ gender = MALE
+ gold_core_spawnable = NO_SPAWN
+
+/mob/living/basic/crab/shuffle
+ name = "Shuffle"
+ real_name = "Shuffle"
+ desc = "Oh no, it's him!"
+ color = "#ff0000"
+ gender = MALE
+ gold_core_spawnable = NO_SPAWN
+
+/mob/living/basic/crab/shuffle/Initialize(mapload)
+ . = ..()
+ update_transform(0.5)
+
+/mob/living/basic/carp/mega/shorki
+ name = "Shorki"
+ desc = "A not so ferocious, fang bearing creature that resembles a shark. This one seems a little big for its tank."
+ faction = list(FACTION_NEUTRAL)
+ gender = MALE
+ gold_core_spawnable = NO_SPAWN
+ ai_controller = /datum/ai_controller/basic_controller/carp/pet
+
+/mob/living/basic/carp/mega/shorki/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/ai_retaliate)
+ AddElement(/datum/element/pet_bonus, "bloops happily!")
+ name = initial(name)
+ real_name = initial(name)
+
+/mob/living/simple_animal/pet/gondola/funky
+ name = "Funky"
+ real_name = "Funky"
+ desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable. This one seems a little skinny and attached to the Theater."
+ loot = list(/obj/effect/decal/cleanable/blood/gibs)
+
+/mob/living/basic/pet/dog/dobermann/walter
+ name = "Walter"
+ real_name = "Walter"
+ desc = "It's Walter, he bites criminals just as well as he bites toddlers."
+
+/mob/living/basic/rabbit/daisy
+ name = "Daisy"
+ real_name = "Daisy"
+ desc = "The Curator's pet bnuuy."
+ gender = FEMALE
+
+/mob/living/basic/bear/wojtek
+ name = "Wojtek"
+ real_name = "Wojtek"
+ desc = "The bearer of Bluespace Artillery."
+ faction = list(FACTION_NEUTRAL)
+ gender = MALE
+
+/mob/living/basic/chicken/teshari
+ name = "Teshari"
+ real_name = "Teshari"
+ desc = "A timeless classic."
+ unsuitable_atmos_damage = 0
+ minimum_survivable_temperature = 0
+ maximum_survivable_temperature = 30000
diff --git a/modular_skyrat/modules/mapping/voidraptor/code/shuttles.dm b/modular_nova/modules/mapping/voidraptor/code/shuttles.dm
similarity index 100%
rename from modular_skyrat/modules/mapping/voidraptor/code/shuttles.dm
rename to modular_nova/modules/mapping/voidraptor/code/shuttles.dm
diff --git a/modular_skyrat/modules/mapping/voidraptor/readme.md b/modular_nova/modules/mapping/voidraptor/readme.md
similarity index 100%
rename from modular_skyrat/modules/mapping/voidraptor/readme.md
rename to modular_nova/modules/mapping/voidraptor/readme.md
diff --git a/modular_nova/modules/marines/code/gear.dm b/modular_nova/modules/marines/code/gear.dm
new file mode 100644
index 00000000000..5b68607d600
--- /dev/null
+++ b/modular_nova/modules/marines/code/gear.dm
@@ -0,0 +1,134 @@
+/obj/item/gun/ballistic/automatic/ar/modular/m44a
+ name = "\improper NT M44A Pulse Rifle"
+ desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package."
+ icon_state = "m44a"
+ inhand_icon_state = "m44a"
+ icon = 'modular_nova/modules/marines/icons/m44a.dmi'
+ righthand_file = 'modular_nova/modules/marines/icons/m44a_r.dmi'
+ lefthand_file = 'modular_nova/modules/marines/icons/m44a_l.dmi'
+ fire_sound = 'modular_nova/modules/marines/sound/m44a.ogg'
+ fire_delay = 1
+ burst_size = 3
+ spread = 6
+ pin = /obj/item/firing_pin/implant/mindshield
+ can_suppress = FALSE
+ can_bayonet = FALSE
+ mag_display = TRUE
+ mag_display_ammo = FALSE
+ accepted_magazine_type = /obj/item/ammo_box/magazine/m44a
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = ITEM_SLOT_BELT
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/Initialize(mapload)
+ . = ..()
+
+ AddComponent(/datum/component/automatic_fire, fire_delay)
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN)
+
+/obj/item/ammo_box/magazine/m44a
+ name = "m44a magazine (.300 compressed)"
+ desc = "This magazine uses a bluespace compression chamber to hold a maximum of ninety-nine .300 caliber caseless rounds for the M44A pulse rifle."
+ icon = 'modular_nova/modules/marines/icons/m44a.dmi'
+ icon_state = "300compressed"
+ max_ammo = 99
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+ ammo_type = /obj/item/ammo_casing/c300
+ caliber = "300comp"
+
+/obj/item/ammo_casing/c300
+ name = ".300 caseless round"
+ desc = "A .300 caseless round for proprietary Nanotrasen firearms."
+ caliber = "300comp"
+ projectile_type = /obj/projectile/bullet/a300
+
+/obj/item/ammo_casing/c300/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/caseless)
+
+/obj/projectile/bullet/a300
+ name = ".300 caseless bullet"
+ damage = 13
+ armour_penetration = 30 //gonna actually kill the brit that made this var require a U in armor
+ embedding = null
+ shrapnel_type = null
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped
+ name = "\improper NT M44AS Pulse Rifle"
+ desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a long-range scope."
+ icon_state = "m44a_s"
+ inhand_icon_state = "m44a_s"
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 2.2)
+
+/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg
+ name = "\improper M2 auto-shotgun underbarrel"
+ desc = "This shouldn't be heeere!"
+ can_suppress = FALSE
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/as2/ubsg
+
+/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/give_gun_safeties()
+ return
+
+/obj/item/ammo_box/magazine/internal/shot/as2/ubsg
+ max_ammo = 3
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun
+ name = "\improper NT M44ASG Pulse Rifle"
+ desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a two-round semi-automatic underbarrel 12 gauge shotgun."
+ icon_state = "m44a_sg"
+ inhand_icon_state = "m44a_sg"
+ /// Reference to the underbarrel shotgun
+ var/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/underbarrel
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Initialize(mapload)
+ . = ..()
+ underbarrel = new /obj/item/gun/ballistic/shotgun/automatic/as2/ubsg(src)
+ update_appearance()
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Destroy()
+ QDEL_NULL(underbarrel)
+ return ..()
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/afterattack_secondary(atom/target, mob/living/user, flag, params)
+ underbarrel.afterattack(target, user, flag, params)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/attackby(obj/item/attacking_item, mob/user, params)
+ if(!istype(attacking_item, /obj/item/ammo_casing))
+ ..()
+ if(istype(attacking_item, underbarrel.magazine.ammo_type))
+ underbarrel.attack_self(user)
+ underbarrel.attackby(attacking_item, user, params)
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher
+ name = "\improper NT M44AGL Pulse Rifle"
+ desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with an underbarrel grenade launcher, and a red dot scope to help align it. Compensating for something?"
+ icon_state = "m44a_gl"
+ inhand_icon_state = "m44a_gl"
+ /// Underbarrel grenade launcher reference
+ var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Initialize(mapload)
+ . = ..()
+ underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
+ update_appearance()
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Destroy()
+ QDEL_NULL(underbarrel)
+ return ..()
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/afterattack_secondary(atom/target, mob/living/user, flag, params)
+ underbarrel.afterattack(target, user, flag, params)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/attackby(obj/item/attacking_item, mob/user, params)
+ if(!istype(attacking_item, /obj/item/ammo_casing))
+ ..()
+ if(istype(attacking_item, underbarrel.magazine.ammo_type))
+ underbarrel.attack_self(user)
+ underbarrel.attackby(attacking_item, user, params)
diff --git a/modular_skyrat/modules/marines/code/mod.dm b/modular_nova/modules/marines/code/mod.dm
similarity index 96%
rename from modular_skyrat/modules/marines/code/mod.dm
rename to modular_nova/modules/marines/code/mod.dm
index 33d432ca198..b10a66cd8e9 100644
--- a/modular_skyrat/modules/marines/code/mod.dm
+++ b/modular_nova/modules/marines/code/mod.dm
@@ -30,8 +30,8 @@
)
skins = list(
"marine" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/mod.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/marines/icons/wornmod.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/marines/icons/mod.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/marines/icons/wornmod.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = NECK_LAYER,
UNSEALED_CLOTHING = SNUG_FIT,
diff --git a/modular_skyrat/modules/marines/code/modsuit_modules.dm b/modular_nova/modules/marines/code/modsuit_modules.dm
similarity index 89%
rename from modular_skyrat/modules/marines/code/modsuit_modules.dm
rename to modular_nova/modules/marines/code/modsuit_modules.dm
index 132caf132e5..1ad2612370c 100644
--- a/modular_skyrat/modules/marines/code/modsuit_modules.dm
+++ b/modular_nova/modules/marines/code/modsuit_modules.dm
@@ -6,8 +6,8 @@
and the gun itself fires at a blistering rate of fire, capable of suppressing enemies \
without hurting teammates thanks to IFF technology."
icon_state = "smartgun"
- icon = 'modular_skyrat/modules/marines/icons/items/module.dmi'
- overlay_icon_file = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi'
+ icon = 'modular_nova/modules/marines/icons/items/module.dmi'
+ overlay_icon_file = 'modular_nova/modules/marines/icons/mobs/mod_modules.dmi'
module_type = MODULE_ACTIVE
complexity = 3
active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3
diff --git a/modular_skyrat/modules/marines/code/smartgun.dm b/modular_nova/modules/marines/code/smartgun.dm
similarity index 92%
rename from modular_skyrat/modules/marines/code/smartgun.dm
rename to modular_nova/modules/marines/code/smartgun.dm
index 549e966ad86..a66e742ff57 100644
--- a/modular_skyrat/modules/marines/code/smartgun.dm
+++ b/modular_nova/modules/marines/code/smartgun.dm
@@ -2,14 +2,14 @@
name = "\improper M63A4 \"Smartgun\""
desc = "A weapon with a blistering rate of fire, so heavy that it needs to be mounted on a modsuit to wield. \
It's equipped with IFF technology, allowing the bullets to intentionally miss friendly targets."
- icon = 'modular_skyrat/modules/marines/icons/items/guns.dmi'
- lefthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_l.dmi'
- righthand_file = 'modular_skyrat/modules/marines/icons/mobs/guns_r.dmi'
- worn_icon = 'modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi'
+ icon = 'modular_nova/modules/marines/icons/items/guns.dmi'
+ lefthand_file = 'modular_nova/modules/marines/icons/mobs/guns_l.dmi'
+ righthand_file = 'modular_nova/modules/marines/icons/mobs/guns_r.dmi'
+ worn_icon = 'modular_nova/modules/marines/icons/mobs/mod_modules.dmi'
icon_state = "smartgun"
worn_icon_state = "module_smartgun_off" // just in case. You shouldn't be able to do this, though
inhand_icon_state = "smartgun"
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg'
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg'
rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
fire_sound_volume = 70
@@ -92,7 +92,7 @@
/obj/item/ammo_box/magazine/smartgun_drum
name = "smartgun drum (10x28mm caseless)"
- icon = 'modular_skyrat/modules/marines/icons/items/ammo.dmi'
+ icon = 'modular_nova/modules/marines/icons/items/ammo.dmi'
icon_state = "smartgun_drum"
ammo_type = /obj/item/ammo_casing/smart/a10x28
caliber = "a10x28"
diff --git a/modular_skyrat/modules/marines/icons/items/ammo.dmi b/modular_nova/modules/marines/icons/items/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/items/ammo.dmi
rename to modular_nova/modules/marines/icons/items/ammo.dmi
diff --git a/modular_skyrat/modules/marines/icons/items/guns.dmi b/modular_nova/modules/marines/icons/items/guns.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/items/guns.dmi
rename to modular_nova/modules/marines/icons/items/guns.dmi
diff --git a/modular_skyrat/modules/marines/icons/items/module.dmi b/modular_nova/modules/marines/icons/items/module.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/items/module.dmi
rename to modular_nova/modules/marines/icons/items/module.dmi
diff --git a/modular_skyrat/modules/marines/icons/m44a.dmi b/modular_nova/modules/marines/icons/m44a.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/m44a.dmi
rename to modular_nova/modules/marines/icons/m44a.dmi
diff --git a/modular_skyrat/modules/marines/icons/m44a_l.dmi b/modular_nova/modules/marines/icons/m44a_l.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/m44a_l.dmi
rename to modular_nova/modules/marines/icons/m44a_l.dmi
diff --git a/modular_skyrat/modules/marines/icons/m44a_r.dmi b/modular_nova/modules/marines/icons/m44a_r.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/m44a_r.dmi
rename to modular_nova/modules/marines/icons/m44a_r.dmi
diff --git a/modular_skyrat/modules/marines/icons/mobs/guns_l.dmi b/modular_nova/modules/marines/icons/mobs/guns_l.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/mobs/guns_l.dmi
rename to modular_nova/modules/marines/icons/mobs/guns_l.dmi
diff --git a/modular_skyrat/modules/marines/icons/mobs/guns_r.dmi b/modular_nova/modules/marines/icons/mobs/guns_r.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/mobs/guns_r.dmi
rename to modular_nova/modules/marines/icons/mobs/guns_r.dmi
diff --git a/modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi b/modular_nova/modules/marines/icons/mobs/mod_modules.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/mobs/mod_modules.dmi
rename to modular_nova/modules/marines/icons/mobs/mod_modules.dmi
diff --git a/modular_skyrat/modules/marines/icons/mod.dmi b/modular_nova/modules/marines/icons/mod.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/mod.dmi
rename to modular_nova/modules/marines/icons/mod.dmi
diff --git a/modular_skyrat/modules/marines/icons/smartgun.dmi b/modular_nova/modules/marines/icons/smartgun.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/smartgun.dmi
rename to modular_nova/modules/marines/icons/smartgun.dmi
diff --git a/modular_skyrat/modules/marines/icons/smartgun_back.dmi b/modular_nova/modules/marines/icons/smartgun_back.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/smartgun_back.dmi
rename to modular_nova/modules/marines/icons/smartgun_back.dmi
diff --git a/modular_skyrat/modules/marines/icons/smartgun_l.dmi b/modular_nova/modules/marines/icons/smartgun_l.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/smartgun_l.dmi
rename to modular_nova/modules/marines/icons/smartgun_l.dmi
diff --git a/modular_skyrat/modules/marines/icons/smartgun_module.dmi b/modular_nova/modules/marines/icons/smartgun_module.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/smartgun_module.dmi
rename to modular_nova/modules/marines/icons/smartgun_module.dmi
diff --git a/modular_skyrat/modules/marines/icons/smartgun_r.dmi b/modular_nova/modules/marines/icons/smartgun_r.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/smartgun_r.dmi
rename to modular_nova/modules/marines/icons/smartgun_r.dmi
diff --git a/modular_skyrat/modules/marines/icons/wornmod.dmi b/modular_nova/modules/marines/icons/wornmod.dmi
similarity index 100%
rename from modular_skyrat/modules/marines/icons/wornmod.dmi
rename to modular_nova/modules/marines/icons/wornmod.dmi
diff --git a/modular_skyrat/modules/marines/sound/m44a.ogg b/modular_nova/modules/marines/sound/m44a.ogg
similarity index 100%
rename from modular_skyrat/modules/marines/sound/m44a.ogg
rename to modular_nova/modules/marines/sound/m44a.ogg
diff --git a/modular_skyrat/modules/medical/attributions.txt b/modular_nova/modules/medical/attributions.txt
similarity index 100%
rename from modular_skyrat/modules/medical/attributions.txt
rename to modular_nova/modules/medical/attributions.txt
diff --git a/modular_skyrat/modules/medical/code/anesthetic_machine.dm b/modular_nova/modules/medical/code/anesthetic_machine.dm
similarity index 99%
rename from modular_skyrat/modules/medical/code/anesthetic_machine.dm
rename to modular_nova/modules/medical/code/anesthetic_machine.dm
index 69b1bab7b70..c288004965c 100644
--- a/modular_skyrat/modules/medical/code/anesthetic_machine.dm
+++ b/modular_nova/modules/medical/code/anesthetic_machine.dm
@@ -3,7 +3,7 @@
/obj/machinery/anesthetic_machine
name = "portable anesthetic tank stand"
desc = "A stand on wheels, similar to an IV drip, that can hold a canister of anesthetic along with a gas mask."
- icon = 'modular_skyrat/modules/medical/icons/obj/machinery.dmi'
+ icon = 'modular_nova/modules/medical/icons/obj/machinery.dmi'
icon_state = "breath_machine"
anchored = FALSE
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
diff --git a/modular_skyrat/modules/medical/code/carbon_examine.dm b/modular_nova/modules/medical/code/carbon_examine.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/carbon_examine.dm
rename to modular_nova/modules/medical/code/carbon_examine.dm
diff --git a/modular_nova/modules/medical/code/carbon_update_icons.dm b/modular_nova/modules/medical/code/carbon_update_icons.dm
new file mode 100644
index 00000000000..6cf93bc452e
--- /dev/null
+++ b/modular_nova/modules/medical/code/carbon_update_icons.dm
@@ -0,0 +1,14 @@
+/mob/living/carbon/proc/update_bandage_overlays()
+ remove_overlay(BANDAGE_LAYER)
+
+ var/mutable_appearance/overlays = mutable_appearance('modular_nova/modules/medical/icons/on_limb_overlays.dmi', "", -BANDAGE_LAYER)
+ overlays_standing[BANDAGE_LAYER] = overlays
+
+ for(var/b in bodyparts)
+ var/obj/item/bodypart/BP = b
+ var/obj/item/stack/medical/gauze/our_gauze = BP.current_gauze
+ if (!our_gauze)
+ continue
+ overlays.add_overlay(our_gauze.get_overlay_prefix())
+
+ apply_overlay(BANDAGE_LAYER)
diff --git a/modular_skyrat/modules/medical/code/cargo/packs.dm b/modular_nova/modules/medical/code/cargo/packs.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/cargo/packs.dm
rename to modular_nova/modules/medical/code/cargo/packs.dm
diff --git a/modular_skyrat/modules/medical/code/grasp.dm b/modular_nova/modules/medical/code/grasp.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/grasp.dm
rename to modular_nova/modules/medical/code/grasp.dm
diff --git a/modular_skyrat/modules/medical/code/health_analyzer.dm b/modular_nova/modules/medical/code/health_analyzer.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/health_analyzer.dm
rename to modular_nova/modules/medical/code/health_analyzer.dm
diff --git a/modular_skyrat/modules/medical/code/medkit.dm b/modular_nova/modules/medical/code/medkit.dm
similarity index 96%
rename from modular_skyrat/modules/medical/code/medkit.dm
rename to modular_nova/modules/medical/code/medkit.dm
index 8ea40ae54bd..cf2dccd3f39 100644
--- a/modular_skyrat/modules/medical/code/medkit.dm
+++ b/modular_nova/modules/medical/code/medkit.dm
@@ -1,10 +1,10 @@
/obj/item/storage/backpack/duffelbag/synth_treatment_kit
name = "synthetic treatment kit"
desc = "A \"surgical\" duffel bag containing everything you need to treat the worst and best of inorganic wounds."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
+ lefthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
+ righthand_file = 'modular_nova/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
icon_state = "duffel_robo"
inhand_icon_state = "duffel_robo"
diff --git a/modular_skyrat/modules/medical/code/smartdarts.dm b/modular_nova/modules/medical/code/smartdarts.dm
similarity index 97%
rename from modular_skyrat/modules/medical/code/smartdarts.dm
rename to modular_nova/modules/medical/code/smartdarts.dm
index 326f8382f41..6c658334bf1 100644
--- a/modular_skyrat/modules/medical/code/smartdarts.dm
+++ b/modular_nova/modules/medical/code/smartdarts.dm
@@ -3,7 +3,7 @@
name = "SmartDart"
desc = "Allows the user to safely inject chemicals at a range without harming the patient."
volume = 10
- icon = 'modular_skyrat/modules/medical/icons/obj/smartdarts.dmi'
+ icon = 'modular_nova/modules/medical/icons/obj/smartdarts.dmi'
icon_state = "dart_0"
possible_transfer_amounts = list(1, 2, 5, 10)
base_icon_state = "dart"
@@ -44,7 +44,7 @@
name = "medical SmartDart gun"
desc = "An adjusted version of the medical syringe gun that only allows SmartDarts to be chambered."
w_class = WEIGHT_CLASS_NORMAL //I might need to look into changing this later depending on feedback
- icon = 'modular_skyrat/modules/medical/icons/obj/dartguns.dmi'
+ icon = 'modular_nova/modules/medical/icons/obj/dartguns.dmi'
icon_state = "smartdartgun"
worn_icon_state = "medicalsyringegun"
item_flags = null
diff --git a/modular_skyrat/modules/medical/code/sprays.dm b/modular_nova/modules/medical/code/sprays.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/sprays.dm
rename to modular_nova/modules/medical/code/sprays.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/_wounds.dm b/modular_nova/modules/medical/code/wounds/_wounds.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/_wounds.dm
rename to modular_nova/modules/medical/code/wounds/_wounds.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/bleed.dm b/modular_nova/modules/medical/code/wounds/bleed.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/bleed.dm
rename to modular_nova/modules/medical/code/wounds/bleed.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/medical.dm b/modular_nova/modules/medical/code/wounds/medical.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/medical.dm
rename to modular_nova/modules/medical/code/wounds/medical.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/muscle.dm b/modular_nova/modules/medical/code/wounds/muscle.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/muscle.dm
rename to modular_nova/modules/medical/code/wounds/muscle.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm
rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm
rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm
rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm
rename to modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/blunt/secures_internals.dm
rename to modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_burns.dm
rename to modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_muscle.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_muscle.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_muscle.dm
rename to modular_nova/modules/medical/code/wounds/synth/robotic_muscle.dm
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm
similarity index 95%
rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm
rename to modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm
index b7e4f259e5d..09cc878afd4 100644
--- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_pierce.dm
+++ b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm
@@ -21,7 +21,7 @@
treat_text = "Replacing of damaged wiring, though repairs via wirecutting instruments or sutures may suffice, albeit at limited efficiency. In case of emergency, \
subject may be subjected to high temperatures to allow solder to reset."
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T1.ogg'
severity = WOUND_SEVERITY_MODERATE
@@ -64,7 +64,7 @@
examine_desc = "is shuddering significantly, its servos briefly giving way in a rythmic pattern"
treat_text = "Containment of damaged wiring via gauze, then application of fresh wiring/sutures, or resetting of displaced wiring via wirecutter/retractor."
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T2.ogg'
severity = WOUND_SEVERITY_SEVERE
@@ -111,7 +111,7 @@
severity = WOUND_SEVERITY_CRITICAL
wound_flags = (ACCEPTS_GAUZE|MANGLES_EXTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY)
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T3.ogg'
sound_volume = 30
diff --git a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm
similarity index 99%
rename from modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm
rename to modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm
index 2d20b0edbb2..aae397f366d 100644
--- a/modular_skyrat/modules/medical/code/wounds/synth/robotic_slash.dm
+++ b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm
@@ -490,7 +490,7 @@
treat_text = "Replacing of damaged wiring, though repairs via wirecutting instruments or sutures may suffice, albeit at limited efficiency. In case of emergency, \
subject may be subjected to high temperatures to allow solder to reset."
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T1.ogg'
severity = WOUND_SEVERITY_MODERATE
@@ -533,7 +533,7 @@
examine_desc = "has multiple severed wires visible to the outside"
treat_text = "Containment of damaged wiring via gauze, then application of fresh wiring/sutures, or resetting of displaced wiring via wirecutter/retractor."
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T2.ogg'
severity = WOUND_SEVERITY_SEVERE
@@ -580,7 +580,7 @@
severity = WOUND_SEVERITY_CRITICAL
wound_flags = (ACCEPTS_GAUZE|MANGLES_EXTERIOR|CAN_BE_GRASPED|SPLINT_OVERLAY)
- sound_effect = 'modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg'
+ sound_effect = 'modular_nova/modules/medical/sound/robotic_slash_T3.ogg'
sound_volume = 30
diff --git a/modular_skyrat/modules/medical/code/wounds/wound_effects.dm b/modular_nova/modules/medical/code/wounds/wound_effects.dm
similarity index 100%
rename from modular_skyrat/modules/medical/code/wounds/wound_effects.dm
rename to modular_nova/modules/medical/code/wounds/wound_effects.dm
diff --git a/modular_skyrat/modules/medical/icons/effects/liquid_overlays.dmi b/modular_nova/modules/medical/icons/effects/liquid_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/medical/icons/effects/liquid_overlays.dmi
rename to modular_nova/modules/medical/icons/effects/liquid_overlays.dmi
diff --git a/modular_skyrat/modules/medical/icons/obj/dartguns.dmi b/modular_nova/modules/medical/icons/obj/dartguns.dmi
similarity index 100%
rename from modular_skyrat/modules/medical/icons/obj/dartguns.dmi
rename to modular_nova/modules/medical/icons/obj/dartguns.dmi
diff --git a/modular_skyrat/modules/medical/icons/obj/machinery.dmi b/modular_nova/modules/medical/icons/obj/machinery.dmi
similarity index 100%
rename from modular_skyrat/modules/medical/icons/obj/machinery.dmi
rename to modular_nova/modules/medical/icons/obj/machinery.dmi
diff --git a/modular_skyrat/modules/medical/icons/obj/smartdarts.dmi b/modular_nova/modules/medical/icons/obj/smartdarts.dmi
similarity index 100%
rename from modular_skyrat/modules/medical/icons/obj/smartdarts.dmi
rename to modular_nova/modules/medical/icons/obj/smartdarts.dmi
diff --git a/modular_skyrat/modules/medical/icons/on_limb_overlays.dmi b/modular_nova/modules/medical/icons/on_limb_overlays.dmi
similarity index 100%
rename from modular_skyrat/modules/medical/icons/on_limb_overlays.dmi
rename to modular_nova/modules/medical/icons/on_limb_overlays.dmi
diff --git a/modular_nova/modules/medical/readme.md b/modular_nova/modules/medical/readme.md
new file mode 100644
index 00000000000..9b7b38f80d9
--- /dev/null
+++ b/modular_nova/modules/medical/readme.md
@@ -0,0 +1,51 @@
+
+
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/2336
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733
+
+## Skyrat Medical Update
+
+Module ID: SKYRAT_MEDICAL_UPDATE
+
+### Description:
+
+Various changes to the medical system, from adding bandage overlays, to new wounds, to modularized procs.
+
+
+
+### TG Proc/File Changes:
+
+- code/_DEFINES/wounds.dm: Added muscle/synth wound series, added them to the global list of wound series
+- cat2_medicine_reagents.dm: /datum/reagent/medicine/c2/hercuri/on_mob_life, Allowed hercuri to affect synthetics, also changed hercuri process flags for this purpose
+- quirks.dm: Commented out the quadruple_amputee/frail blacklist as frail can now apply to prosthetics
+
+
+### Modular Overrides:
+
+- N/A
+
+
+### Defines:
+
+- Many local synthetic wound defines
+
+
+### Included files that are not contained in this module:
+
+- strings/wounds/metal_scar_desc.json -- Required to be here for _string_lists.dm usage
+
+
+### Credits:
+
+Azarak - Original medical update, muscle wounds, bandage overlays
+Niko - Synthetic wounds
+TG coding/Skyrat coding channels and community - Support, ideas, reviews
+
+
diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg b/modular_nova/modules/medical/sound/robotic_slash_T1.ogg
similarity index 100%
rename from modular_skyrat/modules/medical/sound/robotic_slash_T1.ogg
rename to modular_nova/modules/medical/sound/robotic_slash_T1.ogg
diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg b/modular_nova/modules/medical/sound/robotic_slash_T2.ogg
similarity index 100%
rename from modular_skyrat/modules/medical/sound/robotic_slash_T2.ogg
rename to modular_nova/modules/medical/sound/robotic_slash_T2.ogg
diff --git a/modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg b/modular_nova/modules/medical/sound/robotic_slash_T3.ogg
similarity index 100%
rename from modular_skyrat/modules/medical/sound/robotic_slash_T3.ogg
rename to modular_nova/modules/medical/sound/robotic_slash_T3.ogg
diff --git a/modular_skyrat/modules/medical_designs/medical_designs.dm b/modular_nova/modules/medical_designs/medical_designs.dm
similarity index 90%
rename from modular_skyrat/modules/medical_designs/medical_designs.dm
rename to modular_nova/modules/medical_designs/medical_designs.dm
index d0360fbfc2b..dc2e28def25 100644
--- a/modular_skyrat/modules/medical_designs/medical_designs.dm
+++ b/modular_nova/modules/medical_designs/medical_designs.dm
@@ -3,7 +3,7 @@
id = "hospital_gown"
build_type = PROTOLATHE
materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT)
- build_path = /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown
+ build_path = /obj/item/clothing/suit/toggle/labcoat/hospitalgown
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
)
diff --git a/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm b/modular_nova/modules/medievalcrate_skyrat/code/vintageitems.dm
similarity index 100%
rename from modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm
rename to modular_nova/modules/medievalcrate_skyrat/code/vintageitems.dm
diff --git a/modular_skyrat/modules/mentor/code/_globalvars.dm b/modular_nova/modules/mentor/code/_globalvars.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/_globalvars.dm
rename to modular_nova/modules/mentor/code/_globalvars.dm
diff --git a/modular_skyrat/modules/mentor/code/client_procs.dm b/modular_nova/modules/mentor/code/client_procs.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/client_procs.dm
rename to modular_nova/modules/mentor/code/client_procs.dm
diff --git a/modular_skyrat/modules/mentor/code/dementor.dm b/modular_nova/modules/mentor/code/dementor.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/dementor.dm
rename to modular_nova/modules/mentor/code/dementor.dm
diff --git a/modular_skyrat/modules/mentor/code/follow.dm b/modular_nova/modules/mentor/code/follow.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/follow.dm
rename to modular_nova/modules/mentor/code/follow.dm
diff --git a/modular_skyrat/modules/mentor/code/logging.dm b/modular_nova/modules/mentor/code/logging.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/logging.dm
rename to modular_nova/modules/mentor/code/logging.dm
diff --git a/modular_skyrat/modules/mentor/code/mentor.dm b/modular_nova/modules/mentor/code/mentor.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentor.dm
rename to modular_nova/modules/mentor/code/mentor.dm
diff --git a/modular_skyrat/modules/mentor/code/mentor_verbs.dm b/modular_nova/modules/mentor/code/mentor_verbs.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentor_verbs.dm
rename to modular_nova/modules/mentor/code/mentor_verbs.dm
diff --git a/modular_skyrat/modules/mentor/code/mentorhelp.dm b/modular_nova/modules/mentor/code/mentorhelp.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentorhelp.dm
rename to modular_nova/modules/mentor/code/mentorhelp.dm
diff --git a/modular_skyrat/modules/mentor/code/mentorpm.dm b/modular_nova/modules/mentor/code/mentorpm.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentorpm.dm
rename to modular_nova/modules/mentor/code/mentorpm.dm
diff --git a/modular_skyrat/modules/mentor/code/mentorsay.dm b/modular_nova/modules/mentor/code/mentorsay.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentorsay.dm
rename to modular_nova/modules/mentor/code/mentorsay.dm
diff --git a/modular_skyrat/modules/mentor/code/mentorwho.dm b/modular_nova/modules/mentor/code/mentorwho.dm
similarity index 100%
rename from modular_skyrat/modules/mentor/code/mentorwho.dm
rename to modular_nova/modules/mentor/code/mentorwho.dm
diff --git a/modular_skyrat/modules/mentor/readme.md b/modular_nova/modules/mentor/readme.md
similarity index 100%
rename from modular_skyrat/modules/mentor/readme.md
rename to modular_nova/modules/mentor/readme.md
diff --git a/modular_skyrat/modules/microfusion/code/_microfusion_defines.dm b/modular_nova/modules/microfusion/code/_microfusion_defines.dm
similarity index 100%
rename from modular_skyrat/modules/microfusion/code/_microfusion_defines.dm
rename to modular_nova/modules/microfusion/code/_microfusion_defines.dm
diff --git a/modular_skyrat/modules/microfusion/code/cargo_stuff.dm b/modular_nova/modules/microfusion/code/cargo_stuff.dm
similarity index 100%
rename from modular_skyrat/modules/microfusion/code/cargo_stuff.dm
rename to modular_nova/modules/microfusion/code/cargo_stuff.dm
diff --git a/modular_skyrat/modules/microfusion/code/gun_types.dm b/modular_nova/modules/microfusion/code/gun_types.dm
similarity index 100%
rename from modular_skyrat/modules/microfusion/code/gun_types.dm
rename to modular_nova/modules/microfusion/code/gun_types.dm
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm b/modular_nova/modules/microfusion/code/microfusion_cell.dm
similarity index 99%
rename from modular_skyrat/modules/microfusion/code/microfusion_cell.dm
rename to modular_nova/modules/microfusion/code/microfusion_cell.dm
index e9f3b05b41e..8323a3e0738 100644
--- a/modular_skyrat/modules/microfusion/code/microfusion_cell.dm
+++ b/modular_nova/modules/microfusion/code/microfusion_cell.dm
@@ -11,7 +11,7 @@ Essentially, power cells that malfunction if not used in an MCR, and should only
/obj/item/stock_parts/cell/microfusion //Just a standard cell.
name = "microfusion cell"
desc = "A standard-issue microfusion cell, produced by Micron Control Systems. For safety reasons, they cannot be charged unless they are inside of a compatible Micron Control Systems firearm."
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi'
charging_icon = "mf_in" //This is stored in cell.dmi in the aesthetics module
icon_state = "microfusion"
w_class = WEIGHT_CLASS_NORMAL
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm
similarity index 98%
rename from modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm
rename to modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm
index 586a20042eb..17737b81b49 100644
--- a/modular_skyrat/modules/microfusion/code/microfusion_cell_attachments.dm
+++ b/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm
@@ -7,7 +7,7 @@ For adding unique abilities to microfusion cells. These cannot directly interact
/obj/item/microfusion_cell_attachment
name = "microfusion cell attachment"
desc = "broken"
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi'
w_class = WEIGHT_CLASS_NORMAL
/// The overlay that will be automatically added, must be in the cells icon.
var/attachment_overlay_icon_state
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_designs.dm b/modular_nova/modules/microfusion/code/microfusion_designs.dm
similarity index 100%
rename from modular_skyrat/modules/microfusion/code/microfusion_designs.dm
rename to modular_nova/modules/microfusion/code/microfusion_designs.dm
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm b/modular_nova/modules/microfusion/code/microfusion_energy_master.dm
similarity index 98%
rename from modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm
rename to modular_nova/modules/microfusion/code/microfusion_energy_master.dm
index 87ab0ec9740..ff5ad4f83e7 100644
--- a/modular_skyrat/modules/microfusion/code/microfusion_energy_master.dm
+++ b/modular_nova/modules/microfusion/code/microfusion_energy_master.dm
@@ -8,11 +8,11 @@
/obj/item/gun/microfusion
name = "prototype detatchable cell energy projection aparatus"
desc = "The coders have obviously failed to realise this is broken."
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi'
icon_state = "mcr01"
inhand_icon_state = "mcr01"
- lefthand_file = 'modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/microfusion/icons/guns_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/microfusion/icons/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/microfusion/icons/guns_righthand.dmi'
can_bayonet = FALSE
weapon_weight = WEAPON_HEAVY
w_class = WEIGHT_CLASS_BULKY
@@ -41,13 +41,13 @@
/// The microfusion lens used for generating the beams.
var/obj/item/ammo_casing/energy/laser/microfusion/microfusion_lens
/// The sound played when you insert a cell.
- var/sound_cell_insert = 'modular_skyrat/modules/microfusion/sound/mag_insert.ogg'
+ var/sound_cell_insert = 'modular_nova/modules/microfusion/sound/mag_insert.ogg'
/// Should the insertion sound played vary?
var/sound_cell_insert_vary = TRUE
/// The volume at which we will play the insertion sound.
var/sound_cell_insert_volume = 50
/// The sound played when you remove a cell.
- var/sound_cell_remove = 'modular_skyrat/modules/microfusion/sound/mag_insert.ogg'
+ var/sound_cell_remove = 'modular_nova/modules/microfusion/sound/mag_insert.ogg'
/// Should the removal sound played vary?
var/sound_cell_remove_vary = TRUE
/// The volume at which we will play the removal sound.
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm
similarity index 98%
rename from modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm
rename to modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm
index 97a806effdb..f3edf7eb295 100644
--- a/modular_skyrat/modules/microfusion/code/microfusion_gun_attachments.dm
+++ b/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm
@@ -6,7 +6,7 @@
/obj/item/microfusion_gun_attachment
name = "microfusion gun attachment"
desc = "If you see this yell at a coder"
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi'
w_class = WEIGHT_CLASS_NORMAL
/// The attachment overlay icon state.
var/attachment_overlay_icon_state
@@ -179,7 +179,7 @@ Lasers set the target on fire.
heat_addition = 90
slot = GUN_SLOT_BARREL
projectile_override = /obj/projectile/beam/laser/microfusion/superheated
- new_fire_sound = 'modular_skyrat/modules/microfusion/sound/vaporize.ogg'
+ new_fire_sound = 'modular_nova/modules/microfusion/sound/vaporize.ogg'
/*
HELLFIRE ATTACHMENT
@@ -195,7 +195,7 @@ Makes the gun shoot hellfire lasers.
power_usage = 20
slot = GUN_SLOT_BARREL
projectile_override = /obj/projectile/beam/laser/microfusion/hellfire
- new_fire_sound = 'modular_skyrat/modules/microfusion/sound/melt.ogg'
+ new_fire_sound = 'modular_nova/modules/microfusion/sound/melt.ogg'
/*
REPEATER ATTACHMENT
@@ -247,7 +247,7 @@ The gun can fire X-RAY shots.
attachment_overlay_icon_state = "attachment_xray"
heat_addition = 90
power_usage = 50
- new_fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg'
+ new_fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg'
projectile_override = /obj/projectile/beam/laser/microfusion/xray
/obj/item/microfusion_gun_attachment/barrel/xray/examine(mob/user)
@@ -427,7 +427,7 @@ Allows for flashlights bayonets and adds 1 slot to equipment.
/obj/item/microfusion_gun_attachment/rail/run_attachment(obj/item/gun/microfusion/microfusion_gun)
. = ..()
microfusion_gun.AddComponent(/datum/component/seclite_attachable, \
- light_overlay_icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi', \
+ light_overlay_icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi', \
light_overlay = "flight")
microfusion_gun.can_bayonet = TRUE
diff --git a/modular_skyrat/modules/microfusion/code/microfusion_techweb.dm b/modular_nova/modules/microfusion/code/microfusion_techweb.dm
similarity index 100%
rename from modular_skyrat/modules/microfusion/code/microfusion_techweb.dm
rename to modular_nova/modules/microfusion/code/microfusion_techweb.dm
diff --git a/modular_skyrat/modules/microfusion/code/phase_emitter.dm b/modular_nova/modules/microfusion/code/phase_emitter.dm
similarity index 97%
rename from modular_skyrat/modules/microfusion/code/phase_emitter.dm
rename to modular_nova/modules/microfusion/code/phase_emitter.dm
index f213ff4896f..19caeb30aa6 100644
--- a/modular_skyrat/modules/microfusion/code/phase_emitter.dm
+++ b/modular_nova/modules/microfusion/code/phase_emitter.dm
@@ -8,7 +8,7 @@
/obj/item/microfusion_phase_emitter
name = "basic microfusion phase emitter"
desc = "A first-generation phase emitter, this is the core of the weapon and the source of the beam."
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi'
icon_state = "phase_emitter"
base_icon_state = "phase_emitter"
w_class = WEIGHT_CLASS_NORMAL
@@ -169,7 +169,7 @@
/obj/item/microfusion_phase_emitter/proc/kill()
damaged = TRUE
name = "damaged [name]"
- playsound(src, 'modular_skyrat/modules/microfusion/sound/overheat.ogg', 70)
+ playsound(src, 'modular_nova/modules/microfusion/sound/overheat.ogg', 70)
say("ERROR: Integrity failure!")
STOP_PROCESSING(SSobj, src)
diff --git a/modular_nova/modules/microfusion/code/projectiles.dm b/modular_nova/modules/microfusion/code/projectiles.dm
new file mode 100644
index 00000000000..eb405a1becc
--- /dev/null
+++ b/modular_nova/modules/microfusion/code/projectiles.dm
@@ -0,0 +1,101 @@
+/obj/item/ammo_casing
+ ///What volume should the sound play at?
+ var/fire_sound_volume = 50
+
+/obj/item/ammo_casing/energy/laser/microfusion
+ name = "microfusion energy lens"
+ projectile_type = /obj/projectile/beam/laser/microfusion
+ e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell.
+ select_name = "laser"
+ fire_sound = 'modular_nova/modules/microfusion/sound/laser_1.ogg'
+ fire_sound_volume = 100
+
+/obj/item/ammo_casing/proc/refresh_shot()
+ loaded_projectile = new projectile_type(src, src)
+
+/obj/projectile/beam/laser/microfusion
+ name = "microfusion laser"
+ icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi'
+ damage = 25
+
+/obj/projectile/beam/microfusion_disabler
+ name = "microfusion disabler laser"
+ icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi'
+ icon_state = "disabler"
+ damage = 41
+ damage_type = STAMINA
+ armor_flag = ENERGY
+ hitsound = 'sound/weapons/tap.ogg'
+ eyeblur = 0
+ impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
+ light_color = LIGHT_COLOR_BLUE
+ tracer_type = /obj/effect/projectile/tracer/disabler
+ muzzle_type = /obj/effect/projectile/muzzle/disabler
+ impact_type = /obj/effect/projectile/impact/disabler
+
+/obj/projectile/beam/laser/microfusion/superheated
+ name = "superheated microfusion laser"
+ icon_state = "laser_greyscale"
+ damage = 20 //Trading damage for fire stacks
+ color = LIGHT_COLOR_FIRE
+ light_color = LIGHT_COLOR_FIRE
+
+/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit)
+ . = ..()
+ if(isliving(target))
+ var/mob/living/living = target
+ living.adjust_fire_stacks(2)
+ living.ignite_mob()
+
+/obj/projectile/beam/laser/microfusion/hellfire
+ name = "hellfire microfusion laser"
+ icon_state = "laser_greyscale"
+ wound_bonus = 0
+ damage = 20 // You are trading damage for a significant wound bonus and speed increase
+ speed = 0.6
+ color = LIGHT_COLOR_FLARE
+ light_color = LIGHT_COLOR_FLARE
+
+/obj/projectile/beam/laser/microfusion/scatter
+ name = "scatter microfusion laser"
+
+/obj/projectile/beam/laser/microfusion/scatter/max
+ name = "scatter microfusion laser"
+
+/obj/projectile/beam/laser/microfusion/repeater
+ damage = 12.5
+
+/obj/projectile/beam/laser/microfusion/penetrator
+ name = "focused microfusion laser"
+ damage = 20
+ armour_penetration = 50
+
+/obj/projectile/beam/laser/microfusion/lance
+ name = "lance microfusion laser"
+ damage = 50 // We're turning the gun into a heavylaser
+ tracer_type = /obj/effect/projectile/tracer/heavy_laser
+ muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
+ impact_type = /obj/effect/projectile/impact/heavy_laser
+ speed = 0.4
+
+/obj/projectile/beam/laser/microfusion/xray
+ name = "x-ray microfusion laser"
+ icon_state = "laser_greyscale"
+ color = COLOR_GREEN
+ light_color = COLOR_GREEN
+ projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS
+
+/obj/projectile/beam/laser/microfusion/honk
+ name = "funny microfusion laser"
+ icon_state = "laser_greyscale"
+ color = COLOR_VIVID_YELLOW
+ light_color = COLOR_VIVID_YELLOW
+ damage_type = STAMINA
+ damage = 25
+ armor_flag = ENERGY
+ hitsound = 'sound/misc/slip.ogg'
+ impact_type = /obj/effect/projectile/impact/disabler
+
+/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/slippery, 20)
diff --git a/modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi b/modular_nova/modules/microfusion/icons/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/guns_lefthand.dmi
rename to modular_nova/modules/microfusion/icons/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/microfusion/icons/guns_righthand.dmi b/modular_nova/modules/microfusion/icons/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/guns_righthand.dmi
rename to modular_nova/modules/microfusion/icons/guns_righthand.dmi
diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi b/modular_nova/modules/microfusion/icons/microfusion_cells.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi
rename to modular_nova/modules/microfusion/icons/microfusion_cells.dmi
diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/microfusion_gun40x32.dmi
rename to modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi
diff --git a/modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/microfusion_gun_attachments.dmi
rename to modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi
diff --git a/modular_skyrat/modules/microfusion/icons/projectiles.dmi b/modular_nova/modules/microfusion/icons/projectiles.dmi
similarity index 100%
rename from modular_skyrat/modules/microfusion/icons/projectiles.dmi
rename to modular_nova/modules/microfusion/icons/projectiles.dmi
diff --git a/modular_skyrat/modules/microfusion/sound/burn.ogg b/modular_nova/modules/microfusion/sound/burn.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/burn.ogg
rename to modular_nova/modules/microfusion/sound/burn.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/incinerate.ogg b/modular_nova/modules/microfusion/sound/incinerate.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/incinerate.ogg
rename to modular_nova/modules/microfusion/sound/incinerate.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/laser_1.ogg b/modular_nova/modules/microfusion/sound/laser_1.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/laser_1.ogg
rename to modular_nova/modules/microfusion/sound/laser_1.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/mag_insert.ogg b/modular_nova/modules/microfusion/sound/mag_insert.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/mag_insert.ogg
rename to modular_nova/modules/microfusion/sound/mag_insert.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/melt.ogg b/modular_nova/modules/microfusion/sound/melt.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/melt.ogg
rename to modular_nova/modules/microfusion/sound/melt.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/overheat.ogg b/modular_nova/modules/microfusion/sound/overheat.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/overheat.ogg
rename to modular_nova/modules/microfusion/sound/overheat.ogg
diff --git a/modular_skyrat/modules/microfusion/sound/vaporize.ogg b/modular_nova/modules/microfusion/sound/vaporize.ogg
similarity index 100%
rename from modular_skyrat/modules/microfusion/sound/vaporize.ogg
rename to modular_nova/modules/microfusion/sound/vaporize.ogg
diff --git a/modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm b/modular_nova/modules/mining_vendor_additions/code/order_mining.dm
similarity index 81%
rename from modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm
rename to modular_nova/modules/mining_vendor_additions/code/order_mining.dm
index e9b2485ba40..4827e593996 100644
--- a/modular_skyrat/modules/mining_vendor_additions/code/order_mining.dm
+++ b/modular_nova/modules/mining_vendor_additions/code/order_mining.dm
@@ -17,12 +17,12 @@
RESKIN_INHAND_STATE = "crusher0",
),
"Glaive" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/kinetic_glaive.dmi',
+ RESKIN_ICON = 'modular_nova/master_files/icons/obj/kinetic_glaive.dmi',
RESKIN_ICON_STATE = "crusher-glaive",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi',
+ RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi',
RESKIN_WORN_ICON_STATE = "crusher-glaive",
- RESKIN_INHAND_L = 'modular_skyrat/master_files/icons/mob/64x64_lefthand.dmi',
- RESKIN_INHAND_R = 'modular_skyrat/master_files/icons/mob/64x64_righthand.dmi',
+ RESKIN_INHAND_L = 'modular_nova/master_files/icons/mob/64x64_lefthand.dmi',
+ RESKIN_INHAND_R = 'modular_nova/master_files/icons/mob/64x64_righthand.dmi',
),
)
diff --git a/modular_skyrat/modules/modsuit_armour/modsuit_armour.dm b/modular_nova/modules/modsuit_armour/modsuit_armour.dm
similarity index 100%
rename from modular_skyrat/modules/modsuit_armour/modsuit_armour.dm
rename to modular_nova/modules/modsuit_armour/modsuit_armour.dm
diff --git a/modular_skyrat/modules/modsuit_pai/code/mod_pai.dm b/modular_nova/modules/modsuit_pai/code/mod_pai.dm
similarity index 100%
rename from modular_skyrat/modules/modsuit_pai/code/mod_pai.dm
rename to modular_nova/modules/modsuit_pai/code/mod_pai.dm
diff --git a/modular_skyrat/modules/modular_ert/code/engineer/engineer.dm b/modular_nova/modules/modular_ert/code/engineer/engineer.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/engineer/engineer.dm
rename to modular_nova/modules/modular_ert/code/engineer/engineer.dm
diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/ert.dm b/modular_nova/modules/modular_ert/code/fumigators/ert.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/fumigators/ert.dm
rename to modular_nova/modules/modular_ert/code/fumigators/ert.dm
diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/fumigator.dm b/modular_nova/modules/modular_ert/code/fumigators/fumigator.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/fumigators/fumigator.dm
rename to modular_nova/modules/modular_ert/code/fumigators/fumigator.dm
diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/fumigator_outfit.dm b/modular_nova/modules/modular_ert/code/fumigators/fumigator_outfit.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/fumigators/fumigator_outfit.dm
rename to modular_nova/modules/modular_ert/code/fumigators/fumigator_outfit.dm
diff --git a/modular_skyrat/modules/modular_ert/code/fumigators/head.dm b/modular_nova/modules/modular_ert/code/fumigators/head.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/fumigators/head.dm
rename to modular_nova/modules/modular_ert/code/fumigators/head.dm
diff --git a/modular_skyrat/modules/modular_ert/code/marine_override/modified_equipment.dm b/modular_nova/modules/modular_ert/code/marine_override/modified_equipment.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/marine_override/modified_equipment.dm
rename to modular_nova/modules/modular_ert/code/marine_override/modified_equipment.dm
diff --git a/modular_skyrat/modules/modular_ert/code/marine_override/modified_gear.dm b/modular_nova/modules/modular_ert/code/marine_override/modified_gear.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/marine_override/modified_gear.dm
rename to modular_nova/modules/modular_ert/code/marine_override/modified_gear.dm
diff --git a/modular_skyrat/modules/modular_ert/code/odst/ert.dm b/modular_nova/modules/modular_ert/code/odst/ert.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/odst/ert.dm
rename to modular_nova/modules/modular_ert/code/odst/ert.dm
diff --git a/modular_skyrat/modules/modular_ert/code/odst/odst.dm b/modular_nova/modules/modular_ert/code/odst/odst.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/odst/odst.dm
rename to modular_nova/modules/modular_ert/code/odst/odst.dm
diff --git a/modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm b/modular_nova/modules/modular_ert/code/odst/odst_outfit.dm
similarity index 83%
rename from modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm
rename to modular_nova/modules/modular_ert/code/odst/odst_outfit.dm
index 41f35615194..a6a176f406f 100644
--- a/modular_skyrat/modules/modular_ert/code/odst/odst_outfit.dm
+++ b/modular_nova/modules/modular_ert/code/odst/odst_outfit.dm
@@ -16,9 +16,9 @@
r_pocket = /obj/item/tank/internals/emergency_oxygen/double
/obj/item/storage/backpack/ert/odst
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
icon_state = "ert_odst"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
worn_icon_state = "ert_odst"
name = "odst backpack"
desc = "A modified backpack that attaches via magnetic harness, removing the need for straps."
@@ -26,8 +26,8 @@
w_class = WEIGHT_CLASS_BULKY
/obj/item/storage/belt/military/odst
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
name = "commando chest rig"
desc = "A tactical plate carrier."
icon_state = "ert_odst"
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/ert.dm b/modular_nova/modules/modular_ert/code/pizza/ert.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/pizza/ert.dm
rename to modular_nova/modules/modular_ert/code/pizza/ert.dm
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/ert_antag.dm b/modular_nova/modules/modular_ert/code/pizza/ert_antag.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/pizza/ert_antag.dm
rename to modular_nova/modules/modular_ert/code/pizza/ert_antag.dm
diff --git a/modular_nova/modules/modular_ert/code/pizza/head.dm b/modular_nova/modules/modular_ert/code/pizza/head.dm
new file mode 100644
index 00000000000..51bcc0636ef
--- /dev/null
+++ b/modular_nova/modules/modular_ert/code/pizza/head.dm
@@ -0,0 +1,6 @@
+/obj/item/clothing/head/pizza
+ name = "dogginos manager hat"
+ desc = "Looks like something a Sol general would wear."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "dominosleader"
diff --git a/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm b/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm
new file mode 100644
index 00000000000..03833037feb
--- /dev/null
+++ b/modular_nova/modules/modular_ert/code/pizza/misc_clothing.dm
@@ -0,0 +1,18 @@
+/obj/item/clothing/suit/toggle/jacket/hoodie/pizza
+ name = "dogginos hoodie"
+ desc = "A hoodie often worn by the delivery boys of this intergalactically known brand of pizza."
+ greyscale_colors = "#c40000"
+
+/obj/item/clothing/suit/pizzaleader
+ name = "dogginos manager coat"
+ desc = "A long, cool, flowing coat in a tasteless red colour."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "forensics_red_long"
+
+/obj/item/clothing/under/pizza
+ name = "dogginos employee uniform"
+ desc = "The standard issue for the famous dog-founded pizza brand, Dogginos."
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' //Dogginos is not technically affiliated with CC, but it's not OPPOSING it, and its an "ERT"...
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi'
+ icon_state = "dominos"
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/pizza_outfit.dm b/modular_nova/modules/modular_ert/code/pizza/pizza_outfit.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/pizza/pizza_outfit.dm
rename to modular_nova/modules/modular_ert/code/pizza/pizza_outfit.dm
diff --git a/modular_nova/modules/modular_ert/code/pizza/weaponry.dm b/modular_nova/modules/modular_ert/code/pizza/weaponry.dm
new file mode 100644
index 00000000000..59cf024ad11
--- /dev/null
+++ b/modular_nova/modules/modular_ert/code/pizza/weaponry.dm
@@ -0,0 +1,16 @@
+/obj/item/knife/hotknife
+ name = "thousand degree knife"
+ icon = 'modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi'
+ icon_state = "hotknife"
+ inhand_icon_state = "hotknife"
+ desc = "Once known as Lightbringer, this sword has been demoted to a simple pizza cutting knife... It may still have its fire attack powers."
+ righthand_file = 'modular_nova/modules/modular_ert/icons/pizza/righthand.dmi'
+ lefthand_file = 'modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi'
+
+ /// How many fire stacks to apply on attack
+ var/fire_stacks = 4
+
+/obj/item/knife/hotknife/attack(mob/living/victim, mob/living/attacker, params)
+ victim.adjust_fire_stacks(fire_stacks)
+ victim.ignite_mob()
+ return ..()
diff --git a/modular_nova/modules/modular_ert/code/readme.md b/modular_nova/modules/modular_ert/code/readme.md
new file mode 100644
index 00000000000..2090e3aa047
--- /dev/null
+++ b/modular_nova/modules/modular_ert/code/readme.md
@@ -0,0 +1,43 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/2946 & https://github.com/Skyrat-SS13/Skyrat-tg/pull/10662 for NTrauma
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/4781 for ODST
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/6440 for Fumigator and Engineer
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/5630 for Pizza
+
+## Title: Modular Emergency Response Teams
+
+MODULE ID: modular_ert
+
+### Description:
+
+- Use this module for any Skyrat-unique ERTs, including their outfits, unique equipment, and ERT datums!
+- DO NOT PUT GENERAL-USE ITEMS IN HERE. ITEMS IN HERE SHOULD #ONLY# SHOW UP ON THEIR RELATED ERT.
+
+- (Using TG Outfits and Datums) Adds a simple Engi-Maintinence ERT of non-spaceproof, generic repair dudes.
+- Adds a Fumigator ERT specialized in pest control.
+- Adds a specialized orbital shok droop trooper ERT that allows for a quick security response via pod.
+- Adds a Pizza Delivery "ERT" for... pizza delivery.
+- Adds a specialized medical team ERT that allows for a better medical response.
+
+### TG Proc Changes:
+
+- N/A
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+- Most clothing icon files:
+- modular_nova/master_files/icons/mob/clothing/xyz
+- modular_nova/master_files/icons/obj/clothing/xyz
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+- pinkblossom6 - Original Sprites and Code for NTrauma & ODST
+- Orion_the_Fox - Updated Sprites and Code for NTrauma
+- thestubborn - Engineer, Fumigator, and Pizza ERTs
diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/ert.dm b/modular_nova/modules/modular_ert/code/trauma_team/ert.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/trauma_team/ert.dm
rename to modular_nova/modules/modular_ert/code/trauma_team/ert.dm
diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/ert_antag.dm b/modular_nova/modules/modular_ert/code/trauma_team/ert_antag.dm
similarity index 100%
rename from modular_skyrat/modules/modular_ert/code/trauma_team/ert_antag.dm
rename to modular_nova/modules/modular_ert/code/trauma_team/ert_antag.dm
diff --git a/modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm b/modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm
similarity index 89%
rename from modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm
rename to modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm
index 23b65976985..0282808ef91 100644
--- a/modular_skyrat/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm
+++ b/modular_nova/modules/modular_ert/code/trauma_team/trauma_team_outfit.dm
@@ -64,8 +64,8 @@
/obj/item/storage/belt/military/ntrauma
name = "trauma chest rig"
desc = "A set of tactical webbing worn by Trauma Response Teams."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "ert_ntrauma"
worn_icon_state = "ert_ntrauma"
@@ -93,8 +93,8 @@
/obj/item/clothing/gloves/latex/nitrile/ntrauma
name = "trauma specialist gloves"
desc = "A pair of nitrile-alternative gloves used by Trauma Team specialists, sealable to protect from pressure and with a unique (and expensive) acid-repellent coating to prevent damage handling chemical hazards. Wont protect the rest of your body, though."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "ert_ntrauma"
alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //So the LONG gloves can be shown off
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -103,9 +103,9 @@
/obj/item/clothing/suit/space/ntrauma
name = "trauma team softsuit"
desc = "A lightweight, minimally armored, entirely sterile softsuit, used by Trauma Teams to operate in potentially hazardous environments of all sorts. It's coated in acid-repellent chemicals."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
icon_state = "ert_ntrauma"
inhand_icon_state = "syndicate-blue"
slowdown = 0.3
@@ -127,8 +127,8 @@
/obj/item/clothing/head/helmet/space/ntrauma
name = "trauma team helmet"
desc = "A faceless white helmet fit to seal with a softsuit, used by Trauma Teams to operate in potentially hazardous environments. It's coated in acid-repellent chemicals."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "ert_ntrauma"
resistance_flags = ACID_PROOF
supports_variations_flags = NONE //Also good GOD I didnt want to re-sprite this helmet
diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi b/modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi
rename to modular_nova/modules/modular_ert/icons/pizza/hotknife.dmi
diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi b/modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi
rename to modular_nova/modules/modular_ert/icons/pizza/lefthand.dmi
diff --git a/modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi b/modular_nova/modules/modular_ert/icons/pizza/righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi
rename to modular_nova/modules/modular_ert/icons/pizza/righthand.dmi
diff --git a/modular_skyrat/modules/modular_implants/code/misc_devices.dm b/modular_nova/modules/modular_implants/code/misc_devices.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/misc_devices.dm
rename to modular_nova/modules/modular_implants/code/misc_devices.dm
index 2582d06a959..12ffb77f337 100644
--- a/modular_skyrat/modules/modular_implants/code/misc_devices.dm
+++ b/modular_nova/modules/modular_implants/code/misc_devices.dm
@@ -5,7 +5,7 @@
special_desc = "Given the relatively recent and sudden proliferation of NIFs, their use in crime both petty and organized has skyrocketed in recent years. \
The existence of nanomachine-based real-time burst communication that cannot be effectively monitored or hacked into has given most PMCs cause enough for concern \
to invent their own devices. This one is a 'Wrangler' model NIF-Cutter, used for crudely wiping programs directly off a user's Framework."
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "nifsoft_remover"
///Is a disk with the corresponding NIFSoft created when said NIFSoft is removed?
@@ -69,7 +69,7 @@
Frameworks, complicated devices as they are, are normally locked at the firmware level to requiring specific 'approved' brands of repair paste or repair-docks. \
This hacked-kit has been developed by the Altspace Coven as a freeware alternative, spread far and wide throughout extra-Solarian space for quality of life \
for users located on the peripheries of society."
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "repair_paste"
w_class = WEIGHT_CLASS_SMALL
///How much does this repair each time it is used?
@@ -102,7 +102,7 @@
/obj/item/nif_hud_adapter
name = "Scrying Lens Adapter"
desc = "A kit that modifies select glasses to display HUDs for NIFs"
- icon = 'modular_skyrat/master_files/icons/donator/obj/kits.dmi'
+ icon = 'modular_nova/master_files/icons/donator/obj/kits.dmi'
icon_state = "partskit"
/// Can this item be used multiple times? If not, it will delete itself after being used.
diff --git a/modular_skyrat/modules/modular_implants/code/nif_actions.dm b/modular_nova/modules/modular_implants/code/nif_actions.dm
similarity index 81%
rename from modular_skyrat/modules/modular_implants/code/nif_actions.dm
rename to modular_nova/modules/modular_implants/code/nif_actions.dm
index bc574f71ee1..eda612f4fc3 100644
--- a/modular_skyrat/modules/modular_implants/code/nif_actions.dm
+++ b/modular_nova/modules/modular_implants/code/nif_actions.dm
@@ -1,8 +1,8 @@
/// Action used to pull up the NIF menu
/datum/action/item_action/nif
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
check_flags = AB_CHECK_CONSCIOUS
/datum/action/item_action/nif/open_menu
diff --git a/modular_skyrat/modules/modular_implants/code/nif_implants.dm b/modular_nova/modules/modular_implants/code/nif_implants.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nif_implants.dm
rename to modular_nova/modules/modular_implants/code/nif_implants.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nif_persistence.dm b/modular_nova/modules/modular_implants/code/nif_persistence.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nif_persistence.dm
rename to modular_nova/modules/modular_implants/code/nif_persistence.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nif_research.dm b/modular_nova/modules/modular_implants/code/nif_research.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nif_research.dm
rename to modular_nova/modules/modular_implants/code/nif_research.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifs.dm b/modular_nova/modules/modular_implants/code/nifs.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/nifs.dm
rename to modular_nova/modules/modular_implants/code/nifs.dm
index 5d2b1aabd4a..5ec2b9b17fa 100644
--- a/modular_skyrat/modules/modular_implants/code/nifs.dm
+++ b/modular_nova/modules/modular_implants/code/nifs.dm
@@ -15,7 +15,7 @@
/obj/item/organ/internal/cyberimp/brain/nif
name = "Nanite Implant Framework"
desc = "A brain implant that infuses the user with nanites."
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/nifs.dmi'
icon_state = "base_nif"
w_class = WEIGHT_CLASS_NORMAL
slot = ORGAN_SLOT_BRAIN_NIF
@@ -99,12 +99,12 @@
//Appearance Variables
///This is the sound that plays when doing most things!
- var/good_sound ='modular_skyrat/modules/modular_implants/sounds/default_good.ogg'
+ var/good_sound ='modular_nova/modules/modular_implants/sounds/default_good.ogg'
///This is the sound that plays if there is an issue going on.
- var/bad_sound = 'modular_skyrat/modules/modular_implants/sounds/default_bad.ogg'
+ var/bad_sound = 'modular_nova/modules/modular_implants/sounds/default_bad.ogg'
///This is the sound that you would hear if you enable if you activate or enable something.
- var/click_sound = 'modular_skyrat/modules/modular_implants/sounds/default_click.ogg'
- ///What icon does the NIF display in chat when sending out alerts? Icon states are stored in 'modular_skyrat/modules/modular_implants/icons/chat.dmi'
+ var/click_sound = 'modular_nova/modules/modular_implants/sounds/default_click.ogg'
+ ///What icon does the NIF display in chat when sending out alerts? Icon states are stored in 'modular_nova/modules/modular_implants/icons/chat.dmi'
var/chat_icon = "standard"
/obj/item/organ/internal/cyberimp/brain/nif/Initialize(mapload)
@@ -456,7 +456,7 @@
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(add_examine))
-/datum/component/nif_examine/Destroy(force, silent)
+/datum/component/nif_examine/Destroy(force)
UnregisterSignal(parent, COMSIG_MOB_EXAMINATE)
return ..()
@@ -483,7 +483,7 @@
/datum/asset/spritesheet/chat/create_spritesheets()
. = ..()
- InsertAll("nif", 'modular_skyrat/modules/modular_implants/icons/chat.dmi')
+ InsertAll("nif", 'modular_nova/modules/modular_implants/icons/chat.dmi')
/obj/item/autosurgeon/organ/nif
starting_organ = /obj/item/organ/internal/cyberimp/brain/nif/standard
diff --git a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm b/modular_nova/modules/modular_implants/code/nifs_tgui.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifs_tgui.dm
rename to modular_nova/modules/modular_implants/code/nifs_tgui.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm b/modular_nova/modules/modular_implants/code/nifsoft_catalog.dm
similarity index 96%
rename from modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm
rename to modular_nova/modules/modular_implants/code/nifsoft_catalog.dm
index 4cd6beea379..28ee5c0776f 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm
+++ b/modular_nova/modules/modular_implants/code/nifsoft_catalog.dm
@@ -14,11 +14,12 @@ GLOBAL_LIST_INIT(purchasable_nifsofts, list(
filename = "nifsoftcatalog"
filedesc = "NIFSoft Catalog"
extended_desc = "A virtual storefront that allows the user to install NIFSofts and purchase various NIF related products"
- category = PROGRAM_CATEGORY_MISC
+ downloader_category = PROGRAM_CATEGORY_DEVICE
size = 3
tgui_id = "NtosNifsoftCatalog"
program_icon = "bag-shopping"
- usage_flags = PROGRAM_TABLET
+ can_run_on_flags = PROGRAM_PDA
+ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET
///What bank account is money being drawn out of?
var/datum/bank_account/paying_account
///What NIF are the NIFSofts being sent to?
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts.dm b/modular_nova/modules/modular_implants/code/nifsofts.dm
similarity index 99%
rename from modular_skyrat/modules/modular_implants/code/nifsofts.dm
rename to modular_nova/modules/modular_implants/code/nifsofts.dm
index ddbff9cf86e..3e597289fa0 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts.dm
@@ -164,7 +164,7 @@
/obj/item/disk/nifsoft_uploader
name = "Generic NIFSoft datadisk"
desc = "A datadisk that can be used to upload a loaded NIFSoft to the user's NIF"
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/disks.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/disks.dmi'
icon_state = "base_disk"
///What NIFSoft is currently loaded in?
var/datum/nifsoft/loaded_nifsoft = /datum/nifsoft
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm b/modular_nova/modules/modular_implants/code/nifsofts/base_types/action_granter.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/base_types/action_granter.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/base_types/action_granter.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/book_summoner.dm b/modular_nova/modules/modular_implants/code/nifsofts/book_summoner.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/book_summoner.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/book_summoner.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/dorms.dm b/modular_nova/modules/modular_implants/code/nifsofts/dorms.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/dorms.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/dorms.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm b/modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm
index 2b8883710c5..bcc84ebf3e3 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/hivemind.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/hivemind.dm
@@ -83,9 +83,9 @@ GLOBAL_LIST_EMPTY(hivemind_users)
/datum/action/innate/hivemind_config
name = "Hivemind Configuration Settings"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "phone_settings"
/datum/action/innate/hivemind_config/Activate()
@@ -160,9 +160,9 @@ GLOBAL_LIST_EMPTY(hivemind_users)
/datum/action/innate/hivemind_keyboard
name = "Hivemind Keyboard"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "phone"
/datum/action/innate/hivemind_keyboard/Activate()
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/huds.dm b/modular_nova/modules/modular_implants/code/nifsofts/huds.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/huds.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/huds.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm b/modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm
similarity index 95%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm
index be88ad77cd8..2b49164bff6 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/hypnosis.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/hypnosis.dm
@@ -15,9 +15,9 @@
/datum/action/innate/nif_hypnotize
name = "Hypnotize"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "hypnotize"
/datum/action/innate/nif_hypnotize/Activate()
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm b/modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm
index 668c9328135..166f64b9846 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/money_sense.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/money_sense.dm
@@ -31,7 +31,7 @@
RegisterSignal(parent, COMSIG_MOB_EXAMINATE, PROC_REF(add_examine))
-/datum/component/money_sense/Destroy(force, silent)
+/datum/component/money_sense/Destroy(force)
. = ..()
UnregisterSignal(parent, COMSIG_MOB_EXAMINATE)
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm b/modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm
similarity index 99%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm
index aab1cc52b7a..ac2719c1ed2 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/prop_summoner.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/prop_summoner.dm
@@ -145,7 +145,7 @@
single_card.add_atom_colour("#acccff",FIXED_COLOUR_PRIORITY)
sub_items += single_card
-/datum/component/summoned_item/Destroy(force, silent)
+/datum/component/summoned_item/Destroy(force)
for(var/obj/item in sub_items)
sub_items -= item
qdel(item)
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/scryer.dm b/modular_nova/modules/modular_implants/code/nifsofts/scryer.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/scryer.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/scryer.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm b/modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm
similarity index 77%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm
index 113ea015e76..7aa1819e4a2 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/shapeshifter.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/shapeshifter.dm
@@ -16,9 +16,9 @@
/datum/action/innate/alter_form/nif
name = "Polymorph"
slime_restricted = FALSE
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "slime"
shapeshift_text = "closes their eyes to focus, their body subtly shifting and contorting."
@@ -27,9 +27,9 @@
alterer,
alterer,
list(
- "DNA" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"),
- "Hair" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
- "Markings" = image(icon = 'modular_skyrat/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"),
+ "DNA" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "dna"),
+ "Hair" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "scissors"),
+ "Markings" = image(icon = 'modular_nova/master_files/icons/mob/actions/actions_slime.dmi', icon_state = "rainbow_spraycan"),
),
tooltips = TRUE,
)
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm b/modular_nova/modules/modular_implants/code/nifsofts/soul_poem.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/soul_poem.dm
diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm b/modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm
rename to modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm
index 716e7e9513c..2d5b4767b0c 100644
--- a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm
+++ b/modular_nova/modules/modular_implants/code/nifsofts/soulcatcher.dm
@@ -115,9 +115,9 @@
/datum/action/innate/soulcatcher
name = "Soulcatcher"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "soulcatcher"
/// The weakref of the parent NIFSoft we belong to.
var/datum/weakref/parent_nifsoft
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm b/modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm
similarity index 98%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm
index cd84179e083..901f63f1dc9 100644
--- a/modular_skyrat/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm
+++ b/modular_nova/modules/modular_implants/code/soulcatcher/attachable_soulcatcher.dm
@@ -56,7 +56,7 @@
/obj/item/attachable_soulcatcher
name = "Poltergeist-Type RSD"
desc = "This device, a polymorphic nanomachine net, wraps around objects of most sizes and allows them to function as a container for Resonance. The soul in question within the vessel is imbued much like it would be in a body or a normal Soulcatcher, perceiving the world and even speaking out of their new form. The nanomachine net of the device allows for the consciousness to somewhat manipulate their container, but any large-scale movement is out of the question."
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "attachable-soulcatcher"
w_class = WEIGHT_CLASS_SMALL
/// Do we want to destory the item once it is attached to an item?
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm
similarity index 95%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm
index 767f396057e..479d91da943 100644
--- a/modular_skyrat/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm
+++ b/modular_nova/modules/modular_implants/code/soulcatcher/handheld_soulcatcher.dm
@@ -3,7 +3,7 @@
/obj/item/handheld_soulcatcher
name = "\improper Evoker-type RSD"
desc = "The Evoker-Type Resonance Simulation Device is a sort of 'Soulcatcher' instrument that's been designated for handheld usage. These RSDs were designed with the Medical field in mind, a tool meant to offer comfort to the temporarily-departed while their bodies are being repaired, healed, or produced. The Evoker is essentially a very specialized handheld NIF, still using the same nanomachinery for the software and hardware. This careful instrument is able to host a virtual space for a great number of Engrams for an essentially indefinite amount of time in an unlimited variety of simulations, even able to transfer them to and from a NIF. However, it's best Medical practice to not lollygag."
- icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
+ icon = 'modular_nova/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "soulcatcher-device"
inhand_icon_state = "electronic"
worn_icon_state = "electronic"
@@ -98,7 +98,7 @@
return FALSE
target_room.add_soul(target_mob.mind, TRUE)
- playsound(src, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
+ playsound(src, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
visible_message(span_notice("[src] beeps: [target_mob]'s mind transfer is now complete."))
if(!target_mob.GetComponent(/datum/component/previous_body))
@@ -152,7 +152,7 @@
SEND_SIGNAL(old_body, COMSIG_SOULCATCHER_CHECK_SOUL, FALSE)
chosen_soul.mind.transfer_to(target_mob, TRUE)
- playsound(src, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
+ playsound(src, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
visible_message(span_notice("[src] beeps: Body transfer complete."))
log_admin("[src] was used by [user] to transfer [chosen_soul]'s soulcatcher soul to [target_mob].")
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm
index 241991b61f8..938558609fb 100644
--- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm
+++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_body_component.dm
@@ -45,7 +45,7 @@
return TRUE
/// Attempts to destroy the component. If `restore_mind` is true, it will attempt to place the mind back inside of the body and delete the soulcatcher soul.
-/datum/component/previous_body/Destroy(force, silent)
+/datum/component/previous_body/Destroy(force)
UnregisterSignal(parent, COMSIG_SOULCATCHER_CHECK_SOUL)
UnregisterSignal(parent, COMSIG_SOULCATCHER_SCAN_BODY)
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm
similarity index 97%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm
index 8c14385430a..0baeaf603db 100644
--- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm
+++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm
@@ -49,7 +49,7 @@ GLOBAL_LIST_EMPTY(soulcatchers)
/mob/living/proc/soulcatcher_emote,
))
-/datum/component/soulcatcher/Destroy(force, ...)
+/datum/component/soulcatcher/Destroy(force)
GLOB.soulcatchers -= src
targeted_soulcatcher_room = null
@@ -139,7 +139,7 @@ GLOBAL_LIST_EMPTY(soulcatchers)
if(istype(parent, /obj/item/handheld_soulcatcher))
var/obj/item/handheld_soulcatcher/parent_device = parent
- playsound(parent_device, 'modular_skyrat/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
+ playsound(parent_device, 'modular_nova/modules/modular_implants/sounds/default_good.ogg', 50, FALSE, ignore_walls = FALSE)
parent_device.visible_message(span_notice("[parent_device] beeps: [parent_body] is now scanned."))
return TRUE
@@ -364,7 +364,7 @@ GLOBAL_LIST_EMPTY(soulcatchers)
recepient_soulcatcher.recieve_message(message)
return TRUE
-/datum/soulcatcher_room/Destroy(force, ...)
+/datum/soulcatcher_room/Destroy(force)
for(var/mob/living/soulcatcher_soul/soul as anything in current_souls)
remove_soul(soul)
@@ -372,9 +372,9 @@ GLOBAL_LIST_EMPTY(soulcatchers)
/datum/action/innate/join_soulcatcher
name = "Enter Soulcatcher"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "soulcatcher_enter"
/datum/action/innate/join_soulcatcher/Activate()
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm
similarity index 95%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm
index 5127fdfe8d4..94a4601e94d 100644
--- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm
+++ b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm
@@ -194,9 +194,9 @@
/datum/action/innate/leave_soulcatcher
name = "Leave Soulcatcher"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "soulcatcher_exit"
/datum/action/innate/leave_soulcatcher/Activate()
@@ -209,9 +209,9 @@
/datum/action/innate/soulcatcher_user
name = "Soulcatcher"
- background_icon = 'modular_skyrat/master_files/icons/mob/actions/action_backgrounds.dmi'
+ background_icon = 'modular_nova/master_files/icons/mob/actions/action_backgrounds.dmi'
background_icon_state = "android"
- button_icon = 'modular_skyrat/master_files/icons/mob/actions/actions_nif.dmi'
+ button_icon = 'modular_nova/master_files/icons/mob/actions/actions_nif.dmi'
button_icon_state = "soulcatcher"
/// What soulcatcher user component are we bringing up the menu for?
var/datum/weakref/soulcatcher_user_component
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm
diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm b/modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm
similarity index 100%
rename from modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm
rename to modular_nova/modules/modular_implants/code/soulcatcher/soulcatcher_verbs.dm
diff --git a/modular_skyrat/modules/modular_implants/icons/chat.dmi b/modular_nova/modules/modular_implants/icons/chat.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_implants/icons/chat.dmi
rename to modular_nova/modules/modular_implants/icons/chat.dmi
diff --git a/modular_skyrat/modules/modular_implants/icons/obj/devices.dmi b/modular_nova/modules/modular_implants/icons/obj/devices.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_implants/icons/obj/devices.dmi
rename to modular_nova/modules/modular_implants/icons/obj/devices.dmi
diff --git a/modular_skyrat/modules/modular_implants/icons/obj/disks.dmi b/modular_nova/modules/modular_implants/icons/obj/disks.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_implants/icons/obj/disks.dmi
rename to modular_nova/modules/modular_implants/icons/obj/disks.dmi
diff --git a/modular_skyrat/modules/modular_implants/icons/obj/machines/vendors.dmi b/modular_nova/modules/modular_implants/icons/obj/machines/vendors.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_implants/icons/obj/machines/vendors.dmi
rename to modular_nova/modules/modular_implants/icons/obj/machines/vendors.dmi
diff --git a/modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi b/modular_nova/modules/modular_implants/icons/obj/nifs.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_implants/icons/obj/nifs.dmi
rename to modular_nova/modules/modular_implants/icons/obj/nifs.dmi
diff --git a/modular_skyrat/modules/modular_implants/sounds/default_bad.ogg b/modular_nova/modules/modular_implants/sounds/default_bad.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_implants/sounds/default_bad.ogg
rename to modular_nova/modules/modular_implants/sounds/default_bad.ogg
diff --git a/modular_skyrat/modules/modular_implants/sounds/default_click.ogg b/modular_nova/modules/modular_implants/sounds/default_click.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_implants/sounds/default_click.ogg
rename to modular_nova/modules/modular_implants/sounds/default_click.ogg
diff --git a/modular_skyrat/modules/modular_implants/sounds/default_good.ogg b/modular_nova/modules/modular_implants/sounds/default_good.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_implants/sounds/default_good.ogg
rename to modular_nova/modules/modular_implants/sounds/default_good.ogg
diff --git a/modular_skyrat/modules/modular_items/code/bags.dm b/modular_nova/modules/modular_items/code/bags.dm
similarity index 95%
rename from modular_skyrat/modules/modular_items/code/bags.dm
rename to modular_nova/modules/modular_items/code/bags.dm
index d462b5c227b..8fd0bde29eb 100644
--- a/modular_skyrat/modules/modular_items/code/bags.dm
+++ b/modular_nova/modules/modular_items/code/bags.dm
@@ -2,7 +2,7 @@
/obj/item/storage/pouch
name = "storage pouch"
desc = "It's a nondescript pouch made with dark fabric. It has a clip, for fitting in pockets."
- icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/storage.dmi'
icon_state = "survival"
w_class = WEIGHT_CLASS_NORMAL
resistance_flags = FLAMMABLE
@@ -16,7 +16,7 @@
/obj/item/storage/pouch/ammo
name = "ammo pouch"
desc = "A pouch for your ammo that goes in your pocket."
- icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/storage.dmi'
icon_state = "ammopouch"
w_class = WEIGHT_CLASS_BULKY
custom_price = PAYCHECK_CREW * 4
@@ -52,7 +52,7 @@
/obj/item/storage/pouch/material
name = "material pouch"
desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket."
- icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/storage.dmi'
icon_state = "materialpouch"
w_class = WEIGHT_CLASS_BULKY
custom_price = PAYCHECK_CREW * 4
@@ -125,7 +125,7 @@
atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
/*
hi. you might think this is egregious. five slots? that's a lot!
- here's a thought: the pocket first aid kit from the colonial replicator [modular_skyrat\modules\food_replicator\code\storage.dm] has
+ here's a thought: the pocket first aid kit from the colonial replicator [modular_nova\modules\food_replicator\code\storage.dm] has
mostly unrestricted storage, limited by having 4 max total storage, so at best you're only fitting 4 tiny items. but that's 4 of *any* tiny item.
or 2 small items (that aren't guns/mags). so it's basically just turning 1 pocket slot into 2, if you think about it hard enough.
this is a thing you have to buy from cargo's goodies tab. not even an import. and it only fits medical supplies.
diff --git a/modular_skyrat/modules/modular_items/code/cash.dm b/modular_nova/modules/modular_items/code/cash.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/cash.dm
rename to modular_nova/modules/modular_items/code/cash.dm
diff --git a/modular_skyrat/modules/modular_items/code/ciggies.dm b/modular_nova/modules/modular_items/code/ciggies.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/ciggies.dm
rename to modular_nova/modules/modular_items/code/ciggies.dm
diff --git a/modular_nova/modules/modular_items/code/cross.dm b/modular_nova/modules/modular_items/code/cross.dm
new file mode 100644
index 00000000000..2e4e37c6939
--- /dev/null
+++ b/modular_nova/modules/modular_items/code/cross.dm
@@ -0,0 +1,21 @@
+/obj/item/crucifix
+ name = "ornate crucifix"
+ desc = "An ornate golden crucifix, adorned with various gemstones and tiny carvings. For some reason, it always feels warm to the touch."
+ icon = 'modular_nova/modules/modular_items/icons/crucifix.dmi'
+ icon_state = "cross_ornate"
+ lefthand_file = 'modular_nova/modules/modular_items/icons/cross_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/icons/cross_right.dmi'
+ force = 5 //Gem-encrusted and reinforced with GOD
+ throw_speed = 3
+ throw_range = 4
+ throwforce = 10
+ w_class = WEIGHT_CLASS_TINY
+
+/datum/crafting_recipe/cross
+ name = "Ornate Cross"
+ result = /obj/item/crucifix
+ reqs = list(/obj/item/stack/sheet/mineral/gold = 1,
+ /obj/item/stack/sheet/mineral/diamond = 1)
+ tool_behaviors = list(TOOL_SCREWDRIVER)
+ time = 20
+ category = CAT_MISC
diff --git a/modular_skyrat/modules/modular_items/code/designs.dm b/modular_nova/modules/modular_items/code/designs.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/designs.dm
rename to modular_nova/modules/modular_items/code/designs.dm
diff --git a/modular_skyrat/modules/modular_items/code/makeshift.dm b/modular_nova/modules/modular_items/code/makeshift.dm
similarity index 82%
rename from modular_skyrat/modules/modular_items/code/makeshift.dm
rename to modular_nova/modules/modular_items/code/makeshift.dm
index 605a5bc5994..b78f137f1c3 100644
--- a/modular_skyrat/modules/modular_items/code/makeshift.dm
+++ b/modular_nova/modules/modular_items/code/makeshift.dm
@@ -3,7 +3,7 @@
/obj/item/crowbar/makeshift
name = "makeshift crowbar"
desc = "A makeshift crowbar, flimsily constructed with miscellaneous parts. It's got a strong head that looks like it could be used for hammering."
- icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/tools.dmi'
icon_state = "makeshift_crowbar"
worn_icon_state = "crowbar"
force = 2
@@ -14,7 +14,7 @@
/obj/item/screwdriver/makeshift
name = "makeshift screwdriver"
desc = "A makeshift screwdriver, flimsily made using cloth and some metal."
- icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/tools.dmi'
icon_state = "makeshift_screwdriver"
random_color = FALSE
force = 1
@@ -25,7 +25,7 @@
/obj/item/weldingtool/makeshift
name = "makeshift welder"
desc = "A makeshift welder, flimsily constructed with miscellaneous parts."
- icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/tools.dmi'
icon_state = "makeshift_welder"
force = 1
throwforce = 2
@@ -37,7 +37,7 @@
/obj/item/wirecutters/makeshift
name = "makeshift wirecutters"
desc = "Makeshift wire cutters, flimsily constructed with miscellaneous parts."
- icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/tools.dmi'
icon_state = "makeshift_cutters"
random_color = FALSE
force = 3
@@ -48,7 +48,7 @@
/obj/item/wrench/makeshift
name = "makeshift wrench"
desc = "A makeshift wrench, flimsily constructed with miscellaneous parts."
- icon = 'modular_skyrat/modules/modular_items/icons/tools.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/tools.dmi'
icon_state = "makeshift_wrench"
force = 2
throwforce = 2
diff --git a/modular_skyrat/modules/modular_items/code/modular_glasses.dm b/modular_nova/modules/modular_items/code/modular_glasses.dm
similarity index 96%
rename from modular_skyrat/modules/modular_items/code/modular_glasses.dm
rename to modular_nova/modules/modular_items/code/modular_glasses.dm
index 96272393a1f..6008894fc2d 100644
--- a/modular_skyrat/modules/modular_items/code/modular_glasses.dm
+++ b/modular_nova/modules/modular_items/code/modular_glasses.dm
@@ -142,10 +142,10 @@
/obj/item/clothing/glasses/hud/ar/aviator
name = "aviators"
desc = "A pair of designer sunglasses with electrochromatic darkening lenses!"
- worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi'
icon_state = "aviator"
off_state = "aviator_off"
- icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi'
flash_protect = FLASH_PROTECTION_FLASH
modes = list(MODE_OFF, MODE_ON)
tint = 0
@@ -153,9 +153,9 @@
/obj/item/clothing/glasses/fake_sunglasses/aviator
name = "aviators"
desc = "A pair of designer sunglasses. Doesn't seem like it'll block flashes."
- worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi'
icon_state = "aviator"
- icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi'
// Security Aviators
/obj/item/clothing/glasses/hud/ar/aviator/security
@@ -247,8 +247,8 @@
name = "retinal projector"
desc = "A headset equipped with a scanning lens and mounted retinal projector. It doesn't provide any eye protection, but it's less obtrusive than a visor."
icon_state = "projector"
- worn_icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi'
- icon = 'modular_skyrat/modules/modular_items/icons/modular_glasses.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/modular_glasses.dmi'
flags_cover = null /// It doesn't actually cover up any parts
off_state = "projector-off"
modes = list(MODE_OFF, MODE_ON, MODE_FREEZE_ANIMATION)
diff --git a/modular_skyrat/modules/modular_items/code/necklace.dm b/modular_nova/modules/modular_items/code/necklace.dm
similarity index 92%
rename from modular_skyrat/modules/modular_items/code/necklace.dm
rename to modular_nova/modules/modular_items/code/necklace.dm
index 7e28d0f35c7..4e87508dd4f 100644
--- a/modular_skyrat/modules/modular_items/code/necklace.dm
+++ b/modular_nova/modules/modular_items/code/necklace.dm
@@ -7,9 +7,9 @@
/obj/item/clothing/neck/necklace/ashwalker
name = "ashen necklace"
desc = "A necklace crafted from ash, connected to the Necropolis through the core of a Legion. This imbues overdwellers with an unnatural understanding of Ashtongue, the native language of Lavaland, while worn."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
icon_state = "ashnecklace"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
icon_state = "ashnecklace"
w_class = WEIGHT_CLASS_SMALL //allows this to fit inside of pockets.
diff --git a/modular_skyrat/modules/modular_items/code/pastries.dm b/modular_nova/modules/modular_items/code/pastries.dm
similarity index 91%
rename from modular_skyrat/modules/modular_items/code/pastries.dm
rename to modular_nova/modules/modular_items/code/pastries.dm
index 8ae5939bb09..022c6013ebf 100644
--- a/modular_skyrat/modules/modular_items/code/pastries.dm
+++ b/modular_nova/modules/modular_items/code/pastries.dm
@@ -3,7 +3,7 @@
name = "mince pie"
desc = "The edible embodiment of christmas cheer."
w_class = WEIGHT_CLASS_TINY
- icon = 'modular_skyrat/modules/modular_items/icons/pastries.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/pastries.dmi'
icon_state = "mince_pie"
food_flags = FOOD_FINGER_FOOD
foodtypes = GRAIN | SUGAR | FRUIT
@@ -15,7 +15,7 @@
name = "mimce pie"
desc = "A pastry with a star-shaped lid, filled with Nothing."
w_class = WEIGHT_CLASS_TINY
- icon = 'modular_skyrat/modules/modular_items/icons/pastries.dmi'
+ icon = 'modular_nova/modules/modular_items/icons/pastries.dmi'
icon_state = "mimce_pie"
food_flags = FOOD_FINGER_FOOD
foodtypes = GRAIN | SUGAR | FRUIT
diff --git a/modular_skyrat/modules/modular_items/code/recipes_misc.dm b/modular_nova/modules/modular_items/code/recipes_misc.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/recipes_misc.dm
rename to modular_nova/modules/modular_items/code/recipes_misc.dm
diff --git a/modular_skyrat/modules/modular_items/code/summon_beacon.dm b/modular_nova/modules/modular_items/code/summon_beacon.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/summon_beacon.dm
rename to modular_nova/modules/modular_items/code/summon_beacon.dm
diff --git a/modular_skyrat/modules/modular_items/code/tailoring.dm b/modular_nova/modules/modular_items/code/tailoring.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/tailoring.dm
rename to modular_nova/modules/modular_items/code/tailoring.dm
diff --git a/modular_skyrat/modules/modular_items/code/thieving_gloves.dm b/modular_nova/modules/modular_items/code/thieving_gloves.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/code/thieving_gloves.dm
rename to modular_nova/modules/modular_items/code/thieving_gloves.dm
diff --git a/modular_skyrat/modules/modular_items/icons/artefacts.dmi b/modular_nova/modules/modular_items/icons/artefacts.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/artefacts.dmi
rename to modular_nova/modules/modular_items/icons/artefacts.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/cross_left.dmi b/modular_nova/modules/modular_items/icons/cross_left.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/cross_left.dmi
rename to modular_nova/modules/modular_items/icons/cross_left.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/cross_right.dmi b/modular_nova/modules/modular_items/icons/cross_right.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/cross_right.dmi
rename to modular_nova/modules/modular_items/icons/cross_right.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/crucifix.dmi b/modular_nova/modules/modular_items/icons/crucifix.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/crucifix.dmi
rename to modular_nova/modules/modular_items/icons/crucifix.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/modular_glasses.dmi b/modular_nova/modules/modular_items/icons/modular_glasses.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/modular_glasses.dmi
rename to modular_nova/modules/modular_items/icons/modular_glasses.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi b/modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/modular_glasses_mob.dmi
rename to modular_nova/modules/modular_items/icons/modular_glasses_mob.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/pastries.dmi b/modular_nova/modules/modular_items/icons/pastries.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/pastries.dmi
rename to modular_nova/modules/modular_items/icons/pastries.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/storage.dmi b/modular_nova/modules/modular_items/icons/storage.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/storage.dmi
rename to modular_nova/modules/modular_items/icons/storage.dmi
diff --git a/modular_skyrat/modules/modular_items/icons/tools.dmi b/modular_nova/modules/modular_items/icons/tools.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/icons/tools.dmi
rename to modular_nova/modules/modular_items/icons/tools.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/clothing_pref_check.dm b/modular_nova/modules/modular_items/lewd_items/code/clothing_pref_check.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/clothing_pref_check.dm
rename to modular_nova/modules/modular_items/lewd_items/code/clothing_pref_check.dm
diff --git a/modular_nova/modules/modular_items/lewd_items/code/decals.dm b/modular_nova/modules/modular_items/lewd_items/code/decals.dm
new file mode 100644
index 00000000000..f84ce7d15c4
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/decals.dm
@@ -0,0 +1,15 @@
+/obj/effect/decal/cleanable/cum
+ name = "cum"
+ desc = "Ew... Gross."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
+ icon_state = "cum_1"
+ random_icon_states = list("cum_1", "cum_2", "cum_3", "cum_4")
+ beauty = -50
+
+/obj/effect/decal/cleanable/cum/femcum
+ name = "female cum"
+ desc = "Uhh... Someone had fun..."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
+ icon_state = "femcum_1"
+ random_icon_states = list("femcum_1", "femcum_2", "femcum_3", "femcum_4")
+ beauty = -50
diff --git a/modular_nova/modules/modular_items/lewd_items/code/emote.dm b/modular_nova/modules/modular_items/lewd_items/code/emote.dm
new file mode 100644
index 00000000000..8214049fbab
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/emote.dm
@@ -0,0 +1,40 @@
+/datum/emote
+ /// If we should check a preference for this emote
+ var/pref_to_check
+
+/datum/emote/living/lewd
+ pref_to_check = /datum/preference/toggle/erp
+
+// Can we play this emote to viewers?
+/datum/emote/proc/pref_check_emote(mob/user)
+ if(isnull(pref_to_check))
+ return TRUE
+ if(!user.client?.prefs.read_preference(pref_to_check))
+ return FALSE
+
+/datum/emote/living/lewd/can_run_emote(mob/living/carbon/user, status_check = TRUE, intentional)
+ return ..() && user.client?.prefs?.read_preference(pref_to_check)
+
+/datum/emote/living/lewd/lewdmoan
+ key = "lewdmoan"
+ key_third_person = "lewdmoans"
+ message = "moans lewdly!"
+ emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE
+ vary = TRUE
+ sound_volume = 35
+
+/datum/emote/living/lewd/lewdmoan/get_sound(mob/living/carbon/user)
+ if(!istype(user))
+ return
+
+ if(user.gender == MALE)
+ return pick('modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg',
+
+ )
+ else
+ return pick('modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg',
+ )
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/arousal.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
similarity index 91%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
index 5b68422ea65..3c98e233130 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/climax.dm
@@ -42,13 +42,13 @@
switch(gender)
if(MALE)
- play_lewd_sound(get_turf(src), pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds)
+ play_lewd_sound(get_turf(src), pick('modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds)
if(FEMALE)
- play_lewd_sound(get_turf(src), pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds)
+ play_lewd_sound(get_turf(src), pick('modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg'), 50, TRUE, pref_to_check = /datum/preference/toggle/erp/sounds)
var/self_orgasm = FALSE
var/self_their = p_their()
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/mood_events.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pain.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/pleasure.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/aroused.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/climax.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/fluid_generation.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/ropebunny.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_arousal/status_effects/spank_related.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/bottles.dm
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm
new file mode 100644
index 00000000000..52825068e98
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm
@@ -0,0 +1,34 @@
+/obj/item/reagent_containers/pill/crocin
+ name = "crocin pill (10u)"
+ desc = "I've fallen, and I can't get it up!"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
+ icon_state = "crocin"
+ list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 10)
+
+/obj/item/reagent_containers/pill/hexacrocin
+ name = "hexacrocin pill (10u)"
+ desc = "Pill in creepy heart form."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
+ icon_state = "hexacrocin"
+ list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin/hexacrocin = 10)
+
+/obj/item/reagent_containers/pill/dopamine
+ name = "dopamine pill (5u)"
+ desc = "Feelings of orgasm, contained in a pill... Weird."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
+ icon_state = "dopamine"
+ list_reagents = list(/datum/reagent/drug/aphrodisiac/dopamine = 5)
+
+/obj/item/reagent_containers/pill/camphor
+ name = "camphor pill (10u)"
+ desc = "For the early bird."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
+ icon_state = "camphor"
+ list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor = 10)
+
+/obj/item/reagent_containers/pill/pentacamphor
+ name = "pentacamphor pill (10u)"
+ desc = "The chemical equivalent of horny jail."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
+ icon_state = "pentacamphor"
+ list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor/pentacamphor = 10)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/mood_events.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_aphrodisiac.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/_chemical_reaction.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/breast_milk.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/camphor.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/crocin.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/cum.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/dopamine.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/hexacrocin.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/incubus_draft.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/pentacamphor.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_chemistry/reagents/succubus_milk.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm
similarity index 83%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm
index ea1e10de656..450f84d6501 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/ballgag.dm
@@ -5,11 +5,11 @@
icon_state = "ballgag"
inhand_icon_state = "ballgag"
worn_icon_state = "ballgag"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
greyscale_config = /datum/greyscale_config/ballgag
greyscale_config_worn = /datum/greyscale_config/ballgag/worn
greyscale_config_inhand_left = /datum/greyscale_config/ballgag/left_hand
@@ -34,10 +34,10 @@
var/moans_alt_probability = 5
/// Sounds that the player makes when they try to speak.
- var/list/moan_sounds = list('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg')
+ var/list/moan_sounds = list('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg')
/// How loud the moan audio is
var/moan_volume = 50
/// How loud are these moan-noises if we're choking on it?
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm
similarity index 93%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm
index 6a8f8a37c58..9748c66dabc 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/bdsm_mask.dm
@@ -9,9 +9,9 @@
/obj/item/clothing/mask/gas/bdsm_mask
name = "latex gasmask"
desc = "A toned gas mask that completely muffles the wearer. Wearing this makes breathing a lot difficult."
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
icon_state = "mask_pink_off"
base_icon_state = "mask"
slot_flags = ITEM_SLOT_MASK
@@ -49,10 +49,10 @@
for(button in src.actions)
if(istype(button, /datum/action/item_action/toggle_breathcontrol))
button.button_icon_state = "[current_mask_color]_switch_[mask_on? "on" : "off"]"
- button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
if(istype(button, /datum/action/item_action/mask_inhale))
button.button_icon_state = "[current_mask_color]_breath"
- button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
update_icon()
/obj/item/clothing/mask/gas/bdsm_mask/handle_speech(datum/source, list/speech_args)
@@ -60,10 +60,10 @@
return
speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans)
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1)
// Create radial menu
/obj/item/clothing/mask/gas/bdsm_mask/proc/populate_mask_designs()
@@ -309,7 +309,7 @@
/obj/item/reagent_containers/cup/lewd_filter
name = "gasmask filter"
desc = "A strange looking air filter. It may not be a good idea to breathe this in..."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
icon_state = "filter_pink"
unique_reskin = list("pink" = "filter_pink",
"teal" = "filter_teal")
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
new file mode 100644
index 00000000000..c7f195274f4
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
@@ -0,0 +1,39 @@
+#define TIGHT_SLOWDOWN 2
+
+/obj/item/clothing/suit/corset
+ name = "corset"
+ desc = "A tight latex corset. How can anybody fit in THAT?"
+ icon_state = "corset"
+ inhand_icon_state = null
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
+ body_parts_covered = CHEST
+ slowdown = 1 // You can't run with that thing literally squeezing your chest
+
+ /// Has it been laced tightly?
+ var/laced_tight = FALSE
+
+/obj/item/clothing/suit/corset/AltClick(mob/user)
+ laced_tight = !laced_tight
+ to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe."))
+ play_lewd_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE)
+ if(laced_tight)
+ slowdown = TIGHT_SLOWDOWN
+ return
+ slowdown = initial(slowdown)
+
+/obj/item/clothing/suit/corset/equipped(mob/living/carbon/human/user, slot)
+ . = ..()
+ if(laced_tight && src == user.wear_suit)
+ to_chat(user, span_purple("The corset squeezes tightly against your ribs! Breathing suddenly feels much more difficult."))
+
+/obj/item/clothing/suit/corset/dropped(mob/living/carbon/human/user)
+ . = ..()
+ if(laced_tight && src == user.wear_suit)
+ to_chat(user, span_purple("Phew. Now you can breathe normally."))
+
+#undef TIGHT_SLOWDOWN
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm
similarity index 90%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm
index a6188a546e4..ba06f9e9e7c 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/deprivation_helmet.dm
@@ -4,11 +4,11 @@
icon_state = "dephelmet_pink"
base_icon_state = "dephelmet"
inhand_icon_state = "dephelmet_pinkn"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT|HIDEFACIALHAIR
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
body_parts_covered = HEAD
@@ -150,13 +150,13 @@
for(action_button in src.actions)
if(istype(action_button, /datum/action/item_action/toggle_vision))
action_button.button_icon_state = "[current_helmet_color]_blind"
- action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
if(istype(action_button, /datum/action/item_action/toggle_hearing))
action_button.button_icon_state = "[current_helmet_color]_deaf"
- action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
if(istype(action_button, /datum/action/item_action/toggle_speech))
action_button.button_icon_state = "[current_helmet_color]_mute"
- action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
update_icon()
// To check if we can change helmet's model
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm
new file mode 100644
index 00000000000..3415866e3af
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm
@@ -0,0 +1,19 @@
+/obj/item/clothing/head/domina_cap
+ name = "dominant cap"
+ desc = "For special types of inspections."
+ icon_state = "dominacap"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi'
+ supports_variations_flags = NONE
+
+//message when equipping that thing
+/obj/item/clothing/head/domina_cap/equipped(mob/living/carbon/user, slot)
+ . = ..()
+ if(src == user.head)
+ to_chat(user, span_purple("You feel much more determined."))
+
+//message when unequipping that thing
+/obj/item/clothing/head/domina_cap/dropped(mob/living/carbon/user)
+ . = ..()
+ if(src == user.head)
+ to_chat(user, span_purple("BDSM session ended, huh?"))
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
similarity index 88%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
index be2bf45291f..7370acf8aa3 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/erp_belt.dm
@@ -1,10 +1,10 @@
/obj/item/storage/belt/erpbelt
name = "leather belt"
desc = "Used to hold sex toys. Looks pretty good."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
icon_state = "erpbelt"
inhand_icon_state = "erpbelt"
worn_icon_state = "erpbelt"
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
similarity index 93%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
index 554cfab890c..95614450762 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/hypnogoggles.dm
@@ -4,10 +4,10 @@
icon_state = "hypnogoggles_pink"
base_icon_state = "hypnogoggles"
inhand_icon_state = "hypnogoggles_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
/// If the color of the goggles have been changed before.
var/color_changed = FALSE
/// Current color of the goggles, can change and affects sprite
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm
similarity index 91%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm
index aa8ff23f1b6..ecaea655802 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kink_collars.dm
@@ -29,8 +29,8 @@
/obj/item/clothing/neck/kink_collar
name = "collar"
desc = "A nice, tight collar. It fits snug to your skin"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
icon_state = "collar_cyan"
body_parts_covered = NECK
slot_flags = ITEM_SLOT_NECK
@@ -86,8 +86,8 @@
/obj/item/clothing/neck/kink_collar/locked
name = "locked collar"
desc = "A tight collar. It appears to have some kind of lock."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
icon_state = "lock_collar_cyan"
treat_path = /obj/item/key/kink_collar
/// If the collar is currently locked
@@ -173,7 +173,7 @@
/obj/item/key/kink_collar
name = "kink collar key"
desc = "A key for a tiny lock on a collar or bag."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
icon_state = "collar_key_metal"
base_icon_state = "collar_key"
/// The name inscribed on the key
@@ -258,9 +258,9 @@
/obj/item/mind_controller
name = "mind controller"
desc = "A small remote for sending basic emotion patterns to a collar."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
icon_state = "mindcontroller"
/// Reference to the mind control collar
var/obj/item/clothing/neck/mind_collar/collar = null
@@ -285,8 +285,8 @@
/obj/item/clothing/neck/mind_collar
name = "mind collar"
desc = "A tight collar. It has some strange high-tech emitters on the side."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
icon_state = "mindcollar"
inhand_icon_state = null
/// Reference to the mind control remote
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm
similarity index 84%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm
index 40a716f3175..fa9d37556da 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_blindfold.dm
@@ -4,10 +4,10 @@
icon_state = "kblindfold_pink"
base_icon_state = "kblindfold"
inhand_icon_state = "kblindfold_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
/// IF the color has been changed before
var/color_changed = FALSE
/// Current color of the blindfold. Can be changed and affect sprite
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm
similarity index 89%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm
index eb4ed5bf142..cdf69a92bf2 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_headphones.dm
@@ -4,8 +4,8 @@
icon_state = "kinkphones_pink_off"
base_icon_state = "kinkphones"
inhand_icon_state = "kinkphones_pink_off"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi'
strip_delay = 15
custom_price = PAYCHECK_CREW * 2
/// If the headphones are on or off
@@ -18,8 +18,8 @@
var/static/list/kinkphones_designs
actions_types = list(/datum/action/item_action/toggle_kinky_headphones)
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
//create radial menu
/obj/item/clothing/ears/kinky_headphones/proc/populate_kinkphones_designs()
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm
similarity index 88%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm
index 2f1588738cb..e874cdc9f89 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/kinky_sleepbag.dm
@@ -1,12 +1,12 @@
/obj/item/clothing/suit/straight_jacket/kinky_sleepbag
name = "latex sleeping bag"
desc = "A tight sleeping bag made of a shiny material. It would be dangerous to put it on yourself."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi'
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
icon_state = "sleepbag_pink_deflated_folded"
base_icon_state = "sleepbag"
@@ -19,7 +19,7 @@
var/time_to_sound_left
var/tt
var/static/list/bag_colors
- flags_inv = HIDEHEADGEAR|HIDENECK|HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESUITSTORAGE|HIDEHAIR|HIDESEXTOY|HIDETAIL // SKYRAT EDIT ADDITION - HIDETAIL
+ flags_inv = HIDEHEADGEAR|HIDENECK|HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESUITSTORAGE|HIDEHAIR|HIDESEXTOY|HIDETAIL // NOVA EDIT ADDITION - HIDETAIL
strip_delay = 300
breakouttime = 1200 //do not touch. First - It's contraband item, Second - It's damn expensive, Third - it's ERP item, so you can't legally use it on characters without enabled non-con or erp pref.
var/static/list/bag_inf_states
@@ -132,7 +132,7 @@
/obj/item/clothing/suit/straight_jacket/kinky_sleepbag/proc/fold(mob/user, src)
bag_fold = !bag_fold
- play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
+ play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
if(bag_fold == TRUE)
w_class = WEIGHT_CLASS_SMALL
slot_flags = NONE
@@ -182,7 +182,7 @@
/obj/item/clothing/suit/straight_jacket/kinky_sleepbag/process(seconds_per_tick)
if(time_to_sound_left <= 0)
if(tt <= 0)
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 100, TRUE)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 100, TRUE)
tt = rand(15, 35) //to do random funny sounds when character inside that thing.
else
tt -= seconds_per_tick
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm
new file mode 100644
index 00000000000..005764ac8d7
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm
@@ -0,0 +1,84 @@
+/obj/item/clothing/under/misc/latex_catsuit
+ name = "latex catsuit"
+ desc = "A shiny uniform that fits snugly to the skin."
+ icon_state = "latex_catsuit_female"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
+ inhand_icon_state = "latex_catsuit"
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ equip_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg'
+ can_adjust = FALSE
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ strip_delay = 80
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
+ var/mutable_appearance/breasts_overlay
+ var/mutable_appearance/breasts_icon_overlay
+
+//this fragment of code makes unequipping not instant
+/obj/item/clothing/under/misc/latex_catsuit/attack_hand(mob/user)
+ if(iscarbon(user))
+ var/mob/living/carbon/human/affected_human = user
+ if(src == affected_human.w_uniform)
+ if(!do_after(affected_human, 60, target = src))
+ return
+ . = ..()
+
+// //some gender identification magic
+/obj/item/clothing/under/misc/latex_catsuit/equipped(mob/living/affected_mob, slot)
+ . = ..()
+ var/mob/living/carbon/human/affected_human = affected_mob
+ var/obj/item/organ/external/genital/breasts/affected_breasts = affected_human.get_organ_slot(ORGAN_SLOT_BREASTS)
+ if(src == affected_human.w_uniform)
+ if(affected_mob.gender == FEMALE)
+ icon_state = "latex_catsuit_female"
+ else
+ icon_state = "latex_catsuit_male"
+
+ affected_mob.update_worn_undersuit()
+
+ breasts_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none")
+ update_overlays()
+
+ //Breasts overlay for catsuit
+ if(affected_breasts?.genital_size >= 6 || affected_breasts?.genital_type == "pair")
+ breasts_overlay.icon_state = "breasts_double"
+ breasts_icon_overlay.icon_state = "iconbreasts_double"
+ accessory_overlay = breasts_overlay
+ add_overlay(breasts_icon_overlay)
+ update_overlays()
+ if(affected_breasts?.genital_type == "quad")
+ breasts_overlay.icon_state = "breasts_quad"
+ breasts_icon_overlay.icon_state = "iconbreasts_quad"
+ accessory_overlay = breasts_overlay
+ add_overlay(breasts_icon_overlay)
+ update_overlays()
+ if(affected_breasts?.genital_type == "sextuple")
+ breasts_overlay.icon_state = "breasts_sextuple"
+ breasts_icon_overlay.icon_state = "iconbreasts_sextuple"
+ accessory_overlay = breasts_overlay
+ add_overlay(breasts_icon_overlay)
+ update_overlays()
+
+ affected_human.regenerate_icons()
+
+/obj/item/clothing/under/misc/latex_catsuit/dropped(mob/living/affected_mob)
+ . = ..()
+ accessory_overlay = null
+ breasts_overlay.icon_state = "none"
+ cut_overlay(breasts_icon_overlay)
+ breasts_icon_overlay.icon_state = "none"
+
+//Plug to bypass the bug with instant suit equip/drop
+/obj/item/clothing/under/misc/latex_catsuit/MouseDrop(atom/over_object)
+
+/obj/item/clothing/under/misc/latex_catsuit/Initialize(mapload)
+ . = ..()
+ breasts_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none", ABOVE_MOB_LAYER)
+ breasts_overlay.icon_state = ORGAN_SLOT_BREASTS
+ breasts_icon_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi', "none")
+ breasts_icon_overlay.icon_state = ORGAN_SLOT_BREASTS
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm
new file mode 100644
index 00000000000..0533b111c78
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm
@@ -0,0 +1,49 @@
+/obj/item/clothing/suit/straight_jacket/latex_straight_jacket
+ name = "latex straight jacket"
+ desc = "A toy that is unable to actually restrain anyone. Still fun to wear!"
+ inhand_icon_state = "latex_straight_jacket"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
+ icon_state = "latex_straight_jacket"
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS
+ flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
+ clothing_flags = DANGEROUS_OBJECT
+ equip_delay_self = NONE
+ strip_delay = 12 SECONDS
+ breakouttime = 1 SECONDS
+
+/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/attackby(obj/item/attacking_item, mob/user, params) //That part allows reinforcing this item with normal straightjacket
+ if(!istype(attacking_item, /obj/item/clothing/suit/straight_jacket))
+ return ..()
+ var/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced/reinforced_jacket = new()
+ remove_item_from_storage(user)
+ user.put_in_hands(reinforced_jacket)
+ to_chat(user, span_notice("You reinforce the belts on [src] with [attacking_item]."))
+ qdel(attacking_item)
+ qdel(src)
+
+/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced
+ name = "latex straight jacket"
+ desc = "A suit that completely restrains the wearer - in quite an arousing way."
+ icon_state = "latex_straight_jacket"
+ inhand_icon_state = "latex_straight_jacket"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS
+ flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
+ clothing_flags = DANGEROUS_OBJECT
+ equip_delay_self = NONE
+ strip_delay = 12 SECONDS
+ breakouttime = 300 SECONDS
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm
new file mode 100644
index 00000000000..6931f313ea3
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm
@@ -0,0 +1,11 @@
+/obj/item/clothing/glasses/nice_goggles
+ name = "surprisingly nice looking goggles"
+ desc = "It has an inscription engraved on the handle. Kubic. How strange."
+ icon_state = "nice_goggles"
+ inhand_icon_state = "nice_goggles"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+
+//that's all folks. Nothing superfunctional here.
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm
new file mode 100644
index 00000000000..aa373549e35
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm
@@ -0,0 +1,45 @@
+//normal ball mittens
+/obj/item/clothing/gloves/ball_mittens
+ name = "ball mittens"
+ desc = "A nice, comfortable pair of inflatable ball gloves."
+ icon_state = "ballmittens"
+ inhand_icon_state = null
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
+ breakouttime = 1 SECONDS
+
+//That part allows reinforcing this item with handcuffs
+/obj/item/clothing/gloves/ball_mittens/attackby(obj/item/attacking_item, mob/user, params)
+ . = ..()
+ if(.)
+ return
+ if(!istype(attacking_item, /obj/item/restraints/handcuffs))
+ return
+ var/obj/item/clothing/gloves/ball_mittens_reinforced/reinforced_muffs = new
+ remove_item_from_storage(user)
+ user.put_in_hands(reinforced_muffs)
+ to_chat(user, span_notice("You reinforced the belts on [src] with [attacking_item]."))
+ qdel(attacking_item)
+ qdel(src)
+ return TRUE
+
+//ball_mittens reinforced
+/obj/item/clothing/gloves/ball_mittens_reinforced //We getting this item by using handcuffs on normal ball mittens
+ name = "reinforced ball mittens"
+ desc = "Do not put these on, it's REALLY hard to take them off! But they look so comfortable..."
+ icon_state = "ballmittens"
+ inhand_icon_state = null
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
+ clothing_flags = DANGEROUS_OBJECT
+ breakouttime = 100 SECONDS //do not touch this, i beg you.
+
+//latex gloves
+/obj/item/clothing/gloves/latex_gloves
+ name = "latex gloves"
+ desc = "Awesome looking gloves that are satisfying to the touch."
+ icon_state = "latexgloves"
+ inhand_icon_state = "latex_gloves"
+ w_class = WEIGHT_CLASS_SMALL
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm
new file mode 100644
index 00000000000..e958d7594b9
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm
@@ -0,0 +1,115 @@
+/obj/item/clothing/under/costume/lewdmaid
+ name = "latex maid costume"
+ desc = "A maid costume made of a thick latex."
+ icon_state = "lewdmaid"
+ inhand_icon_state = "lewdmaid"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ body_parts_covered = CHEST
+ can_adjust = FALSE
+
+/obj/item/clothing/accessory/lewdapron
+ name = "shiny maid apron"
+ desc = "The best part of a maid costume. Now with different colors!"
+ icon_state = "lewdapron_pink"
+ base_icon_state = "lewdapron"
+ inhand_icon_state = "lewdapron_pink"
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ minimize_when_attached = FALSE
+ attachment_slot = null
+ /// If the color has been changed before
+ var/color_changed = FALSE
+ /// Current color of the apron, can change and affects sprite
+ var/current_color = "red"
+ /// List of all apron designs, used in selecting one in the radial menu
+ var/static/list/apron_designs
+
+/obj/item/clothing/under/costume/lewdmaid/Initialize(mapload)
+ . = ..()
+ var/obj/item/clothing/accessory/lewdapron/apron_accessory = new(src)
+ attach_accessory(apron_accessory)
+
+/// create radial menu
+/obj/item/clothing/accessory/lewdapron/proc/populate_apron_designs()
+ apron_designs = list(
+ "red" = image (icon = src.icon, icon_state = "lewdapron_red"),
+ "green" = image (icon = src.icon, icon_state = "lewdapron_green"),
+ "pink" = image (icon = src.icon, icon_state = "lewdapron_pink"),
+ "teal" = image(icon = src.icon, icon_state = "lewdapron_teal"),
+ "yellow" = image (icon = src.icon, icon_state = "lewdapron_yellow"))
+
+//to change model
+/obj/item/clothing/accessory/lewdapron/AltClick(mob/user)
+ if(color_changed)
+ return
+ . = ..()
+ if(.)
+ return
+ var/choice = show_radial_menu(user, src, apron_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE)
+ if(!choice)
+ return FALSE
+ current_color = choice
+ update_icon()
+ color_changed = TRUE
+
+/// to check if we can change kinkphones's model
+/obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ return TRUE
+
+/obj/item/clothing/accessory/lewdapron/Initialize(mapload)
+ AddElement(/datum/element/update_icon_updates_onmob)
+ if(!length(apron_designs))
+ populate_apron_designs()
+ update_icon_state()
+ update_icon()
+ . = ..()
+
+/obj/item/clothing/accessory/lewdapron/update_icon_state()
+ . = ..()
+ icon_state = icon_state = "[initial(base_icon_state)]_[current_color]"
+ inhand_icon_state = "[initial(base_icon_state)]_[current_color]"
+
+/obj/item/clothing/under/costume/lewdmaid/attach_accessory(obj/item/attack_item)
+ . = ..()
+ var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1]
+ var/accessory_color = prime_accessory.icon_state
+ accessory_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[accessory_color]", ABOVE_MOB_LAYER + 0.1)
+ accessory_overlay.alpha = prime_accessory.alpha
+ accessory_overlay.color = prime_accessory.color
+ if(!ishuman(loc))
+ return TRUE
+ var/mob/living/carbon/human/wearer = loc
+ wearer.update_worn_undersuit()
+ wearer.update_worn_oversuit()
+ wearer.fan_hud_set_fandom()
+ return TRUE
+
+//Not a maid, yeah. I dont care, it's going with the other lewd stuff, and there WONT be a whole new file just for it.
+/obj/item/clothing/under/costume/bunnylewd
+ name = "bunny suit"
+ desc = "Makes the wearer more attractive, even men."
+ icon_state = "bunnysuit"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ body_parts_covered = CHEST|GROIN
+ can_adjust = TRUE
+ alt_covers_chest = FALSE
+
+/obj/item/clothing/under/costume/bunnylewd/white
+ name = "white bunny suit"
+ icon_state = "whitebunnysuit"
+ can_adjust = FALSE
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm
new file mode 100644
index 00000000000..923fed3e198
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm
@@ -0,0 +1,37 @@
+//heels item
+/obj/item/clothing/shoes/latex_heels
+ name = "latex heels"
+ desc = "Lace up before use. It's pretty difficult to walk in these."
+ icon_state = "latexheels"
+ inhand_icon_state = null
+ // We really need to find a way to condense there.
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
+
+/obj/item/clothing/shoes/latex_heels/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/squeak, list('modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
+
+/obj/item/clothing/shoes/latex_heels/domina_heels
+ name = "dominant heels"
+ desc = "A pair of aesthetically pleasing heels."
+ icon_state = "dominaheels"
+
+/*
+* LATEX SOCKS
+*/
+
+/obj/item/clothing/shoes/latex_socks
+ name = "latex socks"
+ desc = "A pair of shiny, split-toe socks made of some strange material."
+ icon_state = "latexsocks"
+ inhand_icon_state = null
+ w_class = WEIGHT_CLASS_SMALL
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm
similarity index 85%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm
index e062af59494..19cc73b9cc2 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shackles.dm
@@ -2,12 +2,12 @@
name = "shackles"
desc = "Fancy shackles with a fake lock."
inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
icon_state = "shackles_metal"
base_icon_state = "shackles"
body_parts_covered = null//they don't cover anything, but these code parts need to be here, because if they are not here - they make clothing disappear. Magic.
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm
similarity index 90%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm
index 3de778f7da6..4a60e0eb75f 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_hands.dm
@@ -2,8 +2,8 @@
name = "shibari arms bondage"
desc = "Bondage ropes that cover arms."
icon_state = "shibari_arms"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
body_parts_covered = NONE
//strip_delay = 100
breakouttime = 5 SECONDS
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm
similarity index 89%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm
index 08c3afb6d27..136ee619ad4 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_legs.dm
@@ -2,9 +2,9 @@
name = "shibari legs bondage"
desc = "Bondage ropes that cover legs."
icon_state = "shibari_legs"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
body_parts_covered = NONE
strip_delay = 100
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shibari_worn_uniform.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm
similarity index 94%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm
index 63ddfd330ba..0c456b964a6 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/shockcollar.dm
@@ -1,8 +1,8 @@
/obj/item/electropack/shockcollar
name = "shock collar"
desc = "A reinforced metal collar. It has some sort of wiring near the front."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
icon_state = "shockcollar"
inhand_icon_state = null
body_parts_covered = NECK
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm
similarity index 81%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm
index ec2fc7c0d9b..4df36c2384d 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/strapon.dm
@@ -3,8 +3,8 @@
desc = "Sometimes you need a special way to humiliate someone."
icon_state = "strapon_human"
base_icon_state = "strapon"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
slot_flags = ITEM_SLOT_BELT
var/in_hands = FALSE
var/type_changed = FALSE
@@ -102,7 +102,7 @@
/obj/item/clothing/strapon/proc/update_mob_action_buttonss()
for(var/datum/action/item_action/take_strapon/action_button in actions_types)
action_button.button_icon_state = "dildo_[strapon_type]"
- action_button.button_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ action_button.button_icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
update_icon()
//button stuff
@@ -123,7 +123,7 @@
to_chat(user, span_warning("You need to put the strapon around your waist before you can use it!"))
/obj/item/clothing/strapon/proc/toggle(mob/living/carbon/human/user)
- play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
+ play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
var/obj/item/held = user.get_active_held_item()
var/obj/item/unheld = user.get_inactive_held_item()
@@ -169,7 +169,7 @@
/obj/item/strapon_dildo
name = "strapon"
desc = "An item with which to be menacing and merciless."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
icon_state = "dildo_human"
base_icon_state = "dildo"
inhand_icon_state = "nothing"
@@ -208,12 +208,12 @@
if(prob(40))
hit_mob.try_lewd_autoemote(pick("twitch_s", "moan"))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 60, TRUE)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 60, TRUE)
else
to_chat(user, span_danger("[hit_mob]'s groin is covered!"))
return
@@ -230,12 +230,12 @@
if(prob(70))
hit_mob.try_lewd_autoemote(pick("gasp", "moan"))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 40, TRUE)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 40, TRUE)
else
to_chat(user, span_danger("[hit_mob]'s mouth is covered!"))
@@ -249,12 +249,12 @@
if(prob(60))
hit_mob.try_lewd_autoemote(pick("twitch_s", "moan", "shiver"))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE)
else
to_chat(user, span_danger("[hit_mob]'s anus is covered!"))
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm
new file mode 100644
index 00000000000..4b027fde858
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm
@@ -0,0 +1,28 @@
+/obj/item/clothing/under/stripper_outfit
+ name = "stripper outfit"
+ desc = "An item of clothing that leaves little to the imagination."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
+ worn_icon_digi = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
+ worn_icon_taur_snake = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
+ worn_icon_taur_paw = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
+ worn_icon_taur_hoof = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
+ can_adjust = FALSE
+ icon_state = "stripper_cyan"
+ inhand_icon_state = "b_suit"
+ unique_reskin = list("Cyan" = "stripper_cyan",
+ "Yellow" = "stripper_yellow",
+ "Green" = "stripper_green",
+ "Red" = "stripper_red",
+ "Latex" = "stripper_latex",
+ "Orange" = "stripper_orange",
+ "White" = "stripper_white",
+ "Purple" = "stripper_purple",
+ "Black" = "stripper_black",
+ "Black-teal" = "stripper_tealblack")
+
+/obj/item/clothing/under/stripper_outfit/AltClick(mob/user)
+ . = ..()
+ if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY))
+ reskin_obj(user)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/appearance.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/carbon.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/human.dm
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm
new file mode 100644
index 00000000000..6107aa7aa1f
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm
@@ -0,0 +1,62 @@
+/*
+* Looping sound for vibrating stuff
+*/
+
+/datum/looping_sound/lewd/vibrator
+ start_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
+ start_length = 1
+ mid_sounds = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
+ mid_length = 1
+ end_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
+ falloff_distance = 1
+ falloff_exponent = 5
+ extra_range = SILENCED_SOUND_EXTRARANGE
+ ignore_walls = FALSE
+
+/datum/looping_sound/lewd/vibrator/low
+ volume = 80
+
+/datum/looping_sound/lewd/vibrator/medium
+ volume = 90
+
+/datum/looping_sound/lewd/vibrator/high
+ volume = 100
+
+/*
+* Dancing pole code.
+*/
+
+/atom
+ var/pseudo_z_axis
+
+/atom/proc/get_fake_z()
+ return pseudo_z_axis
+
+/obj/structure/table
+ pseudo_z_axis = 8
+
+/turf/open/get_fake_z()
+ var/objschecked
+ for(var/obj/structure/structurestocheck in contents)
+ objschecked++
+ if(structurestocheck.pseudo_z_axis)
+ return structurestocheck.pseudo_z_axis
+ if(objschecked >= 25)
+ break
+ return pseudo_z_axis
+
+/mob/living/Move(atom/newloc, direct)
+ . = ..()
+ if(.)
+ pseudo_z_axis = newloc.get_fake_z()
+ pixel_z = pseudo_z_axis
+
+/// Used to add a cum decal to the floor while transferring viruses and DNA to it
+/mob/living/proc/add_cum_splatter_floor(turf/the_turf, female = FALSE)
+ if(!the_turf)
+ the_turf = get_turf(src)
+
+ var/selected_type = female ? /obj/effect/decal/cleanable/cum/femcum : /obj/effect/decal/cleanable/cum
+ var/atom/stain = new selected_type(the_turf, get_static_viruses())
+
+ stain.transfer_mob_blood_dna(src) //I'm not adding a new forensics category for cumstains
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/organs.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/pref_checking.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/sounds.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_helpers/species.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_erp_disabled_item_enforcement.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_kits.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_kits.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_kits.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_kits.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_masturbation_item.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
similarity index 86%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
index c4401dfc4cd..2d694898649 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/_sex_toy.dm
@@ -1,9 +1,9 @@
/obj/item/clothing/sextoy
name = "sextoy"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- equip_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg'
- drop_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ equip_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg'
+ drop_sound = 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
/// This is used to decide what lewd slot a toy should be able to be inserted into.
/// The currently accepted defines are all prefixes with LEWD_SLOT_, and there is one for each lewd organ.
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm
similarity index 97%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm
index 13423a26016..100391de360 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/attachable_vibrator.dm
@@ -8,9 +8,9 @@
icon_state = "eggvib_pink_off"
base_icon_state = "eggvib"
inhand_icon_state = "eggvib_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
lewd_slot_flags = LEWD_SLOT_PENIS | LEWD_SLOT_VAGINA | LEWD_SLOT_NIPPLES | LEWD_SLOT_ANUS
clothing_flags = INEDIBLE_CLOTHING
/// Is the toy currently on
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm
similarity index 91%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm
index 7297472b8da..caff7765841 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/buttplug.dm
@@ -4,10 +4,10 @@
icon_state = "buttplug_pink_small"
base_icon_state = "buttplug"
worn_icon_state = "buttplug_pink"
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
lewd_slot_flags = LEWD_SLOT_ANUS | LEWD_SLOT_VAGINA
/// Current color of the toy, can be changed, affects sprite
var/current_color = "pink"
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm
similarity index 78%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm
index 7e7b6dda7ca..aa24175ebef 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/clamps.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/clamps.dm
@@ -4,7 +4,7 @@
name = "nipple clamps"
desc = "For causing nipple pain."
icon_state = "clamps"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
w_class = WEIGHT_CLASS_TINY
lewd_slot_flags = LEWD_SLOT_NIPPLES
/// What kind are the wearer's breasts?
@@ -26,7 +26,7 @@
update_icon_state()
- clamps_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
+ clamps_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
update_icon()
update_appearance()
@@ -52,7 +52,7 @@
update_icon_state()
- clamps_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments
+ clamps_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[initial(icon_state)]_[breast_type]_[breast_size]", ABOVE_ALL_MOB_LAYER + 0.1) //two arguments
update_icon()
update_appearance()
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm
similarity index 93%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm
index 21c2023f198..433bc0379bd 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/condom.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/condom.dm
@@ -9,7 +9,7 @@
desc = "Don't worry, I have protection."
icon_state = "condom_pack_pink"
base_icon_state = "condom_pack"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
w_class = WEIGHT_CLASS_TINY
/// The current color of the condom, can be changed and affects sprite
var/current_color = "pink"
@@ -51,7 +51,7 @@
desc = "I wonder if I can put this over my head..."
icon_state = "condom_pink_unused"
base_icon_state = "condom"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
w_class = WEIGHT_CLASS_TINY
var/current_color = "pink"
var/condom_state = "unused"
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm
similarity index 90%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm
index c7256be1610..e95d4c59fca 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/dildo.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/dildo.dm
@@ -10,9 +10,9 @@
icon_state = "dildo_human"
base_icon_state = "dildo"
inhand_icon_state = "dildo_human"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
/// Current design of the toy, affects sprite and can change
var/current_type = "human"
/// If the design has been changed before
@@ -163,12 +163,12 @@
target.try_lewd_autoemote(pick(possible_emotes))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 100, TRUE)
/*
* COLOUR CHANGING
@@ -194,9 +194,9 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors
icon_state = "polydildo_small"
base_icon_state = "polydildo"
inhand_icon_state = "polydildo_small"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
current_type = null
var/static/list/dildo_sizes = list()
@@ -270,10 +270,10 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors
icon_state = "dildo_double"
inhand_icon_state = "dildo_double"
worn_icon_state = "dildo_side"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
w_class = WEIGHT_CLASS_TINY
lewd_slot_flags = LEWD_SLOT_ANUS | LEWD_SLOT_VAGINA
actions_types = list(/datum/action/item_action/take_dildo)
@@ -389,7 +389,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors
/// Code for taking out/putting away the other end of the toy when one end is in you
/obj/item/clothing/sextoy/dildo/double_dildo/proc/toggle(mob/living/carbon/human/user)
- play_lewd_sound(user, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
+ play_lewd_sound(user, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 40, TRUE)
if(!end_in_hand)
take_in_hand(user)
@@ -419,7 +419,7 @@ GLOBAL_LIST_INIT(dildo_colors, list(//mostly neon colors
/obj/item/clothing/sextoy/dildo/double_dildo_end
name = "dildo side"
desc = "You looking so hot!"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
icon_state = "dildo_side"
inhand_icon_state = null
worn_icon_state = ""
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm
similarity index 86%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm
index 009663ac695..b8460787301 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/discount_card.dm
@@ -4,7 +4,7 @@
desc = "A strange card with a blue lamia on the back." //yes, this is card with my character on the back. Cameo.
icon_state = "lustwish_discount"
inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
w_class = WEIGHT_CLASS_TINY
//code for showing that we have something IlLeGaL
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm
similarity index 92%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm
index 62c586ed834..e0e8e020f10 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/feather.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/feather.dm
@@ -3,9 +3,9 @@
desc = "A rather ticklish feather that can be used in both mirth and malice."
icon_state = "feather"
inhand_icon_state = "feather"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
w_class = WEIGHT_CLASS_TINY
/obj/item/tickle_feather/attack(mob/living/carbon/human/target, mob/living/carbon/human/user)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm
similarity index 80%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm
index 3099ce8c3d2..bd07b118fdc 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/fleshlight.dm
@@ -4,9 +4,9 @@
icon_state = "fleshlight_pink"
base_icon_state = "fleshlight"
inhand_icon_state = "fleshlight_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
w_class = WEIGHT_CLASS_SMALL
/// Current color of the toy, can be changed, affects sprite
var/current_color = "pink"
@@ -77,9 +77,9 @@
target.adjust_arousal(6)
target.adjust_pleasure(9)
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg'), 70, 1, -1)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg'), 70, 1, -1)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm
similarity index 97%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm
index 6e67c51fe34..b08c036fdf2 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/kinky_shocker.dm
@@ -4,9 +4,9 @@
icon_state = "shocker_off"
base_icon_state = "shocker"
inhand_icon_state = "shocker_off"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
w_class = WEIGHT_CLASS_TINY
/// If the shocker is on or not
var/shocker_on = FALSE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm
similarity index 89%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm
index 83ac7d1ca0b..7c0cc7f0dab 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/leather_whip.dm
@@ -7,9 +7,9 @@
worn_icon_state = "leather_whip"
base_icon_state = "leather"
inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
+ worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/mask_muzzled.dmi'
w_class = WEIGHT_CLASS_NORMAL
hitsound = 'sound/weapons/whip.ogg'
clothing_flags = INEDIBLE_CLOTHING
@@ -53,10 +53,10 @@
// Speech handler for moansing when talking
/obj/item/clothing/mask/leatherwhip/handle_speech(datum/source, list/speech_args)
speech_args[SPEECH_MESSAGE] = pick((prob(moans_alt_probability) && LAZYLEN(moans_alt)) ? moans_alt : moans)
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg'), 70, 1, -1)
/// Radial menu helper
/obj/item/clothing/mask/leatherwhip/proc/populate_whip_designs()
@@ -81,7 +81,7 @@
update_icon_state()
- whip_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
+ whip_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
update_icon()
update_appearance()
@@ -137,7 +137,7 @@
update_icon_state()
- whip_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
+ whip_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi', "[base_icon_state]_[current_whip_form]", ABOVE_MOB_LAYER + 0.1) //two arguments. Yes, all mob layer. Fuck person who was working on genitals, they're working wrong.ABOVE_NORMAL_TURF_LAYER
update_icon()
update_appearance()
@@ -221,7 +221,7 @@
target.try_lewd_autoemote(pick("gasp", "choke", "moan"))
target.adjust_arousal(3)
target.adjust_pain(5)
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 80)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 80)
if(BODY_ZONE_PRECISE_GROIN)
targetedsomewhere = TRUE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm
similarity index 89%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm
index 631ae2a0b4d..1d5830b0fac 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/magic_wand.dm
@@ -5,10 +5,10 @@
base_icon_state = "magicwand"
worn_icon_state = "magicwand"
inhand_icon_state = "magicwand"
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
/// What mode the vibrator is on
var/vibration_mode = "off"
/// Looping sound called on process()
@@ -33,7 +33,7 @@
/obj/item/clothing/sextoy/magic_wand/Initialize(mapload)
. = ..()
- magicwand_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "magicwand", ABOVE_MOB_LAYER + 0.1) //two arguments
+ magicwand_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "magicwand", ABOVE_MOB_LAYER + 0.1) //two arguments
update_icon_state()
update_icon()
@@ -158,7 +158,7 @@
target.try_lewd_autoemote(pick("twitch_s", "moan"))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg', (vibration_mode == "low" ? 10 : (vibration_mode == "high" ? 30 : 20)), TRUE, pref_to_check = /datum/preference/toggle/erp/sex_toy_sounds)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg', (vibration_mode == "low" ? 10 : (vibration_mode == "high" ? 30 : 20)), TRUE, pref_to_check = /datum/preference/toggle/erp/sex_toy_sounds)
/obj/item/clothing/sextoy/magic_wand/attack_self(mob/user)
toggle_mode()
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm
new file mode 100644
index 00000000000..bae11183d2c
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm
@@ -0,0 +1,28 @@
+/obj/item/restraints/handcuffs/lewd
+ name = "kinky handcuffs"
+ desc = "Fake handcuffs meant for erotic roleplay."
+ icon_state = "pinkcuffs"
+ inhand_icon_state = "pinkcuffs"
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ worn_icon_state = "pinkcuffs"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ breakouttime = 1 SECONDS
+
+// Additionally, we will process the installation of the desired appearance, to bypass the bug in the general code
+/obj/item/restraints/handcuffs/lewd/apply_cuffs(mob/living/carbon/target, mob/user, dispense = 0)
+ . = ..()
+ src.icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ src.icon_state = "pinkcuffs"
+ src.worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
+ src.worn_icon_state = "pinkcuffs"
+ src.lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ src.righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+
+ // Similar code in general procedures does not correctly set the appearance
+ target.remove_overlay(HANDCUFF_LAYER)
+ if(!target.handcuffed)
+ return
+ target.overlays_standing[HANDCUFF_LAYER] = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "pinkcuffs", -HANDCUFF_LAYER)
+ target.apply_overlay(HANDCUFF_LAYER)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm
similarity index 93%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm
index 2a00fd85f26..4964335cea6 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/serviette.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/serviette.dm
@@ -2,7 +2,7 @@
name = "serviette"
desc = "To clean all the mess."
icon_state = "serviette_clean"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
/// How much time it takes to clean something using it
var/cleanspeed = 5 SECONDS
/// Which item spawns after it's used
@@ -14,7 +14,7 @@
name = "dirty serviette"
desc = "Eww... Throw it in the trash!"
icon_state = "serviette_dirty"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
w_class = WEIGHT_CLASS_TINY
/obj/item/serviette/afterattack(atom/target, mob/user, proximity)
@@ -76,7 +76,7 @@
desc = "I wonder why LustWish makes them..."
icon_state = "serviettepack_4"
base_icon_state = "serviettepack"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
/// A count of how many serviettes are left in the pack
var/number_remaining = 4
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm
similarity index 97%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm
index 612ed54be96..6bfd4aec7f4 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/shibari.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm
@@ -6,7 +6,7 @@
/obj/item/stack/shibari_rope
name = "shibari ropes"
desc = "Coil of bondage ropes."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
icon_state = "shibari_rope"
amount = 1
merge_type = /obj/item/stack/shibari_rope
@@ -317,15 +317,15 @@
switch(tightness)
if(ROPE_TIGHTNESS_HIGH)
tightness = ROPE_TIGHTNESS_LOW
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 25)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 25)
balloon_alert(user, span_notice("You slightly tightened the ropes"))
if(ROPE_TIGHTNESS_LOW)
tightness = ROPE_TIGHTNESS_MED
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 50)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 50)
balloon_alert(user, span_notice("You moderately tightened the ropes"))
if(ROPE_TIGHTNESS_MED)
tightness = ROPE_TIGHTNESS_HIGH
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg', 75)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg', 75)
balloon_alert(user, span_notice("You strongly tightened the ropes"))
#undef ROPE_TIGHTNESS_LOW
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm
similarity index 94%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm
index d5a4b7d77ea..05232987363 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/size_items.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/size_items.dm
@@ -8,8 +8,8 @@
/obj/item/clothing/neck/size_collar
name = "size collar"
desc = "A shiny black collar embeded with technology that allows the user to change their own size."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
icon_state = "collar_black"
/// Have we given the user the warning message yet?
var/warning_given = FALSE
@@ -120,7 +120,7 @@
human_parent.dna.update_body_size()
return TRUE
-/datum/component/temporary_size/Destroy(force, silent)
+/datum/component/temporary_size/Destroy(force)
apply_size(original_size)
UnregisterSignal(parent, COMSIG_ENTER_AREA)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm
similarity index 87%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm
index dcab8ba06e4..4afa7d7e3d6 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/spanking_pad.dm
@@ -4,9 +4,9 @@
icon_state = "spankpad_pink"
base_icon_state = "spankpad"
inhand_icon_state = "spankpad_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
w_class = WEIGHT_CLASS_SMALL
/// Current color, can be changed and affects sprite
var/current_color = "pink"
@@ -82,4 +82,4 @@
if(prob(10) && (target.stat != DEAD))
target.apply_status_effect(/datum/status_effect/subspace)
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg', 100, 1, -1)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg', 100, 1, -1)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm
similarity index 94%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm
index fe0582abea5..3d705a24071 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/torture_candle.dm
@@ -4,9 +4,9 @@
/obj/item/bdsm_candle
name = "soy candle"
desc = "A candle with low melting temperature."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
icon_state = "candle_pink_off"
base_icon_state = "candle"
inhand_icon_state = "candle_pink_off"
@@ -196,8 +196,8 @@
if(prob(50))
attacked.try_lewd_autoemote(pick("twitch_s" , "gasp", "shiver"))
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, pick('modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg'), 70, TRUE)
+ play_lewd_sound(loc, pick('modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg',
+ 'modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg'), 70, TRUE)
#undef CANDLE_LUMINOSITY
#undef PAIN_DEFAULT
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm
similarity index 96%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm
index c8174fe64e5..d12ecba700e 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibrator.dm
@@ -8,9 +8,9 @@
icon_state = "vibrator_pink_off"
base_icon_state = "vibrator"
inhand_icon_state = "vibrator_pink"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
lewd_slot_flags = LEWD_SLOT_VAGINA | LEWD_SLOT_ANUS
/// If the toy is on or not
var/toy_on = FALSE
@@ -167,7 +167,7 @@
if(!targetedsomewhere)
return
user.visible_message(span_purple("[user] [message]!"))
- play_lewd_sound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg', 10, TRUE)
+ play_lewd_sound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg', 10, TRUE)
/obj/item/clothing/sextoy/vibrator/attack_self(mob/user, obj/item/attack_item)
toggle_mode()
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm
similarity index 96%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm
index dd531231d24..986bd04aa2e 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/vibroring.dm
@@ -3,7 +3,7 @@
desc = "A ring toy used to keep your erection going strong."
icon_state = "vibroring_pink_off"
base_icon_state = "vibroring"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
/// If the toy is currently on or not
var/toy_on = FALSE
/// The current color of the toy, cna be changed and affects sprite
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm
new file mode 100644
index 00000000000..48ddc6ae970
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm
@@ -0,0 +1,222 @@
+/obj/machinery/vending/dorms
+ name = "LustWish"
+ desc = "A vending machine with various toys. Not for the faint of heart."
+ icon_state = "lustwish"
+ base_icon_state = "lustwish"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi'
+ light_mask = "lustwish-light-mask"
+ age_restrictions = TRUE
+ ///Has the discount card been used on the vending machine?
+ var/card_used = FALSE
+ product_ads = "Try me!;Kinky!;Lewd and fun!;Hey you, yeah you... wanna take a look at my collection?;Come on, take a look!;Remember, always adhere to Nanotrasen corporate policy!;Don't forget to use protection!"
+ vend_reply = "Enjoy!;We're glad to satisfy your desires!"
+
+ //STUFF SOLD HERE//
+ product_categories = list(
+ list(
+ "name" = "Toys",
+ "icon" = FA_ICON_MAGIC_WAND_SPARKLES,
+ "products" = list(
+ //Sex Toys
+ /obj/item/clothing/sextoy/buttplug = 6,
+ /obj/item/clothing/sextoy/nipple_clamps = 4,
+ /obj/item/clothing/sextoy/eggvib = 8,
+ /obj/item/clothing/sextoy/eggvib/signalvib = 8,
+ /obj/item/assembly/signaler = 8,
+ /obj/item/clothing/sextoy/vibroring = 6,
+
+ //Dildo (Use-on-crotch)
+ /obj/item/clothing/sextoy/dildo = 8,
+ /obj/item/clothing/sextoy/dildo/double_dildo = 3,
+ /obj/item/clothing/sextoy/dildo/custom_dildo = 8,
+ /obj/item/clothing/sextoy/fleshlight = 8,
+ /obj/item/clothing/sextoy/magic_wand = 4,
+ /obj/item/clothing/sextoy/vibrator = 4,
+
+ //belt
+ /obj/item/clothing/strapon = 6,
+
+ //Multi-use
+
+ /obj/item/kinky_shocker = 4,
+ /obj/item/clothing/mask/leatherwhip = 4,
+ /obj/item/bdsm_candle = 4,
+ /obj/item/spanking_pad = 4,
+/obj/item/tickle_feather = 8,
+
+
+ ),
+ ),
+ list(
+ "name" = "Outfits",
+ "icon" = FA_ICON_SHIRT,
+ "products" = list(
+ /obj/item/clothing/under/pants/skyrat/chaps = 4,
+ /obj/item/clothing/under/costume/bunnylewd = 5,
+ /obj/item/clothing/under/costume/bunnylewd/white = 5,
+ /obj/item/clothing/head/costume/rabbitears = 4,//Ears together, right after Bunny Suit.
+ /obj/item/clothing/head/costume/kitty = 4,
+
+ /obj/item/clothing/head/domina_cap = 5,
+ /obj/item/clothing/shoes/latex_heels/domina_heels = 4,
+ /obj/item/clothing/gloves/evening = 5,
+
+ /obj/item/clothing/under/misc/skyrat/gear_harness = 6,//Important "not-nude" outfit
+ /obj/item/clothing/shoes/jackboots/knee = 3,
+
+ /obj/item/clothing/under/misc/latex_catsuit = 8,
+ /obj/item/clothing/gloves/latex_gloves = 8,
+ /obj/item/clothing/shoes/latex_heels = 4,
+ /obj/item/clothing/shoes/latex_socks = 8,
+
+ /obj/item/storage/belt/erpbelt = 5,//Leather Belt, holds a lot of tools.
+
+ /obj/item/clothing/head/costume/skyrat/maid = 5,
+ /obj/item/clothing/under/costume/maid = 5,
+ /obj/item/clothing/under/rank/civilian/janitor/maid = 5,
+ /obj/item/clothing/under/costume/lewdmaid = 5,
+
+ /obj/item/clothing/under/stripper_outfit = 5,
+ /obj/item/clothing/glasses/nice_goggles = 1, //easter egg, don't touch plz
+ ),
+ ),
+ list(
+ "name" = "Restraints",
+ "icon" = FA_ICON_HANDCUFFS,
+ "products" = list(
+ //Sex toys
+ /obj/item/restraints/handcuffs/lewd = 8,
+ /obj/item/stack/shibari_rope/full = 10,
+ /obj/item/stack/shibari_rope/glow/full = 10,
+
+ //clothing facial/head
+ /obj/item/clothing/mask/ballgag = 8,
+ /obj/item/clothing/mask/ballgag/choking = 8,
+ /obj/item/clothing/mask/muzzle/ring = 4,
+ /obj/item/clothing/head/deprivation_helmet = 5,
+ /obj/item/clothing/glasses/blindfold/kinky = 5,
+ /obj/item/clothing/ears/kinky_headphones = 5,
+ /obj/item/clothing/mask/gas/bdsm_mask = 5,
+ /obj/item/reagent_containers/cup/lewd_filter = 5,
+ /obj/item/clothing/glasses/hypno = 4,
+
+ //neck
+ /obj/item/key/collar = 48,
+ /obj/item/clothing/neck/kink_collar = 8,
+ /obj/item/clothing/neck/human_petcollar = 8,
+ /obj/item/clothing/neck/human_petcollar/choker = 8,
+ /obj/item/clothing/neck/human_petcollar/thinchoker = 8,
+ /obj/item/clothing/neck/human_petcollar/locked/bell = 8,
+ /obj/item/clothing/neck/human_petcollar/locked/cow = 8,
+ /obj/item/clothing/neck/human_petcollar/locked/cross = 8,
+ /obj/item/clothing/neck/human_petcollar/locked/spike = 8,
+
+ //torso clothing
+ /obj/item/clothing/suit/straight_jacket/latex_straight_jacket = 5,
+ /obj/item/clothing/suit/straight_jacket/shackles = 4,
+
+ //hands
+ /obj/item/clothing/gloves/ball_mittens = 8,
+ ),
+ ),
+ list(
+ "name" = "Consumables",
+ "icon" = FA_ICON_VIAL,
+ "products" = list(
+ //Sex toys
+ /obj/item/condom_pack = 20,
+ /obj/item/serviette_pack = 10,
+ /obj/item/fancy_pillow = 32,
+
+ //chems
+ /obj/item/reagent_containers/pill/crocin = 20,
+ /obj/item/reagent_containers/pill/camphor = 10,
+ /obj/item/reagent_containers/cup/bottle/crocin = 6,
+ /obj/item/reagent_containers/cup/bottle/camphor = 3,
+ /obj/item/reagent_containers/cup/bottle/succubus_milk = 6, //Those are legal 'cause you can just turn off prefs in round in "CLOWN SMOKE MACHINE+PENIS ENLARGEMENT CHEMICAL CASE". Yes, i have special code-phrase for this. I've seen some shit.
+ /obj/item/reagent_containers/cup/bottle/incubus_draft = 6,
+ ),
+ ),
+ list(
+ "name" = "Structures",
+ "icon" = FA_ICON_HAMMER,
+ "products" = list(
+ //fur niture //haha you got it
+ /obj/item/storage/box/bdsmbed_kit = 4,
+ /obj/item/storage/box/milking_kit = 4,
+ /obj/item/storage/box/shibari_stand = 4,
+ /obj/item/storage/box/strippole_kit = 4,
+ /obj/item/storage/box/xstand_kit = 4,
+ ),
+ ),
+ )
+
+ premium = list(
+ /obj/item/clothing/neck/human_petcollar/locked/holo = 3,
+ /obj/item/clothing/neck/size_collar = 8,//It only works in the Interlink anyways
+ )
+
+ contraband = list(
+ /obj/item/electropack/shockcollar = 4,
+ /obj/item/clothing/neck/kink_collar/locked = 4,
+ /obj/item/clothing/neck/mind_collar = 2,
+ /obj/item/clothing/under/costume/jabroni = 4,
+ /obj/item/clothing/neck/human_petcollar/locked = 4,
+ /obj/item/clothing/suit/straight_jacket/kinky_sleepbag = 2, //my favorite thing, spent 1 month on it. Don't remove please.
+ /obj/item/disk/nifsoft_uploader/dorms/contract = 5,
+ /obj/item/reagent_containers/pill/hexacrocin = 10,
+ /obj/item/reagent_containers/pill/pentacamphor = 5,
+ /obj/item/reagent_containers/cup/bottle/hexacrocin = 4,
+ /obj/item/reagent_containers/cup/bottle/pentacamphor = 2)
+
+ refill_canister = /obj/item/vending_refill/lustwish
+ payment_department = ACCOUNT_SRV
+ default_price = PAYCHECK_CREW * 0.6
+ extra_price = PAYCHECK_COMMAND * 2.5
+
+//Changes the settings on the vendor, if the user uses the discount card.
+/obj/machinery/vending/dorms/attackby(obj/item/used_item, mob/living/user, params)
+ if(!istype(used_item, /obj/item/lustwish_discount))
+ return ..()
+
+ user.visible_message(span_boldnotice("Something changes in [src] with a loud clunk."))
+ card_used = !card_used
+
+ if(card_used)
+ default_price = 0
+ extra_price = 0
+
+ return
+
+ default_price = initial(default_price)
+ extra_price = initial(extra_price)
+
+///Performs checks to see if the user can change the color on the vending machine.
+/obj/machinery/vending/dorms/proc/check_menu(mob/living/user, obj/item/multitool)
+ if(!istype(user))
+ return FALSE
+ if(user.incapacitated())
+ return FALSE
+ if(!multitool || !user.is_holding(multitool))
+ return FALSE
+
+ return TRUE
+
+/obj/machinery/vending/dorms/Initialize(mapload)
+ . = ..()
+ update_icon_state()
+ update_icon()
+
+/obj/machinery/vending/dorms/update_icon_state()
+ ..()
+ if(machine_stat & BROKEN)
+ icon_state = "[base_icon_state]-broken"
+ return
+
+ icon_state = "[base_icon_state][powered() ? null : "-off"]"
+
+//Refill item
+/obj/item/vending_refill/lustwish
+ machine_name = "LustWish"
+ icon_state = "lustwish_refill"
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm
similarity index 96%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm
index b04539f95ad..f5709cc6553 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm
@@ -12,7 +12,7 @@
/obj/structure/chair/milking_machine
name = "milking machine"
desc = "A stationary device for milking... things."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi'
icon_state = "milking_pink_off"
max_buckled_mobs = 1
item_chair = null
@@ -108,13 +108,13 @@
semen_vessel.reagents.maximum_volume = MILKING_PUMP_MAX_CAPACITY
current_vessel = milk_vessel
- vessel_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "liquid_empty", LYING_MOB_LAYER)
+ vessel_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "liquid_empty", LYING_MOB_LAYER)
vessel_overlay.name = "vessel_overlay"
- indicator_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "indicator_empty", ABOVE_MOB_LAYER + 0.1)
+ indicator_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "indicator_empty", ABOVE_MOB_LAYER + 0.1)
indicator_overlay.name = "indicator_overlay"
- locks_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "locks_open", BELOW_MOB_LAYER)
+ locks_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "locks_open", BELOW_MOB_LAYER)
locks_overlay.name = "locks_overlay"
- organ_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "none", ABOVE_MOB_LAYER)
+ organ_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi', "none", ABOVE_MOB_LAYER)
organ_overlay.name = "organ_overlay"
add_overlay(locks_overlay)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_machinery/washing_machine.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/_genital.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/breasts.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/testicles.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_organs/vagina.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_quirks.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_quirks.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_quirks.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_quirks.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
similarity index 95%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
index 9e46e1d018d..23cae8148d4 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm
@@ -4,14 +4,14 @@
/obj/structure/bed/bdsm_bed
name = "bdsm bed"
desc = "A latex bed with D-rings on the sides. Looks comfortable."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
icon_state = "bdsm_bed"
max_integrity = 50
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
/obj/item/bdsm_bed_kit
name = "bdsm bed construction kit"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
throwforce = 0
icon_state = "bdsm_bed_kit"
w_class = WEIGHT_CLASS_HUGE
@@ -84,7 +84,7 @@
/obj/structure/chair/x_stand
name = "x stand"
desc = "A stand for buckling people in an X shape."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
icon_state = "xstand_open"
base_icon_state = "xstand"
max_buckled_mobs = 1
@@ -92,7 +92,7 @@
///What state is the stand currently in? This is here for sprites.
var/stand_state = "open"
///What overlay is the stand using when stand_state is set to closed?
- var/static/mutable_appearance/xstand_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi', "xstand_overlay", LYING_MOB_LAYER)
+ var/static/mutable_appearance/xstand_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi', "xstand_overlay", LYING_MOB_LAYER)
///What human is currently buckled in?
var/mob/living/carbon/human/current_mob = null
item_chair = null
diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm
new file mode 100644
index 00000000000..ef70f268a67
--- /dev/null
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/construction.dm
@@ -0,0 +1,122 @@
+///The item used as the basis for construction kits for organic interface
+/obj/item/construction_kit
+ name = "construction kit"
+ desc = "Used for constructing various things"
+ w_class = WEIGHT_CLASS_BULKY
+ obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
+ throwforce = 0
+ ///What is the path for the resulting structure generating by using this item?
+ var/obj/structure/resulting_structure = /obj/structure/chair
+ ///How much time does it take to construct an item using this?
+ var/construction_time = 8 SECONDS
+ ///What color is the item using? If none, leave this blank.
+ var/current_color = ""
+
+/obj/item/construction_kit/Initialize(mapload)
+ . = ..()
+ name = "[initial(resulting_structure.name)] [name]"
+
+/obj/item/construction_kit/examine(mob/user)
+ . = ..()
+ . += span_purple("[src] can be assembled by using Ctrl+Shift+Click while [src] is on the floor.")
+
+/obj/item/construction_kit/CtrlShiftClick(mob/user)
+ . = ..()
+ if(. == FALSE)
+ return FALSE
+
+ if((item_flags & IN_INVENTORY) || (item_flags & IN_STORAGE))
+ return FALSE
+
+ to_chat(user, span_notice("You begin to assemble [src]..."))
+ if(!do_after(user, construction_time, src))
+ to_chat(user, span_warning("You fail to assemble [src]!"))
+ return FALSE
+
+ var/obj/structure/chair/final_structure = new resulting_structure (get_turf(user))
+ if(current_color && istype(final_structure, /obj/structure/chair/milking_machine))
+ var/obj/structure/chair/milking_machine/new_milker = final_structure
+ new_milker.machine_color = current_color
+
+ if(current_color == "pink")
+ new_milker.icon_state = "milking_pink_off"
+ else
+ new_milker.icon_state = "milking_teal_off"
+
+ if(istype(final_structure, /obj/structure/chair/shibari_stand))
+ var/obj/structure/chair/shibari_stand/stand = final_structure
+ stand.set_greyscale(greyscale_colors)
+
+ qdel(src)
+ to_chat(user, span_notice("You assemble [src]."))
+ return TRUE
+
+// MILKER
+
+/obj/item/construction_kit/milker
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi'
+ icon_state = "milkbuild_pink"
+ base_icon_state = "milkbuild"
+ current_color = "pink"
+ resulting_structure = /obj/structure/chair/milking_machine
+
+/obj/item/construction_kit/milker/Initialize(mapload)
+ . = ..()
+ update_icon_state()
+ update_icon()
+
+/obj/item/construction_kit/milker/update_icon_state()
+ icon_state = "[initial(base_icon_state)]_[current_color]"
+ return ..()
+
+
+/obj/item/construction_kit/pole
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi'
+ icon_state = "pole_base"
+ resulting_structure = /obj/structure/stripper_pole
+
+// BDSM FURNITURE
+/obj/item/construction_kit/bdsm
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
+
+// X-STAND
+
+/obj/item/construction_kit/bdsm/x_stand
+ icon_state = "xstand_kit"
+ resulting_structure = /obj/structure/chair/x_stand
+
+// RESTRAINED BED
+
+/obj/item/construction_kit/bdsm/bed
+ icon_state = "bdsm_bed_kit"
+ resulting_structure = /obj/structure/bed/bdsm_bed
+
+/obj/item/construction_kit/bdsm/shibari
+ icon_state = "shibari_kit"
+ greyscale_config = /datum/greyscale_config/shibari_stand_item
+ greyscale_colors = "#bd8fcf"
+ resulting_structure = /obj/structure/chair/shibari_stand
+
+// SHIBARI STAND
+
+/obj/item/construction_kit/bdsm/shibari/examine(mob/user)
+ .=..()
+ . += span_purple("[src]'s color can be customized with Ctrl+Click .")
+
+//to change model
+/obj/item/construction_kit/bdsm/shibari/CtrlClick(mob/user)
+ . = ..()
+ if(. == FALSE)
+ return FALSE
+
+ var/list/allowed_configs = list()
+ allowed_configs += "[greyscale_config]"
+ var/datum/greyscale_modify_menu/menu = new(
+ src, usr, allowed_configs, null, \
+ starting_icon_state = icon_state, \
+ starting_config = greyscale_config, \
+ starting_colors = greyscale_colors
+ )
+ menu.ui_interact(usr)
+ to_chat(user, span_notice("You switch the frame's plastic fittings color."))
+ return TRUE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm
similarity index 98%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm
index 202e20f7353..b382591571f 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm
@@ -1,7 +1,7 @@
/obj/structure/stripper_pole
name = "stripper pole"
desc = "A pole fastened to the ceiling and floor, used to show of one's goods to company."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi'
icon_state = "pole_purple_off"
base_icon_state = "pole"
density = TRUE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm
similarity index 88%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm
index 0ac4d57fafb..f23c6e1d626 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/pillow.dm
@@ -7,9 +7,9 @@
/obj/item/fancy_pillow
name = "pillow"
desc = "A big, soft pillow."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
+ lefthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
+ righthand_file = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
icon_state = "pillow_pink_round"
base_icon_state = "pillow"
inhand_icon_state = "pillow_pink_round"
@@ -99,7 +99,7 @@
/obj/effect/temp_visual/feathers
name = "feathers"
icon_state = "feathers"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
duration = 14
/datum/effect_system/feathers
@@ -123,7 +123,7 @@
if(prob(30))
affected_mob.emote(pick("laugh", "giggle"))
user.visible_message(span_notice("[user] [message]!"))
- playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
+ playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
if(BODY_ZONE_CHEST)
var/message = ""
@@ -131,7 +131,7 @@
if(prob(30))
affected_mob.emote(pick("laugh", "giggle"))
user.visible_message(span_notice("[user] [message]!"))
- playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
+ playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
else
var/message = ""
@@ -139,7 +139,7 @@
if(prob(30))
affected_mob.emote(pick("laugh", "giggle"))
user.visible_message(span_notice("[user] [message]!"))
- playsound(loc, 'modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
+ playsound(loc, 'modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg', 50, 1, -1)
//spawning pillow on the ground when clicking on pillow by LBM
@@ -163,7 +163,7 @@
/obj/structure/bed/pillow_tiny
name = "pillow"
desc = "A tiny pillow, for tiny heads."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
icon_state = "pillow_pink_round"
base_icon_state = "pillow"
var/current_color = "pink"
@@ -249,7 +249,7 @@
/obj/structure/chair/pillow_small
name = "small pillow pile"
desc = "A small pile of pillows. A comfortable seat, especially for taurs or nagas."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
icon_state = "pillowpile_small_pink"
base_icon_state = "pillowpile_small"
pseudo_z_axis = 4
@@ -277,9 +277,9 @@
/obj/structure/chair/pillow_small/proc/GetArmrest()
if(current_color == "pink")
- return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_pink_overlay")
+ return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_pink_overlay")
if(current_color == "teal")
- return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_teal_overlay")
+ return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_teal_overlay")
/obj/structure/chair/pillow_small/Destroy()
QDEL_NULL(armrest)
@@ -295,7 +295,7 @@
/obj/structure/chair/pillow_small/update_overlays()
. = ..()
if(has_buckled_mobs())
- . += mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2)
+ . += mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_small_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2)
/obj/structure/chair/pillow_small/post_unbuckle_mob(mob/living/affected_mob)
. = ..()
@@ -375,7 +375,7 @@
/obj/structure/bed/pillow_large
name = "large pillow pile"
desc = "A large pile of pillows. Jump on it!"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi'
icon_state = "pillowpile_large_pink"
base_icon_state = "pillowpile_large"
pseudo_z_axis = 4
@@ -406,9 +406,9 @@
/obj/structure/bed/pillow_large/proc/GetArmrest()
if(current_color == "pink")
- return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_pink_overlay")
+ return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_pink_overlay")
if(current_color == "teal")
- return mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_teal_overlay")
+ return mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_teal_overlay")
/obj/structure/bed/pillow_large/Destroy()
QDEL_NULL(armrest)
@@ -424,7 +424,7 @@
/obj/structure/bed/pillow_large/update_overlays()
. = ..()
if(has_buckled_mobs())
- . += mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2)
+ . += mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi', "pillowpile_large_[current_color]_overlay", layer = ABOVE_MOB_LAYER + 0.2)
/obj/structure/bed/pillow_large/post_unbuckle_mob(mob/living/affected_mob)
. = ..()
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
similarity index 97%
rename from modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
rename to modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
index 702d7293c62..945b370c18b 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm
@@ -1,7 +1,7 @@
/obj/structure/chair/shibari_stand
name = "shibari stand"
desc = "A stand for buckling people with ropes."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
icon_state = "shibari_stand"
max_integrity = 75
layer = 4
@@ -11,7 +11,7 @@
///Overlays for ropes
var/static/mutable_appearance/shibari_rope_overlay
var/static/mutable_appearance/shibari_rope_overlay_behind
- var/static/mutable_appearance/shibari_shadow_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi', "shibari_shadow", LOW_OBJ_LAYER)
+ var/static/mutable_appearance/shibari_shadow_overlay = mutable_appearance('modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi', "shibari_shadow", LOW_OBJ_LAYER)
greyscale_config = /datum/greyscale_config/shibari_stand
greyscale_colors = "#bd8fcf"
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm b/modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm
similarity index 87%
rename from modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm
rename to modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm
index 63aa2c1452c..e45cf39c693 100644
--- a/modular_skyrat/modules/modular_items/lewd_items/code/screen_icons.dm
+++ b/modular_nova/modules/modular_items/lewd_items/code/screen_icons.dm
@@ -3,7 +3,7 @@
/atom/movable/screen/alert/aroused
name = "Aroused"
desc = "It's a little hot in here"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi'
icon_state = "arousal_small"
var/mutable_appearance/pain_overlay
var/mutable_appearance/pleasure_overlay
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/verbs.dm b/modular_nova/modules/modular_items/lewd_items/code/verbs.dm
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/code/verbs.dm
rename to modular_nova/modules/modular_items/lewd_items/code/verbs.dm
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_belts.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_ears.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_digi.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_normal.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/sleepbag_special.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform_teshari.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi b/modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_belts.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_ears.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/clockwork.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/glass.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/midnight.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/operative.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/plasmafire.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/retro.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/inventory_icons/slimecore.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_icons.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/kegs.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/pillows.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi b/modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi
rename to modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang4.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang4.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang5.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang5.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bang6.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bang6.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj10.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj10.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj10.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj10.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj11.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj11.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj11.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj11.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj4.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj4.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj4.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj5.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj5.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj5.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj5.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj6.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj6.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj6.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj6.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj7.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj7.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj7.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj7.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj8.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj8.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj8.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj8.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bj9.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bj9.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bj9.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bj9.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/bzzz-loop-3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/champ1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/champ2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/champ_fingering.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/champ_fingering.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/champ_fingering.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/champ_fingering.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_f3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/final_m3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_dry4.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_dry4.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_dry4.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/foot_wet3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/foot_wet3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/foot_wet3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/highheel1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/highheel2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/hug.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/hug.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/latex.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/oral1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/oral1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/oral1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/oral1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/oral2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/oral2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/oral2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/oral2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/slap.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/slap.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/squelch3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/squelch3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/squelch3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/squelch3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f3.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/under_moan_f4.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vax1.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/vax1.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vax2.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/vax2.ogg
diff --git a/modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg b/modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_items/lewd_items/sounds/vibrate.ogg
rename to modular_nova/modules/modular_items/lewd_items/sounds/vibrate.ogg
diff --git a/modular_skyrat/modules/modular_items/readme.md b/modular_nova/modules/modular_items/readme.md
similarity index 100%
rename from modular_skyrat/modules/modular_items/readme.md
rename to modular_nova/modules/modular_items/readme.md
diff --git a/modular_skyrat/modules/modular_persistence/README.md b/modular_nova/modules/modular_persistence/README.md
similarity index 86%
rename from modular_skyrat/modules/modular_persistence/README.md
rename to modular_nova/modules/modular_persistence/README.md
index 9a89ea74ae4..f0ff7028236 100644
--- a/modular_skyrat/modules/modular_persistence/README.md
+++ b/modular_nova/modules/modular_persistence/README.md
@@ -17,7 +17,7 @@ Loaded and saved on only station-side players for now. Will be expanded to suppo
### Defines:
-- `modular_skyrat\modules\modular_persistence\code\modular_persistence.dm`: `GLOB.modular_persistence_ignored_vars`
+- `modular_nova\modules\modular_persistence\code\modular_persistence.dm`: `GLOB.modular_persistence_ignored_vars`
### Credits:
- RimiNosha - Code
diff --git a/modular_skyrat/modules/modular_persistence/code/modular_persistence.dm b/modular_nova/modules/modular_persistence/code/modular_persistence.dm
similarity index 98%
rename from modular_skyrat/modules/modular_persistence/code/modular_persistence.dm
rename to modular_nova/modules/modular_persistence/code/modular_persistence.dm
index d76b1f07e41..46d5c5ae18a 100644
--- a/modular_skyrat/modules/modular_persistence/code/modular_persistence.dm
+++ b/modular_nova/modules/modular_persistence/code/modular_persistence.dm
@@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(modular_persistence_ignored_vars, list(
var/mob/living/carbon/human/human = owner.owner
human.load_nif_data(src)
-/datum/modular_persistence/Destroy(force, ...)
+/datum/modular_persistence/Destroy(force)
owner = null
return ..()
diff --git a/modular_skyrat/modules/modular_reagents/code/alert.dm b/modular_nova/modules/modular_reagents/code/alert.dm
similarity index 100%
rename from modular_skyrat/modules/modular_reagents/code/alert.dm
rename to modular_nova/modules/modular_reagents/code/alert.dm
diff --git a/modular_skyrat/modules/modular_reagents/code/reagents/medicine.dm b/modular_nova/modules/modular_reagents/code/reagents/medicine.dm
similarity index 100%
rename from modular_skyrat/modules/modular_reagents/code/reagents/medicine.dm
rename to modular_nova/modules/modular_reagents/code/reagents/medicine.dm
diff --git a/modular_skyrat/modules/modular_reagents/code/recipes/medicine_recipes.dm b/modular_nova/modules/modular_reagents/code/recipes/medicine_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/modular_reagents/code/recipes/medicine_recipes.dm
rename to modular_nova/modules/modular_reagents/code/recipes/medicine_recipes.dm
diff --git a/modular_skyrat/modules/modular_vending/code/autodrobe.dm b/modular_nova/modules/modular_vending/code/autodrobe.dm
similarity index 94%
rename from modular_skyrat/modules/modular_vending/code/autodrobe.dm
rename to modular_nova/modules/modular_vending/code/autodrobe.dm
index f1bc8940cbb..7511a7c3913 100644
--- a/modular_skyrat/modules/modular_vending/code/autodrobe.dm
+++ b/modular_nova/modules/modular_vending/code/autodrobe.dm
@@ -30,6 +30,10 @@
/obj/item/clothing/under/costume/skyrat/yukata = 5,
/obj/item/clothing/under/costume/skyrat/kimono = 5,
/obj/item/clothing/head/beret/badge = 5,
+ /obj/item/clothing/mask/masquerade = 5,
+ /obj/item/clothing/mask/masquerade/two_colors = 5,
+ /obj/item/clothing/mask/masquerade/feathered = 5,
+ /obj/item/clothing/mask/masquerade/two_colors/feathered = 5,
),
),
list(
diff --git a/modular_skyrat/modules/modular_vending/code/boozeomat.dm b/modular_nova/modules/modular_vending/code/boozeomat.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/boozeomat.dm
rename to modular_nova/modules/modular_vending/code/boozeomat.dm
diff --git a/modular_skyrat/modules/modular_vending/code/cigarette.dm b/modular_nova/modules/modular_vending/code/cigarette.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/cigarette.dm
rename to modular_nova/modules/modular_vending/code/cigarette.dm
diff --git a/modular_skyrat/modules/modular_vending/code/clothesmate.dm b/modular_nova/modules/modular_vending/code/clothesmate.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/clothesmate.dm
rename to modular_nova/modules/modular_vending/code/clothesmate.dm
diff --git a/modular_skyrat/modules/modular_vending/code/cola.dm b/modular_nova/modules/modular_vending/code/cola.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/cola.dm
rename to modular_nova/modules/modular_vending/code/cola.dm
diff --git a/modular_skyrat/modules/modular_vending/code/engivend.dm b/modular_nova/modules/modular_vending/code/engivend.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/engivend.dm
rename to modular_nova/modules/modular_vending/code/engivend.dm
diff --git a/modular_skyrat/modules/modular_vending/code/games.dm b/modular_nova/modules/modular_vending/code/games.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/games.dm
rename to modular_nova/modules/modular_vending/code/games.dm
diff --git a/modular_skyrat/modules/modular_vending/code/medical.dm b/modular_nova/modules/modular_vending/code/medical.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/medical.dm
rename to modular_nova/modules/modular_vending/code/medical.dm
diff --git a/modular_skyrat/modules/modular_vending/code/megaseed.dm b/modular_nova/modules/modular_vending/code/megaseed.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/megaseed.dm
rename to modular_nova/modules/modular_vending/code/megaseed.dm
diff --git a/modular_skyrat/modules/modular_vending/code/security.dm b/modular_nova/modules/modular_vending/code/security.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/security.dm
rename to modular_nova/modules/modular_vending/code/security.dm
diff --git a/modular_skyrat/modules/modular_vending/code/vending.dm b/modular_nova/modules/modular_vending/code/vending.dm
similarity index 100%
rename from modular_skyrat/modules/modular_vending/code/vending.dm
rename to modular_nova/modules/modular_vending/code/vending.dm
diff --git a/modular_nova/modules/modular_vending/code/wardrobes.dm b/modular_nova/modules/modular_vending/code/wardrobes.dm
new file mode 100644
index 00000000000..21e2ff5ebc8
--- /dev/null
+++ b/modular_nova/modules/modular_vending/code/wardrobes.dm
@@ -0,0 +1,255 @@
+/obj/machinery/vending/wardrobe/medi_wardrobe
+ skyrat_products = list(
+ /obj/item/radio/headset/headset_med = 3,
+ /obj/item/clothing/gloves/latex/nitrile = 2,
+ /obj/item/clothing/suit/toggle/labcoat/hospitalgown = 5,
+ /obj/item/storage/belt/medbandolier = 2,
+ /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem/emt = 2,
+ /obj/item/clothing/under/rank/medical/scrubs/skyrat/red = 4,
+ /obj/item/clothing/under/rank/medical/scrubs/skyrat/white = 4,
+ /obj/item/clothing/under/rank/medical/doctor/skyrat/utility = 4,
+ /obj/item/clothing/suit/toggle/labcoat/medical = 4,
+ /obj/item/storage/backpack/messenger/med = 4,
+ )
+
+/obj/machinery/vending/wardrobe/engi_wardrobe
+ skyrat_products = list(
+ /obj/item/radio/headset/headset_eng = 3,
+ /obj/item/clothing/under/rank/engineering/engineer/skyrat/trouser = 3,
+ /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility = 3,
+ /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem = 3,
+ /obj/item/clothing/under/misc/overalls = 3,
+ /obj/item/clothing/suit/toggle/jacket/engi = 3,
+ /obj/item/clothing/head/utility/hardhat/orange = 2,
+ /obj/item/clothing/head/utility/hardhat/welding/orange = 2,
+ /obj/item/clothing/head/utility/hardhat/dblue = 2,
+ /obj/item/clothing/head/utility/hardhat/welding/dblue = 2,
+ /obj/item/clothing/head/utility/hardhat/red = 2,
+ /obj/item/storage/backpack/messenger/eng = 3,
+ )
+
+/obj/machinery/vending/wardrobe/atmos_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/glasses/meson/engine = 2,
+ /obj/item/clothing/head/beret/atmos = 4,
+ /obj/item/storage/backpack/messenger/eng = 3,
+ )
+
+/obj/machinery/vending/wardrobe/cargo_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/long = 3,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/gorka = 3,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck = 3,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt = 3,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/utility = 3,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman = 3,
+ /obj/item/clothing/suit/toggle/jacket/supply = 3,
+ /obj/item/clothing/glasses/hud/gun_permit = 5, //from company imports module
+ /obj/item/storage/backpack/messenger = 3,
+ )
+
+ skyrat_contraband = list(
+ /obj/item/clothing/under/suit/skyrat/scarface = 2,
+ /obj/item/clothing/under/rank/cargo/tech/skyrat/evil = 2,
+ )
+
+/obj/machinery/vending/wardrobe/robo_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/head/beret/science/fancy/robo = 2,
+ /obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek = 2,
+ /obj/item/tank/internals/anesthetic = 2,
+ /obj/item/clothing/mask/breath = 2,
+ /obj/item/reagent_containers/cup/bottle/morphine = 2,
+ /obj/item/reagent_containers/syringe = 2,
+ /obj/item/reagent_containers/spray/hercuri/chilled = 2,
+ /obj/item/clothing/gloves/color/black = 2, // fire resistant, allows the robo to painlessly mold metal. also its down here because its a treatment item
+ /obj/item/bonesetter = 2, // for dislocations
+ /obj/item/stack/medical/gauze = 4, // for ALL wounds
+ /obj/item/healthanalyzer/no_medibot = 2, // disallows medibot use so its not wasted immediately on medibots
+ /obj/item/healthanalyzer/simple = 2,
+ /obj/item/storage/backpack/science/robo = 2,
+ /obj/item/storage/backpack/satchel/science/robo = 2,
+ /obj/item/storage/backpack/duffelbag/science/robo = 2,
+ /obj/item/storage/backpack/messenger/science/robo = 2,
+ )
+
+/obj/machinery/vending/wardrobe/science_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience = 3,
+ /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility = 3,
+ /obj/item/clothing/suit/toggle/jacket/sci = 3,
+ /obj/item/storage/backpack/messenger/science = 3,
+ )
+
+/obj/machinery/vending/wardrobe/hydro_wardrobe
+ skyrat_contraband = list(
+ /obj/item/clothing/under/suit/skyrat/scarface = 2,
+ /obj/item/clothing/under/misc/skyrat/gear_harness/adam = 2,
+ /obj/item/clothing/under/misc/skyrat/gear_harness/eve = 2,
+ /obj/item/storage/backpack/messenger/hyd = 3,
+ )
+
+/obj/machinery/vending/wardrobe/bar_wardrobe
+ skyrat_products = list(
+ /obj/item/storage/fancy/candle_box/vanilla = 1,
+ /obj/item/storage/fancy/candle_box/pear = 1,
+ /obj/item/storage/fancy/candle_box/amber = 1,
+ /obj/item/storage/fancy/candle_box/jasmine = 1,
+ /obj/item/storage/fancy/candle_box/mint = 1,
+ /obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender = 2,
+ )
+
+/obj/machinery/vending/wardrobe/chap_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/suit/costume/nemes = 1,
+ /obj/item/clothing/head/costume/nemes = 1,
+ /obj/item/clothing/head/costume/pharaoh = 1, //dont google camel by camel worst mistake of my life
+ )
+
+ skyrat_contraband = list(
+ /obj/item/clothing/neck/chaplain = 1,
+ /obj/item/clothing/neck/chaplain/black = 1,
+ /obj/item/implanter/mortis = 1,
+ )
+
+/obj/machinery/vending/cart
+ skyrat_products = list(
+ /obj/item/radio/headset/headset_srv = 3,
+ )
+
+/obj/machinery/vending/wardrobe/chem_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/under/rank/medical/chemist/skyrat/formal = 2,
+ /obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt = 2,
+ /obj/item/clothing/head/beret/medical/chemist = 2,
+ /obj/item/storage/backpack/messenger/chem = 2,
+ )
+
+/obj/machinery/vending/wardrobe/viro_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/head/beret/medical/virologist = 2,
+ /obj/item/storage/backpack/messenger/vir = 2,
+ )
+
+/obj/machinery/vending/wardrobe/det_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/head/fedora/beige = 2,
+ /obj/item/clothing/head/fedora/white = 2,
+ /obj/item/clothing/under/costume/cybersleek = 2,
+ /obj/item/clothing/under/costume/cybersleek/long = 2,
+ /obj/item/clothing/head/fedora/det_hat/cybergoggles = 2,
+ /obj/item/clothing/suit/toggle/deckard = 2,
+ /obj/item/clothing/suit/armor/vest/det_suit/runner = 2,
+ /obj/item/clothing/under/rank/security/detective/runner = 2,
+ /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis = 2,
+ /obj/item/clothing/under/rank/security/detective/cowboy = 2,
+ /obj/item/clothing/suit/jacket/det_suit/cowboyvest = 2,
+ /obj/item/storage/backpack/messenger/sec = 2,
+ )
+
+/obj/machinery/vending/wardrobe/law_wardrobe
+ skyrat_products = list(
+ /obj/item/clothing/under/suit/skyrat/black_really_collared = 3,
+ /obj/item/clothing/under/suit/skyrat/black_really_collared/skirt = 3,
+ /obj/item/clothing/under/suit/skyrat/inferno = 3,
+ /obj/item/clothing/under/suit/skyrat/inferno/skirt = 3,
+ /obj/item/clothing/under/suit/skyrat/inferno/beeze = 2,
+ )
+
+/// GHOST CAFE WARDROBES
+// Needed to remove radios from Ghost Cafe
+/// Removes given list of products. Must be called before build_inventory() to actually prevent the records from being created.
+/obj/machinery/vending/proc/remove_products(list/paths_to_remove)
+ if(!length(paths_to_remove))
+ return
+ for(var/typepath as anything in products)
+ for(var/to_remove as anything in paths_to_remove)
+ if(ispath(typepath, to_remove))
+ products.Remove(typepath)
+
+/obj/machinery/vending/
+ /// list of products to exclude when building the vending machine's inventory
+ var/list/excluded_products
+
+/obj/machinery/vending/Initialize(mapload)
+ remove_products(excluded_products)
+ return ..()
+
+/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
+
+/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe
+ excluded_products = list(
+ /obj/item/radio/headset,
+ )
diff --git a/modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm b/modular_nova/modules/modular_weapons/code/autolathe_designs.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/autolathe_designs.dm
rename to modular_nova/modules/modular_weapons/code/autolathe_designs.dm
diff --git a/modular_skyrat/modules/modular_weapons/code/ballistic_master.dm b/modular_nova/modules/modular_weapons/code/ballistic_master.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/ballistic_master.dm
rename to modular_nova/modules/modular_weapons/code/ballistic_master.dm
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm
new file mode 100644
index 00000000000..72c5632237d
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm
@@ -0,0 +1,36 @@
+/obj/structure/sign/poster/official/carwo_grenade
+ name = "Tydhouer - Precision Timing"
+ desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, a variety of specialist .980 Tydhouer grenades for the Kiboko launcher."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi'
+ icon_state = "grenadier"
+
+/obj/structure/sign/poster/official/carwo_grenade/examine_more(mob/user)
+ . = ..()
+
+ . += "Small text details that certain types of grenades may not be available in your \
+ region depending on local weapons regulations. Suspiciously, however, if you squint at \
+ it a bit, the background colors of the image come together vaguely in the shape of \
+ a computer board and a multitool. What did they mean by this?"
+
+ return .
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_grenade, 32)
+
+/obj/structure/sign/poster/official/carwo_magazine
+ name = "Standardisation - Magazines of the Future"
+ desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, the variety of magazine types the company has on offer for rifles. \
+ It also goes into great deal to say, more or less, that any rifle can take any rifle magazine. Now this is technology like never seen before."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi'
+ icon_state = "mag_size"
+
+/obj/structure/sign/poster/official/carwo_magazine/examine_more(mob/user)
+ . = ..()
+
+ . += "Small text details that certain types of magazines may not be available in your \
+ region depending on local weapons regulations. Suspiciously, however, if you squint at \
+ it a bit, the background colors of the image come together vaguely in the shape of \
+ a computer board and a multitool. What did they mean by this?"
+
+ return .
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_magazine, 32)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm
similarity index 92%
rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm
rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm
index fa3e2e80460..26ae52cebe6 100644
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm
@@ -21,7 +21,7 @@
name = ".980 Tydhouer practice grenade"
desc = "A large grenade shell that will detonate at a range given to it by the gun that fires it. Practice shells disintegrate into harmless sparks."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
icon_state = "980_solid"
caliber = CALIBER_980TYDHOUER
@@ -65,7 +65,7 @@
/// Generic proc that is called when the projectile should 'detonate', being either on impact or when the range runs out
/obj/projectile/bullet/c980grenade/proc/fuse_activation(atom/target)
- playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
+ playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
do_sparks(3, FALSE, src)
@@ -73,7 +73,7 @@
name = "ammo box (.980 Tydhouer practice)"
desc = "A box of four .980 Tydhouer practice grenades. Instructions on the box indicate these are dummy practice rounds that will disintegrate into sparks on detonation. Neat!"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
icon_state = "980box_solid"
multiple_sprites = AMMO_BOX_FULL_EMPTY
@@ -101,7 +101,7 @@
/obj/projectile/bullet/c980grenade/smoke/fuse_activation(atom/target)
- playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
+ playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
playsound(src, 'sound/effects/smoke.ogg', 50, TRUE, -3)
var/datum/effect_system/fluid_spread/smoke/bad/smoke = new
smoke.set_up(GRENADE_SMOKE_RANGE, holder = src, location = src)
@@ -146,7 +146,7 @@
shrapnel_maker.detonate()
qdel(shrapnel_maker)
- playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
+ playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
/obj/item/ammo_box/c980grenade/shrapnel
@@ -237,7 +237,7 @@
name = ".980 Tydhouer tear gas grenade"
/obj/projectile/bullet/c980grenade/riot/fuse_activation(atom/target)
- playsound(src, 'modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
+ playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3)
playsound(src, 'sound/effects/smoke.ogg', 50, TRUE, -3)
var/datum/effect_system/fluid_spread/smoke/chem/smoke = new()
smoke.chemholder.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 10)
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm
new file mode 100644
index 00000000000..7a36deb9c75
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm
@@ -0,0 +1,134 @@
+// .35 Sol Short
+// Pistol caliber caseless round used almost exclusively by SolFed weapons
+
+/obj/item/ammo_casing/c35sol
+ name = ".35 Sol Short lethal bullet casing"
+ desc = "A SolFed standard caseless lethal pistol round."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "35sol"
+
+ caliber = CALIBER_SOL35SHORT
+ projectile_type = /obj/projectile/bullet/c35sol
+
+
+/obj/item/ammo_casing/c35sol/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/caseless)
+
+
+/obj/projectile/bullet/c35sol
+ name = ".35 Sol Short bullet"
+ damage = 25
+
+ wound_bonus = 10 // Normal bullets are 20
+ bare_wound_bonus = 20
+
+
+/obj/item/ammo_box/c35sol
+ name = "ammo box (.35 Sol Short lethal)"
+ desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "35box"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ caliber = CALIBER_SOL35SHORT
+ ammo_type = /obj/item/ammo_casing/c35sol
+ max_ammo = 24
+
+
+// .35 Sol's equivalent to a rubber bullet
+
+/obj/item/ammo_casing/c35sol/incapacitator
+ name = ".35 Sol Short incapacitator bullet casing"
+ desc = "A SolFed standard caseless less-lethal pistol round. Exhausts targets on hit, has a tendency to bounce off walls at shallow angles."
+
+ icon_state = "35sol_disabler"
+
+ projectile_type = /obj/projectile/bullet/c35sol/incapacitator
+ harmful = FALSE
+
+
+/obj/projectile/bullet/c35sol/incapacitator
+ name = ".35 Sol Short incapacitator bullet"
+ damage = 5
+ stamina = 30
+
+ wound_bonus = -40
+ bare_wound_bonus = -20
+
+ weak_against_armour = TRUE
+
+ // The stats of the ricochet are a nerfed version of detective revolver rubber ammo
+ // This is due to the fact that there's a lot more rounds fired quickly from weapons that use this, over a revolver
+ ricochet_auto_aim_angle = 30
+ ricochet_auto_aim_range = 5
+ ricochets_max = 4
+ ricochet_incidence_leeway = 50
+ ricochet_chance = 130
+ ricochet_decay_damage = 0.8
+
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+
+
+/obj/item/ammo_box/c35sol/incapacitator
+ name = "ammo box (.35 Sol Short incapacitator)"
+ desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The blue stripe indicates this should hold less-lethal ammunition."
+
+ icon_state = "35box_disabler"
+
+ ammo_type = /obj/item/ammo_casing/c35sol/incapacitator
+
+
+// .35 Sol ripper, similar to the detective revolver's dumdum rounds, causes slash wounds and is weak to armor
+
+/obj/item/ammo_casing/c35sol/ripper
+ name = ".35 Sol Short ripper bullet casing"
+ desc = "A SolFed standard caseless ripper pistol round. Causes slashing wounds on targets, but is weak to armor."
+
+ icon_state = "35sol_shrapnel"
+ projectile_type = /obj/projectile/bullet/c35sol/ripper
+
+ custom_materials = AMMO_MATS_RIPPER
+ advanced_print_req = TRUE
+
+
+/obj/projectile/bullet/c35sol/ripper
+ name = ".35 Sol ripper bullet"
+ damage = 15
+
+ weak_against_armour = TRUE
+
+ sharpness = SHARP_EDGED
+
+ wound_bonus = 20
+ bare_wound_bonus = 20
+
+ embedding = list(
+ embed_chance = 75,
+ fall_chance = 3,
+ jostle_chance = 4,
+ ignore_throwspeed_threshold = TRUE,
+ pain_stam_pct = 0.4,
+ pain_mult = 5,
+ jostle_pain_mult = 6,
+ rip_time = 1 SECONDS,
+ )
+
+ embed_falloff_tile = -15
+
+
+/obj/item/ammo_box/c35sol/ripper
+ name = "ammo box (.35 Sol Short ripper)"
+ desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The purple stripe indicates this should hold hollowpoint-like ammunition."
+
+ icon_state = "35box_shrapnel"
+
+ ammo_type = /obj/item/ammo_casing/c35sol/ripper
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm
new file mode 100644
index 00000000000..37dff35d03f
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm
@@ -0,0 +1,195 @@
+// .40 Sol Long
+// Rifle caliber caseless ammo that kills people good
+
+/obj/item/ammo_casing/c40sol
+ name = ".40 Sol Long lethal bullet casing"
+ desc = "A SolFed standard caseless lethal rifle round."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "40sol"
+
+ caliber = CALIBER_SOL40LONG
+ projectile_type = /obj/projectile/bullet/c40sol
+
+
+/obj/item/ammo_casing/c40sol/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/caseless)
+
+
+/obj/projectile/bullet/c40sol
+ name = ".40 Sol Long bullet"
+ damage = 35
+
+ wound_bonus = 10
+ bare_wound_bonus = 20
+
+
+/obj/item/ammo_box/c40sol
+ name = "ammo box (.40 Sol Long lethal)"
+ desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "40box"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ caliber = CALIBER_SOL40LONG
+ ammo_type = /obj/item/ammo_casing/c40sol
+ max_ammo = 30
+
+
+// .40 Sol fragmentation rounds, embeds shrapnel in the target almost every time at close to medium range. Teeeechnically less lethals.
+
+/obj/item/ammo_casing/c40sol/fragmentation
+ name = ".40 Sol Long fragmentation bullet casing"
+ desc = "A SolFed standard caseless fragmentation rifle round. Shatters upon impact, ejecting sharp shrapnel that can potentially incapacitate targets."
+
+ icon_state = "40sol_disabler"
+
+ projectile_type = /obj/projectile/bullet/c40sol/fragmentation
+
+ advanced_print_req = TRUE
+
+ harmful = FALSE
+
+
+/obj/projectile/bullet/c40sol/fragmentation
+ name = ".40 Sol Long fragmentation bullet"
+ damage = 15
+ stamina = 30
+
+ weak_against_armour = TRUE
+
+ sharpness = SHARP_EDGED
+ wound_bonus = 0
+ bare_wound_bonus = 10
+
+ shrapnel_type = /obj/item/shrapnel/stingball
+ embedding = list(
+ embed_chance = 50,
+ fall_chance = 5,
+ jostle_chance = 5,
+ ignore_throwspeed_threshold = TRUE,
+ pain_stam_pct = 0.4,
+ pain_mult = 2,
+ jostle_pain_mult = 3,
+ rip_time = 0.5 SECONDS,
+ )
+
+ embed_falloff_tile = -5
+
+
+/obj/item/ammo_box/c40sol/fragmentation
+ name = "ammo box (.40 Sol Long fragmentation)"
+ desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The blue stripe indicates this should hold less lethal ammunition."
+
+ icon_state = "40box_disabler"
+
+ ammo_type = /obj/item/ammo_casing/c40sol/fragmentation
+
+
+// .40 Sol match grade, bounces a lot, and if there's less than 20 bullet armor on wherever these hit, it'll go completely through the target and out the other side
+
+/obj/item/ammo_casing/c40sol/pierce
+ name = ".40 Sol Long match bullet casing"
+ desc = "A SolFed standard caseless match grade rifle round. Fires at a higher pressure and thus fires slightly faster projectiles. \
+ Rumors say you can do sick ass wall bounce trick shots with these, though the official suggestion is to just shoot your target and \
+ not the wall next to them."
+
+ icon_state = "40sol_pierce"
+
+ projectile_type = /obj/projectile/bullet/c40sol/pierce
+
+ custom_materials = AMMO_MATS_AP
+ advanced_print_req = TRUE
+
+
+/obj/projectile/bullet/c40sol/pierce
+ name = ".40 Sol match bullet"
+
+ icon_state = "gaussphase"
+
+ speed = 0.5
+
+ damage = 25
+ armour_penetration = 20
+
+ wound_bonus = -30
+ bare_wound_bonus = -10
+
+ ricochets_max = 2
+ ricochet_chance = 80
+ ricochet_auto_aim_range = 4
+ ricochet_incidence_leeway = 65
+
+ projectile_piercing = PASSMOB
+
+
+/obj/projectile/bullet/c40sol/pierce/on_hit(atom/target, blocked = 0, pierce_hit)
+ if(isliving(target))
+ var/mob/living/poor_sap = target
+
+ // If the target mob has enough armor to stop the bullet, or the bullet has already gone through two people, stop it on this hit
+ if((poor_sap.run_armor_check(def_zone, BULLET, "", "", silent = TRUE) > 20) || (pierces > 2))
+ projectile_piercing = NONE
+
+ if(damage > 10) // Lets just be safe with this one
+ damage -= 5
+ armour_penetration -= 10
+
+ return ..()
+
+
+/obj/item/ammo_box/c40sol/pierce
+ name = "ammo box (.40 Sol Long match)"
+ desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The yellow stripe indicates this should hold high performance ammuniton."
+
+ icon_state = "40box_pierce"
+
+ ammo_type = /obj/item/ammo_casing/c40sol/pierce
+
+
+// .40 Sol incendiary
+
+/obj/item/ammo_casing/c40sol/incendiary
+ name = ".40 Sol Long incendiary bullet casing"
+ desc = "A SolFed standard caseless incendiary rifle round. Leaves no flaming trail, only igniting targets on impact."
+
+ icon_state = "40sol_flame"
+
+ projectile_type = /obj/projectile/bullet/c40sol/incendiary
+
+ custom_materials = AMMO_MATS_TEMP
+ advanced_print_req = TRUE
+
+
+/obj/projectile/bullet/c40sol/incendiary
+ name = ".40 Sol Long incendiary bullet"
+ icon_state = "redtrac"
+
+ damage = 25
+
+ /// How many firestacks the bullet should impart upon a target when impacting
+ var/firestacks_to_give = 1
+
+
+/obj/projectile/bullet/c40sol/incendiary/on_hit(atom/target, blocked = 0, pierce_hit)
+ . = ..()
+
+ if(iscarbon(target))
+ var/mob/living/carbon/gaslighter = target
+ gaslighter.adjust_fire_stacks(firestacks_to_give)
+ gaslighter.ignite_mob()
+
+
+/obj/item/ammo_box/c40sol/incendiary
+ name = "ammo box (.40 Sol Long incendiary)"
+ desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The orange stripe indicates this should hold incendiary ammunition."
+
+ icon_state = "40box_flame"
+
+ ammo_type = /obj/item/ammo_casing/c40sol/incendiary
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm
similarity index 79%
rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm
rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm
index b927e1cd38d..5b9389a49af 100644
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/grenade_launcher.dm
@@ -1,17 +1,17 @@
// Low caliber grenade launcher (fun & games)
/obj/item/gun/ballistic/automatic/sol_grenade_launcher
- name = "\improper Carwo 'Kiboko' Grenade Launcher"
+ name = "\improper Kiboko Grenade Launcher"
desc = "A unique grenade launcher firing .980 grenades. A laser sight system allows its user to specify a range for the grenades it fires to detonate at."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
icon_state = "kiboko"
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
worn_icon_state = "kiboko"
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
inhand_icon_state = "kiboko"
SET_BASE_PIXEL(-8, 0)
@@ -26,7 +26,7 @@
accepted_magazine_type = /obj/item/ammo_box/magazine/c980_grenade
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg'
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg'
can_suppress = FALSE
can_bayonet = FALSE
@@ -43,6 +43,10 @@
/obj/item/gun/ballistic/automatic/sol_grenade_launcher/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
+/obj/item/gun/ballistic/automatic/sol_grenade_launcher/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
/obj/item/gun/ballistic/automatic/sol_grenade_launcher/examine_more(mob/user)
. = ..()
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm
new file mode 100644
index 00000000000..cd758ed934d
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm
@@ -0,0 +1,85 @@
+// Base yellow carwo case
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case
+ desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi'
+ icon_state = "case_carwo"
+
+ worn_icon_state = "yellowcase"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi'
+ inhand_icon_state = "yellowcase"
+
+// Empty version of the case
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty/PopulateContents()
+ return
+
+// Sindano in a box, how innovative!
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano
+ name = "\improper Carwo 'Sindano' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/no_mag
+ extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol/stendo
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/PopulateContents()
+ new weapon_to_spawn (src)
+
+ generate_items_inside(list(
+ /obj/item/ammo_box/c35sol/incapacitator = 1,
+ /obj/item/ammo_box/c35sol = 1,
+ /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty = 1,
+ /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty = 2,
+ ), src)
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag
+
+// Boxed grenade launcher, grenades sold seperately on this one
+
+/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless
+ name = "\improper Carwo 'Kiboko' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_grenade_launcher/no_mag
+ extra_to_spawn = /obj/item/ammo_box/magazine/c980_grenade/starts_empty
+
+
+/obj/structure/closet/secure_closet/armory_kiboko
+ name = "heavy equipment locker"
+ req_access = list(ACCESS_ARMORY)
+ icon_state = "shotguncase"
+
+/obj/structure/closet/secure_closet/armory_kiboko/PopulateContents()
+ . = ..()
+
+ generate_items_inside(list(
+ /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless = 1,
+ /obj/item/ammo_box/c980grenade = 2,
+ /obj/item/ammo_box/c980grenade/smoke = 1,
+ /obj/item/ammo_box/c980grenade/riot = 1,
+ ), src)
+
+/obj/structure/closet/secure_closet/armory_kiboko_but_evil
+ name = "heavy equipment locker"
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+ icon_door = "riot"
+ icon_state = "riot"
+ req_access = list(ACCESS_SYNDICATE)
+ anchored = 1
+
+/obj/structure/closet/secure_closet/armory_kiboko_but_evil/PopulateContents()
+ . = ..()
+
+ generate_items_inside(list(
+ /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil/no_mag = 1,
+ /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty = 2,
+ /obj/item/ammo_box/c980grenade/shrapnel = 1,
+ /obj/item/ammo_box/c980grenade/shrapnel/phosphor = 1,
+ /obj/item/ammo_box/c980grenade/smoke = 1,
+ /obj/item/ammo_box/c980grenade/riot = 1,
+ ), src)
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm
new file mode 100644
index 00000000000..eac16cec1f0
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm
@@ -0,0 +1,113 @@
+// .35 Sol pistol magazines
+
+/obj/item/ammo_box/magazine/c35sol_pistol
+ name = "\improper Sol pistol magazine"
+ desc = "A standard size magazine for SolFed pistols, holds twelve rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "pistol_35_standard"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_TINY
+
+ ammo_type = /obj/item/ammo_casing/c35sol
+ caliber = CALIBER_SOL35SHORT
+ max_ammo = 12
+
+/obj/item/ammo_box/magazine/c35sol_pistol/starts_empty
+ start_empty = TRUE
+
+/obj/item/ammo_box/magazine/c35sol_pistol/stendo
+ name = "\improper Sol extended pistol magazine"
+ desc = "An extended magazine for SolFed pistols, holds twenty-four rounds."
+
+ icon_state = "pistol_35_stended"
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ max_ammo = 24
+
+/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty
+ start_empty = TRUE
+
+// .40 Sol rifle magazines
+
+/obj/item/ammo_box/magazine/c40sol_rifle
+ name = "\improper Sol rifle short magazine"
+ desc = "A shortened magazine for SolFed rifles, holds fifteen rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "rifle_short"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_TINY
+
+ ammo_type = /obj/item/ammo_casing/c40sol
+ caliber = CALIBER_SOL40LONG
+ max_ammo = 15
+
+/obj/item/ammo_box/magazine/c40sol_rifle/starts_empty
+
+ start_empty = TRUE
+
+/obj/item/ammo_box/magazine/c40sol_rifle/standard
+ name = "\improper Sol rifle magazine"
+ desc = "A standard size magazine for SolFed rifles, holds thirty rounds."
+
+ icon_state = "rifle_standard"
+
+ w_class = WEIGHT_CLASS_SMALL
+
+ max_ammo = 30
+
+/obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty
+ start_empty = TRUE
+
+
+/obj/item/ammo_box/magazine/c40sol_rifle/drum
+ name = "\improper Sol rifle drum magazine"
+ desc = "A massive drum magazine for SolFed rifles, holds sixty rounds."
+
+ icon_state = "rifle_drum"
+
+ w_class = WEIGHT_CLASS_BULKY
+
+ max_ammo = 60
+
+/obj/item/ammo_box/magazine/c40sol_rifle/drum/starts_empty
+ start_empty = TRUE
+
+// .980 grenade magazines
+
+/obj/item/ammo_box/magazine/c980_grenade
+ name = "\improper Kiboko grenade box"
+ desc = "A standard size box for .980 grenades, holds four shells."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
+ icon_state = "granata_standard"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_SMALL
+
+ ammo_type = /obj/item/ammo_casing/c980grenade
+ caliber = CALIBER_980TYDHOUER
+ max_ammo = 4
+
+/obj/item/ammo_box/magazine/c980_grenade/starts_empty
+ start_empty = TRUE
+
+/obj/item/ammo_box/magazine/c980_grenade/drum
+ name = "\improper Kiboko grenade drum"
+ desc = "A drum for .980 grenades, holds six shells."
+
+ icon_state = "granata_drum"
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ max_ammo = 6
+
+/obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty
+ start_empty = TRUE
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm
new file mode 100644
index 00000000000..0103cd291c1
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm
@@ -0,0 +1,164 @@
+// Base Sol rifle
+
+/obj/item/gun/ballistic/automatic/sol_rifle
+ name = "\improper Carwo-Cawil Battle Rifle"
+ desc = "A heavy battle rifle firing .40 Sol. Commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
+ icon_state = "infanterie"
+
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
+ worn_icon_state = "infanterie"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
+ inhand_icon_state = "infanterie"
+
+ SET_BASE_PIXEL(-8, 0)
+
+ special_mags = TRUE
+
+ bolt_type = BOLT_TYPE_LOCKING
+
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+ slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle
+ spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg'
+ suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg'
+ can_suppress = TRUE
+
+ can_bayonet = FALSE
+
+ suppressor_x_offset = 12
+
+ burst_size = 1
+ fire_delay = 0.45 SECONDS
+ actions_types = list()
+
+ spread = 7.5
+ projectile_wound_bonus = -10
+
+/obj/item/gun/ballistic/automatic/sol_rifle/Initialize(mapload)
+ . = ..()
+
+ give_autofire()
+
+/// Separate proc for handling auto fire just because one of these subtypes isn't otomatica
+/obj/item/gun/ballistic/automatic/sol_rifle/proc/give_autofire()
+ AddComponent(/datum/component/automatic_fire, fire_delay)
+
+/obj/item/gun/ballistic/automatic/sol_rifle/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
+
+/obj/item/gun/ballistic/automatic/sol_rifle/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/sol_rifle/examine_more(mob/user)
+ . = ..()
+
+ . += "The Carwo-Cawil rifles are built by Carwo for \
+ use by SolFed's various infantry branches. Following the rather reasonable \
+ military requirements of using the same few cartridges and magazines, \
+ the lifespans of logistics coordinators and quartermasters everywhere \
+ were lengthened by several years. While typically only for military sale \
+ in the past, the recent collapse of certain unnamed weapons manufacturers \
+ has caused Carwo to open many of its military weapons to civilian sale, \
+ which includes this one."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/sol_rifle/no_mag
+ spawnwithmagazine = FALSE
+
+// Sol marksman rifle
+
+/obj/item/gun/ballistic/automatic/sol_rifle/marksman
+ name = "\improper Cawil Marksman Rifle"
+ desc = "A heavy marksman rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
+
+ icon_state = "elite"
+ worn_icon_state = "elite"
+ inhand_icon_state = "elite"
+
+ spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle
+
+ fire_delay = 0.75 SECONDS
+
+ spread = 0
+ projectile_damage_multiplier = 1.2
+ projectile_wound_bonus = 10
+
+/obj/item/gun/ballistic/automatic/sol_rifle/marksman/Initialize(mapload)
+ . = ..()
+
+ AddComponent(/datum/component/scope, range_modifier = 2)
+
+/obj/item/gun/ballistic/automatic/sol_rifle/marksman/give_autofire()
+ return
+
+/obj/item/gun/ballistic/automatic/sol_rifle/marksman/examine_more(mob/user)
+ . = ..()
+
+ . += "This particlar variant is a marksman rifle. \
+ Automatic fire was forsaken for a semi-automatic setup, a more fitting \
+ stock, and more often than not a scope. Typically also seen with smaller \
+ magazines for convenience for the shooter, but as with any other Sol \
+ rifle, all standard magazine types will work."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/sol_rifle/marksman/no_mag
+ spawnwithmagazine = FALSE
+
+// Machinegun based on the base Sol rifle
+
+/obj/item/gun/ballistic/automatic/sol_rifle/machinegun
+ name = "\improper Qarad Light Machinegun"
+ desc = "A hefty machinegun commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
+
+ icon_state = "outomaties"
+ worn_icon_state = "outomaties"
+ inhand_icon_state = "outomaties"
+
+ bolt_type = BOLT_TYPE_OPEN
+
+ spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/drum
+
+ fire_delay = 0.1 SECONDS
+
+ recoil = 1
+ spread = 12.5
+ projectile_wound_bonus = -20
+
+/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/examine_more(mob/user)
+ . = ..()
+
+ . += "The 'Qarad' variant of the rifle, what you are looking at now, \
+ is a modification to turn the weapon into a passable, if sub-optimal \
+ light machinegun. To support the machinegun role, the internals were \
+ converted to make the gun into an open bolt, faster firing machine. These \
+ additions, combined with a battle rifle not meant to be used fully auto \
+ much to begin with, made for a relatively unwieldy weapon. A machinegun, \
+ however, is still a machinegun, no matter how hard it is to keep on target."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/no_mag
+ spawnwithmagazine = FALSE
+
+// Evil version of the rifle (nothing different its just black)
+
+/obj/item/gun/ballistic/automatic/sol_rifle/evil
+ desc = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine."
+
+ icon_state = "infanterie_evil"
+ worn_icon_state = "infanterie_evil"
+ inhand_icon_state = "infanterie_evil"
+
+/obj/item/gun/ballistic/automatic/sol_rifle/evil/no_mag
+ spawnwithmagazine = FALSE
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm
new file mode 100644
index 00000000000..ba31a16bf09
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm
@@ -0,0 +1,66 @@
+// SolFed shotgun (this was gonna be in a proprietary shotgun shell type outside of 12ga at some point, wild right?)
+
+/obj/item/gun/ballistic/shotgun/riot/sol
+ name = "\improper Renoster Shotgun"
+ desc = "A twelve gauge shotgun with a six shell capacity underneath. Made for and used by SolFed's various military branches."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
+ icon_state = "renoster"
+
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
+ worn_icon_state = "renoster"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
+ inhand_icon_state = "renoster"
+
+ inhand_x_dimension = 32
+ inhand_y_dimension = 32
+
+ SET_BASE_PIXEL(-8, 0)
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg'
+ rack_sound = 'modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg'
+ suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg'
+ can_suppress = TRUE
+
+ suppressor_x_offset = 9
+
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
+
+/obj/item/gun/ballistic/shotgun/riot/sol/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
+
+/obj/item/gun/ballistic/shotgun/riot/sol/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/shotgun/riot/sol/examine_more(mob/user)
+ . = ..()
+
+ . += "The Renoster was designed at its core as a police shotgun. \
+ As consequence, it holds all the qualities a police force would want \
+ in one. Large shell capacity, sturdy frame, while holding enough \
+ capacity for modification to satiate even the most overfunded of \
+ peacekeeper forces. Inevitably, the weapon made its way into civilian \
+ markets alongside its sale to several military branches that also \
+ saw value in having a heavy shotgun."
+
+ return .
+
+/obj/item/gun/ballistic/shotgun/riot/sol/update_appearance(updates)
+ if(sawn_off)
+ suppressor_x_offset = 0
+ SET_BASE_PIXEL(0, 0)
+
+ . = ..()
+
+// Shotgun but EVIL!
+
+/obj/item/gun/ballistic/shotgun/riot/sol/evil
+ desc = "A twleve guage shotgun with an eight shell capacity underneath. This one is painted in a tacticool black."
+
+ icon_state = "renoster_evil"
+ worn_icon_state = "renoster_evil"
+ inhand_icon_state = "renoster_evil"
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm
new file mode 100644
index 00000000000..a6431039af8
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm
@@ -0,0 +1,69 @@
+// Base Sol SMG
+
+/obj/item/gun/ballistic/automatic/sol_smg
+ name = "\improper Sindano Submachine Gun"
+ desc = "A small submachine gun firing .35 Sol. Commonly seen in the hands of PMCs and other unsavory corpos. Accepts any standard Sol pistol magazine."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi'
+ icon_state = "sindano"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
+ inhand_icon_state = "sindano"
+
+ special_mags = TRUE
+
+ bolt_type = BOLT_TYPE_OPEN
+
+ w_class = WEIGHT_CLASS_NORMAL
+ weapon_weight = WEAPON_MEDIUM
+ slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol
+ spawn_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg'
+ can_suppress = TRUE
+
+ can_bayonet = FALSE
+
+ suppressor_x_offset = 11
+
+ burst_size = 3
+ fire_delay = 0.2 SECONDS
+
+ spread = 7.5
+
+/obj/item/gun/ballistic/automatic/sol_smg/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
+
+/obj/item/gun/ballistic/automatic/sol_smg/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/sol_smg/examine_more(mob/user)
+ . = ..()
+
+ . += "The Sindano submachinegun was originally produced for military contract. \
+ These guns were seen in the hands of anyone from medics, ship techs, logistics officers, \
+ and shuttle pilots often had several just to show off. Due to SolFed's quest to \
+ extend the lifespans of their logistics officers and quartermasters, the weapon \
+ uses the same standard pistol cartridge that most other miltiary weapons of \
+ small caliber use. This results in interchangeable magazines between pistols \
+ and submachineguns, neat!"
+
+ return .
+
+/obj/item/gun/ballistic/automatic/sol_smg/no_mag
+ spawnwithmagazine = FALSE
+
+// Sindano (evil)
+
+/obj/item/gun/ballistic/automatic/sol_smg/evil
+ desc = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine."
+
+ icon_state = "sindano_evil"
+ inhand_icon_state = "sindano_evil"
+
+/obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag
+ spawnwithmagazine = FALSE
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm
new file mode 100644
index 00000000000..5f218ebe25e
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm
@@ -0,0 +1,66 @@
+// .27-54 Cesarzowa
+// Small caliber pistol round meant to be fired out of something that shoots real quick like
+
+/obj/item/ammo_casing/c27_54cesarzowa
+ name = ".27-54 Cesarzowa piercing bullet casing"
+ desc = "A purple-bodied caseless cartridge home to a small projectile with a fine point."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "27-54cesarzowa"
+
+ caliber = CALIBER_CESARZOWA
+ projectile_type = /obj/projectile/bullet/c27_54cesarzowa
+
+/obj/item/ammo_casing/c27_54cesarzowa/Initialize(mapload)
+ . = ..()
+
+ AddElement(/datum/element/caseless)
+
+/obj/projectile/bullet/c27_54cesarzowa
+ name = ".27-54 Cesarzowa piercing bullet"
+ damage = 15
+ armour_penetration = 30
+ wound_bonus = -30
+ bare_wound_bonus = -10
+
+/obj/item/ammo_box/c27_54cesarzowa
+ name = "ammo box (.27-54 Cesarzowa piercing)"
+ desc = "A box of .27-54 Cesarzowa piercing pistol rounds, holds eighteen cartridges."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "27-54cesarzowa_box"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ caliber = CALIBER_CESARZOWA
+ ammo_type = /obj/item/ammo_casing/c27_54cesarzowa
+ max_ammo = 18
+
+// .27-54 Cesarzowa rubber
+// Small caliber pistol round meant to be fired out of something that shoots real quick like, this one is less lethal
+
+/obj/item/ammo_casing/c27_54cesarzowa/rubber
+ name = ".27-54 Cesarzowa rubber bullet casing"
+ desc = "A purple-bodied caseless cartridge home to a small projectile with a flat rubber tip."
+
+ icon_state = "27-54cesarzowa_rubber"
+
+ projectile_type = /obj/projectile/bullet/c27_54cesarzowa/rubber
+
+/obj/projectile/bullet/c27_54cesarzowa/rubber
+ name = ".27-54 Cesarzowa rubber bullet"
+ stamina = 20
+ damage = 10
+ weak_against_armour = TRUE
+ wound_bonus = -30
+ bare_wound_bonus = -10
+
+/obj/item/ammo_box/c27_54cesarzowa/rubber
+ name = "ammo box (.27-54 Cesarzowa rubber)"
+ desc = "A box of .27-54 Cesarzowa rubber pistol rounds, holds eighteen cartridges."
+
+ icon_state = "27-54cesarzowa_box_rubber"
+
+ ammo_type = /obj/item/ammo_casing/c27_54cesarzowa/rubber
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm
similarity index 77%
rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm
rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm
index a3cb7af0b03..f0ce4e32bd5 100644
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm
@@ -2,7 +2,7 @@
/obj/item/ammo_casing/energy/laser/plasma_glob
projectile_type = /obj/projectile/beam/laser/plasma_glob
- fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg'
+ fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg'
/obj/item/ammo_casing/energy/laser/plasma_glob/Initialize(mapload)
. = ..()
@@ -11,7 +11,7 @@
/obj/projectile/beam/laser/plasma_glob
name = "plasma globule"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
icon_state = "plasma_glob"
damage = 10
speed = 1.5
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm
new file mode 100644
index 00000000000..e53c55c62e9
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm
@@ -0,0 +1,68 @@
+// Various ammo boxes for .310
+
+/obj/item/ammo_box/c310_cargo_box
+ name = "ammo box (.310 Strilka lethal)"
+ desc = "A box of .310 Strilka lethal rifle rounds, holds ten cartridges."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "310_box"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ caliber = CALIBER_STRILKA310
+ ammo_type = /obj/item/ammo_casing/strilka310
+ max_ammo = 10
+
+// Rubber
+
+/obj/item/ammo_box/c310_cargo_box/rubber
+ name = "ammo box (.310 Strilka rubber)"
+ desc = "A box of .310 Strilka rubber rifle rounds, holds ten cartridges."
+
+ icon_state = "310_box_rubber"
+
+ ammo_type = /obj/item/ammo_casing/strilka310/rubber
+
+// AP
+
+/obj/item/ammo_box/c310_cargo_box/piercing
+ name = "ammo box (.310 Strilka piercing)"
+ desc = "A box of .310 Strilka piercing rifle rounds, holds ten cartridges."
+
+ icon_state = "310_box_ap"
+
+ ammo_type = /obj/item/ammo_casing/strilka310/ap
+
+// AMR bullet
+
+/obj/item/ammo_casing/p60strela
+ name = ".60 Strela caseless cartridge"
+ desc = "A massive block of plasma-purple propellant with an equally massive round sticking out the top of it. \
+ While good at killing a man, you'll find most effective use out of destroying things with it."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "amr_bullet"
+ caliber = CALIBER_60STRELA
+ projectile_type = /obj/projectile/bullet/p60strela
+
+/obj/item/ammo_casing/p60strela/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/caseless)
+
+/obj/projectile/bullet/p60strela // The funny thing is, these are wild but you only get three of them a magazine
+ name =".60 Strela bullet"
+ icon_state = "gaussphase"
+ speed = 0.4
+ damage = 50
+ armour_penetration = 50
+ wound_bonus = 20
+ bare_wound_bonus = 30
+ demolition_mod = 1.8
+ /// How much damage we add to things that are weak to this bullet
+ var/anti_materiel_damage_addition = 30
+
+/obj/projectile/bullet/p60strela/Initialize(mapload)
+ . = ..()
+ // We do 80 total damage to anything robotic, namely borgs, and robotic simplemobs
+ AddElement(/datum/element/bane, target_type = /mob/living, mob_biotypes = MOB_ROBOTIC, damage_multiplier = 0, added_damage = anti_materiel_damage_addition)
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm
new file mode 100644
index 00000000000..a893a4f7e69
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm
@@ -0,0 +1,73 @@
+// .310 magazine for the Lanca rifle
+
+/obj/item/ammo_box/magazine/lanca
+ name = "\improper Lanca rifle magazine"
+ desc = "A standard size magazine for Lanca rifles, holds five rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "lanca_mag"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ ammo_type = /obj/item/ammo_casing/strilka310
+ caliber = CALIBER_STRILKA310
+ max_ammo = 5
+
+/obj/item/ammo_box/magazine/lanca/spawns_empty
+ start_empty = TRUE
+
+// Magazine for the Miecz submachinegun
+
+/obj/item/ammo_box/magazine/miecz
+ name = "\improper Miecz submachinegun magazine"
+ desc = "A standard size magazine for Miecz submachineguns, holds eighteen rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "miecz_mag"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ ammo_type = /obj/item/ammo_casing/c27_54cesarzowa
+ caliber = CALIBER_CESARZOWA
+ max_ammo = 18
+
+/obj/item/ammo_box/magazine/miecz/spawns_empty
+ start_empty = TRUE
+
+// Plasma thrower 'magazine'
+
+/obj/item/ammo_box/magazine/recharge/plasma_battery
+ name = "plasma power pack"
+ desc = "A rechargeable, detachable battery that serves as a power source for plasma projectors."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ base_icon_state = "plasma_battery"
+ icon_state = "plasma_battery"
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+ ammo_type = /obj/item/ammo_casing/energy/laser/plasma_glob
+ caliber = CALIBER_LASER
+ max_ammo = 15
+
+/obj/item/ammo_box/magazine/recharge/plasma_battery/update_icon_state() // FUCK YOU /OBJ/ITEM/AMMO_BOX/MAGAZINE/RECHARGE
+ . = ..()
+ icon_state = base_icon_state
+
+// Shotgun revolver's cylinder
+
+/obj/item/ammo_box/magazine/internal/cylinder/rev12ga
+ name = "\improper 12 GA revolver cylinder"
+ ammo_type = /obj/item/ammo_casing/shotgun
+ caliber = CALIBER_SHOTGUN
+ max_ammo = 4
+ multiload = FALSE
+
+// AMR magazine
+
+/obj/item/ammo_box/magazine/wylom
+ name = "anti-materiel magazine (.60 Strela)"
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
+ icon_state = "wylom_mag"
+ base_icon_state = "wylom_mag"
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+ ammo_type = /obj/item/ammo_casing/p60strela
+ max_ammo = 3
+ caliber = CALIBER_60STRELA
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm
new file mode 100644
index 00000000000..068cf2508a5
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm
@@ -0,0 +1,128 @@
+// Plasma spewing pistol
+// Sprays a wall of plasma that sucks against armor but fucks against unarmored targets
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_thrower
+ name = "\improper Słońce Plasma Projector"
+ desc = "An outdated sidearm rarely seen in use by some members of the CIN. \
+ Uses plasma power packs. \
+ Spews an inaccurate stream of searing plasma out the magnetic barrel so long as it has power and the trigger is pulled."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
+ icon_state = "slonce"
+
+ fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg'
+ fire_sound_volume = 40 // This thing is comically loud otherwise
+
+ w_class = WEIGHT_CLASS_NORMAL
+ accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery
+ can_suppress = FALSE
+ show_bolt_icon = FALSE
+ casing_ejector = FALSE
+ empty_indicator = FALSE
+ bolt_type = BOLT_TYPE_OPEN
+ fire_delay = 0.1 SECONDS
+ spread = 15
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/Initialize(mapload)
+ . = ..()
+
+ AddComponent(/datum/component/automatic_fire, autofire_shot_delay = fire_delay)
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/examine_more(mob/user)
+ . = ..()
+
+ . += "The 'Słońce' started life as an experiment in advancing the field of accelerated \
+ plasma weaponry. Despite the design's obvious shortcomings in terms of accuracy and \
+ range, the CIN combined military command (which we'll call the CMC from now on) took \
+ interest in the weapon as a means to counter Sol's more advanced armor technology. \
+ As it would turn out, the plasma globules created by the weapon were really not \
+ as effective against armor as the CMC had hoped, quite the opposite actually. \
+ What the plasma did do well however was inflict grevious burns upon anyone unfortunate \
+ enough to get hit by it unprotected. For this reason, the 'Słońce' saw frequent use by \
+ army officers and ship crews who needed a backup weapon to incinerate the odd space \
+ pirate or prisoner of war."
+
+ return .
+
+// Plasma sharpshooter pistol
+// Shoots single, strong plasma blasts at a slow rate
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_marksman
+ name = "\improper Gwiazda Plasma Sharpshooter"
+ desc = "An outdated sidearm rarely seen in use by some members of the CIN. \
+ Uses plasma power packs. \
+ Fires relatively accurate globs of searing plasma."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
+ icon_state = "gwiazda"
+
+ fire_sound = 'modular_nova/modules/microfusion/sound/burn.ogg'
+ fire_sound_volume = 40 // This thing is comically loud otherwise
+
+ w_class = WEIGHT_CLASS_NORMAL
+ accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery
+ can_suppress = FALSE
+ show_bolt_icon = FALSE
+ casing_ejector = FALSE
+ empty_indicator = FALSE
+ bolt_type = BOLT_TYPE_OPEN
+ fire_delay = 0.6 SECONDS
+ spread = 2.5
+
+ projectile_damage_multiplier = 3 // 30 damage a shot
+ projectile_wound_bonus = 10 // +55 of the base projectile, burn baby burn
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine_more(mob/user)
+ . = ..()
+
+ . += "The 'Gwiazda' is a further refinement of the 'Słońce' design. with improved \
+ energy cycling, magnetic launchers built to higher precision, and an overall more \
+ ergonomic design. While it still fails to perform against armor, the weapon is \
+ significantly more accurate and higher power, at expense of a much lower firerate. \
+ Opinions on this weapon within military service were highly mixed, with many preferring \
+ the sheer stopping power a spray of plasma could produce, with others loving the new ability \
+ to hit something in front of you for once."
+
+ return .
+
+// A revolver, but it can hold shotgun shells
+// Woe, buckshot be upon ye
+
+/obj/item/gun/ballistic/revolver/shotgun_revolver
+ name = "\improper Bóbr 12 GA revolver"
+ desc = "An outdated sidearm rarely seen in use by some members of the CIN. A revolver type design with a four shell cylinder. That's right, shell, this one shoots twelve guage."
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/rev12ga
+ recoil = SAWN_OFF_RECOIL
+ weapon_weight = WEAPON_MEDIUM
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
+ icon_state = "bobr"
+ fire_sound = 'modular_nova/modules/sec_haul/sound/revolver_fire.ogg'
+ spread = SAWN_OFF_ACC_PENALTY
+
+/obj/item/gun/ballistic/revolver/shotgun_revolver/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/revolver/shotgun_revolver/examine_more(mob/user)
+ . = ..()
+
+ . += "The 'Bóbr' started development as a limited run sporting weapon before \
+ the military took interest. The market quickly changed from sport shooting \
+ targets, to sport shooting SolFed strike teams once the conflict broke out. \
+ This pattern is different from the original civilian version, with a military \
+ standard pistol grip and weather resistant finish. While the 'Bóbr' was not \
+ a weapon standard issued to every CIN soldier, it was available for relatively \
+ cheap, and thus became rather popular among the ranks."
+
+ return .
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm
new file mode 100644
index 00000000000..8ef7536c2e9
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm
@@ -0,0 +1,133 @@
+// Semi-automatic rifle firing .310 with reduced damage compared to a Sakhno
+
+/obj/item/gun/ballistic/automatic/lanca
+ name = "\improper Lanca Battle Rifle"
+ desc = "A relatively compact, long barreled bullpup battle rifle chambered for .310 Strilka. Has an integrated sight with \
+ a surprisingly functional amount of magnification, given its place of origin."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi'
+ icon_state = "lanca"
+
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi'
+ worn_icon_state = "lanca"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi'
+ inhand_icon_state = "lanca"
+
+ SET_BASE_PIXEL(-8, 0)
+
+ special_mags = FALSE
+
+ bolt_type = BOLT_TYPE_STANDARD
+
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+ slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/lanca
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg'
+ suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg'
+ can_suppress = TRUE
+ suppressor_x_offset = 0
+ suppressor_y_offset = 0
+
+ can_bayonet = FALSE
+
+ burst_size = 1
+ fire_delay = 1.2 SECONDS
+ actions_types = list()
+
+ recoil = 0.5
+ spread = 2.5
+ projectile_wound_bonus = -20
+
+/obj/item/gun/ballistic/automatic/lanca/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/scope, range_modifier = 1.5)
+
+/obj/item/gun/ballistic/automatic/lanca/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/automatic/lanca/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/lanca/examine_more(mob/user)
+ . = ..()
+
+ . += "The Lanca is a now relatively dated replacement for Kalashnikov pattern rifles \
+ adopted by states now combining to form the CIN. While the rifle that came before them \
+ had its benefits, leadership of many armies started to realize that the Kalashnikov-based \
+ rifles were really showing their age once the variants began reaching the thousands in serial. \
+ The solution was presented by a then new company, Szot Dynamica. This new rifle, not too \
+ unlike the one you are seeing now, adopted all of the latest technology of the time. Lightweight \
+ caseless ammunition, well known for its use in Sakhno rifles, as well as various electronics and \
+ other incredible technological advancements. These advancements may have already been around since \
+ before the creation of even the Sakhno, but the fact you're seeing this now fifty year old design \
+ must mean something, right?"
+
+ return .
+
+/obj/item/gun/ballistic/automatic/lanca/no_mag
+ spawnwithmagazine = FALSE
+
+// The AMR
+// This sounds a lot scarier than it actually is, you'll just have to trust me here
+
+/obj/item/gun/ballistic/automatic/wylom
+ name = "\improper Wyłom Anti-Materiel Rifle"
+ desc = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, \
+ the massively overperforming penetration of which being the reason this weapon was discontinued."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi'
+ base_pixel_x = -16 // This baby is 64 pixels wide
+ pixel_x = -16
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi'
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi'
+ inhand_x_dimension = 64
+ inhand_y_dimension = 64
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi'
+ icon_state = "wylom"
+ inhand_icon_state = "wylom"
+ worn_icon_state = "wylom"
+ w_class = WEIGHT_CLASS_HUGE
+ slot_flags = ITEM_SLOT_BACK
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/wylom
+ can_suppress = FALSE
+ can_bayonet = FALSE
+
+ fire_sound = 'modular_nova/modules/novaya_ert/sound/amr_fire.ogg'
+ fire_sound_volume = 100 // BOOM BABY
+
+ recoil = 4
+
+ weapon_weight = WEAPON_HEAVY
+ burst_size = 1
+ fire_delay = 2 SECONDS
+ actions_types = list()
+
+ force = 15 // I mean if you're gonna beat someone with the thing you might as well get damage appropriate for how big the fukken thing is
+
+/obj/item/gun/ballistic/automatic/wylom/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/automatic/wylom/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/wylom/examine_more(mob/user)
+ . = ..()
+
+ . += "The 'Wyłom' AMR was a weapon not originally made for unaided human hands. \
+ The original rifle had mounting points for a specialized suit attachment system, \
+ not too much unlike heavy smartguns that can be seen across the galaxy. CIN military \
+ command, however, deemed that expensive exoskeletons and rigs for carrying an organic \
+ anti material system were simply not needed, and that soldiers should simply 'deal with it'. \
+ Unsurprisingly, soldiers assigned this weapon tend to not be a massive fan of that fact, \
+ and smekalka within CIN ranks is common with troops finding novel ways to carry and use \
+ their large rifles with as little effort as possible. Most of these novel methods, of course, \
+ tend to shatter when the rifle is actually fired."
+
+ return .
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm
new file mode 100644
index 00000000000..40dbcde5e54
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm
@@ -0,0 +1,64 @@
+// Rapid firing submachinegun firing .27-54 Cesarzowa
+
+/obj/item/gun/ballistic/automatic/miecz
+ name = "\improper Miecz Submachine Gun"
+ desc = "A short barrel, further compacted conversion of the 'Lanca' rifle to fire pistol caliber .27-54 cartridges. \
+ Due to the intended purpose of the weapon, and less than optimal ranged performance of the projectile, it has \
+ nothing more than basic glow-sights as opposed to the ranged scope Lanca users might be used to."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi'
+ icon_state = "miecz"
+
+ inhand_icon_state = "c20r"
+ worn_icon_state = "gun"
+
+ SET_BASE_PIXEL(-8, 0)
+
+ special_mags = FALSE
+
+ bolt_type = BOLT_TYPE_STANDARD
+
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_MEDIUM
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/miecz
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_light.ogg'
+ can_suppress = TRUE
+ suppressor_x_offset = 0
+ suppressor_y_offset = 0
+
+ can_bayonet = FALSE
+
+ burst_size = 1
+ fire_delay = 0.2 SECONDS
+ actions_types = list()
+
+ spread = 5
+
+/obj/item/gun/ballistic/automatic/miecz/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/automatic_fire, fire_delay)
+
+/obj/item/gun/ballistic/automatic/miecz/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
+
+/obj/item/gun/ballistic/automatic/miecz/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/miecz/examine_more(mob/user)
+ . = ..()
+
+ . += "The Meicz is one of the newest weapons to come out of CIN member state hands and \
+ into the wild, typically the frontier. It was built alongside the round it fires, the \
+ .27-54 Cesarzawa pistol round. Based on the proven Lanca design, it seeks to bring that \
+ same reliable weapon design into the factor of a submachinegun. While it is significantly \
+ larger than many comparable weapons in SolFed use, it more than makes up for it with ease \
+ of control and significant firerate."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/miecz/no_mag
+ spawnwithmagazine = FALSE
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm
new file mode 100644
index 00000000000..e04da1c5a7b
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm
@@ -0,0 +1,41 @@
+/obj/structure/sign/poster/official/trappiste_suppressor
+ name = "Keep It Quiet - Ear Protection Unneeded"
+ desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, a \
+ diagram of the average suppressor, and how on most* Trappiste weapons \
+ the sound of firing will be low enough to eradicate the need for ear protection. \
+ How safety minded, they even have a non-liability statement too."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi'
+ icon_state = "keep_it_quiet"
+
+/obj/structure/sign/poster/official/trappiste_suppressor/examine_more(mob/user)
+ . = ..()
+
+ . += "It was hard to notice before, but now that you really look at it... \
+ This thing is completely covered in micro scale text telling you in just about \
+ every human language and then some that Trappiste isn't liable for ear damage \
+ caused by their weapons, suppressed or not."
+
+ return .
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_suppressor, 32)
+
+/obj/structure/sign/poster/official/trappiste_ammunition
+ name = "Know Your Ammuniton Colors"
+ desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, \
+ a variety of colors that one may find on .585 Trappiste rounds. \
+ A plain white case usually means lethal, while a blue stripe is less-lethal \
+ and a purple stripe is more lethal. How informative."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi'
+ icon_state = "know_the_difference"
+
+/obj/structure/sign/poster/official/trappiste_ammunition/examine_more(mob/user)
+ . = ..()
+
+ . += "Small text details that this information may also be transferrable \
+ to other types of SolFed ammunition, but that you should check the box \
+ the bullets come in just to be sure. Trappiste is, of course,\
+ not liable for excess harm caused by misreading color identification systems."
+
+ return .
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_ammunition, 32)
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm
new file mode 100644
index 00000000000..a55341bf45c
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm
@@ -0,0 +1,91 @@
+// .585 Trappiste
+// High caliber round used in large pistols and revolvers
+
+/obj/item/ammo_casing/c585trappiste
+ name = ".585 Trappiste lethal bullet casing"
+ desc = "A white polymer cased high caliber round commonly used in handguns."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
+ icon_state = "585trappiste"
+
+ caliber = CALIBER_585TRAPPISTE
+ projectile_type = /obj/projectile/bullet/c585trappiste
+
+/obj/projectile/bullet/c585trappiste
+ name = ".585 Trappiste bullet"
+ damage = 45
+ wound_bonus = 0 // Normal bullets are 20
+
+/obj/item/ammo_box/c585trappiste
+ name = "ammo box (.585 Trappiste lethal)"
+ desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
+ icon_state = "585box"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ caliber = CALIBER_585TRAPPISTE
+ ammo_type = /obj/item/ammo_casing/c585trappiste
+ max_ammo = 12
+
+// .585 Trappiste equivalent to a rubber bullet
+
+/obj/item/ammo_casing/c585trappiste/incapacitator
+ name = ".585 Trappiste flathead bullet casing"
+ desc = "A white polymer cased high caliber round with a relatively soft, flat tip. Designed to flatten against targets and usually not penetrate on impact."
+
+ icon_state = "585trappiste_disabler"
+
+ projectile_type = /obj/projectile/bullet/c585trappiste/incapacitator
+ harmful = FALSE
+
+/obj/projectile/bullet/c585trappiste/incapacitator
+ name = ".585 Trappiste flathead bullet"
+ damage = 20
+ stamina = 40
+ wound_bonus = 10
+
+ weak_against_armour = TRUE
+
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+
+/obj/item/ammo_box/c585trappiste/incapacitator
+ name = "ammo box (.585 Trappiste flathead)"
+ desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The blue stripe indicates that it should hold less lethal rounds."
+
+ icon_state = "585box_disabler"
+
+ ammo_type = /obj/item/ammo_casing/c585trappiste/incapacitator
+
+// .585 hollowpoint, made to cause nasty wounds
+
+/obj/item/ammo_casing/c585trappiste/hollowpoint
+ name = ".585 Trappiste hollowhead bullet casing"
+ desc = "A white polymer cased high caliber round with a hollowed tip. Designed to cause as much damage on impact to fleshy targets as possible."
+
+ icon_state = "585trappiste_shrapnel"
+ projectile_type = /obj/projectile/bullet/c585trappiste/hollowpoint
+
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/c585trappiste/hollowpoint
+ name = ".585 Trappiste hollowhead bullet"
+ damage = 35
+
+ weak_against_armour = TRUE
+
+ wound_bonus = 30
+ bare_wound_bonus = 40
+
+/obj/item/ammo_box/c585trappiste/hollowpoint
+ name = "ammo box (.585 Trappiste hollowhead)"
+ desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The purple stripe indicates that it should hold hollowpoint-like rounds."
+
+ icon_state = "585box_shrapnel"
+
+ ammo_type = /obj/item/ammo_casing/c585trappiste/hollowpoint
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm
new file mode 100644
index 00000000000..661b220de97
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm
@@ -0,0 +1,42 @@
+// Base yellow with symbol trappiste case
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case
+ desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely. The five square grid of Trappiste Fabriek is displayed prominently on the top."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi'
+ icon_state = "case_trappiste"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi'
+ inhand_icon_state = "yellowcase"
+
+// Empty version of the case
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty/PopulateContents()
+ return
+
+// Gunset for the Wespe pistol
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe
+ name = "Trappiste 'Wespe' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/sol/no_mag
+ extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol
+
+// Gunset for the Skild heavy pistol
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild
+ name = "Trappiste 'Skild' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag
+ extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol
+
+// Gunset for the Takbok Revolver
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/takbok
+ name = "Trappiste 'Takbok' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/revolver/takbok
+ extra_to_spawn = /obj/item/ammo_box/c585trappiste
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm
new file mode 100644
index 00000000000..e256aca9ee9
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm
@@ -0,0 +1,19 @@
+// .585 pistol magazines
+
+/obj/item/ammo_box/magazine/c585trappiste_pistol
+ name = "\improper Trappiste pistol magazine"
+ desc = "A standard size magazine for Trappiste pistols, holds six rounds."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
+ icon_state = "pistol_585_standard"
+
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+ w_class = WEIGHT_CLASS_SMALL
+
+ ammo_type = /obj/item/ammo_casing/c585trappiste
+ caliber = CALIBER_585TRAPPISTE
+ max_ammo = 6
+
+/obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty
+ start_empty = TRUE
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm
new file mode 100644
index 00000000000..c8c5b02efc4
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm
@@ -0,0 +1,109 @@
+// .35 Sol pistol
+
+/obj/item/gun/ballistic/automatic/pistol/sol
+ name = "\improper Wespe Pistol"
+ desc = "The standard issue service pistol of SolFed's various military branches. Uses .35 Sol and comes with an attached light."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
+ icon_state = "wespe"
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/pistol_light.ogg'
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol
+ special_mags = TRUE
+
+ suppressor_x_offset = 7
+ suppressor_y_offset = 0
+
+ fire_delay = 0.3 SECONDS
+
+/obj/item/gun/ballistic/automatic/pistol/sol/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
+
+/obj/item/gun/ballistic/automatic/pistol/sol/add_seclight_point()
+ AddComponent(/datum/component/seclite_attachable, \
+ starting_light = new /obj/item/flashlight/seclite(src), \
+ is_light_removable = FALSE, \
+ )
+
+/obj/item/gun/ballistic/automatic/pistol/sol/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/pistol/sol/examine_more(mob/user)
+ . = ..()
+
+ . += "The Wespe is a pistol that was made entirely for military use. \
+ Required to use a standard round, standard magazines, and be able \
+ to function in all of the environments that SolFed operated in \
+ commonly. These qualities just so happened to make the weapon \
+ popular in frontier space and is likely why you are looking at \
+ one now."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/pistol/sol/no_mag
+ spawnwithmagazine = FALSE
+
+// Sol pistol evil gun
+
+/obj/item/gun/ballistic/automatic/pistol/sol/evil
+ desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light. This one is painted tacticool black."
+
+ icon_state = "wespe_evil"
+
+/obj/item/gun/ballistic/automatic/pistol/sol/evil/no_mag
+ spawnwithmagazine = FALSE
+
+// Trappiste high caliber pistol in .585
+
+/obj/item/gun/ballistic/automatic/pistol/trappiste
+ name = "\improper Skild Pistol"
+ desc = "A somewhat rare to see Trappiste pistol firing the high caliber .585 developed by the same company. \
+ Sees rare use mainly due to its tendency to cause severe wrist discomfort."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
+ icon_state = "skild"
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg'
+ suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg'
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol
+
+ suppressor_x_offset = 8
+ suppressor_y_offset = 0
+
+ fire_delay = 1 SECONDS
+
+ recoil = 3
+
+/obj/item/gun/ballistic/automatic/pistol/trappiste/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
+
+/obj/item/gun/ballistic/automatic/pistol/sol/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/pistol/trappiste/examine_more(mob/user)
+ . = ..()
+
+ . += "The Skild only exists due to a widely known event that SolFed's military \
+ would prefer wasn't anywhere near as popular. A general, name unknown as of now, \
+ was recorded complaining about the lack of capability the Wespe provided to the \
+ military, alongside several statements comparing the Wespe's lack of masculinity \
+ to the, quote, 'unique lack of testosterone those NRI mongrels field'. While the \
+ identities of both the general and people responsible for the leaking of the recording \
+ are still classified, many high ranking SolFed military staff suspiciously have stopped \
+ appearing in public, unlike the Skild. A lot of several thousand pistols, the first \
+ of the weapons to ever exist, were not so silently shipped to SolFed's Plutonian \
+ shipping hub from TRAPPIST. SolFed military command refuses to answer any \
+ further questions about the incident to this day."
+
+ return .
+
+/obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag
+ spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm
similarity index 77%
rename from modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm
rename to modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm
index 22cbb471449..26387125b88 100644
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/revolver.dm
@@ -1,10 +1,10 @@
// .35 Sol mini revolver
/obj/item/gun/ballistic/revolver/sol
- name = "\improper Trappiste 'Eland' Revolver"
+ name = "\improper Eland Revolver"
desc = "A small revolver with a comically short barrel and cylinder space for eight .35 Sol Short rounds."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
icon_state = "eland"
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/c35sol
@@ -18,6 +18,10 @@
/obj/item/gun/ballistic/revolver/sol/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
+/obj/item/gun/ballistic/revolver/sol/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
/obj/item/gun/ballistic/revolver/sol/examine_more(mob/user)
. = ..()
@@ -39,14 +43,14 @@
// .585 super revolver
/obj/item/gun/ballistic/revolver/takbok
- name = "\improper Trappiste 'Takbok' Revolver"
+ name = "\improper Takbok Revolver"
desc = "A hefty revolver with an equally large cylinder capable of holding five .585 Trappiste rounds."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
icon_state = "takbok"
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg'
- suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg'
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg'
+ suppressed_sound = 'modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg'
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/c585trappiste
@@ -60,6 +64,10 @@
/obj/item/gun/ballistic/revolver/takbok/give_manufacturer_examine()
AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
+/obj/item/gun/ballistic/revolver/takbok/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
/obj/item/gun/ballistic/revolver/takbok/examine_more(mob/user)
. = ..()
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm
new file mode 100644
index 00000000000..cb5bf63a816
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm
@@ -0,0 +1,45 @@
+/*
+* .310 Strilka
+*/
+
+/obj/item/ammo_casing/strilka310/rubber
+ name = ".310 Strilka rubber bullet casing"
+ desc = "A .310 rubber bullet casing. Casing is a bit of a fib, there isn't one.\
+ \
+ RUBBER: Less than lethal ammo. Deals both stamina damage and regular damage. "
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi'
+ icon_state = "310-casing-rubber"
+
+ projectile_type = /obj/projectile/bullet/strilka310/rubber
+ harmful = FALSE
+
+/obj/projectile/bullet/strilka310/rubber
+ name = ".310 rubber bullet"
+ damage = 15
+ stamina = 55
+ ricochets_max = 5
+ ricochet_incidence_leeway = 0
+ ricochet_chance = 130
+ ricochet_decay_damage = 0.7
+ shrapnel_type = null
+ sharpness = NONE
+ embedding = null
+
+/obj/item/ammo_casing/strilka310/ap
+ name = ".310 Strilka armor-piercing bullet casing"
+ desc = "A .310 armor-piercing bullet casing. Note, does not actually contain a casing.\
+ \
+ ARMOR-PIERCING: Improved armor-piercing capabilities, in return for less outright damage. "
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi'
+ icon_state = "310-casing-ap"
+
+ projectile_type = /obj/projectile/bullet/strilka310/ap
+ custom_materials = AMMO_MATS_AP
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/strilka310/ap
+ name = ".310 armor-piercing bullet"
+ damage = 50
+ armour_penetration = 60
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm
new file mode 100644
index 00000000000..ec1d1d04ba5
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm
@@ -0,0 +1,30 @@
+// Base yellow carwo case
+
+/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi'
+ icon_state = "case_xhihao"
+
+// Empty version of the case
+
+/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/empty
+
+/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/empty/PopulateContents()
+ return
+
+// Contains the Bogseo submachinegun, excellent for breaking shoulders
+
+/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo
+ name = "\improper Xhihao 'Bogseo' gunset"
+
+ weapon_to_spawn = /obj/item/gun/ballistic/automatic/xhihao_smg/no_mag
+ extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol
+
+/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo/PopulateContents()
+ new weapon_to_spawn (src)
+
+ generate_items_inside(list(
+ /obj/item/ammo_box/c585trappiste/incapacitator = 1,
+ /obj/item/ammo_box/c585trappiste = 1,
+ /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty = 3,
+ ), src)
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
new file mode 100644
index 00000000000..477517ad5d6
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
@@ -0,0 +1,61 @@
+/*
+* QM Sporter Rifle
+*/
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized
+ name = "\improper Rengo Precision Rifle"
+ desc = "A heavily modified Sakhno rifle, parts made by Xhihao light arms based around Jupiter herself. \
+ Has a higher capacity than standard Sakhno rifles, fitting ten .310 cartridges."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi'
+ icon_state = "rengo"
+ worn_icon_state = "enchanted_rifle" // Not actually magical looking, just looks closest to this one
+ inhand_icon_state = "enchanted_rifle"
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba
+ can_be_sawn_off = FALSE
+ knife_x_offset = 35
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized/Initialize(mapload)
+ . = ..()
+
+ AddComponent(/datum/component/scope, range_modifier = 1.5)
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO)
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized/examine_more(mob/user)
+ . = ..()
+
+ . += "The Xhihao 'Rengo' conversion rifle. Came as parts sold in a single kit by Xhihao Light Arms, \
+ which can be swapped out with many of the outdated or simply old parts on a typical Sakhno rifle. \
+ While not necessarily increasing performance in any way, the magazine is slightly longer. The weapon \
+ is also overall a bit shorter, making it easier to handle for some people. Cannot be sawn off, cutting \
+ really any part of this weapon off would make it non-functional."
+
+ return .
+
+/obj/item/gun/ballistic/rifle/boltaction/sporterized/empty
+ bolt_locked = TRUE // so the bolt starts visibly open
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba/empty
+
+/obj/item/ammo_box/magazine/internal/boltaction/bubba
+ name = "Sakhno extended internal magazine"
+ desc = "How did you get it out?"
+ ammo_type = /obj/item/ammo_casing/strilka310
+ caliber = CALIBER_STRILKA310
+ max_ammo = 8
+
+/obj/item/ammo_box/magazine/internal/boltaction/bubba/empty
+ start_empty = TRUE
+
+/*
+* Box that contains Sakhno rifles, but less soviet union since we don't have one of those
+*/
+
+/obj/item/storage/toolbox/guncase/soviet/sakhno
+ desc = "A weapon's case. This one is green and looks pretty old, but is otherwise in decent condition."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi'
+ material_flags = NONE // ????? Why do these have materials enabled??
diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm
new file mode 100644
index 00000000000..48508530a8f
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm
@@ -0,0 +1,65 @@
+// Evil .585 smg that blueshields spawn with that will throw your screen like hell but itll sure kill whoever threatens a head really good
+
+/obj/item/gun/ballistic/automatic/xhihao_smg
+ name = "\improper Bogseo Submachine Gun"
+ desc = "A weapon that could hardly be called a 'sub' machinegun, firing the monstrous .585 cartridge. \
+ It provides enough kick to bruise a shoulder pretty bad if used without protection."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi'
+ icon_state = "bogseo"
+
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi'
+ inhand_icon_state = "bogseo"
+
+ special_mags = FALSE
+
+ bolt_type = BOLT_TYPE_STANDARD
+
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+ slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT
+
+ accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol
+
+ fire_sound = 'modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg'
+ can_suppress = TRUE
+
+ can_bayonet = FALSE
+
+ suppressor_x_offset = 9
+
+ burst_size = 1
+ fire_delay = 0.15 SECONDS
+ actions_types = list()
+
+ // Because we're firing a lot of these really fast, we want a lot less wound chance
+ projectile_wound_bonus = -20
+ spread = 12.5
+ // Hope you didn't need to see anytime soon
+ recoil = 2
+
+/obj/item/gun/ballistic/automatic/xhihao_smg/give_manufacturer_examine()
+ AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO)
+ AddComponent(/datum/component/automatic_fire, fire_delay)
+
+/obj/item/gun/ballistic/automatic/xhihao_smg/examine(mob/user)
+ . = ..()
+ . += span_notice("You can examine closer to learn a little more about this weapon.")
+
+/obj/item/gun/ballistic/automatic/xhihao_smg/examine_more(mob/user)
+ . = ..()
+
+ . += "The Bogseo submachinegun is seen in highly different lights based on \
+ who you ask. Ask a Jovian, and they'll go off all day about how they \
+ love the thing so. A big weapon for shooting big targets, like the \
+ fuel-stat raiders in their large suits of armor. Ask a space pirate, however \
+ and you'll get a different story. That is thanks to many SolFed anti-piracy \
+ units picking the Bogseo as their standard boarding weapon. What better \
+ to ruin a brigand's day than a bullet large enough to turn them into \
+ mist at full auto, after all?"
+
+ return .
+
+/obj/item/gun/ballistic/automatic/xhihao_smg/no_mag
+ spawnwithmagazine = FALSE
diff --git a/modular_nova/modules/modular_weapons/code/conversion_kits.dm b/modular_nova/modules/modular_weapons/code/conversion_kits.dm
new file mode 100644
index 00000000000..45802b574d3
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/conversion_kits.dm
@@ -0,0 +1,46 @@
+/obj/item/crafting_conversion_kit
+ name = "base conversion kit"
+ desc = "It's a set of parts, for something. This shouldn't be here, and you should probably throw this away, since it's not going to be very useful."
+ icon = 'icons/obj/storage/box.dmi'
+ icon_state = "secbox"
+ // the inhands are just what the box uses
+ inhand_icon_state = "syringe_kit"
+ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
+ drop_sound = 'sound/items/handling/component_drop.ogg'
+ pickup_sound = 'sound/items/handling/component_pickup.ogg'
+
+/obj/item/crafting_conversion_kit/mosin_pro
+ name = "\improper Xhihao 'Rengo' rifle conversion kit"
+ desc = "All the parts you need to make a 'Rengo' rifle, outside of the parts that make the gun actually a gun. \
+ It looks like this stuff could fit on an old Sakhno rifle, if only you had one of those around."
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi'
+ icon_state = "xhihao_conversion_kit"
+
+/datum/crafting_recipe/mosin_pro
+ name = "Sakhno to Xhihao 'Rengo' Conversion"
+ desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. It takes roughly thirty seconds and a screwdriver."
+ result = /obj/item/gun/ballistic/rifle/boltaction/sporterized/empty
+ reqs = list(
+ /obj/item/gun/ballistic/rifle/boltaction = 1,
+ /obj/item/crafting_conversion_kit/mosin_pro = 1
+ )
+ steps = list(
+ "Empty the rifle",
+ "Leave the bolt open"
+ )
+ tool_behaviors = list(TOOL_SCREWDRIVER)
+ time = 30 SECONDS
+ category = CAT_WEAPON_RANGED
+
+/datum/crafting_recipe/mosin_pro/New()
+ ..()
+ blacklist |= subtypesof(/obj/item/gun/ballistic/rifle/boltaction) - list(/obj/item/gun/ballistic/rifle/boltaction/surplus)
+
+/datum/crafting_recipe/mosin_pro/check_requirements(mob/user, list/collected_requirements)
+ var/obj/item/gun/ballistic/rifle/boltaction/the_piece = collected_requirements[/obj/item/gun/ballistic/rifle/boltaction][1]
+ if(!the_piece.bolt_locked)
+ return FALSE
+ if(LAZYLEN(the_piece.magazine.stored_ammo))
+ return FALSE
+ return ..()
diff --git a/modular_skyrat/modules/modular_weapons/code/energy.dm b/modular_nova/modules/modular_weapons/code/energy.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/energy.dm
rename to modular_nova/modules/modular_weapons/code/energy.dm
diff --git a/modular_nova/modules/modular_weapons/code/gunsets.dm b/modular_nova/modules/modular_weapons/code/gunsets.dm
new file mode 100644
index 00000000000..9990a613b4f
--- /dev/null
+++ b/modular_nova/modules/modular_weapons/code/gunsets.dm
@@ -0,0 +1,70 @@
+/*
+* GUNSET BOXES
+*/
+
+/obj/item/storage/toolbox/guncase/skyrat
+ desc = "A thick gun case with foam inserts laid out to fit a weapon, magazines, and gear securely."
+
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi'
+ icon_state = "guncase"
+
+ worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi'
+ worn_icon_state = "darkcase"
+
+ slot_flags = ITEM_SLOT_BACK
+
+ material_flags = NONE
+
+ /// Is the case visually opened or not
+ var/opened = FALSE
+
+/obj/item/storage/toolbox/guncase/skyrat/Initialize(mapload)
+ . = ..()
+ atom_storage.max_total_storage = 14 // Technically means you could fit multiple large guns in here but its a case you cant backpack anyways so what it do
+ atom_storage.max_slots = 6 // We store some extra items in these so lets make a little extra room
+
+/obj/item/storage/toolbox/guncase/skyrat/update_icon()
+ . = ..()
+ if(opened)
+ icon_state = "[initial(icon_state)]-open"
+ else
+ icon_state = initial(icon_state)
+
+/obj/item/storage/toolbox/guncase/skyrat/AltClick(mob/user)
+ . = ..()
+ opened = !opened
+ update_icon()
+
+/obj/item/storage/toolbox/guncase/skyrat/attack_self(mob/user)
+ . = ..()
+ opened = !opened
+ update_icon()
+
+// Empty guncase
+
+/obj/item/storage/toolbox/guncase/skyrat/empty
+
+/obj/item/storage/toolbox/guncase/skyrat/empty/PopulateContents()
+ return
+
+// Small case for pistols and whatnot
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol
+ name = "small gun case"
+
+ icon_state = "guncase_s"
+
+ slot_flags = NONE
+
+ w_class = WEIGHT_CLASS_NORMAL
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
+
+// Empty pistol case
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/empty
+
+/obj/item/storage/toolbox/guncase/skyrat/pistol/empty/PopulateContents()
+ return
diff --git a/modular_skyrat/modules/modular_weapons/code/melee.dm b/modular_nova/modules/modular_weapons/code/melee.dm
similarity index 75%
rename from modular_skyrat/modules/modular_weapons/code/melee.dm
rename to modular_nova/modules/modular_weapons/code/melee.dm
index 8165a798a6f..80c1835aca1 100644
--- a/modular_skyrat/modules/modular_weapons/code/melee.dm
+++ b/modular_nova/modules/modular_weapons/code/melee.dm
@@ -3,8 +3,8 @@
/obj/item/storage/belt/sabre/cargo
name = "authentic shamshir leather sheath"
desc = "A good-looking sheath that is advertised as being made of real Venusian black leather. It feels rather plastic-like to the touch, and it looks like it's made to fit a British cavalry sabre."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
/obj/item/storage/belt/sabre/cargo/PopulateContents()
new /obj/item/melee/sabre/cargo(src)
@@ -18,9 +18,9 @@
/obj/item/melee/sabre/cargo
name = "authentic shamshir sabre"
desc = "An expertly crafted historical human sword once used by the Persians which has recently gained traction due to Venusian historal recreation sports. One small flaw, the Taj-based company who produces these has mistaken them for British cavalry sabres akin to those used by high ranking Nanotrasen officials. Atleast it cuts the same way!"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/melee.dmi'
+ lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi'
block_chance = 20
armour_penetration = 25
diff --git a/modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm b/modular_nova/modules/modular_weapons/code/modular_projectiles.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/modular_projectiles.dm
rename to modular_nova/modules/modular_weapons/code/modular_projectiles.dm
diff --git a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm b/modular_nova/modules/modular_weapons/code/pepperball_gun.dm
similarity index 89%
rename from modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm
rename to modular_nova/modules/modular_weapons/code/pepperball_gun.dm
index 6b28643245d..14702ecdeb1 100644
--- a/modular_skyrat/modules/modular_weapons/code/pepperball_gun.dm
+++ b/modular_nova/modules/modular_weapons/code/pepperball_gun.dm
@@ -1,7 +1,7 @@
/obj/item/gun/ballistic/automatic/pistol/pepperball
name = "\improper Bolt Pepperball AHG"
desc = "An incredibly mediocre 'firearm' designed to fire soft pepper balls meant to easily subdue targets."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi'
icon_state = "peppergun"
w_class = WEIGHT_CLASS_SMALL
accepted_magazine_type = /obj/item/ammo_box/magazine/pepperball
@@ -21,7 +21,7 @@
/obj/item/ammo_box/magazine/pepperball
name = "pistol magazine (pepperball)"
desc = "A gun magazine filled with balls."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi'
icon_state = "pepperball"
ammo_type = /obj/item/ammo_casing/pepperball
caliber = CALIBER_PEPPERBALL
@@ -37,7 +37,7 @@
/obj/projectile/bullet/pepperball
name = "pepperball orb"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi'
icon_state = "pepperball"
damage = 0
stamina = 5
@@ -67,7 +67,7 @@
/obj/item/ammo_box/advanced/pepperballs
name = "pepperball ammo box"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi'
+ icon = 'modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi'
icon_state = "box10x24"
ammo_type = /obj/item/ammo_casing/pepperball
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3)
diff --git a/modular_skyrat/modules/modular_weapons/code/skillchip.dm b/modular_nova/modules/modular_weapons/code/skillchip.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/skillchip.dm
rename to modular_nova/modules/modular_weapons/code/skillchip.dm
diff --git a/modular_skyrat/modules/modular_weapons/code/suppressor_size_change_override.dm b/modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/code/suppressor_size_change_override.dm
rename to modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_left.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/64x_guns_right.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_lefthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/inhands/weapons/swords_righthand.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi b/modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi
rename to modular_nova/modules/modular_weapons/icons/mob/worn/cases.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/ammo.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/ammo.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi b/modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/gunsets.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi b/modular_nova/modules/modular_weapons/icons/obj/melee.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/melee.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/melee.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/ammoboxes.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/pepperball.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi b/modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/pepperball/projectiles.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/projectiles.dmi b/modular_nova/modules/modular_weapons/icons/obj/projectiles.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/projectiles.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/projectiles.dmi
diff --git a/modular_skyrat/modules/modular_weapons/icons/obj/vending.dmi b/modular_nova/modules/modular_weapons/icons/obj/vending.dmi
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/icons/obj/vending.dmi
rename to modular_nova/modules/modular_weapons/icons/obj/vending.dmi
diff --git a/modular_skyrat/modules/modular_weapons/readme.md b/modular_nova/modules/modular_weapons/readme.md
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/readme.md
rename to modular_nova/modules/modular_weapons/readme.md
diff --git a/modular_skyrat/modules/modular_weapons/sounds/battle_rifle.ogg b/modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/battle_rifle.ogg
rename to modular_nova/modules/modular_weapons/sounds/battle_rifle.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg b/modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/grenade_burst.ogg
rename to modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg b/modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/grenade_launcher.ogg
rename to modular_nova/modules/modular_weapons/sounds/grenade_launcher.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/pistol_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg b/modular_nova/modules/modular_weapons/sounds/pistol_light.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg
rename to modular_nova/modules/modular_weapons/sounds/pistol_light.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/revolver_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/revolver_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/shotgun_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg b/modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg
rename to modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/smg_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/smg_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/smg_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg b/modular_nova/modules/modular_weapons/sounds/smg_light.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg
rename to modular_nova/modules/modular_weapons/sounds/smg_light.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg b/modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg
rename to modular_nova/modules/modular_weapons/sounds/suppressed_heavy.ogg
diff --git a/modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg b/modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg
similarity index 100%
rename from modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg
rename to modular_nova/modules/modular_weapons/sounds/suppressed_rifle.ogg
diff --git a/modular_skyrat/modules/mold/code/_mold_defines.dm b/modular_nova/modules/mold/code/_mold_defines.dm
similarity index 100%
rename from modular_skyrat/modules/mold/code/_mold_defines.dm
rename to modular_nova/modules/mold/code/_mold_defines.dm
diff --git a/modular_skyrat/modules/mold/code/mold.dm b/modular_nova/modules/mold/code/mold.dm
similarity index 100%
rename from modular_skyrat/modules/mold/code/mold.dm
rename to modular_nova/modules/mold/code/mold.dm
diff --git a/modular_skyrat/modules/mold/code/mold_controller.dm b/modular_nova/modules/mold/code/mold_controller.dm
similarity index 100%
rename from modular_skyrat/modules/mold/code/mold_controller.dm
rename to modular_nova/modules/mold/code/mold_controller.dm
diff --git a/modular_skyrat/modules/mold/code/mold_disease.dm b/modular_nova/modules/mold/code/mold_disease.dm
similarity index 100%
rename from modular_skyrat/modules/mold/code/mold_disease.dm
rename to modular_nova/modules/mold/code/mold_disease.dm
diff --git a/modular_skyrat/modules/mold/code/mold_event.dm b/modular_nova/modules/mold/code/mold_event.dm
similarity index 100%
rename from modular_skyrat/modules/mold/code/mold_event.dm
rename to modular_nova/modules/mold/code/mold_event.dm
diff --git a/modular_skyrat/modules/mold/code/mold_mobs.dm b/modular_nova/modules/mold/code/mold_mobs.dm
similarity index 98%
rename from modular_skyrat/modules/mold/code/mold_mobs.dm
rename to modular_nova/modules/mold/code/mold_mobs.dm
index 6c1bd7be019..0c9f401aeb8 100644
--- a/modular_skyrat/modules/mold/code/mold_mobs.dm
+++ b/modular_nova/modules/mold/code/mold_mobs.dm
@@ -12,7 +12,7 @@
/mob/living/basic/mold
name = "mold mob"
desc = "A debug mob for molds. You should report seeing this."
- icon = 'modular_skyrat/modules/mold/icons/blob_mobs.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_mobs.dmi'
gold_core_spawnable = NO_SPAWN
faction = list(FACTION_MOLD)
basic_mob_flags = DEL_ON_DEATH
@@ -275,7 +275,7 @@
var/mob/living/radiation_target = target
if(prob(irradiate_chance))
radiation_pulse(radiation_target, CENTAUR_RAD_PULSE_RANGE, CENTAUR_RAD_PULSE_THRESHOLD, FALSE, TRUE)
- playsound(src, 'modular_skyrat/modules/horrorform/sound/horror_scream.ogg', CENTAUR_ATTACK_SCREAM_VOLUME, TRUE)
+ playsound(src, 'modular_nova/modules/horrorform/sound/horror_scream.ogg', CENTAUR_ATTACK_SCREAM_VOLUME, TRUE)
/datum/ai_controller/basic_controller/centaur
blackboard = list(
diff --git a/modular_skyrat/modules/mold/code/mold_structures.dm b/modular_nova/modules/mold/code/mold_structures.dm
similarity index 96%
rename from modular_skyrat/modules/mold/code/mold_structures.dm
rename to modular_nova/modules/mold/code/mold_structures.dm
index e2e3a8c468e..243f5e173ac 100644
--- a/modular_skyrat/modules/mold/code/mold_structures.dm
+++ b/modular_nova/modules/mold/code/mold_structures.dm
@@ -49,7 +49,7 @@
/datum/looping_sound/core_heartbeat
mid_length = 3 SECONDS
- mid_sounds = list('modular_skyrat/master_files/sound/effects/heart_beat_loop3.ogg' = 1)
+ mid_sounds = list('modular_nova/master_files/sound/effects/heart_beat_loop3.ogg' = 1)
volume = 20
/**
@@ -57,7 +57,7 @@
*/
/obj/structure/mold/structure/core
name = "core"
- icon = 'modular_skyrat/modules/mold/icons/blob_core.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_core.dmi'
icon_state = "blob_core"
layer = TABLE_LAYER
max_integrity = 1200
@@ -128,7 +128,7 @@
/obj/structure/mold/resin
name = "mold"
desc = "It looks like mold, but it seems alive."
- icon = 'modular_skyrat/modules/mold/icons/blob_resin.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_resin.dmi'
icon_state = "blob_floor"
density = FALSE
plane = FLOOR_PLANE
@@ -215,7 +215,7 @@
*/
/obj/structure/mold/structure/bulb
name = "bulb"
- icon = 'modular_skyrat/modules/mold/icons/blob_bulb.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_bulb.dmi'
icon_state = "blob_bulb_empty"
density = FALSE
layer = TABLE_LAYER
@@ -328,7 +328,7 @@
name = "pulsating vent"
desc = "An unsightly vent, it appears to be puffing something out."
density = FALSE
- icon = 'modular_skyrat/modules/mold/icons/blob_spawner.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_spawner.dmi'
icon_state = "blob_vent"
density = FALSE
layer = SIGIL_LAYER
@@ -367,7 +367,7 @@
*/
/obj/structure/mold/structure/spawner
name = "hatchery"
- icon = 'modular_skyrat/modules/mold/icons/blob_spawner.dmi'
+ icon = 'modular_nova/modules/mold/icons/blob_spawner.dmi'
icon_state = "blob_spawner"
density = FALSE
layer = SIGIL_LAYER
diff --git a/modular_skyrat/modules/mold/icons/blob_bulb.dmi b/modular_nova/modules/mold/icons/blob_bulb.dmi
similarity index 100%
rename from modular_skyrat/modules/mold/icons/blob_bulb.dmi
rename to modular_nova/modules/mold/icons/blob_bulb.dmi
diff --git a/modular_skyrat/modules/mold/icons/blob_core.dmi b/modular_nova/modules/mold/icons/blob_core.dmi
similarity index 100%
rename from modular_skyrat/modules/mold/icons/blob_core.dmi
rename to modular_nova/modules/mold/icons/blob_core.dmi
diff --git a/modular_skyrat/modules/mold/icons/blob_mobs.dmi b/modular_nova/modules/mold/icons/blob_mobs.dmi
similarity index 100%
rename from modular_skyrat/modules/mold/icons/blob_mobs.dmi
rename to modular_nova/modules/mold/icons/blob_mobs.dmi
diff --git a/modular_skyrat/modules/mold/icons/blob_resin.dmi b/modular_nova/modules/mold/icons/blob_resin.dmi
similarity index 100%
rename from modular_skyrat/modules/mold/icons/blob_resin.dmi
rename to modular_nova/modules/mold/icons/blob_resin.dmi
diff --git a/modular_skyrat/modules/mold/icons/blob_spawner.dmi b/modular_nova/modules/mold/icons/blob_spawner.dmi
similarity index 100%
rename from modular_skyrat/modules/mold/icons/blob_spawner.dmi
rename to modular_nova/modules/mold/icons/blob_spawner.dmi
diff --git a/modular_nova/modules/mold/readme.md b/modular_nova/modules/mold/readme.md
new file mode 100644
index 00000000000..92568c0315f
--- /dev/null
+++ b/modular_nova/modules/mold/readme.md
@@ -0,0 +1,41 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/1356
+
+## Title: Mold - Advanced PvE Blob-Vine Encounter
+
+MODULE ID: `BIOHAZ_MOLD`
+
+### Description:
+
+
+100% PVE
+Spreads much like glowshrooms and space vines, has a main core like a blob. During the spreading it builds structures, currently there's 2. One of them will release something harmful on proximity, another will spawn enemies. The blob also releases harmful stuff depending on the type, on cooldown.
+
+The resin grows and bashes through doors and firelocks, when it meets a space tile it walls it off. It isn't too hard of an encounter and it doesn't spread too fast.
+
+There's 4 types right now, for each type people should take be taking different tactics and pre-cautions.
+
+Currently not tied to any event, just admin spawn for the purposes of tests and stuff.
+
+When the core dies, everything slowly decays away.
+
+### TG Proc/File Changes:
+
+- N/A
+
+### Defines:
+
+|File Location|Defines|
+|-------------|-------|
+|`modular_nova/modules/biohazard_blob/code/_biohazard_blob_defines.dm`|`BIO_MOLD_TYPE_FUNGUS` `BIO_MOLD_TYPE_FIRE` `BIO_MOLD_TYPE_EMP` `BIO_MOLD_TYPE_TOXIC` `ALL_BIO_BLOB_TYPES` `FACTION_MOLD`|
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+- Azarak
diff --git a/modular_skyrat/modules/more_briefcases/code/briefcases.dm b/modular_nova/modules/more_briefcases/code/briefcases.dm
similarity index 90%
rename from modular_skyrat/modules/more_briefcases/code/briefcases.dm
rename to modular_nova/modules/more_briefcases/code/briefcases.dm
index 42fe203ee8c..b54a4e2497f 100644
--- a/modular_skyrat/modules/more_briefcases/code/briefcases.dm
+++ b/modular_nova/modules/more_briefcases/code/briefcases.dm
@@ -1,5 +1,5 @@
/obj/item/storage/briefcase
- icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi'
+ icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi'
inhand_icon_state = "briefcase"
/obj/item/storage/briefcase/lawyer
@@ -26,7 +26,7 @@
icon_state = "briefcase_eng"
/obj/item/storage/briefcase/secure
- icon = 'modular_skyrat/modules/more_briefcases/icons/briefcases.dmi'
+ icon = 'modular_nova/modules/more_briefcases/icons/briefcases.dmi'
inhand_icon_state = "sec-case"
icon_state = "briefcase_secure_black"
diff --git a/modular_skyrat/modules/more_briefcases/icons/briefcases.dmi b/modular_nova/modules/more_briefcases/icons/briefcases.dmi
similarity index 100%
rename from modular_skyrat/modules/more_briefcases/icons/briefcases.dmi
rename to modular_nova/modules/more_briefcases/icons/briefcases.dmi
diff --git a/modular_skyrat/modules/more_briefcases/readme.md b/modular_nova/modules/more_briefcases/readme.md
similarity index 100%
rename from modular_skyrat/modules/more_briefcases/readme.md
rename to modular_nova/modules/more_briefcases/readme.md
diff --git a/modular_skyrat/modules/morefermentplants/code/ambrosia.dm b/modular_nova/modules/morefermentplants/code/ambrosia.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/ambrosia.dm
rename to modular_nova/modules/morefermentplants/code/ambrosia.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/banana.dm b/modular_nova/modules/morefermentplants/code/banana.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/banana.dm
rename to modular_nova/modules/morefermentplants/code/banana.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/beans.dm b/modular_nova/modules/morefermentplants/code/beans.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/beans.dm
rename to modular_nova/modules/morefermentplants/code/beans.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/berries.dm b/modular_nova/modules/morefermentplants/code/berries.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/berries.dm
rename to modular_nova/modules/morefermentplants/code/berries.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/cannabis.dm b/modular_nova/modules/morefermentplants/code/cannabis.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/cannabis.dm
rename to modular_nova/modules/morefermentplants/code/cannabis.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/chili.dm b/modular_nova/modules/morefermentplants/code/chili.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/chili.dm
rename to modular_nova/modules/morefermentplants/code/chili.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/citrus.dm b/modular_nova/modules/morefermentplants/code/citrus.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/citrus.dm
rename to modular_nova/modules/morefermentplants/code/citrus.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/eggplant.dm b/modular_nova/modules/morefermentplants/code/eggplant.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/eggplant.dm
rename to modular_nova/modules/morefermentplants/code/eggplant.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/garlic.dm b/modular_nova/modules/morefermentplants/code/garlic.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/garlic.dm
rename to modular_nova/modules/morefermentplants/code/garlic.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/kudzu.dm b/modular_nova/modules/morefermentplants/code/kudzu.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/kudzu.dm
rename to modular_nova/modules/morefermentplants/code/kudzu.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/melon.dm b/modular_nova/modules/morefermentplants/code/melon.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/melon.dm
rename to modular_nova/modules/morefermentplants/code/melon.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/misc.dm b/modular_nova/modules/morefermentplants/code/misc.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/misc.dm
rename to modular_nova/modules/morefermentplants/code/misc.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/mushrooms.dm b/modular_nova/modules/morefermentplants/code/mushrooms.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/mushrooms.dm
rename to modular_nova/modules/morefermentplants/code/mushrooms.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/nettle.dm b/modular_nova/modules/morefermentplants/code/nettle.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/nettle.dm
rename to modular_nova/modules/morefermentplants/code/nettle.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/onion.dm b/modular_nova/modules/morefermentplants/code/onion.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/onion.dm
rename to modular_nova/modules/morefermentplants/code/onion.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/pineapple.dm b/modular_nova/modules/morefermentplants/code/pineapple.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/pineapple.dm
rename to modular_nova/modules/morefermentplants/code/pineapple.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/pumpkin.dm b/modular_nova/modules/morefermentplants/code/pumpkin.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/pumpkin.dm
rename to modular_nova/modules/morefermentplants/code/pumpkin.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/root.dm b/modular_nova/modules/morefermentplants/code/root.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/root.dm
rename to modular_nova/modules/morefermentplants/code/root.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/tobacco.dm b/modular_nova/modules/morefermentplants/code/tobacco.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/tobacco.dm
rename to modular_nova/modules/morefermentplants/code/tobacco.dm
diff --git a/modular_skyrat/modules/morefermentplants/code/tomato.dm b/modular_nova/modules/morefermentplants/code/tomato.dm
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/code/tomato.dm
rename to modular_nova/modules/morefermentplants/code/tomato.dm
diff --git a/modular_skyrat/modules/morefermentplants/readme.md b/modular_nova/modules/morefermentplants/readme.md
similarity index 100%
rename from modular_skyrat/modules/morefermentplants/readme.md
rename to modular_nova/modules/morefermentplants/readme.md
diff --git a/modular_skyrat/modules/morenarcotics/code/blacktar.dm b/modular_nova/modules/morenarcotics/code/blacktar.dm
similarity index 81%
rename from modular_skyrat/modules/morenarcotics/code/blacktar.dm
rename to modular_nova/modules/morenarcotics/code/blacktar.dm
index 9dd9900cc72..64f88ac8793 100644
--- a/modular_skyrat/modules/morenarcotics/code/blacktar.dm
+++ b/modular_nova/modules/morenarcotics/code/blacktar.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/blacktar
name = "black tar heroin"
desc = "A rock of black tar heroin, an impure freebase form of heroin."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "blacktar"
volume = 5
has_variable_transfer_amount = FALSE
diff --git a/modular_skyrat/modules/morenarcotics/code/cocaine.dm b/modular_nova/modules/morenarcotics/code/cocaine.dm
similarity index 100%
rename from modular_skyrat/modules/morenarcotics/code/cocaine.dm
rename to modular_nova/modules/morenarcotics/code/cocaine.dm
diff --git a/modular_skyrat/modules/morenarcotics/code/cocaine_item.dm b/modular_nova/modules/morenarcotics/code/cocaine_item.dm
similarity index 94%
rename from modular_skyrat/modules/morenarcotics/code/cocaine_item.dm
rename to modular_nova/modules/morenarcotics/code/cocaine_item.dm
index 2a4da011635..014c1099dc6 100644
--- a/modular_skyrat/modules/morenarcotics/code/cocaine_item.dm
+++ b/modular_nova/modules/morenarcotics/code/cocaine_item.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/crack
name = "crack"
desc = "A rock of freebase cocaine, otherwise known as crack."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "crack"
volume = 10
has_variable_transfer_amount = FALSE
@@ -10,7 +10,7 @@
/obj/item/reagent_containers/crackbrick
name = "crack brick"
desc = "A brick of crack cocaine."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "crackbrick"
volume = 40
has_variable_transfer_amount = FALSE
@@ -35,7 +35,7 @@
/obj/item/reagent_containers/cocaine
name = "cocaine"
desc = "Reenact your favorite scenes from Scarface!"
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "cocaine"
volume = 5
has_variable_transfer_amount = FALSE
@@ -80,7 +80,7 @@
/obj/item/reagent_containers/cocainebrick
name = "cocaine brick"
desc = "A brick of cocaine. Good for transport!"
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "cocainebrick"
volume = 25
has_variable_transfer_amount = FALSE
diff --git a/modular_skyrat/modules/morenarcotics/code/cocoleaves.dm b/modular_nova/modules/morenarcotics/code/cocoleaves.dm
similarity index 79%
rename from modular_skyrat/modules/morenarcotics/code/cocoleaves.dm
rename to modular_nova/modules/morenarcotics/code/cocoleaves.dm
index f35046fcac5..4252c423c38 100644
--- a/modular_skyrat/modules/morenarcotics/code/cocoleaves.dm
+++ b/modular_nova/modules/morenarcotics/code/cocoleaves.dm
@@ -1,8 +1,8 @@
/obj/item/seeds/cocaleaf
name = "pack of coca leaf seeds"
desc = "These seeds grow into coca shrubs. They make you feel energized just looking at them..."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_state = "seed-cocoleaf"
species = "cocoleaf"
plantname = "Coca Leaves"
@@ -17,7 +17,7 @@
seed = /obj/item/seeds/cocaleaf
name = "coca leaf"
desc = "A leaf of the coca shrub, which contains a potent psychoactive alkaloid known as 'cocaine'."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "cocoleaf"
foodtypes = FRUIT //i guess? i mean it grows on trees...
tastes = list("leaves" = 1)
diff --git a/modular_skyrat/modules/morenarcotics/code/crackpipe.dm b/modular_nova/modules/morenarcotics/code/crackpipe.dm
similarity index 93%
rename from modular_skyrat/modules/morenarcotics/code/crackpipe.dm
rename to modular_nova/modules/morenarcotics/code/crackpipe.dm
index e17bf805a37..7b2252ffff4 100644
--- a/modular_skyrat/modules/morenarcotics/code/crackpipe.dm
+++ b/modular_nova/modules/morenarcotics/code/crackpipe.dm
@@ -1,8 +1,8 @@
/obj/item/clothing/mask/cigarette/pipe/crackpipe
name = "crack pipe"
desc = "A slick glass pipe made for smoking one thing: crack."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
- worn_icon = 'modular_skyrat/modules/morenarcotics/icons/mask.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
+ worn_icon = 'modular_nova/modules/morenarcotics/icons/mask.dmi'
icon_state = "glass_pipeoff" //it seems like theres some unused crack pipe sprite in masks.dmi, sweet!
icon_on = "glass_pipeon"
icon_off = "glass_pipeoff"
diff --git a/modular_skyrat/modules/morenarcotics/code/opium.dm b/modular_nova/modules/morenarcotics/code/opium.dm
similarity index 98%
rename from modular_skyrat/modules/morenarcotics/code/opium.dm
rename to modular_nova/modules/morenarcotics/code/opium.dm
index 7c49c67ca5d..9ace225d0a0 100644
--- a/modular_skyrat/modules/morenarcotics/code/opium.dm
+++ b/modular_nova/modules/morenarcotics/code/opium.dm
@@ -25,7 +25,7 @@
/obj/item/reagent_containers/heroin
name = "heroin"
desc = "Take a line and take some time of man."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "heroin"
volume = 4
has_variable_transfer_amount = FALSE
@@ -70,7 +70,7 @@
/obj/item/reagent_containers/heroinbrick
name = "heroin brick"
desc = "A brick of heroin. Good for transport!"
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "heroinbrick"
volume = 20
has_variable_transfer_amount = FALSE
diff --git a/modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm b/modular_nova/modules/morenarcotics/code/opiumpoppy.dm
similarity index 81%
rename from modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm
rename to modular_nova/modules/morenarcotics/code/opiumpoppy.dm
index 76cae58a0ea..a5eb42e05d5 100644
--- a/modular_skyrat/modules/morenarcotics/code/opiumpoppy.dm
+++ b/modular_nova/modules/morenarcotics/code/opiumpoppy.dm
@@ -1,8 +1,8 @@
/obj/item/seeds/poppy/opiumpoppy
name = "pack of opium poppy seeds"
desc = "These seeds grow into real opium poppies."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/seeds.dmi'
+ growing_icon = 'modular_nova/master_files/icons/obj/hydroponics/growing.dmi'
icon_state = "seed-opiumpoppy"
species = "opiumpoppy"
icon_grow = "opiumpoppy-grow"
@@ -16,7 +16,7 @@
seed = /obj/item/seeds/poppy/opiumpoppy
name = "opium poppy seedpod"
desc = "The seedpod of the opium poppy plant, which contain opium latex."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hydroponics/harvest.dmi'
icon_state = "opiumpoppy"
worn_icon_state = "map_flower"
greyscale_config = null
diff --git a/modular_skyrat/modules/morenarcotics/code/pcp.dm b/modular_nova/modules/morenarcotics/code/pcp.dm
similarity index 100%
rename from modular_skyrat/modules/morenarcotics/code/pcp.dm
rename to modular_nova/modules/morenarcotics/code/pcp.dm
diff --git a/modular_skyrat/modules/morenarcotics/code/quaalude.dm b/modular_nova/modules/morenarcotics/code/quaalude.dm
similarity index 100%
rename from modular_skyrat/modules/morenarcotics/code/quaalude.dm
rename to modular_nova/modules/morenarcotics/code/quaalude.dm
diff --git a/modular_skyrat/modules/morenarcotics/code/thc.dm b/modular_nova/modules/morenarcotics/code/thc.dm
similarity index 95%
rename from modular_skyrat/modules/morenarcotics/code/thc.dm
rename to modular_nova/modules/morenarcotics/code/thc.dm
index 69d1418a99b..1d6bfc8e5cb 100644
--- a/modular_skyrat/modules/morenarcotics/code/thc.dm
+++ b/modular_nova/modules/morenarcotics/code/thc.dm
@@ -79,7 +79,7 @@
M.say("[cg420_message]")
M.adjust_drowsiness(0.2 SECONDS * REM * normalise_creation_purity() * seconds_per_tick)
if(SPT_PROB(3.5, seconds_per_tick))
- playsound(M, pick('modular_skyrat/master_files/sound/effects/lungbust_cough1.ogg','modular_skyrat/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE)
+ playsound(M, pick('modular_nova/master_files/sound/effects/lungbust_cough1.ogg','modular_nova/master_files/sound/effects/lungbust_cough2.ogg'), 50, TRUE)
M.emote("cough")
..()
. = TRUE
diff --git a/modular_skyrat/modules/morenarcotics/code/thc_item.dm b/modular_nova/modules/morenarcotics/code/thc_item.dm
similarity index 91%
rename from modular_skyrat/modules/morenarcotics/code/thc_item.dm
rename to modular_nova/modules/morenarcotics/code/thc_item.dm
index b948c8a9cd4..cdaf8b59dbe 100644
--- a/modular_skyrat/modules/morenarcotics/code/thc_item.dm
+++ b/modular_nova/modules/morenarcotics/code/thc_item.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/hash
name = "hash"
desc = "Concentrated cannabis extract. Delivers a much better high when used in a bong."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "hash"
volume = 20
has_variable_transfer_amount = FALSE
@@ -10,7 +10,7 @@
/obj/item/reagent_containers/hash/dabs
name = "dab"
desc = "Oil extract from cannabis plants. Just delivers a different type of hit."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "dab"
volume = 40
has_variable_transfer_amount = FALSE
@@ -19,7 +19,7 @@
/obj/item/reagent_containers/hashbrick
name = "hash brick"
desc = "A brick of hash. Good for transport!"
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "hashbrick"
volume = 80
has_variable_transfer_amount = FALSE
diff --git a/modular_skyrat/modules/morenarcotics/code/vapecarts.dm b/modular_nova/modules/morenarcotics/code/vapecarts.dm
similarity index 98%
rename from modular_skyrat/modules/morenarcotics/code/vapecarts.dm
rename to modular_nova/modules/morenarcotics/code/vapecarts.dm
index 8e9d242484e..b22ff596324 100644
--- a/modular_skyrat/modules/morenarcotics/code/vapecarts.dm
+++ b/modular_nova/modules/morenarcotics/code/vapecarts.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/vapecart
name = "vape cart"
desc = "A vape cart filled with nicotine."
- icon = 'modular_skyrat/modules/morenarcotics/icons/crack.dmi'
+ icon = 'modular_nova/modules/morenarcotics/icons/crack.dmi'
icon_state = "vapecart"
fill_icon_state = "vapecart"
volume = 50
diff --git a/modular_skyrat/modules/morenarcotics/icons/crack.dmi b/modular_nova/modules/morenarcotics/icons/crack.dmi
similarity index 100%
rename from modular_skyrat/modules/morenarcotics/icons/crack.dmi
rename to modular_nova/modules/morenarcotics/icons/crack.dmi
diff --git a/modular_skyrat/modules/morenarcotics/icons/mask.dmi b/modular_nova/modules/morenarcotics/icons/mask.dmi
similarity index 100%
rename from modular_skyrat/modules/morenarcotics/icons/mask.dmi
rename to modular_nova/modules/morenarcotics/icons/mask.dmi
diff --git a/modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm b/modular_nova/modules/moretraitoritems/code/autosurgeon.dm
similarity index 91%
rename from modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm
rename to modular_nova/modules/moretraitoritems/code/autosurgeon.dm
index c3a762c4099..e4db010028b 100644
--- a/modular_skyrat/modules/moretraitoritems/code/autosurgeon.dm
+++ b/modular_nova/modules/moretraitoritems/code/autosurgeon.dm
@@ -38,12 +38,12 @@
/obj/item/autosurgeon/bodypart/r_arm_robotic/Initialize(mapload)
. = ..()
- storedbodypart.icon = 'modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi'
+ storedbodypart.icon = 'modular_nova/master_files/icons/mob/augmentation/hi2ipc.dmi'
//xeno-organs
/obj/item/autosurgeon/xeno
name = "strange autosurgeon"
- icon = 'modular_skyrat/modules/moretraitoritems/icons/alien.dmi'
+ icon = 'modular_nova/modules/moretraitoritems/icons/alien.dmi'
surgery_speed = 2
organ_whitelist = list(/obj/item/organ/internal/alien)
@@ -54,7 +54,7 @@
/obj/item/storage/organbox/strange
name = "strange organ transport box"
- icon = 'modular_skyrat/modules/moretraitoritems/icons/alien.dmi'
+ icon = 'modular_nova/modules/moretraitoritems/icons/alien.dmi'
/obj/item/storage/organbox/strange/Initialize(mapload)
. = ..()
diff --git a/modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm b/modular_nova/modules/moretraitoritems/code/autosurgeon_bodypart.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/autosurgeon_bodypart.dm
rename to modular_nova/modules/moretraitoritems/code/autosurgeon_bodypart.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/cards_id.dm b/modular_nova/modules/moretraitoritems/code/cards_id.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/cards_id.dm
rename to modular_nova/modules/moretraitoritems/code/cards_id.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/cultist.dm b/modular_nova/modules/moretraitoritems/code/cultist.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/cultist.dm
rename to modular_nova/modules/moretraitoritems/code/cultist.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/drinkingglass.dm b/modular_nova/modules/moretraitoritems/code/drinkingglass.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/drinkingglass.dm
rename to modular_nova/modules/moretraitoritems/code/drinkingglass.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/glue.dm b/modular_nova/modules/moretraitoritems/code/glue.dm
similarity index 93%
rename from modular_skyrat/modules/moretraitoritems/code/glue.dm
rename to modular_nova/modules/moretraitoritems/code/glue.dm
index 01a1c9983c1..3378ee6f6e5 100644
--- a/modular_skyrat/modules/moretraitoritems/code/glue.dm
+++ b/modular_nova/modules/moretraitoritems/code/glue.dm
@@ -1,7 +1,7 @@
/obj/item/syndie_glue
name = "bottle of super glue"
desc = "A black market brand of high strength adhesive, rarely sold to the public. Do not ingest."
- icon = 'modular_skyrat/master_files/icons/obj/tools.dmi'
+ icon = 'modular_nova/master_files/icons/obj/tools.dmi'
icon_state = "glue"
w_class = WEIGHT_CLASS_SMALL
var/uses = 1
diff --git a/modular_skyrat/modules/moretraitoritems/code/headset.dm b/modular_nova/modules/moretraitoritems/code/headset.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/headset.dm
rename to modular_nova/modules/moretraitoritems/code/headset.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/pirate.dm b/modular_nova/modules/moretraitoritems/code/pirate.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/pirate.dm
rename to modular_nova/modules/moretraitoritems/code/pirate.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/smuggling_gear.dm b/modular_nova/modules/moretraitoritems/code/smuggling_gear.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/smuggling_gear.dm
rename to modular_nova/modules/moretraitoritems/code/smuggling_gear.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/spawnergrenade.dm b/modular_nova/modules/moretraitoritems/code/spawnergrenade.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/spawnergrenade.dm
rename to modular_nova/modules/moretraitoritems/code/spawnergrenade.dm
diff --git a/modular_nova/modules/moretraitoritems/code/syndicate.dm b/modular_nova/modules/moretraitoritems/code/syndicate.dm
new file mode 100644
index 00000000000..33a063c2a51
--- /dev/null
+++ b/modular_nova/modules/moretraitoritems/code/syndicate.dm
@@ -0,0 +1,260 @@
+/obj/item/uplink/old_radio
+ name = "old radio"
+ desc = "A dusty and old looking radio."
+
+/obj/item/uplink/old_radio/Initialize(mapload, owner, tc_amount = 0)
+ . = ..()
+ var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
+ hidden_uplink.name = "old radio"
+
+//Unrestricted MODs
+/obj/item/mod/control/pre_equipped/elite/unrestricted
+ req_access = null
+
+//Syndie wep charger kit
+/obj/item/storage/box/syndie_kit/recharger
+ name = "boxed recharger kit"
+ desc = "A sleek, sturdy box used to hold all parts to build a weapons recharger."
+ icon_state = "syndiebox"
+
+/obj/item/storage/box/syndie_kit/recharger/PopulateContents()
+ new /obj/item/circuitboard/machine/recharger(src)
+ new /obj/item/stock_parts/capacitor/quadratic(src)
+ new /obj/item/stack/sheet/iron/five(src)
+ new /obj/item/stack/cable_coil/five(src)
+ new /obj/item/screwdriver/nuke(src)
+ new /obj/item/wrench(src)
+
+//Back-up space suit
+/obj/item/storage/box/syndie_kit/space_suit
+ name = "boxed space suit and helmet"
+ desc = "A sleek, sturdy box used to hold an emergency spacesuit."
+ icon_state = "syndiebox"
+ illustration = "syndiesuit"
+
+/obj/item/storage/box/syndie_kit/space_suit/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
+ atom_storage.max_slots = 2
+ atom_storage.set_holdable(list(
+ /obj/item/clothing/head/helmet/space/syndicate,
+ /obj/item/clothing/suit/space/syndicate,
+ ))
+
+/obj/item/storage/box/syndie_kit/space_suit/PopulateContents()
+ switch(pick(list("red", "green", "dgreen", "blue", "orange", "black")))
+ if("green")
+ new /obj/item/clothing/head/helmet/space/syndicate/green(src)
+ new /obj/item/clothing/suit/space/syndicate/green(src)
+ if("dgreen")
+ new /obj/item/clothing/head/helmet/space/syndicate/green/dark(src)
+ new /obj/item/clothing/suit/space/syndicate/green/dark(src)
+ if("blue")
+ new /obj/item/clothing/head/helmet/space/syndicate/blue(src)
+ new /obj/item/clothing/suit/space/syndicate/blue(src)
+ if("red")
+ new /obj/item/clothing/head/helmet/space/syndicate(src)
+ new /obj/item/clothing/suit/space/syndicate(src)
+ if("orange")
+ new /obj/item/clothing/head/helmet/space/syndicate/orange(src)
+ new /obj/item/clothing/suit/space/syndicate/orange(src)
+ if("black")
+ new /obj/item/clothing/head/helmet/space/syndicate/black(src)
+ new /obj/item/clothing/suit/space/syndicate/black(src)
+
+//Spy
+/obj/item/clothing/suit/jacket/det_suit/noir/armoured
+ armor_type = /datum/armor/heister
+
+/obj/item/clothing/head/frenchberet/armoured
+ armor_type = /datum/armor/cosmetic_sec
+
+/obj/item/clothing/under/suit/black/armoured
+ armor_type = /datum/armor/clothing_under/syndicate
+
+/obj/item/clothing/under/suit/black/skirt/armoured
+ armor_type = /datum/armor/clothing_under/syndicate
+
+/obj/item/storage/belt/holster/detective/dark
+ name = "dark leather holster"
+ icon_state = "syndicate_holster"
+
+//Robohand
+/obj/item/storage/backpack/duffelbag/syndie/robohand/PopulateContents()
+ new /obj/item/gun/ballistic/automatic/pistol/robohand(src)
+ new /obj/item/ammo_box/magazine/m14mm(src)
+ new /obj/item/ammo_box/magazine/m14mm(src)
+ new /obj/item/ammo_box/magazine/m14mm(src)
+ new /obj/item/ammo_box/magazine/m14mm(src)
+ new /obj/item/storage/belt/military(src)
+ new /obj/item/clothing/under/pants/track/robohand(src)
+ new /obj/item/clothing/gloves/combat(src)
+ new /obj/item/clothing/shoes/combat(src)
+ new /obj/item/clothing/glasses/sunglasses/robohand(src)
+ new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src)
+ new /obj/item/autosurgeon/bodypart/r_arm_robotic(src)
+ new /obj/item/autosurgeon/syndicate/esword_arm(src)
+ new /obj/item/autosurgeon/syndicate/nodrop(src)
+
+
+/obj/item/storage/box/syndie_kit/gunman_outfit
+ name = "gunman clothing bundle"
+ desc = "A box filled with armored and stylish clothing for the aspiring gunmans."
+
+/obj/item/clothing/suit/jacket/trenchcoat/gunman
+ name = "leather overcoat"
+ desc = "An armored leather overcoat, intended as the go-to wear for any aspiring gunman."
+ body_parts_covered = CHEST|GROIN|ARMS
+ armor_type = /datum/armor/leather_gunman
+
+/datum/armor/leather_gunman
+ melee = 45
+ bullet = 40
+ laser = 40
+ energy = 50
+ bomb = 25
+ fire = 50
+ acid = 50
+ wound = 10
+
+/obj/item/clothing/under/pants/track/robohand
+ name = "badass pants"
+ desc = "Strangely firm yet soft black pants, these appear to have some armor padding for added protection."
+ armor_type = /datum/armor/clothing_under/robohand
+
+/datum/armor/clothing_under/robohand
+ melee = 20
+ bullet = 20
+ laser = 20
+ energy = 20
+ bomb = 20
+
+/obj/item/clothing/glasses/sunglasses/robohand
+ name = "badass sunglasses"
+ desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes. These ones seem to be bulletproof?"
+ body_parts_covered = HEAD //What do you mean glasses don't protect your head? Of course they do. Cyberpunk has flying cars(mostly intentional)!
+ armor_type = /datum/armor/sunglasses_robohand
+
+/datum/armor/sunglasses_robohand
+ melee = 20
+ bullet = 60
+ laser = 20
+ energy = 20
+ bomb = 20
+ wound = 5
+
+//More items
+/obj/item/guardian_creator/tech/choose/traitor/opfor
+ allow_changeling = TRUE
+
+/obj/item/codeword_granter
+ name = "codeword manual"
+ desc = "A black manual with a red S lovingly inscribed on the cover by only the finest of presses from a factory."
+ icon = 'modular_nova/modules/opposing_force/icons/items.dmi'
+ icon_state = "codeword_book"
+ /// Number of charges the book has, limits the number of times it can be used.
+ var/charges = 1
+
+
+/obj/item/codeword_granter/attack_self(mob/living/user)
+ if(!isliving(user))
+ return
+
+ to_chat(user, span_boldannounce("You start skimming through [src], and feel suddenly imparted with the knowledge of the following code words:"))
+
+ user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src)
+ user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src)
+ to_chat(user, "Code Phrases : [jointext(GLOB.syndicate_code_phrase, ", ")]")
+ to_chat(user, "Code Responses : [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]")
+
+ use_charge(user)
+
+
+/obj/item/codeword_granter/attack(mob/living/attacked_mob, mob/living/user)
+ if(!istype(attacked_mob) || !istype(user))
+ return
+
+ if(attacked_mob == user)
+ attack_self(user)
+ return
+
+ playsound(loc, SFX_PUNCH, 25, TRUE, -1)
+
+ if(attacked_mob.stat == DEAD)
+ attacked_mob.visible_message(span_danger("[user] smacks [attacked_mob]'s lifeless corpse with [src]."), span_userdanger("[user] smacks your lifeless corpse with [src]."), span_hear("You hear smacking."))
+ else
+ attacked_mob.visible_message(span_notice("[user] teaches [attacked_mob] by beating [attacked_mob.p_them()] over the head with [src]!"), span_boldnotice("As [user] hits you with [src], you feel suddenly imparted with the knowledge of some [span_red("specific words")]."), span_hear("You hear smacking."))
+ attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src)
+ attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src)
+ to_chat(attacked_mob, span_boldnotice("You feel suddenly imparted with the knowledge of the following code words:"))
+ to_chat(attacked_mob, "Code Phrases : [span_blue("[jointext(GLOB.syndicate_code_phrase, ", ")]")]")
+ to_chat(attacked_mob, "Code Responses : [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]")
+ use_charge(user)
+
+
+/obj/item/codeword_granter/proc/use_charge(mob/user)
+ charges--
+
+ if(!charges)
+ var/turf/src_turf = get_turf(src)
+ src_turf.visible_message(span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!"))
+ new /obj/item/book/manual/random(src_turf)
+ qdel(src)
+
+
+/obj/item/antag_granter
+ icon = 'modular_nova/modules/opposing_force/icons/items.dmi'
+ /// What antag datum to give
+ var/antag_datum = /datum/antagonist/traitor
+ /// What to tell the user when they use the granter
+ var/user_message = ""
+
+
+/obj/item/antag_granter/attack(mob/living/target_mob, mob/living/user, params)
+ . = ..()
+
+ if(target_mob != user) // As long as you're attacking yourself it counts.
+ return
+ attack_self(user)
+
+
+/obj/item/antag_granter/attack_self(mob/user, modifiers)
+ . = ..()
+ if(!isliving(user) || !user.mind)
+ return FALSE
+
+ to_chat(user, span_notice(user_message))
+ user.mind.add_antag_datum(antag_datum)
+ qdel(src)
+ return TRUE
+
+/obj/item/antag_granter/changeling
+ name = "viral injector"
+ desc = "A blue injector filled with some viscous, red substance. It has no markings apart from an orange warning stripe near the large needle."
+ icon_state = "changeling_injector"
+ antag_datum = /datum/antagonist/changeling
+ user_message = "As you inject the substance into yourself, you start to feel... better ."
+
+
+/obj/item/antag_granter/heretic
+ name = "strange book"
+ desc = "A purple book with a green eye on the cover. You swear it's looking at you...."
+ icon_state = "heretic_granter"
+ antag_datum = /datum/antagonist/heretic
+ user_message = "As you open the book, you see a great flash as the world becomes all the clearer for you ."
+
+/obj/item/antag_granter/clock_cultist
+ name = "brass contraption"
+ desc = "A cogwheel-shaped device of brass, with a glass lens floating, suspended in the center."
+ icon = 'modular_nova/modules/clock_cult/icons/clockwork_objects.dmi'
+ icon_state = "vanguard_cogwheel"
+ antag_datum = /datum/antagonist/clock_cultist/solo
+ user_message = "A whirring fills your ears as knowledge of His Eminence fills your mind ."
+
+/obj/item/antag_granter/clock_cultist/attack_self(mob/user, modifiers)
+ . = ..()
+ if(!.)
+ return FALSE
+
+ var/obj/item/clockwork/clockwork_slab/slab = new
+ user.put_in_hands(slab, FALSE)
diff --git a/modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm b/modular_nova/modules/moretraitoritems/code/syndiemirror.dm
similarity index 97%
rename from modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm
rename to modular_nova/modules/moretraitoritems/code/syndiemirror.dm
index 013ec5950f0..06f0cf82bd0 100644
--- a/modular_skyrat/modules/moretraitoritems/code/syndiemirror.dm
+++ b/modular_nova/modules/moretraitoritems/code/syndiemirror.dm
@@ -1,7 +1,7 @@
/obj/item/hhmirror/syndie
name = "handheld mirror"
desc = "A handheld mirror that allows you to change your looks. Reminds you of old times for some reason..."
- icon = 'modular_skyrat/master_files/icons/obj/hhmirror.dmi'
+ icon = 'modular_nova/master_files/icons/obj/hhmirror.dmi'
icon_state = "hhmirror"
special_desc_requirement = EXAMINE_CHECK_SYNDICATE
special_desc = "A mirror manufactured by the Syndicate containing barber-nanites that can alter your hair on the spot. Target your head and use it on yourself to activate the nanites."
diff --git a/modular_skyrat/modules/moretraitoritems/code/traitor_announcer.dm b/modular_nova/modules/moretraitoritems/code/traitor_announcer.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/traitor_announcer.dm
rename to modular_nova/modules/moretraitoritems/code/traitor_announcer.dm
diff --git a/modular_skyrat/modules/moretraitoritems/code/uplink_kits.dm b/modular_nova/modules/moretraitoritems/code/uplink_kits.dm
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/code/uplink_kits.dm
rename to modular_nova/modules/moretraitoritems/code/uplink_kits.dm
diff --git a/modular_nova/modules/moretraitoritems/code/weapons.dm b/modular_nova/modules/moretraitoritems/code/weapons.dm
new file mode 100644
index 00000000000..4423c7b34e6
--- /dev/null
+++ b/modular_nova/modules/moretraitoritems/code/weapons.dm
@@ -0,0 +1,190 @@
+#define CALIBRE_14MM "14mm"
+
+/obj/item/gun/ballistic/revolver/ocelot
+ name = "Colt Peacemaker revolver"
+ desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." // We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice.
+ // this could probably be made funnier by reducing its damage multiplier but also making it so that every fired bullet has the wacky ricochets
+ // but that's a different plate of cookies for a different glass of milk
+ icon_state = "c38_panther"
+ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder
+
+/obj/item/ammo_casing/a357/peacemaker
+ name = ".357 Peacemaker bullet casing"
+ desc = "A .357 Peacemaker bullet casing."
+ caliber = CALIBER_357
+ projectile_type = /obj/projectile/bullet/a357/peacemaker
+
+/obj/projectile/bullet/a357/peacemaker
+ name = ".357 Peacemaker bullet"
+ damage = 25
+ wound_bonus = 0
+ ricochets_max = 6
+ ricochet_chance = 200
+ ricochet_auto_aim_angle = 50
+ ricochet_auto_aim_range = 6
+ ricochet_incidence_leeway = 80
+ ricochet_decay_chance = 1
+
+/datum/design/a357/peacemaker
+ name = "Speed Loader (.357 Peacemaker)"
+ id = "a357PM"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2)
+ build_path = /obj/item/ammo_box/a357/peacemaker
+ category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO)
+
+/obj/item/ammo_box/a357/peacemaker
+ name = "speed loader (.357 Peacemaker)"
+ desc = "Designed to quickly reload revolvers."
+ icon_state = "357"
+ ammo_type = /obj/item/ammo_casing/a357/peacemaker
+ max_ammo = 7
+ multiple_sprites = AMMO_BOX_PER_BULLET
+ item_flags = NO_MAT_REDEMPTION
+
+
+/obj/item/clothing/head/hats/sus_bowler
+ name = "odd bowler"
+ desc = "A deep black bowler. Inside the hat, there is a sleek red S, with a smaller X insignia embroidered within. On closer inspection, the brim feels oddly weighted..."
+ icon_state = "bowler"
+ force = 10
+ throwforce = 45
+ throw_speed = 5
+ throw_range = 9
+ w_class = WEIGHT_CLASS_SMALL
+ armour_penetration = 30 //5 points less then a double esword!
+ sharpness = SHARP_POINTY
+ attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
+ attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
+
+///obj/item/clothing/head/hats/sus_bowler/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
+ //var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum)
+ //if(thrownby && !caught)
+ //addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, throw_at), thrownby, throw_range+2, throw_speed, null, TRUE), 1)
+ //else
+ //return ..()
+
+///obj/item/clothing/head/hats/sus_bowler/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE)
+ //if(ishuman(thrower))
+ //var/mob/living/carbon/human/I = thrower
+ //I.throw_mode_off(THROW_MODE_TOGGLE) //so they can catch it on the return.
+ //return ..()
+
+
+/*
+* Malorian Arms 3516 14MM
+* If you have this, you're a badass.
+*/
+
+/obj/item/gun/ballistic/automatic/pistol/robohand
+ name = "Malorian Arms 3516"
+ desc = "The Malorian Arms 3516 is a 14mm heavy pistol, sporting a titanium frame and unique wooden grip. A custom Dyna-porting and \
+ direct integral cyber-interlink means only someone with a cyberarm and smartgun link can take full advantage of the pistol's features."
+ icon = 'modular_nova/modules/moretraitoritems/icons/3516.dmi'
+ icon_state = "3516"
+ w_class = WEIGHT_CLASS_NORMAL
+ accepted_magazine_type = /obj/item/ammo_box/magazine/m14mm
+ can_suppress = FALSE
+ fire_sound = 'modular_nova/modules/moretraitoritems/sound/fire2.ogg'
+ load_sound = 'modular_nova/modules/moretraitoritems/sound/reload.ogg'
+ load_empty_sound = 'modular_nova/modules/moretraitoritems/sound/reload.ogg'
+ eject_sound = 'modular_nova/modules/moretraitoritems/sound/release.ogg'
+ eject_empty_sound = 'modular_nova/modules/moretraitoritems/sound/release.ogg'
+ vary_fire_sound = FALSE
+ rack_sound = 'modular_nova/modules/moretraitoritems/sound/slide.ogg'
+ fire_sound_volume = 100
+ bolt_wording = "fuckin' slide"
+ reload_time = 0 //FAST AS FUCK BOIS!
+ var/unrestricted = FALSE
+
+/obj/item/gun/ballistic/automatic/pistol/robohand/unrestricted
+ unrestricted = TRUE
+
+//The gun cannot shoot if you do not have a cyborg arm.
+/obj/item/gun/ballistic/automatic/pistol/robohand/afterattack(atom/target, mob/living/user, flag, params)
+ //This is where we are checking if the user has a cybernetic arm to USE the gun. ROBOHAND HAS A ROBO HAND
+ if(!unrestricted)
+ var/mob/living/carbon/human/human_user = user
+ var/obj/item/bodypart/selected_hand = human_user.get_active_hand()
+ if(IS_ORGANIC_LIMB(selected_hand))
+ to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?"))
+ return
+ . = ..()
+
+/obj/item/gun/ballistic/automatic/pistol/robohand/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message)
+ if(!istype(inserted_mag, accepted_magazine_type))
+ to_chat(user, span_warning("\The [inserted_mag] doesn't seem to fit into \the [src]..."))
+ return FALSE
+ if(!user.transferItemToLoc(inserted_mag, src))
+ to_chat(user, span_warning("You cannot seem to get \the [src] out of your hands!"))
+ return FALSE
+ magazine = inserted_mag
+ if(display_message)
+ to_chat(user, span_notice("You load a new [magazine_wording] into \the [src]."))
+ playsound(src, load_empty_sound, load_sound_volume, load_sound_vary)
+ if(bolt_type == BOLT_TYPE_OPEN && !bolt_locked)
+ chamber_round(TRUE)
+ drop_bolt(user)
+ update_appearance()
+ animate(src, 0.2 SECONDS, 1, transform = turn(matrix(), 120)) //Le johnny robohand woosh woosh twirl
+ animate(time = 0.2 SECONDS, transform = turn(matrix(), 240))
+ animate(time = 0.2 SECONDS, transform = null)
+ return TRUE
+
+/obj/item/gun/ballistic/automatic/pistol/robohand/eject_magazine(mob/user, display_message, obj/item/ammo_box/magazine/tac_load)
+ if(bolt_type == BOLT_TYPE_OPEN)
+ chambered = null
+ if(magazine.ammo_count())
+ playsound(src, eject_sound, eject_sound_volume, eject_sound_volume) //This is why we've copied this proc, it should play the eject sound when ejecting.
+ else
+ playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_volume)
+ magazine.forceMove(drop_location())
+ var/obj/item/ammo_box/magazine/old_mag = magazine
+ if(tac_load)
+ if (insert_magazine(user, tac_load, FALSE))
+ to_chat(user, span_notice("You perform an elite tactical reload on \the [src]."))
+ else
+ to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing."))
+ magazine = null
+ else
+ magazine = null
+ user.put_in_hands(old_mag)
+ old_mag.update_appearance()
+ if(display_message)
+ to_chat(user, span_notice("You pull the [magazine_wording] out of \the [src]."))
+ update_appearance()
+ animate(src, transform = turn(matrix(), 120), time = 0.2 SECONDS, loop = 1) //Le johnny robohand again
+ animate(transform = turn(matrix(), 240), time = 0.2 SECONDS)
+ animate(transform = null, time = 0.2 SECONDS)
+
+//Magazine stuff
+/obj/item/ammo_box/magazine/m14mm
+ name = "pistol magazine (14mm)"
+ icon = 'modular_nova/modules/moretraitoritems/icons/3516_mag.dmi'
+ icon_state = "14mm"
+ base_icon_state = "14mm"
+ ammo_type = /obj/item/ammo_casing/c14mm
+ caliber = CALIBRE_14MM
+ max_ammo = 10
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+
+/obj/item/ammo_casing/c14mm
+ name = "14mm bullet casing"
+ desc = "A 14mm bullet casing. Badass."
+ caliber = CALIBRE_14MM
+ projectile_type = /obj/projectile/bullet/c14mm
+
+/obj/projectile/bullet/c14mm
+ name = "14mm bullet"
+ damage = 60
+ embedding = list(embed_chance = 90, fall_chance = 3, jostle_chance = 4, ignore_throwspeed_threshold = TRUE, pain_stam_pct = 0.4, pain_mult = 5, jostle_pain_mult = 9, rip_time = 10)
+ dismemberment = 50
+ pierces = 1
+ projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS
+
+//nullrod katana
+/obj/item/katana/weak/curator //This has the same stats as the curator's claymore
+ desc = "An ancient Katana. Forged by... Well, it doesn't really say, but surely it's authentic! And sharp to boot!"
+ force = 15
+ block_chance = 30
+ armour_penetration = 5
diff --git a/modular_skyrat/modules/moretraitoritems/icons/3516.dmi b/modular_nova/modules/moretraitoritems/icons/3516.dmi
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/icons/3516.dmi
rename to modular_nova/modules/moretraitoritems/icons/3516.dmi
diff --git a/modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi b/modular_nova/modules/moretraitoritems/icons/3516_mag.dmi
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi
rename to modular_nova/modules/moretraitoritems/icons/3516_mag.dmi
diff --git a/modular_skyrat/modules/moretraitoritems/icons/alien.dmi b/modular_nova/modules/moretraitoritems/icons/alien.dmi
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/icons/alien.dmi
rename to modular_nova/modules/moretraitoritems/icons/alien.dmi
diff --git a/modular_skyrat/modules/moretraitoritems/readme.md b/modular_nova/modules/moretraitoritems/readme.md
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/readme.md
rename to modular_nova/modules/moretraitoritems/readme.md
diff --git a/modular_skyrat/modules/moretraitoritems/sound/fire.ogg b/modular_nova/modules/moretraitoritems/sound/fire.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/fire.ogg
rename to modular_nova/modules/moretraitoritems/sound/fire.ogg
diff --git a/modular_skyrat/modules/moretraitoritems/sound/fire2.ogg b/modular_nova/modules/moretraitoritems/sound/fire2.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/fire2.ogg
rename to modular_nova/modules/moretraitoritems/sound/fire2.ogg
diff --git a/modular_skyrat/modules/moretraitoritems/sound/release.ogg b/modular_nova/modules/moretraitoritems/sound/release.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/release.ogg
rename to modular_nova/modules/moretraitoritems/sound/release.ogg
diff --git a/modular_skyrat/modules/moretraitoritems/sound/reload.ogg b/modular_nova/modules/moretraitoritems/sound/reload.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/reload.ogg
rename to modular_nova/modules/moretraitoritems/sound/reload.ogg
diff --git a/modular_skyrat/modules/moretraitoritems/sound/slide.ogg b/modular_nova/modules/moretraitoritems/sound/slide.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/slide.ogg
rename to modular_nova/modules/moretraitoritems/sound/slide.ogg
diff --git a/modular_skyrat/modules/moretraitoritems/sound/wakeup.ogg b/modular_nova/modules/moretraitoritems/sound/wakeup.ogg
similarity index 100%
rename from modular_skyrat/modules/moretraitoritems/sound/wakeup.ogg
rename to modular_nova/modules/moretraitoritems/sound/wakeup.ogg
diff --git a/modular_skyrat/modules/morewizardstuffs/spellbook.dm b/modular_nova/modules/morewizardstuffs/spellbook.dm
similarity index 100%
rename from modular_skyrat/modules/morewizardstuffs/spellbook.dm
rename to modular_nova/modules/morewizardstuffs/spellbook.dm
diff --git a/modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm b/modular_nova/modules/morewizardstuffs/spells/bloodcrawl_potion.dm
similarity index 100%
rename from modular_skyrat/modules/morewizardstuffs/spells/bloodcrawl_potion.dm
rename to modular_nova/modules/morewizardstuffs/spells/bloodcrawl_potion.dm
diff --git a/modular_skyrat/modules/morewizardstuffs/spells/magical_stimpack.dm b/modular_nova/modules/morewizardstuffs/spells/magical_stimpack.dm
similarity index 100%
rename from modular_skyrat/modules/morewizardstuffs/spells/magical_stimpack.dm
rename to modular_nova/modules/morewizardstuffs/spells/magical_stimpack.dm
diff --git a/modular_nova/modules/mounted_machine_gun/code/ammobox.dm b/modular_nova/modules/mounted_machine_gun/code/ammobox.dm
new file mode 100644
index 00000000000..e00f44e2af5
--- /dev/null
+++ b/modular_nova/modules/mounted_machine_gun/code/ammobox.dm
@@ -0,0 +1,22 @@
+/obj/item/ammo_box/magazine/mmg_box
+ name = "\improper .50 BMG ammo box"
+ desc = "A big box full of beltfed ammo."
+ icon = 'modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi'
+ icon_state = "ammobox"
+ multiple_sprites = AMMO_BOX_FULL_EMPTY
+ max_ammo = 150
+ ammo_type = /obj/item/ammo_casing/b50cal
+ caliber = CALIBER_50BMG
+
+/obj/item/ammo_casing/b50cal
+ name = ".50 BMG bullet casing"
+ icon_state = ".50"
+ caliber = CALIBER_50BMG
+ projectile_type = /obj/projectile/bullet/c50cal
+
+/obj/projectile/bullet/c50cal
+ name = ".50 BMG bullet"
+ damage = 40
+ wound_bonus = 60
+ armour_penetration = 20
+ icon_state = "redtrac"
diff --git a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm b/modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm
similarity index 94%
rename from modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm
rename to modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm
index ef49a87084b..fa9b4c1ae8c 100644
--- a/modular_skyrat/modules/mounted_machine_gun/code/mounted_machine_gun.dm
+++ b/modular_nova/modules/mounted_machine_gun/code/mounted_machine_gun.dm
@@ -5,7 +5,7 @@
/obj/machinery/mounted_machine_gun
name = "\improper T90 Mounted Machine Gun"
desc = "A high calibre mounted machine gun capable of laying down copious amounts of suppressive fire."
- icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi'
+ icon = 'modular_nova/modules/mounted_machine_gun/icons/turret.dmi'
icon_state = "mmg"
base_icon_state = "mmg"
can_buckle = TRUE
@@ -15,13 +15,12 @@
buckle_lying = 0
SET_BASE_PIXEL(-8, -8)
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
/// The extra range that this turret gives regarding viewrange.
var/view_range = 2.5
/// Sound to play when overheated
var/overheatsound = 'sound/effects/wounds/sizzle2.ogg'
/// Sound to play when firing
- var/firesound = 'modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg'
+ var/firesound = 'modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg'
/// How long it takes for a wrench user to undeploy the object
var/undeploy_time = 3 SECONDS
/// Our currently loaded ammo box.
@@ -164,7 +163,6 @@
register_user(user_to_buckle)
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
setDir(SOUTH)
playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE)
set_anchored(TRUE)
@@ -199,21 +197,21 @@
return
ammo_box = weapon
weapon.forceMove(src)
- playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg', 100)
+ playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg', 100)
balloon_alert("ammo box inserted!")
/obj/machinery/mounted_machine_gun/proc/remove_ammo_box(mob/living/user)
ammo_box.forceMove(drop_location())
user.put_in_hands(ammo_box)
ammo_box = null
- playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg', 100)
+ playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg', 100)
balloon_alert(user, "ammo box removed!")
update_appearance()
/obj/machinery/mounted_machine_gun/proc/toggle_cover(mob/user)
cover_open = !cover_open
balloon_alert(user, "cover [cover_open ? "opened" : "closed"]!")
- playsound(src, cover_open ? 'modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg' : 'modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg', 100)
+ playsound(src, cover_open ? 'modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg' : 'modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg', 100)
/// Registers all the required signals and sets up the client to work with the turret.
/obj/machinery/mounted_machine_gun/proc/register_user(mob/living/user_to_buckle)
@@ -378,7 +376,7 @@
if(bolt)
return
bolt = TRUE
- playsound(src, 'modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg', 100)
+ playsound(src, 'modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg', 100)
/obj/machinery/mounted_machine_gun/proc/check_click_modifiers(modifiers)
if(LAZYACCESS(modifiers, SHIFT_CLICK))
@@ -423,7 +421,6 @@
user.pixel_y = -8
if(EAST)
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
user.pixel_x = -22
user.pixel_y = 0
if(SOUTHEAST)
@@ -433,7 +430,6 @@
user.pixel_y = 14
if(SOUTH)
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
user.pixel_x = 0
user.pixel_y = 22
if(SOUTHWEST)
@@ -443,7 +439,6 @@
user.pixel_y = 14
if(WEST)
layer = ABOVE_MOB_LAYER
- plane = GAME_PLANE_UPPER
user.pixel_x = 22
user.pixel_y = 0
if(NORTHWEST)
@@ -455,7 +450,7 @@
/obj/item/mounted_machine_gun_folded
name = "\improper folded T-90 mounted machine gun"
desc = "A folded and unloaded mounted machine gun, ready to be deployed and used."
- icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi'
+ icon = 'modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi'
icon_state = "folded_hmg"
max_integrity = 250
w_class = WEIGHT_CLASS_BULKY
diff --git a/modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi b/modular_nova/modules/mounted_machine_gun/icons/turret.dmi
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/icons/turret.dmi
rename to modular_nova/modules/mounted_machine_gun/icons/turret.dmi
diff --git a/modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi b/modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi
rename to modular_nova/modules/mounted_machine_gun/icons/turret_objects.dmi
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg b/modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/50cal_box_01.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/50cal_box_01.ogg
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg b/modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/close_lid.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/close_lid.ogg
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg b/modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/cock_bolt.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/cock_bolt.ogg
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg b/modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/insert_ammobox.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/insert_ammobox.ogg
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg b/modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/open_lid.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/open_lid.ogg
diff --git a/modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg b/modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg
similarity index 100%
rename from modular_skyrat/modules/mounted_machine_gun/sound/remove_ammobox.ogg
rename to modular_nova/modules/mounted_machine_gun/sound/remove_ammobox.ogg
diff --git a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm
similarity index 99%
rename from modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm
rename to modular_nova/modules/multicellcharger/code/multi_cell_charger.dm
index 6f1aa8383ab..fc984e7aa97 100644
--- a/modular_skyrat/modules/multicellcharger/code/multi_cell_charger.dm
+++ b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm
@@ -1,7 +1,7 @@
/obj/machinery/cell_charger_multi
name = "multi-cell charging rack"
desc = "A cell charging rack for multiple batteries."
- icon = 'modular_skyrat/modules/aesthetics/cells/cell.dmi'
+ icon = 'modular_nova/modules/aesthetics/cells/cell.dmi'
icon_state = "cchargermulti"
base_icon_state = "cchargermulti"
use_power = IDLE_POWER_USE
diff --git a/modular_skyrat/modules/multiserver/code/config_entry.dm b/modular_nova/modules/multiserver/code/config_entry.dm
similarity index 100%
rename from modular_skyrat/modules/multiserver/code/config_entry.dm
rename to modular_nova/modules/multiserver/code/config_entry.dm
diff --git a/modular_skyrat/modules/multiserver/readme.md b/modular_nova/modules/multiserver/readme.md
similarity index 100%
rename from modular_skyrat/modules/multiserver/readme.md
rename to modular_nova/modules/multiserver/readme.md
diff --git a/modular_skyrat/modules/mutants/code/mutant_antag_datum.dm b/modular_nova/modules/mutants/code/mutant_antag_datum.dm
similarity index 92%
rename from modular_skyrat/modules/mutants/code/mutant_antag_datum.dm
rename to modular_nova/modules/mutants/code/mutant_antag_datum.dm
index acfc5de6883..7441991b5a4 100644
--- a/modular_skyrat/modules/mutants/code/mutant_antag_datum.dm
+++ b/modular_nova/modules/mutants/code/mutant_antag_datum.dm
@@ -5,7 +5,7 @@
antagpanel_category = "Mutant"
show_in_antagpanel = TRUE
antag_hud_name = "mutant"
- hud_icon = 'modular_skyrat/modules/mutants/icons/antag_hud.dmi'
+ hud_icon = 'modular_nova/modules/mutants/icons/antag_hud.dmi'
antag_memory = "You are a mutated abomination. You yearn for flesh. Your mind is torn apart, you do not remember who you are. \
All you know is that you want to kill. \
You retain some capability to reason. \
diff --git a/modular_skyrat/modules/mutants/code/mutant_component.dm b/modular_nova/modules/mutants/code/mutant_component.dm
similarity index 96%
rename from modular_skyrat/modules/mutants/code/mutant_component.dm
rename to modular_nova/modules/mutants/code/mutant_component.dm
index 4e78065eb37..025efeff998 100644
--- a/modular_skyrat/modules/mutants/code/mutant_component.dm
+++ b/modular_nova/modules/mutants/code/mutant_component.dm
@@ -50,7 +50,7 @@
START_PROCESSING(SSobj, src)
-/datum/component/mutant_infection/Destroy(force, silent)
+/datum/component/mutant_infection/Destroy(force)
STOP_PROCESSING(SSobj, src)
UnregisterSignal(parent, list(COMSIG_MUTANT_CURED, COMSIG_LIVING_DEATH))
if(timer_id)
@@ -156,7 +156,11 @@
/datum/component/mutant_infection/proc/regenerate()
if(!host.mind)
- var/list/candidates = poll_candidates_for_mob("Do you want to play as a mutant([host.name])?", target_mob = host)
+ var/list/candidates = SSpolling.poll_ghost_candidates_for_mob("Do you want to play as a mutant([host.name])?",
+ target_mob = host,
+ pic_source = host,
+ role_name_text = "mutant [host.name]",
+ )
if(!candidates.len)
return
var/client/C = pick_n_take(candidates)
diff --git a/modular_skyrat/modules/mutants/code/mutant_cure.dm b/modular_nova/modules/mutants/code/mutant_cure.dm
similarity index 97%
rename from modular_skyrat/modules/mutants/code/mutant_cure.dm
rename to modular_nova/modules/mutants/code/mutant_cure.dm
index f6c72454c55..25b9581f247 100644
--- a/modular_skyrat/modules/mutants/code/mutant_cure.dm
+++ b/modular_nova/modules/mutants/code/mutant_cure.dm
@@ -1,7 +1,7 @@
/obj/item/rna_extractor
name = "advanced virus RNA extractor"
desc = "A tool used to extract the RNA from viruses. Apply to skin."
- icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi'
+ icon = 'modular_nova/modules/mutants/icons/extractor.dmi'
icon_state = "extractor"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = SHEET_MATERIAL_AMOUNT, /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT)
/// Our loaded vial.
@@ -82,7 +82,7 @@
/obj/item/rna_vial
name = "raw RNA vial"
desc = "A glass vial containing raw virus RNA. Slot this into the combinator to upload the sample."
- icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi'
+ icon = 'modular_nova/modules/mutants/icons/extractor.dmi'
icon_state = "rnavial"
custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT)
var/contains_rna = FALSE
@@ -104,7 +104,7 @@
/obj/item/hnz_cure
name = "HNZ-1 cure vial"
desc = "A counter to the HNZ-1 virus, used to rapidly reverse the effects of the virus."
- icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi'
+ icon = 'modular_nova/modules/mutants/icons/extractor.dmi'
icon_state = "tvirus_cure"
var/used = FALSE
@@ -145,7 +145,7 @@
/obj/machinery/rnd/rna_recombinator
name = "RNA recombinator"
desc = "This machine is used to recombine RNA sequences from extracted vials of raw virus."
- icon = 'modular_skyrat/modules/mutants/icons/cure_machine.dmi'
+ icon = 'modular_nova/modules/mutants/icons/cure_machine.dmi'
icon_state = "h_lathe"
base_icon_state = "h_lathe"
density = TRUE
@@ -346,7 +346,7 @@
/obj/item/reagent_containers/cup/bottle/hnz
name = "HNZ-1 bottle"
desc = "A small bottle of the HNZ-1 pathogen. Nanotrasen Bioweapons inc."
- icon = 'modular_skyrat/modules/mutants/icons/extractor.dmi'
+ icon = 'modular_nova/modules/mutants/icons/extractor.dmi'
icon_state = "tvirus_infector"
list_reagents = list(/datum/reagent/hnz = 30)
custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT * 5)
diff --git a/modular_skyrat/modules/mutants/code/mutant_event.dm b/modular_nova/modules/mutants/code/mutant_event.dm
similarity index 90%
rename from modular_skyrat/modules/mutants/code/mutant_event.dm
rename to modular_nova/modules/mutants/code/mutant_event.dm
index bc2327a2097..06d867b831b 100644
--- a/modular_skyrat/modules/mutants/code/mutant_event.dm
+++ b/modular_nova/modules/mutants/code/mutant_event.dm
@@ -29,5 +29,5 @@
)
/datum/round_event/mutant_infestation/announce(fake)
- alert_sound_to_playing(sound('modular_skyrat/modules/alerts/sound/alerts/alert2.ogg'), override_volume = TRUE)
+ alert_sound_to_playing(sound('modular_nova/modules/alerts/sound/alerts/alert2.ogg'), override_volume = TRUE)
priority_announce("Automated air filtration screeing systems have flagged an unknown pathogen in the ventilation systems, quarantine is in effect.", "Level-1 Viral Biohazard Alert", ANNOUNCER_MUTANTS)
diff --git a/modular_skyrat/modules/mutants/code/mutant_species.dm b/modular_nova/modules/mutants/code/mutant_species.dm
similarity index 97%
rename from modular_skyrat/modules/mutants/code/mutant_species.dm
rename to modular_nova/modules/mutants/code/mutant_species.dm
index 07bcf0f9cdb..7606c93bef5 100644
--- a/modular_skyrat/modules/mutants/code/mutant_species.dm
+++ b/modular_nova/modules/mutants/code/mutant_species.dm
@@ -4,7 +4,7 @@
name = "High-Functioning mutant"
id = SPECIES_MUTANT
meat = /obj/item/food/meat/slab/human/mutant/zombie
- eyes_icon = 'modular_skyrat/modules/mutants/icons/mutant_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/mutants/icons/mutant_eyes.dmi'
inherent_traits = list(
TRAIT_NOBLOOD,
TRAIT_NODISMEMBER,
@@ -184,8 +184,8 @@
icon = 'icons/effects/blood.dmi'
icon_state = "bloodhand_left"
inhand_icon_state = "mutant"
- lefthand_file = 'modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi'
hitsound = 'sound/hallucinations/growl1.ogg'
force = 26
sharpness = SHARP_EDGED
diff --git a/modular_skyrat/modules/mutants/code/mutant_techweb.dm b/modular_nova/modules/mutants/code/mutant_techweb.dm
similarity index 100%
rename from modular_skyrat/modules/mutants/code/mutant_techweb.dm
rename to modular_nova/modules/mutants/code/mutant_techweb.dm
diff --git a/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm b/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm
new file mode 100644
index 00000000000..879d9ba12e3
--- /dev/null
+++ b/modular_nova/modules/mutants/code/mutant_zombie_bodyparts.dm
@@ -0,0 +1,53 @@
+// mutant_zombie!
+/obj/item/bodypart/head/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_state = "mutant_head"
+ is_dimorphic = FALSE
+ limb_id = SPECIES_MUTANT
+ species_color = "#ffffff"
+ head_flags = HEAD_HAIR|HEAD_LIPS|HEAD_DEBRAIN
+
+/obj/item/bodypart/chest/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ limb_id = SPECIES_MUTANT
+ icon_state = "mutant_chest"
+ is_dimorphic = FALSE
+ should_draw_greyscale = FALSE
+
+/obj/item/bodypart/arm/left/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ limb_id = SPECIES_MUTANT
+ icon_state = "mutant_l_arm"
+ should_draw_greyscale = FALSE
+
+/obj/item/bodypart/arm/right/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ limb_id = SPECIES_MUTANT
+ icon_state = "mutant_r_arm"
+ should_draw_greyscale = FALSE
+
+/obj/item/bodypart/leg/left/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ limb_id = SPECIES_MUTANT
+ icon_state = "mutant_l_leg"
+ digitigrade_type = null
+ should_draw_greyscale = FALSE
+
+/obj/item/bodypart/leg/right/mutant_zombie
+ icon_greyscale = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ icon_static = 'modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi'
+ limb_id = SPECIES_MUTANT
+ icon_state = "mutant_r_leg"
+ digitigrade_type = null
+ should_draw_greyscale = FALSE
diff --git a/modular_skyrat/modules/mutants/icons/antag_hud.dmi b/modular_nova/modules/mutants/icons/antag_hud.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/antag_hud.dmi
rename to modular_nova/modules/mutants/icons/antag_hud.dmi
diff --git a/modular_skyrat/modules/mutants/icons/cure_machine.dmi b/modular_nova/modules/mutants/icons/cure_machine.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/cure_machine.dmi
rename to modular_nova/modules/mutants/icons/cure_machine.dmi
diff --git a/modular_skyrat/modules/mutants/icons/extractor.dmi b/modular_nova/modules/mutants/icons/extractor.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/extractor.dmi
rename to modular_nova/modules/mutants/icons/extractor.dmi
diff --git a/modular_skyrat/modules/mutants/icons/mutant_claw.dmi b/modular_nova/modules/mutants/icons/mutant_claw.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/mutant_claw.dmi
rename to modular_nova/modules/mutants/icons/mutant_claw.dmi
diff --git a/modular_skyrat/modules/mutants/icons/mutant_eyes.dmi b/modular_nova/modules/mutants/icons/mutant_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/mutant_eyes.dmi
rename to modular_nova/modules/mutants/icons/mutant_eyes.dmi
diff --git a/modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi b/modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/mutant_hand_lefthand.dmi
rename to modular_nova/modules/mutants/icons/mutant_hand_lefthand.dmi
diff --git a/modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi b/modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/mutant_hand_righthand.dmi
rename to modular_nova/modules/mutants/icons/mutant_hand_righthand.dmi
diff --git a/modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi b/modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi
rename to modular_nova/modules/mutants/icons/mutant_parts_greyscale.dmi
diff --git a/modular_skyrat/modules/mutants/readme.md b/modular_nova/modules/mutants/readme.md
similarity index 100%
rename from modular_skyrat/modules/mutants/readme.md
rename to modular_nova/modules/mutants/readme.md
diff --git a/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm b/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm
new file mode 100644
index 00000000000..c737bea7e52
--- /dev/null
+++ b/modular_nova/modules/nanotrasen_naval_command/code/clothing.dm
@@ -0,0 +1,99 @@
+
+// UNDER
+/obj/item/clothing/under/rank/centcom/skyrat/naval
+ name = "ensign uniform"
+ desc = "A uniform worn by those with the rank Ensign in the Nanotrasen Navy."
+ icon_state = "naval_ensign"
+ can_adjust = TRUE
+
+/obj/item/clothing/under/rank/centcom/skyrat/naval/commander
+ name = "command uniform"
+ desc = "A uniform worn by those with a command rank in the Nanotrasen Navy."
+ icon_state = "naval_command"
+
+/obj/item/clothing/under/rank/centcom/skyrat/naval/admiral
+ name = "admiral's uniform"
+ desc = "A uniform worn by those with the rank Admiral in the Nanotrasen Navy."
+ icon_state = "naval_admiral"
+
+/obj/item/clothing/under/rank/centcom/skyrat/naval/fleet_admiral
+ name = "fleet admiral's uniform"
+ desc = "A uniform worn by those with the rank Fleet Admiral in the Nanotrasen Navy."
+ icon_state = "naval_fleet_admiral"
+
+// GLOVES
+/obj/item/clothing/gloves/combat/naval
+ name = "nanotrasen naval gloves"
+ desc = "A high quality pair of thick gloves covered in gold stitching, given to Nanotrasen's Naval Commanders."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ icon_state = "naval_command"
+
+/obj/item/clothing/gloves/combat/naval/fleet_admiral
+ name = "fleet admiral's gloves"
+ icon_state = "naval_fleet_admiral"
+
+
+// HATS
+/obj/item/clothing/head/hats/caphat/naval
+ name = "naval cap"
+ desc = "A cap worn by those in the Nanotrasen Navy."
+ icon_state = "naval_command"
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/hats/caphat/naval/fleet_admiral
+ name = "fleet admiral's cap"
+ desc = "A cap worn by the Nanotrasen Fleet Admiral."
+ icon_state = "naval_fleet_admiral"
+
+
+// NECK
+/obj/item/clothing/neck/pauldron
+ name = "lieutenant commander's pauldron"
+ desc = "A red padded pauldron signifying the rank of Lieutenant Commander of the Nanotrasen Navy."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ icon_state = "pauldron_ltcr"
+
+/obj/item/clothing/neck/pauldron/commander
+ name = "commander's pauldron"
+ desc = "A red padded pauldron signifying the rank of Commander in the Nanotrasen Navy."
+ icon_state = "pauldron_commander"
+
+/obj/item/clothing/neck/pauldron/captain
+ name = "captain's pauldron"
+ desc = "A red padded pauldron signifying the rank of Captain in the Nanotrasen Navy."
+ icon_state = "pauldron_captain"
+
+/obj/item/clothing/neck/cloak/admiral
+ name = "admiral's cape"
+ desc = "A vibrant green cape with gold stitching, worn by Nanotrasen Navy Admirals."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ icon_state = "cape_admiral"
+
+/obj/item/clothing/neck/cloak/fleet_admiral
+ name = "fleet admiral's cape"
+ desc = "A godly cape worn by the highest ranking person in the Nanotrasen Navy, the Fleet Admiral."
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/neck.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/neck.dmi'
+ icon_state = "cape_fleet_admiral"
+
+// SUITS
+/obj/item/clothing/suit/armor/vest/capcarapace/naval
+ name = "naval carapace"
+ desc = "A carapace worn by Naval Command members."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon_state = "naval_carapace"
+
+// GLASSES
+/obj/item/clothing/glasses/hud/security/sunglasses/black
+ name = "black security sunglasses"
+ desc = "A pair of black sunglasses worn by Naval Command officers."
+ icon = 'icons/obj/clothing/glasses.dmi'
+ worn_icon = 'icons/mob/clothing/eyes.dmi'
+ icon_state = "sun"
+ unique_reskin = null
diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/id_trims.dm b/modular_nova/modules/nanotrasen_naval_command/code/id_trims.dm
similarity index 100%
rename from modular_skyrat/modules/nanotrasen_naval_command/code/id_trims.dm
rename to modular_nova/modules/nanotrasen_naval_command/code/id_trims.dm
diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/outfits.dm b/modular_nova/modules/nanotrasen_naval_command/code/outfits.dm
similarity index 100%
rename from modular_skyrat/modules/nanotrasen_naval_command/code/outfits.dm
rename to modular_nova/modules/nanotrasen_naval_command/code/outfits.dm
diff --git a/modular_nova/modules/nanotrasen_rep/code/clothing.dm b/modular_nova/modules/nanotrasen_rep/code/clothing.dm
new file mode 100644
index 00000000000..abfdfcf6c64
--- /dev/null
+++ b/modular_nova/modules/nanotrasen_rep/code/clothing.dm
@@ -0,0 +1,92 @@
+
+//Uniform items are in command.dm
+
+/obj/item/clothing/suit/armor/vest/nanotrasen_consultant
+ name = "nanotrasen officers coat"
+ desc = "A premium black coat with real fur round the neck, it seems to have some armor padding inside as well."
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
+ icon_state = "bladerunner"
+ inhand_icon_state = "armor"
+ blood_overlay_type = "suit"
+ dog_fashion = null
+ body_parts_covered = CHEST|GROIN|ARMS
+ cold_protection = CHEST|GROIN|ARMS
+ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+ heat_protection = CHEST|ARMS|GROIN
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+
+/obj/item/clothing/head/nanotrasen_consultant
+ name = "nanotrasen consultant's hat"
+ desc = "A cap made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"."
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
+ icon_state = "nt_consultant_cap"
+ inhand_icon_state = "that"
+ flags_inv = 0
+ armor_type = /datum/armor/head_nanotrasen_consultant
+ strip_delay = 60
+ dog_fashion = null
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+
+/datum/armor/head_nanotrasen_consultant
+ melee = 15
+ bullet = 5
+ laser = 15
+ energy = 25
+ bomb = 10
+ fire = 30
+ acid = 5
+ wound = 4
+
+/obj/item/clothing/head/nanotrasen_consultant/beret
+ name = "nanotrasen consultant's beret"
+ desc = "A beret made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"."
+ greyscale_config = /datum/greyscale_config/beret_badge
+ greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
+ greyscale_colors = "#3F3C40#155326"
+ icon_state = "beret_badge"
+
+/obj/item/clothing/head/beret/centcom_formal/nt_consultant
+ armor_type = /datum/armor/beret_centcom_formal_nt_consultant
+
+/datum/armor/beret_centcom_formal_nt_consultant
+ melee = 15
+ bullet = 5
+ laser = 15
+ energy = 25
+ bomb = 10
+ fire = 30
+ acid = 5
+ wound = 4
+
+/obj/item/clothing/suit/armor/centcom_formal/nt_consultant
+ armor_type = /datum/armor/armor_centcom_formal_nt_consultant
+
+/datum/armor/armor_centcom_formal_nt_consultant
+ melee = 35
+ bullet = 30
+ laser = 30
+ energy = 40
+ bomb = 25
+ fire = 50
+ acid = 50
+ wound = 10
+
+/obj/item/clothing/suit/hooded/wintercoat/centcom/nt_consultant
+ armor_type = /datum/armor/centcom_nt_consultant
+
+/datum/armor/centcom_nt_consultant
+ melee = 35
+ bullet = 30
+ laser = 30
+ energy = 40
+ bomb = 25
+ fire = 50
+ acid = 50
+ wound = 10
+
+/obj/item/clothing/gloves/combat/naval/nanotrasen_consultant
+ name = "\improper CentCom gloves"
+ desc = "A high quality pair of thick gloves covered in gold stitching."
diff --git a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm b/modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm
similarity index 98%
rename from modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm
rename to modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm
index 00ec24f2de7..4498989dd64 100644
--- a/modular_skyrat/modules/nanotrasen_rep/code/nanotrasen_consultant.dm
+++ b/modular_nova/modules/nanotrasen_rep/code/nanotrasen_consultant.dm
@@ -91,7 +91,7 @@
/obj/effect/landmark/start/nanotrasen_consultant
name = "Nanotrasen Consultant"
icon_state = "Nanotrasen Consultant"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
/obj/item/clothing/accessory/medal/gold/nanotrasen_consultant
name = "medal of diplomacy"
@@ -137,7 +137,7 @@
name = "nanotrasen consultant's locker"
req_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL)
icon_state = "cc"
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
/obj/structure/closet/secure_closet/nanotrasen_consultant/PopulateContents()
..()
diff --git a/modular_skyrat/modules/new_cells/code/power_cell.dm b/modular_nova/modules/new_cells/code/power_cell.dm
similarity index 88%
rename from modular_skyrat/modules/new_cells/code/power_cell.dm
rename to modular_nova/modules/new_cells/code/power_cell.dm
index d9769c479c1..1583af7357b 100644
--- a/modular_skyrat/modules/new_cells/code/power_cell.dm
+++ b/modular_nova/modules/new_cells/code/power_cell.dm
@@ -1,7 +1,7 @@
/obj/item/stock_parts/cell/crank
name = "crank cell"
desc = "Go ahead, wind it up to charge it."
- icon = 'modular_skyrat/modules/new_cells/icons/power.dmi'
+ icon = 'modular_nova/modules/new_cells/icons/power.dmi'
icon_state = "crankcell"
/// how much each crank will give the cell charge
var/crank_amount = 100
@@ -31,12 +31,12 @@
if(!do_after(user, crank_speed, src))
return
give(crank_amount)
- playsound(src, 'modular_skyrat/modules/new_cells/sound/crank.ogg', 25, FALSE)
+ playsound(src, 'modular_nova/modules/new_cells/sound/crank.ogg', 25, FALSE)
/obj/item/stock_parts/cell/self_charge
name = "charging cell"
desc = "A special cell that will recharge itself over time."
- icon = 'modular_skyrat/modules/new_cells/icons/power.dmi'
+ icon = 'modular_nova/modules/new_cells/icons/power.dmi'
icon_state = "chargecell"
maxcharge = 2500
charge_light_type = "old"
diff --git a/modular_skyrat/modules/new_cells/icons/power.dmi b/modular_nova/modules/new_cells/icons/power.dmi
similarity index 100%
rename from modular_skyrat/modules/new_cells/icons/power.dmi
rename to modular_nova/modules/new_cells/icons/power.dmi
diff --git a/modular_skyrat/modules/new_cells/readme.md b/modular_nova/modules/new_cells/readme.md
similarity index 100%
rename from modular_skyrat/modules/new_cells/readme.md
rename to modular_nova/modules/new_cells/readme.md
diff --git a/modular_skyrat/modules/new_cells/sound/crank.ogg b/modular_nova/modules/new_cells/sound/crank.ogg
similarity index 100%
rename from modular_skyrat/modules/new_cells/sound/crank.ogg
rename to modular_nova/modules/new_cells/sound/crank.ogg
diff --git a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm
similarity index 96%
rename from modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm
rename to modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm
index 827c0b790bf..3e35700096d 100644
--- a/modular_skyrat/modules/novaya_ert/code/advanced_choice_beacon.dm
+++ b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm
@@ -91,11 +91,11 @@
/obj/item/storage/toolbox/emergency/turret/nri
name = "NRI stationary defense deployment system"
desc = "You feel a strange urge to hit this with a wrench."
- icon = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi'
icon_state = "inventory"
inhand_icon_state = "held"
- lefthand_file = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi'
- righthand_file = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi'
+ lefthand_file = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi'
+ righthand_file = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi'
w_class = WEIGHT_CLASS_BULKY
has_latches = FALSE
@@ -118,7 +118,7 @@
..()
/obj/machinery/porta_turret/syndicate/pod/toolbox/nri
- icon = 'modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/turret_deployable.dmi'
icon_state = "living"
base_icon_state = "living"
stun_projectile = /obj/projectile/bullet/c27_54cesarzowa/rubber
diff --git a/modular_skyrat/modules/novaya_ert/code/back.dm b/modular_nova/modules/novaya_ert/code/back.dm
similarity index 83%
rename from modular_skyrat/modules/novaya_ert/code/back.dm
rename to modular_nova/modules/novaya_ert/code/back.dm
index 5fdc7710ab4..35e8f5ac4da 100644
--- a/modular_skyrat/modules/novaya_ert/code/back.dm
+++ b/modular_nova/modules/novaya_ert/code/back.dm
@@ -1,8 +1,8 @@
/obj/item/storage/backpack/duffelbag/syndie/nri
name = "imperial assault pack"
desc = "A large green backpack for holding extra tactical supplies. It appears to be made from lighter yet sturdier materials."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
icon_state = "russian_green_backpack"
worn_icon_state = "russian_green_backpack"
inhand_icon_state = "securitypack"
@@ -28,8 +28,8 @@
/obj/item/storage/backpack/nri
name = "imperial assault pack"
desc = "A large green backpack for holding extra tactical supplies."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/back.dmi'
icon_state = "russian_green_backpack"
worn_icon_state = "russian_green_backpack"
inhand_icon_state = "securitypack"
diff --git a/modular_nova/modules/novaya_ert/code/belt.dm b/modular_nova/modules/novaya_ert/code/belt.dm
new file mode 100644
index 00000000000..9f75ad7a0db
--- /dev/null
+++ b/modular_nova/modules/novaya_ert/code/belt.dm
@@ -0,0 +1,70 @@
+/obj/item/storage/belt/military/nri
+ name = "green tactical belt"
+ desc = "A green tactical belt made for storing military grade hardware."
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/belt.dmi'
+ icon_state = "russian_green_belt"
+ inhand_icon_state = "security"
+ worn_icon_state = "russian_green_belt"
+
+/obj/item/storage/belt/military/nri/captain
+ name = "black tactical belt"
+ desc = "A black tactical belt made for storing military grade hardware."
+ icon_state = "russian_black_belt"
+ worn_icon_state = "russian_black_belt"
+
+/obj/item/storage/belt/military/nri/medic
+ name = "blue tactical belt"
+ desc = "A blue tactical belt made for storing military grade hardware."
+ icon_state = "russian_white_belt"
+ worn_icon_state = "russian_white_belt"
+
+/obj/item/storage/belt/military/nri/engineer
+ name = "brown tactical belt"
+ desc = "A brown tactical belt made for storing military grade hardware."
+ icon_state = "russian_brown_belt"
+ worn_icon_state = "russian_brown_belt"
+
+/obj/item/storage/belt/military/nri/plus_mre/PopulateContents()
+ new /obj/item/storage/box/nri_survival_pack/raider(src)
+
+/obj/item/storage/belt/military/nri/soldier/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/lanca = 4,
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/grenade/frag = 1,
+ ),src)
+
+/obj/item/storage/belt/military/nri/heavy/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/m9mm_aps = 4,
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/grenade/frag = 1,
+ ),src)
+
+/obj/item/storage/belt/military/nri/captain/full/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/lanca = 4,
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/grenade/frag = 1,
+ ),src)
+
+/obj/item/storage/belt/military/nri/medic/full/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/miecz = 4,
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/grenade/frag = 1,
+ ),src)
+
+/obj/item/storage/belt/military/nri/engineer/full/PopulateContents()
+ generate_items_inside(list(
+ /obj/item/ammo_box/magazine/miecz = 4,
+ /obj/item/knife/combat = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/grenade/frag = 1,
+ ),src)
diff --git a/modular_skyrat/modules/novaya_ert/code/ert.dm b/modular_nova/modules/novaya_ert/code/ert.dm
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/code/ert.dm
rename to modular_nova/modules/novaya_ert/code/ert.dm
diff --git a/modular_nova/modules/novaya_ert/code/head.dm b/modular_nova/modules/novaya_ert/code/head.dm
new file mode 100644
index 00000000000..4eeb355f55b
--- /dev/null
+++ b/modular_nova/modules/novaya_ert/code/head.dm
@@ -0,0 +1,50 @@
+/obj/item/clothing/head/beret/sec/nri
+ name = "commander's beret"
+ desc = "Za rodinu!!"
+ armor_type = /datum/armor/sec_nri
+
+/datum/armor/sec_nri
+ melee = 40
+ bullet = 35
+ laser = 30
+ energy = 40
+ bomb = 25
+ fire = 20
+ acid = 50
+ wound = 20
+
+/obj/item/clothing/head/helmet/space/hev_suit/nri
+ name = "\improper VOSKHOD powered combat armor helmet"
+ desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi'
+ icon_state = "nri_soldier"
+ armor_type = /datum/armor/hev_suit_nri
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
+ obj_flags = null
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION
+ resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF
+ clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT
+ clothing_traits = null
+ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
+ flash_protect = FLASH_PROTECTION_WELDER
+ visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
+ visor_flags = STOPSPRESSUREDAMAGE
+ slowdown = 0
+
+/obj/item/clothing/head/helmet/space/hev_suit/nri/captain
+ name = "\improper VOSKHOD-2 powered combat armor helmet"
+ desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
+ icon_state = "nri_captain"
+
+/obj/item/clothing/head/helmet/space/hev_suit/nri/medic
+ name = "\improper VOSKHOD-KH powered combat armor helmet"
+ desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
+ icon_state = "nri_medic"
+
+/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer
+ name = "\improper VOSKHOD-IN powered combat armor helmet"
+ desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
+ icon_state = "nri_engineer"
diff --git a/modular_skyrat/modules/novaya_ert/code/id.dm b/modular_nova/modules/novaya_ert/code/id.dm
similarity index 95%
rename from modular_skyrat/modules/novaya_ert/code/id.dm
rename to modular_nova/modules/novaya_ert/code/id.dm
index 9061ff2f1d5..68ce2036a4f 100644
--- a/modular_skyrat/modules/novaya_ert/code/id.dm
+++ b/modular_nova/modules/novaya_ert/code/id.dm
@@ -6,7 +6,7 @@
/datum/id_trim/nri
assignment = "NRI Soldier"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
+ trim_icon = 'modular_nova/master_files/icons/obj/card.dmi'
trim_state = "trim_nri"
department_color = COLOR_RED_LIGHT
subdepartment_color = COLOR_COMMAND_BLUE
diff --git a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm b/modular_nova/modules/novaya_ert/code/mod_suit.dm
similarity index 96%
rename from modular_skyrat/modules/novaya_ert/code/mod_suit.dm
rename to modular_nova/modules/novaya_ert/code/mod_suit.dm
index 3494429f13d..5bfd94429b8 100644
--- a/modular_skyrat/modules/novaya_ert/code/mod_suit.dm
+++ b/modular_nova/modules/novaya_ert/code/mod_suit.dm
@@ -26,8 +26,8 @@
)
skins = list(
"frontline" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/mod.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/wornmod.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/mod.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/wornmod.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = HEAD_LAYER,
UNSEALED_CLOTHING = SNUG_FIT,
@@ -115,8 +115,8 @@
)
skins = list(
"policing" = list(
- MOD_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/mod.dmi',
- MOD_WORN_ICON_OVERRIDE = 'modular_skyrat/modules/novaya_ert/icons/wornmod.dmi',
+ MOD_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/mod.dmi',
+ MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/novaya_ert/icons/wornmod.dmi',
HELMET_FLAGS = list(
UNSEALED_LAYER = HEAD_LAYER,
UNSEALED_CLOTHING = SNUG_FIT,
@@ -178,7 +178,7 @@
and even useful information such as their overall health and wellness. The vitals monitor also comes with a speaker, loud enough \
to alert anyone nearby that someone has, in fact, died. This specific unit has a clock and operational ID readout."
display_time = TRUE
- death_sound = 'modular_skyrat/modules/novaya_ert/sound/flatline.ogg'
+ death_sound = 'modular_nova/modules/novaya_ert/sound/flatline.ogg'
///Blatant copy of the adrenaline boost module.
/obj/item/mod/module/auto_doc
@@ -250,7 +250,7 @@
var/new_fireloss = mod.wearer.getFireLoss()
var/new_toxloss = mod.wearer.getToxLoss()
var/new_stamloss = mod.wearer.getStaminaLoss()
- playsound(mod.wearer, 'modular_skyrat/modules/hev_suit/sound/hev/hiss.ogg', 100)
+ playsound(mod.wearer, 'modular_nova/modules/hev_suit/sound/hev/hiss.ogg', 100)
if(new_bruteloss)
mod.wearer.reagents.add_reagent(/datum/reagent/medicine/mine_salve, 10)
diff --git a/modular_skyrat/modules/novaya_ert/code/outfit.dm b/modular_nova/modules/novaya_ert/code/outfit.dm
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/code/outfit.dm
rename to modular_nova/modules/novaya_ert/code/outfit.dm
diff --git a/modular_skyrat/modules/novaya_ert/code/police_outfit.dm b/modular_nova/modules/novaya_ert/code/police_outfit.dm
similarity index 75%
rename from modular_skyrat/modules/novaya_ert/code/police_outfit.dm
rename to modular_nova/modules/novaya_ert/code/police_outfit.dm
index c34e390df57..7266fd55857 100644
--- a/modular_skyrat/modules/novaya_ert/code/police_outfit.dm
+++ b/modular_nova/modules/novaya_ert/code/police_outfit.dm
@@ -14,6 +14,15 @@
desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design. The signature white rectangle of the NRI police covers the garment's back."
icon_state = "cloak_police"
+// Just some extra police equipment
+/obj/item/clothing/neck/cloak/colonial/nri_police/Initialize()
+ allowed += list(
+ /obj/item/restraints/handcuffs,
+ /obj/item/ammo_box,
+ /obj/item/ammo_casing,
+ )
+ return ..()
+
/obj/item/clothing/head/hats/colonial/nri_police
name = "imperial police cap"
desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well. \
@@ -24,9 +33,9 @@
/obj/item/clothing/mask/gas/nri_police
name = "imperial police mask"
desc = "A close-fitting tactical mask."
- icon = 'modular_skyrat/modules/novaya_ert/icons/mask.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornmask.dmi'
- worn_icon_digi = 'modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/mask.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/wornmask.dmi'
+ worn_icon_digi = 'modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi'
icon_state = "nri_police"
inhand_icon_state = "swat"
flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT
@@ -38,12 +47,12 @@
name = "imperial police helmet"
desc = "Thick-looking tactical helmet made out of shaped Plasteel. Colored dark blue, similar to one imperial police is commonly using."
icon_state = "police_helmet"
- icon = 'modular_skyrat/modules/novaya_ert/icons/armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/wornarmor.dmi'
/obj/item/clothing/suit/armor/vest/nri_police
name = "imperial police plate carrier"
desc = "A reasonably heavy, yet comfortable armor vest comprised of a bunch of dense plates. Colored dark blue and bears a reflective stripe on the front and back."
icon_state = "police_vest"
- icon = 'modular_skyrat/modules/novaya_ert/icons/armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/wornarmor.dmi'
diff --git a/modular_nova/modules/novaya_ert/code/shield.dm b/modular_nova/modules/novaya_ert/code/shield.dm
new file mode 100644
index 00000000000..d9ab321b40d
--- /dev/null
+++ b/modular_nova/modules/novaya_ert/code/shield.dm
@@ -0,0 +1,25 @@
+/obj/item/shield/riot/pointman/nri
+ name = "heavy corpsman shield"
+ desc = "A shield designed for people that have to sprint to the rescue. Cumbersome as hell. Repair with plasteel."
+ icon_state = "riot"
+ icon = 'modular_nova/modules/novaya_ert/icons/riot.dmi'
+ lefthand_file = 'modular_nova/modules/novaya_ert/icons/riot_left.dmi'
+ righthand_file = 'modular_nova/modules/novaya_ert/icons/riot_right.dmi'
+ transparent = FALSE
+
+/obj/item/shield/riot/pointman/nri/shatter(mob/living/carbon/human/owner)
+ playsound(owner, 'sound/effects/glassbr3.ogg', 100)
+ new /obj/item/corpsman_broken((get_turf(src)))
+
+
+/obj/item/corpsman_broken
+ name = "broken corpsman shield"
+ desc = "Might be able to be repaired with a welder."
+ icon_state = "riot_broken"
+ icon = 'modular_nova/modules/novaya_ert/icons/riot.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+
+/obj/item/corpsman_broken/welder_act(mob/living/user, obj/item/I)
+ ..()
+ new /obj/item/shield/riot/pointman/nri((get_turf(src)))
+ qdel(src)
diff --git a/modular_skyrat/modules/novaya_ert/code/suit.dm b/modular_nova/modules/novaya_ert/code/suit.dm
similarity index 87%
rename from modular_skyrat/modules/novaya_ert/code/suit.dm
rename to modular_nova/modules/novaya_ert/code/suit.dm
index 4466bd26da4..e6586ffb678 100644
--- a/modular_skyrat/modules/novaya_ert/code/suit.dm
+++ b/modular_nova/modules/novaya_ert/code/suit.dm
@@ -11,10 +11,10 @@
/obj/item/clothing/suit/space/hev_suit/nri
name = "\improper VOSKHOD powered combat armor"
desc = "A hybrid set of space-resistant armor built on a modified mass-produced Nomex-Aerogel flight suit, polyurea coated durathread-lined light plasteel plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/spacesuit.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi'
icon_state = "nri_soldier"
armor_type = /datum/armor/hev_suit_nri
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL
@@ -66,16 +66,16 @@
/datum/action/item_action/hev_toggle/nri
name = "Toggle VOSKHOD Suit"
- button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi'
background_icon_state = "bg_nri"
- button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi'
button_icon_state = "toggle"
/datum/action/item_action/hev_toggle_notifs/nri
name = "Toggle VOSKHOD Suit Notifications"
- button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi'
background_icon_state = "bg_nri"
- button_icon = 'modular_skyrat/modules/novaya_ert/icons/toggles.dmi'
+ button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi'
button_icon_state = "sound"
/obj/item/clothing/suit/space/hev_suit/nri/captain
diff --git a/modular_skyrat/modules/novaya_ert/code/surplus_armor.dm b/modular_nova/modules/novaya_ert/code/surplus_armor.dm
similarity index 92%
rename from modular_skyrat/modules/novaya_ert/code/surplus_armor.dm
rename to modular_nova/modules/novaya_ert/code/surplus_armor.dm
index f14716f382f..299eebe97ff 100644
--- a/modular_skyrat/modules/novaya_ert/code/surplus_armor.dm
+++ b/modular_nova/modules/novaya_ert/code/surplus_armor.dm
@@ -36,8 +36,8 @@
/obj/item/clothing/head/helmet/cin_surplus_helmet
name = "\improper GZ-03 combat helmet"
desc = "An outdated service helmet previously used by CIN military forces. The design dates back to the years leading up to CIN - SolFed border war, and was in service until the advent of VOSKHOD powered armor becoming standard issue."
- icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
icon_state = "helmet_plain"
greyscale_config = /datum/greyscale_config/cin_surplus_helmet/object
greyscale_config_worn = /datum/greyscale_config/cin_surplus_helmet
@@ -114,8 +114,8 @@
/obj/item/clothing/under/syndicate/rus_army/cin_surplus
name = "\improper CIN combat uniform"
desc = "A CIN designed combat uniform that can come in any number of camouflauge variations. Despite this particular design being developed in the years leading up to the CIN-SolFed border war, the uniform is still in use by many member states to this day."
- icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
icon_state = "undersuit_greyscale"
greyscale_config = /datum/greyscale_config/cin_surplus_undersuit/object
greyscale_config_worn = /datum/greyscale_config/cin_surplus_undersuit
@@ -150,8 +150,8 @@
/obj/item/clothing/suit/armor/vest/cin_surplus_vest
name = "\improper GZ-03 armor vest"
desc = "An outdated armor vest previously used by CIN military forces. The design dates back to the years leading up to CIN - SolFed border war, and was in service until the advent of VOSKHOD powered armor becoming standard issue."
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
icon_state = "vest_basic"
armor_type = /datum/armor/cin_surplus_armor
supports_variations_flags = CLOTHING_NO_VARIATION
@@ -191,8 +191,8 @@
/obj/item/storage/belt/military/cin_surplus
desc = "A tactical webbing often used by the CIN's military forces."
- icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
icon_state = "chestrig"
worn_icon_state = "chestrig"
greyscale_config = /datum/greyscale_config/cin_surplus_chestrig/object
@@ -228,8 +228,8 @@
/obj/item/storage/backpack/industrial/cin_surplus
name = "\improper CIN military backpack"
desc = "A rugged backpack often used by the CIN's military forces."
- icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- worn_icon = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
+ worn_icon = 'modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
icon_state = "backpack"
greyscale_config = /datum/greyscale_config/cin_surplus_backpack/object
greyscale_config_worn = /datum/greyscale_config/cin_surplus_backpack
diff --git a/modular_skyrat/modules/novaya_ert/code/survival_pack.dm b/modular_nova/modules/novaya_ert/code/survival_pack.dm
similarity index 96%
rename from modular_skyrat/modules/novaya_ert/code/survival_pack.dm
rename to modular_nova/modules/novaya_ert/code/survival_pack.dm
index 48bd7c2e5ff..b071be9add5 100644
--- a/modular_skyrat/modules/novaya_ert/code/survival_pack.dm
+++ b/modular_nova/modules/novaya_ert/code/survival_pack.dm
@@ -2,7 +2,7 @@
name = "NRI survival pack"
desc = "A box filled with useful emergency items, supplied by the NRI."
icon_state = "survival_pack"
- icon = 'modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi'
+ icon = 'modular_nova/modules/novaya_ert/icons/survival_pack.dmi'
illustration = null
/obj/item/storage/box/nri_survival_pack/PopulateContents()
diff --git a/modular_skyrat/modules/novaya_ert/code/toolbox.dm b/modular_nova/modules/novaya_ert/code/toolbox.dm
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/code/toolbox.dm
rename to modular_nova/modules/novaya_ert/code/toolbox.dm
diff --git a/modular_nova/modules/novaya_ert/code/uniform.dm b/modular_nova/modules/novaya_ert/code/uniform.dm
new file mode 100644
index 00000000000..47f6aa1ccda
--- /dev/null
+++ b/modular_nova/modules/novaya_ert/code/uniform.dm
@@ -0,0 +1,28 @@
+/obj/item/clothing/under/costume/nri //Copied from the russian outfit
+ name = "advanced imperial fatigues"
+ desc = "The latest in tactical and comfortable russian military outfits."
+ icon = 'modular_nova/master_files/icons/obj/clothing/uniforms.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/uniform.dmi'
+ worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/uniform_digi.dmi'
+ worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/uniform.dmi'
+ icon_state = "nri_soldier"
+ inhand_icon_state = "hostrench"
+ armor_type = /datum/armor/clothing_under/costume_nri
+ strip_delay = 50
+ sensor_mode = SENSOR_COORDS
+ random_sensor = FALSE
+ can_adjust = FALSE
+
+/datum/armor/clothing_under/costume_nri
+ melee = 10
+ fire = 30
+ acid = 30
+
+/obj/item/clothing/under/costume/nri/captain
+ icon_state = "nri_captain"
+
+/obj/item/clothing/under/costume/nri/medic
+ icon_state = "nri_medic"
+
+/obj/item/clothing/under/costume/nri/engineer
+ icon_state = "nri_engineer"
diff --git a/modular_skyrat/modules/novaya_ert/icons/armor.dmi b/modular_nova/modules/novaya_ert/icons/armor.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/armor.dmi
rename to modular_nova/modules/novaya_ert/icons/armor.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/mask.dmi b/modular_nova/modules/novaya_ert/icons/mask.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/mask.dmi
rename to modular_nova/modules/novaya_ert/icons/mask.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/mod.dmi b/modular_nova/modules/novaya_ert/icons/mod.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/mod.dmi
rename to modular_nova/modules/novaya_ert/icons/mod.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/riot.dmi b/modular_nova/modules/novaya_ert/icons/riot.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/riot.dmi
rename to modular_nova/modules/novaya_ert/icons/riot.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/riot_left.dmi b/modular_nova/modules/novaya_ert/icons/riot_left.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/riot_left.dmi
rename to modular_nova/modules/novaya_ert/icons/riot_left.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/riot_right.dmi b/modular_nova/modules/novaya_ert/icons/riot_right.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/riot_right.dmi
rename to modular_nova/modules/novaya_ert/icons/riot_right.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi
rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi
rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi b/modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi
rename to modular_nova/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi b/modular_nova/modules/novaya_ert/icons/survival_pack.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/survival_pack.dmi
rename to modular_nova/modules/novaya_ert/icons/survival_pack.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/toggles.dmi b/modular_nova/modules/novaya_ert/icons/toggles.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/toggles.dmi
rename to modular_nova/modules/novaya_ert/icons/toggles.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi b/modular_nova/modules/novaya_ert/icons/turret_deployable.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/turret_deployable.dmi
rename to modular_nova/modules/novaya_ert/icons/turret_deployable.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi b/modular_nova/modules/novaya_ert/icons/wornarmor.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/wornarmor.dmi
rename to modular_nova/modules/novaya_ert/icons/wornarmor.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmask.dmi b/modular_nova/modules/novaya_ert/icons/wornmask.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/wornmask.dmi
rename to modular_nova/modules/novaya_ert/icons/wornmask.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi b/modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/wornmask_digi.dmi
rename to modular_nova/modules/novaya_ert/icons/wornmask_digi.dmi
diff --git a/modular_skyrat/modules/novaya_ert/icons/wornmod.dmi b/modular_nova/modules/novaya_ert/icons/wornmod.dmi
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/icons/wornmod.dmi
rename to modular_nova/modules/novaya_ert/icons/wornmod.dmi
diff --git a/modular_skyrat/modules/novaya_ert/readme.md b/modular_nova/modules/novaya_ert/readme.md
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/readme.md
rename to modular_nova/modules/novaya_ert/readme.md
diff --git a/modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg b/modular_nova/modules/novaya_ert/sound/amr_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg
rename to modular_nova/modules/novaya_ert/sound/amr_fire.ogg
diff --git a/modular_skyrat/modules/novaya_ert/sound/flatline.ogg b/modular_nova/modules/novaya_ert/sound/flatline.ogg
similarity index 100%
rename from modular_skyrat/modules/novaya_ert/sound/flatline.ogg
rename to modular_nova/modules/novaya_ert/sound/flatline.ogg
diff --git a/modular_skyrat/modules/officestuff/code/officestuff.dm b/modular_nova/modules/officestuff/code/officestuff.dm
similarity index 87%
rename from modular_skyrat/modules/officestuff/code/officestuff.dm
rename to modular_nova/modules/officestuff/code/officestuff.dm
index 19aa6f927e8..cb6b1cc93ca 100644
--- a/modular_skyrat/modules/officestuff/code/officestuff.dm
+++ b/modular_nova/modules/officestuff/code/officestuff.dm
@@ -1,6 +1,6 @@
/obj/structure/grandfatherclock
name = "grandfather clock"
- icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi'
+ icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi'
icon_state = "grandfather_clock"
desc = "Tick, tick, tick, tick. It stands tall and daunting, loudly and ominously ticking, yet the hands are stuck close to midnight, the closer you get, the louder a faint whisper becomes a scream, a plea, something, but whatever it is, it says 'I am the Master, and you will obey me.'"
var/datum/looping_sound/grandfatherclock/soundloop
@@ -19,7 +19,7 @@
// . += span_notice("The screws on the clock hands are loose, freely ticking away.")
// door_status" = density ? "closed" : "open",
/datum/looping_sound/grandfatherclock
- mid_sounds = list('modular_skyrat/modules/officestuff/sound/clock_ticking.ogg' = 1)
+ mid_sounds = list('modular_nova/modules/officestuff/sound/clock_ticking.ogg' = 1)
mid_length = 12 SECONDS
volume = 10
@@ -49,7 +49,7 @@
/obj/structure/sign/painting/meat
name = "Figure With Meat"
desc = "A painting of a distorted figure, sitting between a cow cut in half."
- icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi'
+ icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi'
icon_state = "meat"
sign_change_name = "Painting - Meat"
is_editable = TRUE
@@ -57,7 +57,7 @@
/obj/structure/sign/painting/parting
name = "Parting Waves"
desc = "A painting of a parting sea, the red sun washes over the blue ocean."
- icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi'
+ icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi'
icon_state = "jmwt4"
is_editable = TRUE
sign_change_name = "Painting - Waves"
@@ -66,7 +66,7 @@
/obj/structure/sign/paint
name = "painting"
desc = "you shouldn't be seeing this."
- icon = 'modular_skyrat/modules/officestuff/icons/cowboyobh.dmi'
+ icon = 'modular_nova/modules/officestuff/icons/cowboyobh.dmi'
icon_state = "gravestone"
diff --git a/modular_skyrat/modules/officestuff/icons/cowboyobh.dmi b/modular_nova/modules/officestuff/icons/cowboyobh.dmi
similarity index 100%
rename from modular_skyrat/modules/officestuff/icons/cowboyobh.dmi
rename to modular_nova/modules/officestuff/icons/cowboyobh.dmi
diff --git a/modular_skyrat/modules/officestuff/sound/clock_ticking.ogg b/modular_nova/modules/officestuff/sound/clock_ticking.ogg
similarity index 100%
rename from modular_skyrat/modules/officestuff/sound/clock_ticking.ogg
rename to modular_nova/modules/officestuff/sound/clock_ticking.ogg
diff --git a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm b/modular_nova/modules/oneclickantag/code/oneclickantag.dm
similarity index 92%
rename from modular_skyrat/modules/oneclickantag/code/oneclickantag.dm
rename to modular_nova/modules/oneclickantag/code/oneclickantag.dm
index a70309ceb89..8c88de43768 100644
--- a/modular_skyrat/modules/oneclickantag/code/oneclickantag.dm
+++ b/modular_nova/modules/oneclickantag/code/oneclickantag.dm
@@ -31,6 +31,8 @@
src.add_antag_datum(/datum/antagonist/brother, team)
if(ROLE_HERETIC)
src.add_antag_datum(/datum/antagonist/heretic)
+ if(ROLE_DRIFTING_CONTRACTOR)
+ src.add_antag_datum(/datum/antagonist/contractor)
else
message_admins("[src] could not be turned into [antagtype] as it is not implemented; blame coders.")
return FALSE
@@ -196,7 +198,12 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ
return FALSE
/datum/admins/proc/make_wizard()
- var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
+ "Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?",
+ role = ROLE_WIZARD,
+ pic_source = /obj/item/clothing/head/wizard,
+ role_name_text = "wizard",
+ )
var/mob/living/carbon/human/target
do
var/mob/dead/observer/selected = pick_n_take(candidates)
@@ -211,7 +218,13 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ
return TRUE
/datum/admins/proc/make_nukies(maxCount = 5)
- var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, null)
+ var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates(
+ "Do you wish to be considered for a nuke team being sent in?",
+ role = ROLE_OPERATIVE,
+ poll_time = 30 SECONDS,
+ pic_source = /obj/structure/sign/poster/contraband/gorlex_recruitment,
+ role_name_text = "syndicate operative",
+ )
var/list/mob/dead/observer/chosen = list()
var/mob/dead/observer/theghost = null
if(candidates.len)
diff --git a/modular_skyrat/modules/opposing_force/code/admin_procs.dm b/modular_nova/modules/opposing_force/code/admin_procs.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/admin_procs.dm
rename to modular_nova/modules/opposing_force/code/admin_procs.dm
diff --git a/modular_skyrat/modules/opposing_force/code/antagonist.dm b/modular_nova/modules/opposing_force/code/antagonist.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/antagonist.dm
rename to modular_nova/modules/opposing_force/code/antagonist.dm
diff --git a/modular_skyrat/modules/opposing_force/code/dynamic.dm b/modular_nova/modules/opposing_force/code/dynamic.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/dynamic.dm
rename to modular_nova/modules/opposing_force/code/dynamic.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/ammo.dm b/modular_nova/modules/opposing_force/code/equipment/ammo.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/ammo.dm
rename to modular_nova/modules/opposing_force/code/equipment/ammo.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/biology.dm b/modular_nova/modules/opposing_force/code/equipment/biology.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/biology.dm
rename to modular_nova/modules/opposing_force/code/equipment/biology.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/bombs.dm b/modular_nova/modules/opposing_force/code/equipment/bombs.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/bombs.dm
rename to modular_nova/modules/opposing_force/code/equipment/bombs.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/clothing.dm b/modular_nova/modules/opposing_force/code/equipment/clothing.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/clothing.dm
rename to modular_nova/modules/opposing_force/code/equipment/clothing.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/equip_parent.dm b/modular_nova/modules/opposing_force/code/equipment/equip_parent.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/equip_parent.dm
rename to modular_nova/modules/opposing_force/code/equipment/equip_parent.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm b/modular_nova/modules/opposing_force/code/equipment/gadgets.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/gadgets.dm
rename to modular_nova/modules/opposing_force/code/equipment/gadgets.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/guns.dm b/modular_nova/modules/opposing_force/code/equipment/guns.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/guns.dm
rename to modular_nova/modules/opposing_force/code/equipment/guns.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/implants.dm b/modular_nova/modules/opposing_force/code/equipment/implants.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/implants.dm
rename to modular_nova/modules/opposing_force/code/equipment/implants.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/medical.dm b/modular_nova/modules/opposing_force/code/equipment/medical.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/medical.dm
rename to modular_nova/modules/opposing_force/code/equipment/medical.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/melee.dm b/modular_nova/modules/opposing_force/code/equipment/melee.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/melee.dm
rename to modular_nova/modules/opposing_force/code/equipment/melee.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/modsuit.dm b/modular_nova/modules/opposing_force/code/equipment/modsuit.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/modsuit.dm
rename to modular_nova/modules/opposing_force/code/equipment/modsuit.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/spells.dm b/modular_nova/modules/opposing_force/code/equipment/spells.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/spells.dm
rename to modular_nova/modules/opposing_force/code/equipment/spells.dm
diff --git a/modular_skyrat/modules/opposing_force/code/equipment/uplink.dm b/modular_nova/modules/opposing_force/code/equipment/uplink.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/equipment/uplink.dm
rename to modular_nova/modules/opposing_force/code/equipment/uplink.dm
diff --git a/modular_skyrat/modules/opposing_force/code/mind.dm b/modular_nova/modules/opposing_force/code/mind.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/mind.dm
rename to modular_nova/modules/opposing_force/code/mind.dm
diff --git a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm b/modular_nova/modules/opposing_force/code/opposing_force_datum.dm
similarity index 98%
rename from modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm
rename to modular_nova/modules/opposing_force/code/opposing_force_datum.dm
index 322a5a8f47d..3f688332cb5 100644
--- a/modular_skyrat/modules/opposing_force/code/opposing_force_datum.dm
+++ b/modular_nova/modules/opposing_force/code/opposing_force_datum.dm
@@ -14,7 +14,7 @@
if(opfor_equipment)
opposing_force_equipment = opfor_equipment
-/datum/opposing_force_selected_equipment/Destroy(force, ...)
+/datum/opposing_force_selected_equipment/Destroy(force)
opposing_force_equipment = null
return ..()
@@ -243,6 +243,8 @@
submit_to_subsystem(usr)
if("send_message")
send_message(usr, params["message"])
+ if(!handling_admin && check_rights_for(usr.client, R_ADMIN) && usr != mind_reference)
+ handle(usr) // if an admin sends a message and it's not being handled, assign them as handling it
// Objective control
if("add_objective")
add_objective(usr)
@@ -538,7 +540,7 @@
iterating_equipment.status = OPFOR_EQUIPMENT_STATUS_DENIED
for(var/datum/opposing_force_objective/opfor in objectives)
opfor.status = OPFOR_OBJECTIVE_STATUS_DENIED
- SEND_SOUND(mind_reference.current, sound('modular_skyrat/modules/opposing_force/sound/denied.ogg'))
+ SEND_SOUND(mind_reference.current, sound('modular_nova/modules/opposing_force/sound/denied.ogg'))
add_log(denier.ckey, "Denied application")
to_chat(mind_reference.current, examine_block(span_redtext("Your OPFOR application has been denied by [denier ? get_admin_ckey(denier) : "the OPFOR subsystem"]!")))
send_system_message(get_admin_ckey(denier) + " has denied the application with the following reason: [reason]")
@@ -551,7 +553,7 @@
status = OPFOR_STATUS_APPROVED
can_edit = FALSE
- SEND_SOUND(mind_reference.current, sound('modular_skyrat/modules/opposing_force/sound/approved.ogg'))
+ SEND_SOUND(mind_reference.current, sound('modular_nova/modules/opposing_force/sound/approved.ogg'))
add_log(approver.ckey, "Approved application")
var/objective_denied = FALSE
for(var/datum/opposing_force_objective/opfor_obj as anything in objectives)
diff --git a/modular_skyrat/modules/opposing_force/code/opposing_force_subsystem.dm b/modular_nova/modules/opposing_force/code/opposing_force_subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/opposing_force_subsystem.dm
rename to modular_nova/modules/opposing_force/code/opposing_force_subsystem.dm
diff --git a/modular_skyrat/modules/opposing_force/code/roundend.dm b/modular_nova/modules/opposing_force/code/roundend.dm
similarity index 100%
rename from modular_skyrat/modules/opposing_force/code/roundend.dm
rename to modular_nova/modules/opposing_force/code/roundend.dm
diff --git a/modular_skyrat/modules/opposing_force/icons/items.dmi b/modular_nova/modules/opposing_force/icons/items.dmi
similarity index 100%
rename from modular_skyrat/modules/opposing_force/icons/items.dmi
rename to modular_nova/modules/opposing_force/icons/items.dmi
diff --git a/modular_skyrat/modules/opposing_force/sound/application_recieved.ogg b/modular_nova/modules/opposing_force/sound/application_recieved.ogg
similarity index 100%
rename from modular_skyrat/modules/opposing_force/sound/application_recieved.ogg
rename to modular_nova/modules/opposing_force/sound/application_recieved.ogg
diff --git a/modular_skyrat/modules/opposing_force/sound/approved.ogg b/modular_nova/modules/opposing_force/sound/approved.ogg
similarity index 100%
rename from modular_skyrat/modules/opposing_force/sound/approved.ogg
rename to modular_nova/modules/opposing_force/sound/approved.ogg
diff --git a/modular_skyrat/modules/opposing_force/sound/denied.ogg b/modular_nova/modules/opposing_force/sound/denied.ogg
similarity index 100%
rename from modular_skyrat/modules/opposing_force/sound/denied.ogg
rename to modular_nova/modules/opposing_force/sound/denied.ogg
diff --git a/modular_skyrat/modules/opposing_force/sound/update_requested.ogg b/modular_nova/modules/opposing_force/sound/update_requested.ogg
similarity index 100%
rename from modular_skyrat/modules/opposing_force/sound/update_requested.ogg
rename to modular_nova/modules/opposing_force/sound/update_requested.ogg
diff --git a/modular_nova/modules/organs/code/heart.dm b/modular_nova/modules/organs/code/heart.dm
new file mode 100644
index 00000000000..857e1f05749
--- /dev/null
+++ b/modular_nova/modules/organs/code/heart.dm
@@ -0,0 +1,75 @@
+/obj/item/organ/internal/heart/snail
+ name = "twin gastropod hearts"
+ desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos."
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "heart-snail-on"
+ base_icon_state = "heart-snail"
+ maxHealth = 2 * STANDARD_ORGAN_THRESHOLD // There's two of them. Also, due to the special interaction below, it's best we make sure these aren't easily lost.
+ now_fixed = span_info("Your hearts begin to beat again.") //For the sake of verisimilitude.
+
+ COOLDOWN_DECLARE(shell_effect_cd)
+
+/obj/item/organ/internal/heart/snail/on_insert(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner))
+ return
+
+ if(!issnail(organ_owner)) //This is cleaner than checking for the shell, because there's not really going to be any non-horribly-bugged situation in which a snail will be lacking a shell.
+ return
+
+ var/mob/living/carbon/human/human_owner = organ_owner
+
+ RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage))
+ RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect))
+
+/obj/item/organ/internal/heart/snail/on_remove(mob/living/carbon/organ_owner, special)
+ . = ..()
+ if(!ishuman(organ_owner) || QDELETED(organ_owner))
+ return
+
+ var/mob/living/carbon/human/human_owner = organ_owner
+
+ UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE))
+
+/**
+ * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS]
+ *
+ * Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart.
+ */
+/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
+ SIGNAL_HANDLER
+
+ if(!is_blocking(source, damage_amount, damagetype, attack_direction))
+ return
+
+ damage_mods += 0.5
+
+/**
+ * Signal proc for [COMSIG_MOB_AFTER_APPLY_DAMAGE]
+ *
+ * Does a special effect if we blocked damage with our shell.
+ */
+/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
+ SIGNAL_HANDLER
+
+ if(!is_blocking(source, damage_dealt, damagetype, attack_direction))
+ return
+
+ if(COOLDOWN_FINISHED(src, shell_effect_cd))
+ source.visible_message(span_warning("[source]'s shell weathers the blow, absorbing most of the shock!"))
+ playsound(source, 'sound/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
+
+ COOLDOWN_START(src, shell_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit
+
+/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell
+/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
+ if(damage_amount < 5 || damagetype != BRUTE || !attack_direction)
+ return
+ if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS)
+ return FALSE
+ // No tactical spinning
+ if(HAS_TRAIT(blocker, TRAIT_SPINNING))
+ return FALSE
+ if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction))
+ return TRUE
+ return FALSE
diff --git a/modular_nova/modules/organs/code/liver.dm b/modular_nova/modules/organs/code/liver.dm
new file mode 100644
index 00000000000..628ce9add87
--- /dev/null
+++ b/modular_nova/modules/organs/code/liver.dm
@@ -0,0 +1,7 @@
+/obj/item/organ/internal/liver/snail
+ name = "gastropod liver"
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "liver-snail"
+ desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most."
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
+ toxTolerance = 5 //can shrug off up to 5u of toxins
diff --git a/modular_nova/modules/organs/code/lungs.dm b/modular_nova/modules/organs/code/lungs.dm
new file mode 100644
index 00000000000..5b1ee428aa4
--- /dev/null
+++ b/modular_nova/modules/organs/code/lungs.dm
@@ -0,0 +1,98 @@
+/obj/item/organ/internal/lungs/cold
+ name = "cold-adapted lungs"
+ icon = 'modular_nova/modules/organs/icons/lungs.dmi'
+ desc = "A set of lungs adapted to low temperatures, though they are more susceptible to high temperatures"
+ icon_state = "lungs_cold"
+ cold_message = "a slightly painful, though bearable, cold sensation"
+ cold_level_1_threshold = 208
+ cold_level_2_threshold = 200
+ cold_level_3_threshold = 170
+ cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
+ cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_1
+ cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_2
+ cold_damage_type = BURN
+
+ hot_message = "the searing heat with every breath you take"
+ heat_level_1_threshold = 318
+ heat_level_2_threshold = 348
+ heat_level_3_threshold = 1000
+ heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
+ heat_damage_type = BURN
+
+
+/obj/item/organ/internal/lungs/hot
+ name = "heat-adapted lungs"
+ icon = 'modular_nova/modules/organs/icons/lungs.dmi'
+ desc = "A set of lungs adapted to high temperatures, though they are more susceptible to low temperatures"
+ icon_state = "lungs_heat"
+ cold_message = "the freezing cold with every breath you take"
+ cold_level_1_threshold = 248
+ cold_level_2_threshold = 220
+ cold_level_3_threshold = 170
+ cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
+ cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
+ cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
+ cold_damage_type = BURN
+
+ hot_message = "a slightly painful, though bearable, warmth"
+ heat_level_1_threshold = 373
+ heat_level_2_threshold = 473
+ heat_level_3_threshold = 523
+ heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1
+ heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_1
+ heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_damage_type = BURN
+
+/obj/item/organ/internal/lungs/toxin
+ name = "toxin-adapted lungs"
+ icon = 'modular_nova/modules/organs/icons/lungs.dmi'
+ desc = "A set of lungs adapted to toxic environments, though more susceptible to extreme temperatures."
+ icon_state = "lungs_toxin"
+ safe_plasma_max = 27
+ safe_co2_max = 27
+
+ cold_message = "the freezing cold with every breath you take"
+ cold_level_1_threshold = 248
+ cold_level_2_threshold = 220
+ cold_level_3_threshold = 170
+ cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
+ cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
+ cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
+ cold_damage_type = BRUTE
+
+
+ hot_message = "the searing heat with every breath you take"
+ heat_level_1_threshold = 318
+ heat_level_2_threshold = 348
+ heat_level_3_threshold = 1000
+ heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
+ heat_damage_type = BURN
+
+/obj/item/organ/internal/lungs/oxy
+ name = "low-oxygen-adapted lungs"
+ icon = 'modular_nova/modules/organs/icons/lungs.dmi'
+ desc = "A set of lungs adapted to lower-pressure environments, though more susceptible to extreme temperatures."
+ icon_state = "lungs_toxin"
+ safe_oxygen_min = 5
+
+ hot_message = "the searing heat with every breath you take"
+ heat_level_1_threshold = 318
+ heat_level_2_threshold = 348
+ heat_level_3_threshold = 1000
+ heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
+ heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
+ heat_damage_type = BURN
+
+ cold_message = "the freezing cold with every breath you take"
+ cold_level_1_threshold = 248
+ cold_level_2_threshold = 220
+ cold_level_3_threshold = 170
+ cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
+ cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
+ cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
+ cold_damage_type = BURN
diff --git a/modular_skyrat/modules/organs/code/organs.dm b/modular_nova/modules/organs/code/organs.dm
similarity index 100%
rename from modular_skyrat/modules/organs/code/organs.dm
rename to modular_nova/modules/organs/code/organs.dm
diff --git a/modular_nova/modules/organs/code/stomach.dm b/modular_nova/modules/organs/code/stomach.dm
new file mode 100644
index 00000000000..c60f62f1313
--- /dev/null
+++ b/modular_nova/modules/organs/code/stomach.dm
@@ -0,0 +1,16 @@
+/obj/item/organ/internal/stomach/oversized
+ name = "huge guts"
+ desc = "Typically found in huge creatures, this monstrous engine has developed to be highly efficient, made to get an enormous amount of nutrients to an enormous eater."
+ icon = 'modular_nova/modules/organs/icons/stomach.dmi'
+ icon_state = "stomach_big"
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
+ metabolism_efficiency = 0.07
+
+/obj/item/organ/internal/stomach/synth/oversized
+ name = "huge synthetic bio-reactor"
+ desc = "Typically found in huge synthetics, this monstrous engine has been developed to be highly efficient, made to provide an enormous amount of power to an enormous machine."
+ icon = 'modular_nova/modules/organs/icons/stomach.dmi'
+ icon_state = "stomach_big_synth" //ugly placeholder sorry im not an artist hehe
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
+ metabolism_efficiency = 0.07
+
diff --git a/modular_nova/modules/organs/code/tongue.dm b/modular_nova/modules/organs/code/tongue.dm
new file mode 100644
index 00000000000..957ee29fcda
--- /dev/null
+++ b/modular_nova/modules/organs/code/tongue.dm
@@ -0,0 +1,112 @@
+/obj/item/organ/internal/tongue/copy_traits_from(obj/item/organ/internal/tongue/old_tongue, copy_actions = FALSE)
+ . = ..()
+ // make sure we get food preferences too, because those are now tied to tongues for some reason
+ liked_foodtypes = old_tongue.liked_foodtypes
+ disliked_foodtypes = old_tongue.disliked_foodtypes
+ toxic_foodtypes = old_tongue.toxic_foodtypes
+
+/obj/item/organ/internal/tongue/dog
+ name = "long tongue"
+ desc = "A long and wet tongue. It seems to jump when it's called good, oddly enough."
+ say_mod = "woofs"
+ icon_state = "tongue"
+ modifies_speech = TRUE
+
+/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE)
+ . = ..()
+ signer.verb_ask = "arfs"
+ signer.verb_exclaim = "wans"
+ signer.verb_whisper = "whimpers"
+ signer.verb_yell = "barks"
+
+/obj/item/organ/internal/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE)
+ ..()
+ speaker.verb_ask = initial(verb_ask)
+ speaker.verb_exclaim = initial(verb_exclaim)
+ speaker.verb_whisper = initial(verb_whisper)
+ speaker.verb_sing = initial(verb_sing)
+ speaker.verb_yell = initial(verb_yell)
+
+/obj/item/organ/internal/tongue/avian
+ name = "avian tongue"
+ desc = "A short and stubby tongue that craves seeds."
+ say_mod = "chirps"
+ icon_state = "tongue"
+ modifies_speech = TRUE
+
+/obj/item/organ/internal/tongue/avian/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE)
+ . = ..()
+ signer.verb_ask = "peeps"
+ signer.verb_exclaim = "squawks"
+ signer.verb_whisper = "murmurs"
+ signer.verb_yell = "shrieks"
+
+/obj/item/organ/internal/tongue/avian/Remove(mob/living/carbon/speaker, special = FALSE)
+ . = ..()
+ speaker.verb_ask = initial(verb_ask)
+ speaker.verb_exclaim = initial(verb_exclaim)
+ speaker.verb_whisper = initial(verb_whisper)
+ speaker.verb_sing = initial(verb_sing)
+ speaker.verb_yell = initial(verb_yell)
+
+/// This "human" tongue is only used in Character Preferences / Augmentation menu.
+/// The base tongue class lacked a say_mod. With say_mod included it makes a non-Human user sound like a Human.
+/obj/item/organ/internal/tongue/human
+ say_mod = "says"
+
+/obj/item/organ/internal/tongue/cybernetic
+ name = "cybernetic tongue"
+ icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi'
+ icon_state = "cybertongue"
+ desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+ say_mod = "says"
+ // Not as good as organic tongues, not as bad as the robotic voicebox.
+ taste_sensitivity = 20
+
+/obj/item/organ/internal/tongue/vox
+ name = "vox tongue"
+ desc = "A fleshy muscle mostly used for skreeing."
+ say_mod = "skrees"
+ liked_foodtypes = MEAT | FRIED
+
+/obj/item/organ/internal/tongue/dwarven
+ name = "dwarven tongue"
+ desc = "A fleshy muscle mostly used for bellowing."
+ say_mod = "bellows"
+ liked_foodtypes = ALCOHOL | MEAT | DAIRY //Dwarves like alcohol, meat, and dairy products.
+ disliked_foodtypes = JUNKFOOD | FRIED | CLOTH //Dwarves hate foods that have no nutrition other than alcohol.
+
+/obj/item/organ/internal/tongue/ghoul
+ name = "ghoulish tongue"
+ desc = "A fleshy muscle mostly used for rasping."
+ say_mod = "rasps"
+ liked_foodtypes = RAW | MEAT
+ disliked_foodtypes = VEGETABLES | FRUIT | CLOTH
+ toxic_foodtypes = DAIRY | PINEAPPLE
+
+/obj/item/organ/internal/tongue/insect
+ name = "insect tongue"
+ desc = "A fleshy muscle mostly used for chittering."
+ say_mod = "chitters"
+ liked_foodtypes = GROSS | RAW | TOXIC | GORE
+ disliked_foodtypes = CLOTH | GRAIN | FRIED
+ toxic_foodtypes = DAIRY
+
+/obj/item/organ/internal/tongue/xeno_hybrid
+ name = "alien tongue"
+ desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"."
+ icon_state = "tonguexeno"
+ say_mod = "hisses"
+ taste_sensitivity = 10
+ liked_foodtypes = MEAT
+
+/obj/item/organ/internal/tongue/xeno_hybrid/Initialize(mapload)
+ . = ..()
+ var/obj/item/organ/internal/tongue/alien/alien_tongue_type = /obj/item/organ/internal/tongue/alien
+ voice_filter = initial(alien_tongue_type.voice_filter)
+
+/obj/item/organ/internal/tongue/skrell
+ name = "skrell tongue"
+ desc = "A fleshy muscle mostly used for warbling."
+ say_mod = "warbles"
diff --git a/modular_skyrat/modules/organs/icons/akula_eyes.dmi b/modular_nova/modules/organs/icons/akula_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/akula_eyes.dmi
rename to modular_nova/modules/organs/icons/akula_eyes.dmi
diff --git a/modular_skyrat/modules/organs/icons/cyber_tongue.dmi b/modular_nova/modules/organs/icons/cyber_tongue.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/cyber_tongue.dmi
rename to modular_nova/modules/organs/icons/cyber_tongue.dmi
diff --git a/modular_skyrat/modules/organs/icons/hemophage_organs.dmi b/modular_nova/modules/organs/icons/hemophage_organs.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/hemophage_organs.dmi
rename to modular_nova/modules/organs/icons/hemophage_organs.dmi
diff --git a/modular_skyrat/modules/organs/icons/insect_eyes.dmi b/modular_nova/modules/organs/icons/insect_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/insect_eyes.dmi
rename to modular_nova/modules/organs/icons/insect_eyes.dmi
diff --git a/modular_skyrat/modules/organs/icons/lungs.dmi b/modular_nova/modules/organs/icons/lungs.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/lungs.dmi
rename to modular_nova/modules/organs/icons/lungs.dmi
diff --git a/modular_skyrat/modules/organs/icons/skrell_eyes.dmi b/modular_nova/modules/organs/icons/skrell_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/skrell_eyes.dmi
rename to modular_nova/modules/organs/icons/skrell_eyes.dmi
diff --git a/modular_skyrat/modules/organs/icons/skrell_organ.dmi b/modular_nova/modules/organs/icons/skrell_organ.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/skrell_organ.dmi
rename to modular_nova/modules/organs/icons/skrell_organ.dmi
diff --git a/modular_skyrat/modules/organs/icons/snail_eyes.dmi b/modular_nova/modules/organs/icons/snail_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/snail_eyes.dmi
rename to modular_nova/modules/organs/icons/snail_eyes.dmi
diff --git a/modular_skyrat/modules/organs/icons/stomach.dmi b/modular_nova/modules/organs/icons/stomach.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/stomach.dmi
rename to modular_nova/modules/organs/icons/stomach.dmi
diff --git a/modular_skyrat/modules/organs/icons/teshari_eyes.dmi b/modular_nova/modules/organs/icons/teshari_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/teshari_eyes.dmi
rename to modular_nova/modules/organs/icons/teshari_eyes.dmi
diff --git a/modular_skyrat/modules/organs/icons/vox_eyes.dmi b/modular_nova/modules/organs/icons/vox_eyes.dmi
similarity index 100%
rename from modular_skyrat/modules/organs/icons/vox_eyes.dmi
rename to modular_nova/modules/organs/icons/vox_eyes.dmi
diff --git a/modular_skyrat/modules/oversized/code/door.dm b/modular_nova/modules/oversized/code/door.dm
similarity index 100%
rename from modular_skyrat/modules/oversized/code/door.dm
rename to modular_nova/modules/oversized/code/door.dm
diff --git a/modular_skyrat/modules/oversized/code/oversized_quirk.dm b/modular_nova/modules/oversized/code/oversized_quirk.dm
similarity index 100%
rename from modular_skyrat/modules/oversized/code/oversized_quirk.dm
rename to modular_nova/modules/oversized/code/oversized_quirk.dm
diff --git a/modular_skyrat/modules/oversized/readme.md b/modular_nova/modules/oversized/readme.md
similarity index 100%
rename from modular_skyrat/modules/oversized/readme.md
rename to modular_nova/modules/oversized/readme.md
diff --git a/modular_skyrat/modules/oversized/sound/chair_break.ogg b/modular_nova/modules/oversized/sound/chair_break.ogg
similarity index 100%
rename from modular_skyrat/modules/oversized/sound/chair_break.ogg
rename to modular_nova/modules/oversized/sound/chair_break.ogg
diff --git a/modular_skyrat/modules/panicbunker/code/panicbunker.dm b/modular_nova/modules/panicbunker/code/panicbunker.dm
similarity index 100%
rename from modular_skyrat/modules/panicbunker/code/panicbunker.dm
rename to modular_nova/modules/panicbunker/code/panicbunker.dm
diff --git a/modular_skyrat/modules/panicbunker/code/readme.md b/modular_nova/modules/panicbunker/code/readme.md
similarity index 100%
rename from modular_skyrat/modules/panicbunker/code/readme.md
rename to modular_nova/modules/panicbunker/code/readme.md
diff --git a/modular_skyrat/modules/paycheck_rations/code/quirk.dm b/modular_nova/modules/paycheck_rations/code/quirk.dm
similarity index 100%
rename from modular_skyrat/modules/paycheck_rations/code/quirk.dm
rename to modular_nova/modules/paycheck_rations/code/quirk.dm
diff --git a/modular_nova/modules/paycheck_rations/code/rationpacks.dm b/modular_nova/modules/paycheck_rations/code/rationpacks.dm
new file mode 100644
index 00000000000..dfab77c4ae1
--- /dev/null
+++ b/modular_nova/modules/paycheck_rations/code/rationpacks.dm
@@ -0,0 +1,110 @@
+/obj/item/storage/box/spaceman_ration
+ name = "unlabeled ration container"
+ desc = "You get the feeling you sholdn't have been sent this one?"
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ icon_state = "plants"
+ illustration = null
+ /// How many storage slots this has, yes I'm being lazy
+ var/box_storage_slots = 1
+
+/obj/item/storage/box/spaceman_ration/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = box_storage_slots
+
+/obj/item/storage/box/spaceman_ration/PopulateContents()
+ return
+
+// Contains your daily need of plants, yum!
+
+/obj/item/storage/box/spaceman_ration/plants
+ name = "produce ration container"
+ desc = "Contains your allotted ration of produce, which in this case should be peas and a potato."
+ box_storage_slots = 2
+
+/obj/item/storage/box/spaceman_ration/plants/PopulateContents()
+ new /obj/item/food/grown/peas(src)
+ new /obj/item/food/grown/potato(src)
+
+// Alternate diet, themed around martian food a bit more
+
+/obj/item/storage/box/spaceman_ration/plants/alternate
+ desc = "Contains your allotted ration of produce, which in this case should be cabbage and an onion."
+ icon_state = "plants_alt"
+
+/obj/item/storage/box/spaceman_ration/plants/alternate/PopulateContents()
+ new /obj/item/food/grown/cabbage(src)
+ new /obj/item/food/grown/onion(src)
+
+// For the moths amogus
+
+/obj/item/storage/box/spaceman_ration/plants/mothic
+ desc = "Contains your allotted ration of produce, which in this case should be chili and a potato."
+ icon_state = "plants_moth"
+
+/obj/item/storage/box/spaceman_ration/plants/mothic/PopulateContents()
+ new /obj/item/food/grown/chili(src)
+ new /obj/item/food/grown/potato(src)
+
+// For the lizards amongus
+
+/obj/item/storage/box/spaceman_ration/plants/lizard
+ desc = "Contains your allotted ration of produce, which in this case should be two korta nuts and two potatoes."
+ icon_state = "plants_lizard"
+ box_storage_slots = 4
+
+/obj/item/storage/box/spaceman_ration/plants/lizard/PopulateContents()
+ new /obj/item/food/grown/korta_nut(src)
+ new /obj/item/food/grown/korta_nut(src)
+ new /obj/item/food/grown/potato(src)
+ new /obj/item/food/grown/potato(src)
+
+// Contains your allotted meats, tasty!
+
+/obj/item/storage/box/spaceman_ration/meats
+ name = "meat ration container"
+ desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random side option."
+ icon_state = "meats"
+
+/obj/item/storage/box/spaceman_ration/meats/PopulateContents()
+ new /obj/item/food/meat/slab/pig(src)
+ var/secondary_meat = pick(/obj/item/food/raw_sausage, /obj/item/food/meat/slab/chicken, /obj/item/food/meat/slab/meatproduct)
+ new secondary_meat(src)
+
+// Seafood variant
+
+/obj/item/storage/box/spaceman_ration/meats/fish
+ desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option."
+ icon_state = "meats_fish"
+
+/obj/item/storage/box/spaceman_ration/meats/fish/PopulateContents()
+ new /obj/item/food/meat/slab/pig(src)
+ var/secondary_meat = pick(/obj/item/food/meat/slab/rawcrab, /obj/item/food/fishmeat)
+ new secondary_meat(src)
+
+// For the lizards amongus
+
+/obj/item/storage/box/spaceman_ration/meats/lizard
+ desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option."
+ icon_state = "meats_lizard"
+
+/obj/item/storage/box/spaceman_ration/meats/lizard/PopulateContents()
+ new /obj/item/food/fishmeat/moonfish(src)
+ var/secondary_meat = pick(/obj/item/food/raw_tiziran_sausage, /obj/item/food/liver_pate)
+ new secondary_meat(src)
+
+// Paper sack that spawns a random two slices of bread
+
+/obj/item/storage/box/papersack/ration_bread_slice
+ name = "bread and cheese ration bag"
+ desc = "A dusty old paper sack that should ideally contain your ration of bread and cheese."
+
+/obj/item/storage/box/papersack/ration_bread_slice/Initialize(mapload)
+ . = ..()
+ atom_storage.max_slots = 3
+
+/obj/item/storage/box/papersack/ration_bread_slice/PopulateContents()
+ var/bread_slice = pick(/obj/item/food/breadslice/plain, /obj/item/food/breadslice/reispan, /obj/item/food/breadslice/root)
+ new bread_slice(src)
+ new bread_slice(src)
+ var/cheese_slice = pick(/obj/item/food/cheese/wedge, /obj/item/food/cheese/firm_cheese_slice, /obj/item/food/cheese/cheese_curds, /obj/item/food/cheese/mozzarella)
+ new cheese_slice(src)
diff --git a/modular_nova/modules/paycheck_rations/code/reagents.dm b/modular_nova/modules/paycheck_rations/code/reagents.dm
new file mode 100644
index 00000000000..a3cf69a114e
--- /dev/null
+++ b/modular_nova/modules/paycheck_rations/code/reagents.dm
@@ -0,0 +1,73 @@
+/obj/item/reagent_containers/condiment/flour/small_ration
+ name = "small flour sack"
+ desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day."
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ list_reagents = list(/datum/reagent/consumable/flour = 15)
+
+/obj/item/reagent_containers/condiment/rice/small_ration
+ name = "small rice sack"
+ desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish."
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ list_reagents = list(/datum/reagent/consumable/rice = 10)
+
+/obj/item/reagent_containers/condiment/sugar/small_ration
+ name = "small sugar sack"
+ desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter."
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ list_reagents = list(/datum/reagent/consumable/sugar = 10)
+
+/obj/item/reagent_containers/condiment/small_ration_korta_flour
+ name = "small korta flour sack"
+ desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day."
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ icon_state = "flour_korta"
+ inhand_icon_state = "carton"
+ lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi'
+ list_reagents = list(/datum/reagent/consumable/korta_flour = 10)
+ fill_icon_thresholds = null
+
+/obj/item/reagent_containers/condiment/soymilk/small_ration
+ name = "small soy milk"
+ desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with."
+ icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi'
+ list_reagents = list(/datum/reagent/consumable/soymilk = 15)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny
+ name = "tiny glass bottle"
+ volume = 10
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/Initialize(mapload, vol)
+ . = ..()
+ transform = transform.Scale(0.75, 0.75)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice
+ name = "tiny lime juice bottle"
+ desc = "A maritime ration-sized bottle of lime juice, containing enough to keep the scurvy away while on long voyages."
+ list_reagents = list(/datum/reagent/consumable/limejuice = 10)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar
+ name = "tiny vinegar bottle"
+ desc = "A maritime ration-sized bottle of vinegar, containing enough to... Well, we're not entirely sure, but law mandates you're given this, so..."
+ list_reagents = list(/datum/reagent/consumable/vinegar = 10)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee
+ name = "tiny coffee powder bottle"
+ desc = "A maritime ration-sized bottle of coffee powder, containing enough to make a morning's brew."
+ list_reagents = list(/datum/reagent/toxin/coffeepowder = 10)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea
+ name = "tiny tea powder bottle"
+ desc = "A maritime ration-sized bottle of tea powder, containing enough to make a morning's tea."
+ list_reagents = list(/datum/reagent/toxin/teapowder = 10)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey
+ name = "tiny honey bottle"
+ desc = "A maritime ration-sized bottle of honey, a minuscule amount for a minuscule sweetening to your day."
+ list_reagents = list(/datum/reagent/consumable/honey = 5)
+
+/obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel
+ name = "tiny caramel bottle"
+ desc = "A maritime ration-sized bottle of caramel, in the past these used to be something called 'treacle', which was \
+ the tar left over from refining sugar. Nowadays, governments are rich enough to just send caramel instead."
+ list_reagents = list(/datum/reagent/consumable/caramel = 10)
diff --git a/modular_skyrat/modules/paycheck_rations/code/ticket_book.dm b/modular_nova/modules/paycheck_rations/code/ticket_book.dm
similarity index 87%
rename from modular_skyrat/modules/paycheck_rations/code/ticket_book.dm
rename to modular_nova/modules/paycheck_rations/code/ticket_book.dm
index 09c5cb1fbb3..99066581bce 100644
--- a/modular_skyrat/modules/paycheck_rations/code/ticket_book.dm
+++ b/modular_nova/modules/paycheck_rations/code/ticket_book.dm
@@ -1,7 +1,7 @@
/obj/item/storage/ration_ticket_book
name = "ration ticket book"
desc = "A small booklet able to hold all your ration tickets. More will be available here as your paychecks come in."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/tickets.dmi'
+ icon = 'modular_nova/modules/paycheck_rations/icons/tickets.dmi'
icon_state = "ticket_book"
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_skyrat/modules/paycheck_rations/code/tickets.dm b/modular_nova/modules/paycheck_rations/code/tickets.dm
similarity index 84%
rename from modular_skyrat/modules/paycheck_rations/code/tickets.dm
rename to modular_nova/modules/paycheck_rations/code/tickets.dm
index 26940e1bcc5..ba3987a8614 100644
--- a/modular_skyrat/modules/paycheck_rations/code/tickets.dm
+++ b/modular_nova/modules/paycheck_rations/code/tickets.dm
@@ -1,7 +1,7 @@
/obj/item/paper/paperslip/ration_ticket
name = "ration ticket - standard"
desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/tickets.dmi'
+ icon = 'modular_nova/modules/paycheck_rations/icons/tickets.dmi'
icon_state = "ticket_food"
default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits."
color = COLOR_OFF_WHITE
@@ -24,9 +24,9 @@
// List of meat options we get
var/list/radial_meat_options = list(
- "Standard Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"),
- "Seafood Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"),
- "Tizirian Meats" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"),
+ "Standard Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"),
+ "Seafood Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"),
+ "Tizirian Meats" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"),
)
var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE)
@@ -47,10 +47,10 @@
// List of produce options we get
var/list/radial_produce_options = list(
- "Standard Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"),
- "Alternative Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"),
- "Mothic Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"),
- "Tizirian Produce" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"),
+ "Standard Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"),
+ "Alternative Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"),
+ "Mothic Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"),
+ "Tizirian Produce" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"),
)
var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE)
@@ -77,8 +77,8 @@
// List of flour options we get
var/list/radial_flour_options = list(
- "Standard Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"),
- "Korta Flour" = image(icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"),
+ "Standard Flour" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"),
+ "Korta Flour" = image(icon = 'modular_nova/modules/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"),
)
var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE)
@@ -166,9 +166,9 @@
// List of meat options we get
var/list/radial_alcohol_options = list(
- "Navy Rum" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "navy_rum"),
- "Ginger Beer" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "gingie_beer"),
- "Kortara" = image(icon = 'modular_skyrat/master_files/icons/obj/drinks.dmi', icon_state = "kortara"),
+ "Navy Rum" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "navy_rum"),
+ "Ginger Beer" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "gingie_beer"),
+ "Kortara" = image(icon = 'modular_nova/master_files/icons/obj/drinks.dmi', icon_state = "kortara"),
)
var/alcohol_choice = show_radial_menu(user, object_we_attack, radial_alcohol_options, require_near = TRUE)
diff --git a/modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi b/modular_nova/modules/paycheck_rations/icons/food_containers.dmi
similarity index 100%
rename from modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi
rename to modular_nova/modules/paycheck_rations/icons/food_containers.dmi
diff --git a/modular_skyrat/modules/paycheck_rations/icons/tickets.dmi b/modular_nova/modules/paycheck_rations/icons/tickets.dmi
similarity index 100%
rename from modular_skyrat/modules/paycheck_rations/icons/tickets.dmi
rename to modular_nova/modules/paycheck_rations/icons/tickets.dmi
diff --git a/modular_skyrat/modules/pet_owner/pet_owner.dm b/modular_nova/modules/pet_owner/pet_owner.dm
similarity index 100%
rename from modular_skyrat/modules/pet_owner/pet_owner.dm
rename to modular_nova/modules/pet_owner/pet_owner.dm
diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_component.dm
similarity index 100%
rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_component.dm
rename to modular_nova/modules/pixel_shift/code/pixel_shift_component.dm
diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_keybind.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_keybind.dm
similarity index 100%
rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_keybind.dm
rename to modular_nova/modules/pixel_shift/code/pixel_shift_keybind.dm
diff --git a/modular_skyrat/modules/pixel_shift/code/pixel_shift_mob.dm b/modular_nova/modules/pixel_shift/code/pixel_shift_mob.dm
similarity index 100%
rename from modular_skyrat/modules/pixel_shift/code/pixel_shift_mob.dm
rename to modular_nova/modules/pixel_shift/code/pixel_shift_mob.dm
diff --git a/modular_nova/modules/pixel_shift/readme.md b/modular_nova/modules/pixel_shift/readme.md
new file mode 100644
index 00000000000..26c48171e62
--- /dev/null
+++ b/modular_nova/modules/pixel_shift/readme.md
@@ -0,0 +1,34 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/870
+
+## Title: Pixel shifting for RP positioning
+
+MODULE ID: PIXEL_SHIFT
+
+### Description:
+
+Adds the ability for living mobs to shift their sprite to fit an RP situation better (standing against a wall for example). Not appended to proc due to it being a busy proc
+
+### TG Proc/File Changes:
+
+- N/A
+
+### Modular Overrides:
+
+- `modular_nova/master_files/code/datums/keybinding/mob.dm`: `var/list/hotkey_keys`
+- `modular_nova/master_files/code/modules/mob/living/living.dm`: `proc/set_pull_offsets`, `proc/reset_pull_offsets`
+- `modular_nova/master_files/code/modules/mob/living/living_movement.dm`: `proc/CanAllowThrough`
+
+### Defines:
+
+- `code/__DEFINES/~skyrat_defines/keybindings.dm`: `COMSIG_KB_MOB_PIXEL_SHIFT_DOWN`, `COMSIG_KB_MOB_PIXEL_SHIFT_UP`
+- `code/__DEFINES/~skyrat_defines/living.dm`: `COMSIG_LIVING_SET_PULL_OFFSET`, `COMSIG_LIVING_RESET_PULL_OFFSETS`, `COMSIG_LIVING_CAN_ALLOW_THROUGH`, `COMPONENT_LIVING_PASSABLE`
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Azarak - Porting
+Gandalf2k15 - Refactoring
+Larentoun - Moved to Component
diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm
similarity index 100%
rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm
rename to modular_nova/modules/player_ranks/code/player_rank_controller/_player_rank_controller.dm
diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/donator_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/donator_controller.dm
similarity index 100%
rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/donator_controller.dm
rename to modular_nova/modules/player_ranks/code/player_rank_controller/donator_controller.dm
diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/mentor_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/mentor_controller.dm
similarity index 100%
rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/mentor_controller.dm
rename to modular_nova/modules/player_ranks/code/player_rank_controller/mentor_controller.dm
diff --git a/modular_skyrat/modules/player_ranks/code/player_rank_controller/veteran_controller.dm b/modular_nova/modules/player_ranks/code/player_rank_controller/veteran_controller.dm
similarity index 100%
rename from modular_skyrat/modules/player_ranks/code/player_rank_controller/veteran_controller.dm
rename to modular_nova/modules/player_ranks/code/player_rank_controller/veteran_controller.dm
diff --git a/modular_nova/modules/player_ranks/code/preferences.dm b/modular_nova/modules/player_ranks/code/preferences.dm
new file mode 100644
index 00000000000..5a3f43dc8b1
--- /dev/null
+++ b/modular_nova/modules/player_ranks/code/preferences.dm
@@ -0,0 +1,3 @@
+/datum/preferences
+ /// Does this member have donator status on the server
+ var/donator_status = FALSE
diff --git a/modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm b/modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm
similarity index 94%
rename from modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm
rename to modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm
index 6e724e44dbc..3a0f8b0b827 100644
--- a/modular_skyrat/modules/player_ranks/code/subsystem/player_ranks.dm
+++ b/modular_nova/modules/player_ranks/code/subsystem/player_ranks.dm
@@ -111,7 +111,7 @@ SUBSYSTEM_DEF(player_ranks)
if(CONFIG_GET(flag/donator_legacy_system))
donator_controller.load_legacy()
- update_all_prefs_unlock_contents()
+ update_all_prefs_donator_status()
return
if(!SSdbcore.Connect())
@@ -124,30 +124,31 @@ SUBSYSTEM_DEF(player_ranks)
return
load_player_rank_sql(donator_controller)
- update_all_prefs_unlock_contents()
+ update_all_prefs_donator_status()
/**
* Handles updating all of the preferences datums to have the appropriate
- * `unlock_content` and `max_save_slots` once donators are loaded.
+ * `donator_status` and `max_save_slots` once donators are loaded.
*/
-/datum/controller/subsystem/player_ranks/proc/update_all_prefs_unlock_contents()
+/datum/controller/subsystem/player_ranks/proc/update_all_prefs_donator_status()
for(var/ckey as anything in GLOB.preferences_datums)
- update_prefs_unlock_content(GLOB.preferences_datums[ckey])
+ update_prefs_donator_status(GLOB.preferences_datums[ckey])
/**
- * Updates the `unlock_contents` and the `max_save_slots`
+ * Updates the `donator_status` and the `max_save_slots`
*
* Arguments:
- * * prefs - The preferences datum to check the unlock_content eligibility.
+ * * prefs - The preferences datum to check the donator_status eligibility.
*/
-/datum/controller/subsystem/player_ranks/proc/update_prefs_unlock_content(datum/preferences/prefs)
+/datum/controller/subsystem/player_ranks/proc/update_prefs_donator_status(datum/preferences/prefs)
if(!prefs)
return
- prefs.unlock_content = !!prefs.parent.IsByondMember() || is_donator(prefs.parent)
- if(prefs.unlock_content)
+ prefs.unlock_content = !!prefs.parent.IsByondMember()
+ prefs.donator_status = is_donator(prefs.parent)
+ if(prefs.unlock_content || prefs.donator_status)
prefs.max_save_slots = 50
@@ -221,9 +222,11 @@ SUBSYSTEM_DEF(player_ranks)
)
if(!query_load_player_rank.warn_execute())
+ qdel(query_load_player_rank)
return
rank_controller.load_from_query(query_load_player_rank)
+ qdel(query_load_player_rank)
/// Allows fetching the appropriate player_rank_controller based on its
@@ -332,9 +335,11 @@ SUBSYSTEM_DEF(player_ranks)
)
if(!query_add_player_rank.warn_execute())
+ qdel(query_add_player_rank)
return FALSE
controller.add_player(ckey)
+ qdel(query_add_player_rank)
return TRUE
@@ -411,9 +416,11 @@ SUBSYSTEM_DEF(player_ranks)
)
if(!query_remove_player_rank.warn_execute())
+ qdel(query_remove_player_rank)
return FALSE
controller.remove_player(ckey)
+ qdel(query_remove_player_rank)
return TRUE
@@ -467,12 +474,15 @@ SUBSYSTEM_DEF(player_ranks)
)
if(!query_get_existing_entries.warn_execute())
+ qdel(query_get_existing_entries)
return
while(query_get_existing_entries.NextRow())
var/ckey = ckey(query_get_existing_entries.item[INDEX_CKEY])
ckeys_to_migrate -= ckey
+ qdel(query_get_existing_entries)
+
var/list/rows_to_insert = list()
for(var/ckey in ckeys_to_migrate)
diff --git a/modular_skyrat/modules/player_ranks/code/world_topic.dm b/modular_nova/modules/player_ranks/code/world_topic.dm
similarity index 100%
rename from modular_skyrat/modules/player_ranks/code/world_topic.dm
rename to modular_nova/modules/player_ranks/code/world_topic.dm
diff --git a/modular_skyrat/modules/pod_locking/pod_locking.dm b/modular_nova/modules/pod_locking/pod_locking.dm
similarity index 100%
rename from modular_skyrat/modules/pod_locking/pod_locking.dm
rename to modular_nova/modules/pod_locking/pod_locking.dm
diff --git a/modular_skyrat/modules/polarized_windows/capacitor.dm b/modular_nova/modules/polarized_windows/capacitor.dm
similarity index 100%
rename from modular_skyrat/modules/polarized_windows/capacitor.dm
rename to modular_nova/modules/polarized_windows/capacitor.dm
diff --git a/modular_skyrat/modules/polarized_windows/polarization_controller.dm b/modular_nova/modules/polarized_windows/polarization_controller.dm
similarity index 98%
rename from modular_skyrat/modules/polarized_windows/polarization_controller.dm
rename to modular_nova/modules/polarized_windows/polarization_controller.dm
index 214e9257279..68263adaf42 100644
--- a/modular_skyrat/modules/polarized_windows/polarization_controller.dm
+++ b/modular_nova/modules/polarized_windows/polarization_controller.dm
@@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(polarization_controllers)
RegisterSignal(parent, COMSIG_ATOM_TOOL_ACT(TOOL_MULTITOOL), PROC_REF(on_window_multitool_act))
-/datum/component/polarization_controller/Destroy(force, silent)
+/datum/component/polarization_controller/Destroy(force)
if(id)
LAZYREMOVEASSOC(GLOB.polarization_controllers, id, list(src))
diff --git a/modular_skyrat/modules/polarized_windows/polarizer.dm b/modular_nova/modules/polarized_windows/polarizer.dm
similarity index 100%
rename from modular_skyrat/modules/polarized_windows/polarizer.dm
rename to modular_nova/modules/polarized_windows/polarizer.dm
diff --git a/modular_skyrat/modules/polarized_windows/windows.dm b/modular_nova/modules/polarized_windows/windows.dm
similarity index 100%
rename from modular_skyrat/modules/polarized_windows/windows.dm
rename to modular_nova/modules/polarized_windows/windows.dm
diff --git a/modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm b/modular_nova/modules/pollution/code/admin_spawn_pollution.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/admin_spawn_pollution.dm
rename to modular_nova/modules/pollution/code/admin_spawn_pollution.dm
diff --git a/modular_skyrat/modules/pollution/code/air_refresher.dm b/modular_nova/modules/pollution/code/air_refresher.dm
similarity index 93%
rename from modular_skyrat/modules/pollution/code/air_refresher.dm
rename to modular_nova/modules/pollution/code/air_refresher.dm
index e9478db2ec9..aae7f5f1d61 100644
--- a/modular_skyrat/modules/pollution/code/air_refresher.dm
+++ b/modular_nova/modules/pollution/code/air_refresher.dm
@@ -1,7 +1,7 @@
/obj/item/air_refresher
name = "air refresher"
desc = "A bottle packed with sickly strong fragrance, with an easy to use pressurized release nozzle."
- icon = 'modular_skyrat/modules/pollution/icons/air_refresher.dmi'
+ icon = 'modular_nova/modules/pollution/icons/air_refresher.dmi'
icon_state = "air_refresher"
inhand_icon_state = "cleaner"
worn_icon_state = "spraybottle"
@@ -36,7 +36,7 @@
/obj/machinery/pollution_scrubber
name = "Pollution Scrubber"
desc = "A scrubber that will process the air and filter out any contaminants."
- icon = 'modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi'
+ icon = 'modular_nova/modules/pollution/icons/pollution_scrubber.dmi'
icon_state = "scrubber"
var/scrub_amount = 2
var/on = FALSE
diff --git a/modular_skyrat/modules/pollution/code/bonfire.dm b/modular_nova/modules/pollution/code/bonfire.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/bonfire.dm
rename to modular_nova/modules/pollution/code/bonfire.dm
diff --git a/modular_skyrat/modules/pollution/code/fancy_storage_items.dm b/modular_nova/modules/pollution/code/fancy_storage_items.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/fancy_storage_items.dm
rename to modular_nova/modules/pollution/code/fancy_storage_items.dm
diff --git a/modular_skyrat/modules/pollution/code/perfumes.dm b/modular_nova/modules/pollution/code/perfumes.dm
similarity index 98%
rename from modular_skyrat/modules/pollution/code/perfumes.dm
rename to modular_nova/modules/pollution/code/perfumes.dm
index 2f07404ae76..e49255a9dfb 100644
--- a/modular_skyrat/modules/pollution/code/perfumes.dm
+++ b/modular_nova/modules/pollution/code/perfumes.dm
@@ -1,6 +1,6 @@
/obj/item/perfume
desc = "A bottle of pleasantly smelling fragrance."
- icon = 'modular_skyrat/modules/pollution/icons/perfume.dmi'
+ icon = 'modular_nova/modules/pollution/icons/perfume.dmi'
icon_state = "perfume"
inhand_icon_state = "cleaner"
worn_icon_state = "spraybottle"
diff --git a/modular_skyrat/modules/pollution/code/pollutant_datum.dm b/modular_nova/modules/pollution/code/pollutant_datum.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollutant_datum.dm
rename to modular_nova/modules/pollution/code/pollutant_datum.dm
diff --git a/modular_skyrat/modules/pollution/code/pollutants_generic.dm b/modular_nova/modules/pollution/code/pollutants_generic.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollutants_generic.dm
rename to modular_nova/modules/pollution/code/pollutants_generic.dm
diff --git a/modular_skyrat/modules/pollution/code/pollution.dm b/modular_nova/modules/pollution/code/pollution.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollution.dm
rename to modular_nova/modules/pollution/code/pollution.dm
diff --git a/modular_skyrat/modules/pollution/code/pollution_effect.dm b/modular_nova/modules/pollution/code/pollution_effect.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollution_effect.dm
rename to modular_nova/modules/pollution/code/pollution_effect.dm
diff --git a/modular_skyrat/modules/pollution/code/pollution_emitters.dm b/modular_nova/modules/pollution/code/pollution_emitters.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollution_emitters.dm
rename to modular_nova/modules/pollution/code/pollution_emitters.dm
diff --git a/modular_skyrat/modules/pollution/code/pollution_initializations.dm b/modular_nova/modules/pollution/code/pollution_initializations.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollution_initializations.dm
rename to modular_nova/modules/pollution/code/pollution_initializations.dm
diff --git a/modular_skyrat/modules/pollution/code/pollution_subsystem.dm b/modular_nova/modules/pollution/code/pollution_subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/pollution_subsystem.dm
rename to modular_nova/modules/pollution/code/pollution_subsystem.dm
diff --git a/modular_skyrat/modules/pollution/code/scented_candles.dm b/modular_nova/modules/pollution/code/scented_candles.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/scented_candles.dm
rename to modular_nova/modules/pollution/code/scented_candles.dm
diff --git a/modular_skyrat/modules/pollution/code/temporary_pollution_emission_component.dm b/modular_nova/modules/pollution/code/temporary_pollution_emission_component.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/temporary_pollution_emission_component.dm
rename to modular_nova/modules/pollution/code/temporary_pollution_emission_component.dm
diff --git a/modular_skyrat/modules/pollution/code/turf_open.dm b/modular_nova/modules/pollution/code/turf_open.dm
similarity index 100%
rename from modular_skyrat/modules/pollution/code/turf_open.dm
rename to modular_nova/modules/pollution/code/turf_open.dm
diff --git a/modular_skyrat/modules/pollution/icons/air_refresher.dmi b/modular_nova/modules/pollution/icons/air_refresher.dmi
similarity index 100%
rename from modular_skyrat/modules/pollution/icons/air_refresher.dmi
rename to modular_nova/modules/pollution/icons/air_refresher.dmi
diff --git a/modular_skyrat/modules/pollution/icons/perfume.dmi b/modular_nova/modules/pollution/icons/perfume.dmi
similarity index 100%
rename from modular_skyrat/modules/pollution/icons/perfume.dmi
rename to modular_nova/modules/pollution/icons/perfume.dmi
diff --git a/modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi b/modular_nova/modules/pollution/icons/pollution_scrubber.dmi
similarity index 100%
rename from modular_skyrat/modules/pollution/icons/pollution_scrubber.dmi
rename to modular_nova/modules/pollution/icons/pollution_scrubber.dmi
diff --git a/modular_skyrat/modules/poly_commands/parrot.dm b/modular_nova/modules/poly_commands/parrot.dm
similarity index 100%
rename from modular_skyrat/modules/poly_commands/parrot.dm
rename to modular_nova/modules/poly_commands/parrot.dm
diff --git a/modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm b/modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm
similarity index 97%
rename from modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm
rename to modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm
index 5616e090ed9..c1ef4e7e9b4 100644
--- a/modular_skyrat/modules/positronic_alert_console/code/positronic_alert_console.dm
+++ b/modular_nova/modules/positronic_alert_console/code/positronic_alert_console.dm
@@ -1,7 +1,7 @@
/obj/machinery/posialert
name = "automated positronic alert console"
desc = "A console that will ping when a positronic personality is available for download."
- icon = 'modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi'
+ icon = 'modular_nova/modules/positronic_alert_console/icons/terminals.dmi'
icon_state = "posialert"
// to create a cooldown so if roboticists are tired of ghosts
COOLDOWN_DECLARE(robotics_cooldown)
diff --git a/modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi b/modular_nova/modules/positronic_alert_console/icons/terminals.dmi
similarity index 100%
rename from modular_skyrat/modules/positronic_alert_console/icons/terminals.dmi
rename to modular_nova/modules/positronic_alert_console/icons/terminals.dmi
diff --git a/modular_skyrat/modules/positronic_alert_console/readme.md b/modular_nova/modules/positronic_alert_console/readme.md
similarity index 100%
rename from modular_skyrat/modules/positronic_alert_console/readme.md
rename to modular_nova/modules/positronic_alert_console/readme.md
diff --git a/modular_nova/modules/primitive_catgirls/code/clothing.dm b/modular_nova/modules/primitive_catgirls/code/clothing.dm
new file mode 100644
index 00000000000..04f25669403
--- /dev/null
+++ b/modular_nova/modules/primitive_catgirls/code/clothing.dm
@@ -0,0 +1,138 @@
+// The naming of every path in this file is going to be awful :smiling_imp:
+
+// Outfit Datum
+
+/datum/outfit/primitive_catgirl
+ name = "Icemoon Dweller"
+
+ uniform = /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
+ shoes = /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
+ gloves = /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
+ suit = /obj/item/clothing/suit/jacket/primitive_catgirl_coat
+ neck = /obj/item/clothing/neck/scarf/primitive_catgirl_scarf
+
+ back = /obj/item/forging/reagent_weapon/axe/fake_copper
+
+// Under
+
+/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
+ name = "body wraps"
+ desc = "Some pretty simple wraps to cover up your lower bits."
+ icon_state = "wraps"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ body_parts_covered = GROIN
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_wraps
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_wraps/worn
+ greyscale_colors = "#cec8bf#364660"
+ flags_1 = IS_PLAYER_COLORABLE_1
+ has_sensor = FALSE
+
+// Hands
+
+/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
+ name = "arm wraps"
+ desc = "Simple cloth to wrap around one's arms."
+ icon_state = "armwraps"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_armwraps
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_armwraps/worn
+ greyscale_colors = "#cec8bf"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets
+ name = "gauntlets"
+ desc = "Simple cloth arm wraps with overlying metal protection."
+ icon_state = "gauntlets"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_gauntlets
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gauntlets/worn
+ greyscale_config_inhand_left = null
+ greyscale_config_inhand_right = null
+ greyscale_colors = "#cec8bf#c55a1d"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+// Suit
+
+/obj/item/clothing/suit/jacket/primitive_catgirl_coat
+ name = "primitive fur coat"
+ desc = "A large piece of animal hide stuffed with fur, likely from the same animal."
+ icon_state = "coat"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ body_parts_covered = CHEST
+ cold_protection = CHEST
+ min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_coat
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_coat/worn
+ greyscale_colors = "#594032#cec8bf"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather
+ greyscale_colors = "#594032"
+
+// Shoes
+
+/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
+ name = "primitive hiking boots"
+ desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice."
+ icon_state = "boots"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_boots
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn
+ greyscale_colors = "#594032#cec8bf"
+ flags_1 = IS_PLAYER_COLORABLE_1
+
+// Neck
+
+/obj/item/clothing/neck/scarf/primitive_catgirl_scarf
+ greyscale_colors = "#cec8bf#cec8bf"
+
+/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white
+ greyscale_colors = "#cec8bf#cec8bf"
+
+/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue
+ greyscale_colors = "#364660"
+
+/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white
+ greyscale_colors = "#cec8bf"
+
+/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather
+ greyscale_colors = "#594032#594032"
+
+// Masks
+
+/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter
+ name = "neck gaiter"
+ desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional."
+ icon_state = "gaiter"
+ inhand_icon_state = "balaclava"
+ icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
+ greyscale_config = /datum/greyscale_config/primitive_catgirl_gaiter
+ greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gaiter/worn
+ greyscale_colors = "#364660"
+ w_class = WEIGHT_CLASS_TINY
+ flags_inv = HIDEFACE|HIDESNOUT
+ flags_cover = MASKCOVERSMOUTH
+ visor_flags_inv = HIDEFACE|HIDESNOUT
+ visor_flags_cover = MASKCOVERSMOUTH
+ flags_1 = IS_PLAYER_COLORABLE_1
+ actions_types = list(/datum/action/item_action/adjust)
+
+/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter/attack_self(mob/user)
+ adjustmask(user)
+
+// Head
+
+/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors
+ greyscale_colors = "#594032#364660"
+
+// Misc Items
+
+/obj/item/forging/reagent_weapon/axe/fake_copper
+ custom_materials = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT)
diff --git a/modular_skyrat/modules/primitive_catgirls/code/clothing_vendor.dm b/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/code/clothing_vendor.dm
rename to modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm
diff --git a/modular_skyrat/modules/primitive_catgirls/code/language.dm b/modular_nova/modules/primitive_catgirls/code/language.dm
similarity index 93%
rename from modular_skyrat/modules/primitive_catgirls/code/language.dm
rename to modular_nova/modules/primitive_catgirls/code/language.dm
index 05db5412af2..fc04dda4346 100644
--- a/modular_skyrat/modules/primitive_catgirls/code/language.dm
+++ b/modular_nova/modules/primitive_catgirls/code/language.dm
@@ -13,6 +13,6 @@
"bar", "dar", "akur", "jer", "bær", "múl", "fjörð", "jah", "dah", "dim", "din", "dir", "dur", "nya", "miau", "mjau", "ný", "kt", "hø",
)
icon_state = "omgkittyhiii"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi'
+ icon = 'modular_nova/modules/primitive_catgirls/icons/language_icon.dmi'
default_priority = 94
secret = TRUE
diff --git a/modular_skyrat/modules/primitive_catgirls/code/map_items.dm b/modular_nova/modules/primitive_catgirls/code/map_items.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/code/map_items.dm
rename to modular_nova/modules/primitive_catgirls/code/map_items.dm
diff --git a/modular_skyrat/modules/primitive_catgirls/code/organs.dm b/modular_nova/modules/primitive_catgirls/code/organs.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/code/organs.dm
rename to modular_nova/modules/primitive_catgirls/code/organs.dm
diff --git a/modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm b/modular_nova/modules/primitive_catgirls/code/smelling_salts.dm
similarity index 94%
rename from modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm
rename to modular_nova/modules/primitive_catgirls/code/smelling_salts.dm
index 103dadbc6a9..c15ca1fb600 100644
--- a/modular_skyrat/modules/primitive_catgirls/code/smelling_salts.dm
+++ b/modular_nova/modules/primitive_catgirls/code/smelling_salts.dm
@@ -2,7 +2,7 @@
name = "smelling salts"
desc = "A small pile of a salt-like substance that smells absolutely repulsive. Rumor has it that the smell is so pungent that even the dead will come back to life to escape it."
icon_state = "smelling_salts"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/salts.dmi'
+ icon = 'modular_nova/modules/primitive_catgirls/icons/salts.dmi'
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
item_flags = NOBLUDGEON
@@ -59,7 +59,7 @@
return
carbon_target.adjustOxyLoss(amount = 60, updating_health = TRUE)
- playsound(src, 'modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg', 50, FALSE)
+ playsound(src, 'modular_nova/modules/emotes/sound/emotes/female/female_sniff.ogg', 50, FALSE)
if(defib_result == DEFIB_POSSIBLE)
carbon_target.grab_ghost()
diff --git a/modular_skyrat/modules/primitive_catgirls/code/spawner.dm b/modular_nova/modules/primitive_catgirls/code/spawner.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/code/spawner.dm
rename to modular_nova/modules/primitive_catgirls/code/spawner.dm
diff --git a/modular_skyrat/modules/primitive_catgirls/code/species.dm b/modular_nova/modules/primitive_catgirls/code/species.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/code/species.dm
rename to modular_nova/modules/primitive_catgirls/code/species.dm
diff --git a/modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi b/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi
rename to modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi
diff --git a/modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi b/modular_nova/modules/primitive_catgirls/icons/language_icon.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/icons/language_icon.dmi
rename to modular_nova/modules/primitive_catgirls/icons/language_icon.dmi
diff --git a/modular_skyrat/modules/primitive_catgirls/icons/salts.dmi b/modular_nova/modules/primitive_catgirls/icons/salts.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_catgirls/icons/salts.dmi
rename to modular_nova/modules/primitive_catgirls/icons/salts.dmi
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm
similarity index 98%
rename from modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm
rename to modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm
index 0ee1202ef72..43857d56c49 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/big_mortar.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/big_mortar.dm
@@ -4,7 +4,7 @@
/obj/structure/large_mortar
name = "large mortar"
desc = "A large bowl perfect for grinding or juicing a large number of things at once."
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi'
icon_state = "big_mortar"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm b/modular_nova/modules/primitive_cooking_additions/code/cookware.dm
similarity index 92%
rename from modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm
rename to modular_nova/modules/primitive_cooking_additions/code/cookware.dm
index 6b90c469c1a..9e2defd9ca1 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/cookware.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/cookware.dm
@@ -1,5 +1,5 @@
/obj/item/reagent_containers/cup/soup_pot/material
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi'
custom_materials = null // We're going to apply custom materials when this baby is actually made
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
@@ -26,7 +26,7 @@
// Oven Trays
/obj/item/plate/oven_tray/material
desc = "Time to bake hardtack!"
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi'
custom_materials = null // We're going to apply custom materials when this baby is actually made
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
fragile = FALSE
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm b/modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm
similarity index 98%
rename from modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm
rename to modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm
index a71e4c7d35a..23186b8ff51 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/cutting_board.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/cutting_board.dm
@@ -3,7 +3,7 @@
/obj/item/cutting_board
name = "cutting board"
desc = "Processing food before electricity was cool, because you can just do your regular cutting on the table next to this right?"
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi'
icon_state = "cutting_board"
force = 5
throwforce = 7 //Imagine someone just throws the entire fucking cutting board at you
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm
similarity index 98%
rename from modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm
rename to modular_nova/modules/primitive_cooking_additions/code/millstone.dm
index 70404fadbb1..ddfbbda75a9 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/millstone.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/millstone.dm
@@ -4,7 +4,7 @@
/obj/structure/millstone
name = "millstone"
desc = "Two big disks of something heavy and tough. Put a plant between them and spin, and you'll end up with seeds and a really ground up plant."
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi'
icon_state = "millstone"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm
similarity index 91%
rename from modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm
rename to modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm
index 895b5d1783b..21c6781d0e7 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_griddle.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/stone_griddle.dm
@@ -1,7 +1,7 @@
/obj/machinery/griddle/stone
name = "stone griddle"
desc = "You could probably cook an egg on this... the griddle slab looks very unsanitary."
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
icon_state = "griddle1_off"
density = TRUE
pass_flags_self = PASSMACHINE | PASSTABLE| LETPASSTHROW // It's roughly the height of a table.
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm
similarity index 95%
rename from modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm
rename to modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm
index c4c21967a3c..40b13ac9c69 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/stone_oven.dm
@@ -3,7 +3,7 @@
/obj/machinery/oven/stone
name = "stone oven"
desc = "Sorry buddy, all this stone used up the budget that would have normally gone to garfield comic jokes."
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
circuit = null
use_power = FALSE
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm
similarity index 95%
rename from modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm
rename to modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm
index 0057e758571..615bc4ed500 100644
--- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm
+++ b/modular_nova/modules/primitive_cooking_additions/code/stone_stove.dm
@@ -1,7 +1,7 @@
/obj/machinery/primitive_stove
name = "stone stove"
desc = "You think you'll stick to just putting pots on this, the grill part looks very unsanitary."
- icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
+ icon = 'modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi'
icon_state = "stove_off"
base_icon_state = "stove"
density = TRUE
diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi b/modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_cooking_additions/icons/cooking_structures.dmi
rename to modular_nova/modules/primitive_cooking_additions/icons/cooking_structures.dmi
diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi b/modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_cooking_additions/icons/cookware.dmi
rename to modular_nova/modules/primitive_cooking_additions/icons/cookware.dmi
diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi b/modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_cooking_additions/icons/millstone.dmi
rename to modular_nova/modules/primitive_cooking_additions/icons/millstone.dmi
diff --git a/modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi b/modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi
rename to modular_nova/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi
diff --git a/modular_skyrat/modules/primitive_cooking_additions/readme.md b/modular_nova/modules/primitive_cooking_additions/readme.md
similarity index 100%
rename from modular_skyrat/modules/primitive_cooking_additions/readme.md
rename to modular_nova/modules/primitive_cooking_additions/readme.md
diff --git a/modular_skyrat/modules/primitive_production/code/ceramics.dm b/modular_nova/modules/primitive_production/code/ceramics.dm
similarity index 92%
rename from modular_skyrat/modules/primitive_production/code/ceramics.dm
rename to modular_nova/modules/primitive_production/code/ceramics.dm
index ab360765ac3..93b516390f5 100644
--- a/modular_skyrat/modules/primitive_production/code/ceramics.dm
+++ b/modular_nova/modules/primitive_production/code/ceramics.dm
@@ -8,7 +8,7 @@
name = "clay brick"
desc = "A heavy clay brick."
singular_name = "clay brick"
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "sheet-clay"
inhand_icon_state = null
throw_speed = 3
@@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
return ..()
/obj/item/ceramic
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
var/forge_item
/obj/item/ceramic/attackby(obj/item/attacking_item, mob/living/user, params)
@@ -75,7 +75,7 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
/obj/item/stack/clay
name = "clay"
desc = "A pile of clay that can be used to create ceramic artwork."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "clay"
merge_type = /obj/item/stack/clay
singular_name = "glob of clay"
@@ -112,7 +112,7 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
/obj/item/plate/ceramic
name = "ceramic plate"
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "clay_plate"
/obj/item/ceramic/tray
@@ -123,7 +123,7 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
/obj/item/plate/oven_tray/material/ceramic
name = "ceramic oven tray"
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "clay_tray"
/obj/item/ceramic/bowl
@@ -134,7 +134,7 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
/obj/item/reagent_containers/cup/bowl/ceramic
name = "ceramic bowl"
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "clay_bowl"
custom_materials = null
@@ -147,21 +147,21 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \
/obj/item/reagent_containers/cup/beaker/large/ceramic
name = "ceramic cup"
desc = "A cup that is made from ceramic."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "clay_cup"
custom_materials = null
/obj/item/ceramic/brick
name = "ceramic brick"
desc = "A dense block of clay, ready to be fired into a brick!"
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "sheet-clay"
forge_item = /obj/item/stack/sheet/mineral/clay
/obj/structure/throwing_wheel
name = "throwing wheel"
desc = "A machine that allows you to throw clay."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "throw_wheel_empty"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/primitive_production/code/glassblowing.dm b/modular_nova/modules/primitive_production/code/glassblowing.dm
similarity index 98%
rename from modular_skyrat/modules/primitive_production/code/glassblowing.dm
rename to modular_nova/modules/primitive_production/code/glassblowing.dm
index 3898b4f25de..d0b0b9343e1 100644
--- a/modular_skyrat/modules/primitive_production/code/glassblowing.dm
+++ b/modular_nova/modules/primitive_production/code/glassblowing.dm
@@ -6,7 +6,7 @@
#define STEP_JACKS "jacks"
/obj/item/glassblowing
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
/obj/item/glassblowing/glass_globe
name = "glass globe"
@@ -37,7 +37,7 @@
/obj/item/reagent_containers/cup/bowl/blowing_glass
name = "glass bowl"
desc = "A glass bowl that is capable of carrying things."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_bowl"
custom_materials = null
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
@@ -49,7 +49,7 @@
/obj/item/reagent_containers/cup/beaker/large/blowing_glass
name = "glass cup"
desc = "A glass cup that is capable of carrying liquids."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_cup"
custom_materials = null
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
@@ -61,7 +61,7 @@
/obj/item/plate/blowing_glass
name = "glass plate"
desc = "A glass plate that is capable of carrying things."
- icon = 'modular_skyrat/modules/primitive_production/icons/prim_fun.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/prim_fun.dmi'
icon_state = "glass_plate"
custom_materials = null
material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR
diff --git a/modular_skyrat/modules/primitive_production/code/misc.dm b/modular_nova/modules/primitive_production/code/misc.dm
similarity index 100%
rename from modular_skyrat/modules/primitive_production/code/misc.dm
rename to modular_nova/modules/primitive_production/code/misc.dm
diff --git a/modular_skyrat/modules/primitive_production/code/production_skill.dm b/modular_nova/modules/primitive_production/code/production_skill.dm
similarity index 85%
rename from modular_skyrat/modules/primitive_production/code/production_skill.dm
rename to modular_nova/modules/primitive_production/code/production_skill.dm
index 50fc0d30ca5..c275cee1ec8 100644
--- a/modular_skyrat/modules/primitive_production/code/production_skill.dm
+++ b/modular_nova/modules/primitive_production/code/production_skill.dm
@@ -12,7 +12,7 @@
name = "legendary producer's cloak"
desc = "Worn by the most skilled producers, this legendary cloak is only attainable by knowing how to create the best products. \
This status symbol represents a being who has crafted some of the finest glass and ceramic works."
- icon = 'modular_skyrat/modules/primitive_production/icons/cloaks.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_production/icons/neck.dmi'
+ icon = 'modular_nova/modules/primitive_production/icons/cloaks.dmi'
+ worn_icon = 'modular_nova/modules/primitive_production/icons/neck.dmi'
icon_state = "productioncloak"
associated_skill_path = /datum/skill/production
diff --git a/modular_skyrat/modules/primitive_production/icons/cloaks.dmi b/modular_nova/modules/primitive_production/icons/cloaks.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_production/icons/cloaks.dmi
rename to modular_nova/modules/primitive_production/icons/cloaks.dmi
diff --git a/modular_skyrat/modules/primitive_production/icons/neck.dmi b/modular_nova/modules/primitive_production/icons/neck.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_production/icons/neck.dmi
rename to modular_nova/modules/primitive_production/icons/neck.dmi
diff --git a/modular_skyrat/modules/primitive_production/icons/prim_fun.dmi b/modular_nova/modules/primitive_production/icons/prim_fun.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_production/icons/prim_fun.dmi
rename to modular_nova/modules/primitive_production/icons/prim_fun.dmi
diff --git a/modular_skyrat/modules/primitive_production/readme.md b/modular_nova/modules/primitive_production/readme.md
similarity index 100%
rename from modular_skyrat/modules/primitive_production/readme.md
rename to modular_nova/modules/primitive_production/readme.md
diff --git a/modular_skyrat/modules/primitive_structures/code/fencing.dm b/modular_nova/modules/primitive_structures/code/fencing.dm
similarity index 94%
rename from modular_skyrat/modules/primitive_structures/code/fencing.dm
rename to modular_nova/modules/primitive_structures/code/fencing.dm
index 0aeb5a71e20..9ced3cdb483 100644
--- a/modular_skyrat/modules/primitive_structures/code/fencing.dm
+++ b/modular_nova/modules/primitive_structures/code/fencing.dm
@@ -3,7 +3,7 @@
/obj/structure/railing/wooden_fencing
name = "wooden fence"
desc = "A basic wooden fence meant to prevent people like you either in or out of somewhere."
- icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/wooden_fence.dmi'
icon_state = "fence"
layer = BELOW_OBJ_LAYER // I think this is the default but lets be safe?
resistance_flags = FLAMMABLE
@@ -58,7 +58,7 @@
/obj/structure/mineral_door/wood/large_gate
name = "large wooden gate"
- icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/wooden_gate.dmi'
icon_state = "gate"
openSound = 'sound/machines/wooden_closet_open.ogg'
closeSound = 'sound/machines/wooden_closet_close.ogg'
diff --git a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm b/modular_nova/modules/primitive_structures/code/storage_structures.dm
similarity index 93%
rename from modular_skyrat/modules/primitive_structures/code/storage_structures.dm
rename to modular_nova/modules/primitive_structures/code/storage_structures.dm
index 1788109b6c2..1fa28126a47 100644
--- a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm
+++ b/modular_nova/modules/primitive_structures/code/storage_structures.dm
@@ -3,7 +3,7 @@
/obj/structure/rack/wooden
name = "shelf"
icon_state = "shelf_wood"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
@@ -35,7 +35,7 @@
desc = "This barrel can't hold liquids, it can just hold things inside of it however!"
icon_state = "barrel"
base_icon_state = "barrel"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
@@ -55,7 +55,7 @@
name = "Produce Bin"
desc = "A wooden hamper, used to hold plant products and try keep them safe from pests."
icon_state = "producebin"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
base_build_path = /obj/machinery/smartfridge/producebin
contents_icon_state = "produce"
@@ -86,7 +86,7 @@
name = "Seedshelf"
desc = "A wooden shelf, used to hold seeds preventing them from germinating early."
icon_state = "seedshelf"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
base_build_path = /obj/machinery/smartfridge/seedshelf
contents_icon_state = "seed"
@@ -116,7 +116,7 @@
name = "Ration shelf"
desc = "A wooden shelf, used to store food... preferably preserved."
icon_state = "rationshelf"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
base_build_path = /obj/machinery/smartfridge/rationshelf
contents_icon_state = "ration"
@@ -146,7 +146,7 @@
name = "Produce display"
desc = "A wooden table with awning, used to display produce items."
icon_state = "producedisplay"
- icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/storage.dmi'
resistance_flags = FLAMMABLE
base_build_path = /obj/machinery/smartfridge/producedisplay
contents_icon_state = "nonfood"
diff --git a/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm b/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm
new file mode 100644
index 00000000000..aa3b1883ce7
--- /dev/null
+++ b/modular_nova/modules/primitive_structures/code/totally_thatch_roof.dm
@@ -0,0 +1,8 @@
+/turf/open/misc/grass/roofing
+ name = "thatched roof"
+ desc = "A collection of various dried greens, not so green anymore, that makes a passable roof material."
+ baseturfs = /turf/open/openspace/icemoon
+ initial_gas_mix = "ICEMOON_ATMOS"
+ icon_state = "grass-255"
+ icon = 'modular_nova/modules/primitive_structures/icons/roofing.dmi'
+ smooth_icon = 'modular_nova/modules/primitive_structures/icons/roofing.dmi'
diff --git a/modular_skyrat/modules/primitive_structures/code/wall_torch.dm b/modular_nova/modules/primitive_structures/code/wall_torch.dm
similarity index 94%
rename from modular_skyrat/modules/primitive_structures/code/wall_torch.dm
rename to modular_nova/modules/primitive_structures/code/wall_torch.dm
index 7dc62b1b78f..14da5b99f5f 100644
--- a/modular_skyrat/modules/primitive_structures/code/wall_torch.dm
+++ b/modular_nova/modules/primitive_structures/code/wall_torch.dm
@@ -1,7 +1,7 @@
/obj/structure/wall_torch
name = "mounted torch"
desc = "A simple torch mounted to the wall, for lighting and such."
- icon = 'modular_skyrat/modules/primitive_structures/icons/lighting.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/lighting.dmi'
icon_state = "walltorch"
base_icon_state = "walltorch"
anchored = TRUE
diff --git a/modular_nova/modules/primitive_structures/code/windows.dm b/modular_nova/modules/primitive_structures/code/windows.dm
new file mode 100644
index 00000000000..09d98f42ac8
--- /dev/null
+++ b/modular_nova/modules/primitive_structures/code/windows.dm
@@ -0,0 +1,10 @@
+/obj/structure/window/green_glass_pane
+ name = "green glass window"
+ desc = "A handcrafted green glass window. At least you can still see through it."
+ icon = 'modular_nova/modules/primitive_structures/icons/windows.dmi'
+ icon_state = "green_glass"
+ flags_1 = NONE
+ obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
+ can_be_unanchored = FALSE
+ fulltile = TRUE
+ flags_1 = PREVENT_CLICK_UNDER_1
diff --git a/modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm b/modular_nova/modules/primitive_structures/code/wooden_ladder.dm
similarity index 76%
rename from modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm
rename to modular_nova/modules/primitive_structures/code/wooden_ladder.dm
index 79995763b35..d8061c8a49d 100644
--- a/modular_skyrat/modules/primitive_structures/code/wooden_ladder.dm
+++ b/modular_nova/modules/primitive_structures/code/wooden_ladder.dm
@@ -3,5 +3,5 @@
/obj/structure/ladder/wood
name = "wooden ladder"
desc = "Up or down, whatever your mood you sure wood find what you're looking for with this ladder."
- icon = 'modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi'
+ icon = 'modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi'
resistance_flags = FLAMMABLE
diff --git a/modular_skyrat/modules/primitive_structures/icons/lighting.dmi b/modular_nova/modules/primitive_structures/icons/lighting.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/lighting.dmi
rename to modular_nova/modules/primitive_structures/icons/lighting.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/roofing.dmi b/modular_nova/modules/primitive_structures/icons/roofing.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/roofing.dmi
rename to modular_nova/modules/primitive_structures/icons/roofing.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/storage.dmi b/modular_nova/modules/primitive_structures/icons/storage.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/storage.dmi
rename to modular_nova/modules/primitive_structures/icons/storage.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/windows.dmi b/modular_nova/modules/primitive_structures/icons/windows.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/windows.dmi
rename to modular_nova/modules/primitive_structures/icons/windows.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi b/modular_nova/modules/primitive_structures/icons/wooden_fence.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/wooden_fence.dmi
rename to modular_nova/modules/primitive_structures/icons/wooden_fence.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi b/modular_nova/modules/primitive_structures/icons/wooden_gate.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/wooden_gate.dmi
rename to modular_nova/modules/primitive_structures/icons/wooden_gate.dmi
diff --git a/modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi b/modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/icons/wooden_ladder.dmi
rename to modular_nova/modules/primitive_structures/icons/wooden_ladder.dmi
diff --git a/modular_skyrat/modules/primitive_structures/readme.md b/modular_nova/modules/primitive_structures/readme.md
similarity index 100%
rename from modular_skyrat/modules/primitive_structures/readme.md
rename to modular_nova/modules/primitive_structures/readme.md
diff --git a/modular_skyrat/modules/prison_transport/code/outfits.dm b/modular_nova/modules/prison_transport/code/outfits.dm
similarity index 100%
rename from modular_skyrat/modules/prison_transport/code/outfits.dm
rename to modular_nova/modules/prison_transport/code/outfits.dm
diff --git a/modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm b/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm
similarity index 78%
rename from modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm
rename to modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm
index d4c367bafdf..201552ae663 100644
--- a/modular_skyrat/modules/projectiles/code/guns/misc/m6pdw.dm
+++ b/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm
@@ -3,11 +3,11 @@
/obj/item/gun/ballistic/automatic/m6pdw
name = "\improper M6 Personal Defense Weapon"
desc = "A PDW designed to be used within close to medium range. Its slide seems to stick a bit, having years of dust accumulation, And its manufacturer stamp and symbols have been scratched out."
- icon = 'modular_skyrat/modules/projectiles/icons/m6pdw.dmi'
+ icon = 'modular_nova/modules/projectiles/icons/m6pdw.dmi'
icon_state = "m6_pdw"
inhand_icon_state = "m6_pdw"
- righthand_file = 'modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi'
- lefthand_file = 'modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi'
+ righthand_file = 'modular_nova/modules/projectiles/icons/inhands/righthand.dmi'
+ lefthand_file = 'modular_nova/modules/projectiles/icons/inhands/lefthand.dmi'
w_class = WEIGHT_CLASS_NORMAL
spawnwithmagazine = FALSE
accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol
diff --git a/modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi b/modular_nova/modules/projectiles/icons/inhands/lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/projectiles/icons/inhands/lefthand.dmi
rename to modular_nova/modules/projectiles/icons/inhands/lefthand.dmi
diff --git a/modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi b/modular_nova/modules/projectiles/icons/inhands/righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/projectiles/icons/inhands/righthand.dmi
rename to modular_nova/modules/projectiles/icons/inhands/righthand.dmi
diff --git a/modular_skyrat/modules/projectiles/icons/m6pdw.dmi b/modular_nova/modules/projectiles/icons/m6pdw.dmi
similarity index 100%
rename from modular_skyrat/modules/projectiles/icons/m6pdw.dmi
rename to modular_nova/modules/projectiles/icons/m6pdw.dmi
diff --git a/modular_skyrat/modules/protected_roles/code/_job.dm b/modular_nova/modules/protected_roles/code/_job.dm
similarity index 100%
rename from modular_skyrat/modules/protected_roles/code/_job.dm
rename to modular_nova/modules/protected_roles/code/_job.dm
diff --git a/modular_skyrat/modules/protected_roles/code/antag_restricted_jobs.dm b/modular_nova/modules/protected_roles/code/antag_restricted_jobs.dm
similarity index 100%
rename from modular_skyrat/modules/protected_roles/code/antag_restricted_jobs.dm
rename to modular_nova/modules/protected_roles/code/antag_restricted_jobs.dm
diff --git a/modular_nova/modules/radiosound/code/headset.dm b/modular_nova/modules/radiosound/code/headset.dm
new file mode 100644
index 00000000000..3ffe1fa4f93
--- /dev/null
+++ b/modular_nova/modules/radiosound/code/headset.dm
@@ -0,0 +1,16 @@
+/obj/item/radio/headset
+ /// The sound that plays when someone uses the headset
+ var/radiosound = 'modular_nova/modules/radiosound/sound/radio/common.ogg'
+ /// The volume of the radio sound we make
+ var/radio_sound_volume = 25
+
+/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops
+ radiosound = 'modular_nova/modules/radiosound/sound/radio/syndie.ogg'
+
+/obj/item/radio/headset/headset_sec
+ radiosound = 'modular_nova/modules/radiosound/sound/radio/security.ogg'
+
+/obj/item/radio/headset/talk_into(mob/living/mob_in_question, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE)
+ if(radiosound && listening)
+ playsound(mob_in_question, radiosound, radio_sound_volume, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, SOUND_FALLOFF_EXPONENT)
+ . = ..()
diff --git a/modular_skyrat/modules/radiosound/readme.md b/modular_nova/modules/radiosound/readme.md
similarity index 100%
rename from modular_skyrat/modules/radiosound/readme.md
rename to modular_nova/modules/radiosound/readme.md
diff --git a/modular_skyrat/modules/radiosound/sound/radio/common.ogg b/modular_nova/modules/radiosound/sound/radio/common.ogg
similarity index 100%
rename from modular_skyrat/modules/radiosound/sound/radio/common.ogg
rename to modular_nova/modules/radiosound/sound/radio/common.ogg
diff --git a/modular_skyrat/modules/radiosound/sound/radio/security.ogg b/modular_nova/modules/radiosound/sound/radio/security.ogg
similarity index 100%
rename from modular_skyrat/modules/radiosound/sound/radio/security.ogg
rename to modular_nova/modules/radiosound/sound/radio/security.ogg
diff --git a/modular_skyrat/modules/radiosound/sound/radio/syndie.ogg b/modular_nova/modules/radiosound/sound/radio/syndie.ogg
similarity index 100%
rename from modular_skyrat/modules/radiosound/sound/radio/syndie.ogg
rename to modular_nova/modules/radiosound/sound/radio/syndie.ogg
diff --git a/modular_skyrat/modules/reagent_forging/code/anvil.dm b/modular_nova/modules/reagent_forging/code/anvil.dm
similarity index 95%
rename from modular_skyrat/modules/reagent_forging/code/anvil.dm
rename to modular_nova/modules/reagent_forging/code/anvil.dm
index e0516c42abb..8cfb1f3b29e 100644
--- a/modular_skyrat/modules/reagent_forging/code/anvil.dm
+++ b/modular_nova/modules/reagent_forging/code/anvil.dm
@@ -1,7 +1,7 @@
/obj/structure/reagent_anvil
name = "smithing anvil"
desc = "Essentially a big block of metal that you can hammer other metals on top of, crucial for anyone working metal by hand."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi'
icon_state = "anvil_empty"
anchored = TRUE
@@ -80,7 +80,7 @@
/obj/structure/reagent_anvil/hammer_act(mob/living/user, obj/item/tool)
//regardless, we will make a sound
- playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE)
+ playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE)
//do we have an incomplete item to hammer out? if so, here is our block of code
var/obj/item/forging/incomplete/locate_incomplete = locate() in contents
@@ -126,7 +126,7 @@
locate_obj.repair_damage(locate_obj.get_integrity() + 10)
user.mind.adjust_experience(/datum/skill/smithing, 5) //repairing does give some experience
- playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE)
+ playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE, ignore_walls = FALSE)
return ITEM_INTERACT_SUCCESS
diff --git a/modular_skyrat/modules/reagent_forging/code/crafting_bench.dm b/modular_nova/modules/reagent_forging/code/crafting_bench.dm
similarity index 98%
rename from modular_skyrat/modules/reagent_forging/code/crafting_bench.dm
rename to modular_nova/modules/reagent_forging/code/crafting_bench.dm
index 268c4acdfa1..02a163fab9a 100644
--- a/modular_skyrat/modules/reagent_forging/code/crafting_bench.dm
+++ b/modular_nova/modules/reagent_forging/code/crafting_bench.dm
@@ -7,7 +7,7 @@
/obj/structure/reagent_crafting_bench
name = "forging workbench"
desc = "A crafting bench fitted with tools, securing mechanisms, and a steady surface for blacksmithing."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi'
icon_state = "crafting_bench_empty"
anchored = TRUE
@@ -159,7 +159,7 @@
return ITEM_INTERACT_SUCCESS
/obj/structure/reagent_crafting_bench/hammer_act(mob/living/user, obj/item/tool)
- playsound(src, 'modular_skyrat/modules/reagent_forging/sound/forge.ogg', 50, TRUE)
+ playsound(src, 'modular_nova/modules/reagent_forging/sound/forge.ogg', 50, TRUE)
if(length(contents))
if(!istype(contents[1], /obj/item/forging/complete))
balloon_alert(user, "invalid item")
diff --git a/modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm b/modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/code/crafting_bench_recipes.dm
rename to modular_nova/modules/reagent_forging/code/crafting_bench_recipes.dm
diff --git a/modular_skyrat/modules/reagent_forging/code/forge.dm b/modular_nova/modules/reagent_forging/code/forge.dm
similarity index 99%
rename from modular_skyrat/modules/reagent_forging/code/forge.dm
rename to modular_nova/modules/reagent_forging/code/forge.dm
index 148ff5b02be..a3e2e639cbf 100644
--- a/modular_skyrat/modules/reagent_forging/code/forge.dm
+++ b/modular_nova/modules/reagent_forging/code/forge.dm
@@ -41,7 +41,7 @@
/obj/structure/reagent_forge
name = "forge"
desc = "A structure built out of bricks, for heating up metal, or glass, or ceramic, or food, or anything really."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi'
icon_state = "forge_inactive"
anchored = TRUE
diff --git a/modular_nova/modules/reagent_forging/code/forge_clothing.dm b/modular_nova/modules/reagent_forging/code/forge_clothing.dm
new file mode 100644
index 00000000000..f494983e086
--- /dev/null
+++ b/modular_nova/modules/reagent_forging/code/forge_clothing.dm
@@ -0,0 +1,172 @@
+// Vests
+/obj/item/clothing/suit/armor/forging_plate_armor
+ name = "reagent plate vest"
+ desc = "An armor vest made of hammered, interlocking plates."
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
+ worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
+ worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
+ icon_state = "plate_vest"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ resistance_flags = FIRE_PROOF
+ skyrat_obj_flags = ANVIL_REPAIR
+ armor_type = /datum/armor/armor_forging_plate_armor
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+
+/datum/armor/armor_forging_plate_armor
+ melee = 40
+ bullet = 40
+ fire = 50
+ wound = 30
+
+/obj/item/clothing/suit/armor/forging_plate_armor/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 4)
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_OCLOTHING)
+
+ allowed += /obj/item/forging/reagent_weapon
+
+// Gloves
+/obj/item/clothing/gloves/forging_plate_gloves
+ name = "reagent plate gloves"
+ desc = "A set of leather gloves with protective armor plates connected to the wrists."
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
+ worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
+ worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
+ icon_state = "plate_gloves"
+ resistance_flags = FIRE_PROOF
+ skyrat_obj_flags = ANVIL_REPAIR
+ armor_type = /datum/armor/gloves_forging_plate_gloves
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+
+/datum/armor/gloves_forging_plate_gloves
+ melee = 40
+ bullet = 40
+ fire = 50
+ wound = 30
+
+/obj/item/clothing/gloves/forging_plate_gloves/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 4)
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES)
+
+// Helmets
+/obj/item/clothing/head/helmet/forging_plate_helmet
+ name = "reagent plate helmet"
+ desc = "A helmet out of hammered plates with a leather neck guard and chin strap."
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
+ worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
+ worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
+ icon_state = "plate_helmet"
+ supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
+ resistance_flags = FIRE_PROOF
+ flags_inv = null
+ skyrat_obj_flags = ANVIL_REPAIR
+ armor_type = /datum/armor/helmet_forging_plate_helmet
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+
+/datum/armor/helmet_forging_plate_helmet
+ melee = 40
+ bullet = 40
+ fire = 50
+ wound = 30
+
+/obj/item/clothing/head/helmet/forging_plate_helmet/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 4)
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HEAD)
+
+// Boots
+/obj/item/clothing/shoes/forging_plate_boots
+ name = "reagent plate boots"
+ desc = "A pair of leather boots with protective armor plates over the shins and toes."
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
+ worn_icon_digi = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi'
+ worn_icon_better_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
+ worn_icon_vox = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
+ worn_icon_teshari = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
+ icon_state = "plate_boots"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
+ armor_type = /datum/armor/shoes_forging_plate_boots
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+ resistance_flags = FIRE_PROOF
+ skyrat_obj_flags = ANVIL_REPAIR
+ can_be_tied = FALSE
+
+/datum/armor/shoes_forging_plate_boots
+ melee = 20
+ bullet = 20
+
+/obj/item/clothing/shoes/forging_plate_boots/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 2)
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET)
+
+/obj/item/clothing/shoes/horseshoe
+ name = "reagent horseshoe"
+ desc = "A pair of horseshoes made out of chains."
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
+ icon_state = "horseshoe"
+ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
+ armor_type = /datum/armor/shoes_horseshoe
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+ resistance_flags = FIRE_PROOF
+ skyrat_obj_flags = ANVIL_REPAIR
+ can_be_tied = FALSE
+
+/datum/armor/shoes_horseshoe
+ melee = 20
+ bullet = 20
+
+/obj/item/clothing/shoes/horseshoe/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/armor_plate, 2)
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET)
+
+// Misc
+/obj/item/clothing/gloves/ring/reagent_clothing
+ name = "reagent ring"
+ desc = "A tiny ring, sized to wrap around a finger."
+ icon_state = "ringsilver"
+ worn_icon_state = "sring"
+ inhand_icon_state = null
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+ skyrat_obj_flags = ANVIL_REPAIR
+
+/obj/item/clothing/gloves/ring/reagent_clothing/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES)
+
+/obj/item/clothing/neck/collar/reagent_clothing
+ name = "reagent collar"
+ desc = "A collar that is ready to be worn for certain individuals."
+ icon = 'modular_nova/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
+ worn_icon = 'modular_nova/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
+ icon_state = "collar_cyan"
+ inhand_icon_state = null
+ body_parts_covered = NECK
+ slot_flags = ITEM_SLOT_NECK
+ w_class = WEIGHT_CLASS_SMALL
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+ skyrat_obj_flags = ANVIL_REPAIR
+
+/obj/item/clothing/neck/collar/reagent_clothing/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_NECK)
+
+/obj/item/restraints/handcuffs/reagent_clothing
+ name = "reagent handcuffs"
+ desc = "A pair of handcuffs that are ready to keep someone captive."
+ material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
+ skyrat_obj_flags = ANVIL_REPAIR
+
+/obj/item/restraints/handcuffs/reagent_clothing/Initialize(mapload)
+ . = ..()
+ AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HANDCUFFED)
diff --git a/modular_skyrat/modules/reagent_forging/code/forge_items.dm b/modular_nova/modules/reagent_forging/code/forge_items.dm
similarity index 95%
rename from modular_skyrat/modules/reagent_forging/code/forge_items.dm
rename to modular_nova/modules/reagent_forging/code/forge_items.dm
index 50ffdd078dd..7827704a0dc 100644
--- a/modular_skyrat/modules/reagent_forging/code/forge_items.dm
+++ b/modular_nova/modules/reagent_forging/code/forge_items.dm
@@ -22,9 +22,9 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list(
))
/obj/item/forging
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi'
- lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
- righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi'
+ lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
+ righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
toolspeed = 1 SECONDS
///whether the item is in use or not
var/in_use = FALSE
@@ -32,7 +32,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list(
/obj/item/forging/tongs
name = "forging tongs"
desc = "A set of tongs specifically crafted for use in forging. A wise man once said 'I lift things up and put them down.'"
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi'
icon_state = "tong_empty"
tool_behaviour = TOOL_TONG
@@ -175,7 +175,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list(
/obj/item/forging/incomplete/rail_nail
name = "incomplete rail nail"
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "hot_nail"
average_hits = 10
average_wait = 0.5 SECONDS
@@ -183,7 +183,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list(
/obj/item/forging/incomplete/rail_cart
name = "incomplete rail cart"
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "hot_cart"
spawn_item = /obj/vehicle/ridden/rail_cart
@@ -272,7 +272,7 @@ GLOBAL_LIST_INIT(allowed_forging_materials, list(
/obj/item/forging/complete/rail_nail
name = "rail nail"
desc = "A nail, ready to be used with some wood in order to make tracks."
- icon = 'modular_skyrat/modules/ashwalkers/icons/railroad.dmi'
+ icon = 'modular_nova/modules/ashwalkers/icons/railroad.dmi'
icon_state = "nail"
spawning_item = /obj/item/stack/rail_track/ten
diff --git a/modular_skyrat/modules/reagent_forging/code/forge_recipes.dm b/modular_nova/modules/reagent_forging/code/forge_recipes.dm
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/code/forge_recipes.dm
rename to modular_nova/modules/reagent_forging/code/forge_recipes.dm
diff --git a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm b/modular_nova/modules/reagent_forging/code/forge_weapons.dm
similarity index 94%
rename from modular_skyrat/modules/reagent_forging/code/forge_weapons.dm
rename to modular_nova/modules/reagent_forging/code/forge_weapons.dm
index c30aeb2ffc2..10efef32e33 100644
--- a/modular_skyrat/modules/reagent_forging/code/forge_weapons.dm
+++ b/modular_nova/modules/reagent_forging/code/forge_weapons.dm
@@ -1,8 +1,8 @@
/obj/item/forging/reagent_weapon
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi'
- lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
- righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi'
+ lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
+ righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi'
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
obj_flags = UNIQUE_RENAME
skyrat_obj_flags = ANVIL_REPAIR
@@ -168,13 +168,13 @@
/obj/item/shield/buckler/reagent_weapon //Same as a buckler, but metal.
name = "reagent plated buckler shield"
desc = "A small, round shield best used in tandem with a melee weapon in close-quarters combat."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi'
icon_state = "buckler"
inhand_icon_state = "buckler"
worn_icon_state = "buckler_back"
- lefthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
- righthand_file = 'modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
+ lefthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi'
+ righthand_file = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi'
custom_materials = list(/datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT)
resistance_flags = FIRE_PROOF
block_chance = 30
@@ -293,6 +293,8 @@
else
playsound(src, 'sound/weapons/parry.ogg', 75, TRUE)
owner.visible_message(span_danger("[owner] parries [attack_text] with [src]!"))
+ var/owner_turf = get_turf(owner)
+ new block_effect(owner_turf, COLOR_YELLOW)
return TRUE
return FALSE
diff --git a/modular_skyrat/modules/reagent_forging/code/reagent_component.dm b/modular_nova/modules/reagent_forging/code/reagent_component.dm
similarity index 97%
rename from modular_skyrat/modules/reagent_forging/code/reagent_component.dm
rename to modular_nova/modules/reagent_forging/code/reagent_component.dm
index 02f93269c94..fcffd58d779 100644
--- a/modular_skyrat/modules/reagent_forging/code/reagent_component.dm
+++ b/modular_nova/modules/reagent_forging/code/reagent_component.dm
@@ -34,7 +34,7 @@
RegisterSignal(parent_clothing, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
START_PROCESSING(SSdcs, src)
-/datum/component/reagent_clothing/Destroy(force, silent)
+/datum/component/reagent_clothing/Destroy(force)
parent_clothing = null
cloth_wearer = null
QDEL_NULL(applying_container)
@@ -88,7 +88,7 @@
RegisterSignal(parent_weapon, COMSIG_ITEM_ATTACK, PROC_REF(inject_attacked))
RegisterSignal(parent_weapon, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
-/datum/component/reagent_weapon/Destroy(force, silent)
+/datum/component/reagent_weapon/Destroy(force)
parent_weapon = null
return ..()
diff --git a/modular_skyrat/modules/reagent_forging/code/smith_skill.dm b/modular_nova/modules/reagent_forging/code/smith_skill.dm
similarity index 83%
rename from modular_skyrat/modules/reagent_forging/code/smith_skill.dm
rename to modular_nova/modules/reagent_forging/code/smith_skill.dm
index 1170f957fc0..e54c8718495 100644
--- a/modular_skyrat/modules/reagent_forging/code/smith_skill.dm
+++ b/modular_nova/modules/reagent_forging/code/smith_skill.dm
@@ -12,7 +12,7 @@
name = "legendary smithy's cloak"
desc = "Worn by the most skilled smithies, this legendary cloak is only attainable by knowing every inch of the blacksmith's forge. \
This status symbol represents a being who has forged some of the finest weapons and armors."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi'
+ worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/neck.dmi'
icon_state = "smithingcloak"
associated_skill_path = /datum/skill/smithing
diff --git a/modular_skyrat/modules/reagent_forging/code/tool_override.dm b/modular_nova/modules/reagent_forging/code/tool_override.dm
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/code/tool_override.dm
rename to modular_nova/modules/reagent_forging/code/tool_override.dm
diff --git a/modular_skyrat/modules/reagent_forging/code/water_basin.dm b/modular_nova/modules/reagent_forging/code/water_basin.dm
similarity index 95%
rename from modular_skyrat/modules/reagent_forging/code/water_basin.dm
rename to modular_nova/modules/reagent_forging/code/water_basin.dm
index 895dc3f77b1..8b4318d7f63 100644
--- a/modular_skyrat/modules/reagent_forging/code/water_basin.dm
+++ b/modular_nova/modules/reagent_forging/code/water_basin.dm
@@ -1,7 +1,7 @@
/obj/structure/reagent_water_basin
name = "water basin"
desc = "A basin full of water, ready to quench the hot metal."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi'
+ icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi'
icon_state = "water_basin"
anchored = TRUE
density = TRUE
@@ -71,7 +71,7 @@
if(!search_incomplete)
return ITEM_INTERACT_SUCCESS
- playsound(src, 'modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg', 50, TRUE)
+ playsound(src, 'modular_nova/modules/reagent_forging/sound/hot_hiss.ogg', 50, TRUE)
if(search_incomplete?.times_hit < search_incomplete.average_hits)
to_chat(user, span_warning("You cool down [search_incomplete], but it wasn't ready yet."))
diff --git a/modular_skyrat/modules/reagent_forging/icons/hud/forge_radials.dmi b/modular_nova/modules/reagent_forging/icons/hud/forge_radials.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/hud/forge_radials.dmi
rename to modular_nova/modules/reagent_forging/icons/hud/forge_radials.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi b/modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_l.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_l.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_r.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_r.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi b/modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi b/modular_nova/modules/reagent_forging/icons/mob/neck.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/mob/neck.dmi
rename to modular_nova/modules/reagent_forging/icons/mob/neck.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi b/modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/obj/cloaks.dmi
rename to modular_nova/modules/reagent_forging/icons/obj/cloaks.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi
rename to modular_nova/modules/reagent_forging/icons/obj/forge_clothing.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/obj/forge_items.dmi
rename to modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi
diff --git a/modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi b/modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/icons/obj/forge_structures.dmi
rename to modular_nova/modules/reagent_forging/icons/obj/forge_structures.dmi
diff --git a/modular_skyrat/modules/reagent_forging/readme.md b/modular_nova/modules/reagent_forging/readme.md
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/readme.md
rename to modular_nova/modules/reagent_forging/readme.md
diff --git a/modular_skyrat/modules/reagent_forging/sound/forge.ogg b/modular_nova/modules/reagent_forging/sound/forge.ogg
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/sound/forge.ogg
rename to modular_nova/modules/reagent_forging/sound/forge.ogg
diff --git a/modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg b/modular_nova/modules/reagent_forging/sound/hot_hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/reagent_forging/sound/hot_hiss.ogg
rename to modular_nova/modules/reagent_forging/sound/hot_hiss.ogg
diff --git a/modular_skyrat/modules/records_on_examine/code/record_manifest.dm b/modular_nova/modules/records_on_examine/code/record_manifest.dm
similarity index 100%
rename from modular_skyrat/modules/records_on_examine/code/record_manifest.dm
rename to modular_nova/modules/records_on_examine/code/record_manifest.dm
diff --git a/modular_skyrat/modules/records_on_examine/code/record_variables.dm b/modular_nova/modules/records_on_examine/code/record_variables.dm
similarity index 100%
rename from modular_skyrat/modules/records_on_examine/code/record_variables.dm
rename to modular_nova/modules/records_on_examine/code/record_variables.dm
diff --git a/modular_skyrat/modules/records_on_examine/code/records_procs.dm b/modular_nova/modules/records_on_examine/code/records_procs.dm
similarity index 100%
rename from modular_skyrat/modules/records_on_examine/code/records_procs.dm
rename to modular_nova/modules/records_on_examine/code/records_procs.dm
diff --git a/modular_skyrat/modules/records_on_examine/code/view_exploitables.dm b/modular_nova/modules/records_on_examine/code/view_exploitables.dm
similarity index 100%
rename from modular_skyrat/modules/records_on_examine/code/view_exploitables.dm
rename to modular_nova/modules/records_on_examine/code/view_exploitables.dm
diff --git a/modular_skyrat/modules/records_on_examine/readme.md b/modular_nova/modules/records_on_examine/readme.md
similarity index 100%
rename from modular_skyrat/modules/records_on_examine/readme.md
rename to modular_nova/modules/records_on_examine/readme.md
diff --git a/modular_skyrat/modules/resleeving/code/research/resleeving_research.dm b/modular_nova/modules/resleeving/code/research/resleeving_research.dm
similarity index 100%
rename from modular_skyrat/modules/resleeving/code/research/resleeving_research.dm
rename to modular_nova/modules/resleeving/code/research/resleeving_research.dm
diff --git a/modular_skyrat/modules/resleeving/code/rsd_interface.dm b/modular_nova/modules/resleeving/code/rsd_interface.dm
similarity index 96%
rename from modular_skyrat/modules/resleeving/code/rsd_interface.dm
rename to modular_nova/modules/resleeving/code/rsd_interface.dm
index 106bb11ea38..38e31ec88f3 100644
--- a/modular_skyrat/modules/resleeving/code/rsd_interface.dm
+++ b/modular_nova/modules/resleeving/code/rsd_interface.dm
@@ -1,7 +1,7 @@
/obj/item/rsd_interface
name = "RSD Phylactery"
desc = "A small device inserted, typically, into inert brains. As Resonance cannot persist in what's referred to as a 'vacuum', RSDs--much like the brains and CPUs they emulate--employ cerebral white noise as a foundation for Resonance to persist in otherwise dead-quiet containers.."
- icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi'
+ icon = 'modular_nova/modules/aesthetics/implanter/implanter.dmi'
icon_state = "implanter1"
inhand_icon_state = "syringe_0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
diff --git a/modular_skyrat/modules/rod-stopper/code/immovable_skyrat.dm b/modular_nova/modules/rod-stopper/code/immovable_skyrat.dm
similarity index 100%
rename from modular_skyrat/modules/rod-stopper/code/immovable_skyrat.dm
rename to modular_nova/modules/rod-stopper/code/immovable_skyrat.dm
diff --git a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm b/modular_nova/modules/rod-stopper/code/rodstopper.dm
similarity index 94%
rename from modular_skyrat/modules/rod-stopper/code/rodstopper.dm
rename to modular_nova/modules/rod-stopper/code/rodstopper.dm
index 3daf59560ae..fcda0819db3 100644
--- a/modular_skyrat/modules/rod-stopper/code/rodstopper.dm
+++ b/modular_nova/modules/rod-stopper/code/rodstopper.dm
@@ -10,7 +10,7 @@
/obj/machinery/rodstopper
name = "rodstopper"
desc = "An advanced machine which can halt immovable rods."
- icon = 'modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi'
+ icon = 'modular_nova/modules/rod-stopper/icons/rodstopper.dmi'
icon_state = "rodstopper"
density = TRUE
use_power = NO_POWER_USE
diff --git a/modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi b/modular_nova/modules/rod-stopper/icons/rodstopper.dmi
similarity index 100%
rename from modular_skyrat/modules/rod-stopper/icons/rodstopper.dmi
rename to modular_nova/modules/rod-stopper/icons/rodstopper.dmi
diff --git a/modular_skyrat/modules/salon/code/barber.dm b/modular_nova/modules/salon/code/barber.dm
similarity index 95%
rename from modular_skyrat/modules/salon/code/barber.dm
rename to modular_nova/modules/salon/code/barber.dm
index 03ebc52e6a8..0e6074cb560 100644
--- a/modular_skyrat/modules/salon/code/barber.dm
+++ b/modular_nova/modules/salon/code/barber.dm
@@ -38,7 +38,7 @@
/obj/structure/closet/secure_closet/barber
name = "barber's locker"
icon_state = "barber"
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
req_access = list(ACCESS_BARBER)
/obj/structure/closet/secure_closet/barber/PopulateContents()
@@ -64,5 +64,5 @@
/obj/effect/landmark/start/barber
name = "Barber"
icon_state = "Barber"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
diff --git a/modular_nova/modules/salon/code/barber_chair.dm b/modular_nova/modules/salon/code/barber_chair.dm
new file mode 100644
index 00000000000..d2289dda2e6
--- /dev/null
+++ b/modular_nova/modules/salon/code/barber_chair.dm
@@ -0,0 +1,5 @@
+/obj/structure/chair/comfy/barber_chair
+ name = "barber's chair"
+ desc = "You sit in this, and your hair shall be cut."
+ icon = 'modular_nova/modules/salon/icons/chair.dmi'
+ icon_state = "barber_chair"
diff --git a/modular_skyrat/modules/salon/code/barbervend.dm b/modular_nova/modules/salon/code/barbervend.dm
similarity index 96%
rename from modular_skyrat/modules/salon/code/barbervend.dm
rename to modular_nova/modules/salon/code/barbervend.dm
index bc6d5fb1bb4..bd8580eb2b3 100644
--- a/modular_skyrat/modules/salon/code/barbervend.dm
+++ b/modular_nova/modules/salon/code/barbervend.dm
@@ -1,7 +1,7 @@
/obj/machinery/vending/barbervend
name = "Fab-O-Vend"
desc = "It would seem it vends dyes, and other stuff to make you pretty."
- icon = 'modular_skyrat/modules/salon/icons/vendor.dmi'
+ icon = 'modular_nova/modules/salon/icons/vendor.dmi'
icon_state = "barbervend"
product_slogans = "Spread the colour, like butter, onto toast... Onto their hair.; Sometimes, I dream about dyes...; Paint 'em up and call me Mr. Painter.; Look brother, I'm a vendomat, I solve practical problems."
product_ads = "Cut 'em all!; To sheds!; Hair be gone!; Prettify!; Beautify!"
diff --git a/modular_nova/modules/salon/code/clothing.dm b/modular_nova/modules/salon/code/clothing.dm
new file mode 100644
index 00000000000..29582414cec
--- /dev/null
+++ b/modular_nova/modules/salon/code/clothing.dm
@@ -0,0 +1,6 @@
+/obj/item/clothing/under/rank/barber
+ desc = "Stark white pants and a fancy hot-pink shirt with a low neckline, though its preferred to wear it even lower. It's the hottest new trend, darling!"
+ name = "barber's uniform"
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/civilian.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/civilian.dmi'
+ icon_state = "barber"
diff --git a/modular_skyrat/modules/salon/code/fur_dyer.dm b/modular_nova/modules/salon/code/fur_dyer.dm
similarity index 98%
rename from modular_skyrat/modules/salon/code/fur_dyer.dm
rename to modular_nova/modules/salon/code/fur_dyer.dm
index 6a268d81878..03aa13358b7 100644
--- a/modular_skyrat/modules/salon/code/fur_dyer.dm
+++ b/modular_nova/modules/salon/code/fur_dyer.dm
@@ -4,7 +4,7 @@
/obj/item/fur_dyer
name = "electric fur dyer"
desc = "Dye that is capable of recoloring fur in a mostly permanent way."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "fur_sprayer"
w_class = WEIGHT_CLASS_TINY
diff --git a/modular_skyrat/modules/salon/code/hair_tie.dm b/modular_nova/modules/salon/code/hair_tie.dm
similarity index 94%
rename from modular_skyrat/modules/salon/code/hair_tie.dm
rename to modular_nova/modules/salon/code/hair_tie.dm
index 7276071e4eb..ba93cc6a79d 100644
--- a/modular_skyrat/modules/salon/code/hair_tie.dm
+++ b/modular_nova/modules/salon/code/hair_tie.dm
@@ -1,12 +1,12 @@
/obj/item/clothing/head/hair_tie
name = "hair tie"
desc = "An elastic hair tie, made to hold your hair up!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairtie"
- worn_icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ worn_icon = 'modular_nova/modules/salon/icons/items.dmi'
worn_icon_state = "hair_tie_worn_no_icon"
- lefthand_file = 'modular_skyrat/modules/salon/icons/items.dmi'
- righthand_file = 'modular_skyrat/modules/salon/icons/items.dmi'
+ lefthand_file = 'modular_nova/modules/salon/icons/items.dmi'
+ righthand_file = 'modular_nova/modules/salon/icons/items.dmi'
inhand_icon_state = "hair_tie_worn_no_icon"
w_class = WEIGHT_CLASS_TINY
custom_price = PAYCHECK_CREW * 0.2
@@ -117,7 +117,7 @@
qdel(src)
/obj/projectile/bullet/hair_tie
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairtie"
hitsound = 'sound/weapons/genhit.ogg'
damage = 0 //its just about the knockdown
diff --git a/modular_skyrat/modules/salon/code/hand_dryer.dm b/modular_nova/modules/salon/code/hand_dryer.dm
similarity index 83%
rename from modular_skyrat/modules/salon/code/hand_dryer.dm
rename to modular_nova/modules/salon/code/hand_dryer.dm
index 196b271c6b9..bf7904dd2af 100644
--- a/modular_skyrat/modules/salon/code/hand_dryer.dm
+++ b/modular_nova/modules/salon/code/hand_dryer.dm
@@ -1,7 +1,7 @@
/obj/machinery/dryer
name = "hand dryer"
desc = "The Breath Of Lizards-3000, an experimental dryer."
- icon = 'modular_skyrat/modules/salon/icons/dryer.dmi'
+ icon = 'modular_nova/modules/salon/icons/dryer.dmi'
icon_state = "dryer"
density = FALSE
anchored = TRUE
@@ -19,7 +19,7 @@
return
to_chat(user, span_notice("You start drying your hands."))
- playsound(src, 'modular_skyrat/modules/salon/sound/drying.ogg', 50)
+ playsound(src, 'modular_nova/modules/salon/sound/drying.ogg', 50)
add_fingerprint(user)
busy = TRUE
if(do_after(user, 4 SECONDS, src))
diff --git a/modular_nova/modules/salon/code/misc_items.dm b/modular_nova/modules/salon/code/misc_items.dm
new file mode 100644
index 00000000000..41c56096cb9
--- /dev/null
+++ b/modular_nova/modules/salon/code/misc_items.dm
@@ -0,0 +1,194 @@
+
+/obj/item/storage/box/lipsticks
+ name = "lipstick box"
+
+/obj/item/storage/box/lipsticks/PopulateContents()
+ ..()
+ new /obj/item/lipstick(src)
+ new /obj/item/lipstick/purple(src)
+ new /obj/item/lipstick/jade(src)
+ new /obj/item/lipstick/black(src)
+
+/obj/item/lipstick/quantum
+ name = "quantum lipstick"
+
+/obj/item/lipstick/quantum/attack(mob/attacked_mob, mob/user)
+ if(!open || !ismob(attacked_mob))
+ return
+
+ if(!ishuman(attacked_mob))
+ to_chat(user, span_warning("Where are the lips on that?"))
+ return
+
+ INVOKE_ASYNC(src, PROC_REF(async_set_color), attacked_mob, user)
+
+/obj/item/lipstick/quantum/proc/async_set_color(mob/attacked_mob, mob/user)
+ var/new_color = input(
+ user,
+ "Select lipstick color",
+ null,
+ COLOR_WHITE,
+ ) as color | null
+
+ var/mob/living/carbon/human/target = attacked_mob
+ if(target.is_mouth_covered())
+ to_chat(user, span_warning("Remove [ target == user ? "your" : "[target.p_their()]" ] mask!"))
+ return
+ if(target.lip_style) //if they already have lipstick on
+ to_chat(user, span_warning("You need to wipe off the old lipstick first!"))
+ return
+
+ if(target == user)
+ user.visible_message(span_notice("[user] does [user.p_their()] lips with \the [src]."), \
+ span_notice("You take a moment to apply \the [src]. Perfect!"))
+ target.update_lips("lipstick", new_color, lipstick_trait)
+ return
+
+ user.visible_message(span_warning("[user] begins to do [target]'s lips with \the [src]."), \
+ span_notice("You begin to apply \the [src] on [target]'s lips..."))
+ if(!do_after(user, 2 SECONDS, target = target))
+ return
+ user.visible_message(span_notice("[user] does [target]'s lips with \the [src]."), \
+ span_notice("You apply \the [src] on [target]'s lips."))
+ target.update_lips("lipstick", new_color, lipstick_trait)
+
+/obj/item/hairbrush/comb
+ name = "comb"
+ desc = "A rather simple tool, used to straighten out hair and knots in it."
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
+ icon_state = "blackcomb"
+
+/obj/item/hairstyle_preview_magazine
+ name = "hip hairstyles magazine"
+ desc = "A magazine featuring a magnitude of hairsytles!"
+
+/obj/item/hairstyle_preview_magazine/ui_interact(mob/user, datum/tgui/ui)
+ . = ..()
+ // A simple GUI with a list of hairstyles and a view, so people can choose a hairstyle!
+
+/obj/effect/decal/cleanable/hair
+ name = "hair cuttings"
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
+ icon_state = "cut_hair"
+
+/obj/item/razor
+ name = "electric razor"
+ desc = "The latest and greatest power razor born from the science of shaving."
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
+ icon_state = "razor"
+ obj_flags = CONDUCTS_ELECTRICITY
+ w_class = WEIGHT_CLASS_TINY
+ // How long do we take to shave someone's (facial) hair?
+ var/shaving_time = 5 SECONDS
+
+/obj/item/razor/suicide_act(mob/living/carbon/user)
+ user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!"))
+ shave(user, BODY_ZONE_PRECISE_MOUTH)
+ shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever
+ return BRUTELOSS
+
+/obj/item/razor/proc/shave(mob/living/carbon/human/target_human, location = BODY_ZONE_PRECISE_MOUTH)
+ if(location == BODY_ZONE_PRECISE_MOUTH)
+ target_human.set_facial_hairstyle("Shaved", update = TRUE)
+ else
+ target_human.set_hairstyle("Bald", update = TRUE)
+
+ playsound(loc, 'sound/items/unsheath.ogg', 20, TRUE)
+
+
+/obj/item/razor/attack(mob/attacked_mob, mob/living/user)
+ if(!ishuman(attacked_mob))
+ return ..()
+
+ var/mob/living/carbon/human/target_human = attacked_mob
+ var/location = user.zone_selected
+ var/obj/item/bodypart/head/noggin = target_human.get_bodypart(BODY_ZONE_HEAD)
+ var/static/list/head_zones = list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)
+
+ if(!noggin && (location in head_zones))
+ to_chat(user, span_warning("[target_human] doesn't have a head!"))
+ return
+
+ if(!(location in head_zones) && !user.combat_mode)
+ to_chat(user, span_warning("You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\""))
+ return
+
+ if(location == BODY_ZONE_PRECISE_MOUTH)
+ if(!(noggin.head_flags & HEAD_FACIAL_HAIR))
+ to_chat(user, span_warning("There is no facial hair to shave!"))
+ return
+
+ if(!get_location_accessible(target_human, location))
+ to_chat(user, span_warning("The mask is in the way!"))
+ return
+
+ if(HAS_TRAIT(target_human, TRAIT_SHAVED))
+ to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved."))
+ return
+
+ if(target_human.facial_hairstyle == "Shaved")
+ to_chat(user, span_warning("Already clean-shaven!"))
+ return
+
+ var/self_shaving = target_human == user // Shaving yourself?
+ user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \
+ span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]..."))
+
+ if(do_after(user, shaving_time, target = target_human))
+ user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \
+ span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!"))
+
+ shave(target_human, location)
+
+ else if(location == BODY_ZONE_HEAD)
+ if(!(noggin.head_flags & HEAD_HAIR))
+ to_chat(user, span_warning("There is no hair to shave!"))
+ return
+
+ if(!get_location_accessible(target_human, location))
+ to_chat(user, span_warning("The headgear is in the way!"))
+ return
+
+ if(target_human.hairstyle == "Bald" || target_human.hairstyle == "Balding Hair" || target_human.hairstyle == "Skinhead")
+ to_chat(user, span_warning("There is not enough hair left to shave!"))
+ return
+
+ if(HAS_TRAIT(target_human, TRAIT_SHAVED))
+ to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved."))
+ return
+
+ var/self_shaving = target_human == user // Shaving yourself?
+ user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \
+ span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]..."))
+
+ if(do_after(user, shaving_time, target = target_human))
+ user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \
+ span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!"))
+
+ shave(target_human, location)
+
+ return
+
+ return ..()
+
+/obj/structure/sign/barber
+ name = "barbershop sign"
+ desc = "A glowing red-blue-white stripe you won't mistake for any other!"
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
+ icon_state = "barber"
+ buildable_sign = FALSE // Don't want them removed, they look too jank.
+
+/obj/item/storage/box/perfume
+ name = "box of perfumes"
+
+/obj/item/storage/box/perfume/PopulateContents()
+ new /obj/item/perfume/cologne(src)
+ new /obj/item/perfume/wood(src)
+ new /obj/item/perfume/rose(src)
+ new /obj/item/perfume/jasmine(src)
+ new /obj/item/perfume/mint(src)
+ new /obj/item/perfume/vanilla(src)
+ new /obj/item/perfume/pear(src)
+ new /obj/item/perfume/strawberry(src)
+ new /obj/item/perfume/cherry(src)
+ new /obj/item/perfume/amber(src)
diff --git a/modular_skyrat/modules/salon/code/pipette.dm b/modular_nova/modules/salon/code/pipette.dm
similarity index 84%
rename from modular_skyrat/modules/salon/code/pipette.dm
rename to modular_nova/modules/salon/code/pipette.dm
index 84b27f480b6..97cdab2713e 100644
--- a/modular_skyrat/modules/salon/code/pipette.dm
+++ b/modular_nova/modules/salon/code/pipette.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/dropper/precision
name = "pipette"
desc = "A high precision pippette. Holds 1 unit."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "pipette1"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
diff --git a/modular_skyrat/modules/salon/code/scissors.dm b/modular_nova/modules/salon/code/scissors.dm
similarity index 93%
rename from modular_skyrat/modules/salon/code/scissors.dm
rename to modular_nova/modules/salon/code/scissors.dm
index fa3dea70c4f..2fe0995550a 100644
--- a/modular_skyrat/modules/salon/code/scissors.dm
+++ b/modular_nova/modules/salon/code/scissors.dm
@@ -1,7 +1,7 @@
/obj/item/scissors
name = "barber's scissors"
desc = "Some say a barbers best tool is his electric razor, that is not the case. These are used to cut hair in a professional way!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "scissors"
w_class = WEIGHT_CLASS_TINY
sharpness = SHARP_EDGED
@@ -47,7 +47,7 @@
to_chat(user, span_notice("You begin to masterfully sculpt [target_human]'s hair!"))
- playsound(target_human, 'modular_skyrat/modules/salon/sound/haircut.ogg', 100)
+ playsound(target_human, 'modular_nova/modules/salon/sound/haircut.ogg', 100)
if(do_after(user, haircut_duration, target_human))
target_human.set_hairstyle(hair_id, update = TRUE)
@@ -67,7 +67,7 @@
to_chat(user, "You begin to masterfully sculpt [target_human]'s facial hair!")
- playsound(target_human, 'modular_skyrat/modules/salon/sound/haircut.ogg', 100)
+ playsound(target_human, 'modular_nova/modules/salon/sound/haircut.ogg', 100)
if(do_after(user, facial_haircut_duration, target_human))
target_human.set_facial_hairstyle(facial_hair_id, update = TRUE)
diff --git a/modular_skyrat/modules/salon/code/sprays.dm b/modular_nova/modules/salon/code/sprays.dm
similarity index 85%
rename from modular_skyrat/modules/salon/code/sprays.dm
rename to modular_nova/modules/salon/code/sprays.dm
index 8563d3041a8..32600d2c2f3 100644
--- a/modular_skyrat/modules/salon/code/sprays.dm
+++ b/modular_nova/modules/salon/code/sprays.dm
@@ -1,7 +1,7 @@
/obj/item/reagent_containers/spray/quantum_hair_dye
name = "quantum hair dye"
desc = "Changes hair colour RANDOMLY! Don't forget to read the label!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairspraywhite"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(1, 5)
@@ -11,7 +11,7 @@
/obj/item/reagent_containers/spray/baldium
name = "baldium spray"
desc = "Causes baldness, exessive use may cause customer disatisfaction."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairremoval"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(1, 5)
@@ -21,7 +21,7 @@
/obj/item/reagent_containers/spray/barbers_aid
name = "barber's aid"
desc = "Causes rapid hair and facial hair growth!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairaccelerator"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(1, 5)
@@ -31,7 +31,7 @@
/obj/item/reagent_containers/spray/super_barbers_aid
name = "super barber's aid"
desc = "Causes SUPER rapid hair and facial hair growth!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "hairaccelerator"
amount_per_transfer_from_this = 1
possible_transfer_amounts = list(1, 5)
diff --git a/modular_skyrat/modules/salon/code/straight_razor.dm b/modular_nova/modules/salon/code/straight_razor.dm
similarity index 97%
rename from modular_skyrat/modules/salon/code/straight_razor.dm
rename to modular_nova/modules/salon/code/straight_razor.dm
index e6e85f7e160..3d9f5cf0439 100644
--- a/modular_skyrat/modules/salon/code/straight_razor.dm
+++ b/modular_nova/modules/salon/code/straight_razor.dm
@@ -1,7 +1,7 @@
/obj/item/straight_razor
name = "straight razor"
desc = "A very sharp blade, mostly used for shaving faces..."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
+ icon = 'modular_nova/modules/salon/icons/items.dmi'
icon_state = "straight_razor"
force = 12
throw_speed = 3
diff --git a/modular_skyrat/modules/salon/icons/chair.dmi b/modular_nova/modules/salon/icons/chair.dmi
similarity index 100%
rename from modular_skyrat/modules/salon/icons/chair.dmi
rename to modular_nova/modules/salon/icons/chair.dmi
diff --git a/modular_skyrat/modules/salon/icons/dryer.dmi b/modular_nova/modules/salon/icons/dryer.dmi
similarity index 100%
rename from modular_skyrat/modules/salon/icons/dryer.dmi
rename to modular_nova/modules/salon/icons/dryer.dmi
diff --git a/modular_skyrat/modules/salon/icons/items.dmi b/modular_nova/modules/salon/icons/items.dmi
similarity index 100%
rename from modular_skyrat/modules/salon/icons/items.dmi
rename to modular_nova/modules/salon/icons/items.dmi
diff --git a/modular_skyrat/modules/salon/icons/mixer.dmi b/modular_nova/modules/salon/icons/mixer.dmi
similarity index 100%
rename from modular_skyrat/modules/salon/icons/mixer.dmi
rename to modular_nova/modules/salon/icons/mixer.dmi
diff --git a/modular_skyrat/modules/salon/icons/vendor.dmi b/modular_nova/modules/salon/icons/vendor.dmi
similarity index 100%
rename from modular_skyrat/modules/salon/icons/vendor.dmi
rename to modular_nova/modules/salon/icons/vendor.dmi
diff --git a/modular_skyrat/modules/salon/sound/drying.ogg b/modular_nova/modules/salon/sound/drying.ogg
similarity index 100%
rename from modular_skyrat/modules/salon/sound/drying.ogg
rename to modular_nova/modules/salon/sound/drying.ogg
diff --git a/modular_skyrat/modules/salon/sound/haircut.ogg b/modular_nova/modules/salon/sound/haircut.ogg
similarity index 100%
rename from modular_skyrat/modules/salon/sound/haircut.ogg
rename to modular_nova/modules/salon/sound/haircut.ogg
diff --git a/modular_skyrat/modules/science_tools/medical_tool_designs.dm b/modular_nova/modules/science_tools/medical_tool_designs.dm
similarity index 100%
rename from modular_skyrat/modules/science_tools/medical_tool_designs.dm
rename to modular_nova/modules/science_tools/medical_tool_designs.dm
diff --git a/modular_nova/modules/science_tools/readme.md b/modular_nova/modules/science_tools/readme.md
new file mode 100644
index 00000000000..c6cb38ede22
--- /dev/null
+++ b/modular_nova/modules/science_tools/readme.md
@@ -0,0 +1,44 @@
+
+
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/24162
+
+## Science tools
+
+Module ID: SCIENCE_TOOLS
+
+### Description: Lets sci print watered down engi tools, and robotics, medical tools.
+
+
+
+### TG Proc/File Changes:
+
+- N/A
+
+
+### Modular Overrides:
+
+- N/A
+
+
+### Defines:
+
+- 2 defines in research.dm
+
+
+### Included files that are not contained in this module:
+
+- ~skyrat_defines/research.dm
+
+
+### Credits:
+
+- Niko: Author
+
+
diff --git a/modular_skyrat/modules/science_tools/research.dm b/modular_nova/modules/science_tools/research.dm
similarity index 100%
rename from modular_skyrat/modules/science_tools/research.dm
rename to modular_nova/modules/science_tools/research.dm
diff --git a/modular_skyrat/modules/science_tools/tool_designs.dm b/modular_nova/modules/science_tools/tool_designs.dm
similarity index 100%
rename from modular_skyrat/modules/science_tools/tool_designs.dm
rename to modular_nova/modules/science_tools/tool_designs.dm
diff --git a/modular_skyrat/modules/science_tools/tools.dm b/modular_nova/modules/science_tools/tools.dm
similarity index 100%
rename from modular_skyrat/modules/science_tools/tools.dm
rename to modular_nova/modules/science_tools/tools.dm
diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer.dm
rename to modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer.dm
diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm
similarity index 86%
rename from modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm
rename to modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm
index 1fb6233002d..33295b8da93 100644
--- a/modular_skyrat/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm
+++ b/modular_nova/modules/sec_haul/code/corrections_officer/corrections_officer_equipment.dm
@@ -1,8 +1,8 @@
/obj/item/clothing/under/rank/security/corrections_officer
desc = "A white satin shirt with some bronze rank pins at the neck."
name = "corrections officer's suit"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "corrections_officer"
armor_type = /datum/armor/clothing_under/security_corrections_officer
can_adjust = FALSE
@@ -34,8 +34,8 @@
/obj/item/clothing/suit/toggle/jacket/corrections_officer
name = "corrections officer's suit jacket"
desc = "A pressed and ironed suit jacket, it has light armor against stabbings. There's some rank badges on the right breast."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "co_coat"
body_parts_covered = CHEST|ARMS
armor_type = /datum/armor/jacket_corrections_officer
@@ -49,7 +49,7 @@
/obj/structure/closet/secure_closet/corrections_officer
name = "corrections officer riot gear"
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
icon_state = "riot"
door_anim_time = 0 //Somebody resprite or remove this 'riot' locker. It's evil.
diff --git a/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm b/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm
new file mode 100644
index 00000000000..c3363ae49c0
--- /dev/null
+++ b/modular_nova/modules/sec_haul/code/corrections_officer/landmarks.dm
@@ -0,0 +1,4 @@
+/obj/effect/landmark/start/corrections_officer
+ name = "Corrections Officer"
+ icon = 'modular_nova/master_files/icons/mob/landmarks.dmi'
+ icon_state = "Corrections Officer"
diff --git a/modular_skyrat/modules/sec_haul/code/guns/ammo.dm b/modular_nova/modules/sec_haul/code/guns/ammo.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/guns/ammo.dm
rename to modular_nova/modules/sec_haul/code/guns/ammo.dm
diff --git a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm
similarity index 97%
rename from modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm
rename to modular_nova/modules/sec_haul/code/guns/armory_spawns.dm
index d6406a59589..862d1357167 100644
--- a/modular_skyrat/modules/sec_haul/code/guns/armory_spawns.dm
+++ b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm
@@ -58,7 +58,7 @@
/obj/item/storage/box/ammo_box
name = "ammo box"
desc = "A box filled with ammunition."
- icon = 'modular_skyrat/modules/microfusion/icons/microfusion_cells.dmi'
+ icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi'
icon_state = "microfusion_box"
illustration = null
layer = 2.9
diff --git a/modular_skyrat/modules/sec_haul/code/guns/bullets.dm b/modular_nova/modules/sec_haul/code/guns/bullets.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/guns/bullets.dm
rename to modular_nova/modules/sec_haul/code/guns/bullets.dm
diff --git a/modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm b/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/guns/cargo_stuff.dm
rename to modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm
diff --git a/modular_skyrat/modules/sec_haul/code/misc/ai_module.dm b/modular_nova/modules/sec_haul/code/misc/ai_module.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/misc/ai_module.dm
rename to modular_nova/modules/sec_haul/code/misc/ai_module.dm
diff --git a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm b/modular_nova/modules/sec_haul/code/misc/bullet_drive.dm
similarity index 96%
rename from modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm
rename to modular_nova/modules/sec_haul/code/misc/bullet_drive.dm
index 7abf5585e08..acfd712fb55 100644
--- a/modular_skyrat/modules/sec_haul/code/misc/bullet_drive.dm
+++ b/modular_nova/modules/sec_haul/code/misc/bullet_drive.dm
@@ -1,7 +1,7 @@
/obj/machinery/dish_drive/bullet
name = "bullet drive"
desc = "A modified verison of the dish drive, for security. Because they're lazy."
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi'
+ icon = 'modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi'
icon_state = "synthesizer"
density = TRUE
circuit = /obj/item/circuitboard/machine/dish_drive/bullet
@@ -25,7 +25,7 @@
if(manual)
visible_message(span_notice("[src] is empty!"))
return
- var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //SKYRAT EDIT CHANGE
+ var/obj/machinery/disposal/bin/bin = locate() in view(binrange, src) //NOVA EDIT CHANGE
if(!bin)
if(manual)
visible_message(span_warning("[src] buzzes. There are no disposal bins in range!"))
diff --git a/modular_nova/modules/sec_haul/code/misc/decals.dm b/modular_nova/modules/sec_haul/code/misc/decals.dm
new file mode 100644
index 00000000000..c95187639fa
--- /dev/null
+++ b/modular_nova/modules/sec_haul/code/misc/decals.dm
@@ -0,0 +1,47 @@
+/obj/effect/turf_decal/stripes/blue
+ icon_state = "warningline_blue"
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+
+/obj/effect/turf_decal/stripes/blue/line
+ icon_state = "warningline_blue"
+
+/obj/effect/turf_decal/stripes/blue/end
+ icon_state = "warn_end_blue"
+
+/obj/effect/turf_decal/stripes/blue/corner
+ icon_state = "warninglinecorner_blue"
+
+/obj/effect/turf_decal/stripes/blue/box
+ icon_state = "warn_box_blue"
+
+/obj/effect/turf_decal/stripes/blue/full
+ icon_state = "warn_full_blue"
+
+/obj/effect/turf_decal/bot_blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "bot_blue"
+
+/obj/effect/turf_decal/caution/stand_clear/blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "stand_clear_blue"
+
+/obj/effect/turf_decal/arrows/blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "arrows_blue"
+
+/obj/effect/turf_decal/box/blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "box_blue"
+
+/obj/effect/turf_decal/box/blue/corners
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "box_corners_blue"
+
+
+/obj/effect/turf_decal/delivery/blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "delivery_blue"
+
+/obj/effect/turf_decal/caution/blue
+ icon = 'modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi'
+ icon_state = "caution_blue"
diff --git a/modular_skyrat/modules/sec_haul/code/misc/packs.dm b/modular_nova/modules/sec_haul/code/misc/packs.dm
similarity index 100%
rename from modular_skyrat/modules/sec_haul/code/misc/packs.dm
rename to modular_nova/modules/sec_haul/code/misc/packs.dm
diff --git a/modular_nova/modules/sec_haul/code/misc/vending.dm b/modular_nova/modules/sec_haul/code/misc/vending.dm
new file mode 100644
index 00000000000..e53986301c0
--- /dev/null
+++ b/modular_nova/modules/sec_haul/code/misc/vending.dm
@@ -0,0 +1,99 @@
+/obj/machinery/vending/security
+ name = "\improper Armadyne Peacekeeper Equipment Vendor"
+ desc = "An Armadyne peacekeeper equipment vendor."
+ product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
+ icon = 'modular_nova/modules/sec_haul/icons/vending/vending.dmi'
+ products = list(
+ /obj/item/restraints/handcuffs = 8,
+ /obj/item/restraints/handcuffs/cable/zipties = 12,
+ /obj/item/grenade/flashbang = 6,
+ /obj/item/assembly/flash/handheld = 8,
+ /obj/item/food/donut/plain = 12,
+ /obj/item/storage/box/evidence = 6,
+ /obj/item/flashlight/seclite = 6,
+ /obj/item/restraints/legcuffs/bola/energy = 10,
+ /obj/item/clothing/gloves/tackler/security = 5,
+ )
+ contraband = list(
+ /obj/item/clothing/glasses/sunglasses = 2,
+ /obj/item/storage/fancy/donut_box = 2,
+ )
+ premium = list(
+ /obj/item/storage/belt/security/webbing = 5,
+ /obj/item/storage/belt/security/webbing/peacekeeper = 5,
+ /obj/item/coin/antagtoken = 1,
+ /obj/item/clothing/head/helmet/blueshirt = 3,
+ /obj/item/clothing/suit/armor/vest/blueshirt = 3,
+ /obj/item/grenade/stingbang = 5,
+ /obj/item/watertank/pepperspray = 2,
+ /obj/item/storage/belt/holster/energy = 4,
+ /obj/item/storage/box/holobadge = 1,
+ )
+
+/obj/item/vending_refill/security
+ machine_name = "Armadyne Peacekeeper Equipment Vendor"
+
+/obj/machinery/vending/wardrobe/sec_wardrobe
+ name = "\improper Peacekeeper Outfitting Station"
+ desc = "A vending machine stocked with Lopland's \"Peacekeeper\" security package, including standardized uniforms and general equipment."
+ icon = 'modular_nova/modules/sec_haul/icons/vending/vending.dmi'
+ light_mask = "sec-light-mask"
+ icon_state = "peace"
+ product_ads = "Beat perps in style!;The stains wash right out!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
+ vend_reply = "Good luck, Peacekeeper!"
+ products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 5,
+ /obj/item/clothing/suit/toggle/jacket/sec = 5,
+ /obj/item/clothing/suit/armor/vest/peacekeeper/brit = 5,
+ /obj/item/clothing/neck/security_cape = 5,
+ /obj/item/clothing/neck/security_cape/armplate = 5,
+ /obj/item/storage/backpack/security = 5,
+ /obj/item/storage/backpack/satchel/sec = 5,
+ /obj/item/storage/backpack/duffelbag/sec = 5,
+ /obj/item/storage/backpack/duffelbag/sec = 5,
+ /obj/item/clothing/under/rank/security/officer = 10,
+ /obj/item/clothing/under/rank/security/officer/skirt = 10,
+ /obj/item/clothing/under/rank/security/peacekeeper = 10,
+ /obj/item/clothing/under/rank/security/skyrat/utility = 3,
+ /obj/item/clothing/shoes/jackboots/sec = 10,
+ /obj/item/clothing/head/security_garrison = 10,
+ /obj/item/clothing/head/security_cap = 10,
+ /obj/item/clothing/head/beret/sec/peacekeeper = 5,
+ /obj/item/clothing/head/helmet/sec/sol = 5,
+ /obj/item/clothing/head/hats/warden/police/patrol = 5,
+ /obj/item/clothing/head/costume/ushanka/sec = 10,
+ /obj/item/clothing/gloves/color/black/security = 10,
+ )
+ premium = list( /obj/item/clothing/under/rank/security/officer/formal = 3,
+ /obj/item/clothing/suit/jacket/officer/blue = 3,
+ /obj/item/clothing/head/beret/sec/navyofficer = 3)
+ payment_department = ACCOUNT_SEC
+ light_color = COLOR_MODERATE_BLUE
+
+/obj/item/vending_refill/wardrobe/sec_wardrobe
+ machine_name = "Peacekeeper Outfitting Station"
+
+//List for the old one, for when its mapped in; curates it nicely, adds /redsec to the items, and also prevents some conflicts with the above vendor
+/obj/machinery/vending/wardrobe/sec_wardrobe/red
+ name = "\improper SecDrobe"
+ desc = "A vending machine for security and security-related clothing!"
+ product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
+ vend_reply = "Thank you for using the SecDrobe!"
+ icon = 'icons/obj/machines/vending.dmi'
+ icon_state = "secdrobe"
+ products = list(/obj/item/clothing/suit/hooded/wintercoat/security/redsec = 3,
+ /obj/item/storage/backpack/security/redsec = 3,
+ /obj/item/storage/backpack/satchel/sec/redsec = 3,
+ /obj/item/storage/backpack/duffelbag/sec/redsec = 3,
+ /obj/item/clothing/under/rank/security/officer/redsec = 3,
+ /obj/item/clothing/shoes/jackboots = 3,
+ /obj/item/clothing/head/beret/sec = 3,
+ /obj/item/clothing/head/soft/sec = 3,
+ /obj/item/clothing/mask/bandana/red = 3,
+ /obj/item/clothing/gloves/color/black = 3,
+ /obj/item/clothing/under/rank/security/officer/skirt = 3,
+ /obj/item/clothing/under/rank/security/skyrat/utility/redsec = 3,
+ /obj/item/clothing/suit/toggle/jacket/sec/old = 3,
+ )
+ premium = list( /obj/item/clothing/under/rank/security/officer/formal = 5,
+ /obj/item/clothing/suit/jacket/officer/tan = 5,
+ /obj/item/clothing/head/beret/sec/navyofficer = 5)
diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm
similarity index 89%
rename from modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm
rename to modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm
index 40110bc3820..a708109ca80 100644
--- a/modular_skyrat/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm
+++ b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm
@@ -3,8 +3,8 @@
desc = "A sleek uniform worn by Armadyne corporate. Its metallic red belt buckle is made in the shape of the Armadyne logo."
icon_state = "armadyne_shirt"
worn_icon_state = "armadyne_shirt"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' //This can probably be moved to centcom.dm when the suits are sorted
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' //This can probably be moved to centcom.dm when the suits are sorted
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/centcom.dmi'
/obj/item/clothing/under/rank/security/peacekeeper/armadyne/tactical
name = "armadyne tactical uniform"
@@ -24,16 +24,16 @@
/obj/item/clothing/suit/armor/hos/trenchcoat/armadyne
name = "armadyne trenchcoat"
desc = "A large and warm Armadyne-red trenchcoat worn by the wealthy higher-ups. A good half of its warmth - and bulk - actually comes from the polymer armor plating beneath it."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "armadyne_trench"
current_skin = "armadyne_trench" //prevents reskinning
/obj/item/clothing/suit/armor/vest/peacekeeper/armadyne
name = "armadyne jacket"
desc = "An Armadyne branded track jacket, with a thin nanocarbon lining inside for protective purposes. Worn by Armadyne corporate, or wealthy supporters."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "armadyne_jacket"
worn_icon_state = "armadyne_jacket"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -51,15 +51,15 @@
/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper/armadyne
name = "armadyne hud glasses"
icon_state = "armadyne_glasses"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
uses_advanced_reskins = FALSE
/obj/item/clothing/gloves/combat/peacekeeper/armadyne
name = "armadyne combat gloves"
desc = "Tactical and sleek. Worn by Armadyne representatives."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "armadyne_gloves"
worn_icon_state = "armadyne_gloves"
cut_type = null
@@ -67,8 +67,8 @@
/obj/item/clothing/shoes/jackboots/peacekeeper/armadyne
name = "armadyne combat boots"
desc = "Tactical and sleek. Worn by Armadyne representatives."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
icon_state = "armadyne_boots"
inhand_icon_state = "jackboots"
worn_icon_state = "armadyne_boots"
@@ -77,16 +77,16 @@
/obj/item/storage/belt/security/webbing/peacekeeper/armadyne
name = "armadyne webbing"
desc = "Unique and versatile chest rig, can hold security gear."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "armadyne_webbing"
worn_icon_state = "armadyne_webbing"
/obj/item/storage/belt/security/peacekeeper/armadyne
name = "armadyne belt"
desc = "Can hold security gear like handcuffs and flashes. Has a holster for a gun."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "armadyne_belt"
worn_icon_state = "armadyne_belt"
diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm
similarity index 77%
rename from modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm
rename to modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm
index dc30bf13d7f..9a153d53f87 100644
--- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm
+++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm
@@ -34,8 +34,8 @@
/obj/item/clothing/head/helmet/sec/sol
name = "sol police helmet"
desc = "A helmet to protect any officer from bludgeoning attacks, or the occasional bullet."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi'
icon_state = "security_helmet_novisor"
base_icon_state = "security_helmet_novisor"
actions_types = NONE
@@ -45,8 +45,8 @@
/obj/item/clothing/head/hats/warden/police/patrol
name = "police patrol cap"
desc = "A dark colored hat with a silver badge, for the officer interested in style."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/hats.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/head.dmi'
icon_state = "policeofficerpatrolcap"
supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
armor_type = /datum/armor/head_helmet
@@ -60,15 +60,15 @@
/obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper
name = "peacekeeper hud glasses"
icon_state = "peacekeeperglasses"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/eyes.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/glasses.dmi'
//PEACEKEEPER UNIFORM
/obj/item/clothing/under/rank/security/peacekeeper
name = "peacekeeper uniform"
desc = "A sleek peacekeeper uniform, made to a price."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "peacekeeper"
can_adjust = TRUE
sensor_mode = SENSOR_COORDS
@@ -77,27 +77,27 @@
/obj/item/clothing/under/rank/security/warden/peacekeeper
name = "peacekeeper wardens suit"
desc = "A formal security suit for officers complete with Armadyne belt buckle."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "peacekeeper_warden"
/obj/item/clothing/under/rank/security/warden
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
/obj/item/clothing/under/rank/security/head_of_security/peacekeeper
name = "head of security's peacekeeper jumpsuit"
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "peacekeeper_hos"
//PEACEKEEPER ARMOR
/obj/item/clothing/suit/armor/vest/peacekeeper
name = "peacekeeper armor vest"
desc = "A standard issue peacekeeper armor vest, versatile, lightweight, and most importantly, cheap."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi'
icon_state = "peacekeeper_white"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -107,8 +107,8 @@
/obj/item/clothing/suit/armor/vest/peacekeeper/brit
name = "high vis armored vest"
desc = "Oi bruv, you got a loicence for that?"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "hazardbg"
worn_icon_state = "hazardbg"
@@ -119,8 +119,8 @@
/obj/item/clothing/suit/armor/vest/peacekeeper/spacecoat
name = "peacekeeper sleek coat"
desc = "An incredibly stylish and heavy black coat made of synthetic kangaroo leather, padded with durathread and lined with kevlar."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi'
icon_state = "peacekeeper_spacecoat"
worn_icon_state = "peacekeeper_spacecoat"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -129,8 +129,8 @@
/obj/item/clothing/gloves/combat/peacekeeper
name = "peacekeeper gloves"
desc = "These tactical gloves are fireproof."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "peacekeeper_gloves"
worn_icon_state = "peacekeeper"
siemens_coefficient = 0.5
@@ -146,23 +146,23 @@
/obj/item/clothing/gloves/tackler/peacekeeper
name = "peacekeeper gripper gloves"
desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "peacekeeper_gripper_gloves"
/obj/item/clothing/gloves/krav_maga/sec/peacekeeper
name = "peacekeeper krav maga gloves"
desc = "These gloves can teach you to perform Krav Maga using nanochips."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/gloves.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi'
icon_state = "peacekeeper_gripper_gloves"
//PEACEKEEPER BELTS
/obj/item/storage/belt/security/peacekeeper
name = "peacekeeper belt"
desc = "This belt can hold security gear like handcuffs and flashes. It has a holster for a gun."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "peacekeeperbelt"
worn_icon_state = "peacekeeperbelt"
content_overlays = FALSE
@@ -203,8 +203,8 @@
/obj/item/storage/belt/security/webbing/peacekeeper
name = "peacekeeper webbing"
desc = "A tactical chest rig issued to peacekeepers; slow is smooth, smooth is fast. Has a notable lack of a holster that fits energy-based weapons."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi'
icon_state = "peacekeeper_webbing"
worn_icon_state = "peacekeeper_webbing"
content_overlays = FALSE
@@ -240,6 +240,6 @@
/obj/item/clothing/shoes/jackboots/peacekeeper
name = "peacekeeper boots"
desc = "High speed, low drag combat boots."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
+ icon = 'modular_nova/master_files/icons/obj/clothing/shoes.dmi'
+ worn_icon = 'modular_nova/master_files/icons/mob/clothing/feet.dmi'
icon_state = "peacekeeper"
diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm
similarity index 93%
rename from modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm
rename to modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm
index 37bf649b7fd..790877478dc 100644
--- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm
+++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_hammer.dm
@@ -1,12 +1,12 @@
/obj/item/melee/breaching_hammer
name = "D-4 tactical hammer"
desc = "A metallic-plastic composite breaching hammer, looks like a whack with this would severly harm or tire someone."
- icon = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi'
+ icon = 'modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi'
icon_state = "peacekeeper_hammer"
inhand_icon_state = "peacekeeper_hammer"
worn_icon_state = "classic_baton"
- lefthand_file = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi'
+ lefthand_file = 'modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
force = 15
throwforce = 10
diff --git a/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm
new file mode 100644
index 00000000000..97f5345b0d7
--- /dev/null
+++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm
@@ -0,0 +1,8 @@
+/obj/structure/closet/secure_closet/security
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+
+/obj/structure/closet/secure_closet/warden
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
+
+/obj/structure/closet/secure_closet/hos
+ icon = 'modular_nova/master_files/icons/obj/closet.dmi'
diff --git a/modular_skyrat/modules/sec_haul/icons/misc/bulletbot.dmi b/modular_nova/modules/sec_haul/icons/misc/bulletbot.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/misc/bulletbot.dmi
rename to modular_nova/modules/sec_haul/icons/misc/bulletbot.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi b/modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/misc/bulletdrive.dmi
rename to modular_nova/modules/sec_haul/icons/misc/bulletdrive.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi b/modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi
rename to modular_nova/modules/sec_haul/icons/misc/turf_decals.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi
rename to modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_lefthand.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi
rename to modular_nova/modules/sec_haul/icons/peacekeeper/baton/peacekeeper_baton_righthand.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi b/modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi
rename to modular_nova/modules/sec_haul/icons/peacekeeper/peacekeeper_items.dmi
diff --git a/modular_skyrat/modules/sec_haul/icons/vending/vending.dmi b/modular_nova/modules/sec_haul/icons/vending/vending.dmi
similarity index 100%
rename from modular_skyrat/modules/sec_haul/icons/vending/vending.dmi
rename to modular_nova/modules/sec_haul/icons/vending/vending.dmi
diff --git a/modular_nova/modules/sec_haul/readme.md b/modular_nova/modules/sec_haul/readme.md
new file mode 100644
index 00000000000..c29d1c9946b
--- /dev/null
+++ b/modular_nova/modules/sec_haul/readme.md
@@ -0,0 +1,32 @@
+## Title: Security overhaul
+
+MODULE ID: MODULAR_WEAPONS
+
+### Description:
+
+Completely overhauls security to something that will hopefully fit us.
+
+### TG Proc Changes:
+
+- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
+
+### Defines:
+
+- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
+
+### Master file additions
+
+- `modular_nova/master_files/code/modules/cargo/packs/vending_restock.dm`: `var/special`
+- `modular_nova/master_files/code/modules/cargo/packs/security.dm`: `var/special`, `var/cost`
+
+### Included files that are not contained in this module:
+
+- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
+
+
+### Credits:
+Code: Gandalf2k15
+Sprite modification: Gandalf2k15
+Uniforms and equipment sprites: JungleRat
+Gun sprites: Eris and Sojourn
+de-goofsec'd guns: ErdinyoBarboza
diff --git a/modular_skyrat/modules/sec_haul/sound/automag.ogg b/modular_nova/modules/sec_haul/sound/automag.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/automag.ogg
rename to modular_nova/modules/sec_haul/sound/automag.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/batrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/batrifle_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/batrifle_fire.ogg
rename to modular_nova/modules/sec_haul/sound/batrifle_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_close.ogg b/modular_nova/modules/sec_haul/sound/chaingun_close.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_close.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_close.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_cock.ogg b/modular_nova/modules/sec_haul/sound/chaingun_cock.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_cock.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_cock.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg b/modular_nova/modules/sec_haul/sound/chaingun_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_magin.ogg b/modular_nova/modules/sec_haul/sound/chaingun_magin.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_magin.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_magin.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_magout.ogg b/modular_nova/modules/sec_haul/sound/chaingun_magout.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_magout.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_magout.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/chaingun_open.ogg b/modular_nova/modules/sec_haul/sound/chaingun_open.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/chaingun_open.ogg
rename to modular_nova/modules/sec_haul/sound/chaingun_open.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/dp_fire.ogg b/modular_nova/modules/sec_haul/sound/dp_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/dp_fire.ogg
rename to modular_nova/modules/sec_haul/sound/dp_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/holsterin.ogg b/modular_nova/modules/sec_haul/sound/holsterin.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/holsterin.ogg
rename to modular_nova/modules/sec_haul/sound/holsterin.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/holsterout.ogg b/modular_nova/modules/sec_haul/sound/holsterout.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/holsterout.ogg
rename to modular_nova/modules/sec_haul/sound/holsterout.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/hpistol_fire.ogg b/modular_nova/modules/sec_haul/sound/hpistol_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/hpistol_fire.ogg
rename to modular_nova/modules/sec_haul/sound/hpistol_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/lmg_fire.ogg b/modular_nova/modules/sec_haul/sound/lmg_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/lmg_fire.ogg
rename to modular_nova/modules/sec_haul/sound/lmg_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/ltrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/ltrifle_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/ltrifle_fire.ogg
rename to modular_nova/modules/sec_haul/sound/ltrifle_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/pistol_fire.ogg b/modular_nova/modules/sec_haul/sound/pistol_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/pistol_fire.ogg
rename to modular_nova/modules/sec_haul/sound/pistol_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/rail.ogg b/modular_nova/modules/sec_haul/sound/rail.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/rail.ogg
rename to modular_nova/modules/sec_haul/sound/rail.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg b/modular_nova/modules/sec_haul/sound/revolver_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg
rename to modular_nova/modules/sec_haul/sound/revolver_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/sfrifle_fire.ogg b/modular_nova/modules/sec_haul/sound/sfrifle_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/sfrifle_fire.ogg
rename to modular_nova/modules/sec_haul/sound/sfrifle_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/shotgun_bm.ogg b/modular_nova/modules/sec_haul/sound/shotgun_bm.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/shotgun_bm.ogg
rename to modular_nova/modules/sec_haul/sound/shotgun_bm.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/smg_fire.ogg b/modular_nova/modules/sec_haul/sound/smg_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/smg_fire.ogg
rename to modular_nova/modules/sec_haul/sound/smg_fire.ogg
diff --git a/modular_skyrat/modules/sec_haul/sound/sniper_fire.ogg b/modular_nova/modules/sec_haul/sound/sniper_fire.ogg
similarity index 100%
rename from modular_skyrat/modules/sec_haul/sound/sniper_fire.ogg
rename to modular_nova/modules/sec_haul/sound/sniper_fire.ogg
diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_nova/modules/self_actualization_device/code/self_actualization_device.dm
similarity index 98%
rename from modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
rename to modular_nova/modules/self_actualization_device/code/self_actualization_device.dm
index 8fcdd735f12..6afa885356f 100644
--- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm
+++ b/modular_nova/modules/self_actualization_device/code/self_actualization_device.dm
@@ -15,7 +15,7 @@
/obj/machinery/self_actualization_device
name = "Self-Actualization Device"
desc = "A state of the art medical device that can restore someone's physical appearance to the last known database backup."
- icon = 'modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi'
+ icon = 'modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi'
icon_state = "sad_open"
circuit = /obj/item/circuitboard/machine/self_actualization_device
state_open = FALSE
diff --git a/modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi b/modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi
similarity index 100%
rename from modular_skyrat/modules/self_actualization_device/icons/self_actualization_device.dmi
rename to modular_nova/modules/self_actualization_device/icons/self_actualization_device.dmi
diff --git a/modular_skyrat/modules/server_overflow/code/chat_link.dm b/modular_nova/modules/server_overflow/code/chat_link.dm
similarity index 98%
rename from modular_skyrat/modules/server_overflow/code/chat_link.dm
rename to modular_nova/modules/server_overflow/code/chat_link.dm
index 843ec276ac5..b77f0a926e7 100644
--- a/modular_skyrat/modules/server_overflow/code/chat_link.dm
+++ b/modular_nova/modules/server_overflow/code/chat_link.dm
@@ -107,5 +107,5 @@
for(var/client/admin_client in GLOB.admins)
if(admin_client?.prefs?.toggles & SOUND_ADMINHELP)
- SEND_SOUND(admin_client, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg'))
+ SEND_SOUND(admin_client, sound('modular_nova/modules/admin/sound/duckhonk.ogg'))
window_flash(admin_client, ignorepref = TRUE)
diff --git a/modular_skyrat/modules/server_overflow/code/client_procs.dm b/modular_nova/modules/server_overflow/code/client_procs.dm
similarity index 100%
rename from modular_skyrat/modules/server_overflow/code/client_procs.dm
rename to modular_nova/modules/server_overflow/code/client_procs.dm
diff --git a/modular_skyrat/modules/server_overflow/code/server_connect_panel.dm b/modular_nova/modules/server_overflow/code/server_connect_panel.dm
similarity index 100%
rename from modular_skyrat/modules/server_overflow/code/server_connect_panel.dm
rename to modular_nova/modules/server_overflow/code/server_connect_panel.dm
diff --git a/modular_nova/modules/shotgunrebalance/code/ammobox.dm b/modular_nova/modules/shotgunrebalance/code/ammobox.dm
new file mode 100644
index 00000000000..270a152dbdd
--- /dev/null
+++ b/modular_nova/modules/shotgunrebalance/code/ammobox.dm
@@ -0,0 +1,85 @@
+/obj/item/ammo_box/advanced/s12gauge
+ name = "Slug ammo box"
+ desc = "A box of 15 slug shells. Large, singular shots that pack a punch."
+ icon = 'modular_nova/modules/shotgunrebalance/icons/shotbox.dmi'
+ icon_state = "slug"
+ ammo_type = /obj/item/ammo_casing/shotgun
+ max_ammo = 15
+ multitype = FALSE // if you enable this and set the box's caliber var to CALIBER_SHOTGUN (at time of writing, "shotgun"), then you can have the fabled any-ammo shellbox
+
+/obj/item/ammo_box/advanced/s12gauge/buckshot
+ name = "Buckshot ammo box"
+ desc = "A box of 15 buckshot shells. These have a modest spread of weaker projectiles."
+ icon_state = "buckshot"
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/rubber
+ name = "Rubbershot ammo box"
+ desc = "A box of 15 rubbershot shells. These have a modest spread of weaker, less-lethal projectiles."
+ icon_state = "rubber"
+ ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/bean
+ name = "Beanbag Slug ammo box"
+ desc = "A box of 15 beanbag slug shells. These are large, singular beanbags that pack a less-lethal punch."
+ icon_state = "bean"
+ ammo_type = /obj/item/ammo_casing/shotgun/beanbag
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/magnum
+ name = "Magnum blockshot ammo box"
+ desc = "A box of 15 magnum blockshot shells. The size of the pellet is larger in diameter than the typical shot, but there are less of them inside each shell."
+ icon_state = "magnum"
+ ammo_type = /obj/item/ammo_casing/shotgun/magnum
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/express
+ name = "Express pelletshot ammo box"
+ desc = "A box of 15 express pelletshot shells. The size of the pellet is smaller in diameter than the typical shot, but there are more of them inside each shell."
+ icon_state = "express"
+ ammo_type = /obj/item/ammo_casing/shotgun/express
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/hunter
+ name = "Hunter slug ammo box"
+ desc = "A box of 15 hunter slug shells. These shotgun slugs excel at damaging the local fauna."
+ icon_state = "hunter"
+ ammo_type = /obj/item/ammo_casing/shotgun/hunter
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/flechette
+ name = "Flechette ammo box"
+ desc = "A box of 15 flechette shells. Each shell contains a small group of tumbling blades that excel at causing terrible wounds."
+ icon_state = "flechette"
+ ammo_type = /obj/item/ammo_casing/shotgun/flechette
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/beehive
+ name = "Hornet's nest ammo box"
+ desc = "A box of 15 hornet's nest shells. These are less-lethal shells that will bounce off walls and direct themselves toward nearby targets."
+ icon_state = "beehive"
+ ammo_type = /obj/item/ammo_casing/shotgun/beehive
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/antitide
+ name = "Stardust ammo box"
+ desc = "A box of 15 express pelletshot shells. These are less-lethal and will embed in targets, causing pain on movement."
+ icon_state = "antitide"
+ ammo_type = /obj/item/ammo_casing/shotgun/antitide
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/incendiary
+ name = "Incendiary Slug ammo box"
+ desc = "A box of 15 incendiary slug shells. These will ignite targets and leave a trail of fire behind them."
+ icon_state = "incendiary"
+ ammo_type = /obj/item/ammo_casing/shotgun/incendiary
+ max_ammo = 15
+
+/obj/item/ammo_box/advanced/s12gauge/honkshot
+ name = "Confetti Honkshot ammo box"
+ desc = "A box of 35 shotgun shells."
+ icon_state = "honk"
+ ammo_type = /obj/item/ammo_casing/shotgun/honkshot
+ max_ammo = 35
diff --git a/modular_skyrat/modules/shotgunrebalance/code/autolathe_design.dm b/modular_nova/modules/shotgunrebalance/code/autolathe_design.dm
similarity index 100%
rename from modular_skyrat/modules/shotgunrebalance/code/autolathe_design.dm
rename to modular_nova/modules/shotgunrebalance/code/autolathe_design.dm
diff --git a/modular_nova/modules/shotgunrebalance/code/shotgun.dm b/modular_nova/modules/shotgunrebalance/code/shotgun.dm
new file mode 100644
index 00000000000..1c96b0ebeb2
--- /dev/null
+++ b/modular_nova/modules/shotgunrebalance/code/shotgun.dm
@@ -0,0 +1,309 @@
+#define AMMO_MATS_SHOTGUN list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4) // not quite as thick as a half-sheet
+
+#define AMMO_MATS_SHOTGUN_FLECH list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
+
+#define AMMO_MATS_SHOTGUN_HIVE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
+ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\
+ /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1)
+
+#define AMMO_MATS_SHOTGUN_TIDE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
+ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\
+ /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1)
+
+#define AMMO_MATS_SHOTGUN_PLASMA list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
+ /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2)
+
+/obj/item/ammo_casing/shotgun
+ icon = 'modular_nova/modules/shotgunrebalance/icons/shotshells.dmi'
+ desc = "A 12 gauge iron slug."
+ custom_materials = AMMO_MATS_SHOTGUN
+
+// THE BELOW TWO SLUGS ARE NOTED AS ADMINONLY AND HAVE ***EIGHTY*** WOUND BONUS. NOT BARE WOUND BONUS. FLAT WOUND BONUS.
+/obj/item/ammo_casing/shotgun/executioner
+ name = "expanding shotgun slug"
+ desc = "A 12 gauge fragmenting slug purpose-built to annihilate flesh on impact."
+ can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm.
+
+/obj/item/ammo_casing/shotgun/pulverizer
+ name = "pulverizer shotgun slug"
+ desc = "A 12 gauge uranium slug purpose-built to break bones on impact."
+ can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm
+
+/obj/item/ammo_casing/shotgun/incendiary
+ name = "incendiary slug"
+ desc = "A 12 gauge magnesium slug meant for \"setting shit on fire and looking cool while you do it\".\
+ \
+ INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
+ advanced_print_req = TRUE
+ custom_materials = AMMO_MATS_SHOTGUN_PLASMA
+
+/obj/item/ammo_casing/shotgun/techshell
+ can_be_printed = FALSE // techshell... casing! so not really usable on its own but if you're gonna make these go raid a seclathe.
+
+/obj/item/ammo_casing/shotgun/improvised
+ can_be_printed = FALSE // this is literally made out of scrap why would you use this if you have a perfectly good ammolathe
+
+/obj/item/ammo_casing/shotgun/dart/bioterror
+ can_be_printed = FALSE // PRELOADED WITH TERROR CHEMS MAYBE LET'S NOT
+
+/obj/item/ammo_casing/shotgun/dragonsbreath
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/stunslug
+ name = "taser slug"
+ desc = "A 12 gauge silver slug with electrical microcomponents meant to incapacitate targets."
+ can_be_printed = FALSE // comment out if you want rocket tag shotgun ammo being printable
+
+/obj/item/ammo_casing/shotgun/meteorslug
+ name = "meteor slug"
+ desc = "A 12 gauge shell rigged with CMC technology which launches a heap of matter with great force when fired.\
+ \
+ METEOR: Fires a meteor-like projectile that knocks back movable objects like people and airlocks. "
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/frag12
+ name = "FRAG-12 slug"
+ desc = "A 12 gauge shell containing high explosives designed for defeating some barriers and light vehicles, disrupting IEDs, or intercepting assistants.\
+ \
+ HIGH EXPLOSIVE: Explodes on impact. "
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/pulseslug
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/laserslug
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/ion
+ can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
+
+/obj/item/ammo_casing/shotgun/incapacitate
+ name = "hornet's nest shell"
+ desc = "A 12 gauge shell filled with some kind of material that excels at incapacitating targets. Contains a lot of pellets, \
+ sacrificing individual pellet strength for sheer stopping power in what's best described as \"spitting distance\".\
+ \
+ HORNET'S NEST: Fire an overwhelming amount of projectiles in a single shot. "
+ can_be_printed = FALSE
+
+/obj/item/ammo_casing/shotgun/buckshot
+ name = "buckshot shell"
+ desc = "A 12 gauge buckshot shell."
+ icon_state = "gshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot
+ pellets = 8 // 8 * 6 for 48 damage if every pellet hits, we want to keep lethal shells ~50 damage
+ variance = 25
+
+/obj/projectile/bullet/pellet/shotgun_buckshot
+ name = "buckshot pellet"
+ damage = 6
+ weak_against_armour = TRUE
+
+/obj/item/ammo_casing/shotgun/rubbershot
+ name = "rubber shot"
+ desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance."
+ icon_state = "rshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot
+ pellets = 6 // 6 * 10 for 60 stamina damage, + some small amount of brute, we want to keep less lethal shells ~60
+ variance = 20
+ harmful = FALSE
+
+/obj/projectile/bullet/pellet/shotgun_rubbershot
+ weak_against_armour = TRUE
+ stamina = 10
+
+/obj/item/ammo_casing/shotgun/magnum
+ name = "magnum blockshot shell"
+ desc = "A 12 gauge shell that fires fewer, larger pellets than buckshot. A favorite of SolFed anti-piracy enforcers, \
+ especially against the likes of vox."
+ icon_state = "magshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/magnum
+ pellets = 4 // Half as many pellets for twice the damage each pellet, same overall damage as buckshot
+ variance = 20
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/magnum
+ name = "magnum blockshot pellet"
+ damage = 12
+ wound_bonus = 10
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/magnum/Initialize(mapload)
+ . = ..()
+ transform = transform.Scale(1.25, 1.25)
+
+/obj/item/ammo_casing/shotgun/express
+ name = "express pelletshot shell"
+ desc = "A 12 gauge shell that fires more and smaller projectiles than buckshot. Considered taboo to speak about \
+ openly near teshari, for reasons you would be personally blessed to not know at least some of."
+ icon_state = "expshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/express
+ pellets = 12 // 1.3x The pellets for 0.6x the damage, same overall damage as buckshot
+ variance = 30 // Slightly wider spread than buckshot
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/express
+ name = "express buckshot pellet"
+ damage = 4
+ wound_bonus = 0
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/express/Initialize(mapload)
+ . = ..()
+ transform = transform.Scale(0.75, 0.75)
+
+/obj/item/ammo_casing/shotgun/flechette
+ name = "flechette shell"
+ desc = "A 12 gauge flechette shell that specializes in ripping unarmored targets apart."
+ icon_state = "fshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/flechette
+ pellets = 8 //8 x 6 = 48 Damage Potential
+ variance = 25
+ custom_materials = AMMO_MATS_SHOTGUN_FLECH
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/flechette
+ name = "flechette"
+ icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi'
+ icon_state = "flechette"
+ damage = 6
+ wound_bonus = 10
+ bare_wound_bonus = 20
+ sharpness = SHARP_EDGED //Did you knew flechettes fly sideways into people
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/flechette/Initialize(mapload)
+ . = ..()
+ SpinAnimation()
+
+/obj/item/ammo_casing/shotgun/beehive
+ name = "hornet shell"
+ desc = "A less-lethal 12 gauge shell that fires four pellets capable of bouncing off nearly any surface \
+ and re-aiming themselves toward the nearest target. They will, however, go for any target nearby."
+ icon_state = "cnrshell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive
+ pellets = 4
+ variance = 15
+ fire_sound = 'sound/weapons/taser.ogg'
+ harmful = FALSE
+ custom_materials = AMMO_MATS_SHOTGUN_HIVE
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/beehive
+ name = "hornet flechette"
+ icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi'
+ icon_state = "hornet"
+ damage = 4
+ stamina = 15
+ damage_falloff_tile = 0.1
+ stamina_falloff_tile = 0.1
+ wound_bonus = -5
+ bare_wound_bonus = 5
+ wound_falloff_tile = 0
+ sharpness = NONE
+ ricochets_max = 5
+ ricochet_chance = 200
+ ricochet_auto_aim_angle = 60
+ ricochet_auto_aim_range = 8
+ ricochet_decay_damage = 1
+ ricochet_decay_chance = 1
+ ricochet_incidence_leeway = 0 //nanomachines son
+
+/obj/item/ammo_casing/shotgun/antitide
+ name = "stardust shell"
+ desc = "A highly experimental shell filled with nanite electrodes that will embed themselves in soft targets. The electrodes are charged from kinetic movement which means moving targets will get punished more."
+ icon_state = "lasershell"
+ projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/antitide
+ pellets = 8 // 8 * 7 for 56 stamina damage, plus whatever the embedded shells do
+ variance = 30
+ harmful = FALSE
+ fire_sound = 'sound/weapons/taser.ogg'
+ custom_materials = AMMO_MATS_SHOTGUN_TIDE
+ advanced_print_req = TRUE
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/antitide
+ name = "electrode"
+ icon = 'modular_nova/modules/shotgunrebalance/icons/projectiles.dmi'
+ icon_state = "stardust"
+ damage = 2
+ stamina = 8
+ damage_falloff_tile = 0.2
+ stamina_falloff_tile = 0.3
+ wound_bonus = 0
+ bare_wound_bonus = 0
+ stutter = 3 SECONDS
+ jitter = 5 SECONDS
+ eyeblur = 1 SECONDS
+ sharpness = NONE
+ range = 8
+ embedding = list(embed_chance=70, pain_chance=25, fall_chance=15, jostle_chance=80, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.9, pain_mult=2, rip_time=10)
+
+/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/on_range()
+ do_sparks(1, TRUE, src)
+ ..()
+
+/obj/item/ammo_casing/shotgun/hunter
+ name = "hunter slug shell"
+ desc = "A 12 gauge slug shell that fires specially designed slugs that deal extra damage to the local planetary fauna"
+ icon_state = "huntershell"
+ projectile_type = /obj/projectile/bullet/shotgun_slug/hunter
+
+/obj/projectile/bullet/shotgun_slug/hunter
+ name = "12g hunter slug"
+ damage = 20
+
+/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload)
+ . = ..()
+ AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 5)
+
+/obj/projectile/bullet/pellet/shotgun_improvised
+ weak_against_armour = TRUE // We will not have Improvised are Better 2.0
+
+/obj/item/ammo_casing/shotgun/honkshot
+ name = "confetti shell"
+ desc = "A 12 gauge buckshot shell thats been filled to the brim with confetti, yippie!"
+ icon_state = "honkshell"
+ projectile_type = /obj/projectile/bullet/honkshot
+ pellets = 12
+ variance = 35
+ fire_sound = 'sound/items/bikehorn.ogg'
+ harmful = FALSE
+
+/obj/projectile/bullet/honkshot
+ name = "confetti"
+ damage = 0
+ sharpness = NONE
+ shrapnel_type = NONE
+ impact_effect_type = null
+ ricochet_chance = 0
+ jitter = 1 SECONDS
+ eyeblur = 1 SECONDS
+ hitsound = SFX_CLOWN_STEP
+ range = 4
+ icon_state = "guardian"
+
+/obj/projectile/bullet/honkshot/Initialize(mapload)
+ . = ..()
+ SpinAnimation()
+ range = rand(1, 4)
+ color = pick(
+ COLOR_PRIDE_RED,
+ COLOR_PRIDE_ORANGE,
+ COLOR_PRIDE_YELLOW,
+ COLOR_PRIDE_GREEN,
+ COLOR_PRIDE_BLUE,
+ COLOR_PRIDE_PURPLE,
+ )
+
+// This proc addition will spawn a decal on each tile the projectile travels over
+/obj/projectile/bullet/honkshot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
+ new /obj/effect/decal/cleanable/confetti(get_turf(old_loc))
+ return ..()
+
+// This proc addition will make living humanoids do a flip animation when hit by the projectile
+/obj/projectile/bullet/honkshot/on_hit(atom/target, blocked, pierce_hit)
+ if(!isliving(target))
+ return ..()
+ target.SpinAnimation(7,1)
+ return ..()
+
+// This proc addition adds a spark effect when the projectile expires/hits
+/obj/projectile/bullet/honkshot/on_range()
+ do_sparks(1, TRUE, src)
+ return ..()
diff --git a/modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi b/modular_nova/modules/shotgunrebalance/icons/projectiles.dmi
similarity index 100%
rename from modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi
rename to modular_nova/modules/shotgunrebalance/icons/projectiles.dmi
diff --git a/modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi b/modular_nova/modules/shotgunrebalance/icons/shotbox.dmi
similarity index 100%
rename from modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi
rename to modular_nova/modules/shotgunrebalance/icons/shotbox.dmi
diff --git a/modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi b/modular_nova/modules/shotgunrebalance/icons/shotshells.dmi
similarity index 100%
rename from modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi
rename to modular_nova/modules/shotgunrebalance/icons/shotshells.dmi
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/bundles.dm b/modular_nova/modules/skyrat-uplinks/code/categories/bundles.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/bundles.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/bundles.dm
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/dangerous.dm b/modular_nova/modules/skyrat-uplinks/code/categories/dangerous.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/dangerous.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/dangerous.dm
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/device_tools.dm b/modular_nova/modules/skyrat-uplinks/code/categories/device_tools.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/device_tools.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/device_tools.dm
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_tools.dm b/modular_nova/modules/skyrat-uplinks/code/categories/stealthy_tools.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_tools.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/stealthy_tools.dm
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm b/modular_nova/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/stealthy_weapons.dm
diff --git a/modular_skyrat/modules/skyrat-uplinks/code/categories/suits.dm b/modular_nova/modules/skyrat-uplinks/code/categories/suits.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat-uplinks/code/categories/suits.dm
rename to modular_nova/modules/skyrat-uplinks/code/categories/suits.dm
diff --git a/modular_skyrat/modules/skyrat_access_helpers/README.md b/modular_nova/modules/skyrat_access_helpers/README.md
similarity index 100%
rename from modular_skyrat/modules/skyrat_access_helpers/README.md
rename to modular_nova/modules/skyrat_access_helpers/README.md
diff --git a/modular_skyrat/modules/skyrat_access_helpers/accesshelpers.dm b/modular_nova/modules/skyrat_access_helpers/accesshelpers.dm
similarity index 100%
rename from modular_skyrat/modules/skyrat_access_helpers/accesshelpers.dm
rename to modular_nova/modules/skyrat_access_helpers/accesshelpers.dm
diff --git a/modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm b/modular_nova/modules/soulstone_changes/code/components/return_on_death.dm
similarity index 95%
rename from modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm
rename to modular_nova/modules/soulstone_changes/code/components/return_on_death.dm
index 9c922aa7fb4..d123bd093c6 100644
--- a/modular_skyrat/modules/soulstone_changes/code/components/return_on_death.dm
+++ b/modular_nova/modules/soulstone_changes/code/components/return_on_death.dm
@@ -25,7 +25,7 @@
deleting = TRUE
-/datum/component/return_on_death/Destroy(force, silent)
+/datum/component/return_on_death/Destroy(force)
if(!deleting)
deleting = TRUE
return_to_old_body()
diff --git a/modular_skyrat/modules/soulstone_changes/code/soulstone.dm b/modular_nova/modules/soulstone_changes/code/soulstone.dm
similarity index 100%
rename from modular_skyrat/modules/soulstone_changes/code/soulstone.dm
rename to modular_nova/modules/soulstone_changes/code/soulstone.dm
diff --git a/modular_skyrat/modules/soulstone_changes/readme.md b/modular_nova/modules/soulstone_changes/readme.md
similarity index 100%
rename from modular_skyrat/modules/soulstone_changes/readme.md
rename to modular_nova/modules/soulstone_changes/readme.md
diff --git a/modular_skyrat/modules/space_vines/back.dmi b/modular_nova/modules/space_vines/back.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/back.dmi
rename to modular_nova/modules/space_vines/back.dmi
diff --git a/modular_skyrat/modules/space_vines/items_and_weapons.dmi b/modular_nova/modules/space_vines/items_and_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/items_and_weapons.dmi
rename to modular_nova/modules/space_vines/items_and_weapons.dmi
diff --git a/modular_skyrat/modules/space_vines/polearms_lefthand.dmi b/modular_nova/modules/space_vines/polearms_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/polearms_lefthand.dmi
rename to modular_nova/modules/space_vines/polearms_lefthand.dmi
diff --git a/modular_skyrat/modules/space_vines/polearms_righthand.dmi b/modular_nova/modules/space_vines/polearms_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/space_vines/polearms_righthand.dmi
rename to modular_nova/modules/space_vines/polearms_righthand.dmi
diff --git a/modular_skyrat/modules/space_vines/scythes.dm b/modular_nova/modules/space_vines/scythes.dm
similarity index 92%
rename from modular_skyrat/modules/space_vines/scythes.dm
rename to modular_nova/modules/space_vines/scythes.dm
index 3fe17ad3bae..93bdc814b5b 100644
--- a/modular_skyrat/modules/space_vines/scythes.dm
+++ b/modular_nova/modules/space_vines/scythes.dm
@@ -1,11 +1,11 @@
/obj/item/scythe
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
- icon = 'modular_skyrat/modules/space_vines/items_and_weapons.dmi'
+ icon = 'modular_nova/modules/space_vines/items_and_weapons.dmi'
icon_state = "scythe_t1"
- worn_icon = 'modular_skyrat/modules/space_vines/back.dmi'
- lefthand_file = 'modular_skyrat/modules/space_vines/polearms_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/space_vines/polearms_righthand.dmi'
+ worn_icon = 'modular_nova/modules/space_vines/back.dmi'
+ lefthand_file = 'modular_nova/modules/space_vines/polearms_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/space_vines/polearms_righthand.dmi'
force = 13
throwforce = 5
throw_speed = 2
diff --git a/modular_skyrat/modules/space_vines/venus.dm b/modular_nova/modules/space_vines/venus.dm
similarity index 100%
rename from modular_skyrat/modules/space_vines/venus.dm
rename to modular_nova/modules/space_vines/venus.dm
diff --git a/modular_skyrat/modules/space_vines/vine_mutations.dm b/modular_nova/modules/space_vines/vine_mutations.dm
similarity index 97%
rename from modular_skyrat/modules/space_vines/vine_mutations.dm
rename to modular_nova/modules/space_vines/vine_mutations.dm
index 54971404f5c..328ecde6709 100644
--- a/modular_skyrat/modules/space_vines/vine_mutations.dm
+++ b/modular_nova/modules/space_vines/vine_mutations.dm
@@ -61,7 +61,7 @@
space_turf.color = hue
/turf/open/floor/plating/kudzu
name = "vine flooring"
- icon = 'modular_skyrat/modules/aesthetics/floors/icons/floors.dmi'
+ icon = 'modular_nova/modules/aesthetics/floors/icons/floors.dmi'
icon_state = "vinefloor"
/turf/open/floor/plating/kudzu/attacked_by(obj/item/attacking_item, mob/living/user)
diff --git a/modular_skyrat/modules/space_vines/vine_structure.dm b/modular_nova/modules/space_vines/vine_structure.dm
similarity index 100%
rename from modular_skyrat/modules/space_vines/vine_structure.dm
rename to modular_nova/modules/space_vines/vine_structure.dm
diff --git a/modular_skyrat/modules/specialist_armor/code/cargo_packs.dm b/modular_nova/modules/specialist_armor/code/cargo_packs.dm
similarity index 100%
rename from modular_skyrat/modules/specialist_armor/code/cargo_packs.dm
rename to modular_nova/modules/specialist_armor/code/cargo_packs.dm
diff --git a/modular_skyrat/modules/specialist_armor/code/clothing_bullet_damage_component.dm b/modular_nova/modules/specialist_armor/code/clothing_bullet_damage_component.dm
similarity index 100%
rename from modular_skyrat/modules/specialist_armor/code/clothing_bullet_damage_component.dm
rename to modular_nova/modules/specialist_armor/code/clothing_bullet_damage_component.dm
diff --git a/modular_skyrat/modules/specialist_armor/code/hardened.dm b/modular_nova/modules/specialist_armor/code/hardened.dm
similarity index 94%
rename from modular_skyrat/modules/specialist_armor/code/hardened.dm
rename to modular_nova/modules/specialist_armor/code/hardened.dm
index 777bfed67e0..663a56d7f52 100644
--- a/modular_skyrat/modules/specialist_armor/code/hardened.dm
+++ b/modular_nova/modules/specialist_armor/code/hardened.dm
@@ -14,9 +14,9 @@
desc = "A large white breastplate, and a semi-flexible mail of dense panels that cover the torso. \
While not so incredible at directly stopping bullets, the vest is uniquely suited to cause bullets \
to lose much of their armor penetrating energy before any damage can be done."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "hardened_standard"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "armor"
blood_overlay_type = "armor"
armor_type = /datum/armor/armor_sf_hardened
@@ -55,9 +55,9 @@
name = "'Muur' enclosed helmet"
desc = "A thick-fronted helmet with extendable visor for whole face protection. The materials and geometry of the helmet \
combine in such a way that bullets lose much of their armor penetrating energy before any damage can be done, rather than penetrate into it."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "enclosed_standard"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "helmet"
armor_type = /datum/armor/armor_sf_hardened
toggle_message = "You extend the visor on"
diff --git a/modular_skyrat/modules/specialist_armor/code/peacekeeper.dm b/modular_nova/modules/specialist_armor/code/peacekeeper.dm
similarity index 93%
rename from modular_skyrat/modules/specialist_armor/code/peacekeeper.dm
rename to modular_nova/modules/specialist_armor/code/peacekeeper.dm
index 999d3bf9508..8f727a567f0 100644
--- a/modular_skyrat/modules/specialist_armor/code/peacekeeper.dm
+++ b/modular_nova/modules/specialist_armor/code/peacekeeper.dm
@@ -13,9 +13,9 @@
name = "'Touvou' peacekeeper armor vest"
desc = "A bright blue vest, proudly bearing 'SF' in white on its front and back. Dense fabric with a thin layer of rolled metal \
will protect you from bullets best, a few blunt blows, and the wounds they cause. Lasers will burn more or less straight through it."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "soft_peacekeeper"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "armor"
blood_overlay_type = "armor"
armor_type = /datum/armor/armor_sf_peacekeeper
@@ -44,9 +44,9 @@
name = "'Kastrol' peacekeeper helmet"
desc = "A large, almost always ill-fitting helmet painted in bright blue. It proudly bears the emblems of SolFed on its sides. \
It will protect from bullets best, with some protection against blunt blows, but falters easily in the presence of lasers."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "helmet_peacekeeper"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "helmet"
armor_type = /datum/armor/armor_sf_peacekeeper
dog_fashion = null
diff --git a/modular_skyrat/modules/specialist_armor/code/sacrificial.dm b/modular_nova/modules/specialist_armor/code/sacrificial.dm
similarity index 94%
rename from modular_skyrat/modules/specialist_armor/code/sacrificial.dm
rename to modular_nova/modules/specialist_armor/code/sacrificial.dm
index 45643140f83..a702b81a5c4 100644
--- a/modular_skyrat/modules/specialist_armor/code/sacrificial.dm
+++ b/modular_nova/modules/specialist_armor/code/sacrificial.dm
@@ -15,9 +15,9 @@
As the 'sacrificial' name might imply, this vest has extremely high bullet protection \
in exchange for allowing itself to be destroyed by impacts. It'll protect you from hell, \
but only for so long."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "hexagon"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "armor"
blood_overlay_type = "armor"
armor_type = /datum/armor/armor_sf_sacrificial
@@ -48,9 +48,9 @@
As the 'sacrificial' name might imply, this helmet has extremely high bullet protection \
in exchange for allowing itself to be destroyed by impacts. It'll protect you from hell, \
but only for so long."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "bulletproof"
- worn_icon = 'modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi'
+ worn_icon = 'modular_nova/modules/specialist_armor/icons/armor_worn.dmi'
inhand_icon_state = "helmet"
armor_type = /datum/armor/armor_sf_sacrificial
max_integrity = 200
@@ -151,6 +151,6 @@
name = "'Val' ballistic add-on face plate"
desc = "A thick piece of glass with mounting points for slotting onto a 'Val' sacrificial ballistic helmet. \
While it does not make the helmet any stronger, it does protect your face much like a riot helmet would."
- icon = 'modular_skyrat/modules/specialist_armor/icons/armor.dmi'
+ icon = 'modular_nova/modules/specialist_armor/icons/armor.dmi'
icon_state = "face_shield"
w_class = WEIGHT_CLASS_NORMAL
diff --git a/modular_skyrat/modules/specialist_armor/icons/armor.dmi b/modular_nova/modules/specialist_armor/icons/armor.dmi
similarity index 100%
rename from modular_skyrat/modules/specialist_armor/icons/armor.dmi
rename to modular_nova/modules/specialist_armor/icons/armor.dmi
diff --git a/modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi b/modular_nova/modules/specialist_armor/icons/armor_worn.dmi
similarity index 100%
rename from modular_skyrat/modules/specialist_armor/icons/armor_worn.dmi
rename to modular_nova/modules/specialist_armor/icons/armor_worn.dmi
diff --git a/modular_skyrat/modules/stasisrework/code/all_nodes.dm b/modular_nova/modules/stasisrework/code/all_nodes.dm
similarity index 100%
rename from modular_skyrat/modules/stasisrework/code/all_nodes.dm
rename to modular_nova/modules/stasisrework/code/all_nodes.dm
diff --git a/modular_skyrat/modules/stasisrework/code/bodybag.dm b/modular_nova/modules/stasisrework/code/bodybag.dm
similarity index 81%
rename from modular_skyrat/modules/stasisrework/code/bodybag.dm
rename to modular_nova/modules/stasisrework/code/bodybag.dm
index fc716ca3674..1c21d5585ca 100644
--- a/modular_skyrat/modules/stasisrework/code/bodybag.dm
+++ b/modular_nova/modules/stasisrework/code/bodybag.dm
@@ -1,7 +1,7 @@
/obj/item/bodybag/stasis
name = "stasis body bag"
desc = "A folded stasis body bag designed for the storage and stasis of cadavers."
- icon = 'modular_skyrat/modules/stasisrework/icons/stasisbag.dmi'
+ icon = 'modular_nova/modules/stasisrework/icons/stasisbag.dmi'
icon_state = "greenbodybag_folded"
unfoldedbag_path = /obj/structure/closet/body_bag/stasis
w_class = WEIGHT_CLASS_SMALL
diff --git a/modular_skyrat/modules/stasisrework/code/bodybag_structure.dm b/modular_nova/modules/stasisrework/code/bodybag_structure.dm
similarity index 95%
rename from modular_skyrat/modules/stasisrework/code/bodybag_structure.dm
rename to modular_nova/modules/stasisrework/code/bodybag_structure.dm
index 5c25c793def..da18b6f5179 100644
--- a/modular_skyrat/modules/stasisrework/code/bodybag_structure.dm
+++ b/modular_nova/modules/stasisrework/code/bodybag_structure.dm
@@ -1,7 +1,7 @@
/obj/structure/closet/body_bag/stasis
name = "stasis body bag"
desc = "A body bag designed for the preservation of cadavers via integrated cryogenic technology and cryo-insulative mesh. Due to size limitations, it only works on dead bodies."
- icon = 'modular_skyrat/modules/stasisrework/icons/stasisbag.dmi'
+ icon = 'modular_nova/modules/stasisrework/icons/stasisbag.dmi'
icon_state = "greenbodybag"
foldedbag_path = /obj/item/bodybag/stasis
mob_storage_capacity = 1
diff --git a/modular_skyrat/modules/stasisrework/code/machine_circuitboards.dm b/modular_nova/modules/stasisrework/code/machine_circuitboards.dm
similarity index 100%
rename from modular_skyrat/modules/stasisrework/code/machine_circuitboards.dm
rename to modular_nova/modules/stasisrework/code/machine_circuitboards.dm
diff --git a/modular_skyrat/modules/stasisrework/code/medical_designs.dm b/modular_nova/modules/stasisrework/code/medical_designs.dm
similarity index 100%
rename from modular_skyrat/modules/stasisrework/code/medical_designs.dm
rename to modular_nova/modules/stasisrework/code/medical_designs.dm
diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_nova/modules/stasisrework/code/stasissleeper.dm
similarity index 98%
rename from modular_skyrat/modules/stasisrework/code/stasissleeper.dm
rename to modular_nova/modules/stasisrework/code/stasissleeper.dm
index dde2910bf04..aae9ddbd59f 100644
--- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm
+++ b/modular_nova/modules/stasisrework/code/stasissleeper.dm
@@ -2,7 +2,7 @@
/obj/machinery/stasissleeper
name = "lifeform stasis unit"
desc = "A somewhat comfortable looking bed with a cover over it. It will keep someone in stasis."
- icon = 'modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi'
+ icon = 'modular_nova/modules/stasisrework/icons/stasissleeper.dmi'
icon_state = "sleeper"
base_icon_state = "sleeper"
density = FALSE
diff --git a/modular_skyrat/modules/stasisrework/icons/stasisbag.dmi b/modular_nova/modules/stasisrework/icons/stasisbag.dmi
similarity index 100%
rename from modular_skyrat/modules/stasisrework/icons/stasisbag.dmi
rename to modular_nova/modules/stasisrework/icons/stasisbag.dmi
diff --git a/modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi b/modular_nova/modules/stasisrework/icons/stasissleeper.dmi
similarity index 100%
rename from modular_skyrat/modules/stasisrework/icons/stasissleeper.dmi
rename to modular_nova/modules/stasisrework/icons/stasissleeper.dmi
diff --git a/modular_skyrat/modules/stasisrework/readme.md b/modular_nova/modules/stasisrework/readme.md
similarity index 100%
rename from modular_skyrat/modules/stasisrework/readme.md
rename to modular_nova/modules/stasisrework/readme.md
diff --git a/modular_skyrat/modules/station_traits/code/station_traits.dm b/modular_nova/modules/station_traits/code/station_traits.dm
similarity index 100%
rename from modular_skyrat/modules/station_traits/code/station_traits.dm
rename to modular_nova/modules/station_traits/code/station_traits.dm
diff --git a/modular_skyrat/modules/station_traits/readme.md b/modular_nova/modules/station_traits/readme.md
similarity index 100%
rename from modular_skyrat/modules/station_traits/readme.md
rename to modular_nova/modules/station_traits/readme.md
diff --git a/modular_skyrat/modules/stone/code/ore_veins.dm b/modular_nova/modules/stone/code/ore_veins.dm
similarity index 98%
rename from modular_skyrat/modules/stone/code/ore_veins.dm
rename to modular_nova/modules/stone/code/ore_veins.dm
index bfacd0768b7..a9fdd9f3288 100644
--- a/modular_skyrat/modules/stone/code/ore_veins.dm
+++ b/modular_nova/modules/stone/code/ore_veins.dm
@@ -1,7 +1,7 @@
/obj/structure/ore_vein
name = "ore vein"
desc = "An ore vein that can mined."
- icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon = 'modular_nova/modules/stone/icons/ore.dmi'
icon_state = "stone1"
base_icon_state = "stone"
density = TRUE
diff --git a/modular_skyrat/modules/stone/code/stone.dm b/modular_nova/modules/stone/code/stone.dm
similarity index 94%
rename from modular_skyrat/modules/stone/code/stone.dm
rename to modular_nova/modules/stone/code/stone.dm
index 60b18ad1f44..1c6db8adfbf 100644
--- a/modular_skyrat/modules/stone/code/stone.dm
+++ b/modular_nova/modules/stone/code/stone.dm
@@ -2,7 +2,7 @@
name = "stone"
desc = "Stone brick."
singular_name = "stone block"
- icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon = 'modular_nova/modules/stone/icons/ore.dmi'
icon_state = "sheet-stone"
inhand_icon_state = "sheet-metal"
mats_per_unit = list(/datum/material/stone=SHEET_MATERIAL_AMOUNT)
@@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \
/obj/item/stack/stone
name = "rough stone"
desc = "Large chunks of uncut stone, tough enough to safely build out of... if you could manage to cut them into something usable."
- icon = 'modular_skyrat/modules/stone/icons/ore.dmi'
+ icon = 'modular_nova/modules/stone/icons/ore.dmi'
icon_state = "stone_ore"
singular_name = "rough stone boulder"
mats_per_unit = list(/datum/material/stone = SHEET_MATERIAL_AMOUNT)
@@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \
/turf/closed/wall/mineral/stone
name = "stone wall"
desc = "A wall made of solid stone bricks."
- icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon = 'modular_nova/modules/stone/icons/wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
sheet_type = /obj/item/stack/sheet/mineral/stone
@@ -115,7 +115,7 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \
/turf/closed/indestructible/stone
name = "stone wall"
desc = "A wall made of unusually solid stone bricks."
- icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon = 'modular_nova/modules/stone/icons/wall.dmi'
icon_state = "wall-0"
base_icon_state = "wall"
smoothing_flags = SMOOTH_BITMASK
@@ -126,10 +126,10 @@ GLOBAL_LIST_INIT(stone_recipes, list ( \
/obj/structure/falsewall/stone
name = "stone wall"
desc = "A wall made of solid stone bricks."
- icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ icon = 'modular_nova/modules/stone/icons/wall.dmi'
icon_state = "wall-open"
base_icon_state = "wall"
- fake_icon = 'modular_skyrat/modules/stone/icons/wall.dmi'
+ fake_icon = 'modular_nova/modules/stone/icons/wall.dmi'
mineral = /obj/item/stack/sheet/mineral/stone
walltype = /turf/closed/wall/mineral/stone
smoothing_flags = SMOOTH_BITMASK
diff --git a/modular_skyrat/modules/stone/icons/ore.dmi b/modular_nova/modules/stone/icons/ore.dmi
similarity index 100%
rename from modular_skyrat/modules/stone/icons/ore.dmi
rename to modular_nova/modules/stone/icons/ore.dmi
diff --git a/modular_skyrat/modules/stone/icons/wall.dmi b/modular_nova/modules/stone/icons/wall.dmi
similarity index 100%
rename from modular_skyrat/modules/stone/icons/wall.dmi
rename to modular_nova/modules/stone/icons/wall.dmi
diff --git a/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm b/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm
new file mode 100644
index 00000000000..9628bf981a6
--- /dev/null
+++ b/modular_nova/modules/stormtrooper/code/stormtrooper_clothes.dm
@@ -0,0 +1,36 @@
+/obj/item/clothing/head/helmet/stormtrooper
+ name = "stormtrooper helmet"
+ desc = "A shiny white helmet with some very narrow holes for the users eyes."
+ icon = 'modular_nova/modules/stormtrooper/icons/items.dmi'
+ worn_icon = 'modular_nova/modules/stormtrooper/icons/head.dmi'
+ icon_state = "stormtrooper_helmet"
+ supports_variations_flags = NONE
+
+/obj/item/clothing/suit/armor/stormtrooper
+ name = "stormtrooper suit"
+ desc = "A shiny white armoured suit, looks like it'd be good for deflecting blaster fire."
+ icon_state = "stormtrooper_suit"
+ icon = 'modular_nova/modules/stormtrooper/icons/items.dmi'
+ worn_icon = 'modular_nova/modules/stormtrooper/icons/suit.dmi'
+ supports_variations_flags = NONE
+
+/obj/item/clothing/shoes/combat/stormtrooper
+ name = "stormtrooper boots"
+ desc = "A pair of white boots."
+ icon = 'modular_nova/modules/stormtrooper/icons/items.dmi'
+ worn_icon = 'modular_nova/modules/stormtrooper/icons/feet.dmi'
+ icon_state = "stormtrooper_boots"
+ armor_type = /datum/armor/none
+ strip_delay = 30
+ equip_delay_other = 50
+ resistance_flags = NONE
+ can_be_tied = FALSE
+ supports_variations_flags = NONE
+
+/obj/item/clothing/gloves/combat/peacekeeper/stormtrooper
+ name = "stormtrooper gloves"
+ desc = "White gloves with some limited reflective armor."
+ icon = 'modular_nova/modules/stormtrooper/icons/items.dmi'
+ worn_icon = 'modular_nova/modules/stormtrooper/icons/hands.dmi'
+ icon_state = "stormtrooper_gloves"
+ worn_icon_state = "stormtrooper_gloves"
diff --git a/modular_skyrat/modules/stormtrooper/icons/feet.dmi b/modular_nova/modules/stormtrooper/icons/feet.dmi
similarity index 100%
rename from modular_skyrat/modules/stormtrooper/icons/feet.dmi
rename to modular_nova/modules/stormtrooper/icons/feet.dmi
diff --git a/modular_skyrat/modules/stormtrooper/icons/hands.dmi b/modular_nova/modules/stormtrooper/icons/hands.dmi
similarity index 100%
rename from modular_skyrat/modules/stormtrooper/icons/hands.dmi
rename to modular_nova/modules/stormtrooper/icons/hands.dmi
diff --git a/modular_skyrat/modules/stormtrooper/icons/head.dmi b/modular_nova/modules/stormtrooper/icons/head.dmi
similarity index 100%
rename from modular_skyrat/modules/stormtrooper/icons/head.dmi
rename to modular_nova/modules/stormtrooper/icons/head.dmi
diff --git a/modular_skyrat/modules/stormtrooper/icons/items.dmi b/modular_nova/modules/stormtrooper/icons/items.dmi
similarity index 100%
rename from modular_skyrat/modules/stormtrooper/icons/items.dmi
rename to modular_nova/modules/stormtrooper/icons/items.dmi
diff --git a/modular_skyrat/modules/stormtrooper/icons/suit.dmi b/modular_nova/modules/stormtrooper/icons/suit.dmi
similarity index 100%
rename from modular_skyrat/modules/stormtrooper/icons/suit.dmi
rename to modular_nova/modules/stormtrooper/icons/suit.dmi
diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/adminhelp.dm b/modular_nova/modules/subsystems/code/ticket_ping/adminhelp.dm
similarity index 100%
rename from modular_skyrat/modules/subsystems/code/ticket_ping/adminhelp.dm
rename to modular_nova/modules/subsystems/code/ticket_ping/adminhelp.dm
diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/preference.dm b/modular_nova/modules/subsystems/code/ticket_ping/preference.dm
similarity index 100%
rename from modular_skyrat/modules/subsystems/code/ticket_ping/preference.dm
rename to modular_nova/modules/subsystems/code/ticket_ping/preference.dm
diff --git a/modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm b/modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm
similarity index 94%
rename from modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm
rename to modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm
index f80567641a0..cb0f54d9eaa 100644
--- a/modular_skyrat/modules/subsystems/code/ticket_ping/ticket_ss.dm
+++ b/modular_nova/modules/subsystems/code/ticket_ping/ticket_ss.dm
@@ -36,5 +36,5 @@ SUBSYSTEM_DEF(ticket_ping)
message_admins(span_adminnotice("There [is_or_are] currently [valid_ahelps ? "[valid_ahelps] unhandled staff ticket[valid_ahelps == 1 ? "" : "s"] open" : ""][(valid_ahelps && valid_opfors) ? " and " : ""][valid_opfors ? "[valid_opfors] unhandled Opposing Force application[valid_opfors == 1 ? "" : "s"] open" : ""]."))
for(var/client/staff as anything in GLOB.admins)
if(staff?.prefs.read_preference(/datum/preference/toggle/admin/ticket_ping))
- SEND_SOUND(staff, sound('modular_skyrat/modules/subsystems/sounds/soft_ping.ogg'))
+ SEND_SOUND(staff, sound('modular_nova/modules/subsystems/sounds/soft_ping.ogg'))
window_flash(staff, ignorepref = TRUE)
diff --git a/modular_skyrat/modules/subsystems/readme.md b/modular_nova/modules/subsystems/readme.md
similarity index 100%
rename from modular_skyrat/modules/subsystems/readme.md
rename to modular_nova/modules/subsystems/readme.md
diff --git a/modular_skyrat/modules/subsystems/sounds/soft_ping.ogg b/modular_nova/modules/subsystems/sounds/soft_ping.ogg
similarity index 100%
rename from modular_skyrat/modules/subsystems/sounds/soft_ping.ogg
rename to modular_nova/modules/subsystems/sounds/soft_ping.ogg
diff --git a/modular_skyrat/modules/suicide_verb/readme.md b/modular_nova/modules/suicide_verb/readme.md
similarity index 100%
rename from modular_skyrat/modules/suicide_verb/readme.md
rename to modular_nova/modules/suicide_verb/readme.md
diff --git a/modular_skyrat/modules/supersoups/code/soup_mixtures.dm b/modular_nova/modules/supersoups/code/soup_mixtures.dm
similarity index 100%
rename from modular_skyrat/modules/supersoups/code/soup_mixtures.dm
rename to modular_nova/modules/supersoups/code/soup_mixtures.dm
diff --git a/modular_skyrat/modules/supersoups/code/stove.dm b/modular_nova/modules/supersoups/code/stove.dm
similarity index 100%
rename from modular_skyrat/modules/supersoups/code/stove.dm
rename to modular_nova/modules/supersoups/code/stove.dm
diff --git a/modular_skyrat/modules/synths/code/README.md b/modular_nova/modules/synths/code/README.md
similarity index 100%
rename from modular_skyrat/modules/synths/code/README.md
rename to modular_nova/modules/synths/code/README.md
diff --git a/modular_skyrat/modules/synths/code/bodyparts/brain.dm b/modular_nova/modules/synths/code/bodyparts/brain.dm
similarity index 94%
rename from modular_skyrat/modules/synths/code/bodyparts/brain.dm
rename to modular_nova/modules/synths/code/bodyparts/brain.dm
index 9d92635d4d8..5638c39269f 100644
--- a/modular_skyrat/modules/synths/code/bodyparts/brain.dm
+++ b/modular_nova/modules/synths/code/bodyparts/brain.dm
@@ -5,7 +5,7 @@
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
maxHealth = 2 * STANDARD_ORGAN_THRESHOLD
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. It has an IPC serial number engraved on the top. It is usually slotted into the chest of synthetic crewmembers."
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
icon_state = "posibrain-ipc"
/// The last time (in ticks) a message about brain damage was sent. Don't touch.
var/last_message_time = 0
@@ -53,7 +53,7 @@
/obj/item/organ/internal/brain/synth/circuit
name = "compact AI circuit"
desc = "A compact and extremely complex circuit, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. It is usually slotted into the chest of synthetic crewmembers."
- icon = 'modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi'
+ icon = 'modular_nova/master_files/icons/obj/alt_silicon_brains.dmi'
icon_state = "circuit-occupied"
inhand_icon_state = "electronic"
lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi'
@@ -62,5 +62,5 @@
/obj/item/organ/internal/brain/synth/mmi
name = "compact man-machine interface"
desc = "A compact man-machine interface, perfectly dimensioned to fit in the same slot as a synthetic-compatible positronic brain. Unfortunately, the brain seems to be permanently attached to the circuitry, and it seems relatively sensitive to it's environment. It is usually slotted into the chest of synthetic crewmembers."
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
icon_state = "mmi-ipc"
diff --git a/modular_nova/modules/synths/code/bodyparts/ears.dm b/modular_nova/modules/synths/code/bodyparts/ears.dm
new file mode 100644
index 00000000000..d2248ca9f5f
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/ears.dm
@@ -0,0 +1,48 @@
+/obj/item/organ/internal/ears/synth
+ name = "auditory sensors"
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "ears-ipc"
+ desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear."
+ zone = BODY_ZONE_HEAD
+ slot = ORGAN_SLOT_EARS
+ gender = PLURAL
+ maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+
+/obj/item/organ/internal/ears/synth/emp_act(severity)
+ . = ..()
+
+ if(!owner || . & EMP_PROTECT_SELF)
+ return
+
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+
+ switch(severity)
+ if(EMP_HEAVY)
+ owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER)
+ owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER)
+ adjustEarDamage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_DEAF_STACKS)
+ to_chat(owner, span_warning("Alert: Null feedback from auditory sensors detected, seek maintenance immediately. Error Code: AS-105"))
+
+ if(EMP_LIGHT)
+ owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION)
+ owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION)
+ adjustEarDamage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_DEAF_STACKS)
+ to_chat(owner, span_warning("Alert: Anomalous feedback from auditory sensors detected. Error Code: AS-50"))
+
+/datum/design/synth_ears
+ name = "Auditory Sensors"
+ desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear."
+ id = "synth_ears"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/ears/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/eyes.dm b/modular_nova/modules/synths/code/bodyparts/eyes.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/bodyparts/eyes.dm
rename to modular_nova/modules/synths/code/bodyparts/eyes.dm
diff --git a/modular_nova/modules/synths/code/bodyparts/heart.dm b/modular_nova/modules/synths/code/bodyparts/heart.dm
new file mode 100644
index 00000000000..111a5a95cfc
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/heart.dm
@@ -0,0 +1,44 @@
+/obj/item/organ/internal/heart/synth
+ name = "hydraulic pump engine"
+ desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move."
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "heart-ipc-on"
+ base_icon_state = "heart-ipc"
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD // 1.5x due to synthcode.tm being weird
+ zone = BODY_ZONE_CHEST
+ slot = ORGAN_SLOT_HEART
+ var/last_message_time = 0
+
+/obj/item/organ/internal/heart/synth/emp_act(severity)
+ . = ..()
+
+ if(!owner || . & EMP_PROTECT_SELF)
+ return
+
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+
+ switch(severity)
+ if(EMP_HEAVY)
+ to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken severe damage, seek maintenance immediately. Error code: HP300-10."))
+ apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+ if(EMP_LIGHT)
+ to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken light damage, seek maintenance immediately. Error code: HP300-05."))
+ apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+
+/datum/design/synth_heart
+ name = "Hydraulic Pump Engine"
+ desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move."
+ id = "synth_heart"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/heart/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/internal_computer/brain.dm b/modular_nova/modules/synths/code/bodyparts/internal_computer/brain.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/bodyparts/internal_computer/brain.dm
rename to modular_nova/modules/synths/code/bodyparts/internal_computer/brain.dm
diff --git a/modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm b/modular_nova/modules/synths/code/bodyparts/internal_computer/internal_computer.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/bodyparts/internal_computer/internal_computer.dm
rename to modular_nova/modules/synths/code/bodyparts/internal_computer/internal_computer.dm
diff --git a/modular_skyrat/modules/synths/code/bodyparts/limbs.dm b/modular_nova/modules/synths/code/bodyparts/limbs.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/bodyparts/limbs.dm
rename to modular_nova/modules/synths/code/bodyparts/limbs.dm
diff --git a/modular_nova/modules/synths/code/bodyparts/liver.dm b/modular_nova/modules/synths/code/bodyparts/liver.dm
new file mode 100644
index 00000000000..9ee887bcfc5
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/liver.dm
@@ -0,0 +1,44 @@
+/obj/item/organ/internal/liver/synth
+ name = "reagent processing unit"
+ desc = "An electronic device that processes the beneficial chemicals for the synthetic user."
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "liver-ipc"
+ filterToxins = FALSE //We dont filter them, we're immune to them
+ zone = BODY_ZONE_CHEST
+ slot = ORGAN_SLOT_LIVER
+ maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+
+/obj/item/organ/internal/liver/synth/emp_act(severity)
+ . = ..()
+
+ if(!owner || . & EMP_PROTECT_SELF)
+ return
+
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+
+ switch(severity)
+ if(EMP_HEAVY)
+ to_chat(owner, span_warning("Alert: Critical! Reagent processing unit failure, seek maintenance immediately. Error Code: DR-1k"))
+ apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+
+ if(EMP_LIGHT)
+ to_chat(owner, span_warning("Alert: Reagent processing unit failure, seek maintenance for diagnostic. Error Code: DR-0k"))
+ apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+
+/datum/design/synth_liver
+ name = "Reagent Processing Unit"
+ desc = "An electronic device that processes the beneficial chemicals for the synthetic user."
+ id = "synth_liver"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/liver/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_nova/modules/synths/code/bodyparts/lungs.dm b/modular_nova/modules/synths/code/bodyparts/lungs.dm
new file mode 100644
index 00000000000..99ad440b97e
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/lungs.dm
@@ -0,0 +1,49 @@
+/obj/item/organ/internal/lungs/synth
+ name = "heatsink"
+ desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." //Purposefully left the 'fluid medium' ambigious for interpretation of the character, whether it be air or fluid cooling
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "lungs-ipc"
+ safe_nitro_min = 0
+ safe_co2_max = 0
+ safe_plasma_min = 0
+ safe_plasma_max = 0
+ safe_oxygen_min = 0 //What are you doing man, dont breathe with those!
+ safe_oxygen_max = 0
+ zone = BODY_ZONE_CHEST
+ slot = ORGAN_SLOT_LUNGS
+ maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+
+/obj/item/organ/internal/lungs/synth/emp_act(severity)
+ . = ..()
+
+ if(!owner || . & EMP_PROTECT_SELF)
+ return
+
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+
+ switch(severity)
+ if(EMP_HEAVY)
+ to_chat(owner, span_warning("Alert: Critical cooling system failure! Seek maintenance immediately. Error Code: 5H-17"))
+ owner.adjust_bodytemperature(SYNTH_HEAVY_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT)
+
+ if(EMP_LIGHT)
+ to_chat(owner, span_warning("Alert: Major cooling system failure!"))
+ owner.adjust_bodytemperature(SYNTH_LIGHT_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT)
+
+/datum/design/synth_heatsink
+ name = "Heatsink"
+ desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs."
+ id = "synth_lungs"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/lungs/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/power_cord.dm b/modular_nova/modules/synths/code/bodyparts/power_cord.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/bodyparts/power_cord.dm
rename to modular_nova/modules/synths/code/bodyparts/power_cord.dm
diff --git a/modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm b/modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm
similarity index 94%
rename from modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm
rename to modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm
index 399b5fd3660..76c4fbe3243 100644
--- a/modular_skyrat/modules/synths/code/bodyparts/silicon_alt_brains.dm
+++ b/modular_nova/modules/synths/code/bodyparts/silicon_alt_brains.dm
@@ -3,7 +3,7 @@
/obj/item/mmi/posibrain/circuit
name = "compact AI circuit"
desc = "A compact circuit, perfectly dimensioned to fit in the same slot as a cyborg's positronic brain."
- icon = 'modular_skyrat/master_files/icons/obj/alt_silicon_brains.dmi'
+ icon = 'modular_nova/master_files/icons/obj/alt_silicon_brains.dmi'
icon_state = "circuit"
base_icon_state = "circuit"
inhand_icon_state = "electronic"
@@ -18,7 +18,7 @@
recharge_message = span_warning("The compact AI circuit isn't ready to activate again yet! Give it some time to recharge.")
// CODE THAT ACTUALLY APPLIES THE BRAINS.
-// See modular_skyrat/master_files/code/modules/client/preferences/brain.dm for Synth/IPC application.
+// See modular_nova/master_files/code/modules/client/preferences/brain.dm for Synth/IPC application.
/// Returns a type to use based off of a given preference value (ORGAN_PREF_POSI_BRAIN, ORGAN_PREF_MMI_BRAIN and ORGAN_PREF_CIRCUIT_BRAIN), and if they're a cyborg or not.
/mob/living/proc/prefs_get_brain_to_use(value, is_cyborg = FALSE)
diff --git a/modular_nova/modules/synths/code/bodyparts/stomach.dm b/modular_nova/modules/synths/code/bodyparts/stomach.dm
new file mode 100644
index 00000000000..45f5424380d
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/stomach.dm
@@ -0,0 +1,66 @@
+/obj/item/organ/internal/stomach/synth
+ name = "synthetic bio-reactor"
+ icon = 'modular_nova/master_files/icons/obj/surgery.dmi'
+ icon_state = "stomach-ipc"
+ w_class = WEIGHT_CLASS_NORMAL
+ zone = BODY_ZONE_CHEST
+ slot = ORGAN_SLOT_STOMACH
+ maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
+ zone = "chest"
+ slot = "stomach"
+ desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered."
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+
+/obj/item/organ/internal/stomach/synth/emp_act(severity)
+ . = ..()
+
+ if(!owner || . & EMP_PROTECT_SELF)
+ return
+
+ if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
+ COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
+
+ switch(severity)
+ if(EMP_HEAVY)
+ owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_HEAVY_EMP_CHARGE_LOSS)
+ apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+ to_chat(owner, span_warning("Alert: Severe battery discharge!"))
+
+ if(EMP_LIGHT)
+ owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_LIGHT_EMP_CHARGE_LOSS)
+ apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
+ to_chat(owner, span_warning("Alert: Minor battery discharge!"))
+
+/datum/design/synth_stomach
+ name = "Synthetic Bio-Reactor"
+ desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered."
+ id = "synth_stomach"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/stomach/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
+
+/obj/item/organ/internal/stomach/synth/Insert(mob/living/carbon/receiver, special, drop_if_replaced)
+ . = ..()
+ RegisterSignal(receiver, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(on_borg_charge))
+
+/obj/item/organ/internal/stomach/synth/Remove(mob/living/carbon/stomach_owner, special)
+ . = ..()
+ UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT)
+
+///Handles charging the synth from borg chargers
+/obj/item/organ/internal/stomach/synth/proc/on_borg_charge(datum/source, amount)
+ SIGNAL_HANDLER
+
+ if(owner.nutrition >= NUTRITION_LEVEL_ALMOST_FULL)
+ return
+
+ amount /= 50 // Lowers the charging amount so it isn't instant
+ owner.nutrition = min((owner.nutrition + amount), NUTRITION_LEVEL_ALMOST_FULL) // Makes sure we don't make the synth too full, which would apply the overweight slowdown
diff --git a/modular_nova/modules/synths/code/bodyparts/tongue.dm b/modular_nova/modules/synths/code/bodyparts/tongue.dm
new file mode 100644
index 00000000000..c7ceb7a7bb0
--- /dev/null
+++ b/modular_nova/modules/synths/code/bodyparts/tongue.dm
@@ -0,0 +1,38 @@
+/obj/item/organ/internal/tongue/synth
+ name = "synthetic voicebox"
+ desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
+ icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi'
+ icon_state = "cybertongue"
+ say_mod = "beeps"
+ attack_verb_continuous = list("beeps", "boops")
+ attack_verb_simple = list("beep", "boop")
+ modifies_speech = TRUE
+ taste_sensitivity = 25 // not as good as an organic tongue
+ liked_foodtypes = NONE
+ disliked_foodtypes = NONE
+ maxHealth = 100 //RoboTongue!
+ zone = BODY_ZONE_HEAD
+ slot = ORGAN_SLOT_TONGUE
+ organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
+
+/obj/item/organ/internal/tongue/synth/can_speak_language(language)
+ return TRUE
+
+/obj/item/organ/internal/tongue/synth/handle_speech(datum/source, list/speech_args)
+ speech_args[SPEECH_SPANS] |= SPAN_ROBOT
+
+/datum/design/synth_tongue
+ name = "Synthetic Tongue"
+ desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
+ id = "synth_tongue"
+ build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
+ construction_time = 4 SECONDS
+ materials = list(
+ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
+ /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
+ )
+ build_path = /obj/item/organ/internal/tongue/synth
+ category = list(
+ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
+ )
+ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/defib.dm b/modular_nova/modules/synths/code/defib.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/defib.dm
rename to modular_nova/modules/synths/code/defib.dm
diff --git a/modular_skyrat/modules/synths/code/reagents/blood_pack.dm b/modular_nova/modules/synths/code/reagents/blood_pack.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/reagents/blood_pack.dm
rename to modular_nova/modules/synths/code/reagents/blood_pack.dm
diff --git a/modular_skyrat/modules/synths/code/reagents/pill.dm b/modular_nova/modules/synths/code/reagents/pill.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/reagents/pill.dm
rename to modular_nova/modules/synths/code/reagents/pill.dm
diff --git a/modular_skyrat/modules/synths/code/reagents/pill_bottles.dm b/modular_nova/modules/synths/code/reagents/pill_bottles.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/reagents/pill_bottles.dm
rename to modular_nova/modules/synths/code/reagents/pill_bottles.dm
diff --git a/modular_nova/modules/synths/code/reagents/reagents.dm b/modular_nova/modules/synths/code/reagents/reagents.dm
new file mode 100644
index 00000000000..cc668d98cd1
--- /dev/null
+++ b/modular_nova/modules/synths/code/reagents/reagents.dm
@@ -0,0 +1,104 @@
+#define NANITE_SLURRY_ORGANIC_PURGE_RATE 4
+#define NANITE_SLURRY_ORGANIC_VOMIT_CHANCE 25
+
+/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
+ process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Let's not cripple synth ops
+
+/datum/reagent/medicine/stimulants
+ process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Syndicate developed 'accelerants' for synths?
+
+/datum/reagent/medicine/leporazine
+ process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
+
+/datum/reagent/flightpotion
+ process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
+
+// REAGENTS FOR SYNTHS
+
+/datum/reagent/medicine/system_cleaner
+ name = "System Cleaner"
+ description = "Neutralizes harmful chemical compounds inside synthetic systems and refreshes system software."
+ reagent_state = LIQUID
+ color = "#F1C40F"
+ taste_description = "ethanol"
+ metabolization_rate = 2 * REAGENTS_METABOLISM
+ process_flags = REAGENT_SYNTHETIC
+
+/datum/reagent/medicine/system_cleaner/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
+ affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, 0)
+ affected_mob.adjust_disgust(-5 * REM * seconds_per_tick)
+ var/remove_amount = 1 * REM * seconds_per_tick;
+ for(var/thing in affected_mob.reagents.reagent_list)
+ var/datum/reagent/reagent = thing
+ if(reagent != src)
+ affected_mob.reagents.remove_reagent(reagent.type, remove_amount)
+ ..()
+ return TRUE
+
+/datum/reagent/medicine/liquid_solder
+ name = "Liquid Solder"
+ description = "Repairs brain damage in synthetics."
+ reagent_state = LIQUID
+ color = "#727272"
+ taste_description = "metal"
+ process_flags = REAGENT_SYNTHETIC
+
+/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick)
+ affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3 * REM * seconds_per_tick)
+ if(prob(10))
+ affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
+ return ..()
+
+/datum/reagent/medicine/nanite_slurry
+ name = "Nanite Slurry"
+ description = "A localized swarm of nanomachines specialized in repairing mechanical parts. Due to the nanites needing to interface with the host's systems to repair them, a surplus of them will cause them to overheat, or for the swarm to forcefully eject out of the mouth of organics for safety."
+ reagent_state = LIQUID
+ color = "#cccccc"
+ overdose_threshold = 20
+ metabolization_rate = 1.25 * REAGENTS_METABOLISM
+ process_flags = REAGENT_SYNTHETIC | REAGENT_ORGANIC
+ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
+ /// How much brute and burn individually is healed per tick
+ var/healing = 1
+ /// How much body temperature is increased by per overdose cycle on robotic bodyparts.
+ var/temperature_change = 50
+
+
+/datum/reagent/medicine/nanite_slurry/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick)
+ var/heal_amount = healing * REM * seconds_per_tick
+ affected_mob.heal_bodypart_damage(heal_amount, heal_amount, required_bodytype = BODYTYPE_ROBOTIC)
+ return ..()
+
+/datum/reagent/medicine/nanite_slurry/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
+ if(affected_mob.mob_biotypes & MOB_ROBOTIC)
+ affected_mob.adjust_bodytemperature(temperature_change * REM * seconds_per_tick)
+ return ..()
+ affected_mob.reagents.remove_reagent(type, NANITE_SLURRY_ORGANIC_PURGE_RATE) //gets removed from organics very fast
+ if(prob(NANITE_SLURRY_ORGANIC_VOMIT_CHANCE))
+ affected_mob.vomit(vomit_flags = (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM), vomit_type = /obj/effect/decal/cleanable/vomit/nanites)
+ return TRUE
+
+#undef NANITE_SLURRY_ORGANIC_PURGE_RATE
+#undef NANITE_SLURRY_ORGANIC_VOMIT_CHANCE
+
+
+/datum/reagent/medicine/taste_suppressor
+ name = "Taste Suppressor"
+ description = "A colorless medicine aimed to dull the sense of taste of those that consumed it, as long as it's in their system."
+ color = "#AAAAAA77"
+ reagent_state = LIQUID
+ metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
+ chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING // It has REAGENT_BLOOD_REGENERATING only because it makes it so Hemophages can safely drink it, which makes complete sense considering this is meant to suppress their tumor's reactiveness to anything that doesn't regenerate blood.
+
+
+/datum/reagent/medicine/taste_suppressor/on_mob_metabolize(mob/living/affected_mob)
+ . = ..()
+
+ ADD_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT)
+
+
+/datum/reagent/medicine/taste_suppressor/on_mob_end_metabolize(mob/living/affected_mob)
+ . = ..()
+
+ REMOVE_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT)
diff --git a/modular_skyrat/modules/synths/code/research_nodes.dm b/modular_nova/modules/synths/code/research_nodes.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/research_nodes.dm
rename to modular_nova/modules/synths/code/research_nodes.dm
diff --git a/modular_skyrat/modules/synths/code/species/prefsmenu.dm b/modular_nova/modules/synths/code/species/prefsmenu.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/species/prefsmenu.dm
rename to modular_nova/modules/synths/code/species/prefsmenu.dm
diff --git a/modular_skyrat/modules/synths/code/species/screen.dm b/modular_nova/modules/synths/code/species/screen.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/species/screen.dm
rename to modular_nova/modules/synths/code/species/screen.dm
diff --git a/modular_skyrat/modules/synths/code/species/synthetic.dm b/modular_nova/modules/synths/code/species/synthetic.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/species/synthetic.dm
rename to modular_nova/modules/synths/code/species/synthetic.dm
diff --git a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm b/modular_nova/modules/synths/code/surgery/mechanic_steps.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm
rename to modular_nova/modules/synths/code/surgery/mechanic_steps.dm
diff --git a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm b/modular_nova/modules/synths/code/surgery/robot_brain_surgery.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm
rename to modular_nova/modules/synths/code/surgery/robot_brain_surgery.dm
diff --git a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm b/modular_nova/modules/synths/code/surgery/robot_chassis_restoration.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm
rename to modular_nova/modules/synths/code/surgery/robot_chassis_restoration.dm
diff --git a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm b/modular_nova/modules/synths/code/surgery/robot_healing.dm
similarity index 100%
rename from modular_skyrat/modules/synths/code/surgery/robot_healing.dm
rename to modular_nova/modules/synths/code/surgery/robot_healing.dm
diff --git a/modular_skyrat/modules/tableflip/code/flipped_table.dm b/modular_nova/modules/tableflip/code/flipped_table.dm
similarity index 98%
rename from modular_skyrat/modules/tableflip/code/flipped_table.dm
rename to modular_nova/modules/tableflip/code/flipped_table.dm
index 80776abf09a..b3a1fe08e2f 100644
--- a/modular_skyrat/modules/tableflip/code/flipped_table.dm
+++ b/modular_nova/modules/tableflip/code/flipped_table.dm
@@ -1,7 +1,7 @@
/obj/structure/flippedtable
name = "flipped table"
desc = "A flipped table."
- icon = 'modular_skyrat/modules/tableflip/icons/flipped_tables.dmi'
+ icon = 'modular_nova/modules/tableflip/icons/flipped_tables.dmi'
icon_state = "table"
anchored = TRUE
density = TRUE
diff --git a/modular_skyrat/modules/tableflip/icons/flipped_tables.dmi b/modular_nova/modules/tableflip/icons/flipped_tables.dmi
similarity index 100%
rename from modular_skyrat/modules/tableflip/icons/flipped_tables.dmi
rename to modular_nova/modules/tableflip/icons/flipped_tables.dmi
diff --git a/modular_nova/modules/tagline/code/world.dm b/modular_nova/modules/tagline/code/world.dm
new file mode 100644
index 00000000000..1e3e74c783e
--- /dev/null
+++ b/modular_nova/modules/tagline/code/world.dm
@@ -0,0 +1,34 @@
+/world/proc/update_status()
+
+ var/list/features = list()
+
+ var/new_status = ""
+ var/hostedby
+ if(config)
+ var/server_name = CONFIG_GET(string/servername)
+ if (server_name)
+ new_status += "[server_name] — "
+ hostedby = CONFIG_GET(string/hostedby)
+
+ new_status += " ("
+ new_status += ""
+ new_status += "Discord"
+ new_status += ")\]"
+ new_status += " [CONFIG_GET(string/servertagline)] "
+
+
+ var/players = GLOB.clients.len
+
+ if(SSmapping.config)
+ features += "[SSmapping.config.map_name]"
+
+ features += "~[players] player[players == 1 ? "": "s"]"
+
+ if (!host && hostedby)
+ features += "hosted by [hostedby] "
+
+ if(length(features))
+ new_status += "\[[jointext(features, ", ")]"
+
+ status = new_status
+
diff --git a/modular_skyrat/modules/tagline/readme.md b/modular_nova/modules/tagline/readme.md
similarity index 100%
rename from modular_skyrat/modules/tagline/readme.md
rename to modular_nova/modules/tagline/readme.md
diff --git a/modular_skyrat/modules/teshari/code/_clothing_defines.dm b/modular_nova/modules/teshari/code/_clothing_defines.dm
similarity index 100%
rename from modular_skyrat/modules/teshari/code/_clothing_defines.dm
rename to modular_nova/modules/teshari/code/_clothing_defines.dm
diff --git a/modular_skyrat/modules/teshari/code/_teshari.dm b/modular_nova/modules/teshari/code/_teshari.dm
similarity index 97%
rename from modular_skyrat/modules/teshari/code/_teshari.dm
rename to modular_nova/modules/teshari/code/_teshari.dm
index 1b09214e5f7..83dcc7b11be 100644
--- a/modular_skyrat/modules/teshari/code/_teshari.dm
+++ b/modular_nova/modules/teshari/code/_teshari.dm
@@ -5,7 +5,7 @@
/datum/species/teshari
name = "Teshari"
id = SPECIES_TESHARI
- eyes_icon = 'modular_skyrat/modules/organs/icons/teshari_eyes.dmi'
+ eyes_icon = 'modular_nova/modules/organs/icons/teshari_eyes.dmi'
inherent_traits = list(
TRAIT_ADVANCEDTOOLUSER,
TRAIT_CAN_STRIP,
diff --git a/modular_skyrat/modules/teshari/code/language_holder.dm b/modular_nova/modules/teshari/code/language_holder.dm
similarity index 100%
rename from modular_skyrat/modules/teshari/code/language_holder.dm
rename to modular_nova/modules/teshari/code/language_holder.dm
diff --git a/modular_skyrat/modules/teshari/code/schechi.dm b/modular_nova/modules/teshari/code/schechi.dm
similarity index 87%
rename from modular_skyrat/modules/teshari/code/schechi.dm
rename to modular_nova/modules/teshari/code/schechi.dm
index 47c2c136cc0..e049738f639 100644
--- a/modular_skyrat/modules/teshari/code/schechi.dm
+++ b/modular_nova/modules/teshari/code/schechi.dm
@@ -8,6 +8,6 @@
"e", "she", "re", "me", "ne", "te", "se", "le", "ai",
"a", "ra", "ca", "scha", "tara", "sa", "la", "na",
)
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
+ icon = 'modular_nova/master_files/icons/misc/language.dmi'
icon_state = "schechi"
default_priority = 90
diff --git a/modular_skyrat/modules/teshari/code/teshari_bodytype.dm b/modular_nova/modules/teshari/code/teshari_bodytype.dm
similarity index 100%
rename from modular_skyrat/modules/teshari/code/teshari_bodytype.dm
rename to modular_nova/modules/teshari/code/teshari_bodytype.dm
diff --git a/modular_skyrat/modules/teshari/code/teshari_clothes.dm b/modular_nova/modules/teshari/code/teshari_clothes.dm
similarity index 100%
rename from modular_skyrat/modules/teshari/code/teshari_clothes.dm
rename to modular_nova/modules/teshari/code/teshari_clothes.dm
diff --git a/modular_skyrat/modules/ticket_counter/code/counter.dm b/modular_nova/modules/ticket_counter/code/counter.dm
similarity index 100%
rename from modular_skyrat/modules/ticket_counter/code/counter.dm
rename to modular_nova/modules/ticket_counter/code/counter.dm
diff --git a/modular_skyrat/modules/time_clock/code/console.dm b/modular_nova/modules/time_clock/code/console.dm
similarity index 98%
rename from modular_skyrat/modules/time_clock/code/console.dm
rename to modular_nova/modules/time_clock/code/console.dm
index 0305045c511..7a120e1be4b 100644
--- a/modular_skyrat/modules/time_clock/code/console.dm
+++ b/modular_nova/modules/time_clock/code/console.dm
@@ -3,7 +3,7 @@
/obj/machinery/time_clock
name = "time clock"
desc = "Allows employees to clock in and out of their jobs"
- icon = 'modular_skyrat/modules/time_clock/icons/machinery/console.dmi'
+ icon = 'modular_nova/modules/time_clock/icons/machinery/console.dmi'
icon_state = "timeclock"
density = FALSE
diff --git a/modular_skyrat/modules/time_clock/code/console_tgui.dm b/modular_nova/modules/time_clock/code/console_tgui.dm
similarity index 100%
rename from modular_skyrat/modules/time_clock/code/console_tgui.dm
rename to modular_nova/modules/time_clock/code/console_tgui.dm
diff --git a/modular_skyrat/modules/time_clock/code/mind.dm b/modular_nova/modules/time_clock/code/mind.dm
similarity index 100%
rename from modular_skyrat/modules/time_clock/code/mind.dm
rename to modular_nova/modules/time_clock/code/mind.dm
diff --git a/modular_skyrat/modules/time_clock/code/off_duty_component.dm b/modular_nova/modules/time_clock/code/off_duty_component.dm
similarity index 97%
rename from modular_skyrat/modules/time_clock/code/off_duty_component.dm
rename to modular_nova/modules/time_clock/code/off_duty_component.dm
index c2f26fb7347..17538fe9111 100644
--- a/modular_skyrat/modules/time_clock/code/off_duty_component.dm
+++ b/modular_nova/modules/time_clock/code/off_duty_component.dm
@@ -25,7 +25,7 @@
RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(attempt_unlock))
-/datum/component/off_duty_timer/Destroy(force, silent)
+/datum/component/off_duty_timer/Destroy(force)
UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY)
if(stored_trim)
qdel(stored_trim)
diff --git a/modular_skyrat/modules/time_clock/icons/machinery/console.dmi b/modular_nova/modules/time_clock/icons/machinery/console.dmi
similarity index 100%
rename from modular_skyrat/modules/time_clock/icons/machinery/console.dmi
rename to modular_nova/modules/time_clock/icons/machinery/console.dmi
diff --git a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm b/modular_nova/modules/title_screen/code/_title_screen_defines.dm
similarity index 95%
rename from modular_skyrat/modules/title_screen/code/_title_screen_defines.dm
rename to modular_nova/modules/title_screen/code/_title_screen_defines.dm
index 6ba1050a411..64761e8532f 100644
--- a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm
+++ b/modular_nova/modules/title_screen/code/_title_screen_defines.dm
@@ -1,7 +1,7 @@
#define DEFAULT_TITLE_MAP_LOADTIME (150 SECONDS)
-#define DEFAULT_TITLE_SCREEN_IMAGE 'modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png'
-#define DEFAULT_TITLE_LOADING_SCREEN 'modular_skyrat/modules/title_screen/icons/loading_screen.gif'
+#define DEFAULT_TITLE_SCREEN_IMAGE 'modular_nova/modules/title_screen/icons/nova_sector_title_screen.png'
+#define DEFAULT_TITLE_LOADING_SCREEN 'modular_nova/modules/title_screen/icons/loading_screen.gif'
#define TITLE_PROGRESS_CACHE_FILE "data/progress_cache.json"
#define TITLE_PROGRESS_CACHE_VERSION "2"
diff --git a/modular_skyrat/modules/title_screen/code/new_player.dm b/modular_nova/modules/title_screen/code/new_player.dm
similarity index 98%
rename from modular_skyrat/modules/title_screen/code/new_player.dm
rename to modular_nova/modules/title_screen/code/new_player.dm
index 33e8a964695..711d8518949 100644
--- a/modular_skyrat/modules/title_screen/code/new_player.dm
+++ b/modular_nova/modules/title_screen/code/new_player.dm
@@ -112,7 +112,7 @@
winset(client, "status_bar", "is-visible=true")
/mob/dead/new_player/proc/play_lobby_button_sound()
- SEND_SOUND(src, sound('modular_skyrat/master_files/sound/effects/save.ogg'))
+ SEND_SOUND(src, sound('modular_nova/master_files/sound/effects/save.ogg'))
/**
* Allows the player to select a server to join from any loaded servers.
diff --git a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm b/modular_nova/modules/title_screen/code/title_screen_controls.dm
similarity index 96%
rename from modular_skyrat/modules/title_screen/code/title_screen_controls.dm
rename to modular_nova/modules/title_screen/code/title_screen_controls.dm
index 3f241af0f23..9e81494a2c3 100644
--- a/modular_skyrat/modules/title_screen/code/title_screen_controls.dm
+++ b/modular_nova/modules/title_screen/code/title_screen_controls.dm
@@ -42,7 +42,7 @@
return
for(var/mob/dead/new_player/new_player in GLOB.new_player_list)
to_chat(new_player, span_boldannounce("TITLE NOTICE UPDATED: [new_notice]"))
- SEND_SOUND(new_player, sound('modular_skyrat/modules/admin/sound/duckhonk.ogg'))
+ SEND_SOUND(new_player, sound('modular_nova/modules/admin/sound/duckhonk.ogg'))
/**
* Reloads the titlescreen if it is bugged for someone.
diff --git a/modular_skyrat/modules/title_screen/code/title_screen_html.dm b/modular_nova/modules/title_screen/code/title_screen_html.dm
similarity index 100%
rename from modular_skyrat/modules/title_screen/code/title_screen_html.dm
rename to modular_nova/modules/title_screen/code/title_screen_html.dm
diff --git a/modular_skyrat/modules/title_screen/code/title_screen_pref_middleware.dm b/modular_nova/modules/title_screen/code/title_screen_pref_middleware.dm
similarity index 100%
rename from modular_skyrat/modules/title_screen/code/title_screen_pref_middleware.dm
rename to modular_nova/modules/title_screen/code/title_screen_pref_middleware.dm
diff --git a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm b/modular_nova/modules/title_screen/code/title_screen_subsystem.dm
similarity index 100%
rename from modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm
rename to modular_nova/modules/title_screen/code/title_screen_subsystem.dm
diff --git a/modular_skyrat/modules/title_screen/icons/loading_screen.gif b/modular_nova/modules/title_screen/icons/loading_screen.gif
similarity index 100%
rename from modular_skyrat/modules/title_screen/icons/loading_screen.gif
rename to modular_nova/modules/title_screen/icons/loading_screen.gif
diff --git a/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png b/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png
new file mode 100644
index 00000000000..b9cd51a32f3
Binary files /dev/null and b/modular_nova/modules/title_screen/icons/nova_sector_title_screen.png differ
diff --git a/modular_skyrat/modules/title_screen/readme.md b/modular_nova/modules/title_screen/readme.md
similarity index 100%
rename from modular_skyrat/modules/title_screen/readme.md
rename to modular_nova/modules/title_screen/readme.md
diff --git a/modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm b/modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm
similarity index 78%
rename from modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm
rename to modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm
index d6821ae8a58..4d3d6f64072 100644
--- a/modular_skyrat/modules/tribal_extended/code/ammo/caseless/arrow.dm
+++ b/modular_nova/modules/tribal_extended/code/ammo/caseless/arrow.dm
@@ -1,20 +1,20 @@
/obj/item/ammo_casing/arrow/ash
name = "ashen arrow"
desc = "An arrow made from ash and iron. They're cheap, but they fell the beasts of lavaland like none other."
- icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi'
+ icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi'
icon_state = "ashenarrow"
projectile_type = /obj/projectile/bullet/arrow/ash
/obj/item/ammo_casing/arrow/bone
name = "bone arrow"
desc = "An arrow made of bone and sinew. The tip is sharp and jagged, suitable for digging into flesh."
- icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi'
+ icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi'
icon_state = "bonearrow"
projectile_type = /obj/projectile/bullet/arrow/bone
/obj/item/ammo_casing/arrow/bronze
name = "bronze arrow"
desc = "An arrow tipped with bronze. Fit for killing gods."
- icon = 'modular_skyrat/modules/tribal_extended/icons/ammo.dmi'
+ icon = 'modular_nova/modules/tribal_extended/icons/ammo.dmi'
icon_state = "bronzearrow"
projectile_type = /obj/projectile/bullet/arrow/bronze
diff --git a/modular_skyrat/modules/tribal_extended/code/ammo/reusable/arrow.dm b/modular_nova/modules/tribal_extended/code/ammo/reusable/arrow.dm
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/code/ammo/reusable/arrow.dm
rename to modular_nova/modules/tribal_extended/code/ammo/reusable/arrow.dm
diff --git a/modular_nova/modules/tribal_extended/code/crafting.dm b/modular_nova/modules/tribal_extended/code/crafting.dm
new file mode 100644
index 00000000000..4896394a550
--- /dev/null
+++ b/modular_nova/modules/tribal_extended/code/crafting.dm
@@ -0,0 +1,5 @@
+/obj/item/weaponcrafting/silkstring
+ name = "string"
+ desc = "A long piece of string that looks like a cable coil."
+ icon = 'modular_nova/modules/tribal_extended/icons/crafting.dmi'
+ icon_state = "silkstring"
diff --git a/modular_skyrat/modules/tribal_extended/code/recipes.dm b/modular_nova/modules/tribal_extended/code/recipes.dm
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/code/recipes.dm
rename to modular_nova/modules/tribal_extended/code/recipes.dm
diff --git a/modular_nova/modules/tribal_extended/code/weapons/bow.dm b/modular_nova/modules/tribal_extended/code/weapons/bow.dm
new file mode 100644
index 00000000000..c9c8955f8ea
--- /dev/null
+++ b/modular_nova/modules/tribal_extended/code/weapons/bow.dm
@@ -0,0 +1,36 @@
+/obj/item/gun/ballistic/bow/tribalbow
+ icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi'
+ lefthand_file = 'modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/tribal_extended/icons/bows_righthand.dmi'
+ worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi'
+ inhand_icon_state = "bow"
+ icon_state = "bow_unloaded"
+ base_icon_state = "bow"
+ worn_icon_state = "bow"
+ slot_flags = ITEM_SLOT_BACK
+
+/obj/item/gun/ballistic/bow/tribalbow/update_icon()
+ . = ..()
+ icon_state = "[base_icon_state]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
+
+
+/obj/item/gun/ballistic/bow/tribalbow/ashen
+ name = "bone bow"
+ desc = "Some sort of primitive projectile weapon made of bone and wrapped sinew, oddly robust."
+ icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi'
+ icon_state = "ashenbow_unloaded"
+ base_icon_state = "ashenbow"
+ inhand_icon_state = "ashenbow"
+ worn_icon_state = "ashenbow"
+ force = 20
+
+/obj/item/gun/ballistic/bow/tribalbow/pipe
+ name = "pipe bow"
+ desc = "Portable and sleek, but you'd be better off hitting someone with a pool noodle."
+ icon = 'modular_nova/modules/tribal_extended/icons/projectile.dmi'
+ icon_state = "pipebow_unloaded"
+ base_icon_state = "pipebow"
+ inhand_icon_state = "pipebow"
+ worn_icon_state = "pipebow"
+ force = 10
+ slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE
diff --git a/modular_nova/modules/tribal_extended/code/weapons/shield.dm b/modular_nova/modules/tribal_extended/code/weapons/shield.dm
new file mode 100644
index 00000000000..d56098b71a8
--- /dev/null
+++ b/modular_nova/modules/tribal_extended/code/weapons/shield.dm
@@ -0,0 +1,14 @@
+/obj/item/shield/goliath
+ name = "goliath shield"
+ desc = "A shield made from interwoven plates of goliath hide."
+ icon = 'modular_nova/modules/tribal_extended/icons/shields.dmi'
+ icon_state = "goliath_shield"
+ lefthand_file = 'modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/tribal_extended/icons/shields_righthand.dmi'
+ worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi'
+ worn_icon_state = "goliath_shield"
+ inhand_icon_state = "goliath_shield"
+ max_integrity = 200
+ w_class = WEIGHT_CLASS_BULKY
+ shield_break_sound = 'sound/effects/bang.ogg'
+ shield_break_leftover = /obj/item/stack/sheet/animalhide/goliath_hide
diff --git a/modular_nova/modules/tribal_extended/code/weapons/sword.dm b/modular_nova/modules/tribal_extended/code/weapons/sword.dm
new file mode 100644
index 00000000000..311c81e1361
--- /dev/null
+++ b/modular_nova/modules/tribal_extended/code/weapons/sword.dm
@@ -0,0 +1,23 @@
+/obj/item/claymore/bone
+ name = "bone sword"
+ desc = "Jagged pieces of bone are tied to what looks like a goliaths femur."
+ icon = 'modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi'
+ lefthand_file = 'modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi'
+ righthand_file = 'modular_nova/modules/tribal_extended/icons/swords_righthand.dmi'
+ worn_icon = 'modular_nova/modules/tribal_extended/icons/back.dmi'
+ icon_state = "bone_sword"
+ inhand_icon_state = "bone_sword"
+ worn_icon_state = "bone_sword"
+ slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
+ force = 20
+ throwforce = 10
+ armour_penetration = 10
+ w_class = WEIGHT_CLASS_NORMAL
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb_continuous = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+ block_chance = 0
+ armor_type = /datum/armor/claymore_bone
+
+/datum/armor/claymore_bone
+ fire = 100
+ acid = 50
diff --git a/modular_skyrat/modules/tribal_extended/icons/ammo.dmi b/modular_nova/modules/tribal_extended/icons/ammo.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/ammo.dmi
rename to modular_nova/modules/tribal_extended/icons/ammo.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/back.dmi b/modular_nova/modules/tribal_extended/icons/back.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/back.dmi
rename to modular_nova/modules/tribal_extended/icons/back.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/belt.dmi b/modular_nova/modules/tribal_extended/icons/belt.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/belt.dmi
rename to modular_nova/modules/tribal_extended/icons/belt.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi
rename to modular_nova/modules/tribal_extended/icons/bows_lefthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi b/modular_nova/modules/tribal_extended/icons/bows_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi
rename to modular_nova/modules/tribal_extended/icons/bows_righthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/crafting.dmi b/modular_nova/modules/tribal_extended/icons/crafting.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/crafting.dmi
rename to modular_nova/modules/tribal_extended/icons/crafting.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi b/modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi
rename to modular_nova/modules/tribal_extended/icons/items_and_weapons.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/projectile.dmi b/modular_nova/modules/tribal_extended/icons/projectile.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/projectile.dmi
rename to modular_nova/modules/tribal_extended/icons/projectile.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/shields.dmi b/modular_nova/modules/tribal_extended/icons/shields.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/shields.dmi
rename to modular_nova/modules/tribal_extended/icons/shields.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi
rename to modular_nova/modules/tribal_extended/icons/shields_lefthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi b/modular_nova/modules/tribal_extended/icons/shields_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi
rename to modular_nova/modules/tribal_extended/icons/shields_righthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi b/modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi
rename to modular_nova/modules/tribal_extended/icons/swords_lefthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi b/modular_nova/modules/tribal_extended/icons/swords_righthand.dmi
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi
rename to modular_nova/modules/tribal_extended/icons/swords_righthand.dmi
diff --git a/modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg b/modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg
rename to modular_nova/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg
diff --git a/modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowfire.ogg b/modular_nova/modules/tribal_extended/sound/sound_weapons_bowfire.ogg
similarity index 100%
rename from modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowfire.ogg
rename to modular_nova/modules/tribal_extended/sound/sound_weapons_bowfire.ogg
diff --git a/modular_skyrat/modules/trim_tokens/code/cards_ids.dm b/modular_nova/modules/trim_tokens/code/cards_ids.dm
similarity index 100%
rename from modular_skyrat/modules/trim_tokens/code/cards_ids.dm
rename to modular_nova/modules/trim_tokens/code/cards_ids.dm
diff --git a/modular_skyrat/modules/trim_tokens/code/trim_tokens.dm b/modular_nova/modules/trim_tokens/code/trim_tokens.dm
similarity index 100%
rename from modular_skyrat/modules/trim_tokens/code/trim_tokens.dm
rename to modular_nova/modules/trim_tokens/code/trim_tokens.dm
diff --git a/modular_skyrat/modules/trim_tokens/readme.md b/modular_nova/modules/trim_tokens/readme.md
similarity index 100%
rename from modular_skyrat/modules/trim_tokens/readme.md
rename to modular_nova/modules/trim_tokens/readme.md
diff --git a/modular_skyrat/modules/turretid/code/turret_id_system.dm b/modular_nova/modules/turretid/code/turret_id_system.dm
similarity index 100%
rename from modular_skyrat/modules/turretid/code/turret_id_system.dm
rename to modular_nova/modules/turretid/code/turret_id_system.dm
diff --git a/modular_skyrat/modules/turretid/readme.md b/modular_nova/modules/turretid/readme.md
similarity index 100%
rename from modular_skyrat/modules/turretid/readme.md
rename to modular_nova/modules/turretid/readme.md
diff --git a/modular_skyrat/modules/verbs/code/looc.dm b/modular_nova/modules/verbs/code/looc.dm
similarity index 100%
rename from modular_skyrat/modules/verbs/code/looc.dm
rename to modular_nova/modules/verbs/code/looc.dm
diff --git a/modular_skyrat/modules/verbs/code/say.dm b/modular_nova/modules/verbs/code/say.dm
similarity index 100%
rename from modular_skyrat/modules/verbs/code/say.dm
rename to modular_nova/modules/verbs/code/say.dm
diff --git a/modular_skyrat/modules/verbs/code/subtle.dm b/modular_nova/modules/verbs/code/subtle.dm
similarity index 100%
rename from modular_skyrat/modules/verbs/code/subtle.dm
rename to modular_nova/modules/verbs/code/subtle.dm
diff --git a/modular_nova/modules/verbs/readme.md b/modular_nova/modules/verbs/readme.md
new file mode 100644
index 00000000000..c2ef5f04dc8
--- /dev/null
+++ b/modular_nova/modules/verbs/readme.md
@@ -0,0 +1,30 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/872
+
+## Title: More verbs and subtler.
+
+MODULE ID: VERBS
+
+### Description:
+
+Adds a few emotes and verbs for players to use, such as LOOC, subtle.
+
+### TG Proc Changes:
+
+- N/A
+
+### Defines:
+
+- #define CHAT_LOOC (1<<12)
+- #define CHAT_LOOC_ADMIN (1<<13)
+- #define LOG_SUBTLER (1 << 20)
+
+### Master file additions
+
+- D:\Documents\Github\SS13\Skyrat-tg\modular_nova\master_files\code\_globalvars\configuration.dm
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+Gandalf2k15 - porting and refactoring
diff --git a/modular_skyrat/modules/veteran_only/code/job_types.dm b/modular_nova/modules/veteran_only/code/job_types.dm
similarity index 100%
rename from modular_skyrat/modules/veteran_only/code/job_types.dm
rename to modular_nova/modules/veteran_only/code/job_types.dm
diff --git a/modular_skyrat/modules/veteran_only/code/species_types.dm b/modular_nova/modules/veteran_only/code/species_types.dm
similarity index 100%
rename from modular_skyrat/modules/veteran_only/code/species_types.dm
rename to modular_nova/modules/veteran_only/code/species_types.dm
diff --git a/modular_skyrat/modules/veteran_only/readme.md b/modular_nova/modules/veteran_only/readme.md
similarity index 100%
rename from modular_skyrat/modules/veteran_only/readme.md
rename to modular_nova/modules/veteran_only/readme.md
diff --git a/modular_skyrat/modules/vox_sprites/code/color.dm b/modular_nova/modules/vox_sprites/code/color.dm
similarity index 100%
rename from modular_skyrat/modules/vox_sprites/code/color.dm
rename to modular_nova/modules/vox_sprites/code/color.dm
diff --git a/modular_skyrat/modules/vox_sprites/code/head.dm b/modular_nova/modules/vox_sprites/code/head.dm
similarity index 100%
rename from modular_skyrat/modules/vox_sprites/code/head.dm
rename to modular_nova/modules/vox_sprites/code/head.dm
diff --git a/modular_skyrat/modules/vox_sprites/code/security.dm b/modular_nova/modules/vox_sprites/code/security.dm
similarity index 100%
rename from modular_skyrat/modules/vox_sprites/code/security.dm
rename to modular_nova/modules/vox_sprites/code/security.dm
diff --git a/modular_skyrat/modules/vox_sprites/code/sneakers.dm b/modular_nova/modules/vox_sprites/code/sneakers.dm
similarity index 100%
rename from modular_skyrat/modules/vox_sprites/code/sneakers.dm
rename to modular_nova/modules/vox_sprites/code/sneakers.dm
diff --git a/modular_nova/modules/vox_sprites/readme.md b/modular_nova/modules/vox_sprites/readme.md
new file mode 100644
index 00000000000..a0228017046
--- /dev/null
+++ b/modular_nova/modules/vox_sprites/readme.md
@@ -0,0 +1,55 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/7522
+
+## Title: Vox sprite fixes, updates, and additions
+
+MODULE ID: VOX_SPRITES
+
+### Description:
+
+Ports the Vox species and clothing sprites from Paradise plus some new GAGS-compatible ones, and adds code to support them.
+
+### TG Proc/File Changes:
+
+- APPEND: code/game/objects/items.dm > /obj/item/update_greyscale()
+- APPEND: code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_worn_gloves()
+
+### Defines:
+
+- N/A
+
+### Master file additions
+
+Species sprites:
+
+- modular_nova/master_files/icons/mob/body_markings/vox_secondary.dmi #CHANGE
+- modular_nova/master_files/icons/mob/species/vox_eyes.dmi #CHANGE
+- modular_nova/master_files/icons/mob/species/vox_parts_greyscale.dmi #CHANGE
+- modular_nova/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi #CHANGE
+- modular_nova/master_files/icons/mob/sprite_accessory/vox_hair.dmi #CHANGE
+- modular_nova/master_files/icons/mob/sprite_accessory/vox_snouts.dmi #CHANGE
+
+Clothing sprites:
+
+- modular_nova/master_files/icons/mob/clothing/head_vox.dmi #CHANGE
+- modular_nova/master_files/icons/mob/clothing/mask_vox.dmi #CHANGE
+- modular_nova/master_files/icons/mob/clothing/species/vox/back.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/ears.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/eyes.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/feet.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/hands.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/head.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/helmet.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/suit.dmi #ADD
+- modular_nova/master_files/icons/mob/clothing/species/vox/uniform.dmi #ADD
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+Vox species and clothing sprites - Paradise Station
+
+PR Code - SabreML
+PR Sprite implementation & GAGS compatibility - CandleJaxx
diff --git a/modular_skyrat/modules/wargame_projectors/code/game_kit.dm b/modular_nova/modules/wargame_projectors/code/game_kit.dm
similarity index 100%
rename from modular_skyrat/modules/wargame_projectors/code/game_kit.dm
rename to modular_nova/modules/wargame_projectors/code/game_kit.dm
diff --git a/modular_skyrat/modules/wargame_projectors/code/holograms.dm b/modular_nova/modules/wargame_projectors/code/holograms.dm
similarity index 98%
rename from modular_skyrat/modules/wargame_projectors/code/holograms.dm
rename to modular_nova/modules/wargame_projectors/code/holograms.dm
index f4abd318703..6f676452271 100644
--- a/modular_skyrat/modules/wargame_projectors/code/holograms.dm
+++ b/modular_nova/modules/wargame_projectors/code/holograms.dm
@@ -1,7 +1,7 @@
/obj/structure/wargame_hologram
name = "broken holographic wargame marker"
desc = "You have a feeling like this is supposed to be telling you something, but the hologram must have broken."
- icon = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
+ icon = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
icon_state = "broke"
anchored = TRUE
density = FALSE
diff --git a/modular_skyrat/modules/wargame_projectors/code/projectors.dm b/modular_nova/modules/wargame_projectors/code/projectors.dm
similarity index 98%
rename from modular_skyrat/modules/wargame_projectors/code/projectors.dm
rename to modular_nova/modules/wargame_projectors/code/projectors.dm
index 49c3d46847a..852690d1601 100644
--- a/modular_skyrat/modules/wargame_projectors/code/projectors.dm
+++ b/modular_nova/modules/wargame_projectors/code/projectors.dm
@@ -1,7 +1,7 @@
/obj/item/wargame_projector
name = "holographic projector"
desc = "A handy-dandy holographic projector developed by Nanotrasen Naval Command for playing wargames with, this one seems broken."
- icon = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
+ icon = 'modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
icon_state = "projector"
inhand_icon_state = "electronic"
worn_icon_state = "electronic"
diff --git a/modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi b/modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi
similarity index 100%
rename from modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi
rename to modular_nova/modules/wargame_projectors/icons/projectors_and_holograms.dmi
diff --git a/modular_skyrat/modules/wargame_projectors/readme.md b/modular_nova/modules/wargame_projectors/readme.md
similarity index 100%
rename from modular_skyrat/modules/wargame_projectors/readme.md
rename to modular_nova/modules/wargame_projectors/readme.md
diff --git a/modular_skyrat/modules/window_airbags/code/window_airbag.dm b/modular_nova/modules/window_airbags/code/window_airbag.dm
similarity index 94%
rename from modular_skyrat/modules/window_airbags/code/window_airbag.dm
rename to modular_nova/modules/window_airbags/code/window_airbag.dm
index be868e2beba..1f44bf27b95 100644
--- a/modular_skyrat/modules/window_airbags/code/window_airbag.dm
+++ b/modular_nova/modules/window_airbags/code/window_airbag.dm
@@ -57,7 +57,7 @@
/obj/item/airbag
name = "airbag"
desc = "A small package with an explosive attached. Stand clear!"
- icon = 'modular_skyrat/modules/inflatables/icons/inflatable.dmi'
+ icon = 'modular_nova/modules/inflatables/icons/inflatable.dmi'
icon_state = "airbag_safe"
base_icon_state = "airbag"
max_integrity = 10
@@ -70,9 +70,9 @@
/// Are we currently armed?
var/armed = FALSE
/// The sound we play when armed
- var/armed_sound = 'modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg'
+ var/armed_sound = 'modular_nova/modules/window_airbags/sound/airbag_arm.ogg'
/// The sound we play when we go bang
- var/bang_sound = 'modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg'
+ var/bang_sound = 'modular_nova/modules/window_airbags/sound/airbag_bang.ogg'
/obj/item/airbag/Initialize(mapload)
. = ..()
diff --git a/modular_skyrat/modules/window_airbags/readme.md b/modular_nova/modules/window_airbags/readme.md
similarity index 100%
rename from modular_skyrat/modules/window_airbags/readme.md
rename to modular_nova/modules/window_airbags/readme.md
diff --git a/modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg b/modular_nova/modules/window_airbags/sound/airbag_arm.ogg
similarity index 100%
rename from modular_skyrat/modules/window_airbags/sound/airbag_arm.ogg
rename to modular_nova/modules/window_airbags/sound/airbag_arm.ogg
diff --git a/modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg b/modular_nova/modules/window_airbags/sound/airbag_bang.ogg
similarity index 100%
rename from modular_skyrat/modules/window_airbags/sound/airbag_bang.ogg
rename to modular_nova/modules/window_airbags/sound/airbag_bang.ogg
diff --git a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm b/modular_nova/modules/wrestlingring/code/wrestlingring.dm
similarity index 97%
rename from modular_skyrat/modules/wrestlingring/code/wrestlingring.dm
rename to modular_nova/modules/wrestlingring/code/wrestlingring.dm
index 8c0e09deccc..60da9d28f34 100644
--- a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm
+++ b/modular_nova/modules/wrestlingring/code/wrestlingring.dm
@@ -1,7 +1,7 @@
/obj/structure/railing/wrestling
name = "wrestling ropes"
desc = "Ropes that are meant to go around a wrestling ring."
- icon = 'modular_skyrat/modules/wrestlingring/icons/wrestling.dmi'
+ icon = 'modular_nova/modules/wrestlingring/icons/wrestling.dmi'
icon_state = "ropes"
climbable = FALSE
@@ -58,7 +58,7 @@
/obj/structure/wrestling_corner
name = "wrestling turnbuckle"
- icon = 'modular_skyrat/modules/wrestlingring/icons/wrestling.dmi'
+ icon = 'modular_nova/modules/wrestlingring/icons/wrestling.dmi'
icon_state = "turnbuckle"
density = TRUE
anchored = TRUE
diff --git a/modular_skyrat/modules/wrestlingring/icons/wrestling.dmi b/modular_nova/modules/wrestlingring/icons/wrestling.dmi
similarity index 100%
rename from modular_skyrat/modules/wrestlingring/icons/wrestling.dmi
rename to modular_nova/modules/wrestlingring/icons/wrestling.dmi
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm
similarity index 81%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm
index f0a94c1ea79..9bafb2bf475 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/amauri.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/amauri.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/amauri
name = "pack of amauri seeds"
desc = "These seeds grow into amauri plants. Grows bulbs full of potent toxins."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "amauri"
species = "amauri"
plantname = "Amauri Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "amauri-stage"
growthstages = 3
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/preserved)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/amauri
name = "amauri"
desc = "A toxic amauri bulb, you shouldn't eat this."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "amauri"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm
similarity index 84%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm
index 8fed3e82863..3608bb559ab 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/gelthi.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/gelthi.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/gelthi
name = "pack of gelthi seeds"
desc = "These seeds grow into gelthi plants. Lauded by chefs for its unique ability to produce honey, and often hoarded for this very reason."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "gelthi"
species = "gelthi"
plantname = "Gelthi Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "gelthi-stage"
growthstages = 3
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/squash)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/gelthi
name = "gelthi"
desc = "A cluster of gelthi pods. Each pod contains a different sweetener, and the pods can be juiced into raw sugar."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "gelthi"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm
similarity index 83%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm
index 5e9bcd3f68b..952087aa2b2 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/jurlmah.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/jurlmah.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/jurlmah
name = "pack of jurlmah seeds"
desc = "These seeds grow into jurlmah plants. Often used as makeshift cryo-treatment in areas where a dedicated cryotube setup is impossible."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "jurlmah"
species = "jurlmah"
plantname = "Jurlmah Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "jurlmah-stage"
growthstages = 5
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/jurlmah
name = "jurlmah"
desc = "A frosty jurlmah fruit, it feels cold to the touch."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "jurlmah"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm
similarity index 82%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm
index c22b032d287..228016c811f 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/nofruit.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/nofruit.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/nofruit
name = "pack of nofruit seeds"
desc = "These seeds grow into nofruit plants. A strange plant often cultivated by silent performers."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "nofruit"
species = "nofruit"
plantname = "Nofruit Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "nofruit-stage"
growthstages = 4
genes = list(/datum/plant_gene/trait/repeated_harvest)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/nofruit
name = "nofruit"
desc = "A cubic nofruit, the leaf on top of the nofruit gesticulates wildly."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "nofruit"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm
similarity index 83%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm
index faa59ef21c0..8d4580f662c 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/shand.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/shand.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/shand
name = "pack of shand seeds"
desc = "These seeds grow into shand plants. While not very useful on it's own, it is full of chemicals that no other plant can produce. A good candidate for crossbreeding."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "shand"
species = "shand"
plantname = "Shand Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "shand-stage"
growthstages = 3
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/maxchem)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/shand
name = "shand"
desc = "A handful of shand leaves, the leaves are oily and smell like a laboratory."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "shand"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm
similarity index 82%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm
index cb1717fd887..de25c86eded 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/surik.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/surik.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/surik
name = "pack of surik seeds"
desc = "These seeds grow into surik plants. Said to contain the very essence of Indecipheres."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "surik"
species = "surik"
plantname = "Surik Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "surik-stage"
growthstages = 4
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/fire_resistance)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/surik
name = "surik"
desc = "A shimmering surik crystal. The center of the gem thrums with volcanic activity."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "surik"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm
similarity index 83%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm
index a0b3d621dc6..ddd9827adba 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/telriis.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/telriis.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/telriis
name = "pack of telriis seeds"
desc = "These seeds grow into telriis plants. A distant relative of milkweed, this grass can actually be juiced into milk."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "telriis"
species = "telriis"
plantname = "Telriis Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "telriis-stage"
growthstages = 4
plant_icon_offset = 7
@@ -20,7 +20,7 @@
seed = /obj/item/seeds/telriis
name = "telriis"
desc = "A sheaf of telris, it can be ground or juiced into a milky liquid."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "telriis"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm
similarity index 83%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm
index da3b11d8fd5..bf5b8c4eb18 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/thaadra.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/thaadra.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/thaadra
name = "pack of thaadra seeds"
desc = "These seeds grow into thaadra plants. A strange flower full of unique medicines and silver."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "thaadra"
species = "thaadra"
plantname = "Thaadra Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "thaadra-stage"
growthstages = 4
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/preserved)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/thaadra
name = "thaadra"
desc = "A cluster of thaadra petals, full of niche medicinal chemicals."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "thaadra"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm
similarity index 83%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm
index aa0d333a7a6..0aac3f0b988 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vale.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/vale.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/vale
name = "pack of vale seeds"
desc = "These seeds grow into vale plants. Once sold as a luxury for their unique aesthetics, after the trees suddenly combusted they were taken off of the market."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "vale"
species = "vale"
plantname = "Vale Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "vale-stage"
growthstages = 4
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/vale
name = "vale"
desc = "A cluster of vale leaves, keep away from open flames."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "vale"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm b/modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm
similarity index 84%
rename from modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm
rename to modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm
index cbc12ab3288..58fcf5ff5a3 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/hydroponics/vaporsac.dm
+++ b/modular_nova/modules/xenoarch/code/modules/hydroponics/vaporsac.dm
@@ -1,7 +1,7 @@
/obj/item/seeds/vaporsac
name = "pack of vaporsac seeds"
desc = "These seeds grow into vaporsac plants. Normally vaporsac plants spread by floating through the air and exploding, but this strand of vaporsac thankfully does not."
- icon = 'modular_skyrat/modules/xenoarch/icons/seeds.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/seeds.dmi'
icon_state = "vaporsac"
species = "vaporsac"
plantname = "Vaporsac Plant"
@@ -9,7 +9,7 @@
lifespan = 55
endurance = 35
yield = 5
- growing_icon = 'modular_skyrat/modules/xenoarch/icons/growing.dmi'
+ growing_icon = 'modular_nova/modules/xenoarch/icons/growing.dmi'
icon_grow = "vaporsac-stage"
growthstages = 3
genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/smoke)
@@ -19,7 +19,7 @@
seed = /obj/item/seeds/vaporsac
name = "vaporsac"
desc = "An buoyant vaporsac, full of aerosolized chemicals."
- icon = 'modular_skyrat/modules/xenoarch/icons/harvest.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/harvest.dmi'
icon_state = "vaporsac"
filling_color = "#FF4500"
bite_consumption_mod = 0.5
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm
similarity index 100%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/designs_and_tech.dm
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm
similarity index 100%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/glassblowing_integration.dm
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm
similarity index 96%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm
index 337ea135950..22dc505fe78 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm
+++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/strange_rock.dm
@@ -172,7 +172,7 @@
//turfs
/turf/closed/mineral/strange_rock
mineralAmt = 1
- icon = MAP_SWITCH('modular_skyrat/modules/liquids/icons/turf/smoothrocks.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi')
+ icon = MAP_SWITCH('modular_nova/modules/liquids/icons/turf/smoothrocks.dmi', 'modular_nova/modules/xenoarch/icons/mining.dmi')
scan_state = "rock_Strange"
mineralType = /obj/item/xenoarch/strange_rock
@@ -204,7 +204,7 @@
)
/turf/closed/mineral/strange_rock/ice
- icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'modular_skyrat/modules/xenoarch/icons/mining.dmi')
+ icon = MAP_SWITCH('icons/turf/walls/icerock_wall.dmi', 'modular_nova/modules/xenoarch/icons/mining.dmi')
icon_state = "icerock_strange"
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -254,7 +254,7 @@
//small gibonite fix
/turf/closed/mineral/gibtonite/asteroid
- icon = MAP_SWITCH('modular_skyrat/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi')
+ icon = MAP_SWITCH('modular_nova/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi')
icon_state = "redrock_Gibonite_inactive"
base_icon_state = "red_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
@@ -264,7 +264,7 @@
defer_change = TRUE
/turf/closed/mineral/strange_rock/asteroid
- icon = MAP_SWITCH('modular_skyrat/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi')
+ icon = MAP_SWITCH('modular_nova/modules/xenoarch/icons/mining.dmi', 'icons/turf/mining.dmi')
icon_state = "redrock_strange"
base_icon_state = "red_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm
similarity index 100%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_item.dm
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm
similarity index 99%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm
index 191837a837f..92166f6d018 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm
+++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm
@@ -1,5 +1,5 @@
/obj/machinery/xenoarch
- icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi'
density = TRUE
layer = BELOW_OBJ_LAYER
use_power = IDLE_POWER_USE
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
similarity index 100%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_reward.dm
diff --git a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm
similarity index 97%
rename from modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm
rename to modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm
index 5d58fa29b84..7d19a2c8880 100644
--- a/modular_skyrat/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm
+++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_tool.dm
@@ -1,6 +1,6 @@
/obj/item/xenoarch
name = "parent dev item"
- icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi'
// HAMMERS
@@ -175,7 +175,7 @@
/obj/item/storage/belt/utility/xenoarch
name = "xenoarch toolbelt"
desc = "Holds tools."
- icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi'
icon_state = "xenoarch_belt"
content_overlays = FALSE
custom_premium_price = PAYCHECK_CREW * 2
@@ -198,7 +198,7 @@
/obj/item/storage/bag/xenoarch
name = "xenoarch mining satchel"
desc = "This little bugger can be used to store and transport strange rocks."
- icon = 'modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi'
+ icon = 'modular_nova/modules/xenoarch/icons/xenoarch_items.dmi'
icon_state = "satchel"
worn_icon_state = "satchel"
w_class = WEIGHT_CLASS_TINY
diff --git a/modular_skyrat/modules/xenoarch/icons/growing.dmi b/modular_nova/modules/xenoarch/icons/growing.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/growing.dmi
rename to modular_nova/modules/xenoarch/icons/growing.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/harvest.dmi b/modular_nova/modules/xenoarch/icons/harvest.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/harvest.dmi
rename to modular_nova/modules/xenoarch/icons/harvest.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/mining.dmi b/modular_nova/modules/xenoarch/icons/mining.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/mining.dmi
rename to modular_nova/modules/xenoarch/icons/mining.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi b/modular_nova/modules/xenoarch/icons/ore_visuals.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/ore_visuals.dmi
rename to modular_nova/modules/xenoarch/icons/ore_visuals.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/seeds.dmi b/modular_nova/modules/xenoarch/icons/seeds.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/seeds.dmi
rename to modular_nova/modules/xenoarch/icons/seeds.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_area.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/xenoarch_area.dmi
rename to modular_nova/modules/xenoarch/icons/xenoarch_area.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_items.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/xenoarch_items.dmi
rename to modular_nova/modules/xenoarch/icons/xenoarch_items.dmi
diff --git a/modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi b/modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi
similarity index 100%
rename from modular_skyrat/modules/xenoarch/icons/xenoarch_machines.dmi
rename to modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi
diff --git a/modular_skyrat/modules/xenoarch/readme.md b/modular_nova/modules/xenoarch/readme.md
similarity index 100%
rename from modular_skyrat/modules/xenoarch/readme.md
rename to modular_nova/modules/xenoarch/readme.md
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm b/modular_nova/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm
similarity index 96%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm
index 4b1f325c393..9fc4c261cc6 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/base_skyrat_xeno.dm
@@ -2,17 +2,16 @@
/mob/living/carbon/alien/adult/skyrat
name = "rare bugged alien"
- icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi'
+ icon = 'modular_nova/modules/xenos_skyrat_redo/icons/big_xenos.dmi'
rotate_on_lying = FALSE
base_pixel_x = -16 //All of the xeno sprites are 64x64, and we want them to be level with the tile they are on, much like oversized quirk users
mob_size = MOB_SIZE_LARGE
layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles
- plane = GAME_PLANE_UPPER_FOV_HIDDEN
maptext_height = 64
maptext_width = 64
pressure_resistance = 200
/// What icon file update_held_items will look for when making inhands for xenos
- var/alt_inhands_file = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi'
+ var/alt_inhands_file = 'modular_nova/modules/xenos_skyrat_redo/icons/big_xenos.dmi'
/// Setting this will give a xeno generic_evolve set to evolve them into this type
var/next_evolution
/// Keeps track of if a xeno has evolved recently, if so then we prevent them from evolving until that time is up
@@ -54,7 +53,7 @@
has_evolved_recently = FALSE
/datum/action/cooldown/alien/skyrat
- button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ button_icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
/// Some xeno abilities block other abilities from being used, this allows them to get around that in cases where it is needed
var/can_be_used_always = FALSE
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm b/modular_nova/modules/xenos_skyrat_redo/code/human_defense.dm
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/human_defense.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/human_defense.dm
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm b/modular_nova/modules/xenos_skyrat_redo/code/larva.dm
similarity index 86%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/larva.dm
index 970395ceeeb..1c9f3e0613d 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/larva.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/larva.dm
@@ -8,7 +8,7 @@
// This --can probably-- (will not) be genericized in the future.
make_xeno_caste_entry(
caste_name = "Runner",
- caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_runner"),
+ caste_image = image(icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_runner"),
caste_info = span_info("Runners are the most agile caste, the short stature of running on all fours \
gives them great speed, the ability to dodge projectiles, and allows them to tackle while holding throw and clicking. \
Eventually, runners can evolve onwards into the fearsome ravager, should the hive permit it."),
@@ -17,7 +17,7 @@
make_xeno_caste_entry(
caste_name = "Sentinel",
- caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_sentinel"),
+ caste_image = image(icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_sentinel"),
caste_info = span_info("Sentinels are a caste similar in shape to a drone, forfeiting the ability to \
become royalty in exchange for spitting either acid, or a potent neurotoxin. They aren't as strong in close combat \
as the other options, but can eventually evolve into a more dangerous form of acid spitter, should the hive have capacity."),
@@ -26,7 +26,7 @@
make_xeno_caste_entry(
caste_name = "Defender",
- caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_defender"),
+ caste_image = image(icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_defender"),
caste_info = span_info("Slow, tough, hard hitting, the defender is well and capable of what the name implies, \
the defender's thick armor allows it to take a few more hits than other castes, which can be paired with a deadly tail club \
and ability to make short charges to cause some real damage. Eventually, it will be able to evolve into the feared crusher, \
@@ -36,7 +36,7 @@
make_xeno_caste_entry(
caste_name = "Drone",
- caste_image = image(icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_drone"),
+ caste_image = image(icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi', icon_state = "preview_drone"),
caste_info = span_info("Drones are a somewhat weak, although fairly quick caste that fills a mainly \
support role in a hive, having a higher plasma capacity than most first evolutions, and the ability to \
make a healing aura for nearby xenos. Drones are the only caste that can evolve into both praetorians and \
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/defender.dm
similarity index 92%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/defender.dm
index 5b79b7a8934..e68b99f3c00 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/defender.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/defender.dm
@@ -35,7 +35,7 @@
aoe_radius = 1
- button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ button_icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
button_icon_state = "crush_tail"
sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/defender
@@ -89,7 +89,7 @@
victim_living.safe_throw_at(throwtarget, ((clamp((max_throw - (clamp(dist_from_caster - 2, 0, dist_from_caster))), 3, max_throw))), 1, caster, force = repulse_force)
/obj/effect/temp_visual/dir_setting/tailsweep/defender
- icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
icon_state = "crush_tail_anim"
/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender
@@ -100,13 +100,13 @@
charge_distance = 5
destroy_objects = FALSE
charge_damage = 50
- button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ button_icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
button_icon_state = "defender_charge"
unset_after_click = TRUE
/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/do_charge_indicator(atom/charger, atom/charge_target)
. = ..()
- playsound(charger, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9)
+ playsound(charger, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9)
/datum/action/cooldown/mob_cooldown/charge/basic_charge/defender/Activate(atom/target_atom)
. = ..()
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/drone.dm
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/drone.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/drone.dm
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm
similarity index 96%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm
index a34376970e7..750edd311a1 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/praetorian.dm
@@ -55,7 +55,7 @@
impact_wound_bonus = 10
/obj/effect/temp_visual/dir_setting/tailsweep/praetorian
- icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
icon_state = "throw_tail_anim"
/datum/action/cooldown/alien/acid/skyrat/spread
@@ -64,7 +64,7 @@
plasma_cost = 50
acid_projectile = null
acid_casing = /obj/item/ammo_casing/xenospit
- spit_sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg'
+ spit_sound = 'modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg'
cooldown_time = 10 SECONDS
/obj/item/ammo_casing/xenospit //This is probably really bad, however I couldn't find any other nice way to do this
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/queen.dm
similarity index 91%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/queen.dm
index 3c60e970958..ee914b5359e 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/queen.dm
@@ -67,7 +67,7 @@
/datum/action/cooldown/alien/skyrat/queen_screech/Activate()
. = ..()
var/mob/living/carbon/alien/adult/skyrat/queenie = owner
- playsound(queenie, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg', 100, FALSE, 8, 0.9)
+ playsound(queenie, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg', 100, FALSE, 8, 0.9)
queenie.create_shriekwave()
shake_camera(owner, 2, 2)
@@ -80,7 +80,7 @@
/mob/living/carbon/alien/adult/skyrat/proc/create_shriekwave()
remove_overlay(HALO_LAYER)
- overlays_standing[HALO_LAYER] = image("icon" = 'modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used.
+ overlays_standing[HALO_LAYER] = image("icon" = 'modular_nova/modules/xenos_skyrat_redo/icons/big_xenos.dmi', "icon_state" = "shriek_waves") //Ehh, suit layer's not being used.
apply_overlay(HALO_LAYER)
addtimer(CALLBACK(src, PROC_REF(remove_shriekwave)), 3 SECONDS)
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm
similarity index 86%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm
index 00e469883a4..6e0a1c5233c 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/ravager.dm
@@ -36,12 +36,12 @@
charge_past = 3
destroy_objects = FALSE
charge_damage = 25
- button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ button_icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
button_icon_state = "ravager_charge"
unset_after_click = TRUE
/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/do_charge_indicator(atom/charger, atom/charge_target)
- playsound(charger, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9)
+ playsound(charger, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9)
/datum/action/cooldown/mob_cooldown/charge/triple_charge/ravager/Activate(atom/target_atom)
. = ..()
@@ -57,14 +57,14 @@
sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep/ravager
- sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg' //The defender's tail sound isn't changed because its big and heavy, this isn't
+ sound = 'modular_nova/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg' //The defender's tail sound isn't changed because its big and heavy, this isn't
- impact_sound = 'modular_skyrat/master_files/sound/weapons/bloodyslice.ogg'
+ impact_sound = 'modular_nova/master_files/sound/weapons/bloodyslice.ogg'
impact_damage = 40
impact_sharpness = SHARP_EDGED
/obj/effect/temp_visual/dir_setting/tailsweep/ravager
- icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
icon_state = "slice_tail_anim"
/datum/action/cooldown/alien/skyrat/literally_too_angry_to_die
@@ -83,7 +83,7 @@
owner.balloon_alert(owner, "already enduring")
return FALSE
owner.balloon_alert(owner, "endure began")
- playsound(owner, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9)
+ playsound(owner, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_roar1.ogg', 100, TRUE, 8, 0.9)
to_chat(owner, span_danger("We numb our ability to feel pain, allowing us to fight until the very last for the next [endure_duration/10] seconds."))
addtimer(CALLBACK(src, PROC_REF(endure_deactivate)), endure_duration)
owner.add_filter(RAVAGER_OUTLINE_EFFECT, 4, outline_filter(1, COLOR_RED_LIGHT))
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm
similarity index 97%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm
index 81ef781ff31..b5f7ec72307 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/rouny.dm
@@ -47,7 +47,7 @@
return FALSE
owner.balloon_alert(owner, "evasive movements began")
- playsound(owner, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9)
+ playsound(owner, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9)
to_chat(owner, span_danger("We take evasive action, making us impossible to hit with projectiles for the next [evasion_duration / 10] seconds."))
addtimer(CALLBACK(src, PROC_REF(evasion_deactivate)), evasion_duration)
evade_active = TRUE
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm
similarity index 96%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm
index c517401954b..ab05df90f20 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/sentinel.dm
@@ -24,7 +24,7 @@
/datum/action/cooldown/alien/acid/skyrat
name = "Spit Neurotoxin"
desc = "Spits neurotoxin at someone, exhausting them."
- button_icon = 'modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
+ button_icon = 'modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi'
button_icon_state = "neurospit_0"
plasma_cost = 40
/// A singular projectile? Use this one and leave acid_casing null
@@ -36,7 +36,7 @@
/// The base icon for the ability, so a red box can be put on it using _0 or _1
var/button_base_icon = "neurospit"
/// The sound that should be played when the xeno actually spits
- var/spit_sound = 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg'
+ var/spit_sound = 'modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg'
shared_cooldown = MOB_SHARED_COOLDOWN_3
cooldown_time = 5 SECONDS
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/spitter.dm
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm
similarity index 91%
rename from modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm
rename to modular_nova/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm
index 1a483472792..96d2225a63f 100644
--- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm
+++ b/modular_nova/modules/xenos_skyrat_redo/code/xeno_types/warrior.dm
@@ -50,7 +50,7 @@
var/mob/living/carbon/alien/adult/skyrat/agility_target = owner
agility_target.balloon_alert(agility_target, "agility active")
to_chat(agility_target, span_danger("We drop onto all fours, allowing us to move at much greater speed at expense of being able to use most abilities."))
- playsound(agility_target, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9)
+ playsound(agility_target, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_hiss.ogg', 100, TRUE, 8, 0.9)
agility_target.icon_state = "alien[agility_target.caste]_mobility"
being_agile = TRUE
@@ -64,7 +64,7 @@
/datum/action/cooldown/alien/skyrat/warrior_agility/proc/end_agility()
var/mob/living/carbon/alien/adult/skyrat/agility_target = owner
agility_target.balloon_alert(agility_target, "agility ended")
- playsound(agility_target, 'modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) //Warrior runs up on all fours, stands upright, screams at you
+ playsound(agility_target, 'modular_nova/modules/xenos_skyrat_redo/sound/alien_roar2.ogg', 100, TRUE, 8, 0.9) //Warrior runs up on all fours, stands upright, screams at you
agility_target.icon_state = "alien[agility_target.caste]"
being_agile = FALSE
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi b/modular_nova/modules/xenos_skyrat_redo/icons/big_xenos.dmi
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/icons/big_xenos.dmi
rename to modular_nova/modules/xenos_skyrat_redo/icons/big_xenos.dmi
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi b/modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/icons/xeno_actions.dmi
rename to modular_nova/modules/xenos_skyrat_redo/icons/xeno_actions.dmi
diff --git a/modular_nova/modules/xenos_skyrat_redo/readme.md b/modular_nova/modules/xenos_skyrat_redo/readme.md
new file mode 100644
index 00000000000..0f29964ff0c
--- /dev/null
+++ b/modular_nova/modules/xenos_skyrat_redo/readme.md
@@ -0,0 +1,41 @@
+## Title: Skyrat Xeno Rework
+
+MODULE ID: SKYRAT_XENO_REDO
+
+### Description:
+
+Reworks and rebalances xenomorphs to be more in line a tgmc style of alien, especially focusing on unique abilites and lack of rclick and ranged instant hardstuns
+
+### TG Proc/File Changes:
+
+- MOVED:
+ code\modules\mob\living\carbon\alien\larva\powers.dm > /datum/action/cooldown/alien/larva_evolve/Activate
+ TO:
+ modular_nova\modules\xenos_skyrat_redo\code\larva.dm
+
+- MOVED:
+ code\modules\mob\living\carbon\human\human_defense.dm > /mob/living/carbon/human/attack_alien
+ TO:
+ modular_nova\modules\xenos_skyrat_redo\code\human_defense.dm
+
+### Defines:
+
+IN: code/__DEFINES/~skyrat_defines/traits.dm
+
+- TRAIT_XENO_INNATE
+- TRAIT_XENO_ABILITY_GIVEN
+- TRAIT_XENO_HEAL_AURA
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+@Paxilmaniac - Porting the xenos from TGMC, adopting their stuff to work with our code
+TGMC - Where the sprites, sound, and ideas for caste abilities came from
+Those two rounds where xenos curbstomped the whole station - Inspiration for doing this in the first place
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_hiss.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_hiss.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_hiss.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_queen_screech.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_roar1.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar1.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_roar1.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_roar2.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_roar2.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_roar2.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_spitacid2.ogg
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg b/modular_nova/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg
similarity index 100%
rename from modular_skyrat/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg
rename to modular_nova/modules/xenos_skyrat_redo/sound/alien_tail_swipe.ogg
diff --git a/modular_nova/readme.md b/modular_nova/readme.md
new file mode 100644
index 00000000000..3c1c83ee500
--- /dev/null
+++ b/modular_nova/readme.md
@@ -0,0 +1,377 @@
+# The modularization handbook - Nova Sector style, v0.2
+
+## Failure to follow this guide will result in your PR being denied.
+
+## Introduction
+
+To develop and maintain a separate codebase is a big task, that many have failed and suffered the consequences of, such as outdated, and messy code.
+It's not necessarily the fault of lack of skill of the people maintaining it, merely the lack of resources and how much continuous effort such an endeavor takes.
+
+One of the solutions for such, is to base our server on a solid codebase, that is primarily maintained by somebody else, in this case tgstation, and insert our content in a modular fashion, while following the general code (but not gameplay) direction of the upstream, mirroring any changes they do for parity.
+
+Git, as a version control system, is very useful, however it is just a very methodical thing, that follows its many algorithms, that sadly cannot always intelligently resolve certain changes in the code in an unambiguous way, giving us conflicts, that need to be resolved in a manual fashion.
+
+Due to maintainability being one of the main reasons behind our rebase to another codebase, **this protocol will seriously be enforced.**
+A well organized, documented and atomized code saves our maintainers a lot of headache, when being reviewed.
+Don't dump on them the work that you could have done yourself.
+
+This document is meant to be updated and changed, whenever any new exceptions are added onto it. It might be worth it to check, from time to time, whether we didn't define a more unique standardized way of handling some common change.
+
+## Important note - TEST YOUR PULL REQUESTS
+
+You are responsible for the testing of your content. You should not mark a pull request ready for review until you have actually tested it. If you require a separate client for testing, you can use a guest account by logging out of BYOND and connecting to your test server. Test merges are not for bug finding, they are for stress tests where local testing simply doesn't allow for this.
+
+### The nature of conflicts
+
+For example, let's have an original
+
+```byond
+var/something = 1
+```
+
+in the core code, that we decide to change from 1 to 2 on our end,
+
+```diff
+- var/something = 1
++ var/something = 2 //NOVA EDIT
+```
+
+but then our upstream introduces a change in their codebase, changing it from 1 to 4
+
+```diff
+- var/something = 1
++ var/something = 4
+```
+
+As easy of an example as it is, it results in a relatively simple conflict, in the form of
+
+```byond
+var/something = 2 //NOVA EDIT
+```
+
+where we pick the preferable option manually.
+
+### The solution
+
+That is something that cannot and likely shouldn't be resolved automatically, because it might introduce errors and bugs that will be very hard to track down, not to even bring up more complex examples of conflicts, such as ones that involve changes that add, remove and move lines of code all over the place.
+
+tl;dr it tries its best but ultimately is just a dumb program, therefore, we must ourselves do work to ensure that it can do most of the work, while minimizing the effort spent on manual involvement, in the cases where the conflicts will be inevitable.
+
+Our answer to this is modularization of the code.
+
+**Modularization** means, that most of the changes and additions we do, will be kept in a separate **`modular_nova/`** folder, as independent from the core code as possible, and those which absolutely cannot be modularized, will need to be properly marked by comments, specifying where the changes start, where they end, and which feature they are a part of, but more on that in the next section.
+
+## The modularization protocol
+
+Always start by thinking of the theme/purpose of your work. It's oftentimes a good idea to see if there isn't an already existing one, that you should append to.
+
+**If it's a tgcode-specific tweak or bugfix, first course of action should be an attempt to discuss and PR it upstream, instead of needlessly modularizing it here.**
+
+Otherwise, pick a new ID for your module. E.g. `DNA-FEATURE-WINGS` or `XENOARCHEAOLOGY` or `SHUTTLE_TOGGLE` - We will use this in future documentation. It is essentially your module ID. It must be uniform throughout the entire module. All references MUST be exactly the same. This is to allow for easy searching.
+
+And then you'll want to establish your core folder that you'll be working out of which is normally your module ID. E.g. `modular_nova/modules/shuttle_toggle`
+
+### Maps
+
+IMPORTANT: MAP CONTRIBUTION GUIDELINES HAVE BEEN UPDATED
+
+When you are adding a new item to the map you MUST follow this procedure:
+Start by deciding how big of a change it is going to be, if it is a small 1 item change, you should use the simple area automapper. If it is an entire room, you should use the template automapper.
+
+We will no longer have _skyrat map versions.
+
+DO NOT CHANGE TG MAPS, THEY ARE HELD TO THE SAME STANDARD AS ICONS. USE THE ABOVE TO MAKE MAP EDITS.
+
+The automapper uses prebaked templates to override sections of a map using coordinates to plot the starting location. See entries in automapper_config.toml for examples.
+
+The simple area automapper uses datum entries to place down a single item in an area of a map that makes vauge sense.
+
+### Assets: images, sounds, icons and binaries
+
+Git doesn't handle conflicts of binary files well at all, therefore changes to core binary files are absolutely forbidden, unless you have a really *really* ***really*** good reason to do otherwise.
+
+All assets added by us should be placed into the same modular folder as your code. This means everything is kept inside your module folder, sounds, icons and code files.
+
+- ***Example:*** You're adding a new lavaland mob.
+
+ First of all you create your modular folder. E.g. `modular_nova/modules/lavalandmob`
+
+ And then you'd want to create sub-folders for each component. E.g. `/code` for code and `/sounds` for sound files and `/icons` for any icon files.
+
+ After doing this, you'll want to set your references within the code.
+
+ ```byond
+ /mob/lavaland/newmob
+ icon = 'modular_nova/modules/lavalandmob/icons/mob.dmi'
+ icon_state = "dead_1"
+ sound = 'modular_nova/modules/lavalandmob/sounds/boom.ogg'
+ ```
+
+ This ensures your code is fully modular and will make it easier for future edits.
+
+- Other assets, binaries and tools, should usually be handled likewise, depending on the case-by-case context. When in doubt, ask a maintainer or other contributors for tips and suggestions.
+
+- Any additional clothing icon files you add MUST go into the existing files in master_files clothing section.
+
+### The `master_files` Folder
+
+You should always put any modular overrides of icons, sound, code, etc. inside this folder, and it **must** follow the core code folder layout.
+
+Example: `code/modules/mob/living/living.dm` -> `modular_nova/master_files/code/modules/mob/living/living.dm`
+
+This is to make it easier to figure out what changed about a base file without having to search through proc definitions.
+
+It also helps prevent modules needlessly overriding the same proc multiple times. More information on these types of edits come later.
+
+### Fully modular portions of your code
+
+This section will be fairly straightforward, however, I will try to go over the basics and give simple examples, as the guide is aimed at new contributors likewise.
+
+The rule of thumb is that if you don't absolutely have to, you shouldn't make any changes to core codebase files. With some exceptions that will be mentioned shortly.
+
+In short, most of the modular code will be placed in the subfolders of your main module folder **`modular_nova/modules/yourmodule/code/`**, with similar rules as with the assets. Do not mirror core code folder structures inside your modular folder.
+
+For example, `modular_nova/modules/xenoarcheaology/code` containing all the code, tools, items and machinery related to it.
+
+Such modules, unless _very_ simple, **need** to have a `readme.md` in their folder, containing the following:
+
+- links to the PRs that implemented this module or made any significant changes to it
+- short description of the module
+- list of files changed in the core code, with a short description of the change, and a list of changes in other modular files that are not part of the same module, that were necessary for this module to function properly
+- (optionally) a bit more elaborative documentation for future-proofing the code, that will be useful further development and maintenance
+- credits
+
+***Template:*** [Here](module_template.md)
+
+## Modular Overrides (Important!!)
+
+Note, that it is possible to append code in front, or behind a core proc, in a modular fashion, without editing the original proc, through referring the parent proc, using `. = ..()` or `..()`. And likewise, it is possible to add a new var to an existing datum or obj, without editing the core files.
+
+**Note about proc overrides: Just because you can, doesn't mean you should!!**
+
+In general they are a good idea and encouraged whenever it is possible to do so. However this is not a hard rule, and sometimes Nova edits are preferable. Just try to use your common sense about it.
+
+For example: please do not copy paste an entire TG proc into a modular override, make one small change, and then bill it as 'fully modular'. These procs are an absolute nightmare to maintain because once something changes upstream you have to update the overridden proc.
+
+Sometimes you aren't even aware the override exists if it compiles fine and doesn't cause any bugs. This often causes features that were added upstream to be missing here. So yeah. Avoid that. It's okay if something isn't fully modular. Sometimes it's the better choice.
+
+The best candidates for modular proc overrides are ones where you can just tack something on after calling the parent, or weave a parent call cleverly in the middle somewhere to achieve your desired effect.
+
+Performance should also be considered when you are overriding a hot proc (like Life() for example), as each additional call adds overhead. Nova edits are much more performant in those cases. For most procs this won't be something you have to think about, though.
+
+### These modular overrides should be kept in `master_files`, and you should avoid putting them inside modules as much as possible.
+
+To keep it simple, let's assume you wanted to make guns spark when shot, for simulating muzzle flash or whatever other reasons, and you want potentially to use it with all kinds of guns.
+
+You could start, in a modular file, by adding a var.
+
+```byond
+/obj/item/gun
+ var/muzzle_flash = TRUE
+```
+
+And it will work just fine. Afterwards, let's say you want to check that var and spawn your sparks after firing a shot.
+Knowing the original proc being called by shooting is
+
+```byond
+/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
+```
+
+you can define a child proc for it, that will get inserted into the inheritance chain of the related procs (big words, but in simple cases like this, you don't need to worry)
+
+```byond
+/obj/item/gun/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
+ . = ..() //. is the default return value, we assign what the parent proc returns to it, as we call it before ours
+ if(muzzle_flash)
+ spawn_sparks(src) //For simplicity, I assume you've already made a proc for this
+```
+
+And that wraps the basics of it up.
+
+### Non-modular changes to the core code - IMPORTANT
+
+Every once in a while, there comes a time, where editing the core files becomes inevitable.
+
+Please be sure to log these in the module readme.md. Any file changes.
+
+In those cases, we've decided to apply the following convention, with examples:
+
+- **Addition:**
+
+ ```byond
+ //NOVA EDIT ADDITION BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
+ var/adminEmergencyNoRecall = FALSE
+ var/lastMode = SHUTTLE_IDLE
+ var/lastCallTime = 6000
+ //NOVA EDIT ADDITION END
+ ```
+
+- **Removal:**
+
+ ```byond
+ //NOVA EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
+ /*
+ for(var/obj/docking_port/stationary/S in stationary)
+ if(S.id = id)
+ return S
+ */
+ //NOVA EDIT REMOVAL END
+ WARNING("couldn't find dock with id: [id]")
+ ```
+
+ And for any removals that are moved to different files:
+
+ ```byond
+ //NOVA EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Moved to modular_nova/shuttle_toggle/randomverbs.dm)
+ /*
+ /client/proc/admin_call_shuttle()
+ set category = "Admin - Events"
+ set name = "Call Shuttle"
+
+ if(EMERGENCY_AT_LEAST_DOCKED)
+ return
+
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
+ if(confirm != "Yes")
+ return
+
+ SSshuttle.emergency.request()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Call Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ log_admin("[key_name(usr)] admin-called the emergency shuttle.")
+ message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle."))
+ return
+ */
+ //NOVA EDIT REMOVAL END
+ ```
+
+- **Change:**
+
+ ```byond
+ //NOVA EDIT CHANGE BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
+ //if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - NOVA EDIT - ORIGINAL
+ if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE, SHUTTLE_DISABLED)
+ //NOVA EDIT CHANGE END
+ return 1
+ ```
+
+## Exceptional cases of modular code
+
+From every rule, there's exceptions, due to many circumstances. Don't think about it too much.
+
+### Defines
+
+Due to the way byond loads files, it has become necessary to make a different folder for handling our modular defines.
+That folder is **`code/__DEFINES/~skyrat_defines`**, in which you can add them to the existing files, or create those files as necessary.
+
+If you have a define that's used in more than one file, it **must** be declared here.
+
+If you have a define that's used in one file, and won't be used anywhere else, declare it at the top, and `#undef MY_DEFINE` at the bottom of the file. This is to keep context menus clean, and to prevent confusion by those using IDEs with autocomplete.
+
+### Module folder layout
+
+To keep form and ensure most modules are easy to navigate and to keep control of the amount of files and folders being made in the repository, you are required to follow this layout.
+
+Ensure the folder names are exactly as stated.
+
+Top most folder: module_id
+
+**DO NOT COPY THE CORE CODE FILE STRUCTURE IN YOUR MODULE!!**
+
+**Code**: Any .DM files must go in here.
+
+- Good: /modular_nova/modules/example_module/code/disease_mob.dm
+- Bad: /modular_nova/modules/example_module/code/modules/antagonists/disease/disease_mob.dm
+
+**Icons**: Any .DMI files must go in here.
+
+- Good: /modular_nova/modules/example_module/icons/mining_righthand.dmi
+- Bad: /modular_nova/modules/example_module/icons/mob/inhands/equipment/mining_righthand.dmi
+
+**Sound**: Any SOUND files must go in here.
+
+- Good: See above.
+- Bad: See above.
+
+The readme should go into the parent folder, module_id.
+
+**DO NOT MIX AND MATCH FILE TYPES IN FOLDERS!**
+
+### Commenting out code - DON'T DO IT
+
+If you are commenting out redundant code in modules, do not comment it out, instead, delete it.
+
+Even if you think someone is going to redo whatever it is you're commenting out, don't, gitblame exists for a reason.
+
+This also applies to files, do not comment out entire files, just delete them instead. This helps us keep down on filebloat and pointless comments.
+
+**This does not apply to non-modular changes.**
+
+## Modular TGUI
+
+TGUI is another exceptional case, since it uses javascript and isn't able to be modular in the same way that DM code is.
+ALL of the tgui files are located in `/tgui/packages/tgui/interfaces` and its subdirectories; there is no specific folder for Nova Sector UIs.
+
+### Modifying upstream files
+
+When modifying upstream TGUI files the same rules apply as modifying upstream DM code, however the grammar for comments may be slightly different.
+
+You can do both `// NOVA EDIT` and `/* NOVA EDIT */`, though in some cases you may have to use one over the other.
+
+In general try to keep your edit comments on the same line as the change. Preferably inside the JSX tag. e.g:
+
+```js
+ act('spin', { high_quality: true })}
+ icon="rat" // NOVA EDIT ADDITION
+
+```
+
+```js
+ act('spin', { high_quality: true })}
+ // NOVA EDIT ADDITION START - another example, multiline changes
+ icon="rat"
+ tooltip="spin the rat."
+ // NOVA EDIT ADDITION END
+
+```
+
+```js
+
+```
+
+If that is not possible, you can wrap your edit in curly brackets e.g.
+
+```js
+{/* NOVA EDIT ADDITION START */}
+
+ someProp="whatever"
+
+{/* NOVA EDIT ADDITION END */}
+```
+
+### Creating new TGUI files
+
+**IMPORTANT! When creating a new TGUI file from scratch, please add the following at the very top of the file (line 1):**
+```js
+// THIS IS A NOVA SECTOR UI FILE
+```
+
+This way they are easily identifiable as modular TGUI .tsx/.jsx files. You do not have to do anything further, and there will never be any need for a Nova edit comment in a modular TGUI file.
+
+
+
+## Afterword
+
+It might seem like a lot to take in, but if we remain consistent, it will save us a lot of headache in the long run, once we start having to resolve conflicts manually.
+Thanks to a bit more scrupulous documentation, it will be immediately obvious what changes were done and where and by which features, things will be a lot less ambiguous and messy.
+
+Best of luck in your coding. Remember that the community is there for you, if you ever need help.
diff --git a/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm b/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm
deleted file mode 100644
index b0af3298b5e..00000000000
--- a/modular_skyrat/master_files/code/_globalvars/lists/ambience.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-GLOBAL_LIST_INIT(generic_ambience, list(
- 'modular_skyrat/master_files/sound/ambience/ambigen1.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen2.ogg',
- 'modular_skyrat/master_files/sound/ambience/ambigen3.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen4.ogg',
- 'modular_skyrat/master_files/sound/ambience/ambigen5.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen6.ogg',
- 'modular_skyrat/master_files/sound/ambience/ambigen7.ogg', 'modular_skyrat/master_files/sound/ambience/ambigen8.ogg',
- 'modular_skyrat/master_files/sound/ambience/ambigen9.ogg'))
diff --git a/modular_skyrat/master_files/code/_onclick/hud/readme.md b/modular_skyrat/master_files/code/_onclick/hud/readme.md
deleted file mode 100644
index 428e5d56227..00000000000
--- a/modular_skyrat/master_files/code/_onclick/hud/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-This is the directory for any hud additions, please add them appropriately and log them in this file.
-
-Current huds:
-- Gun hud - Gunhud
diff --git a/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm b/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm
deleted file mode 100644
index 33265d9fee7..00000000000
--- a/modular_skyrat/master_files/code/_onclick/hud/screen_objects.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/atom/movable/screen/robot
- icon = 'modular_skyrat/master_files/icons/hud/screen_cyborg.dmi'
diff --git a/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm b/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm
deleted file mode 100644
index 1ecf3ec8d13..00000000000
--- a/modular_skyrat/master_files/code/datums/greyscale/config_types/greyscale_configs.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/datum/greyscale_config/sneakers_marisa/worn/digi
- name = "Marisa Sneakers (Worn Digi)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi'
diff --git a/modular_skyrat/master_files/code/datums/id_trim/jobs.dm b/modular_skyrat/master_files/code/datums/id_trim/jobs.dm
deleted file mode 100644
index f0bcde70087..00000000000
--- a/modular_skyrat/master_files/code/datums/id_trim/jobs.dm
+++ /dev/null
@@ -1,108 +0,0 @@
-// MODULAR ID TRIM ACCESS OVERRIDES GO HERE!!
-
-//(Most) of Security has inverted IDs, with custom blue-on-black icons. This is to distinguish them from their head, who has a white-on-blue icon
-/datum/id_trim/job/head_of_security
- subdepartment_color = COLOR_ASSEMBLY_BLACK
-
-/datum/id_trim/job/warden
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- department_color = COLOR_ASSEMBLY_BLACK
- subdepartment_color = COLOR_ASSEMBLY_BLACK
-
-/datum/id_trim/job/security_officer
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- department_color = COLOR_ASSEMBLY_BLACK
- subdepartment_color = COLOR_ASSEMBLY_BLACK
-
-/datum/id_trim/job/detective
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- department_color = COLOR_ASSEMBLY_BLACK
- subdepartment_color = COLOR_ASSEMBLY_BLACK
-
-
-/datum/id_trim/job/chief_engineer/New()
- . = ..()
-
- minimal_access |= ACCESS_WEAPONS
-
-/datum/id_trim/job/atmospheric_technician/New()
- . = ..()
-
- minimal_access |= ACCESS_ENGINE_EQUIP
-
-/datum/id_trim/job/chief_medical_officer/New()
- . = ..()
-
- minimal_access |= ACCESS_WEAPONS
-
-/datum/id_trim/job/research_director/New()
- . = ..()
-
- minimal_access |= ACCESS_WEAPONS
-
-
-/datum/id_trim/job/head_of_personnel/New()
- . = ..()
-
- minimal_access |= ACCESS_WEAPONS
-
-/datum/id_trim/job/blueshield
- assignment = "Blueshield"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- trim_state = "trim_blueshield"
- department_color = COLOR_COMMAND_BLUE
- subdepartment_color = COLOR_CENTCOM_BLUE // Not the other way around. I think.
- sechud_icon_state = SECHUD_BLUESHIELD
- extra_access = list(ACCESS_BRIG, ACCESS_CARGO, ACCESS_COURT, ACCESS_GATEWAY, ACCESS_SECURITY)
- minimal_access = list(
- ACCESS_BRIG_ENTRANCE, ACCESS_COMMAND, ACCESS_CONSTRUCTION, ACCESS_DETECTIVE, ACCESS_ENGINEERING,
- ACCESS_MAINT_TUNNELS, ACCESS_MEDICAL, ACCESS_RC_ANNOUNCE, ACCESS_RESEARCH, ACCESS_WEAPONS,
- )
- minimal_wildcard_access = list(ACCESS_CAPTAIN)
- template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
-
-/datum/id_trim/job/nanotrasen_consultant
- assignment = "Nanotrasen Consultant"
- trim_state = "trim_centcom"
- department_color = COLOR_GREEN
- subdepartment_color = COLOR_GREEN
- sechud_icon_state = SECHUD_NT_CONSULTANT
- extra_access = list()
- minimal_access = list(
- ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_AUX_BASE, ACCESS_BAR, ACCESS_BRIG_ENTRANCE,
- ACCESS_CENT_GENERAL, ACCESS_CHANGE_IDS, ACCESS_CHAPEL_OFFICE, ACCESS_COMMAND, ACCESS_CONSTRUCTION,
- ACCESS_CREMATORIUM, ACCESS_COURT, ACCESS_ENGINEERING, ACCESS_EVA, ACCESS_GATEWAY, ACCESS_HOP, ACCESS_HYDROPONICS,
- ACCESS_JANITOR, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAINT_TUNNELS,
- ACCESS_MEDICAL, ACCESS_MECH_ENGINE, ACCESS_MECH_MEDICAL, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY,
- ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_PSYCHOLOGY, ACCESS_RC_ANNOUNCE,
- ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_VAULT, ACCESS_WEAPONS
- )
- minimal_wildcard_access = list(ACCESS_CAPTAIN, ACCESS_CENT_GENERAL)
- template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS)
-
-/datum/id_trim/job/corrections_officer
- assignment = "Corrections Officer"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- trim_state = "trim_corrections_officer"
- department_color = COLOR_ASSEMBLY_BLACK
- subdepartment_color = COLOR_ASSEMBLY_BLACK
- sechud_icon_state = SECHUD_CORRECTIONS_OFFICER
- extra_access = list()
- minimal_access = list(
- ACCESS_BRIG, ACCESS_BRIG_ENTRANCE, ACCESS_COURT,
- ACCESS_MAINT_TUNNELS, ACCESS_SECURITY, ACCESS_WEAPONS
- )
- template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOS)
- job = /datum/job/corrections_officer
-
-/datum/id_trim/job/barber
- assignment = "Barber"
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- trim_state = "trim_barber"
- department_color = COLOR_SERVICE_LIME
- subdepartment_color = COLOR_SERVICE_LIME
- sechud_icon_state = SECHUD_BARBER
- extra_access = list()
- minimal_access = list(ACCESS_BARBER, ACCESS_MAINT_TUNNELS, ACCESS_SERVICE, ACCESS_THEATRE)
- template_access = list(ACCESS_CAPTAIN, ACCESS_CHANGE_IDS, ACCESS_HOP)
- job = /datum/job/barber
diff --git a/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm b/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm
deleted file mode 100644
index 810fc895c7f..00000000000
--- a/modular_skyrat/master_files/code/datums/id_trim/syndicate.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-/// SYNDICATE ID TRIMS
-/datum/id_trim/syndicom/skyrat
-
-// Note: These two are only left here because of the old Cybersun code.
-/datum/id_trim/syndicom/skyrat/crew
- assignment = "Syndicate Operative"
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
-
-/datum/id_trim/syndicom/skyrat/captain
- assignment = "Syndicate Ship Captain"
- trim_state = "trim_captain"
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
-
-/// DS-2
-
-/datum/id_trim/syndicom/skyrat/ds2
- assignment = "DS-2 Operative"
- trim_state = "trim_unknown"
- department_color = COLOR_ASSEMBLY_BLACK
- subdepartment_color = COLOR_SYNDIE_RED
- threat_modifier = 5 // Matching the syndicate threat level since DS2 is a syndicate station.
-
-/datum/id_trim/syndicom/skyrat/ds2/prisoner
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' // I can't put this on the basetype AAAAAA
- assignment = "DS-2 Hostage"
- trim_state = "trim_ds2prisoner"
- subdepartment_color = COLOR_MAROON
- sechud_icon_state = SECHUD_DS2_PRISONER
-
-/datum/id_trim/syndicom/skyrat/ds2/miner
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Mining Officer"
- trim_state = "trim_ds2miningofficer"
- sechud_icon_state = SECHUD_DS2_MININGOFFICER
-
-/datum/id_trim/syndicom/skyrat/ds2/syndicatestaff
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 General Staff"
- trim_state = "trim_ds2generalstaff"
- sechud_icon_state = SECHUD_DS2_GENSTAFF
-
-/datum/id_trim/syndicom/skyrat/ds2/researcher
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Researcher"
- trim_state = "trim_ds2researcher"
- sechud_icon_state = SECHUD_DS2_RESEARCHER
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS)
-
-/datum/id_trim/syndicom/skyrat/ds2/enginetechnician
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Engine Technician"
- trim_state = "trim_ds2enginetech"
- sechud_icon_state = SECHUD_DS2_ENGINETECH
-
-/datum/id_trim/syndicom/skyrat/ds2/medicalofficer
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Medical Officer"
- trim_state = "trim_ds2medicalofficer"
- sechud_icon_state = SECHUD_DS2_DOCTOR
-
-/datum/id_trim/syndicom/skyrat/ds2/masteratarms
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Master At Arms"
- trim_state = "trim_ds2masteratarms"
- sechud_icon_state = SECHUD_DS2_MASTERATARMS
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
-
-/datum/id_trim/syndicom/skyrat/ds2/brigofficer
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Brig Officer"
- trim_state = "trim_ds2brigofficer"
- sechud_icon_state = SECHUD_DS2_BRIGOFFICER
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
-
-/datum/id_trim/syndicom/skyrat/ds2/corporateliasion // DS2 HoP
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Corporate Liaison"
- trim_state = "trim_ds2corporateliaison"
- sechud_icon_state = SECHUD_DS2_CORPLIAISON
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
-
-/datum/id_trim/syndicom/skyrat/ds2/stationadmiral
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "DS-2 Admiral"
- trim_state = "trim_ds2admiral"
- sechud_icon_state = SECHUD_DS2_ADMIRAL
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
-
-/// Interdyne
-
-/datum/id_trim/syndicom/skyrat/interdyne
- assignment = "Interdyne Operative"
-
-/datum/id_trim/syndicom/skyrat/interdyne/deckofficer
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "Deck Officer"
- trim_state = "trim_deckofficer"
- department_color = COLOR_COMMAND_BLUE
- subdepartment_color = COLOR_CARGO_BROWN
- access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS, ACCESS_SYNDICATE_LEADER)
diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm b/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm
deleted file mode 100644
index 4c27c0edde0..00000000000
--- a/modular_skyrat/master_files/code/game/gamemodes/dynamic.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-#define MIN_MIDROUND_COST 20
-#define ALT_MIDROUND_LOWER_TIME 4500
-#define ALT_MIDROUND_UPPER_TIME 10500
-
-// A lite version of the intercept, which only sends a paper with goals and a trait report (or a lack thereof)
-/datum/game_mode/dynamic/proc/send_trait_report()
- . = "Central Command Status Summary "
-
- var/greenshift = GLOB.dynamic_forced_extended || (threat_level < MIN_MIDROUND_COST && shown_threat < MIN_MIDROUND_COST) // if both shown and real threat are below any ruleset, its greenshift time
- generate_station_goals(greenshift)
-
- if(!GLOB.station_goals.len)
- . = "No assigned goals. "
- else
- . += generate_station_goal_report()
- if(!SSstation.station_traits.len)
- . = "No identified shift divergencies. "
- else
- . += generate_station_trait_report()
-
- . += " This concludes your shift-start evaluation. Have a secure shift! \
- This label certifies an Intern has reviewed the above before sending. This document is the property of Nanotrasen Corporation.
"
-
- print_command_report(., "Central Command Status Summary", announce = FALSE)
- priority_announce("Hello, crew of [station_name()]. Our intern has finished their shift-start divergency and goals evaluation, which has been sent to your communications console. Have a secure shift!", "Divergency Report", SSstation.announcer.get_rand_report_sound())
-
-/datum/game_mode/dynamic
- /// Desired median point for midrounds, plus or minus the midround_roll_distance.
- var/midround_median_frequency = 36000
-
-/// Divides threat budget based on the server config
-/datum/game_mode/dynamic/generate_budgets()
- if(CONFIG_GET(flag/split_threat_budget))
- return ..()
-
- round_start_budget = 0
- initial_round_start_budget = 0
- mid_round_budget = threat_level
-
-/// Gets the chance for a heavy ruleset midround injection, the dry_run argument is only used for forced injection.
-/datum/game_mode/dynamic/get_heavy_midround_injection_chance(dry_run)
- var/next_midround_roll = next_midround_injection() - SSticker.round_start_time
-
- var/heavy_coefficient = CLAMP01((next_midround_roll - midround_light_upper_bound) / (midround_heavy_lower_bound - midround_light_upper_bound))
-
- return 100 * heavy_coefficient
-
-/// Determines the next midround injection attempt based on the set median and roll distance.
-/datum/game_mode/dynamic/next_midround_injection()
- if(!isnull(next_midround_injection))
- return next_midround_injection
-
- if(last_midround_injection_attempt == 0)
- last_midround_injection_attempt = SSticker.round_start_time
-
- next_midround_injection = last_midround_injection_attempt + rand((midround_median_frequency - midround_roll_distance), (midround_median_frequency + midround_roll_distance))
-
- return next_midround_injection
-
-/// If a midround injection fails to run, this can be called by the particular rule (if required) to attempt an alternate.
-/datum/game_mode/dynamic/proc/alternate_midround_injection()
- next_midround_injection = world.time + rand(ALT_MIDROUND_LOWER_TIME, ALT_MIDROUND_UPPER_TIME)
- log_dynamic_and_announce("Alternate midround injection in [DisplayTimeText(next_midround_injection - world.time)]")
-
-#undef MIN_MIDROUND_COST
-#undef ALT_MIDROUND_LOWER_TIME
-#undef ALT_MIDROUND_UPPER_TIME
diff --git a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
deleted file mode 100644
index bf49ba88168..00000000000
--- a/modular_skyrat/master_files/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/// Fired when there are no valid candidates. Try another roll after a delay.
-/datum/dynamic_ruleset/midround/from_ghosts/attempt_replacement()
- mode.alternate_midround_injection()
- return
diff --git a/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm b/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm
deleted file mode 100644
index d80f3ae7c16..00000000000
--- a/modular_skyrat/master_files/code/game/machinery/doors/firedoor.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/machinery/door/firedoor/AltClick(mob/user)
- . = ..()
- if(!user.can_perform_action(src))
- return
- try_manual_override(user)
-
-/obj/machinery/door/firedoor/examine(mob/user)
- . = ..()
- . += span_notice("Alt-click the door to use the manual override.")
-
-/obj/machinery/door/proc/try_manual_override(mob/user)
- if(density && !welded && !operating)
- balloon_alert(user, "opening...")
- if(do_after(user, 10 SECONDS, target = src))
- try_to_crowbar(null, user)
- return TRUE
- return FALSE
-
-/obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user)
- if(welded || operating)
- balloon_alert(user, "opening failed!")
- return
-
- if(density)
- open()
- else
- close()
-
-/obj/machinery/door/firedoor/heavy/closed
- icon_state = "door_closed"
- density = TRUE
- alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
-
-/obj/machinery/door/firedoor/solid
- name = "solid emergency shutter"
- desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands."
- icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi'
- glass = FALSE
-
-/obj/machinery/door/firedoor/solid/closed
- icon_state = "door_closed"
- density = TRUE
- opacity = TRUE
- alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
-
diff --git a/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm b/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm
deleted file mode 100644
index 9b43fccfc3a..00000000000
--- a/modular_skyrat/master_files/code/game/objects/items/cards_ids.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-// GENERIC
-/obj/item/card/id/advanced/silver/generic
- name = "generic silver identification card"
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- icon_state = "card_silvergen"
- assigned_icon_state = null
-
-/obj/item/card/id/advanced/gold/generic
- name = "generic gold identification card"
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- icon_state = "card_goldgen"
- assigned_icon_state = null
-
-// DS2
-/obj/item/card/id/advanced/prisoner/ds2
- name = "syndicate prisoner card"
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- icon_state = "card_ds2prisoner"
-
-// SOLFED
-/obj/item/card/id/advanced/solfed
- name = "solfed identification card"
- icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- icon_state = "card_solfed"
- assigned_icon_state = "assigned_solfed"
diff --git a/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm b/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm
deleted file mode 100644
index f736ae58f2a..00000000000
--- a/modular_skyrat/master_files/code/game/objects/items/storage/backpack.dm
+++ /dev/null
@@ -1,156 +0,0 @@
-/obj/item/storage/backpack/satchel/flat/PopulateContents()
- var/contraband_list = list(
- /obj/item/storage/belt/utility/syndicate = 1,
- /obj/item/storage/toolbox/syndicate = 7,
- /obj/item/card/id/advanced/chameleon = 6,
- /obj/item/stack/spacecash/c5000 = 3,
- /obj/item/stack/telecrystal = 2,
- /obj/item/storage/belt/military = 12,
- /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 8,
- /obj/item/storage/box/fireworks/dangerous = 11,
- /obj/item/clothing/mask/gas/syndicate = 10,
- /obj/item/vending_refill/donksoft = 13,
- /obj/item/ammo_box/foambox/riot = 11,
- /obj/item/soap/syndie = 7,
- /obj/item/reagent_containers/crackbrick = 5,
- /obj/item/reagent_containers/crack = 10,
- /obj/item/reagent_containers/cocaine = 9,
- /obj/item/reagent_containers/cocainebrick = 4,
- /obj/item/reagent_containers/hashbrick = 13, //not contraband, but it'll be good padding, and there'll still be a black market for bulk goods
- /obj/item/reagent_containers/heroin = 8,
- /obj/item/reagent_containers/heroinbrick = 3,
- /obj/item/reagent_containers/blacktar = 12,
- /obj/item/storage/pill_bottle/stimulant = 9, //ephedrine and coffee. Can actually change whether someone gets out of a runaway situation
- /obj/item/clothing/mask/cigarette/pipe/crackpipe = 15,
- /obj/item/toy/cards/deck/syndicate = 10, //1tc, not balance breaking, small but premium commodity
- /obj/item/reagent_containers/cup/bottle/morphine = 8,
- /obj/item/reagent_containers/syringe/contraband/methamphetamine = 12,
- /obj/item/clothing/glasses/sunglasses = 5, //can already be achieved in an arguably better form with just some hacking
- )
-
- for(var/i in 1 to 3)
- var/contraband_type = pick_weight(contraband_list)
- contraband_list -= contraband_type
- new contraband_type(src)
-
-/obj/item/storage/backpack/satchel/flat/with_tools/PopulateContents()
- new /obj/item/stack/tile/iron/base(src)
- new /obj/item/crowbar(src)
-
-/*
- * Messenger Bag Types
- */
-
-/obj/item/storage/backpack/messenger
- name = "messenger bag"
- desc = "A trendy looking messenger bag; sometimes known as a courier bag. Fashionable and portable."
- icon_state = "messenger"
- inhand_icon_state = "messenger"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
-
-/obj/item/storage/backpack/messenger/eng
- name = "industrial messenger bag"
- desc = "A tough messenger bag made of advanced treated leather for fireproofing. It also has more pockets than usual."
- icon_state = "messenger_engineering"
- inhand_icon_state = "messenger_engineering"
- resistance_flags = FIRE_PROOF
-
-/obj/item/storage/backpack/messenger/med
- name = "medical messenger bag"
- desc = "A sterile messenger bag well loved by medics for its portability and sleek profile."
- icon_state = "messenger_medical"
- inhand_icon_state = "messenger_medical"
-
-/obj/item/storage/backpack/messenger/vir
- name = "virologist messenger bag"
- desc = "A sterile messenger bag with virologist colours, useful for deploying biohazards in record times."
- icon_state = "messenger_virology"
- inhand_icon_state = "messenger_virology"
-
-/obj/item/storage/backpack/messenger/chem
- name = "chemist messenger bag"
- desc = "A sterile messenger bag with chemist colours, good for getting to your alleyway deals on time."
- icon_state = "messenger_chemistry"
- inhand_icon_state = "messenger_chemistry"
-
-/obj/item/storage/backpack/messenger/coroner
- name = "coroner messenger bag"
- desc = "A messenger bag used to sneak your way out of graveyards at a good pace."
- icon_state = "messenger_coroner"
- inhand_icon_state = "messenger_coroner"
-
-/obj/item/storage/backpack/messenger/gen
- name = "geneticist messenger bag"
- desc = "A sterile messenger bag with geneticist colours, making a remarkably cute accessory for hulks."
- icon_state = "messenger_genetics"
- inhand_icon_state = "messenger_genetics"
-
-/obj/item/storage/backpack/messenger/science
- name = "scientist messenger bag"
- desc = "Useful for holding research materials, and for speeding your way to different scan objectives."
- icon_state = "messenger_science"
- inhand_icon_state = "messenger_science"
-
-/obj/item/storage/backpack/messenger/hyd
- name = "botanist messenger bag"
- desc = "A messenger bag made of all natural fibers, great for getting to the sesh in time."
- icon_state = "messenger_hydroponics"
- inhand_icon_state = "messenger_hydroponics"
-
-/obj/item/storage/backpack/messenger/sec
- name = "security messenger bag"
- desc = "A robust messenger bag for security related needs."
- icon_state = "messenger_security_black"
- inhand_icon_state = "messenger_security_black"
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Black Variant" = list(
- RESKIN_ICON_STATE = "messenger_security_black",
- RESKIN_WORN_ICON_STATE = "messenger_security_black",
- RESKIN_INHAND_STATE = "messenger_security_black",
- ),
- "White Variant" = list(
- RESKIN_ICON_STATE = "messenger_security_white",
- RESKIN_WORN_ICON_STATE = "messenger_security_white",
- RESKIN_INHAND_STATE = "messenger_security_white",
- ),
- )
-
-/obj/item/storage/backpack/messenger/explorer
- name = "explorer messenger bag"
- desc = "A robust messenger bag for stashing your loot, as well as making a remarkably cute accessory for your drakebone armor."
- icon_state = "messenger_explorer"
- inhand_icon_state = "messenger_explorer"
-
-/obj/item/storage/backpack/messenger/cap
- name = "captain's messenger bag"
- desc = "An exclusive messenger bag for NanoTrasen officers, made of real whaleleather."
- icon_state = "messenger_captain"
- inhand_icon_state = "messenger_captain"
-
-/obj/item/storage/backpack/messenger/head_of_personnel
- name = "head of personnel's messenger bag"
- desc = "A exclusive messenger bag issued to Nanotrasen's finest second, with great storage space for all that paperwork you have planned."
- icon_state = "messenger_hop"
- inhand_icon_state = "messenger_hop"
-
-/obj/item/storage/backpack/messenger/blueshield
- name = "blueshield's messenger bag'"
- desc = "A robust messenger bag issued to Nanotrasen's finest guard dogs, with extra TACTICAL POCKETS. Whatever that even means."
- icon_state = "messenger_blueshield"
- inhand_icon_state = "messenger_blueshield"
-
-/obj/item/storage/backpack/messenger/science/robo
- name = "robotics messenger bag"
- desc = "A sleek, industrial-strength messenger bag issued to robotics personnel. Smells faintly of oil; a fashionably mobile choice for fashionably sedentary mechanics."
- icon_state = "messenger_robo"
- inhand_icon_state = "messenger_robo"
-
-/obj/item/storage/backpack/messenger/clown
- name = "Giggles von Honkerton Jr."
- desc = "The latest in storage 'technology' from Honk Co. Hey, how does this fit so much with such a small profile anyway? The wearer will definitely never tell you."
- icon_state = "messenger_clown"
- inhand_icon_state = "messenger_clown"
diff --git a/modular_skyrat/master_files/code/game/sound.dm b/modular_skyrat/master_files/code/game/sound.dm
deleted file mode 100644
index 9d21458a3b2..00000000000
--- a/modular_skyrat/master_files/code/game/sound.dm
+++ /dev/null
@@ -1,214 +0,0 @@
-/proc/get_sfx_skyrat(soundin)
- if(istext(soundin))
- switch(soundin)
- if(SFX_KEYBOARD)
- soundin = pick(
- 'modular_skyrat/modules/aesthetics/computer/sound/keypress1.ogg',
- 'modular_skyrat/modules/aesthetics/computer/sound/keypress2.ogg',
- 'modular_skyrat/modules/aesthetics/computer/sound/keypress3.ogg',
- 'modular_skyrat/modules/aesthetics/computer/sound/keypress4.ogg',
- 'modular_skyrat/modules/aesthetics/computer/sound/keystroke4.ogg',
- )
- if(SFX_BULLET_IMPACT_METAL) // This is the one that will be used most, it is extensive.
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_09.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_10.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_11.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_12.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_13.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_14.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_15.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_16.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_metal_17.ogg',
- )
- if(SFX_BULLET_IMPACT_FLESH)
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_flesh_09.ogg',
- )
- if(SFX_BULLET_IMPACT_ICE)
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_09.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_snow_10.ogg',
- )
- if(SFX_BULLET_IMPACT_WOOD)
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_09.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_wood_10.ogg',
- )
- if(SFX_BULLET_IMPACT_CONCRETE)
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_09.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_masonry_10.ogg',
- )
- if(SFX_BULLET_IMPACT_GLASS)
- soundin = pick(
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_01.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_02.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_03.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_04.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_05.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_06.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_07.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_08.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_09.ogg',
- 'modular_skyrat/modules/gunsgalore/sound/impact/impact_glass_10.ogg',
- )
- if("punch")
- soundin = pick('modular_skyrat/master_files/sound/weapons/punch1.ogg', 'modular_skyrat/master_files/sound/weapons/punch3.ogg')
- if ("explosion")
- soundin = pick(
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode2.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode3.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode4.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode5.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode6.ogg',
- 'modular_skyrat/modules/black_mesa/sound/explosions/explode7.ogg',
- )
- return soundin
-
-// This is an atom level variable to prevent extensive typechecking for impacts.
-/atom
- // The sound we make if hit.
- var/impact_sound = SFX_BULLET_IMPACT_METAL
-
-
-// TURFS
-/turf/closed/wall/ice
- impact_sound = SFX_BULLET_IMPACT_ICE
-
-/turf/closed/wall/mineral/snow
- impact_sound = SFX_BULLET_IMPACT_ICE
-
-/turf/closed/wall/mineral/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/turf/closed/wall/mineral/bamboo
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/turf/closed/wall/mineral/sandstone
- impact_sound = SFX_BULLET_IMPACT_CONCRETE
-
-/turf/closed/wall/vault/rock
- impact_sound = SFX_BULLET_IMPACT_CONCRETE
-
-/turf/closed/wall/vault/sandstone
- impact_sound = SFX_BULLET_IMPACT_CONCRETE
-
-/turf/closed/wall/rock
- impact_sound = SFX_BULLET_IMPACT_CONCRETE
-
-/turf/closed/wall/mineral/diamond
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/turf/closed/wall/mineral/plasma
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-// MOBS
-/mob/living
- impact_sound = SFX_BULLET_IMPACT_FLESH
-
-// STRUCTURES
-/obj/structure/window
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/glass
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/reinforced/rglass
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/reinforced/plasmarglass
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/reinforced/plastitaniumglass
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/reinforced/titaniumglass
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/structure/table/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/barricade/wooden
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/chair/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/closet/crate/wooden
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/door_assembly/door_assembly_wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/falsewall/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/table_frame/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/deployable_barricade/wooden
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/structure/statue/snow
- impact_sound = SFX_BULLET_IMPACT_ICE
-
-/obj/structure/deployable_barricade/snow
- impact_sound = SFX_BULLET_IMPACT_ICE
-
-
-
-// MACHINERY
-/obj/machinery/door/window
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/machinery/computer
- impact_sound = SFX_BULLET_IMPACT_GLASS
-
-/obj/machinery/door/airlock/wood
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
-/obj/machinery/computer/security/wooden_tv
- impact_sound = SFX_BULLET_IMPACT_WOOD
-
diff --git a/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm b/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm
deleted file mode 100644
index c18d05a0e5f..00000000000
--- a/modular_skyrat/master_files/code/modules/antagonists/cult/cult_items.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/item/clothing/suit/hooded/cultrobes
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi'
diff --git a/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm b/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm
deleted file mode 100644
index 346e37968c0..00000000000
--- a/modular_skyrat/master_files/code/modules/buildmode/bm_mode.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/buildmode_mode
- ///this variable serves to separate icons due to modularity. The default path to button icons is /tg/.
- // skyrat path - 'modular_skyrat/master_files/icons/misc/buildmode.dmi'
- var/button_icon = 'icons/misc/buildmode.dmi'
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm b/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm
deleted file mode 100644
index f542e867fc6..00000000000
--- a/modular_skyrat/master_files/code/modules/client/preferences/clothing.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/datum/preference/choiced/socks/compile_constant_data()
- var/list/data = ..()
-
- data[SUPPLEMENTAL_FEATURE_KEY] = "socks_color"
-
- return data
-
-/datum/preference/choiced/socks/is_accessible(datum/preferences/preferences)
- if (!..(preferences))
- return FALSE
-
- var/species_type = preferences.read_preference(/datum/preference/choiced/species)
- var/datum/species/species = new species_type
- return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
-
-/datum/preference/choiced/undershirt/compile_constant_data()
- var/list/data = ..()
-
- data[SUPPLEMENTAL_FEATURE_KEY] = "undershirt_color"
-
- return data
-
-/datum/preference/choiced/undershirt/is_accessible(datum/preferences/preferences)
- if (!..(preferences))
- return FALSE
-
- var/species_type = preferences.read_preference(/datum/preference/choiced/species)
- var/datum/species/species = new species_type
- return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
-
-/datum/preference/choiced/underwear/is_accessible(datum/preferences/preferences)
- if (!..(preferences))
- return FALSE
-
- var/species_type = preferences.read_preference(/datum/preference/choiced/species)
- var/datum/species/species = new species_type
- return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
-
-/datum/preference/choiced/bra
- savefile_key = "bra"
- savefile_identifier = PREFERENCE_CHARACTER
- main_feature_name = "Bra"
- category = PREFERENCE_CATEGORY_CLOTHING
- should_generate_icons = TRUE
-
-/datum/preference/choiced/bra/init_possible_values()
- return assoc_to_keys_features(GLOB.bra_list)
-
-/datum/preference/choiced/bra/icon_for(value)
- var/static/icon/body
- if (isnull(body))
- body = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm")
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY)
- body.Blend(icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
-
- var/icon/icon_with_bra = icon(body)
-
- if (value != "Nude")
- var/datum/sprite_accessory/accessory = GLOB.bra_list[value]
- icon_with_bra.Blend(icon(accessory.icon, accessory.icon_state), ICON_OVERLAY)
-
- icon_with_bra.Crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.Crop(9, 9, 23, 23)
- icon_with_bra.Scale(32, 32)
- return icon_with_bra
-
-/datum/preference/choiced/bra/apply_to_human(mob/living/carbon/human/target, value)
- target.bra = value
-
-/datum/preference/choiced/bra/compile_constant_data()
- var/list/data = ..()
-
- data[SUPPLEMENTAL_FEATURE_KEY] = "bra_color"
-
- return data
-
-/datum/preference/choiced/bra/is_accessible(datum/preferences/preferences)
- if (!..(preferences))
- return FALSE
-
- var/species_type = preferences.read_preference(/datum/preference/choiced/species)
- var/datum/species/species = new species_type
- return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
diff --git a/modular_skyrat/master_files/code/modules/clothing/clothing.dm b/modular_skyrat/master_files/code/modules/clothing/clothing.dm
deleted file mode 100644
index 881f9d089d4..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/clothing.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-GLOBAL_LIST_EMPTY(taur_clothing_icons)
-
-/obj/item/clothing
- blocks_emissive = EMISSIVE_BLOCK_UNIQUE
- /// For clothing that does not have body_parts_covered = CHEST /etc but that we would still like to be able to attach an accessory to
- var/attachment_slot_override = NONE
-
-/obj/item/clothing/take_damage(damage_amount, damage_type = BRUTE, damage_flag = "", sound_effect = TRUE, attack_dir, armour_penetration = 0)
- if(atom_integrity <= 0 && damage_flag == FIRE) // Our clothes don't get destroyed by fire, shut up stack trace >:(
- return
-
- return ..()
-
-/**
- * Proc to generate a taur variation of clothes, with the intent of caching them.
- * It is meant for suits and uniforms at the moment, to cut out the bottom half so that
- * it doesn't look too out of place.
- *
- * Arguments:
- * * index - The index at which the icon will be stored. Overwrites existing icons if there was one,
- * do your checks before calling this proc.
- * * icon_to_process (/icon) - The icon we want to run through the process of masking off the bottom part of.
- * * icon_state - The icon_state of the icon we're being given, to obtain a proper icon object.
- *
- * Add a `taur_type` here if you ever want to add different cropping options, for whatever reason.
- */
-/proc/generate_taur_clothing(index, icon/icon_to_process, icon_state)
- var/icon/taur_clothing_icon = icon("icon" = icon_to_process, "icon_state" = icon_state)
- var/taur_icon_state = "taur" // Leaving this here in case we ever want to have different ones
- var/icon/taur_cropping_mask = icon("icon" = 'modular_skyrat/master_files/icons/mob/clothing/taur_masking_helpers.dmi', "icon_state" = taur_icon_state)
- taur_clothing_icon.Blend(taur_cropping_mask, ICON_MULTIPLY)
- taur_clothing_icon = fcopy_rsc(taur_clothing_icon)
- GLOB.taur_clothing_icons[index] = taur_clothing_icon
-
-/**
- * Proc that handles returning a mutable appearance that can fit on a taur body without looking too janky!
- *
- * It will check the cache to see if there was already an icon created for the taur version of that item,
- * and will generate one if there was none, and will return the proper icon straight from `GLOB.taur_clothing_icons`,
- * to avoid expensive icon operations.
- *
- * Arguments:
- * * icon_state - The icon state that was used to create the icon that will now be processed.
- * Used to store the taur icon in the cache.
- * * icon_to_process (/icon) - The icon that we want to process. Do note that this is already
- * an icon, and NOT an icon file, because we want to be able to operate on icons that have been
- * modified to fit female bodytypes, for instance.
- * * layer - The layer we want the mutable appearance to be on.
- * * female_type - The `female_flags` of the clothing item used to generate the icon that
- * we're operating on, if appropriate, to allow the caching of female-fitted uniforms.
- * * greyscale_colors - The colors of the icon if it was a greyscale one, to make this GAGS-compatible.
- *
- * Returns a taur-compatible mutable_appearance!
- */
-/proc/wear_taur_version(icon_state, icon/icon_to_process, layer, female_type, greyscale_colors)
- RETURN_TYPE(/mutable_appearance)
-
- var/index = "[icon_state]-[greyscale_colors]-[female_type]"
- var/icon/taur_clothing_icon = GLOB.taur_clothing_icons[index]
- if(!taur_clothing_icon) //Create standing/laying icons if they don't exist
- generate_taur_clothing(index, icon_to_process, icon_state)
- return mutable_appearance(GLOB.taur_clothing_icons[index], layer = -layer)
diff --git a/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm b/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm
deleted file mode 100644
index b763c0fa076..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/head/akula_official.dm
+++ /dev/null
@@ -1,20 +0,0 @@
-/obj/item/clothing/head/hats/caphat/azulean
- icon_state = "oldbloodcap"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/akula_official.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/akula_official.dmi'
-
-/obj/item/clothing/head/hats/caphat/azulean/old_blood
- name = "\improper Oldblood's royal cap"
- desc = "A peaked cap typically seen on nobles and high-rankers of the Agurkrral Royal Navy, this service hat has a long history in the Old Principalities. \
- Comfortable and lightweight, the purpose of this cap has gradually shifted to becoming yet another method to flex rank. \n\n\
- Threaded gold is often seen in the campaign cords attached to it, and the emblems on them grow more and more complex based on ranking; \
- and of course, importance to the King."
- icon_state = "oldbloodcap"
-
-/obj/item/clothing/head/hats/caphat/azulean/upstart
- name = "\improper Upstart's noble cap"
- desc = "A peaked cap widely seen across the New Principalities. \n\
- Combining ideas from both the NRI and the Old Principalities, this cloneleather cap was made to be both inexpensive and easier to maintain than the elaborate headpieces worn by the older nobility. \
- Border princes of all make and model are known to put their own personal emblems on these instead of any coherent ranking system, \
- and the cap features a wider brim in order to shield Azulean eyes from the alien suns they intend to grasp."
- icon_state = "upstartcap"
diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm b/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm
deleted file mode 100644
index 5a78f6bdb20..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/shoes/boots.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/obj/item/clothing/shoes/workboots/mining
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi' // To keep the old version before #8911
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi' // To keep the old version before #8911
diff --git a/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm b/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm
deleted file mode 100644
index 45eb738f0b8..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/shoes/wheelys.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/item/clothing/shoes/wheelys
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/large-worn-icons/64x64/feet_digi.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/feet_64.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/feet_64.dmi'
diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm b/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm
deleted file mode 100644
index 724bd731683..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/suits/_suits.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/obj/item/clothing/suit
- /// Does this object get cropped when worn by a taur on their suit or uniform slot?
- var/gets_cropped_on_taurs = TRUE
-
-//Define worn_icon_digi below here for suits so we don't have to make whole new .dm files for each
-/obj/item/clothing/suit/armor
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi'
-
-/obj/item/clothing/suit/bio_suit
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/bio_digi.dmi'
-
-/obj/item/clothing/suit/wizrobe
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/wizard_digi.dmi'
- gets_cropped_on_taurs = FALSE
-
-/obj/item/clothing/suit/toggle/labcoat
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat_digi.dmi'
-
-/obj/item/clothing/suit/space
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi'
-
-/obj/item/clothing/suit/chaplainsuit
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi'
-
-/obj/item/clothing/suit/hooded/chaplainsuit
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/chaplain_digi.dmi'
diff --git a/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm b/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm
deleted file mode 100644
index f55c26d3645..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/suits/labcoat.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/obj/item/clothing/suit/toggle/labcoat/skyrat
- name = "SR LABCOAT SUIT DEBUG"
- desc = "REPORT THIS IF FOUND"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi'
- icon_state = null //Keeps this from showing up under the chameleon hat
-
-/obj/item/clothing/suit/toggle/labcoat/skyrat/rd
- name = "research directors labcoat"
- desc = "A Nanotrasen standard labcoat for certified Research Directors. It has an extra plastic-latex lining on the outside for more protection from chemical and viral hazards."
- icon_state = "labcoat_rd"
- body_parts_covered = CHEST|ARMS|LEGS
- armor_type = /datum/armor/skyrat_rd
-
-/datum/armor/skyrat_rd
- melee = 5
- bio = 80
- fire = 80
- acid = 70
-
-/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis
- name = "high vis labcoat"
- desc = "A high visibility vest for emergency responders, intended to draw attention away from the blood."
- icon_state = "labcoat_highvis"
- blood_overlay_type = "armor"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/toggle/labcoat/skyrat/highvis/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
- . = ..()
- if(!isinhands)
- . += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha)
-
-/obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown //Intended to keep patients modest while still allowing for surgeries
- name = "hospital gown"
- desc = "A complicated drapery with an assortment of velcros and strings, designed to keep a patient modest during medical stay and surgeries."
- icon_state = "hgown"
- toggle_noun = "drapes"
- body_parts_covered = NONE //Allows surgeries despite wearing it; hiding genitals is handled in /datum/sprite_accessory/genital/is_hidden() (Only place it'd work sadly)
- armor_type = /datum/armor/none
- equip_delay_other = 8
-
-/obj/item/clothing/suit/toggle/labcoat/roboticist //Overwrite the TG Roboticist labcoat to Black and Red (not the Interdyne labcoat though)
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/labcoat.dmi'
- icon_state = "labcoat_robo_sr"
-
-/obj/item/clothing/suit/toggle/labcoat/medical //Renamed version of the Genetics labcoat for more generic medical purposes; just a subtype of /labcoat/ for the TG files
- name = "medical labcoat"
- desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
- icon_state = "labcoat_gen"
-
-/obj/item/clothing/suit/toggle/labcoat/Initialize(mapload)
- . = ..()
- allowed += list(
- /obj/item/handheld_soulcatcher,
- )
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm b/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm
deleted file mode 100644
index faaba2f476b..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/akula_official.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/clothing/under/rank/azulean
- icon_state = "oldblood"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi'
- female_sprite_flags = NO_FEMALE_UNIFORM
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/under/rank/azulean/old_blood
- name = "\improper Agurkrral Oldblood's royal regalia"
- desc = "A service dress uniform of the Old Principalities of Agurkrral, a fashion shared by the majority of the nobility. \
- These outfits are known to normally be accessorized with gold trims and other rare metals, \
- constructed and treated specially for use in underwater environments; the dwellings of most of the crown's old guard. \n\n\
- Actual fish-leather is often used for the subtle pattern of scaling, and to ensure proper hydrodynamics while swimming. \
- Due to being constructed for comfort and flash rather than practicality, the technology used in Shoredresses to hydrate the wearer could not be implemented; \
- only a mount for a Shoredress's helm."
- icon_state = "oldblood"
-
-/obj/item/clothing/under/rank/azulean/old_blood/skirt
- name = "\improper Agurkrral Oldblood's royal regalia"
- icon_state = "oldblood_skirt"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/obj/item/clothing/under/rank/azulean/upstart
- name = "\improper Agurkrral Upstart's noble getup"
- desc = "Patterned off the dress uniforms of the Old Principalities, this sort of style belongs to the border princes of the New Principalities. \
- These outfits rebuke tradition to incorporate the use of imported leather, using reinforced clasps instead of shiny golden buttons. \n\n\
- Few decorations are normally seen in these clothing, owing to the tendency of their wearers to 'gallivant.' \
- Due to being constructed for a degree of expendability, the technology used in Shoredresses to hydrate the wearer is \
- an extremely rare sight in these outfits; only the mount for a Shoredress's helm."
- icon_state = "upstart"
-
-/obj/item/clothing/under/rank/azulean/upstart/skirt
- name = "\improper Agurkrral Upstart's noble getup"
- icon_state = "upstart_skirt"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/color.dm b/modular_skyrat/master_files/code/modules/clothing/under/color.dm
deleted file mode 100644
index 094dddaabd3..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/color.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/item/clothing/under/color
- greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/worn/monkey
-
-/obj/item/clothing/under/color/rainbow
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi'
-
-/**
- * Random jumpsuit is the preferred style of the wearer if loaded as an outfit.
- * This is cleaner than creating a ../skirt variant as skirts are precached into SSwardrobe
- * and that causes runtimes for runtimes for this class as it qdels on Initialize.
- */
-/obj/item/clothing/under/color/random/proc/get_random_variant()
- var/mob/living/carbon/human/wearer = loc
- if(istype(wearer) && wearer.jumpsuit_style == PREF_SKIRT)
- return get_random_jumpskirt()
-
- return get_random_jumpsuit()
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/costume.dm b/modular_skyrat/master_files/code/modules/clothing/under/costume.dm
deleted file mode 100644
index 9e5567e4496..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/costume.dm
+++ /dev/null
@@ -1,127 +0,0 @@
-/obj/item/clothing/under/costume
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
-
-/obj/item/clothing/under/costume/russian_officer
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi'
-
-/obj/item/clothing/under/costume/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
- can_adjust = FALSE
-
-//My least favorite file. Just... try to keep it sorted. And nothing over the top
-
-/*
-* UNSORTED
-*/
-/obj/item/clothing/under/costume/skyrat/cavalry
- name = "cavalry uniform"
- desc = "Dedicate yourself to something better. To loyalty, honour, for it only dies when everyone abandons it."
- icon_state = "cavalry" //specifically an 1890s US Army Cavalry Uniform
-
-/obj/item/clothing/under/costume/deckers/alt //not even going to bother re-pathing this one because its such a unique case of 'TGs item has something but this alt doesnt'
- name = "deckers maskless outfit"
- desc = "A decker jumpsuit with neon blue coloring."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
- icon_state = "decking_jumpsuit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/skyrat/bathrobe
- name = "bathrobe"
- desc = "A warm fluffy bathrobe, perfect for relaxing after finally getting clean."
- icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi'
- icon_state = "robes"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- greyscale_colors = "#ffffff"
- greyscale_config = /datum/greyscale_config/bathrobe
- greyscale_config_worn = /datum/greyscale_config/bathrobe/worn
- greyscale_config_worn_teshari = /datum/greyscale_config/bathrobe/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/bathrobe/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/bathrobe/worn/oldvox
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- greyscale_colors = "#434d7a" //THATS RIGHT, FUCK YOU! THE BATHROBE CAN BE RECOLORED!
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/*
-* LUNAR AND JAPANESE CLOTHES
-*/
-
-/obj/item/clothing/under/costume/skyrat/qipao
- name = "qipao"
- desc = "A qipao, traditionally worn in ancient Earth China by women during social events and lunar new years."
- icon_state = "qipao"
- body_parts_covered = CHEST|GROIN|LEGS
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- greyscale_colors = "#2b2b2b"
- greyscale_config = /datum/greyscale_config/qipao
- greyscale_config_worn = /datum/greyscale_config/qipao/worn
- greyscale_config_worn_digi = /datum/greyscale_config/qipao/worn/digi
- flags_1 = IS_PLAYER_COLORABLE_1
- gets_cropped_on_taurs = FALSE
-
-/obj/item/clothing/under/costume/skyrat/cheongsam
- name = "cheongsam"
- desc = "A cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years."
- icon_state = "cheongsam"
- body_parts_covered = CHEST|GROIN|LEGS
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- greyscale_colors = "#2b2b2b"
- greyscale_config = /datum/greyscale_config/cheongsam
- greyscale_config_worn = /datum/greyscale_config/cheongsam/worn
- greyscale_config_worn_digi = /datum/greyscale_config/cheongsam/worn/digi
- flags_1 = IS_PLAYER_COLORABLE_1
- gets_cropped_on_taurs = FALSE
-
-/obj/item/clothing/under/costume/skyrat/yukata
- name = "yukata"
- desc = "A traditional ancient Earth Japanese yukata, typically worn in casual settings."
- icon_state = "yukata"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- greyscale_colors = "#2b2b2b"
- greyscale_config = /datum/greyscale_config/yukata
- greyscale_config_worn = /datum/greyscale_config/yukata/worn
- greyscale_config_worn_digi = /datum/greyscale_config/yukata/worn/digi
- flags_1 = IS_PLAYER_COLORABLE_1
- gets_cropped_on_taurs = FALSE
-
-/obj/item/clothing/under/costume/skyrat/kamishimo
- name = "kamishimo"
- desc = "A traditional ancient Earth Japanese Kamishimo."
- icon_state = "kamishimo"
-
-/obj/item/clothing/under/costume/skyrat/kimono
- name = "fancy kimono"
- desc = "A traditional ancient Earth Japanese Kimono. Longer and fancier than a yukata."
- icon_state = "kimono"
- body_parts_covered = CHEST|GROIN|ARMS
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/*
-* CHRISTMAS CLOTHES
-*/
-
-/obj/item/clothing/under/costume/skyrat/christmas
- name = "christmas costume"
- desc = "Can you believe it guys? Christmas. Just a lightyear away!" //Lightyear is a measure of distance I hate it being used for this joke :(
- icon_state = "christmas"
-
-/obj/item/clothing/under/costume/skyrat/christmas/green
- name = "green christmas costume"
- desc = "4:00, wallow in self-pity. 4:30, stare into the abyss. 5:00, solve world hunger, tell no one. 5:30, jazzercize; 6:30, dinner with me. I can't cancel that again. 7:00, wrestle with my self-loathing. I'm booked. Of course, if I bump the loathing to 9, I could still be done in time to lay in bed, stare at the ceiling and slip slowly into madness."
- icon_state = "christmas_green"
-
-/obj/item/clothing/under/costume/skyrat/christmas/croptop
- name = "sexy christmas costume"
- desc = "About 550 years since the release of Mariah Carey's \"All I Want For Christmas is You\", society has yet to properly recover from its repercussions. Some still keep a gun as their christmas mantlepiece, just in case she's heard singing on their rooftop late in the night..."
- icon_state = "christmas_crop"
- body_parts_covered = CHEST|GROIN
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/obj/item/clothing/under/costume/skyrat/christmas/croptop/green
- name = "sexy green christmas costume"
- desc = "Stupid. Ugly. Out of date. If I can't find something nice to wear I'm not going."
- icon_state = "christmas_crop_green"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm
deleted file mode 100644
index 8fe26c3b342..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm
+++ /dev/null
@@ -1,116 +0,0 @@
-/obj/item/clothing/under/rank/cargo
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi'
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/cargo.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/cargo.dmi'
-
-// Add a /obj/item/clothing/under/rank/cargo/miner/skyrat if you add miner uniforms
-
-/*
-* CARGO TECH
-*/
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/utility
- name = "supply utility uniform"
- desc = "A utility uniform worn by employees of the Supply department."
- icon_state = "util_cargo"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/utility/syndicate
- armor_type = /datum/armor/clothing_under/utility_syndicate
- has_sensor = NO_SENSORS
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/long
- name = "cargo technician's long jumpsuit"
- desc = "For crate-pushers who'd rather protect their legs than show them off."
- icon_state = "cargo_long"
- alt_covers_chest = FALSE
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/gorka
- name = "supply gorka"
- desc = "A rugged, utilitarian gorka worn by the Supply department."
- icon_state = "gorka_cargo"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck
- name = "supply turtleneck"
- desc = "A snug turtleneck sweater worn by the Supply department.."
- icon_state = "turtleneck_cargo"
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt
- name = "supply skirtleneck"
- desc = "A snug turtleneck sweater worn by Supply, this time with a skirt attached!"
- icon_state = "skirtleneck"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/evil
- name = "black cargo uniform"
- desc = "A standard cargo uniform with a more... Venerable touch to it."
- icon_state = "qmsynd"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/cargo/tech/skyrat/casualman
- name = "cargo technician casualwear"
- desc = "A pair of stylish black jeans and a regular sweater for the relaxed technician."
- icon_state = "cargotechjean"
- can_adjust = FALSE
-
-/*
-* QUARTERMASTER
-*/
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/gorka
- name = "quartermaster's gorka"
- desc = "A rugged, utilitarian gorka with silver markings. Unlike the regular employees', this one is lined with silk on the inside."
- icon_state = "gorka_qm"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck
- name = "quartermaster's turtleneck"
- desc = "A snug turtleneck sweater worn by the Quartermaster, characterized by the expensive-looking pair of suit pants."
- icon_state = "turtleneck_qm"
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt
- name = "quartermaster's skirtleneck"
- desc = "A snug turtleneck sweater worn by the Quartermaster, as shown by the elegant double-lining of its silk skirt."
- icon_state = "skirtleneckQM"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/syndie
- name = "deck officer's jumpsuit"
- desc = "A dark suit with a classic cargo vest. For the ultimate master of all things paper."
- icon_state = "qmsynd"
- has_sensor = NO_SENSORS
- armor_type = /datum/armor/clothing_under/skyrat_syndie
- can_adjust = FALSE
-
-/datum/armor/clothing_under/skyrat_syndie
- melee = 10
- fire = 50
- acid = 40
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/formal
- name = "quartermaster's formal jumpsuit"
- desc = "A western-like alternate uniform for the old fashioned QM."
- icon_state = "supply_chief"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt
- name = "quartermaster's formal jumpskirt"
- desc = "A western-like alternate uniform for the old fashioned QM. Skirt included!"
- icon_state = "supply_chief_skirt"
- can_adjust = FALSE
- body_parts_covered = CHEST|GROIN|ARMS
- dying_key = DYE_REGISTRY_JUMPSKIRT
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/under/rank/cargo/qm/skyrat/casual
- name = "quartermaster's casualwear"
- desc = "A brown jacket with matching trousers for the relaxed Quartermaster."
- icon_state = "qmc"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm
deleted file mode 100644
index 05aa24276d8..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/centcom.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-//This file is for any station-aligned or neutral factions, not JUST Nanotrasen.
-//Try to keep them all a subtype of centcom/skyrat, for file sorting and balance - all faction representatives should have the same/similarly armored uniforms
-
-/obj/item/clothing/under/rank/centcom
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
-
-/obj/item/clothing/under/rank/centcom/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi'
-
-/*
-* NANOTRASEN
-*/
-//Check modular_skyrat\modules\nanotrasen_naval_command\code\clothing.dm for more of these! (Or, currently, ALL of these.)
-
-/*
-* LOPLAND
-*/
-/obj/item/clothing/under/rank/centcom/skyrat/lopland
- name = "\improper Lopland corporate uniform"
- desc = "A sleek jumpsuit worn by Lopland corporate. Its surprisingly well padded."
- icon_state = "lopland_shirt"
- worn_icon_state = "lopland_shirt"
-
-/obj/item/clothing/under/rank/centcom/skyrat/lopland/instructor
- name = "\improper Lopland instructor's uniform"
- desc = "A over-the-top, militaristic jumpsuit worn by Lopland-certified instructors, with a big Lopland logo slapped on the back. The amount of pockets could make a space marine cry."
- icon_state = "lopland_tac"
- worn_icon_state = "lopland_tac"
-
-
-/*
-* MISC
-*/
-// pizza and other misc ERTs in this file too?
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm
deleted file mode 100644
index b1c465ccdf9..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-/obj/item/clothing/under/rank/medical
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi
-
-/obj/item/clothing/under/rank/medical/doctor/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
-
-
-/obj/item/clothing/under/rank/medical/scrubs/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
- icon_state = "scrubswhite" // Because for some reason TG's scrubs dont have an icon on their basetype
- desc = "It's made of a special fiber that provides minor protection against biohazards. This one seems to be the original Scrub."
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
-
-/obj/item/clothing/under/rank/medical/chemist/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
-
-// Add a 'medical/virologist/skyrat' here if you make Virologist uniforms
-
-/obj/item/clothing/under/rank/medical/paramedic/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
-
-/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/medical.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/medical.dmi'
-
-/*
-* DOCTOR
-*/
-
-/obj/item/clothing/under/rank/medical/doctor/skyrat/utility
- name = "medical utility uniform"
- desc = "A utility uniform worn by Medical doctors."
- icon_state = "util_med"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
-
-/obj/item/clothing/under/rank/medical/doctor/skyrat/utility/syndicate
- armor_type = /datum/armor/clothing_under/utility_syndicate
- has_sensor = NO_SENSORS
-
-/*
-* SCRUBS
-*/
-
-/obj/item/clothing/under/rank/medical/scrubs/skyrat/red
- desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a deep red."
- icon_state = "scrubsred"
-
-/obj/item/clothing/under/rank/medical/scrubs/skyrat/white
- desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a cream white colour."
- icon_state = "scrubswhite"
-
-/*
-* CHEMIST
-*/
-
-/obj/item/clothing/under/rank/medical/chemist/skyrat/formal
- name = "chemist's formal jumpsuit"
- desc = "A white shirt with left-aligned buttons and an orange stripe, lined with protection against chemical spills."
- icon_state = "pharmacologist"
-
-/obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt
- name = "chemist's formal jumpskirt"
- icon_state = "pharmacologist_skirt"
- body_parts_covered = CHEST|GROIN|ARMS
- dying_key = DYE_REGISTRY_JUMPSKIRT
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- gets_cropped_on_taurs = FALSE
-
-/obj/item/clothing/under/rank/medical/chemist/skirt
- gets_cropped_on_taurs = FALSE
-
-/*
-* PARAMEDIC
-*/
-
-/obj/item/clothing/under/rank/medical/paramedic/skyrat/light
- name = "light paramedic uniform"
- desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has the reflective strips removed."
- icon_state = "paramedic_light"
-
-/obj/item/clothing/under/rank/medical/paramedic/skyrat/light/skirt
- name = "light paramedic skirt"
- desc = "A brighter variant of the typical Paramedic uniform made with special fibers that provide minor protection against biohazards, this one has had it's legs replaced with a skirt."
- icon_state = "paramedic_light_skirt"
- body_parts_covered = CHEST|GROIN|ARMS
- dying_key = DYE_REGISTRY_JUMPSKIRT
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/*
-* CHIEF MEDICAL OFFICER
-*/
-
-/obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial //Rank pins of the Brigadier General
- desc = "A teal, sterile naval suit with a rank badge denoting the Officer of the Medical Corps. Doesn't protect against blaster fire."
- name = "chief medical officer's naval jumpsuit"
- icon_state = "impcmo"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm
deleted file mode 100644
index b73588e25d2..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-/obj/item/clothing/under/rank/rnd
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi
-
-/obj/item/clothing/under/rank/rnd/scientist/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
-
-/obj/item/clothing/under/rank/rnd/roboticist/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
-
-/obj/item/clothing/under/rank/rnd/research_director/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
-
-// Add a 'rnd/geneticist/skyrat' if you make Geneticist uniforms
-
-/*
-* SCIENTIST
-*/
-
-/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility
- name = "science utility uniform"
- desc = "A utility uniform worn by NT-certified Science staff."
- icon_state = "util_sci"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/rnd/scientist/skyrat/utility/syndicate
- desc = "A utility uniform worn by Science staff."
- armor_type = /datum/armor/clothing_under/utility_syndicate
- has_sensor = NO_SENSORS
-
-/obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience
- name = "science team uniform"
- desc = "A simple semi-formal uniform consisting of a grayish-blue shirt and off-white slacks, paired with a ridiculous, but mandatory, tie."
- icon_state = "hl_scientist"
- can_adjust = FALSE
-
-/*
-* ROBOTICIST
-*/
-
-/obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek
- name = "sleek roboticst jumpsuit"
- desc = "A sleek version of the roboticist uniform, complete with amber sci-fi stripes."
- icon_state = "robosleek"
- can_adjust = FALSE
-
-/*
-* RESEARCH DIRECTOR
-*/
-
-/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit
- name = "research director's jumpsuit"
- desc = "A shiny nano-weave uniform for those holding the title of \"Research Director\". Its fabric provides minor protection from biological contaminants."
- icon_state = "director_jumpsuit"
- can_adjust = TRUE
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit
- name = "research director's jumpskirt"
- icon_state = "director_jumpskirt"
- body_parts_covered = CHEST|GROIN|ARMS
- dying_key = DYE_REGISTRY_JUMPSKIRT
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial //Rank pins of the Major General
- desc = "An off-white naval suit over black pants, with a rank badge denoting the Officer of the Internal Science Division. It's a peaceful life."
- name = "research director's naval jumpsuit"
- icon_state = "imprd"
-
-/*
-* OVERRIDES
-* ORION TODO: look over these when TG finishes their science resprites (any day now...)
-*/
-
-/obj/item/clothing/under/rank/rnd/scientist
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
- icon_state = "science_new"
-
-/obj/item/clothing/under/rank/rnd/scientist/skirt
- icon_state = "sciwhite_skirt_new"
-
-/obj/item/clothing/under/rank/rnd/roboticist
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
- icon_state = "robotics_new"
-
-/obj/item/clothing/under/rank/rnd/roboticist/skirt
- icon_state = "robotics_skirt_new"
-
-/obj/item/clothing/under/rank/rnd/geneticist
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/rnd.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/rnd.dmi'
- icon_state = "genetics_new"
-
-/obj/item/clothing/under/rank/rnd/geneticist/skirt
- icon_state = "geneticswhite_skirt_new"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm
deleted file mode 100644
index 51af7f0675e..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/security.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/obj/item/clothing/under/rank/security
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/security_digi.dmi' // Anything that was in the security.dmi, should be in the security_digi.dmi
-
-/obj/item/clothing/under/rank/security/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
-
-/obj/item/clothing/under/rank/security/head_of_security/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
-
-//DEBATE MOVING *ALL* SECURITY STUFF HERE? Even overrides, at least as a like, sub-file?
-
-/*
-* SECURITY OFFICER
-*/
-
-/obj/item/clothing/under/rank/security/skyrat/utility
- name = "security utility uniform"
- desc = "A utility uniform worn by Lopland-certified Security officers."
- icon_state = "util_sec"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION | CLOTHING_MONKEY_VARIATION
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/skyrat/utility/redsec
- desc = "A utility uniform worn by trained Security officers."
- icon_state = "util_sec_old"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate
- armor_type = /datum/armor/clothing_under/redsec_syndicate
- has_sensor = NO_SENSORS
-
-/obj/item/clothing/under/rank/security/peacekeeper/trousers
- name = "security trousers"
- desc = "Some Peacekeeper-blue combat trousers. Probably should pair it with a vest for safety."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
- icon_state = "workpants_blue"
- body_parts_covered = GROIN|LEGS
- can_adjust = FALSE
- female_sprite_flags = FEMALE_UNIFORM_NO_BREASTS
-
-/*
-* HEAD OF SECURITY
-*/
-
-/datum/armor/clothing_under/redsec_syndicate
- melee = 10
- fire = 50
- acid = 40
-
-/obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial //Rank pins of the Grand General
- desc = "A tar black naval suit and a rank badge denoting the Officer of The Internal Security Division. Be careful your underlings don't bump their head on a door."
- name = "head of security's naval jumpsuit"
- icon_state = "imphos"
-
-/*
-* PRISONER
-*/
-
-/obj/item/clothing/under/rank/prisoner
- greyscale_config_worn_monkey = /datum/greyscale_config/jumpsuit/prison/worn/monkey
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/misc.dm b/modular_skyrat/master_files/code/modules/clothing/under/misc.dm
deleted file mode 100644
index 2f7b03ddbbf..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/misc.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-//DO NOT ADD TO THIS FILE UNLESS THE SITUATION IS DIRE
-//MISC FILES = UNSORTED FILES. EVEN TG HATES THIS ONE.
-
-/obj/item/clothing/under/misc
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/misc_digi.dmi'
-
-/obj/item/clothing/under/misc/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/misc.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/misc.dmi'
- can_adjust = FALSE
-
-/*
- Do we even bother sorting these? We don't want to use the file, it's for emergencies and in-betweens.
- Just... don't lose your stuff.
-*/
-
-/obj/item/clothing/under/misc/skyrat/gear_harness
- name = "gear harness"
- desc = "A simple, inconspicuous harness replacement for a jumpsuit."
- icon_state = "gear_harness"
- body_parts_covered = NONE
- attachment_slot_override = CHEST
- can_adjust = FALSE
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/under/misc/skyrat/gear_harness/eve
- name = "collection of leaves"
- desc = "Three leaves, designed to cover the nipples and genetalia of the wearer. A foe so proud will first the weaker seek."
- icon_state = "eve"
- body_parts_covered = CHEST|GROIN
-
-/obj/item/clothing/under/misc/skyrat/gear_harness/adam
- name = "leaf"
- desc = "A single leaf, designed to cover the genitalia of the wearer. Seek not temptation."
- icon_state = "adam"
- body_parts_covered = GROIN
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-
-/obj/item/clothing/under/misc/skyrat/taccas
- name = "tacticasual uniform"
- desc = "A white wifebeater on top of some cargo pants. For when you need to carry various beers."
- icon_state = "tac_s"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-/obj/item/clothing/under/misc/skyrat/mechanic
- name = "mechanic's overalls"
- desc = "An old-fashioned pair of brown overalls, along with assorted pockets and belt-loops."
- icon_state = "mechanic"
-
-/obj/item/clothing/under/misc/skyrat/utility
- name = "general utility uniform"
- desc = "A utility uniform worn by civilian-ranked crew."
- icon_state = "utility"
- body_parts_covered = CHEST|ARMS|GROIN|LEGS
- can_adjust = FALSE
-
-/obj/item/clothing/under/misc/skyrat/utility/syndicate
- armor_type = /datum/armor/clothing_under/utility_syndicate
- has_sensor = NO_SENSORS
-
-/datum/armor/clothing_under/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm b/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm
deleted file mode 100644
index ab2df116b1c..00000000000
--- a/modular_skyrat/master_files/code/modules/clothing/under/syndicate.dm
+++ /dev/null
@@ -1,139 +0,0 @@
-#define RESKIN_CHARCOAL "Charcoal"
-#define RESKIN_NT "NT Blue"
-#define RESKIN_SYNDIE "Syndicate Red"
-
-/obj/item/clothing/under/syndicate
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate_digi.dmi' // Anything that was in the syndicate.dmi, should be in the syndicate_digi.dmi
-
-/obj/item/clothing/under/syndicate/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi'
- //These are pre-set for ease and reference, as syndie under items SHOULDNT have sensors and should have similar stats; also its better to start with adjust = false
- has_sensor = NO_SENSORS
- can_adjust = FALSE
-
-//Related files:
-// modular_skyrat\modules\Syndie_edits\code\syndie_edits.dm (this has the Overalls and non-Uniforms)
-// modular_skyrat\modules\novaya_ert\code\uniform.dm (NRI uniform(s))
-
-/*
-* TACTICOOL
-*/
-
-//This is an overwrite, not a fully new item, but still fits best here.
-
-/obj/item/clothing/under/syndicate/tacticool //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available.
- name = "tacticool turtleneck"
- desc = "A snug turtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/syndicate.dmi' //Since its an overwrite it needs new icon linking. Woe.
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/syndicate.dmi'
- icon_state = "tactifool_blue"
- inhand_icon_state = "b_suit"
- can_adjust = TRUE
- has_sensor = HAS_SENSORS
- armor_type = /datum/armor/clothing_under/none
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- unique_reskin = list(
- RESKIN_NT = "tactifool_blue",
- RESKIN_CHARCOAL = "tactifool"
- )
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/under/syndicate/tacticool/reskin_obj(mob/M)
- ..()
- if(current_skin && current_skin == RESKIN_CHARCOAL)
- desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." //Default decription of the normal tacticool
- inhand_icon_state = "bl_suit" //May as well, while we're updating it
-
-/obj/item/clothing/under/syndicate/tacticool/skirt //Overwrites the 'fake' one. Zero armor, sensors, and default blue. More Balanced to make station-available.
- name = "tacticool skirtleneck"
- desc = "A snug skirtleneck, in fabulous Nanotrasen-blue. Just looking at it makes you want to buy a NT-certifed coffee, go into the office, and -work-."
- icon_state = "tactifool_blue_skirt"
- armor_type = /datum/armor/clothing_under/none
- body_parts_covered = CHEST|GROIN|ARMS
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- dying_key = DYE_REGISTRY_JUMPSKIRT
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- unique_reskin = list(
- RESKIN_NT = "tactifool_blue_skirt",
- RESKIN_CHARCOAL = "tactifool_skirt"
- )
-
-/obj/item/clothing/under/syndicate/bloodred/sleepytime/sensors //Halloween-only
- has_sensor = HAS_SENSORS
- armor_type = /datum/armor/clothing_under/none
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-/obj/item/clothing/under/syndicate/skyrat/baseball
- name = "syndicate baseball tee"
- desc = "Aaand the Syndicate Snakes are up to bat, ready for one of their signature nuclear home-runs! Lets show these corpos a good time." //NT pitches their plasma/bluespace(something)
- icon_state = "syndicate_baseball"
-
-/*
-* TACTICAL (Real)
-*/
-//The red alts, for BLATANTLY syndicate stuff (Like DS2)
-// (Multiple non-syndicate things use the base tactical turtleneck, they cant have it red nor reskinnable. OUR version, however, can be.)
-/obj/item/clothing/under/syndicate/skyrat/tactical
- name = "tactical turtleneck"
- desc = "A snug syndicate-red turtleneck with charcoal-black cargo pants. Good luck arguing allegiance with this on."
- icon_state = "syndicate_red"
- inhand_icon_state = "r_suit"
- can_adjust = TRUE
- alt_covers_chest = TRUE
- armor_type = /datum/armor/clothing_under/syndicate
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- unique_reskin = list(
- RESKIN_SYNDIE = "syndicate_red",
- RESKIN_CHARCOAL = "syndicate"
- )
-
-/obj/item/clothing/under/syndicate/skyrat/tactical/reskin_obj(mob/M)
- ..()
- if(current_skin && current_skin == RESKIN_CHARCOAL)
- desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." //(Digital camo? Brown? What?)
- inhand_icon_state = "bl_suit"
-
-/obj/item/clothing/under/syndicate/skyrat/tactical/skirt
- name = "tactical skirtleneck"
- desc = "A snug syndicate-red skirtleneck with a charcoal-black skirt. Good luck arguing allegiance with this on."
- icon_state = "syndicate_red_skirt"
- inhand_icon_state = "r_suit"
- female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
- dying_key = DYE_REGISTRY_JUMPSKIRT
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- unique_reskin = list(
- RESKIN_SYNDIE = "syndicate_red_skirt",
- RESKIN_CHARCOAL = "syndicate_skirt"
- )
-
-/obj/item/clothing/under/syndicate/skyrat/tactical/skirt/reskin_obj(mob/M)
- ..()
- if(current_skin && current_skin == RESKIN_CHARCOAL)
- desc = "A non-descript and slightly suspicious looking skirtleneck."
- inhand_icon_state = "bl_suit"
-
-/*
-* ENCLAVE
-*/
-/obj/item/clothing/under/syndicate/skyrat/enclave
- name = "neo-American sergeant uniform"
- desc = "Throughout the stars, rumors of mad scientists and angry drill sergeants run rampant; of creatures in armor black as night, being led by men or women wearing this uniform. They share one thing: a deep, natonalistic zeal of the dream of America."
- icon_state = "enclave"
- can_adjust = TRUE
- armor_type = /datum/armor/clothing_under/none
-
-/obj/item/clothing/under/syndicate/skyrat/enclave/officer
- name = "neo-American officer uniform"
- icon_state = "enclaveo"
-
-/obj/item/clothing/under/syndicate/skyrat/enclave/real
- armor_type = /datum/armor/clothing_under/syndicate
-
-/obj/item/clothing/under/syndicate/skyrat/enclave/real/officer
- name = "neo-American officer uniform"
- icon_state = "enclaveo"
-
-#undef RESKIN_CHARCOAL
-#undef RESKIN_NT
-#undef RESKIN_SYNDIE
diff --git a/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm b/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm
deleted file mode 100644
index dbb431e48a7..00000000000
--- a/modular_skyrat/master_files/code/modules/mining/equipment/explorer_gear.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/item/clothing/suit/hooded/cloak/drake
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi'
-
-/obj/item/clothing/suit/hooded/cloak/goliath
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi'
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/hooded/cloakhood/goliath
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
diff --git a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm b/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm
deleted file mode 100644
index d81b457549b..00000000000
--- a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm
+++ /dev/null
@@ -1,95 +0,0 @@
-// Smoke particle effect for heavy-duty cyborgs
-/datum/component/robot_smoke
-
-/datum/component/robot_smoke/RegisterWithParent()
- add_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke)
- RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(dir_change))
-
-/datum/component/robot_smoke/UnregisterFromParent()
- remove_verb(parent, /mob/living/silicon/robot/proc/toggle_smoke)
- UnregisterSignal(parent, COMSIG_ATOM_DIR_CHANGE)
-
-/datum/component/robot_smoke/Destroy()
- return ..()
-
-/datum/component/robot_smoke/proc/dir_change(datum/source, olddir, newdir)
- SIGNAL_HANDLER
-
- var/atom/movable/movable_parent = parent
-
- if(!movable_parent.particles)
- return
-
- var/truedir = movable_parent.dir
- if(newdir && (truedir != newdir))
- truedir = newdir
-
- switch(truedir)
- if(NORTH)
- movable_parent.particles.position = list(-6, 12, 0)
- movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2))
- if(EAST)
- movable_parent.particles.position = list(-6, 12, 0)
- movable_parent.particles.drift = generator("vector", list(0, 0.4), list(-0.8, 0.2))
- if(SOUTH)
- movable_parent.particles.position = list(5, 12, 0)
- movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.2, -0.2))
- if(WEST)
- movable_parent.particles.position = list(6, 12, 0)
- movable_parent.particles.drift = generator("vector", list(0, 0.4), list(0.8, -0.2))
-
-
-/mob/living/silicon/robot/proc/toggle_smoke()
- set name = "Toggle smoke"
- set category = "AI Commands"
-
- if(particles)
- dissipate()
- else if (!stat && !robot_resting)
- do_jitter_animation(10)
- playsound(src, 'modular_skyrat/master_files/sound/effects/robot_smoke.ogg', 50)
- particles = new /particles/smoke/robot()
-
-/mob/living/silicon/robot/proc/dissipate()
- particles.spawning = 0
- addtimer(CALLBACK(src, PROC_REF(particles_qdel)), 1.5 SECONDS)
-
-/mob/living/silicon/robot/proc/particles_qdel()
- QDEL_NULL(particles)
-
-/mob/living/silicon/robot/death()
- . = ..()
- if(GetComponent(/datum/component/robot_smoke))
- dissipate()
-
-/mob/living/silicon/robot/robot_lay_down()
- . = ..()
-
- if(GetComponent(/datum/component/robot_smoke))
- if(robot_resting)
- dissipate()
- else
- return
-
-// The smoke
-/particles/smoke/robot
- spawning = 0.4
- lifespan = 1 SECONDS
- fade = 0.75 SECONDS
- position = list(5, 12, 0)
- velocity = list(0, 0.2, 0)
- friction = 0.35
- scale = 0.5
- grow = 0.1
- spin = generator("num", -20, 20)
-
-// Another smoke effect
-/obj/effect/temp_visual/mook_dust/robot
- icon = 'modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi'
- icon_state = "impact_cloud"
- color = "#a9a9a93c"
-
-/obj/effect/temp_visual/mook_dust/robot/table
- color = "#ffffffc2"
- pixel_y = -8
- layer = ABOVE_MOB_LAYER
diff --git a/modular_skyrat/master_files/code/modules/mob/login.dm b/modular_skyrat/master_files/code/modules/mob/login.dm
deleted file mode 100644
index fbf57ccf0b5..00000000000
--- a/modular_skyrat/master_files/code/modules/mob/login.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/mob/Login()
- . = ..()
-
- if(!.)
- return FALSE
-
- if(SSplayer_ranks.initialized)
- SSplayer_ranks.update_prefs_unlock_content(client?.prefs)
-
- return TRUE
diff --git a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm b/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm
deleted file mode 100644
index b36b6d058ff..00000000000
--- a/modular_skyrat/master_files/code/modules/mod/mod_clothes.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-// MODsuit-related overrides for our digitigrade sprites and such
-/obj/item/clothing/head/mod
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/mod.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi'
-
-/obj/item/clothing/suit/mod
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/mod.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi'
-
-/obj/item/clothing/gloves/mod
- supports_variations_flags = NONE
- worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi'
-
-/obj/item/clothing/shoes/mod
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/mod.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod.dmi'
-
-/obj/item/mod/control
- worn_icon_better_vox = 'modular_skyrat/modules/better_vox/icons/clothing/mod_modules.dmi'
diff --git a/modular_skyrat/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/modular_skyrat/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
deleted file mode 100644
index 1fbfdedb519..00000000000
--- a/modular_skyrat/master_files/code/modules/modular_computers/file_system/programs/maintenance/camera.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-// Makes camera app readily available to crew
-/datum/computer_file/program/maintenance/camera
- available_on_ntnet = TRUE
- unique_copy = FALSE
diff --git a/modular_skyrat/master_files/code/modules/paperwork/stamps.dm b/modular_skyrat/master_files/code/modules/paperwork/stamps.dm
deleted file mode 100644
index 5424b648867..00000000000
--- a/modular_skyrat/master_files/code/modules/paperwork/stamps.dm
+++ /dev/null
@@ -1,82 +0,0 @@
-/obj/item/stamp/cat
- name = "\improper Official Cat Stamp"
- desc = "A rubber stamp for stamping documents of questionable importance."
- icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi'
- icon_state = "stamp-cat_blue"
- inhand_icon_state = "stamp"
-// Radial menu options
- var/static/cat_blue = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_blue")
- var/static/paw_blue = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_blue")
- var/static/cat_red = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_red")
- var/static/paw_red = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_red")
- var/static/cat_orange = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_orange")
- var/static/paw_orange = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_orange")
- var/static/cat_green = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_cat_green")
- var/static/paw_green = image(icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi', icon_state = "radial_paw_green")
-// Choices for the radial menu
- var/static/list/radial_options = list(
- "cat_blue" = cat_blue,
- "paw_blue" = paw_blue,
- "cat_red" = cat_red,
- "paw_red" = paw_red,
- "cat_orange" = cat_orange,
- "paw_orange" = paw_orange,
- "cat_green" = cat_green,
- "paw_green" = paw_green
- )
-
-/obj/item/stamp/cat/ui_interact(mob/user)
- . = ..()
- var/choice = show_radial_menu(user, src, radial_options)
- switch(choice)
- if("cat_blue")
- icon_state = "stamp-cat_blue"
- dye_color = DYE_HOP
- name = "\improper Official Cat Stamp"
- if("paw_blue")
- icon_state = "stamp-paw_blue"
- dye_color = DYE_HOP
- name = "\improper Paw Stamp"
-
- if("cat_red")
- icon_state = "stamp-cat_red"
- dye_color = DYE_HOS
- name = "\improper Official Cat Stamp"
- if("paw_red")
- icon_state = "stamp-paw_red"
- dye_color = DYE_HOS
- name = "\improper Paw Stamp"
-
- if("cat_orange")
- icon_state = "stamp-cat_orange"
- dye_color = DYE_QM
- name = "\improper Official Cat Stamp"
- if("paw_orange")
- icon_state = "stamp-paw_orange"
- dye_color = DYE_QM
- name = "\improper Paw Stamp"
-
- if("cat_green")
- icon_state = "stamp-cat_green"
- dye_color = DYE_CENTCOM
- name = "\improper Official Cat Stamp"
- if("paw_green")
- icon_state = "stamp-paw_green"
- dye_color = DYE_CENTCOM
- name = "\improper Paw Stamp"
-
- else
- return
-
-/obj/item/stamp/nri
- name = "\improper Novaya Rossiyskaya Imperia stamp"
- desc = "A rubber stamp for stamping important documents. Used in various NRI documents."
- icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi'
- icon_state = "stamp-nri"
- dye_color = DYE_CENTCOM
-
-/obj/item/stamp/solfed
- name = "\improper Solar Federation stamp"
- icon = 'modular_skyrat/master_files/icons/obj/bureaucracy.dmi'
- icon_state = "stamp-solfed"
- dye_color = DYE_CE
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm
deleted file mode 100644
index 2161b681105..00000000000
--- a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/_bow.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/gun/ballistic/bow
- item_flags = NEEDS_PERMIT
- trigger_guard = TRIGGER_GUARD_ALLOW_ALL
-
-/obj/item/gun/ballistic/bow/attack_self(mob/user)
- . = ..()
- if(chambered)
- playsound(src, 'modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0)
diff --git a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm b/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm
deleted file mode 100644
index bf80437b793..00000000000
--- a/modular_skyrat/master_files/code/modules/projectiles/guns/ballistic/bows/bow_types.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/gun/ballistic/bow/longbow
- worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi'
- slot_flags = ITEM_SLOT_BACK
- icon_state = "bow"
- inhand_icon_state = "bow"
- base_icon_state = "bow"
- worn_icon_state = "bow"
diff --git a/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi b/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi
deleted file mode 100644
index e70cce2ef57..00000000000
Binary files a/modular_skyrat/master_files/icons/hud/screen_cyborg.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/feet.dmi b/modular_skyrat/master_files/icons/mob/clothing/feet.dmi
deleted file mode 100644
index 88d930bae4d..00000000000
Binary files a/modular_skyrat/master_files/icons/mob/clothing/feet.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi
deleted file mode 100644
index 056216fca2b..00000000000
Binary files a/modular_skyrat/master_files/icons/mob/clothing/feet_digi.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi
deleted file mode 100644
index cbc54a934f5..00000000000
Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi b/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi
deleted file mode 100644
index 9a266a9476b..00000000000
Binary files a/modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi b/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi
deleted file mode 100644
index c7cd72757db..00000000000
Binary files a/modular_skyrat/master_files/icons/obj/clothing/shoes.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi b/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi
deleted file mode 100644
index 8126f117ef1..00000000000
Binary files a/modular_skyrat/master_files/icons/obj/clothing/suits/labcoat.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi b/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi
deleted file mode 100644
index 2624d4d3dfc..00000000000
Binary files a/modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi and /dev/null differ
diff --git a/modular_skyrat/master_files/readme.md b/modular_skyrat/master_files/readme.md
deleted file mode 100644
index d568ac2ce57..00000000000
--- a/modular_skyrat/master_files/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-This is the logging file for any master icon and sound files that we have.
-
-Please check this list before adding your own master file to see if it already exists. If it does exist then please put your icon in it.
-
-MASTER ICON FILES
-- /master_files/icons/emoji.dmi
-- /master_files/icons/mob/hud.dmi
-- /master_files/icons/obj/clothing/gloves.dmi
-- /master_files/icons/mob/clothing/hands.dmi
-- /master_files/icons/obj/trash_piles.dmi
-- /master_files/icons/mob/popup_flicks.dmi
-
-MASTER SOUND FILES
-- /master_files/sound/effects/heart_beat_loop3.ogg
-- /master_files/sound/effects/heart_beat_once.ogg
-
-MASTER CODE FILES
-- /master_files/code/modules/power/lighting.dm
-- /master_files/code/modules/clothing/non_anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NOT NEED ANTHRO VARIANTS.
-- /master_files/code/modules/clothing/anthro_clothes.dm > PLEASE USE THIS TO LOG ANY CLOTHES THAT DO NEED ANTHRO VARIANTS.
-- /master_files/code/datums/traits/neutral.dm > USE THIS FOR ANY NEUTRAL TRAITS
-- /master_files/code/datums/traits/negative.dm > USE THIS FOR ANY NEGATIVE TRAITS
-- /master_files/code/datums/traits/good.dm > USE THIS FOR ANY GOOD TRAITS
-- /master_files/code/game/objects/structures/trash_pile.dm
-- /master_files/code/modules/mob/living/carbon/carbon_say.dm
-- /master_files/code/modules/mob/living/emote_popup.dm
-- /master_files/code/game/machinery/doors/firedoor.dm
-- /master_files/code/modules/jobs/job_types/cyborg.dm
-- /master_files/code/modules/antagonists/_common/antag_datum.dm
-
-MASTER GLOBAL VARS
-- modular_skyrat/master_files/code/_globalvars/configuration.dm > GLOBAL_VAR_INIT(looc_allowed, TRUE)
-
diff --git a/modular_skyrat/modules/GAGS/greyscale_configs.dm b/modular_skyrat/modules/GAGS/greyscale_configs.dm
deleted file mode 100644
index 21d423040ed..00000000000
--- a/modular_skyrat/modules/GAGS/greyscale_configs.dm
+++ /dev/null
@@ -1,1484 +0,0 @@
-/*
-* HEAD
-*/
-
-// BERETS
-/datum/greyscale_config/beret
- name = "Beret"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret.json'
-
-/datum/greyscale_config/beret/worn
- name = "Beret (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_worn.json'
-
-/datum/greyscale_config/beret/worn/vox
- name = "Beret (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi'
-
-/datum/greyscale_config/beret/worn/teshari
- name = "Beret (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi'
-
-/datum/greyscale_config/beret_badge
- name = "Badged Beret"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge.json'
-
-/datum/greyscale_config/beret_badge/worn
- name = "Badged Beret (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_worn.json'
-
-/datum/greyscale_config/beret_badge/worn/vox
- name = "Badged Beret (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi'
-
-/datum/greyscale_config/beret_badge/worn/teshari
- name = "Badged Beret (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi'
-
-/datum/greyscale_config/beret_badge_fancy
- name = "Beret With Fancy Badge"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy.json'
-
-/datum/greyscale_config/beret_badge_fancy/worn
- name = "Beret With Fancy Badge (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/beret/beret_badge_fancy_worn.json'
-
-/datum/greyscale_config/beret_badge_fancy/worn/vox
- name = "Beret With Fancy Badge (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_vox.dmi'
-
-/datum/greyscale_config/beret_badge_fancy/worn/teshari
- name = "Beret With Fancy Badge (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/beret_teshari.dmi'
-
-
-//COWBOY
-/datum/greyscale_config/cowboy_wide
- name = "Wide Brimmed Hat"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
-
-/datum/greyscale_config/cowboy_wide/worn
- name = "Wide Brimmed Hat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-/datum/greyscale_config/cowboy_wide_feathered
- name = "Wide Brimmed Feathered Hat"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json'
-
-/datum/greyscale_config/cowboy_wide_feathered/worn
- name = "Wide Brimmed Feathered Hat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-/datum/greyscale_config/cowboy_flat
- name = "Flat Brimmed Hat"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
-
-/datum/greyscale_config/cowboy_flat/worn
- name = "Flat Brimmed Hat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-/datum/greyscale_config/cowboy_flat_cowl
- name = "Flat Brimmed Hat with Cowl"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/three_layer_hats.json'
-
-/datum/greyscale_config/cowboy_flat_cowl/worn
- name = "Flat Brimmed Hat with Cowl (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-/datum/greyscale_config/cowboy_cattleman
- name = "Cattleman Hat"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
-
-/datum/greyscale_config/cowboy_cattleman/worn
- name = "Cattleman Hat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-/datum/greyscale_config/cowboy_cattleman_wide
- name = "Wide Brimmed Cattleman Hat"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/head/cowboy.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/cowboy/two_layer_hats.json'
-
-/datum/greyscale_config/cowboy_cattleman_wide/worn
- name = "Wide Brimmed Cattleman Hat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/cowboy.dmi'
-
-//MUSHROOM CAP
-
-/datum/greyscale_config/mushcap
- name = "Mushroom Cap"
- icon_file = 'modular_skyrat/modules/GAGS/icons/mushcap.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap.json'
-
-/datum/greyscale_config/mushcap/worn
- name = "Mushroom Cap Worn"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/mush_cap/mushcap_worn.json'
-
-// FLATCAP
-
-/datum/greyscale_config/flatcap
- name = "Flat Cap"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap.json'
-
-/datum/greyscale_config/flatcap/worn
- name = "Flat Cap (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flatcap/flatcap_worn.json'
-
-// FLOWER PIN
-
-/datum/greyscale_config/flowerpin
- name = "Flower Pin"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin.json'
-
-/datum/greyscale_config/flowerpin/worn
- name = "Flower Pin (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hats.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flowerpin/flowerpin_worn.json'
-
-// Hood
-
-/datum/greyscale_config/standalone_hood
- name = "Hood"
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/head.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/hood/hood.json'
-
-/datum/greyscale_config/standalone_hood/worn
- name = "Hood (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/hood/hood_worn.json'
-
-/datum/greyscale_config/standalone_hood/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi'
-
-/datum/greyscale_config/standalone_hood/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_newvox.dmi'
-
-/datum/greyscale_config/standalone_hood/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/head_oldvox.dmi'
-
-// CATEAR HEADPHONES
-
-/datum/greyscale_config/catear_headphone
- name = "Cat-ear Headphones"
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone.json'
-
-/datum/greyscale_config/catear_headphone/worn
- name = "Cat-ear Headphones (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn.json'
-
-/datum/greyscale_config/catear_headphone_inhand_left
- name = "Cat-ear Headphones (Inhand Left)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_left.json'
-
-/datum/greyscale_config/catear_headphone_inhand_right
- name = "Cat-ear Headphones (Inhand Right)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/head/catear_headphone_inhand.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/catear_headphone/catear_headphone_worn_inhand_right.json'
-
-//BOWS
-/datum/greyscale_config/large_bow
- name = "Large Bow"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/large_bow.json'
-
-/datum/greyscale_config/large_bow/worn
- name = "Large Bow (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi'
-
-/datum/greyscale_config/back_bow
- name = "Back Bow"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/back_bow.json'
-
-/datum/greyscale_config/back_bow/worn
- name = "Back Bow (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi'
-
-/datum/greyscale_config/sweet_bow
- name = "Sweet Bow"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/sweet_bow.json'
-
-/datum/greyscale_config/sweet_bow/worn
- name = "Sweet Bow (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi'
-
-/datum/greyscale_config/small_bow
- name = "Small Bow"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/head/small_bow.json'
-
-/datum/greyscale_config/small_bow/worn
- name = "Small Bow (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/bow_worn.dmi'
-
-/*
-* MASKS
-*/
-
-// CLOWN
-/datum/greyscale_config/clown_mask
- name = "Colourable Clown Mask"
- icon_file = 'modular_skyrat/modules/GAGS/icons/clown_mask.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask.json'
-
-/datum/greyscale_config/clown_mask/worn
- name = "Colourable Clown Mask (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/clown_mask/clown_mask_worn.json'
-
-// VAPE
-/datum/greyscale_config/vape/worn/muzzled
- name = "Vape (Worn, Muzzled)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
-
-// RESPIRATOR
-/datum/greyscale_config/respirator
- name = "Colourable Respirator"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/respirator/respirator.json'
-
-/datum/greyscale_config/respirator/worn
- name = "Colourable Respirator (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/respirator/respirator_worn.json'
-
-/datum/greyscale_config/respirator/worn/snouted
- name = "Colourable Respirator (Worn) (Snouted)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_snout.dmi'
-
-/datum/greyscale_config/respirator/worn/better_vox
- name = "Colourable Respirator (Worn) (Vox Primalis)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi'
-
-/datum/greyscale_config/respirator/worn/vox
- name = "Colourable Respirator (Worn) (Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox.dmi'
-
-/datum/greyscale_config/respirator/worn/teshari
- name = "Colourable Respirator (Worn) (Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_teshari.dmi'
-
-// STERILE
-/datum/greyscale_config/sterile_mask
- name = "Colourable Sterile Mask"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile.json'
-
-/datum/greyscale_config/sterile_mask/worn
- name = "Colourable Sterile Mask (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sterile_mask/sterile_worn.json'
-
-/datum/greyscale_config/sterile_mask/worn/snouted
- name = "Colourable Sterile Mask (Worn) (Snouted)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_snout.dmi'
-
-/datum/greyscale_config/sterile_mask/worn/better_vox
- name = "Colourable Sterile Mask (Worn) (Vox Primalis)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox_better.dmi'
-
-/datum/greyscale_config/sterile_mask/worn/vox
- name = "Colourable Sterile Mask (Worn) (Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_vox.dmi'
-
-/datum/greyscale_config/sterile_mask/worn/teshari
- name = "Colourable Sterile Mask (Worn) (Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/masks_teshari.dmi'
-
-/*
-* NECK
-*/
-
-// RANGER PONCHO
-/datum/greyscale_config/ranger_poncho
- name = "Ranger Poncho"
- icon_file = 'modular_skyrat/modules/GAGS/icons/ranger_poncho.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho.json'
-
-/datum/greyscale_config/ranger_poncho/worn
- name = "Ranger Poncho Worn"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/ranger_poncho/ranger_poncho_worn.json'
-
-/datum/greyscale_config/ranger_poncho/worn/teshari
- name = "Ranger Poncho (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/ranger_poncho_teshari.dmi'
-
-// CLOAKS
-/datum/greyscale_config/cloak
- name = "Cloak"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cloak.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/cloak.json'
-
-/datum/greyscale_config/cloak/worn
- name = "Cloak (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/cloak_worn.json'
-
-/datum/greyscale_config/cloak/veil
- name = "Veil"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/veil.json'
-
-/datum/greyscale_config/cloak/veil/worn
- name = "Veil (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/veil_worn.json'
-
-/datum/greyscale_config/cloak/boat
- name = "Boatcloak"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/boat.json'
-
-/datum/greyscale_config/cloak/boat/worn
- name = "Boatcloak (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/boat_worn.json'
-
-/datum/greyscale_config/cloak/shroud
- name = "Shroud"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/shroud.json'
-
-/datum/greyscale_config/cloak/shroud/worn
- name = "Shroud (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/shroud_worn.json'
-
-// Mantle
-
-/datum/greyscale_config/mantle
- name = "Mantle"
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle.json'
-
-/datum/greyscale_config/mantle/worn
- name = "Mantle (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/mantle/mantle_worn.json'
-
-/datum/greyscale_config/mantle/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi'
-
-/datum/greyscale_config/mantle/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_newvox.dmi'
-
-/datum/greyscale_config/mantle/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/neck_oldvox.dmi'
-
-//CAPES
-
-/datum/greyscale_config/robe_cape
- name = "Robe Cape"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/robe_cape.json'
-
-/datum/greyscale_config/robe_cape/worn
- name = "Robe Cape (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi'
-
-/datum/greyscale_config/long_cape
- name = "Long Cape"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/long_cape.json'
-
-/datum/greyscale_config/long_cape/worn
- name = "Long Cape (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi'
-
-/datum/greyscale_config/wide_cape
- name = "Wide Cape"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cloak/wide_cape.json'
-
-/datum/greyscale_config/wide_cape/worn
- name = "Wide Cape (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/cape_worn.dmi'
-
-// COLLARS
-
-/datum/greyscale_config/collar
- name = "Collar"
- icon_file = 'modular_skyrat/modules/GAGS/icons/collar.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell.json'
-
-// Bell
-/datum/greyscale_config/collar/bell
- name = "Bell Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell.json'
-
-/datum/greyscale_config/collar/bell/worn
- name = "Bell Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/bell_worn.json'
-
-// Choker
-/datum/greyscale_config/collar/choker
- name = "Choker"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/choker.json'
-
-/datum/greyscale_config/collar/choker/worn
- name = "Choker (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/choker_worn.json'
-
-// Thin Choker
-/datum/greyscale_config/collar/thinchoker
- name = "Thin Choker"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/thinchoker.json'
-
-/datum/greyscale_config/collar/thinchoker/worn
- name = "Thin Choker (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/thinchoker_worn.json'
-
-// Cow
-/datum/greyscale_config/collar/cow
- name = "Cowbell Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cow.json'
-
-/datum/greyscale_config/collar/cow/worn
- name = "Cowbell Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cow_worn.json'
-
-// Cross
-/datum/greyscale_config/collar/cross
- name = "Cross Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cross.json'
-
-/datum/greyscale_config/collar/cross/worn
- name = "Cross Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/cross_worn.json'
-
-// Holo
-/datum/greyscale_config/collar/holo
- name = "Holo Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/holo.json'
-
-/datum/greyscale_config/collar/holo/worn
- name = "Holo Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/holo_worn.json'
-
-// Leather
-/datum/greyscale_config/collar/leather
- name = "Leather Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/leather.json'
-
-/datum/greyscale_config/collar/leather/worn
- name = "Leather Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/leather_worn.json'
-
-// Pet
-/datum/greyscale_config/collar/pet
- name = "Pet Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/pet.json'
-
-/datum/greyscale_config/collar/pet/worn
- name = "Pet Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/pet_worn.json'
-
-// Spiked
-/datum/greyscale_config/collar/spike
- name = "Spiked Collar"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/spike.json'
-
-/datum/greyscale_config/collar/spike/worn
- name = "Spiked Collar (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/collar/spike_worn.json'
-
-//FACE SCARF
-/datum/greyscale_config/face_scarf
- name = "Face Scarf"
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/neck/face_scarf.json'
-
-/datum/greyscale_config/face_scarf/worn
- name = "Face Scarf (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn.dmi'
-
-/datum/greyscale_config/face_scarf/worn/muzzled
- name = "Face Scarf (Worn, Muzzled)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/neck/face_scarf/face_scarf_worn_muzzled.dmi'
-
-/*
-* SUITS
-*/
-
-// Apron
-
-/datum/greyscale_config/apron
- name = "Apron"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/apron/apron.json'
-
-/datum/greyscale_config/apron/worn
- name = "Apron (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/apron/apron_worn.json'
-
-/datum/greyscale_config/apron/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi'
-
-/datum/greyscale_config/apron/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi'
-
-/datum/greyscale_config/apron/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi'
-
-//Flannel Shirt
-
-/datum/greyscale_config/flannelgags
- name = "Flannel Shirt"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flannel/flannel.json'
-
-/datum/greyscale_config/flannelgags/worn
- name = "Flannel Shirt (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/flannel/flannel_worn.json'
-
-
-// ARMOR
-
-/datum/greyscale_config/heck_suit/worn/digi
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor_digi.dmi'
-
-//Helmet pairs with the above suit
-/datum/greyscale_config/heck_helmet/worn/snouted
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet_muzzled.dmi'
-
-// Bathrobes
-
-/datum/greyscale_config/bathrobe
- name = "Bathrobe"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe.json'
-
-/datum/greyscale_config/bathrobe/worn
- name = "Bathrobe (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/bathrobe/bathrobe_worn.json'
-
-/datum/greyscale_config/bathrobe/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi'
-
-/datum/greyscale_config/bathrobe/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_newvox.dmi'
-
-/datum/greyscale_config/bathrobe/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit_oldvox.dmi'
-
-// FANCY SUITS
-/datum/greyscale_config/fancy_suit
- name = "Fancy Suit"
- icon_file = 'modular_skyrat/modules/GAGS/icons/fancy_suits.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit.json'
-
-/datum/greyscale_config/fancy_suit/worn
- name = "Fancy Suit (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/fancy_suit_worn.json'
-
-/datum/greyscale_config/recolorable_suit
- name = "Formal Suit"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json'
-
-/datum/greyscale_config/recolorable_suit/worn
- name = "Formal Suit (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi'
-
-/datum/greyscale_config/recolorable_suit/worn/digi
- name = "Formal Suit (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi'
-
-/datum/greyscale_config/recolorable_suitskirt
- name = "Formal Suitskirt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/suits.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/fancy_suits/recolorable_suit.json'
-
-/datum/greyscale_config/recolorable_suitskirt/worn
- name = "Formal Suitskirt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits.dmi'
-
-/datum/greyscale_config/recolorable_suitskirt/worn/digi
- name = "Formal Suitskirt (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/suits_digi.dmi'
-
-// HOODIES
-/datum/greyscale_config/hoodie
- name = "Hoodie"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie.json'
-
-/datum/greyscale_config/hoodie/worn
- name = "Hoodie Worn"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_worn.json'
-
-/datum/greyscale_config/hoodie_trim
- name = "Trimmed Hoodie"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim.json'
-
-/datum/greyscale_config/hoodie_trim/worn
- name = "Trimmed Hoodie Worn"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_trim_worn.json'
-
-/datum/greyscale_config/hoodie_branded
- name = "Branded Hoodie"
- icon_file = 'modular_skyrat/modules/GAGS/icons/hoodie.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded.json'
-
-/datum/greyscale_config/hoodie_branded/worn
- name = "Branded Hoodie Worn"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/hoodie/hoodie_branded_worn.json'
-
-// CARDIGAN
-
-/datum/greyscale_config/cardigan
- name = "Cardigan"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan.json'
-
-/datum/greyscale_config/cardigan/worn
- name = "Cardigan (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/cardigan/cardigan_worn.json'
-
-// SWEATERS
-
-/datum/greyscale_config/cableknit_sweater
- name = "Cableknit Sweater"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sweaters.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/sweater.json'
-
-/datum/greyscale_config/cableknit_sweater/worn
- name = "Cableknit Sweater (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/sweater_worn.json'
-
-/datum/greyscale_config/warm_sweater
- name = "Warm Sweater"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/warm_sweater.json'
-
-/datum/greyscale_config/warm_sweater/worn
- name = "Warm Sweater (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi'
-
-/datum/greyscale_config/heart_sweater
- name = "Heart Sweater"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/sweater/heart_sweater.json'
-
-/datum/greyscale_config/heart_sweater/worn
- name = "Heart Sweater (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_sweater_worn.dmi'
-
-//Keyhole uses the same configs!
-
-// OVERALLS
-
-/datum/greyscale_config/overalls/worn/digi
- name = "Overalls (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi'
-
-/datum/greyscale_config/overalls/worn/vox
- name = "Overalls (Worn, Vox)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi'
-
-/datum/greyscale_config/overalls/worn/better_vox
- name = "Overalls (Worn, Better Vox)"
- icon_file = 'modular_skyrat/modules/better_vox/icons/clothing/suit.dmi'
-
-// URBAN COAT
-
-/datum/greyscale_config/urban_coat
- name = "Urban Coat"
- icon_file = 'modular_skyrat/modules/GAGS/icons/urban_coat.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat.json'
-
-/datum/greyscale_config/urban_coat/worn
- name = "Urban Coat (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/urban_coat/urban_coat_worn.json'
-
-// WINTER COAT
-
-/datum/greyscale_config/winter_coat
- name = "Winter Coat"
- icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/suits.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat.json'
-
-/datum/greyscale_config/winter_coat_worn
- name = "Winter Coat (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_coat_worn.json'
-
-/datum/greyscale_config/winter_hood
- name = "Winter Coat Hood"
- icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/hats.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/winter_hood.json'
-
-/datum/greyscale_config/winter_hood/worn
- name = "Winter Coat Hood (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/head.dmi'
-
-/datum/greyscale_config/warm_coat
- name = "Warm Coat"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_coat.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/winter_coat/warm_coat.json'
-
-/datum/greyscale_config/warm_coat/worn
- name = "Warm Coat (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/warm_coat_worn.dmi'
-
-// LEATHER JACKET
-
-/datum/greyscale_config/leather_jacket
- name = "Leather Jacket"
- icon_file = 'modular_skyrat/modules/GAGS/icons/leather_jacket.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket.json'
-
-/datum/greyscale_config/leather_jacket/worn
- name = "Leather Jacket (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/leather_jacket/leather_jacket_worn.json'
-
-// DUSTER
-
-/datum/greyscale_config/duster
- name = "Duster"
- icon_file = 'modular_skyrat/modules/GAGS/icons/duster.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/duster/duster.json'
-
-/datum/greyscale_config/duster/worn
- name = "Duster (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/duster/duster_worn.json'
-
-// PEACOAT
-
-/datum/greyscale_config/peacoat
- name = "Peacoat"
- icon_file = 'modular_skyrat/modules/GAGS/icons/peacoat.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat.json'
-
-/datum/greyscale_config/peacoat/worn
- name = "Peacoat (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/peacoat/peacoat_worn.json'
-
-
-// VARSITY JACKET
-
-/datum/greyscale_config/varsity
- name = "Varsity Jacket"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity.json'
-
-/datum/greyscale_config/varsity/worn
- name = "Varsity Jacket (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/varsity/varsity_worn.json'
-
-// TAILORED JACKET
-
-/datum/greyscale_config/tailored_jacket
- name = "Tailored Jacket"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket.json'
-
-/datum/greyscale_config/tailored_jacket/worn
- name = "Tailored Jacket (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_jacket/tailored_jacket_worn.json'
-
-/datum/greyscale_config/tailored_short_jacket
- name = "Tailored Short Jacket"
- icon_file = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket.json'
-
-/datum/greyscale_config/tailored_short_jacket/worn
- name = "Tailored Short Jacket (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json'
-
-
-/*
-* UNDER
-*/
-
-
-// JUMPSUITS
-
-/datum/greyscale_config/jumpsuit/worn/digi
- name = "Jumpsuit (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi'
-
-/datum/greyscale_config/jumpsuit/prison/worn/digi
- name = "Prison Jumpsuit (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/color_digi.dmi'
-
-/datum/greyscale_config/jumpsuit/worn/monkey
- name = "Jumpsuit (Worn) - Monkey"
- icon_file = MONKEY_UNIFORM_FILE
- json_config = 'modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_worn_monkey.json'
-
-/datum/greyscale_config/jumpsuit/prison/worn/monkey
- name = "Prison Jumpsuit (Worn) - Monkey"
- icon_file = MONKEY_UNIFORM_FILE
- json_config = 'modular_skyrat/modules/GAGS/json_configs/jumpsuit/jumpsuit_prison_worn_monkey.json'
-
-/datum/greyscale_config/jumpsuit/worn/vox
- name = "Jumpsuit (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi'
-
-/datum/greyscale_config/jumpsuit/prison/worn/vox
- name = "Prison Jumpsuit (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_vox.dmi'
-
-/datum/greyscale_config/jumpsuit/worn/better_vox
- name = "Jumpsuit (Worn, Better Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi'
-
-/datum/greyscale_config/jumpsuit/prison/worn/better_vox
- name = "Prison Jumpsuit (Worn, Better Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi'
-
-/datum/greyscale_config/jumpsuit/worn/taur_snake
- name = "Jumpsuit (Worn) - Naga"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi'
-
-/datum/greyscale_config/jumpsuit/prison/worn/taur_snake
- name = "Prison Jumpsuit (Worn) - Naga"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_snake.dmi'
-
-/datum/greyscale_config/jumpsuit/worn/teshari
- name = "Jumpsuit (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi'
-
-/datum/greyscale_config/jumpsuit/prison/worn/teshari
- name = "Prison Jumpsuit (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/jumpsuit_teshari.dmi'
-
-// PANTS / SHORTS
-//Note, these icons are now in master_files per TG's sorting. There's no reason to NOT have these pieces in master files now that they're sorted out.
-//The rest will eventually join them - preferably with a cleaner method too instead of having to have unique configs for every single item's digi state.
-
-/datum/greyscale_config/slacks/worn/digi
- name = "Slacks (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/jeans/worn/digi
- name = "Jeans (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/shorts/worn/digi
- name = "Shorts (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/jeanshorts/worn/digi
- name = "Jean Shorts (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/shortershorts
- name = "Shorter Shorts"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shorts_pants.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shortershorts.json'
-
-/datum/greyscale_config/shortershorts/worn
- name = "Shorter Shorts (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shorts_pants.dmi'
-
-/datum/greyscale_config/shortershorts/worn/digi
- name = "Ripped Shorts (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/shorts_ripped
- name = "Ripped Shorts"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/shorts_ripped.json'
-
-/datum/greyscale_config/shorts_ripped/worn //TG will hopefully start having worn as a subtype, it means only needing 1 .json
- name = "Ripped Shorts (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
-
-/datum/greyscale_config/shorts_ripped/worn/digi
- name = "Ripped Shorts (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/shorts_ripped/worn/teshari
- name = "Ripped Shorts (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/teshari_uniform.dmi'
-
-/datum/greyscale_config/jeans_ripped
- name = "Ripped Jeans"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jeans_ripped.json'
-
-/datum/greyscale_config/jeans_ripped/worn
- name = "Ripped Jeans (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
-
-/datum/greyscale_config/jeans_ripped/worn/digi
- name = "Ripped Jeans (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/yoga_pants
- name = "Yoga Pants"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/yoga_pants.json'
-
-/datum/greyscale_config/yoga_pants/worn
- name = "Yoga Pants (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
-
-/datum/greyscale_config/yoga_pants/worn/digi
- name = "Yoga Pants (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-// DRESSES / SKIRTS
-
-/datum/greyscale_config/plaidskirt/worn/digi
- name = "Plaid Skirt (Worn, Digi)"
- icon_file = SKIRTS_DRESSES_DIGIFILE
-
-/datum/greyscale_config/lone_skirt
- name = "Skirt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/lone_skirt.json'
-
-/datum/greyscale_config/lone_skirt/worn
- name = "Skirt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/turtleskirt_knit
- name = "Cableknit Skirtleneck"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/turtleskirt_knit.json'
-
-/datum/greyscale_config/turtleskirt_knit/worn
- name = "Cableknit Skirtleneck (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/jean_skirt
- name = "Jean Skirt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/jean_skirt.json'
-
-/datum/greyscale_config/jean_skirt/worn
- name = "Jean Skirt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/jean_skirt/worn/digi
- name = "Jean Skirt (Worn, Digi)"
- icon_file = SKIRTS_DRESSES_DIGIFILE
-
-/datum/greyscale_config/short_dress
- name = "Short Dress"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/short_dress.json'
-
-/datum/greyscale_config/short_dress/worn
- name = "Short Dress (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/strapless_dress
- name = "Strapless Dress"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/strapless_dress.json'
-
-/datum/greyscale_config/strapless_dress/worn
- name = "Strapless Dress (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/pentagram_dress
- name = "Pentagram Strapped Dress"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/pentagram_dress.json'
-
-/datum/greyscale_config/pentagram_dress/worn
- name = "Pentagram Strapped Dress (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/plaidskirt/worn/teshari
- name = "Plaid Skirt (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/dressteshari.dmi'
-
-/datum/greyscale_config/sundress/worn/teshari
- name = "Sundress (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/dressteshari.dmi'
-
-/datum/greyscale_config/medium_skirt
- name = "Medium Skirt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/medium_skirt.json'
-
-/datum/greyscale_config/medium_skirt/worn
- name = "Medium Skirt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-/datum/greyscale_config/long_skirt
- name = "Long Skirt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/pants_shorts_skirts_dresses/long_skirt.json'
-
-/datum/greyscale_config/long_skirt/worn
- name = "Long Skirt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi'
-
-// KILT
-// COSTUMES
-
-/datum/greyscale_config/buttondown_slacks/worn/digi
- name = "Buttondown with Slacks (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/buttondown_shorts/worn/digi
- name = "Buttondown with Shorts (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/football_suit/worn/digi
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
-
-/datum/greyscale_config/qipao
- name = "Qipao"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json'
-
-/datum/greyscale_config/qipao/worn
- name = "Qipao (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
-
-/datum/greyscale_config/qipao/worn/digi
- name = "Qipao (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
-
-/datum/greyscale_config/cheongsam
- name = "Cheongsam"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json'
-
-/datum/greyscale_config/cheongsam/worn
- name = "Cheongsam (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
-
-/datum/greyscale_config/cheongsam/worn/digi
- name = "Cheongsam (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
-
-/datum/greyscale_config/yukata
- name = "Yukata"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/lunar_japanese.json'
-
-/datum/greyscale_config/yukata/worn
- name = "Yukata (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
-
-/datum/greyscale_config/yukata/worn/digi
- name = "Yukata (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
-
-/datum/greyscale_config/kilt
- name = "Kilt"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/kilt/kilt.json'
-
-/datum/greyscale_config/kilt/worn
- name = "Kilt (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
-
-/datum/greyscale_config/kilt/worn/digi
- name = "Kilt (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-/datum/greyscale_config/buttondown_vicvest
- name = "Buttondown with Double-breasted Vest"
- icon_file = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/buttondown_vicvest.json'
-
-/datum/greyscale_config/buttondown_vicvest/worn
- name = "Buttondown with Double-breasted Vest (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
-
-/datum/greyscale_config/buttondown_vicvest/worn/digi
- name = "Buttondown with Double-breasted Vest (Worn, Digi)"
- icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE
-
-//GRAYSCALE MAID COSTUME
-
-/datum/greyscale_config/maid_neck_cover
- name = "Maid Neck Cover"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_neck_cover.json'
-
-/datum/greyscale_config/maid_neck_cover/worn
- name = "Maid Neck Cover (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi'
-
-/datum/greyscale_config/maid_arm_covers
- name = "Maid Arm Covers"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_arm_covers.json'
-
-/datum/greyscale_config/maid_arm_covers/worn
- name = "Maid Arm Covers (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi'
-
-/datum/greyscale_config/maid_costume
- name = "Maid Costume"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_costume.json'
-
-/datum/greyscale_config/maid_costume/worn
- name = "Maid Costume (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi'
-
-/datum/greyscale_config/maid_headband
- name = "Maid Headband"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/costumes/maid_headband.json'
-
-/datum/greyscale_config/maid_headband/worn
- name = "Maid Headband (Worn)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/maid_costume_worn.dmi'
-
-/*
-TREK
-*/
-
-/datum/greyscale_config/trek/worn/digi
- name = "Trek Uniform (Worn, Digi)"
- icon_file = 'modular_skyrat/master_files/icons/mob/clothing/under/trek_digi.dmi'
-
-/*
-* SHOES
-*/
-
-// SNEAKERS
-
-/datum/greyscale_config/sneakers/worn/digi
- name = "Sneakers (Worn, Digi)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi'
-
-/datum/greyscale_config/sneakers_orange/worn/digi
- name = "Orange Sneakers (Worn, Digi)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_digi.dmi'
-
-/datum/greyscale_config/sneakers/worn/vox
- name = "Sneakers (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi'
-
-/datum/greyscale_config/sneakers_orange/worn/vox
- name = "Orange Sneakers (Worn, Vox)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_vox.dmi'
-
-/datum/greyscale_config/sneakers/worn/teshari
- name = "Sneakers (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi'
-digi
-/datum/greyscale_config/sneakers_orange/worn/teshari
- name = "Orange Sneakers (Worn, Teshari)"
- icon_file = 'modular_skyrat/modules/GAGS/icons/sneakers_teshari.dmi'
-
-// Boots
-
-/datum/greyscale_config/boots
- name = "Colorable Boots"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots.json'
-
-/datum/greyscale_config/boots/worn
- name = "Colorable Boots (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/boots/boots_worn.json'
-
-/datum/greyscale_config/boots/worn/digi
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi'
-
-/datum/greyscale_config/boots/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
-
-/datum/greyscale_config/boots/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi'
-
-/datum/greyscale_config/boots/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
-
-// Laceups
-
-/datum/greyscale_config/laceup
- name = "Colorable Laceups"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups.json'
-
-/datum/greyscale_config/laceup/worn
- name = "Colorable Laceups (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/laceups/laceups_worn.json'
-
-/datum/greyscale_config/laceup/worn/digi
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi'
-
-/datum/greyscale_config/laceup/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
-
-/datum/greyscale_config/laceup/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi'
-
-/datum/greyscale_config/laceup/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
-
-// Sandals
-
-/datum/greyscale_config/sandals
- name = "Colorable Sandals"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals.json'
-
-/datum/greyscale_config/sandals/worn
- name = "Colorable Sandals (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/sandals/sandals_worn.json'
-
-/datum/greyscale_config/sandals/worn/digi
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_digi.dmi'
-
-/datum/greyscale_config/sandals/worn/teshari
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
-
-/datum/greyscale_config/sandals/worn/newvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_newvox.dmi'
-
-/datum/greyscale_config/sandals/worn/oldvox
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_oldvox.dmi'
-
-// WRAPS
-
-/datum/greyscale_config/clothwraps
- name = "Cloth Wraps"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/wraps.json'
-
-/datum/greyscale_config/clothwraps/worn
- name = "Cloth Wraps (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/wraps_worn.json'
-
-/datum/greyscale_config/clothwraps/worn/digi
- name = "Cloth Wraps (Worn, Digi)"
-
-/datum/greyscale_config/legwraps
- name = "Leg Wraps"
- icon_file = 'modular_skyrat/modules/GAGS/icons/shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps.json'
-
-/datum/greyscale_config/legwraps/worn
- name = "Leg Wraps (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn.json'
-
-/datum/greyscale_config/legwraps/worn/digi
- name = "Leg Wraps (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wraps/legwraps_worn_digi.json'
-
-/datum/greyscale_config/armwraps
- name = "Cloth Arm Wraps"
- icon_file = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps.json'
-
-/datum/greyscale_config/armwraps/worn
- name = "Cloth Arm Wraps (Worn)"
- icon_file = 'modular_skyrat/master_files/icons/donator/mob/clothing/hands.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/arm_wraps/arm_wraps_worn.json'
-
-// MISC SHOES
-
-/datum/greyscale_config/heels
- name = "High Heels"
- icon_file = 'modular_skyrat/modules/GAGS/icons/heels.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels.json'
-
-/datum/greyscale_config/heels/worn
- name = "High Heels (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn.json'
-
-/datum/greyscale_config/heels/worn/digi
- name = "High Heels (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/heels/heels_worn_digi.json'
-
-/datum/greyscale_config/fancyheels
- name = "Fancy Heels"
- icon_file = 'modular_skyrat/modules/GAGS/icons/fancyheels.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels.json'
-
-/datum/greyscale_config/fancyheels/worn
- name = "Fancy Heels (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn.json'
-
-/datum/greyscale_config/fancyheels/worn/digi
- name = "Fancy Heels (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/shoes/fancyheels/fancyheels_worn_digi.json'
-
-// TESHARI FALLBACKS.
-
-/datum/greyscale_config/teshari
- name = "Teshari Clothing"
- icon_file = 'modular_skyrat/modules/GAGS/icons/teshari_fallbacks.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json'
-
-/datum/greyscale_config/teshari/under
- name = "Teshari Under"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under.json'
-
-/datum/greyscale_config/teshari/under_skirt
- name = "Teshari Skirt"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/under_skirt.json'
-
-/datum/greyscale_config/teshari/shoes
- name = "Teshari Shoes"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/shoes.json'
-
-/datum/greyscale_config/teshari/gloves
- name = "Teshari Gloves"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/gloves.json'
-
-/datum/greyscale_config/teshari/glasses
- name = "Teshari Glasses"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/glasses.json'
-
-/datum/greyscale_config/teshari/coat
- name = "Teshari Coat"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/coat.json'
-
-/datum/greyscale_config/teshari/armor
- name = "Teshari Armor"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/armor.json'
-
-/datum/greyscale_config/teshari/backpack
- name = "Teshari Backpack"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/backpack.json'
-
-/datum/greyscale_config/teshari/spacesuit
- name = "Teshari Spacesuit"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/spacesuit.json'
-
-/datum/greyscale_config/teshari/cloak
- name = "Teshari Cloak"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/cloak.json'
-
-/datum/greyscale_config/teshari/tie
- name = "Teshari Tie"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/tie.json'
-
-/datum/greyscale_config/teshari/scarf
- name = "Teshari Scarf"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/scarf.json'
-
-/datum/greyscale_config/teshari/modcontrol
- name = "Teshari Modsuit"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/modcontrol.json'
-
-/datum/greyscale_config/teshari/hardsuit
- name = "Teshari Hardsuit"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/teshari_fallbacks/hardsuit.json'
-
-/*
-* CIN SURPLUS ARMOR
-*/
-
-// Helmet
-/datum/greyscale_config/cin_surplus_helmet
- name = "CIN Surplus Helmet"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/helmet.json'
-
-/datum/greyscale_config/cin_surplus_helmet/object
- name = "CIN Surplus Helmet (OBJ)"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
-
-// Undersuit
-/datum/greyscale_config/cin_surplus_undersuit
- name = "CIN Surplus Undersuit"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/undersuit.json'
-
-/datum/greyscale_config/cin_surplus_undersuit/object
- name = "CIN Surplus Undersuit (OBJ)"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
-
-/datum/greyscale_config/cin_surplus_undersuit/digi
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_digi.dmi'
-
-// Backpack
-/datum/greyscale_config/cin_surplus_backpack
- name = "CIN Surplus Backpack"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/backpack.json'
-
-/datum/greyscale_config/cin_surplus_backpack/object
- name = "CIN Surplus Backpack (OBJ)"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
-
-// Chestrig
-/datum/greyscale_config/cin_surplus_chestrig
- name = "CIN Surplus Chestrig"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/nri_surplus_equipment/chestrig.json'
-
-/datum/greyscale_config/cin_surplus_chestrig/object
- name = "CIN Surplus Chestrig (OBJ)"
- icon_file = 'modular_skyrat/modules/novaya_ert/icons/surplus_armor/surplus_armor_object.dmi'
-
-/*
-* ITEMS
-*/
-
-/datum/greyscale_config/id_card
- name = "Colourable ID Card"
- icon_file = 'modular_skyrat/modules/GAGS/icons/id_card.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/items/id_card.json'
-
-/datum/greyscale_config/wargame_hologram_projector
- name = "Wargame Hologram Projector"
- icon_file = 'modular_skyrat/modules/wargame_projectors/icons/projectors_and_holograms.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/wargame_holoprojector/projector.json'
-
-// Evil primitive catgirl clothing
-
-/datum/greyscale_config/primitive_catgirl_wraps
- name = "Primitive Body Wraps"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps.json'
-
-/datum/greyscale_config/primitive_catgirl_wraps/worn
- name = "Primitive Body Wraps (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/body_wraps_worn.json'
-
-/datum/greyscale_config/primitive_catgirl_armwraps
- name = "Arm Wraps"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps.json'
-
-/datum/greyscale_config/primitive_catgirl_armwraps/worn
- name = "Arm Wraps (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/armwraps_worn.json'
-
-/datum/greyscale_config/primitive_catgirl_coat
- name = "Primitive Fur Coat"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat.json'
-
-/datum/greyscale_config/primitive_catgirl_coat/worn
- name = "Primitive Fur Coat (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/coat_worn.json'
-
-/datum/greyscale_config/primitive_catgirl_boots
- name = "Primitive Winter Boots"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots.json'
-
-/datum/greyscale_config/primitive_catgirl_boots/worn
- name = "Primitive Winter Boots (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/boots_worn.json'
-
-/datum/greyscale_config/primitive_catgirl_gaiter
- name = "Neck Gaiter"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter.json'
-
-/datum/greyscale_config/primitive_catgirl_gaiter/worn
- name = "Neck Gaiter (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gaiter_worn.json'
-
-/datum/greyscale_config/primitive_catgirl_gauntlets
- name = "Gauntlets"
- icon_file = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets.json'
-
-/datum/greyscale_config/primitive_catgirl_gauntlets/worn
- name = "Gauntlets (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json'
diff --git a/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi b/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi
deleted file mode 100644
index 219995affaf..00000000000
Binary files a/modular_skyrat/modules/GAGS/icons/jumpsuit_better_vox.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm b/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm
deleted file mode 100644
index 5a1b186d6e9..00000000000
--- a/modular_skyrat/modules/GAGS/nsfw/greyscale_configs.dm
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-* NSFW GREYSCALE CONFIGS TO GO IN HERE
-*/
-
-// MASKS
-
-/datum/greyscale_config/ballgag
- name = "Ball Gag"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_masks.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag.json'
-
-/datum/greyscale_config/ballgag/worn
- name = "Ball Gag (Worn)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_masks.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_worn.json'
-
-/datum/greyscale_config/ballgag/left_hand
- name = "Ball Gag (Inhand, Left)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_left.json'
-
-/datum/greyscale_config/ballgag/right_hand
- name = "Ball Gag (Inhand, Right)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/ballgag_inhand_right.json'
-
-/datum/greyscale_config/ballgag/choking_small
- name = "Choke Gag (Small)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_small.json'
-
-/datum/greyscale_config/ballgag/choking_medium
- name = "Choke Gag (Medium)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_medium.json'
-
-/datum/greyscale_config/ballgag/choking_large
- name = "Choke Gag (Large)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/mask/choking_large.json'
-
-//shibari stand
-
-/datum/greyscale_config/shibari_stand
- name = "Shibari Stand"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand.json'
-
-/datum/greyscale_config/shibari_stand_item
- name = "Shibari Stand (Item)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_stand_item.json'
-
-/datum/greyscale_config/shibari_stand_ropes
- name = "Shibari Stand (Rope Overlays)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/shibari_stand.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/structures/shibari_stand_ropes.json'
-
-//shibari
-
-/datum/greyscale_config/shibari_rope
- name = "Shibari Rope"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari.json'
-
-/datum/greyscale_config/shibari_rope_inhand_left
- name = "Shibari Rope (Inhand, Left)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json'
-
-/datum/greyscale_config/shibari_rope_inhand_right
- name = "Shibari Rope (Inhand, Right)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_inhands.json'
-
-/datum/greyscale_config/shibari_rope/med
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_med.json'
-
-/datum/greyscale_config/shibari_rope/high
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/items/shibari_high.json'
-
-/datum/greyscale_config/shibari
- name = "Shibari"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/worn
- name = "Shibari (Worn)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/worn/digi
- name = "Shibari (Worn, Digi)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/worn/taur_snake
- name = "Shibari (Worn, Taur Snake)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/worn/taur_paw
- name = "Shibari (Worn, Taur Paw)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/worn/taur_hoof
- name = "Shibari (Worn, Taur Hoof)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-//body
-
-/datum/greyscale_config/shibari/body
- name = "Shibari Body"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/body/worn
- name = "Shibari Body (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/body/worn/digi
- name = "Shibari Body (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/body/worn/taur_snake
- name = "Shibari Body (Worn, Taur Snake)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/body/worn/taur_paw
- name = "Shibari Body (Worn, Taur Paw)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-/datum/greyscale_config/shibari/body/worn/taur_hoof
- name = "Shibari Body (Worn, Taur Hoof)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/body.json'
-
-//groin
-
-/datum/greyscale_config/shibari/groin
- name = "Shibari Groin"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-/datum/greyscale_config/shibari/groin/worn
- name = "Shibari Groin (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-/datum/greyscale_config/shibari/groin/worn/digi
- name = "Shibari Groin (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-/datum/greyscale_config/shibari/groin/worn/taur_snake
- name = "Shibari Groin (Worn, Taur Snake)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-/datum/greyscale_config/shibari/groin/worn/taur_paw
- name = "Shibari Groin (Worn, Taur Paw)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-/datum/greyscale_config/shibari/groin/worn/taur_hoof
- name = "Shibari Groin (Worn, Taur Hoof)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/groin.json'
-
-//fullbody
-
-/datum/greyscale_config/shibari/fullbody
- name = "Shibari Fullbody"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-/datum/greyscale_config/shibari/worn/fullbody
- name = "Shibari Fullbody (Worn)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-/datum/greyscale_config/shibari/fullbody/worn/digi
- name = "Shibari Fullbody (Worn, Digi)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-/datum/greyscale_config/shibari/fullbody/worn/taur_snake
- name = "Shibari Fullbody (Worn, Taur Snake)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-/datum/greyscale_config/shibari/fullbody/worn/taur_paw
- name = "Shibari Fullbody (Worn, Taur Paw)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-/datum/greyscale_config/shibari/fullbody/worn/taur_hoof
- name = "Shibari Fullbody (Worn, Taur Hoof)"
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/fullbody.json'
-
-//hands
-
-/datum/greyscale_config/shibari/hands
- name = "Shibari Hands"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json'
-
-/datum/greyscale_config/shibari/hands/worn
- name = "Shibari Hands (Worn)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/hands.json'
-
-//legs
-
-/datum/greyscale_config/shibari/legs
- name = "Shibari Legs"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json'
-
-/datum/greyscale_config/shibari/legs/worn
- name = "Shibari Legs (Worn)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json'
-
-/datum/greyscale_config/shibari/legs/worn/digi
- name = "Shibari Legs Digi (Worn, Digi)"
- icon_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
- json_config = 'modular_skyrat/modules/GAGS/nsfw/json_configs/clothes/legs.json'
-
diff --git a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm b/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm
deleted file mode 100644
index dad662fee36..00000000000
--- a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/obj/item/clothing/suit/hooded/seva
- name = "SEVA suit"
- desc = "A fire-proof suit for exploring hot environments. Its design doesn't allow for upgrading with goliath plates."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/suit.dmi'
- icon_state = "seva"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT|HIDETAIL
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- w_class = WEIGHT_CLASS_BULKY
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- hoodtype = /obj/item/clothing/head/hooded/seva
- armor_type = /datum/armor/hooded_seva
- resistance_flags = FIRE_PROOF
- transparent_protection = HIDEJUMPSUIT
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe)
-
-/datum/armor/hooded_seva
- melee = 20
- bullet = 10
- laser = 10
- energy = 10
- bomb = 30
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
-/obj/item/clothing/head/hooded/seva
- name = "SEVA hood"
- desc = "A fire-proof hood for exploring hot environments. Its design doesn't allow for upgrading with goliath plates."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi'
- icon_state = "seva"
- body_parts_covered = HEAD
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT
- cold_protection = HEAD
- heat_protection = HEAD
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- clothing_traits = list(TRAIT_ASHSTORM_IMMUNE)
- armor_type = /datum/armor/hooded_seva
- resistance_flags = FIRE_PROOF
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION //I can't find the snout sprite so I'm just gonna force it to do this
-
-/obj/item/clothing/mask/gas/seva
- name = "SEVA mask"
- desc = "A head-covering mask that can be connected to an external air supply. Intended for use with the SEVA Suit."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi'
- icon_state = "seva"
- resistance_flags = FIRE_PROOF
- flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT
diff --git a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm b/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm
deleted file mode 100644
index f31913684de..00000000000
--- a/modular_skyrat/modules/SiliconQoL/code/robotic_factory.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/machinery/transformer_rp
- name = "\improper Automatic Robotic Factory 5000"
- desc = "A large metallic machine with an entrance and an exit. A sign on \
- the side reads, 'Mass robot production facility'"
- icon = 'icons/obj/machines/recycling.dmi'
- icon_state = "separator-AO1"
- layer = ABOVE_ALL_MOB_LAYER // Overhead
- density = TRUE
- /// How many cyborgs are we storing
- var/stored_cyborgs = 1
- /// How many cyborgs can we store?
- var/max_stored_cyborgs = 4
- /// How much between the construction of a cyborg?
- var/cooldown_duration = 5 MINUTES
- /// Handles the timer , shouldn't touch.
- var/cooldown_timer
- /// The countdown itself
- var/obj/effect/countdown/transformer/countdown
- /// The master AI , assigned when placed down with the ability.
- var/mob/living/silicon/ai/master_ai
-
-/obj/machinery/transformer_rp/Initialize(mapload)
- // On us
- . = ..()
- new /obj/machinery/conveyor/auto(loc, WEST)
- countdown = new(src)
- countdown.start()
-
-/obj/machinery/transformer_rp/examine(mob/user)
- . = ..()
- if(issilicon(user) || isobserver(user))
- . += "It will create a new cyborg in [DisplayTimeText(cooldown_timer - world.time)]."
-
-/obj/machinery/transformer_rp/Destroy()
- QDEL_NULL(countdown)
- . = ..()
-
-/obj/machinery/transformer_rp/update_icon_state()
- . = ..()
- if(machine_stat & (BROKEN|NOPOWER))
- icon_state = "separator-AO0"
- else
- icon_state = initial(icon_state)
-
-/obj/machinery/transformer_rp/attack_ghost(mob/dead/observer/target_ghost)
- . = ..()
- create_a_cyborg(target_ghost)
-
-/obj/machinery/transformer_rp/process()
- if(cooldown_timer <= world.time)
- cooldown_timer = world.time + cooldown_duration
- update_icon()
- if(stored_cyborgs > max_stored_cyborgs)
- return
- stored_cyborgs++
- notify_ghosts("A new cyborg shell has been created at the [src]",
- source = src,
- notify_flags = NOTIFY_CATEGORY_NOFLASH,
- header = "New malfunctioning cyborg created!",
- )
-
-/obj/machinery/transformer_rp/proc/create_a_cyborg(mob/dead/observer/target_ghost)
- if(machine_stat & (BROKEN|NOPOWER))
- return
- if(stored_cyborgs<1)
- return
- var/cyborg_ask = tgui_alert(target_ghost, "Become a cyborg?", "Are you a terminator?", list("Yes", "No"))
- if(cyborg_ask == "No" || !src || QDELETED(src))
- return FALSE
- var/mob/living/silicon/robot/cyborg = new /mob/living/silicon/robot(loc)
- cyborg.key = target_ghost.key
- cyborg.set_connected_ai(master_ai)
- cyborg.lawsync()
- cyborg.lawupdate = TRUE
- stored_cyborgs--
diff --git a/modular_skyrat/modules/advanced_shuttles/code/closet.dm b/modular_skyrat/modules/advanced_shuttles/code/closet.dm
deleted file mode 100644
index 66ce9f92cc9..00000000000
--- a/modular_skyrat/modules/advanced_shuttles/code/closet.dm
+++ /dev/null
@@ -1,174 +0,0 @@
-/obj/structure/closet/shuttle/closet_update_overlays(list/new_overlays)
- . = new_overlays
- if(enable_door_overlay && !is_animating_door)
- if(opened && has_opened_overlay)
- var/mutable_appearance/door_overlay = mutable_appearance(icon, "[icon_door || icon_state]_open", alpha = src.alpha) //This was the only change, adding icon_door; TG wouldnt want it.
- . += door_overlay
- door_overlay.overlays += emissive_blocker(door_overlay.icon, door_overlay.icon_state, src, alpha = door_overlay.alpha) // If we don't do this the door doesn't block emissives and it looks weird.
- else if(has_closed_overlay)
- . += "[icon_door || icon_state]_door"
-//TG won't ever really need this because their lockers with non-matching fronts dont have non-matching backs; so I simply re-define the proc for our shuttleclosets
-
-/obj/structure/closet/shuttle
- anchored = TRUE
- density = TRUE
- can_be_unanchored = FALSE
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
- icon_state = "wallcloset"
- icon_door = "wallcloset_mesh"
- door_anim_time = 0 //Somebody needs to remove the hard-sprited shuttles, or at least their lockers. These are a sin.
-
-/obj/structure/closet/shuttle/white
- icon_state = "wallcloset_white"
- icon_door = "wallcloset_white"
-
-/obj/structure/closet/shuttle/emergency
- name = "emergency closet"
- desc = "It's a storage unit for emergency breath masks and O2 tanks."
- icon_door = "wallcloset_o2"
-
-/obj/structure/closet/shuttle/emergency/PopulateContents()
- for (var/i in 1 to 2)
- new /obj/item/tank/internals/emergency_oxygen/engi(src)
- new /obj/item/clothing/mask/gas/alt(src)
- new /obj/item/storage/toolbox/emergency(src)
-
-/obj/structure/closet/shuttle/emergency/white
- icon_state = "wallcloset_white"
-
-/obj/structure/closet/shuttle/medical
- name = "first-aid closet"
- desc = "It's a storage unit for emergency medical supplies."
- icon_door = "wallcloset_med"
-
-/obj/structure/closet/shuttle/medical/PopulateContents()
- new /obj/item/storage/medkit/emergency(src)
- new /obj/item/healthanalyzer(src)
- new /obj/item/reagent_containers/hypospray(src)
-
-/obj/structure/closet/shuttle/medical/white
- icon_state = "wallcloset_white"
-
-/obj/structure/closet/shuttle/mining
- desc = "It's a storage unit for emergency breath masks, O2 tanks, and a pressure suit."
- icon_state = "wallcloset_white"
- icon_door = "wallcloset_mining"
-
-/obj/structure/closet/shuttle/mining/PopulateContents()
- for (var/i in 1 to 2)
- new /obj/item/tank/internals/emergency_oxygen/engi(src)
- new /obj/item/clothing/mask/breath(src)
- new /obj/item/storage/toolbox/emergency(src)
- new /obj/item/clothing/head/helmet/space(src)
- new /obj/item/clothing/suit/space(src)
-
-/obj/structure/closet/shuttle/engivent
- wall_mounted = TRUE
- name = "engine ventilation"
- desc = "An exhaust vent for the shuttle's engines. It looks just big enough to fit a person..."
- icon_state = "vent"
- icon_door = "vent"
-
-//Generic Wall Closets - mount onto a wall, will end up storing anything that's on the tile it was placed from and 'occupies'.
-//Mob Size is small so that it doesn't end up storing players standing on those tiles.
-/obj/structure/closet/generic/wall
- door_anim_squish = 0.3
- door_anim_angle = 115
- door_hinge_x = -8.5
- wall_mounted = TRUE
- max_mob_size = MOB_SIZE_SMALL
- density = TRUE
- anchored = TRUE
- anchorable = FALSE //Prevents it being unwrenched and dragged around. Gotta unweld it!
- paint_jobs = FALSE //Prevents it being repainted into other non-wall lockers.
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "locker_wall"
-
-/obj/structure/closet/emcloset/wall
- door_anim_squish = 0.3
- door_anim_angle = 115
- door_hinge_x = -8.5
- wall_mounted = TRUE
- max_mob_size = MOB_SIZE_SMALL
- density = TRUE
- anchored = TRUE
- anchorable = FALSE
- paint_jobs = FALSE
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "emergency_wall"
-
-/obj/structure/closet/firecloset/wall
- door_anim_squish = 0.3
- door_anim_angle = 115
- door_hinge_x = -8.5
- wall_mounted = TRUE
- max_mob_size = MOB_SIZE_SMALL
- density = TRUE
- anchored = TRUE
- anchorable = FALSE
- paint_jobs = FALSE
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "fire_wall"
-
-//These two are pre-locked versions of closet/generic/wall, for mapping only
-/obj/structure/closet/secure_closet/wall
- door_anim_squish = 0.3
- door_anim_angle = 115
- door_hinge_x = -8.5
- wall_mounted = TRUE
- max_mob_size = MOB_SIZE_SMALL
- density = TRUE
- anchored = TRUE
- anchorable = FALSE
- paint_jobs = FALSE
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "locker_wall"
-
-/obj/structure/closet/secure_closet/personal/wall
- door_anim_squish = 0.3
- door_anim_angle = 115
- door_hinge_x = -8.5
- wall_mounted = TRUE
- max_mob_size = MOB_SIZE_SMALL
- density = TRUE
- anchored = TRUE
- anchorable = FALSE
- paint_jobs = FALSE
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "locker_wall"
-
-//These procs create empty subtypes, for when it's placed by a user rather than mapped in...
-//Secure/personal don't get these since they're made with airlock electronics
-/obj/structure/closet/generic/wall/empty/PopulateContents()
- return
-
-/obj/structure/closet/emcloset/wall/empty/PopulateContents()
- return
-
-/obj/structure/closet/firecloset/wall/empty/PopulateContents()
- return
-
-//Wallmounts, for rebuilding the wall lockers above
-/obj/item/wallframe/closet
- name = "wall mounted closet"
- desc = "It's a wall mounted storage unit for... well, whatever you put in this one. Apply to wall to use."
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "locker_mount"
- result_path = /obj/structure/closet/generic/wall/empty
- pixel_shift = 32
-
-/obj/item/wallframe/emcloset
- name = "wall mounted emergency closet"
- desc = "It's a wall mounted storage unit for emergency breath masks and O2 tanks. Apply to wall to use."
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "emergency_mount"
- result_path = /obj/structure/closet/emcloset/wall/empty
- pixel_shift = 32
-
-/obj/item/wallframe/firecloset
- name = "wall mounted fire-safety closet"
- desc = "It's a wall mounted storage unit for fire-fighting supplies. Apply to wall to use."
- icon = 'modular_skyrat/master_files/icons/obj/closet_wall.dmi'
- icon_state = "fire_mount"
- result_path = /obj/structure/closet/firecloset/wall/empty
- pixel_shift = 32
diff --git a/modular_skyrat/modules/advanced_shuttles/code/decals.dm b/modular_skyrat/modules/advanced_shuttles/code/decals.dm
deleted file mode 100644
index f9ad627aba7..00000000000
--- a/modular_skyrat/modules/advanced_shuttles/code/decals.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/obj/structure/sign/shuttleg250
- name = "Transfer Shuttle G250"
- desc = "Transfer Shuttle G250."
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/g250.dmi' //LARGE icon
- icon_state = "g250"
-
-/obj/structure/fans/tiny/forcefield
- name = "forcefield"
- desc = "A fluctuating forcefield for ships to cross."
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/effects.dmi'
- icon_state = "forcefield"
-
-//Floor Decals -----
-/obj/effect/turf_decal/shuttle/exploration
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi'
- icon_state = "decal1"
-
-/obj/effect/turf_decal/shuttle/exploration/medbay
- icon_state = "decalmed"
-
-/obj/effect/turf_decal/shuttle/exploration/cargostore
- icon_state = "decalstore"
-
-/obj/effect/turf_decal/shuttle/exploration/bridge
- icon_state = "decalbridge"
-
-/obj/effect/turf_decal/shuttle/exploration/o2
- icon_state = "decalo2"
-
-/obj/effect/turf_decal/shuttle/exploration/typhon
- icon_state = "decal2"
-
-/obj/effect/turf_decal/shuttle/exploration/echidna
- icon_state = "decal1"
-
-/obj/effect/turf_decal/shuttle/exploration/weapons
- icon_state = "decal3"
-
-/obj/effect/turf_decal/shuttle/exploration/airlock
- icon_state = "decal4"
-
-/obj/effect/turf_decal/shuttle/exploration/hazardstripe
- icon_state = "hazard_decal"
-
-/obj/effect/turf_decal/shuttle/exploration/bot
- icon_state = "bot_decal"
diff --git a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm b/modular_skyrat/modules/advanced_shuttles/code/turfs.dm
deleted file mode 100644
index 1c5e9c53c30..00000000000
--- a/modular_skyrat/modules/advanced_shuttles/code/turfs.dm
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-/area/shuttle
- dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
-*/
-
-/obj/docking_port/mobile/arrivals
-
-/turf/closed/wall/mineral/titanium/shuttle_wall
- name = "shuttle wall"
- desc = "A light-weight titanium wall used in shuttles."
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi'
- icon_state = ""
- base_icon_state = ""
- smoothing_flags = null
- smoothing_groups = null
- canSmoothWith = null
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/AfterChange(flags, oldType)
- . = ..()
- // Manually add space underlay, in a way similar to turf_z_transparency,
- // but we actually show the old content of the same z-level, as desired for shuttles
-
- var/turf/underturf_path
-
- // Grab previous turf icon
- if(!ispath(oldType, /turf/closed/wall/mineral/titanium/shuttle_wall))
- underturf_path = oldType
- else
- // Else use whatever SSmapping tells us, like transparent open tiles do
- underturf_path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space
-
- var/mutable_appearance/underlay_appearance = mutable_appearance(
- initial(underturf_path.icon),
- initial(underturf_path.icon_state),
- offset_spokesman = src,
- layer = TURF_LAYER - 0.02,
- plane = initial(underturf_path.plane))
- underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR
- underlays += underlay_appearance
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window
- opacity = FALSE
-
-/*
-* POD
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/pod
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi'
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/pod
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/pod.dmi'
- icon_state = "3,1"
-
-/*
-* FERRY
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/ferry
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'
- icon_state = "18,2"
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/ferry
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'
- icon_state = "18,2"
-
-/turf/open/floor/iron/shuttle/ferry
- name = "shuttle floor"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/erokez.dmi'
- icon_state = "floor1"
-
-/turf/open/floor/iron/shuttle/ferry/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/*
-* EVAC
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/evac
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi'
- icon_state = "9,1"
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/evac
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi'
- icon_state = "9,1"
-
-/turf/open/floor/iron/shuttle/evac
- name = "shuttle floor"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/evac_shuttle.dmi'
- icon_state = "floor"
-
-/turf/open/floor/iron/shuttle/evac/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/*
-* ARRIVALS
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/arrivals
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi'
- icon_state = "3,1"
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/arrivals
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi'
- icon_state = "3,1"
-
-/turf/open/floor/iron/shuttle/arrivals
- name = "shuttle floor"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/wagon.dmi'
- icon_state = "floor"
-
-/turf/open/floor/iron/shuttle/arrivals/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/*
-* CARGO
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/cargo
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi'
- icon_state = "3,1"
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/cargo
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi'
- icon_state = "3,1"
-
-/turf/open/floor/iron/shuttle/cargo
- name = "shuttle floor"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/cargo.dmi'
- icon_state = "floor"
-
-/turf/open/floor/iron/shuttle/cargo/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/*
-* MINING
-*/
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/mining
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining.dmi'
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining.dmi'
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/mining_large
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi'
- icon_state = "2,2"
- dir = NORTH
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_large
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_large.dmi'
- icon_state = "6,3"
- dir = NORTH
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/mining_labor
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi'
- icon_state = "4,6"
- dir = NORTH
-
-/turf/closed/wall/mineral/titanium/shuttle_wall/window/mining_labor
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/mining_labor.dmi'
- icon_state = "4,4"
- dir = NORTH
-
-/*
-* MINING/RND/EXPLORATION FLOORS
-*/
-
-/turf/open/floor/iron/shuttle/exploration
- name = "shuttle floor"
- icon = 'modular_skyrat/modules/advanced_shuttles/icons/exploration_floor.dmi'
- icon_state = "oside"
-
-/turf/open/floor/iron/shuttle/exploration/uside
- icon_state = "uside"
-
-/turf/open/floor/iron/shuttle/exploration/corner
- icon_state = "corner"
-
-/turf/open/floor/iron/shuttle/exploration/side
- icon_state = "side"
-
-/turf/open/floor/iron/shuttle/exploration/corner_invcorner
- icon_state = "corner_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/adjinvcorner
- icon_state = "adj_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/oppinvcorner
- icon_state = "opp_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/invertcorner
- icon_state = "icorner"
-
-/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner
- icon_state = "double_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/tripleinvertcorner
- icon_state = "tri_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/doubleside
- icon_state = "double_side"
-
-/turf/open/floor/iron/shuttle/exploration/quadinvertcorner
- icon_state = "4icorner"
-
-/turf/open/floor/iron/shuttle/exploration/doubleinvertcorner_side
- icon_state = "double_icorner_side"
-
-/turf/open/floor/iron/shuttle/exploration/invertcorner_side
- icon_state = "side_icorner"
-
-/turf/open/floor/iron/shuttle/exploration/invertcorner_side_flipped
- icon_state = "side_icorner_f"
-
-/turf/open/floor/iron/shuttle/exploration/blanktile
- icon_state = "blank"
-
-/turf/open/floor/iron/shuttle/exploration/flat
- icon_state = "flat"
-
-/turf/open/floor/iron/shuttle/exploration/flat/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/iron/shuttle/exploration/textured_flat
- icon_state = "flattexture"
-
-/turf/open/floor/iron/shuttle/exploration/textured_flat/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/iron/shuttle/exploration/equipmentrail1
- icon_state = "rail1"
-
-/turf/open/floor/iron/shuttle/exploration/equipmentrail2
- icon_state = "rail2"
-
-/turf/open/floor/iron/shuttle/exploration/equipmentrail3
- icon_state = "rail3"
-
-/turf/open/floor/iron/shuttle/exploration/hazard
- icon_state = "hazard"
-
-/turf/open/floor/iron/shuttle/exploration/hazard/airless
- initial_gas_mix = AIRLESS_ATMOS
diff --git a/modular_skyrat/modules/aesthetics/abductor/abductor.dm b/modular_skyrat/modules/aesthetics/abductor/abductor.dm
deleted file mode 100644
index b75d71d45e5..00000000000
--- a/modular_skyrat/modules/aesthetics/abductor/abductor.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/item/screwdriver/abductor
- icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi'
-
-/obj/item/wirecutters/abductor
- icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi'
-
-/obj/item/crowbar/abductor
- icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi'
-
-/obj/item/wrench/abductor
- icon = 'modular_skyrat/modules/aesthetics/abductor/abductor.dmi'
diff --git a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm b/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm
deleted file mode 100644
index 15c5d45ba8b..00000000000
--- a/modular_skyrat/modules/aesthetics/airlock/code/airlock.dm
+++ /dev/null
@@ -1,558 +0,0 @@
-/obj/machinery/door/airlock
- doorOpen = 'modular_skyrat/modules/aesthetics/airlock/sound/open.ogg'
- doorClose = 'modular_skyrat/modules/aesthetics/airlock/sound/close.ogg'
- boltUp = 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_up.ogg'
- boltDown = 'modular_skyrat/modules/aesthetics/airlock/sound/bolts_down.ogg'
- //noPower = 'sound/machines/doorclick.ogg'
- var/forcedOpen = 'modular_skyrat/modules/aesthetics/airlock/sound/open_force.ogg' //Come on guys, why aren't all the sound files like this.
- var/forcedClosed = 'modular_skyrat/modules/aesthetics/airlock/sound/close_force.ogg'
-
- /// For those airlocks you might want to have varying "fillings" for, without having to
- /// have an icon file per door with a different filling.
- var/fill_state_suffix = null
- /// For the airlocks that use greyscale lights, set this to the color you want your lights to be.
- var/greyscale_lights_color = null
- /// For the airlocks that use a greyscale accent door color, set this color to the accent color you want it to be.
- var/greyscale_accent_color = null
-
- var/has_environment_lights = TRUE //Does this airlock emit a light?
- var/light_color_poweron = AIRLOCK_POWERON_LIGHT_COLOR
- var/light_color_bolts = AIRLOCK_BOLTS_LIGHT_COLOR
- var/light_color_access = AIRLOCK_ACCESS_LIGHT_COLOR
- var/light_color_emergency = AIRLOCK_EMERGENCY_LIGHT_COLOR
- var/light_color_engineering = AIRLOCK_ENGINEERING_LIGHT_COLOR
- var/light_color_deny = AIRLOCK_DENY_LIGHT_COLOR
- var/door_light_range = AIRLOCK_LIGHT_RANGE
- var/door_light_power = AIRLOCK_LIGHT_POWER
- ///Is this door external? E.g. does it lead to space? Shuttle docking systems bolt doors with this flag.
- var/external = FALSE
-
-/obj/machinery/door/airlock/external
- external = TRUE
-
-/obj/machinery/door/airlock/shuttle
- external = TRUE
-
-/obj/machinery/door/airlock/power_change()
- ..()
- update_icon()
-
-/obj/machinery/door/airlock/update_overlays()
- . = ..()
- var/pre_light_range = 0
- var/pre_light_power = 0
- var/pre_light_color = ""
- var/lights_overlay = ""
-
- var/frame_state
- var/light_state
- switch(airlock_state)
- if(AIRLOCK_CLOSED)
- frame_state = AIRLOCK_FRAME_CLOSED
- if(locked)
- light_state = AIRLOCK_LIGHT_BOLTS
- lights_overlay = "lights_bolts"
- pre_light_color = light_color_bolts
- else if(emergency)
- light_state = AIRLOCK_LIGHT_EMERGENCY
- lights_overlay = "lights_emergency"
- pre_light_color = light_color_emergency
- else if(engineering_override)
- light_state = AIRLOCK_LIGHT_ENGINEERING
- lights_overlay = "lights_engineering"
- pre_light_color = light_color_engineering
- else
- lights_overlay = "lights_poweron"
- pre_light_color = light_color_poweron
- if(AIRLOCK_DENY)
- frame_state = AIRLOCK_FRAME_CLOSED
- light_state = AIRLOCK_LIGHT_DENIED
- lights_overlay = "lights_denied"
- pre_light_color = light_color_deny
- if(AIRLOCK_EMAG)
- frame_state = AIRLOCK_FRAME_CLOSED
- if(AIRLOCK_CLOSING)
- frame_state = AIRLOCK_FRAME_CLOSING
- light_state = AIRLOCK_LIGHT_CLOSING
- lights_overlay = "lights_closing"
- pre_light_color = light_color_access
- if(AIRLOCK_OPEN)
- frame_state = AIRLOCK_FRAME_OPEN
- if(locked)
- lights_overlay = "lights_bolts_open"
- pre_light_color = light_color_bolts
- else if(emergency)
- lights_overlay = "lights_emergency_open"
- pre_light_color = light_color_emergency
- else
- lights_overlay = "lights_poweron_open"
- pre_light_color = light_color_poweron
- if(AIRLOCK_OPENING)
- frame_state = AIRLOCK_FRAME_OPENING
- light_state = AIRLOCK_LIGHT_OPENING
- lights_overlay = "lights_opening"
- pre_light_color = light_color_access
-
- . += get_airlock_overlay(frame_state, icon, src, em_block = TRUE)
- if(airlock_material)
- . += get_airlock_overlay("[airlock_material]_[frame_state]", overlays_file, src, em_block = TRUE)
- else
- . += get_airlock_overlay("fill_[frame_state + fill_state_suffix]", icon, src, em_block = TRUE)
-
- if(greyscale_lights_color && !light_state)
- lights_overlay += "_greyscale"
-
- if(lights && hasPower())
- . += get_airlock_overlay("lights_[light_state]", overlays_file, src, em_block = FALSE)
- pre_light_range = door_light_range
- pre_light_power = door_light_power
- if(has_environment_lights)
- set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE)
- if(multi_tile)
- filler.set_light(l_range = pre_light_range, l_power = pre_light_power, l_color = pre_light_color, l_on = TRUE)
- else
- lights_overlay = ""
- set_light(l_on = FALSE)
-
- var/mutable_appearance/lights_appearance = mutable_appearance(overlays_file, lights_overlay, FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE)
-
- if(greyscale_lights_color && !light_state)
- lights_appearance.color = greyscale_lights_color
-
- if(multi_tile)
- lights_appearance.dir = dir
-
- . += lights_appearance
-
- if(greyscale_accent_color)
- . += get_airlock_overlay("[frame_state]_accent", overlays_file, src, em_block = TRUE, state_color = greyscale_accent_color)
-
- if(panel_open)
- . += get_airlock_overlay("panel_[frame_state][security_level ? "_protected" : null]", overlays_file, src, em_block = TRUE)
- if(frame_state == AIRLOCK_FRAME_CLOSED && welded)
- . += get_airlock_overlay("welded", overlays_file, src, em_block = TRUE)
-
- if(airlock_state == AIRLOCK_EMAG)
- . += get_airlock_overlay("sparks", overlays_file, src, em_block = FALSE)
-
- if(hasPower())
- if(frame_state == AIRLOCK_FRAME_CLOSED)
- if(atom_integrity < integrity_failure * max_integrity)
- . += get_airlock_overlay("sparks_broken", overlays_file, src, em_block = FALSE)
- else if(atom_integrity < (0.75 * max_integrity))
- . += get_airlock_overlay("sparks_damaged", overlays_file, src, em_block = FALSE)
- else if(frame_state == AIRLOCK_FRAME_OPEN)
- if(atom_integrity < (0.75 * max_integrity))
- . += get_airlock_overlay("sparks_open", overlays_file, src, em_block = FALSE)
-
- if(note)
- . += get_airlock_overlay(get_note_state(frame_state), note_overlay_file, src, em_block = TRUE)
-
- if(frame_state == AIRLOCK_FRAME_CLOSED && seal)
- . += get_airlock_overlay("sealed", overlays_file, src, em_block = TRUE)
-
- if(hasPower() && unres_sides)
- for(var/heading in list(NORTH,SOUTH,EAST,WEST))
- if(!(unres_sides & heading))
- continue
- var/mutable_appearance/floorlight = mutable_appearance('icons/obj/doors/airlocks/station/overlays.dmi', "unres_[heading]", FLOAT_LAYER, src, ABOVE_LIGHTING_PLANE)
- switch (heading)
- if (NORTH)
- floorlight.pixel_x = 0
- floorlight.pixel_y = 32
- if (SOUTH)
- floorlight.pixel_x = 0
- floorlight.pixel_y = -32
- if (EAST)
- floorlight.pixel_x = 32
- floorlight.pixel_y = 0
- if (WEST)
- floorlight.pixel_x = -32
- floorlight.pixel_y = 0
- . += floorlight
-
-//STATION AIRLOCKS
-/obj/machinery/door/airlock
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi'
-
-/obj/machinery/door/airlock/command
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi'
-
-/obj/machinery/door/airlock/security
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi'
-
-/obj/machinery/door/airlock/security/old
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_sec/old
-
-/obj/machinery/door/airlock/security/old/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/engineering
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi'
-
-/obj/machinery/door/airlock/medical
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi'
-
-/obj/machinery/door/airlock/maintenance
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi'
-
-/obj/machinery/door/airlock/maintenance/external
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi'
-
-/obj/machinery/door/airlock/mining
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi'
-
-/obj/machinery/door/airlock/atmos
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi'
-
-/obj/machinery/door/airlock/research
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi'
-
-/obj/machinery/door/airlock/freezer
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi'
-
-/obj/machinery/door/airlock/science
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi'
-
-/obj/machinery/door/airlock/virology
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi'
-
-//STATION CUSTOM ARILOCKS
-/obj/machinery/door/airlock/corporate
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_corporate
- normal_integrity = 450
-
-/obj/machinery/door/airlock/corporate/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/service
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_service
-
-/obj/machinery/door/airlock/service/glass
- opacity = FALSE
- glass = TRUE
-
-/obj/machinery/door/airlock/captain
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi'
-
-/obj/machinery/door/airlock/hop
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi'
-
-/obj/machinery/door/airlock/hos
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi'
-
-/obj/machinery/door/airlock/hos/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/ce
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi'
-
-/obj/machinery/door/airlock/ce/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/rd
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi'
-
-/obj/machinery/door/airlock/rd/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/qm
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi'
-
-/obj/machinery/door/airlock/qm/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/cmo
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi'
-
-/obj/machinery/door/airlock/cmo/glass
- opacity = FALSE
- glass = TRUE
- normal_integrity = 400
-
-/obj/machinery/door/airlock/psych
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi'
-
-/obj/machinery/door/airlock/asylum
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi'
-
-/obj/machinery/door/airlock/bathroom
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi'
-
-//STATION MINERAL AIRLOCKS
-/obj/machinery/door/airlock/gold
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi'
-
-/obj/machinery/door/airlock/silver
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi'
-
-/obj/machinery/door/airlock/diamond
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi'
-
-/obj/machinery/door/airlock/uranium
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi'
-
-/obj/machinery/door/airlock/plasma
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi'
-
-/obj/machinery/door/airlock/bananium
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi'
-
-/obj/machinery/door/airlock/sandstone
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi'
-
-/obj/machinery/door/airlock/wood
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi'
-
-//STATION 2 AIRLOCKS
-
-/obj/machinery/door/airlock/public
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi'
-
-//EXTERNAL AIRLOCKS
-/obj/machinery/door/airlock/external
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi'
-
-//CENTCOM
-/obj/machinery/door/airlock/centcom
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
-
-/obj/machinery/door/airlock/grunge
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
-
-//VAULT
-/obj/machinery/door/airlock/vault
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi'
-
-//HATCH
-/obj/machinery/door/airlock/hatch
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
-
-/obj/machinery/door/airlock/maintenance_hatch
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
-
-//HIGH SEC
-/obj/machinery/door/airlock/highsecurity
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi'
-
-//MULTI-TILE
-
-/obj/machinery/door/airlock/multi_tile
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi'
-
-/obj/machinery/door/airlock/multi_tile/glass
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/glass_overlays.dmi'
-
-/obj/machinery/door/airlock/multi_tile/metal
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi'
-
-//TRAM
-
-/obj/machinery/door/airlock/tram
- name = "tram door"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/tram/tram_overlays.dmi'
- doorOpen = 'sound/machines/tramopen.ogg'
- doorClose = 'sound/machines/tramclose.ogg'
- has_environment_lights = FALSE
-
-//ASSEMBLYS
-/obj/structure/door_assembly/door_assembly_public
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/glass.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station2/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_com
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/command.dmi'
-
-/obj/structure/door_assembly/door_assembly_sec
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security.dmi'
-
-/obj/structure/door_assembly/door_assembly_sec/old
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/security2.dmi'
-
-/obj/structure/door_assembly/door_assembly_eng
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/engineering.dmi'
-
-/obj/structure/door_assembly/door_assembly_min
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/mining.dmi'
-
-/obj/structure/door_assembly/door_assembly_atmo
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/atmos.dmi'
-
-/obj/structure/door_assembly/door_assembly_research
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/research.dmi'
-
-/obj/structure/door_assembly/door_assembly_science
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/science.dmi'
-
-/obj/structure/door_assembly/door_assembly_viro
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/virology.dmi'
-
-/obj/structure/door_assembly/door_assembly_med
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/medical.dmi'
-
-/obj/structure/door_assembly/door_assembly_mai
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenance.dmi'
-
-/obj/structure/door_assembly/door_assembly_extmai
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/maintenanceexternal.dmi'
-
-/obj/structure/door_assembly/door_assembly_ext
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/external.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/external/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_fre
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/freezer.dmi'
-
-/obj/structure/door_assembly/door_assembly_hatch
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_mhatch
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/maintenance.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hatch/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_highsecurity
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/highsec.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/highsec/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_vault
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/vault.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/vault/overlays.dmi'
-
-
-/obj/structure/door_assembly/door_assembly_centcom
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_grunge
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/centcom.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/centcom/overlays.dmi'
-
-/obj/structure/door_assembly/door_assembly_gold
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/gold.dmi'
-
-/obj/structure/door_assembly/door_assembly_silver
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/silver.dmi'
-
-/obj/structure/door_assembly/door_assembly_diamond
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/diamond.dmi'
-
-/obj/structure/door_assembly/door_assembly_uranium
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/uranium.dmi'
-
-/obj/structure/door_assembly/door_assembly_plasma
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/plasma.dmi'
-
-/obj/structure/door_assembly/door_assembly_bananium
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/bananium.dmi'
-
-/obj/structure/door_assembly/door_assembly_sandstone
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/sandstone.dmi'
-
-/obj/structure/door_assembly/door_assembly_wood
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/wood.dmi'
-
-/obj/structure/door_assembly/door_assembly_corporate
- name = "corporate airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/corporate.dmi'
- glass_type = /obj/machinery/door/airlock/corporate/glass
- airlock_type = /obj/machinery/door/airlock/corporate
-
-/obj/structure/door_assembly/door_assembly_service
- name = "service airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/service.dmi'
- base_name = "service airlock"
- glass_type = /obj/machinery/door/airlock/service/glass
- airlock_type = /obj/machinery/door/airlock/service
-
-/obj/structure/door_assembly/door_assembly_captain
- name = "captain airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cap.dmi'
- glass_type = /obj/machinery/door/airlock/command/glass
- airlock_type = /obj/machinery/door/airlock/captain
-
-/obj/structure/door_assembly/door_assembly_hop
- name = "head of personnel airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hop.dmi'
- glass_type = /obj/machinery/door/airlock/command/glass
- airlock_type = /obj/machinery/door/airlock/hop
-
-/obj/structure/door_assembly/hos
- name = "head of security airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/hos.dmi'
- glass_type = /obj/machinery/door/airlock/hos/glass
- airlock_type = /obj/machinery/door/airlock/hos
-
-/obj/structure/door_assembly/door_assembly_cmo
- name = "chief medical officer airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/cmo.dmi'
- glass_type = /obj/machinery/door/airlock/cmo/glass
- airlock_type = /obj/machinery/door/airlock/cmo
-
-/obj/structure/door_assembly/door_assembly_ce
- name = "chief engineer airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/ce.dmi'
- glass_type = /obj/machinery/door/airlock/ce/glass
- airlock_type = /obj/machinery/door/airlock/ce
-
-/obj/structure/door_assembly/door_assembly_rd
- name = "research director airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/rd.dmi'
- glass_type = /obj/machinery/door/airlock/rd/glass
- airlock_type = /obj/machinery/door/airlock/rd
-
-/obj/structure/door_assembly/door_assembly_qm
- name = "quartermaster airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/qm.dmi'
- glass_type = /obj/machinery/door/airlock/qm/glass
- airlock_type = /obj/machinery/door/airlock/qm
-
-/obj/structure/door_assembly/door_assembly_psych
- name = "psychologist airlock assembly"
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/psych.dmi'
- glass_type = /obj/machinery/door/airlock/medical/glass
- airlock_type = /obj/machinery/door/airlock/psych
-
-/obj/structure/door_assembly/door_assembly_asylum
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/asylum.dmi'
-
-/obj/structure/door_assembly/door_assembly_bathroom
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/bathroom.dmi'
-
-/obj/machinery/door/airlock/hydroponics
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi'
-
-/obj/structure/door_assembly/door_assembly_hydro
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/botany.dmi'
-
-/obj/structure/door_assembly/
- icon = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/public.dmi'
- overlays_file = 'modular_skyrat/modules/aesthetics/airlock/icons/airlocks/station/overlays.dmi'
diff --git a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm b/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm
deleted file mode 100644
index f532558accf..00000000000
--- a/modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/machinery/airlock_controller
- icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi'
-
-/obj/machinery/door_buttons/access_button
- icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi'
-
-/obj/machinery/door_buttons/airlock_controller
- icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi'
-
-/obj/machinery/embedded_controller/radio/simple_vent_controller
- icon = 'modular_skyrat/modules/aesthetics/airlock_machines/airlock_machines.dmi'
diff --git a/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm b/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm
deleted file mode 100644
index 8684c6b8908..00000000000
--- a/modular_skyrat/modules/aesthetics/blast_door/code/blast_door.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/machinery/door/poddoor
- icon = 'modular_skyrat/modules/aesthetics/blast_door/icons/blast_door.dmi'
- animation_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/blast_door.ogg'
-
-/obj/machinery/door/poddoor/shutters
- var/door_open_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/shutters_open.ogg'
- var/door_close_sound = 'modular_skyrat/modules/aesthetics/blast_door/sound/shutters_close.ogg'
-
-/obj/machinery/door/poddoor/shutters/do_animate(animation)
- switch(animation)
- if("opening")
- flick("opening", src)
- playsound(src, door_open_sound, 30, TRUE)
- if("closing")
- flick("closing", src)
- playsound(src, door_close_sound, 30, TRUE)
diff --git a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm b/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm
deleted file mode 100644
index 7e295e6a458..00000000000
--- a/modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/item/hand_labeler
- icon = 'modular_skyrat/modules/aesthetics/bureaucracy/bureaucracy.dmi'
diff --git a/modular_skyrat/modules/aesthetics/camera/code/camera.dm b/modular_skyrat/modules/aesthetics/camera/code/camera.dm
deleted file mode 100644
index 4eaf5aedf66..00000000000
--- a/modular_skyrat/modules/aesthetics/camera/code/camera.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/machinery/camera
- icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi'
-
-/obj/item/wallframe/camera
- icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi'
-
-/obj/structure/camera_assembly
- icon = 'modular_skyrat/modules/aesthetics/camera/icons/camera.dmi'
diff --git a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm b/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm
deleted file mode 100644
index c44ba5ac8c6..00000000000
--- a/modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/obj/structure/reagent_dispensers/watertank
- icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
-
-/obj/structure/reagent_dispensers/plumbed
- icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
-
-/obj/structure/reagent_dispensers/fueltank
- icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
-
-/obj/structure/reagent_dispensers/foamtank
- icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
-
-/obj/structure/reagent_dispensers/water_cooler
- icon = 'modular_skyrat/modules/aesthetics/chemical_tanks/chemical_tanks.dmi'
diff --git a/modular_skyrat/modules/aesthetics/clothing/clothing.dm b/modular_skyrat/modules/aesthetics/clothing/clothing.dm
deleted file mode 100644
index 7fc79c46c01..00000000000
--- a/modular_skyrat/modules/aesthetics/clothing/clothing.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-
-/*
-* HEAD
-*/
-
-/obj/item/clothing/head/costume/weddingveil
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
- worn_icon_state = "weddingveil_temp"
- //TG's is ugly as sin, until it's updated we have our own
-
-/*
-* SHOES
-*/
-
-/obj/item/clothing/shoes/workboots/old
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- icon_state = "workbootsold"
diff --git a/modular_skyrat/modules/aesthetics/device/device.dm b/modular_skyrat/modules/aesthetics/device/device.dm
deleted file mode 100644
index 7919640157e..00000000000
--- a/modular_skyrat/modules/aesthetics/device/device.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/obj/item/t_scanner
- icon = 'modular_skyrat/modules/aesthetics/device/device.dmi'
-
-/obj/item/analyzer
- icon = 'modular_skyrat/modules/aesthetics/device/device.dmi'
-
-/obj/item/grenade/empgrenade
- icon = 'modular_skyrat/modules/aesthetics/device/device.dmi'
-
-/obj/item/multitool
- icon = 'modular_skyrat/modules/aesthetics/device/device.dmi'
-
-/obj/item/geiger_counter
- icon = 'modular_skyrat/modules/aesthetics/device/device.dmi'
-
-// This needs default but is a subtype. Pain.
-/obj/item/t_scanner/adv_mining_scanner
- icon = 'icons/obj/devices/scanner.dmi'
diff --git a/modular_skyrat/modules/aesthetics/directwindow/code/window.dm b/modular_skyrat/modules/aesthetics/directwindow/code/window.dm
deleted file mode 100644
index a0cd5cf100d..00000000000
--- a/modular_skyrat/modules/aesthetics/directwindow/code/window.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/structure/window
- icon = 'modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi'
-
-/obj/machinery/door/window
- icon = 'modular_skyrat/modules/aesthetics/directwindow/icons/directwindow.dmi'
diff --git a/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm b/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm
deleted file mode 100644
index a3e71eea6a7..00000000000
--- a/modular_skyrat/modules/aesthetics/disposals/code/disposals.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/disposal
- icon = 'modular_skyrat/modules/aesthetics/disposals/icons/disposals.dmi'
diff --git a/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm b/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm
deleted file mode 100644
index d53ad47d36d..00000000000
--- a/modular_skyrat/modules/aesthetics/emitter/code/emitter.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/machinery/power/emitter
- icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi'
-
-/obj/machinery/field/containment
- icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi'
-
-/obj/machinery/field/generator
- icon = 'modular_skyrat/modules/aesthetics/emitter/icons/field_generator.dmi'
-
-
-/obj/machinery/power/rad_collector
- icon = 'modular_skyrat/modules/aesthetics/emitter/icons/emitter.dmi'
-
diff --git a/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm b/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm
deleted file mode 100644
index 8ccf169d457..00000000000
--- a/modular_skyrat/modules/aesthetics/firealarm/code/firealarm.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/firealarm
- icon = 'modular_skyrat/modules/aesthetics/firealarm/icons/firealarm.dmi'
diff --git a/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm b/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm
deleted file mode 100644
index 1af081f40b8..00000000000
--- a/modular_skyrat/modules/aesthetics/firedoor/code/firedoor.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/obj/machinery/door/firedoor
- name = "emergency shutter"
- desc = "Emergency air-tight shutter, capable of sealing off breached areas. This one has a glass panel. It has a mechanism to open it with just your hands."
- icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor_glass.dmi'
- var/door_open_sound = 'modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg'
- var/door_close_sound = 'modular_skyrat/modules/aesthetics/firedoor/sound/firedoor_open.ogg'
-
-/obj/machinery/door/firedoor/update_overlays()
- . = ..()
- if(istype(src, /obj/machinery/door/firedoor/border_only))
- return
- if(density) // if the door is closed, add the bottom blinking overlay -- and only if it's closed
- . += "firelock_alarm_type_bottom"
-
-/obj/machinery/door/firedoor/open()
- playsound(loc, door_open_sound, 100, TRUE)
- return ..()
-
-/obj/machinery/door/firedoor/close()
- playsound(loc, door_close_sound, 100, TRUE)
- return ..()
-
-/obj/machinery/door/firedoor/heavy
- name = "heavy emergency shutter"
- desc = "Emergency air-tight shutter, capable of sealing off breached areas. It has a mechanism to open it with just your hands."
- icon = 'modular_skyrat/modules/aesthetics/firedoor/icons/firedoor.dmi'
-
-/obj/effect/spawner/structure/window/reinforced/no_firelock
- spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile)
-
-/obj/machinery/door/firedoor/closed
- alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
diff --git a/modular_skyrat/modules/aesthetics/furniture/bed.dm b/modular_skyrat/modules/aesthetics/furniture/bed.dm
deleted file mode 100644
index d055d7f40a7..00000000000
--- a/modular_skyrat/modules/aesthetics/furniture/bed.dm
+++ /dev/null
@@ -1,110 +0,0 @@
-/obj/structure/bed/double
- name = "double bed"
- icon_state = "doublebed"
- icon = 'modular_skyrat/modules/aesthetics/furniture/furniture.dmi'
-
-/obj/item/bedsheet/double
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- icon_state = "doublesheet"
- slot_flags = null
-
-/obj/item/bedsheet/blue/double
- icon_state = "doublesheetblue"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/green/double
- icon_state = "doublesheetgreen"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-
-/obj/item/bedsheet/orange/double
- icon_state = "doublesheetorange"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/purple/double
- icon_state = "doublesheetpurple"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/rainbow/double //all the way across the sky.
- icon_state = "doublesheetrainbow"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/red/double
- icon_state = "doublesheetred"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/yellow/double
- icon_state = "doublesheetyellow"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/mime/double
- icon_state = "doublesheetmime"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/clown/double
- icon_state = "doublesheetclown"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/captain/double
- icon_state = "doublesheetcaptain"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/rd/double
- icon_state = "doublesheetrd"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/hos/double
- icon_state = "doublesheethos"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/hop/double
- icon_state = "doublesheethop"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/ce/double
- icon_state = "doublesheetce"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/brown/double
- icon_state = "doublesheetbrown"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/ian/double
- icon_state = "doublesheetian"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/centcom/double
- icon_state = "doublesheetcc"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/nanotrasen/double
- icon_state = "doublesheetNT"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/qm/double
- icon_state = "doublesheetqm"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
-
-/obj/item/bedsheet/cmo/double
- icon_state = "doublesheetCMO"
- icon = 'modular_skyrat/modules/aesthetics/furniture/bedsheets.dmi'
- slot_flags = null
diff --git a/modular_skyrat/modules/aesthetics/guns/code/guns.dm b/modular_skyrat/modules/aesthetics/guns/code/guns.dm
deleted file mode 100644
index ac20f9f5db9..00000000000
--- a/modular_skyrat/modules/aesthetics/guns/code/guns.dm
+++ /dev/null
@@ -1,567 +0,0 @@
-// open to suggestions on where to put these overrides
-// hugely not a fan of this but we do what we gotta
-
-/*
- * gotta redefine EVERY goddamn ammo type irt to new mat costs for the ammobench's sake
- * previously, SMALL_MATERIAL_AMOUNT was 100 units out of 2000 from a sheet (5%)
- * so the old cost of SMALL_MATERIAL_AMOUNT * 5 was 500/2000 from a sheet (25%)
- * experimental material balance PR makes it so that SMALL_MATERIAL_AMOUNT is actually 10 units out of 100 (10%)
- * which made it so that the old assumed value of SMALL_MATERIAL_AMOUNT * 5 is 50/100 (50% of a sheet for a single bullet) (suboptimal)
- * these updated, more consistent defines make it so that a single round's total materials should total 20% of a sheet, or 2 SMALL_MATERIAL_AMOUNT
-*/
-
-#define AMMO_MATS_BASIC list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 2, \
-)
-
-#define AMMO_MATS_AP list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 0.4, \
-)
-
-#define AMMO_MATS_TEMP list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.4, \
-)
-
-#define AMMO_MATS_EMP list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 0.4, \
-)
-
-#define AMMO_MATS_PHASIC list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.4, \
-)
-
-#define AMMO_MATS_TRAC list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \
- /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \
-)
-
-#define AMMO_MATS_HOMING list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1, \
- /datum/material/silver = SMALL_MATERIAL_AMOUNT * 0.2, \
- /datum/material/gold = SMALL_MATERIAL_AMOUNT * 0.2, \
- /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 0.2, \
- /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 0.2, \
- /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 0.2, \
-)
-
-// for .35 Sol Ripper
-#define AMMO_MATS_RIPPER list( \
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 1.6, \
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.4, \
-)
-
-/obj/item/ammo_casing
- custom_materials = AMMO_MATS_BASIC
-
-/obj/item/ammo_box
- /// When inserted into an ammo workbench, does this ammo box check for parent ammunition to search for subtypes of? Relevant for surplus clips, multi-sprite magazines.
- /// Maybe don't enable this for shotgun ammo boxes.
- var/multitype = TRUE
-
-
-///GUN SPRITE OVERWRITES
-/obj/item/gun/energy/ionrifle
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/energy.dmi'
- lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
-
-/obj/item/gun/energy/ionrifle/carbine
- icon = 'icons/obj/weapons/guns/energy.dmi'
- lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
-
-/obj/item/gun/ballistic/shotgun/automatic/combat
- name = "\improper Peacekeeper combat shotgun"
- desc = "A semi-automatic Nanotrasen Peacekeeper shotgun with tactical furnishing and heavier internals meant for sustained fire. Lacks a threaded barrel."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
- worn_icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_back.dmi'
- lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
- inhand_icon_state = "shotgun_combat"
- inhand_x_dimension = 32
- inhand_y_dimension = 32
-
-// de-overrides this particular gun, it uses the tg file
-/obj/item/gun/ballistic/shotgun/automatic/combat/compact
- icon = 'icons/obj/weapons/guns/ballistic.dmi'
- lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi'
- righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi'
- inhand_x_dimension = 64
- inhand_y_dimension = 64
- worn_icon = null
-
-/obj/item/gun/grenadelauncher
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
- lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
-
-/obj/item/gun/ballistic/automatic/pistol/m1911
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
- inhand_icon_state = "colt"
- lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
-
-/obj/item/gun/ballistic/automatic/c20r
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
-/obj/item/gun/ballistic/automatic/m90
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-/obj/item/gun/ballistic/revolver/c38/detective
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
-/obj/item/gun/ballistic/automatic/pistol/aps
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
-/obj/item/gun/ballistic/automatic/pistol
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
-/obj/item/gun/ballistic/automatic/pistol/deagle/regal
- icon = 'icons/obj/weapons/guns/ballistic.dmi'
-
-/obj/item/gun/energy/e_gun/nuclear
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi'
- ammo_x_offset = 2
- lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_righthand.dmi'
- worn_icon_state = "gun"
- worn_icon = null
-
-/obj/item/gun/energy/e_gun/nuclear/rainbow
- name = "fantastic energy gun"
- desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell. This one seems quite fancy!"
- ammo_type = list(/obj/item/ammo_casing/energy/laser/rainbow, /obj/item/ammo_casing/energy/disabler/rainbow)
-
-/obj/item/ammo_casing/energy/laser/rainbow
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi'
- icon_state = "laser"
- select_name = "kill"
- projectile_type = /obj/projectile/beam/laser/rainbow
-
-/obj/projectile/beam/laser/rainbow
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi'
- icon_state = "laser"
-
-/obj/item/ammo_casing/energy/disabler/rainbow
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi'
- icon_state = "laser"
- select_name = "disable"
- projectile_type = /obj/projectile/beam/disabler/rainbow
-
-/obj/projectile/beam/disabler/rainbow
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/nucgun.dmi'
- icon_state = "laser"
-
-/obj/item/gun/energy/e_gun/nuclear/emag_act(mob/user, obj/item/card/emag/E)
- . = ..()
- if(obj_flags & EMAGGED)
- return FALSE
- if(pin)
- to_chat(user, span_warning("You probably want to do this on a new gun!"))
- return FALSE
- to_chat(user, "T h e g u n s u d d e n l y f e e l s q u i t e f a n t a s t i c ! ")
- new /obj/item/gun/energy/e_gun/nuclear/rainbow(get_turf(user))
- obj_flags |= EMAGGED
- qdel(src)
- return TRUE
-
-/obj/item/gun/energy/e_gun/nuclear/rainbow/update_overlays()
- . = ..()
- . += "[icon_state]_emagged"
-
-/obj/item/gun/energy/e_gun/nuclear/rainbow/emag_act(mob/user, obj/item/card/emag/E)
- return FALSE
-
-//BEAM SOUNDS
-/obj/item/ammo_casing/energy
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/laser.ogg'
-
-/obj/item/ammo_casing/energy/laser/pulse
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/pulse.ogg'
-
-/obj/item/gun/energy/xray
- fire_sound_volume = 100
-
-/obj/item/ammo_casing/energy/xray
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/xray_laser.ogg'
-
-/obj/item/ammo_casing/energy/laser/accelerator
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/laser_cannon_fire.ogg'
-
-/obj/item/gun/ballistic/automatic/sniper_rifle
- name = "sniper rifle"
- desc = "A long ranged weapon that does significant damage. No, you can't quickscope."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi'
- icon_state = "sniper"
- w_class = WEIGHT_CLASS_BULKY
- inhand_icon_state = "sniper"
- worn_icon_state = null
- fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
- fire_sound_volume = 90
- load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
- rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
- suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
- recoil = 2
- weapon_weight = WEAPON_HEAVY
- accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds
- fire_delay = 6 SECONDS
- burst_size = 1
- w_class = WEIGHT_CLASS_NORMAL
- slot_flags = ITEM_SLOT_BACK
- actions_types = list()
- mag_display = TRUE
- suppressor_x_offset = 3
- suppressor_y_offset = 3
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/scope, range_modifier = 2)
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/reset_semicd()
- . = ..()
- if(suppressed)
- playsound(src, 'sound/machines/eject.ogg', 25, TRUE, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0)
- else
- playsound(src, 'sound/machines/eject.ogg', 50, TRUE)
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
- name = "syndicate sniper rifle"
- desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi'
- icon_state = "sniper2"
- worn_icon_state = "sniper"
- fire_delay = 5.5 SECONDS
- can_suppress = TRUE
- can_unsuppress = TRUE
- pin = /obj/item/firing_pin/implant/pindicate
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/modular
- name = "AUS-107 anti-materiel rifle"
- desc = "A devastating Aussec Armory heavy sniper rifle, fitted with a modern scope."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi'
- icon_state = "sniper"
- worn_icon_state = "sniper"
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg'
- suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
- w_class = WEIGHT_CLASS_BULKY
- can_suppress = FALSE
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate
- name = "'Caracal' anti-materiel rifle" //we flop out
- desc = "A sleek, light bullpup .416 Stabilis sniper rifle with a reciprocating barrel, nicknamed 'Caracal' by Scarborough Arms. Its compact folding parts make it able to fit into a backpack, and its modular barrel can have a suppressor installed within it rather than as a muzzle extension. Its advanced scope accounts for all ballistic inaccuracies of a reciprocating barrel."
- icon_state = "sysniper"
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg'
- suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
- fire_delay = 4 SECONDS //Delay reduced thanks to recoil absorption
- burst_size = 0.5
- recoil = 1
- can_suppress = TRUE
- can_unsuppress = TRUE
- weapon_weight = WEAPON_LIGHT
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/modular/syndicate/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SCARBOROUGH)
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/modular/blackmarket //Normal sniper but epic
- name = "SA-107 anti-materiel rifle"
- desc = "An illegal Scarborough Arms rendition of an Aussec Armory sniper rifle. This one has been fitted with a heavy duty scope, a sturdier stock, and has a removable muzzle brake that allows easy attachment of suppressors."
- icon_state = "sniper2"
- fire_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle.ogg'
- suppressed_sound = 'modular_skyrat/modules/aesthetics/guns/sound/sniperrifle_s.ogg'
- fire_sound_volume = 90
- vary_fire_sound = FALSE
- load_sound = 'sound/weapons/gun/sniper/mag_insert.ogg'
- rack_sound = 'sound/weapons/gun/sniper/rack.ogg'
- w_class = WEIGHT_CLASS_NORMAL
- can_suppress = TRUE
- can_unsuppress = TRUE
- recoil = 1.8
- weapon_weight = WEAPON_HEAVY
- accepted_magazine_type = /obj/item/ammo_box/magazine/sniper_rounds
- fire_delay = 55 //Slightly smaller than standard sniper
- burst_size = 1
- slot_flags = ITEM_SLOT_BACK
- mag_display = TRUE
-
-/obj/item/gun/ballistic/automatic/ar/modular
- name = "\improper NT ARG-63"
- desc = "Nanotrasen's prime ballistic option based on the Stoner design, fitted with a light polymer frame and other tactical furniture, and chambered in .277 Aestus - nicknamed 'Boarder' by Special Operations teams."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns_gubman2.dmi'
- icon_state = "arg"
- inhand_icon_state = "arg"
- can_suppress = FALSE
-
-/obj/item/gun/ballistic/automatic/surplus
- name = "\improper Type-69 surplus rifle"
- desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing."
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/guns.dmi'
-
-// GUBMAN3 - FULL BULLET RENAME
-// i loathe the above
-
-// overrides for 10mm ammo in modular_skyrat\modules\sec_haul\code\guns\bullets.dm
-
-// overrides for .310 Strilka-derived ammo, e.g. lionhunter ammo, because you don't want to give security the ability to print infinite wallhack ammo, right?
-/obj/item/ammo_casing/strilka310/lionhunter
- name = "hunter's rifle round"
- can_be_printed = FALSE // trust me bro you dont wanna give security homing wallhack Better Rubbers
-
-/obj/item/ammo_casing/strilka310/enchanted
- name = "enchanted rifle round"
- can_be_printed = FALSE // these are Really Really Better Rubbers
-
-// overrides for tgcode's .223 (formerly 5.56), used in the M90-gl - renamed to .277 Aestus
-/obj/item/ammo_casing/a223
- name = ".277 Aestus casing"
- desc = "A .277 bullet casing."
-
-/obj/item/ammo_casing/a223/phasic
- name = ".277 Aestus phasic casing"
- desc = "A .277 Aestus bullet casing.\
- \
- PHASIC: Ignores all surfaces except organic matter. "
- advanced_print_req = TRUE
- custom_materials = AMMO_MATS_PHASIC
-
-// shotgun ammo overrides moved to modular_skyrat\modules\shotgunrebalance\code\shotgun.dm
-
-// overrides for tgcode .50cal, used in their sniper/anti-materiel rifles
-/obj/item/ammo_casing/p50
- name = ".416 Stabilis casing"
- desc = "A .416 bullet casing."
- advanced_print_req = TRUE // you are NOT printing more ammo for this without effort.
- // then again the offstations with ammo printers and sniper rifles come with an ammo disk anyway, so
-
-/obj/item/ammo_casing/p50/surplus
- name = ".416 Stabilis surplus casing"
- desc = "A .416 bullet casing. Intentionally underloaded, but still quite painful to be shot with.\
- \
- SURPLUS/UNDERLOAD: Lacks armor penetration capabilities, contact-stun, or innate dismemberment ability. Still incredibly painful to be hit by. "
- projectile_type = /obj/projectile/bullet/p50/surplus
-
-/obj/item/ammo_casing/p50/disruptor
- name = ".416 Stabilis disruptor casing"
- desc = "A .416 bullet casing. Specializes in sending the target to sleep rather than hell, unless they're synthetic. Then they probably go to hell anyway.\
- \
- DISRUPTOR: Forces humanoid targets to sleep, does heavy damage against cyborgs, EMPs struck targets. "
-
-/obj/item/ammo_casing/p50/incendiary
- name = ".416 Stabilis precision incendiary casing"
- desc = "A .416 bullet casing. Made with an agitated-plasma tip, for making people regret being alive.\
- \
- PRECISION INCENDIARY: Lacks innate dismemberment ability and contact-stun, suffers against mechanized armor. Sets people on fire. "
- projectile_type = /obj/projectile/bullet/p50/incendiary
-
-/obj/item/ammo_casing/p50/penetrator
- name = ".416 Stabilis penetrator sabot casing"
- desc = "A .416 bullet casing. Loaded with a hardened sabot and packed with extra propellant. \
- Designed to go through basically everything. A label warns of overpressure risk, and to not use the round if \
- a given weapon cannot handle pressures greater than 85000 PSI.\
- \
- PENETRATOR: Goes through basically everything. Lacks innate dismemberment ability and contact-stun capabilities. "
-
-/obj/item/ammo_casing/p50/marksman
- name = ".416 Stabilis marksman hyperkinetic casing"
- desc = "A .416 bullet casing. Loaded with a hyperkinetic bullet that ignores mundane things like \"travel time\" \
- and a concerning amount of experimental propellant. A label warns of overpressure risk, and to not use the round if \
- a given weapon cannot handle pressures greater than 95000 PSI.\
- \
- MARKSMAN: Bullets have no travel time, and can ricochet once. Does slightly less damage, lacks innate dismemberment and contact-stun capabilities. "
- projectile_type = /obj/projectile/bullet/p50/marksman
-
-// overrides for tgcode 4.6x30mm, used in the WT-550
-/obj/item/ammo_casing/c46x30mm
- name = "8mm Usurpator bullet casing"
- desc = "An 8mm bullet casing."
-
-/obj/item/ammo_casing/c46x30mm/ap
- name = "8mm Usurpator armor-piercing bullet casing"
- desc = "An 8mm armor-piercing bullet casing.\
- \
- ARMOR PIERCING: Increased armor piercing capabilities. What did you expect? "
- custom_materials = AMMO_MATS_AP
- advanced_print_req = TRUE
-
-/obj/item/ammo_casing/c46x30mm/inc
- name = "8mm Usurpator incendiary bullet casing"
- desc = "An 8mm incendiary bullet casing.\
- \
- INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
- custom_materials = AMMO_MATS_TEMP
- advanced_print_req = TRUE
-
-// overrides for tgcode .45, used in the M1911 and C20-r
-/obj/item/ammo_casing/c45
- name = ".460 Ceres bullet casing"
- desc = "A .460 bullet casing."
-
-/obj/item/ammo_casing/c45/ap
- name = ".460 Ceres armor-piercing bullet casing"
- desc = "An armor-piercing .460 bullet casing.\
- \
- ARMOR PIERCING: Increased armor piercing capabilities. What did you expect? "
- custom_materials = AMMO_MATS_AP
- advanced_print_req = TRUE
-
-/obj/item/ammo_casing/c45/inc
- name = ".460 Ceres incendiary bullet casing"
- desc = "An incendiary .460 bullet casing.\
- \
- INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
- custom_materials = AMMO_MATS_TEMP
- advanced_print_req = TRUE
-
-// overrides for .50AE, used in the deagle
-/obj/item/ammo_casing/a50ae
- name = ".454 Trucidator bullet casing"
- desc = "A .454 Trucidator bullet casing. Extremely powerful.\
- \
- HAND CANNON: Fired out of a handgun, deals disproportionately large damage. "
-
-// overrides for .357, used in the .357 revolver
-/obj/item/ammo_casing/a357 //We can keep the Magnum classic.
- name = ".357 bullet casing"
- desc = "A .357 bullet casing.\
- \
- HAND CANNON: Fired out of a handgun, deals disproportionately large damage. "
-
-/obj/item/ammo_casing/a357/match
- desc = "A .357 bullet casing, manufactured to exceedingly high standards.\
- \
- MATCH: Ricochets everywhere. Like crazy. "
-
-/obj/item/ammo_casing/a357/phasic
- desc = "A .357 phasic bullet casing.\
- \
- PHASIC: Ignores all surfaces except organic matter. "
- advanced_print_req = TRUE
- custom_materials = AMMO_MATS_PHASIC
-
-/obj/item/ammo_casing/a357/heartseeker
- desc = "A .357 heartseeker bullet casing.\
- \
- HEARTSEEKER: Has homing capabilities, methodology unknown. "
- advanced_print_req = TRUE
- custom_materials = AMMO_MATS_HOMING // meme ammo. meme print cost
-
-// overrides for .38 Special, used in the .38 revolvers, including the det's
-/obj/item/ammo_box/c38
- caliber = CALIBER_38
-
-/obj/item/ammo_casing/c38/trac
- custom_materials = AMMO_MATS_TRAC
- advanced_print_req = TRUE
-
-/obj/item/ammo_casing/c38/dumdum
- advanced_print_req = TRUE
-
-/obj/item/ammo_casing/c38/hotshot
- custom_materials = AMMO_MATS_TEMP
- advanced_print_req = TRUE
-
-/obj/item/ammo_casing/c38/iceblox
- custom_materials = AMMO_MATS_TEMP // plasma's wack.
- advanced_print_req = TRUE
-
-// The ones above are the casings for the ammo, whereas the ones below are the actual projectiles that give you feedback when you're shot
-
-/obj/projectile/bullet/a223
- name = ".277 Aestus bullet"
-
-/obj/projectile/bullet/a223/phasic
- name = ".277 phasic bullet"
-
-/obj/projectile/bullet/c9mm
- name = "9x25mm bullet"
-
-/obj/projectile/bullet/c9mm/ap
- name = "9x25mm armor-piercing bullet"
-
-/obj/projectile/bullet/c9mm/hp
- name = "9x25mm fragmenting bullet"
-
-/obj/projectile/bullet/incendiary/c9mm
- name = "9x25mm incendiary bullet"
-
-/obj/projectile/bullet/c45
- name = ".460 bullet"
-
-/obj/projectile/bullet/c45/ap
- name = ".460 armor-piercing bullet"
-
-/obj/projectile/bullet/incendiary/c45
- name = ".460 incendiary bullet"
-
-/obj/projectile/bullet/c46x30mm
- name = "8mm Usurpator bullet"
-
-/obj/projectile/bullet/c46x30mm/ap
- name = "8mm armor-piercing bullet"
-
-/obj/projectile/bullet/incendiary/c46x30mm
- name = "8mm incendiary bullet"
-
-/obj/projectile/bullet/p50
- name = ".416 Stabilis bullet"
-
-/obj/projectile/bullet/p50/disruptor
- name = ".416 disruptor bullet"
-
-/obj/projectile/bullet/p50/penetrator
- name = ".416 penetrator bullet"
-
-/obj/projectile/bullet/a50ae
- name = ".454 Trucidator bullet"
-
-
-// MAGAZINES UPDATED TO MATCH STUFF
-
-/obj/item/ammo_box/magazine/wt550m9
- name = "\improper WT-550 magazine"
- desc = "A 20-round toploaded 8mm Usurpator magazine that fits neatly in the WT-550."
-
-/obj/item/ammo_box/magazine/wt550m9/wtap
- name = "\improper WT-550 AP magazine"
-
-/obj/item/ammo_box/magazine/wt550m9/wtic
- name = "\improper WT-550 IND magazine"
-
-/obj/item/ammo_box/magazine/smgm45
- name = ".460 Ceres SMG magazine"
- desc = "A magazine chambered for .460 meant to fit in submachine guns."
-
-/obj/item/ammo_box/magazine/smgm45/ap
- name = ".460 Ceres AP SMG magazine"
-
-/obj/item/ammo_box/magazine/smgm45/incen
- name = ".460 Ceres IND SMG magazine"
-
-/obj/item/ammo_box/magazine/tommygunm45
- name = "\improper Tommy Gun .460 Ceres drum"
- desc = "A disc magazine chambered for .460 Ceres."
-
-/obj/item/ammo_box/magazine/m556
- name = ".277 Aestus toploading magazine"
- desc = "A toploading magazine chambered for .277 Aestus."
-
-/obj/item/ammo_box/magazine/m556/phasic
- name = ".277 PHASE toploading magazine"
-
-/obj/item/ammo_box/magazine/sniper_rounds
- name = "anti-materiel rifle magazine"
- desc = "A heavy magazine chambered for .416 Stabilis."
-
-/obj/item/ammo_box/magazine/sniper_rounds/soporific
- desc = "A magazine with soporific .416 Stabilis ammo, designed for happy days and dead quiet nights."
-
-/obj/item/ammo_box/magazine/sniper_rounds/penetrator
- name = "anti-materiel rifle ++P magazine"
- desc = "A heavy magazine with over the top, overpressurized, and frankly over the top .416 penetrator ammo."
-
-/obj/item/ammo_box/magazine/m50
- name = ".454 Trucidator handcannon magazine"
- desc = "An absurdly THICK magazine possibly meant for a heavy hitting pistol, if you can call it that."
diff --git a/modular_skyrat/modules/aesthetics/guns/code/magazine.dm b/modular_skyrat/modules/aesthetics/guns/code/magazine.dm
deleted file mode 100644
index f06307fc16d..00000000000
--- a/modular_skyrat/modules/aesthetics/guns/code/magazine.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/item/ammo_box/magazine/m9mm
- name = "pistol magazine (9x25mm)"
- multiple_sprites = AMMO_BOX_PER_BULLET
- icon = 'modular_skyrat/modules/aesthetics/guns/icons/magazine.dmi'
diff --git a/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm b/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm
deleted file mode 100644
index 853560c7ea0..00000000000
--- a/modular_skyrat/modules/aesthetics/heater/code/spaceheater.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/space_heater
- icon = 'modular_skyrat/modules/aesthetics/heater/icons/heater.dmi'
diff --git a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm b/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm
deleted file mode 100644
index a74064d86fe..00000000000
--- a/modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/rnd/experimentor
- icon = 'modular_skyrat/modules/aesthetics/heavy_lathe/heavy_lathe.dmi'
diff --git a/modular_skyrat/modules/aesthetics/implanter/implanter.dm b/modular_skyrat/modules/aesthetics/implanter/implanter.dm
deleted file mode 100644
index a30292b6f2a..00000000000
--- a/modular_skyrat/modules/aesthetics/implanter/implanter.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/implanter
- icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi'
-
-/obj/item/implantpad
- icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi'
-
-/obj/item/implantcase
- icon = 'modular_skyrat/modules/aesthetics/implanter/implanter.dmi'
diff --git a/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm b/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm
deleted file mode 100644
index e9d30a844ca..00000000000
--- a/modular_skyrat/modules/aesthetics/intercom/code/intercom.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/item/radio/intercom
- icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi'
-
-/obj/item/wallframe/intercom
- icon = 'modular_skyrat/modules/aesthetics/intercom/icons/intercom.dmi'
diff --git a/modular_skyrat/modules/aesthetics/janitor/janitor.dm b/modular_skyrat/modules/aesthetics/janitor/janitor.dm
deleted file mode 100644
index fd06cd22d26..00000000000
--- a/modular_skyrat/modules/aesthetics/janitor/janitor.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/obj/structure/mop_bucket
- icon = 'modular_skyrat/modules/aesthetics/janitor/janitor.dmi'
-
-// This isn't custom though.
-/obj/structure/mop_bucket/janitorialcart
- icon = 'icons/obj/service/janitor.dmi'
-
-/obj/item/reagent_containers/cup/bucket
- icon = 'modular_skyrat/modules/aesthetics/janitor/janitor.dmi'
diff --git a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm b/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm
deleted file mode 100644
index 4324487db65..00000000000
--- a/modular_skyrat/modules/aesthetics/kitchen/kitchen.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/obj/structure/kitchenspike_frame
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-/obj/structure/kitchenspike
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-/obj/machinery/processor
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-/obj/machinery/deepfryer
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-/obj/machinery/grill
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-/obj/machinery/gibber
- icon = 'modular_skyrat/modules/aesthetics/kitchen/kitchen.dmi'
-
-//Different icon file, but it will still go in the kitchen folder!!!
-/obj/machinery/microwave
- icon = 'modular_skyrat/modules/aesthetics/kitchen/microwave.dmi'
-
-/obj/structure/showcase/machinery/microwave
- icon = 'modular_skyrat/modules/aesthetics/kitchen/microwave.dmi'
-
-//Skyrat Coffee Maker Icons
-/obj/machinery/coffeemaker
- icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
-
-/obj/item/reagent_containers/cup/coffeepot
- icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
- fill_icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
- fill_icon_state = "coffeepot"
-
-/obj/item/coffee_cartridge
- icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
-
-/obj/item/blank_coffee_cartridge
- icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
-
-/obj/item/storage/fancy/coffee_cart_rack
- icon = 'modular_skyrat/modules/aesthetics/kitchen/coffeemaker.dmi'
diff --git a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm b/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm
deleted file mode 100644
index bdf0001cf17..00000000000
--- a/modular_skyrat/modules/aesthetics/lightswitch/code/lightswitch.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/obj/machinery/light_switch
- icon = 'modular_skyrat/modules/aesthetics/lightswitch/icons/lightswitch.dmi'
-
-/obj/machinery/light_switch/interact(mob/user)
- . = ..()
- playsound(src, 'modular_skyrat/modules/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1)
-
-#ifndef UNIT_TESTS
-/obj/machinery/light_switch/LateInitialize()
- . = ..()
- if(prob(50) && area.lightswitch) //50% chance for area to start with lights off.
- turn_off()
-#endif
-
-/obj/machinery/light_switch/proc/turn_off()
- if(!area.lightswitch)
- return
- area.lightswitch = FALSE
- area.update_icon()
-
- for(var/obj/machinery/light_switch/light_switch in area)
- light_switch.update_icon()
-
- area.power_change()
diff --git a/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm b/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm
deleted file mode 100644
index 96cc2afc816..00000000000
--- a/modular_skyrat/modules/aesthetics/morgue/code/morgue.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/structure/bodycontainer
- icon = 'modular_skyrat/modules/aesthetics/morgue/icons/morgue.dmi'
diff --git a/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm b/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm
deleted file mode 100644
index 0141e9c925a..00000000000
--- a/modular_skyrat/modules/aesthetics/plasticflaps/code/plasticflaps.dm
+++ /dev/null
@@ -1,3 +0,0 @@
-/obj/structure/plasticflaps
- icon = 'modular_skyrat/modules/aesthetics/plasticflaps/icons/plasticflaps.dmi'
-
diff --git a/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm b/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm
deleted file mode 100644
index 2f636e7e0fc..00000000000
--- a/modular_skyrat/modules/aesthetics/shieldgen/code/shieldgen.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/power/shieldwallgen
- icon = 'modular_skyrat/modules/aesthetics/shieldgen/icons/shieldgen.dmi'
diff --git a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm b/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm
deleted file mode 100644
index f23191eab1c..00000000000
--- a/modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/structure/dresser
- icon = 'modular_skyrat/modules/aesthetics/stationobjs/stationobjs.dmi'
diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dm b/modular_skyrat/modules/aesthetics/storage/storage.dm
deleted file mode 100644
index 92bd763cd90..00000000000
--- a/modular_skyrat/modules/aesthetics/storage/storage.dm
+++ /dev/null
@@ -1,140 +0,0 @@
-/obj/item/storage/medkit/emergency
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
-
-/obj/item/borg/upgrade/rped
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
-
-/obj/item/storage/part_replacer
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
-
-/obj/item/storage/part_replacer/bluespace
- icon = 'icons/obj/storage/storage.dmi'
-
-/obj/item/storage/part_replacer/cyborg
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
-
-
-
-/*
-// Boxes
-*/
-/obj/item/storage/box
- icon = 'modular_skyrat/modules/aesthetics/storage/storage.dmi'
-
-/obj/item/storage/box/donkpockets
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/survival/syndie
- icon_state = "syndiebox"
-
-/obj/item/storage/box/clown
- icon_state = "hugbox"
-
-/obj/item/storage/box/cyber_implants
- illustration = null //Included in the sprite
-
-/obj/item/storage/box/mothic_rations
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/mothic_goods
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/mothic_cans_sauces
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/tiziran_meats
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/tiziran_cans
- icon = 'icons/obj/storage/box.dmi'
-
-/obj/item/storage/box/tiziran_goods
- icon = 'icons/obj/storage/box.dmi'
-
-
-/*
-// Medical
-*/
-/obj/item/storage/box/swab
- icon_state = "medbox"
-
-/obj/item/storage/box/masks
- icon_state = "medbox"
-
-/obj/item/storage/box/bodybags
- icon_state = "medbox"
-
-/obj/item/storage/box/survival/medical
- icon_state = "medbox"
-
-/obj/item/storage/box/syringes
- icon_state = "medbox"
-
-/obj/item/storage/box/medipens
- icon_state = "medbox"
-
-/obj/item/storage/box/medigels
- icon_state = "medbox"
-
-/obj/item/storage/box/injectors
- icon_state = "medbox"
-
-/obj/item/storage/box/pillbottles
- icon_state = "medbox"
-
-/obj/item/storage/box/silver_sulf
- icon_state = "medbox"
-
-/*
-// Engineering
-*/
-/obj/item/storage/box/metalfoam
- icon_state = "engibox"
-
-/obj/item/storage/box/smart_metal_foam
- icon_state = "engibox"
-
-/obj/item/storage/box/material
- icon_state = "engibox"
-
-/*
-// Security
-*/
-/obj/item/storage/box/rubbershot
- icon_state = "secbox_xl"
- illustration = "rubbershot"
-
-/obj/item/storage/box/lethalshot
- icon_state = "secbox_xl"
- illustration = "buckshot"
-
-/obj/item/storage/box/beanbag
- icon_state = "secbox_xl"
- illustration = "beanbag"
-
-/obj/item/storage/box/breacherslug
- icon_state = "secbox_xl"
- illustration = "breacherslug"
-
-/obj/item/storage/box/evidence
- icon_state = "secbox"
- illustration = "evidence"
-
-/obj/item/storage/box/rxglasses/spyglasskit
- icon_state = "secbox"
-
-/obj/item/storage/box/holobadge
- icon_state = "secbox"
- illustration = "holobadge"
-
-/obj/item/storage/box/survival/security
- icon_state = "secbox"
-
-/obj/item/storage/box/emps
- icon_state = "syndiebox"
-
-/obj/item/storage/box/chemimp
- icon_state = "medbox"
-
-/obj/item/storage/box/exileimp
- icon_state = "secbox"
diff --git a/modular_skyrat/modules/aesthetics/telescience/telescience.dm b/modular_skyrat/modules/aesthetics/telescience/telescience.dm
deleted file mode 100644
index 739038a3f03..00000000000
--- a/modular_skyrat/modules/aesthetics/telescience/telescience.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/item/gps
- icon = 'modular_skyrat/modules/aesthetics/telescience/telescience.dmi'
diff --git a/modular_skyrat/modules/aesthetics/tools/code/tools.dm b/modular_skyrat/modules/aesthetics/tools/code/tools.dm
deleted file mode 100644
index 46afd034867..00000000000
--- a/modular_skyrat/modules/aesthetics/tools/code/tools.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/item/weldingtool
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/crowbar
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/crowbar/power
- lefthand_file = 'modular_skyrat/modules/aesthetics/tools/tools_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/aesthetics/tools/tools_righthand.dmi'
-
-/obj/item/crowbar/power/syndicate //Because we have a clearly different color JOL than upstream, this needs to be specifically different now
- inhand_icon_state = "jaws_syndie"
-
-/obj/item/crowbar/large/heavy
- icon = 'icons/obj/tools.dmi'
-
-/obj/item/crowbar/large/old
- icon = 'icons/obj/tools.dmi'
-
-/obj/item/wrench
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/wrench/caravan
- icon = 'icons/obj/tools.dmi'
-
-/obj/item/screwdriver/power
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/construction/plumbing //This icon override NEEDS to be here for the subtypes
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/construction/rcd/arcd
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
-
-/obj/item/inducer
- icon = 'modular_skyrat/modules/aesthetics/tools/tools.dmi'
diff --git a/modular_skyrat/modules/aesthetics/walls/code/walls.dm b/modular_skyrat/modules/aesthetics/walls/code/walls.dm
deleted file mode 100644
index 2b1ce7d320a..00000000000
--- a/modular_skyrat/modules/aesthetics/walls/code/walls.dm
+++ /dev/null
@@ -1,80 +0,0 @@
-/turf/closed/wall
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi'
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/turf/closed/wall/r_wall
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi'
-
-/turf/closed/wall/rust
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi'
- icon_state = "wall-0"
- base_icon_state = "wall"
-
-/turf/closed/wall/r_wall/rust
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi'
- icon_state = "reinforced_wall-0"
- base_icon_state = "reinforced_wall"
- base_decon_state = "r_wall"
-
-/turf/closed/wall/material
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi'
- icon_state = "wall-0"
- base_icon_state = "wall"
-
-// Modular false wall overrides
-/obj/structure/falsewall
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi'
- fake_icon = 'modular_skyrat/modules/aesthetics/walls/icons/wall.dmi'
-
-/obj/structure/falsewall/reinforced
- name = "reinforced wall"
- desc = "A huge chunk of reinforced metal used to separate rooms."
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi'
- fake_icon = 'modular_skyrat/modules/aesthetics/walls/icons/reinforced_wall.dmi'
-
-/obj/structure/falsewall/material
- icon = 'modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi'
- icon_state = "wall-open"
- base_icon_state = "wall"
- fake_icon = 'modular_skyrat/modules/aesthetics/walls/icons/material_wall.dmi'
-
-// TG false walls, overridden back to the TG file because we overrode the base falsewall with our aesthetic icon. New ones from TG will have to be added here.
-// Yes, this is dumb
-/obj/structure/falsewall/uranium
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/gold
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/silver
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/diamond
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/plasma
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/bananium
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/sandstone
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/wood
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/bamboo
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/iron
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/abductor
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/titanium
- icon = 'icons/turf/walls/false_walls.dmi'
-
-/obj/structure/falsewall/plastitanium
- icon = 'icons/turf/walls/false_walls.dmi'
diff --git a/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm b/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm
deleted file mode 100644
index 325bcea5a53..00000000000
--- a/modular_skyrat/modules/aesthetics/washing_machine/code/washing_machine.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/machinery/washing_machine
- icon = 'modular_skyrat/modules/aesthetics/washing_machine/icons/washing_machine.dmi'
diff --git a/modular_skyrat/modules/aesthetics/windows/code/windows.dm b/modular_skyrat/modules/aesthetics/windows/code/windows.dm
deleted file mode 100644
index 08b57e00b64..00000000000
--- a/modular_skyrat/modules/aesthetics/windows/code/windows.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/structure/window/fulltile
- icon = 'modular_skyrat/modules/aesthetics/windows/icons/window.dmi'
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/obj/structure/window/reinforced/fulltile
- icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window.dmi'
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/obj/structure/window/reinforced/tinted/fulltile
- icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window_tinted.dmi'
- icon_state = "reinforced_window-0"
- base_icon_state = "reinforced_window"
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/obj/structure/window/plasma/fulltile
- icon = 'modular_skyrat/modules/aesthetics/windows/icons/window_plasma.dmi'
- icon_state = "window-0"
- base_icon_state = "window"
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/obj/structure/window/reinforced/plasma/fulltile
- icon = 'modular_skyrat/modules/aesthetics/windows/icons/r_window_plasma.dmi'
- icon_state = "reinforced_window-0"
- base_icon_state = "reinforced_window"
- canSmoothWith = SMOOTH_GROUP_AIRLOCK + SMOOTH_GROUP_WINDOW_FULLTILE + SMOOTH_GROUP_WALLS
-
-/obj/structure/window/reinforced/fulltile/ice
diff --git a/modular_skyrat/modules/airlock_override/readme.md b/modular_skyrat/modules/airlock_override/readme.md
deleted file mode 100644
index a6739868f4f..00000000000
--- a/modular_skyrat/modules/airlock_override/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/16787
-
-## Title:
-Engineering override for airlocks on orange alert
-MODULE ID: AIRLOCK_OVERRIDE
-
-### Description:
-Adds functionality to the airlocks so that when the alert level is set to orange, engineers receive expanded access so they aren't stuck at an airlock when disaster happens.
-
-### TG Proc/File Changes:
-code/game/machinery/computer/communications.dm
-code/modules/security_levels/keycard_authentication.dm
-tgui/packages/tgui/interfaces/CommunicationsConsole.js
-tgui/packages/tgui/interfaces/KeycardAuth.js
-
-### Defines:
-AIRLOCK_LIGHT_ENGINEERING in \Skyrat-tg\modular_skyrat\modules\aesthetics\airlock\code\airlock.dm
-AIRLOCK_ENGINEERING_LIGHT_COLOR in \Skyrat-tg\modular_skyrat\modules\aesthetics\airlock\code\airlock.dm
-
-### Credits:
-LT3
diff --git a/modular_skyrat/modules/alerts/code/default_announcer.dm b/modular_skyrat/modules/alerts/code/default_announcer.dm
deleted file mode 100644
index 86add70db58..00000000000
--- a/modular_skyrat/modules/alerts/code/default_announcer.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/datum/centcom_announcer/default
- welcome_sounds = list('sound/ai/default/welcome.ogg')
- alert_sounds = list('modular_skyrat/modules/alerts/sound/alerts/alert2.ogg')
- command_report_sounds = list('modular_skyrat/modules/alerts/sound/alerts/commandreport.ogg')
- event_sounds = list(
- ANNOUNCER_AIMALF = 'sound/ai/default/aimalf.ogg',
- ANNOUNCER_ALIENS = 'modular_skyrat/modules/alerts/sound/alerts/lifesigns.ogg',
- ANNOUNCER_ANIMES = 'modular_skyrat/modules/alerts/sound/alerts/animes.ogg',
- ANNOUNCER_INTERCEPT = 'modular_skyrat/modules/alerts/sound/alerts/alert2.ogg',
- ANNOUNCER_IONSTORM = 'modular_skyrat/modules/alerts/sound/alerts/ionstorm.ogg',
- ANNOUNCER_METEORS = 'modular_skyrat/modules/alerts/sound/alerts/meteors.ogg',
- ANNOUNCER_OUTBREAK5 = 'modular_skyrat/modules/alerts/sound/alerts/outbreak5.ogg',
- ANNOUNCER_OUTBREAK6 = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg',
- ANNOUNCER_OUTBREAK7 = 'modular_skyrat/modules/alerts/sound/alerts/outbreak7.ogg',
- ANNOUNCER_POWEROFF = 'modular_skyrat/modules/alerts/sound/alerts/poweroff.ogg',
- ANNOUNCER_POWERON = 'modular_skyrat/modules/alerts/sound/alerts/poweron.ogg',
- ANNOUNCER_RADIATION = 'modular_skyrat/modules/alerts/sound/alerts/radiation.ogg',
- ANNOUNCER_RADIATIONPASSED = 'modular_skyrat/modules/alerts/sound/alerts/radpassed.ogg',
- ANNOUNCER_SHUTTLECALLED = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_called.ogg',
- ANNOUNCER_SHUTTLEDOCK = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_docked.ogg',
- ANNOUNCER_SHUTTLERECALLED = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_recalled.ogg',
- ANNOUNCER_SHUTTLELEFT = 'modular_skyrat/modules/alerts/sound/alerts/crew_shuttle_left.ogg',
- ANNOUNCER_ANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/alert2.ogg',
- ANNOUNCER_GRAVANOMALIES= 'modular_skyrat/modules/alerts/sound/alerts/gravanomalies.ogg',
- ANNOUNCER_SPANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/wormholes.ogg',
- ANNOUNCER_VORTEXANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/vortex.ogg',
- ANNOUNCER_MASSIVEBSPACEANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/bluespace_anomalies.ogg',
- ANNOUNCER_TRANSLOCATION = 'modular_skyrat/modules/alerts/sound/alerts/transolcation.ogg',
- ANNOUNCER_FLUXANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/flux.ogg',
- ANNOUNCER_PYROANOMALIES = 'modular_skyrat/modules/alerts/sound/alerts/pyr_anomalies.ogg',
- ANNOUNCER_CARP = 'modular_skyrat/modules/alerts/sound/alerts/carps.ogg',
- ANNOUNCER_BLUESPACEARTY = 'modular_skyrat/modules/alerts/sound/alerts/artillery.ogg',
- ANNOUNCER_CAPTAIN = 'modular_skyrat/modules/alerts/sound/alerts/announce.ogg',
- ANNOUNCER_GRAVGENOFF = 'modular_skyrat/modules/alerts/sound/alerts/gravityoff.ogg',
- ANNOUNCER_GRAVGENON = 'modular_skyrat/modules/alerts/sound/alerts/gravityon.ogg',
- ANNOUNCER_GREYTIDE = 'modular_skyrat/modules/alerts/sound/alerts/greytide.ogg',
- ANNOUNCER_COMMSBLACKOUT = 'modular_skyrat/modules/alerts/sound/alerts/commsblackout.ogg',
- ANNOUNCER_ELECTRICALSTORM = 'modular_skyrat/modules/alerts/sound/alerts/estorm.ogg',
- ANNOUNCER_BRANDINTELLIGENCE = 'modular_skyrat/modules/alerts/sound/alerts/rampant_brand_int.ogg',
- ANNOUNCER_SPOOKY = 'modular_skyrat/modules/alerts/sound/misc/admin_horror_music.ogg',
- ANNOUNCER_ERTYES = 'modular_skyrat/modules/alerts/sound/alerts/yesert.ogg',
- ANNOUNCER_MUTANTS = 'modular_skyrat/modules/alerts/sound/alerts/hazdet.ogg',
- ANNOUNCER_KLAXON = 'modular_skyrat/modules/black_mesa/sound/siren1_long.ogg',
- ANNOUNCER_ICARUS = 'modular_skyrat/modules/assault_operatives/sound/icarus_alarm.ogg',
- ANNOUNCER_NRI_RAIDERS = 'modular_skyrat/modules/encounters/sounds/morse.ogg',
- ANNOUNCER_DEPARTMENTAL = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg',
- ANNOUNCER_SHUTTLE = 'modular_skyrat/modules/alerts/sound/alerts/alert3.ogg',
- )
diff --git a/modular_skyrat/modules/alerts/code/security_level_datums.dm b/modular_skyrat/modules/alerts/code/security_level_datums.dm
deleted file mode 100644
index a80ce9a519b..00000000000
--- a/modular_skyrat/modules/alerts/code/security_level_datums.dm
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Contains some overrides and our sec levels.
- */
-
-/datum/security_level/green
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/green.ogg'
-
-/datum/security_level/blue
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/blue.ogg'
-
-/datum/security_level/red
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/red.ogg'
-
-/datum/security_level/delta
- announcement_color = "pink"
- lowering_to_configuration_key = /datum/config_entry/string/alert_delta_downto
- elevating_to_configuration_key = /datum/config_entry/string/alert_delta_upto
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/delta.ogg'
- looping_sound = 'modular_skyrat/modules/alerts/sound/misc/alarm_delta.ogg'
- looping_sound_interval = 8 SECONDS
-
-
-/**
- * Violet
- *
- * Medical emergency
- */
-/datum/security_level/violet
- name = "violet"
- announcement_color = "purple"
- number_level = SEC_LEVEL_VIOLET
- lowering_to_configuration_key = /datum/config_entry/string/alert_violet_downto
- elevating_to_configuration_key = /datum/config_entry/string/alert_violet_upto
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/violet.ogg'
- shuttle_call_time_mod = 0.75
-
-/**
- * Orange
- *
- * Engineering emergency
- */
-/datum/security_level/orange
- name = "orange"
- announcement_color = "orange"
- number_level = SEC_LEVEL_ORANGE
- lowering_to_configuration_key = /datum/config_entry/string/alert_orange_downto
- elevating_to_configuration_key = /datum/config_entry/string/alert_orange_upto
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/orange.ogg'
- shuttle_call_time_mod = 0.75
-
-/**
- * Amber
- *
- * Securty emergency
- */
-
-/datum/security_level/amber
- name = "amber"
- announcement_color = "yellow"
- number_level = SEC_LEVEL_AMBER
- lowering_to_configuration_key = /datum/config_entry/string/alert_amber_downto
- elevating_to_configuration_key = /datum/config_entry/string/alert_amber_upto
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/amber.ogg'
- shuttle_call_time_mod = 0.5
-
-
-/**
- * Gamma
- *
- * XK-Class EOW Event
- */
-/datum/security_level/gamma
- name = "gamma"
- announcement_color = "pink"
- number_level = SEC_LEVEL_GAMMA
- elevating_to_configuration_key = /datum/config_entry/string/alert_gamma
- shuttle_call_time_mod = 0.25
- sound = 'modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg'
- looping_sound = 'modular_skyrat/modules/alerts/sound/security_levels/gamma_alert.ogg'
- looping_sound_interval = 13 SECONDS
diff --git a/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm b/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm
deleted file mode 100644
index 00c2489f4aa..00000000000
--- a/modular_skyrat/modules/alt_vox/code/voc_sounds_mil.dm
+++ /dev/null
@@ -1,294 +0,0 @@
-#ifdef AI_VOX
-
-GLOBAL_LIST_INIT(vox_sounds_mil, list(
- "," = 'modular_skyrat/modules/alt_vox/sound/vox_mil/_comma.ogg',
- "." = 'modular_skyrat/modules/alt_vox/sound/vox_mil/_period.ogg',
- "error_beep" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/00_error_beep01.ogg',
- "signon_beep" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/00_signon_beep01.ogg',
- "hostile_takeover" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/c1a3_05_switchover.ogg',
- "bloop" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bloop.ogg',
- "buzwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/buzwarn.ogg',
- "dadeda" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/dadeda.ogg',
- "deeoo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/deeoo.ogg',
- "doop" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/doop.ogg',
- "access" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/access.ogg',
- "acknowledged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/acknowledged.ogg',
- "activate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activate.ogg',
- "activated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activated.ogg',
- "activity" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/activity.ogg',
- "advanced" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/advanced.ogg',
- "alert" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alert.ogg',
- "alien" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alien.ogg',
- "all" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/all.ogg',
- "alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/alpha.ogg',
- "an" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/an.ogg',
- "and" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/and.ogg',
- "announcement" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/announcement.ogg',
- "antenna" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/antenna.ogg',
- "any" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/any.ogg',
- "approach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/approach.ogg',
- "are" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/are.ogg',
- "area" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/area.ogg',
- "armed" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/armed.ogg',
- "armory" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/armory.ogg',
- "atomic" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/atomic.ogg',
- "attention" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/attention.ogg',
- "authorized" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/authorized.ogg',
- "automatic" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/automatic.ogg',
- "away" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/away.ogg',
- "b" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/b.ogg',
- "back" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/back.ogg',
- "base" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/base.ogg',
- "biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/biohazard.ogg',
- "biological" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/biological.ogg',
- "black" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/black.ogg',
- "blast" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/blast.ogg',
- "blue" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/blue.ogg',
- "bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bravo.ogg',
- "breach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/breach.ogg',
- "bypass" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/bypass.ogg',
- "cable" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/cable.ogg',
- "center" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/center.ogg',
- "central" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/central.ogg',
- "chamber" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/chamber.ogg',
- "check" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/check.ogg',
- "checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/checkpoint.ogg',
- "chemical" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/chemical.ogg',
- "clear" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/clear.ogg',
- "code" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/code.ogg',
- "command" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/command.ogg',
- "communications" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/communications.ogg',
- "complex" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/complex.ogg',
- "containment" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/containment.ogg',
- "contamination" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/contamination.ogg',
- "control" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/control.ogg',
- "coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/coolant.ogg',
- "core" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/core.ogg',
- "crew" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/crew.ogg',
- "cross" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/cross.ogg',
- "d" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/d.ogg',
- "damage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/damage.ogg',
- "danger" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/danger.ogg',
- "day" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/day.ogg',
- "deactivated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/deactivated.ogg',
- "defense" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/defense.ogg',
- "delta" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/delta.ogg',
- "denied" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/denied.ogg',
- "destroy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/destroy.ogg',
- "detected" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/detected.ogg',
- "detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/detonation.ogg',
- "device" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/device.ogg',
- "dimensional" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/dimensional.ogg',
- "disengaged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/disengaged.ogg',
- "do" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/do.ogg',
- "door" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/door.ogg',
- "down" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/down.ogg',
- "e" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/e.ogg',
- "echo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/echo.ogg',
- "eight" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eight.ogg',
- "eighteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eighteen.ogg',
- "eighty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eighty.ogg',
- "electric" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/electric.ogg',
- "eleven" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eleven.ogg',
- "eliminate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/eliminate.ogg',
- "emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/emergency.ogg',
- "energy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/energy.ogg',
- "engage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/engage.ogg',
- "engaged" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/engaged.ogg',
- "enter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/enter.ogg',
- "entry" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/entry.ogg',
- "escape" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/escape.ogg',
- "evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/evacuate.ogg',
- "exchange" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/exchange.ogg',
- "experimental" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/experimental.ogg',
- "extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/extreme.ogg',
- "facility" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/facility.ogg',
- "failed" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/failed.ogg',
- "failure" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/failure.ogg',
- "field" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/field.ogg',
- "fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fifteen.ogg',
- "fifty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fifty.ogg',
- "fire" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fire.ogg',
- "five" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/five.ogg',
- "forbidden" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forbidden.ogg',
- "force" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/force.ogg',
- "forms" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forms.ogg',
- "forty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/forty.ogg',
- "four" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/four.ogg',
- "fourteen " = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fourteen .ogg',
- "freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/freeman.ogg',
- "from" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/from.ogg',
- "fuel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/fuel.ogg',
- "get" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/get.ogg',
- "go" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/go.ogg',
- "gordon" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/gordon.ogg',
- "granted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/granted.ogg',
- "green" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/green.ogg',
- "handling" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/handling.ogg',
- "hanger" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hanger.ogg',
- "have" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/have.ogg',
- "hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hazard.ogg',
- "health" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/health.ogg',
- "heat" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/heat.ogg',
- "helecopter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/helecopter.ogg',
- "helium" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/helium.ogg',
- "high" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/high.ogg',
- "hostal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hostal.ogg',
- "hostile" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hostile.ogg',
- "hotel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hotel.ogg',
- "hundred" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hundred.ogg',
- "hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/hydro.ogg',
- "illegal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/illegal.ogg',
- "immediate" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/immediate.ogg',
- "immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/immediately.ogg',
- "in" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/in.ogg',
- "india" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/india.ogg',
- "inoperative" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inoperative.ogg',
- "inside" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inside.ogg',
- "inspection" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/inspection.ogg',
- "is" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/is.ogg',
- "kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/kilo01.ogg',
- "kilo2" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/kilo02.ogg',
- "lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lambda.ogg',
- "laser" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/laser.ogg',
- "launch" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/launch.ogg',
- "leak" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/leak.ogg',
- "level" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/level.ogg',
- "lima" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lima.ogg',
- "lima_alt" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lima_alt.ogg',
- "liquid" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/liquid.ogg',
- "lock" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lock.ogg',
- "locked" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/locked.ogg',
- "lockout" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lockout.ogg',
- "lower" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/lower.ogg',
- "main" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/main.ogg',
- "maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/maintenance.ogg',
- "malfunction" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/malfunction.ogg',
- "materials" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/materials.ogg',
- "may" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/may.ogg',
- "medical" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/medical.ogg',
- "men" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/men.ogg',
- "mesa" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mesa.ogg',
- "message" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/message.ogg',
- "mic_mike" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mic_mike.ogg',
- "mike" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/mike.ogg',
- "military" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/military.ogg',
- "motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/motorpool.ogg',
- "move" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/move.ogg',
- "must" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/must.ogg',
- "nearest" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nearest.ogg',
- "nine" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nine.ogg',
- "nineteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/nineteen.ogg',
- "ninety" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/ninety.ogg',
- "no" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/no.ogg',
- "noe" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/noe.ogg',
- "not" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/not.ogg',
- "now" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/now.ogg',
- "objective" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/objective.ogg',
- "of" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/of.ogg',
- "on" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/on.ogg',
- "one" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/one.ogg',
- "open" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/open.ogg',
- "operating" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/operating.ogg',
- "option" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/option.ogg',
- "out" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/out.ogg',
- "override" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/override.ogg',
- "percent" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/percent.ogg',
- "perimeter" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/perimeter.ogg',
- "permitted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/permitted.ogg',
- "perpulsion" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/perpulsion.ogg',
- "personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/personnel.ogg',
- "plant" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/plant.ogg',
- "please" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/please.ogg',
- "portal" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/portal.ogg',
- "power" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/power.ogg',
- "primary" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/primary.ogg',
- "prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/prosecute.ogg',
- "questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/questioning.ogg',
- "radiation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/radiation.ogg',
- "radioactive" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/radioactive.ogg',
- "reach" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reach.ogg',
- "reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reactor.ogg',
- "relay" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/relay.ogg',
- "released" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/released.ogg',
- "remaining" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/remaining.ogg',
- "renegade" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/renegade.ogg',
- "repair" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/repair.ogg',
- "report" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/report.ogg',
- "reports" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/reports.ogg',
- "required" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/required.ogg',
- "research" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/research.ogg',
- "resistance" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/resistance.ogg',
- "rocket" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/rocket.ogg',
- "safety" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/safety.ogg',
- "satellite" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/satellite.ogg',
- "science" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/science.ogg',
- "search" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/search.ogg',
- "second" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/second.ogg',
- "secondary" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/secondary.ogg',
- "seconds" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seconds.ogg',
- "sector" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sector.ogg',
- "secure" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/secure.ogg',
- "seven" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seven.ogg',
- "seventeen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seventeen.ogg',
- "seventy" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/seventy.ogg',
- "severe" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/severe.ogg',
- "sheild" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sheild.ogg',
- "shoot" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/shoot.ogg',
- "sierra" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sierra.ogg',
- "sight" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sight.ogg',
- "silo" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/silo.ogg',
- "six" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/six.ogg',
- "sixteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sixteen.ogg',
- "sixty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sixty.ogg',
- "sorry" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sorry.ogg',
- "sqaud" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sqaud.ogg',
- "status" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/status.ogg',
- "sterilization" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/sterilization.ogg',
- "storage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/storage.ogg',
- "supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/supercooled.ogg',
- "surrender" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/surrender.ogg',
- "system" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/system.ogg',
- "systems" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/systems.ogg',
- "target" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/target.ogg',
- "team" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/team.ogg',
- "ten" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/ten.ogg',
- "terminated" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/terminated.ogg',
- "test" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/test.ogg',
- "the" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/the.ogg',
- "thirtteen" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/thirtteen.ogg',
- "thirty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/thirty.ogg',
- "this" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/this.ogg',
- "three" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/three.ogg',
- "time" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/time.ogg',
- "to" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/to.ogg',
- "topside" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/topside.ogg',
- "track" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/track.ogg',
- "train" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/train.ogg',
- "turret" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/turret.ogg',
- "twelve" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/twelve.ogg',
- "twenty" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/twenty.ogg',
- "two" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/two.ogg',
- "unauthorized" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/unauthorized.ogg',
- "under" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/under.ogg',
- "units" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/units.ogg',
- "until" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/until.ogg',
- "up" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/up.ogg',
- "uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/uranium.ogg',
- "use" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/use.ogg',
- "violation" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/violation.ogg',
- "voltage" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/voltage.ogg',
- "wanted" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/wanted.ogg',
- "warning" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/warning.ogg',
- "we" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/we.ogg',
- "weapon" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/weapon.ogg',
- "will" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/will.ogg',
- "with" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/with.ogg',
- "yellow" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/yellow.ogg',
- "you" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/you.ogg',
- "your" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/your.ogg',
- "zero" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/zero.ogg',
- "zone" = 'modular_skyrat/modules/alt_vox/sound/vox_mil/zone.ogg'
-))
-
-#endif
diff --git a/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm b/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm
deleted file mode 100644
index 126146fb247..00000000000
--- a/modular_skyrat/modules/alt_vox/code/vox_sounds_bms.dm
+++ /dev/null
@@ -1,244 +0,0 @@
-#ifdef AI_VOX
-
-GLOBAL_LIST_INIT(vox_sounds_bms, list(
- "activated" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/activated.ogg',
- "administration" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/administration.ogg',
- "administration_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/administration_center.ogg',
- "agent" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/agent.ogg',
- "alan" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alan.ogg',
- "alexander" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alexander.ogg',
- "all" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/all.ogg',
- "all_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/all_personnel.ogg',
- "alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/alpha.ogg',
- "and" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/and.ogg',
- "anomalous" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous.ogg',
- "anomalous_energy_field" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/anomalous_energy_field.ogg',
- "any" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/any.ogg',
- "area" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/area.ogg',
- "at" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/at.ogg',
- "attention" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/attention.ogg',
- "audit" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/audit.ogg',
- "b" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/b.ogg',
- "bad_boop_long" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_long.ogg',
- "bad_boop_short" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bad_boop_short.ogg',
- "ben" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ben.ogg',
- "biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/biohazard.ogg',
- "biological" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/biological.ogg',
- "boop_boop_long" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_long.ogg',
- "boop_boop_short" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/boop_boop_short.ogg',
- "bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/bravo.ogg',
- "brickman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/brickman.ogg',
- "c" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/c.ogg',
- "call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/call.ogg',
- "captain" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/captain.ogg',
- "center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/center.ogg',
- "central" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/central.ogg',
- "check" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/check.ogg',
- "checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/checkpoint.ogg',
- "chenner" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/chenner.ogg',
- "cisc" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/cisc.ogg',
- "clayson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/clayson.ogg',
- "cleanup" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/cleanup.ogg',
- "coded_message_for" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/coded_message_for.ogg',
- "command" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command.ogg',
- "command_and_communications" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications.ogg',
- "command_and_communications_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/command_and_communications_center.ogg',
- "communications" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/communications.ogg',
- "complex" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/complex.ogg',
- "complex_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/complex_2.ogg',
- "conference_room" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/conference_room.ogg',
- "containment" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/containment.ogg',
- "control_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/control_team.ogg',
- "coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/coolant.ogg',
- "corporal" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/corporal.ogg',
- "d" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/d.ogg',
- "dale" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dale.ogg',
- "dam" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dam.ogg',
- "damage" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/damage.ogg',
- "danger" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/danger.ogg',
- "defence" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/defence.ogg',
- "detected" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detected.ogg',
- "detected_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detected_in.ogg',
- "detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/detonation.ogg',
- "doctor" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/doctor.ogg',
- "dominski" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/dominski.ogg',
- "doot_doot" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/doot_doot.ogg',
- "down" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/down.ogg',
- "do_not" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/do_not.ogg',
- "do_not_use" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/do_not_use.ogg',
- "eight" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/eight.ogg',
- "electric" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/electric.ogg',
- "electric_shock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/electric_shock.ogg',
- "elevator" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/elevator.ogg',
- "emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency.ogg',
- "emergency_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_2.ogg',
- "emergency_cleanup_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_cleanup_team.ogg',
- "emergency_shutdown" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_shutdown.ogg',
- "emergency_uranium_containment_team_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/emergency_uranium_containment_team_to.ogg',
- "energy" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/energy.ogg',
- "engles" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/engles.ogg',
- "evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate.ogg',
- "evacuate_area_immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_area_immediately.ogg',
- "evacuate_sector" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/evacuate_sector.ogg',
- "extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme.ogg',
- "extreme_danger" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_danger.ogg',
- "extreme_force" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/extreme_force.ogg',
- "facility" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/facility.ogg',
- "failure" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/failure.ogg',
- "field" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/field.ogg',
- "fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/fifteen.ogg',
- "five" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/five.ogg',
- "fleistad" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/fleistad.ogg',
- "flooding" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/flooding.ogg',
- "for" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/for.ogg',
- "force" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/force.ogg',
- "foreman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/foreman.ogg',
- "forms" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/forms.ogg',
- "four" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/four.ogg',
- "freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/freeman.ogg',
- "hankle" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hankle.ogg',
- "hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hazard.ogg',
- "hazard_course" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hazard_course.ogg',
- "headon" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/headon.ogg',
- "helioski" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/helioski.ogg',
- "help" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/help.ogg',
- "high" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high.ogg',
- "high_energy_detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high_energy_detonation.ogg',
- "high_security" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/high_security.ogg',
- "horn" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/horn.ogg',
- "human" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/human.ogg',
- "hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/hydro.ogg',
- "immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/immediately.ogg',
- "in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/in.ogg',
- "india" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/india.ogg',
- "interchange" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/interchange.ogg',
- "is" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/is.ogg',
- "is_now" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/is_now.ogg',
- "j" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/j.ogg',
- "junic" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/junic.ogg',
- "kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/kilo.ogg',
- "lab" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lab.ogg',
- "lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lambda.ogg',
- "laser" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/laser.ogg',
- "level" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/level.ogg',
- "lieutenant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lieutenant.ogg',
- "lima" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lima.ogg',
- "line" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/line.ogg',
- "login" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/login.ogg',
- "lukas" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/lukas.ogg',
- "maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/maintenance.ogg',
- "material" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/material.ogg',
- "materials" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/materials.ogg',
- "materials_storage_facility" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/materials_storage_facility.ogg',
- "medical" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/medical.ogg',
- "medical_emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/medical_emergency.ogg',
- "med_down_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/med_down_in.ogg',
- "member" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/member.ogg',
- "men" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/men.ogg',
- "military" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/military.ogg',
- "minutes" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/minutes.ogg',
- "monterro" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/monterro.ogg',
- "morel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/morel.ogg',
- "motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/motorpool.ogg',
- "murphin" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/murphin.ogg',
- "network_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/network_team.ogg',
- "nine" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/nine.ogg',
- "oatsma" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/oatsma.ogg',
- "observation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/observation.ogg',
- "office" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/office.ogg',
- "on" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/on.ogg',
- "one" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/one.ogg',
- "operational" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/operational.ogg',
- "operations" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/operations.ogg',
- "optimal" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/optimal.ogg',
- "outerchange" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/outerchange.ogg',
- "performance" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/performance.ogg',
- "personal_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personal_call.ogg',
- "personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personnel.ogg',
- "personnel_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/personnel_2.ogg',
- "place" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/place.ogg',
- "plant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/plant.ogg',
- "please" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please.ogg',
- "please_2" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_2.ogg',
- "please_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_call.ogg',
- "please_report_status" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_status.ogg',
- "please_report_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/please_report_to.ogg',
- "proceedural" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/proceedural.ogg',
- "processing" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/processing.ogg',
- "processing_plant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/processing_plant.ogg',
- "profile" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/profile.ogg',
- "prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/prosecute.ogg',
- "questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/questioning.ogg',
- "raddock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/raddock.ogg',
- "rail" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/rail.ogg',
- "reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/reactor.ogg',
- "repair" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/repair.ogg',
- "reports" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/reports.ogg',
- "report_to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/report_to.ogg',
- "required" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/required.ogg',
- "residue" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/residue.ogg',
- "resources" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/resources.ogg',
- "review" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/review.ogg',
- "robertson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/robertson.ogg',
- "rose" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/rose.ogg',
- "scheduled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled.ogg',
- "scheduled_in" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/scheduled_in.ogg',
- "science" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/science.ogg',
- "science_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/science_personnel.ogg',
- "sector" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sector.ogg',
- "secure" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/secure.ogg',
- "secure_line_call" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/secure_line_call.ogg',
- "security" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security.ogg',
- "security_officer" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security_officer.ogg',
- "security_personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/security_personnel.ogg',
- "sergeant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sergeant.ogg',
- "service" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/service.ogg',
- "service_team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/service_team.ogg',
- "sesan" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sesan.ogg',
- "seven" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/seven.ogg',
- "shock" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/shock.ogg',
- "shutdown" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/shutdown.ogg',
- "six" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/six.ogg',
- "status" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/status.ogg',
- "stone" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/stone.ogg',
- "storage" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/storage.ogg',
- "sublevel" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/sublevel.ogg',
- "superconducting" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/superconducting.ogg',
- "supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/supercooled.ogg',
- "system" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/system.ogg',
- "systems" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/systems.ogg',
- "tactical" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tactical.ogg',
- "tactical_operations_center" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tactical_operations_center.ogg',
- "tank" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tank.ogg',
- "tart" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tart.ogg',
- "team" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/team.ogg',
- "tech" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tech.ogg',
- "tech_sergeant" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/tech_sergeant.ogg',
- "test" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/test.ogg',
- "test_lab" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/test_lab.ogg',
- "three" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/three.ogg',
- "to" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/to.ogg',
- "toonson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/toonson.ogg',
- "topside" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/topside.ogg',
- "truman" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/truman.ogg',
- "turret" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/turret.ogg',
- "two" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/two.ogg',
- "unauthorised" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised.ogg',
- "unauthorised_biological_forms" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unauthorised_biological_forms.ogg',
- "unscheduled" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/unscheduled.ogg',
- "upgrade" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/upgrade.ogg',
- "uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/uranium.ogg',
- "use" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/use.ogg',
- "ventilation" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation.ogg',
- "ventilation_system" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/ventilation_system.ogg',
- "warning" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/warning.ogg',
- "waste" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/waste.ogg',
- "wilson" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/wilson.ogg',
- "with" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/with.ogg',
- "zero" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/zero.ogg',
- "_comma" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/_comma.ogg',
- "_period" = 'modular_skyrat/modules/alt_vox/sound/vox_bms/_period.ogg',
-))
-
-#endif
-
diff --git a/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm b/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm
deleted file mode 100644
index 78e05e5cf0c..00000000000
--- a/modular_skyrat/modules/alt_vox/code/vox_sounds_hl1.dm
+++ /dev/null
@@ -1,635 +0,0 @@
-#ifdef AI_VOX
-
-//for vim
-// :%s/\(\(.*\)\.ogg\)/"\2" = 'sound\/vox\/\1',/g
-GLOBAL_LIST_INIT(vox_sounds_hl, list("," = 'modular_skyrat/modules/alt_vox/sound/vox_hl/_comma.ogg',
-"." = 'modular_skyrat/modules/alt_vox/sound/vox_hl/_period.ogg',
-"a" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/a.ogg',
-"accelerating" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accelerating.ogg',
-"accelerator" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accelerator.ogg',
-"accepted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/accepted.ogg',
-"access" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/access.ogg',
-"acknowledge" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledge.ogg',
-"acknowledged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acknowledged.ogg',
-"acquired" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acquired.ogg',
-"acquisition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/acquisition.ogg',
-"across" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/across.ogg',
-"activate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activate.ogg',
-"activated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activated.ogg',
-"activity" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/activity.ogg',
-"adios" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/adios.ogg',
-"administration" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/administration.ogg',
-"advanced" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/advanced.ogg',
-"after" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/after.ogg',
-"agent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/agent.ogg',
-"alarm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alarm.ogg',
-"alert" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alert.ogg',
-"alien" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alien.ogg',
-"aligned" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/aligned.ogg',
-"all" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/all.ogg',
-"alpha" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/alpha.ogg',
-"am" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/am.ogg',
-"amigo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/amigo.ogg',
-"ammunition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ammunition.ogg',
-"an" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/an.ogg',
-"and" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/and.ogg',
-"announcement" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/announcement.ogg',
-"anomalous" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/anomalous.ogg',
-"antenna" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/antenna.ogg',
-"any" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/any.ogg',
-"apprehend" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/apprehend.ogg',
-"approach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/approach.ogg',
-"are" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/are.ogg',
-"area" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/area.ogg',
-"arm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/arm.ogg',
-"armed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armed.ogg',
-"armor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armor.ogg',
-"armory" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/armory.ogg',
-"arrest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/arrest.ogg',
-"ass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ass.ogg',
-"at" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/at.ogg',
-"atomic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/atomic.ogg',
-"attention" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/attention.ogg',
-"authorize" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/authorize.ogg',
-"authorized" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/authorized.ogg',
-"automatic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/automatic.ogg',
-"away" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/away.ogg',
-"b" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/b.ogg',
-"back" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/back.ogg',
-"backman" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/backman.ogg',
-"bad" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bad.ogg',
-"bag" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bag.ogg',
-"bailey" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bailey.ogg',
-"barracks" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/barracks.ogg',
-"base" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/base.ogg',
-"bay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bay.ogg',
-"be" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/be.ogg',
-"been" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/been.ogg',
-"before" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/before.ogg',
-"beyond" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/beyond.ogg',
-"biohazard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/biohazard.ogg',
-"biological" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/biological.ogg',
-"birdwell" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/birdwell.ogg',
-"bizwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bizwarn.ogg',
-"black" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/black.ogg',
-"blast" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blast.ogg',
-"blocked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blocked.ogg',
-"bloop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bloop.ogg',
-"blue" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/blue.ogg',
-"bottom" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bottom.ogg',
-"bravo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bravo.ogg',
-"breach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/breach.ogg',
-"breached" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/breached.ogg',
-"break" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/break.ogg',
-"bridge" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bridge.ogg',
-"bust" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bust.ogg',
-"but" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/but.ogg',
-"button" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/button.ogg',
-"buzwarn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/buzwarn.ogg',
-"bypass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/bypass.ogg',
-"c" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/c.ogg',
-"cable" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cable.ogg',
-"call" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/call.ogg',
-"called" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/called.ogg',
-"canal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/canal.ogg',
-"cap" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cap.ogg',
-"captain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/captain.ogg',
-"capture" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/capture.ogg',
-"captured" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/captured.ogg',
-"ceiling" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ceiling.ogg',
-"celsius" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/celsius.ogg',
-"center" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/center.ogg',
-"centi" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/centi.ogg',
-"central" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/central.ogg',
-"chamber" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/chamber.ogg',
-"charlie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/charlie.ogg',
-"check" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/check.ogg',
-"checkpoint" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/checkpoint.ogg',
-"chemical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/chemical.ogg',
-"cleanup" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cleanup.ogg',
-"clear" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clear.ogg',
-"clearance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clearance.ogg',
-"close" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/close.ogg',
-"clown" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/clown.ogg',
-"code" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/code.ogg',
-"coded" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coded.ogg',
-"collider" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/collider.ogg',
-"command" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/command.ogg',
-"communication" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/communication.ogg',
-"complex" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/complex.ogg',
-"computer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/computer.ogg',
-"condition" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/condition.ogg',
-"containment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/containment.ogg',
-"contamination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/contamination.ogg',
-"control" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/control.ogg',
-"coolant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coolant.ogg',
-"coomer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/coomer.ogg',
-"core" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/core.ogg',
-"correct" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/correct.ogg',
-"corridor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/corridor.ogg',
-"crew" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/crew.ogg',
-"cross" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cross.ogg',
-"cryogenic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/cryogenic.ogg',
-"d" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/d.ogg',
-"dadeda" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dadeda.ogg',
-"damage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/damage.ogg',
-"damaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/damaged.ogg',
-"danger" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/danger.ogg',
-"day" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/day.ogg',
-"deactivated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deactivated.ogg',
-"decompression" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/decompression.ogg',
-"decontamination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/decontamination.ogg',
-"deeoo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deeoo.ogg',
-"defense" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/defense.ogg',
-"degrees" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/degrees.ogg',
-"delta" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/delta.ogg',
-"denied" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/denied.ogg',
-"deploy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deploy.ogg',
-"deployed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/deployed.ogg',
-"destroy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/destroy.ogg',
-"destroyed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/destroyed.ogg',
-"detain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detain.ogg',
-"detected" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detected.ogg',
-"detonation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/detonation.ogg',
-"device" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/device.ogg',
-"did" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/did.ogg',
-"die" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/die.ogg',
-"dimensional" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dimensional.ogg',
-"dirt" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dirt.ogg',
-"disengaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/disengaged.ogg',
-"dish" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dish.ogg',
-"disposal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/disposal.ogg',
-"distance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/distance.ogg',
-"distortion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/distortion.ogg',
-"do" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/do.ogg',
-"doctor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/doctor.ogg',
-"doop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/doop.ogg',
-"door" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/door.ogg',
-"down" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/down.ogg',
-"dual" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/dual.ogg',
-"duct" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/duct.ogg',
-"e" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/e.ogg',
-"east" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/east.ogg',
-"echo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/echo.ogg',
-"ed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ed.ogg',
-"effect" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/effect.ogg',
-"egress" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/egress.ogg',
-"eight" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eight.ogg',
-"eighteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eighteen.ogg',
-"eighty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eighty.ogg',
-"electric" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/electric.ogg',
-"electromagnetic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/electromagnetic.ogg',
-"elevator" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/elevator.ogg',
-"eleven" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eleven.ogg',
-"eliminate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/eliminate.ogg',
-"emergency" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/emergency.ogg',
-"enemy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/enemy.ogg',
-"energy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/energy.ogg',
-"engage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engage.ogg',
-"engaged" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engaged.ogg',
-"engine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/engine.ogg',
-"enter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/enter.ogg',
-"entry" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/entry.ogg',
-"environment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/environment.ogg',
-"error" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/error.ogg',
-"escape" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/escape.ogg',
-"evacuate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/evacuate.ogg',
-"exchange" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exchange.ogg',
-"exit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exit.ogg',
-"expect" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/expect.ogg',
-"experiment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/experiment.ogg',
-"experimental" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/experimental.ogg',
-"explode" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/explode.ogg',
-"explosion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/explosion.ogg',
-"exposure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exposure.ogg',
-"exterminate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/exterminate.ogg',
-"extinguish" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extinguish.ogg',
-"extinguisher" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extinguisher.ogg',
-"extreme" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/extreme.ogg',
-"f" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/f.ogg',
-"face" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/face.ogg',
-"facility" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/facility.ogg',
-"fahrenheit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fahrenheit.ogg',
-"failed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/failed.ogg',
-"failure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/failure.ogg',
-"farthest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/farthest.ogg',
-"fast" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fast.ogg',
-"feet" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/feet.ogg',
-"field" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/field.ogg',
-"fifteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifteen.ogg',
-"fifth" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifth.ogg',
-"fifty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fifty.ogg',
-"final" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/final.ogg',
-"fine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fine.ogg',
-"fire" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fire.ogg',
-"first" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/first.ogg',
-"five" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/five.ogg',
-"flag" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/flag.ogg',
-"flooding" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/flooding.ogg',
-"floor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/floor.ogg',
-"fool" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fool.ogg',
-"for" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/for.ogg',
-"forbidden" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/forbidden.ogg',
-"force" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/force.ogg',
-"forms" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/forms.ogg',
-"found" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/found.ogg',
-"four" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/four.ogg',
-"fourteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourteen.ogg',
-"fourth" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourth.ogg',
-"fourty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fourty.ogg',
-"foxtrot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/foxtrot.ogg',
-"freeman" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/freeman.ogg',
-"freezer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/freezer.ogg',
-"from" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/from.ogg',
-"front" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/front.ogg',
-"fuel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/fuel.ogg',
-"g" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/g.ogg',
-"gay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gay.ogg',
-"get" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/get.ogg',
-"go" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/go.ogg',
-"going" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/going.ogg',
-"good" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/good.ogg',
-"goodbye" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/goodbye.ogg',
-"gordon" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gordon.ogg',
-"got" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/got.ogg',
-"government" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/government.ogg',
-"granted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/granted.ogg',
-"great" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/great.ogg',
-"green" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/green.ogg',
-"grenade" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/grenade.ogg',
-"guard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/guard.ogg',
-"gulf" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gulf.ogg',
-"gun" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/gun.ogg',
-"guthrie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/guthrie.ogg',
-"handling" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/handling.ogg',
-"hangar" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hangar.ogg',
-"has" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/has.ogg',
-"have" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/have.ogg',
-"hazard" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hazard.ogg',
-"head" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/head.ogg',
-"health" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/health.ogg',
-"heat" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/heat.ogg',
-"helicopter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/helicopter.ogg',
-"helium" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/helium.ogg',
-"hello" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hello.ogg',
-"help" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/help.ogg',
-"here" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/here.ogg',
-"hide" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hide.ogg',
-"high" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/high.ogg',
-"highest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/highest.ogg',
-"hit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hit.ogg',
-"holds" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/holds.ogg',
-"hole" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hole.ogg',
-"hostile" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hostile.ogg',
-"hot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hot.ogg',
-"hotel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hotel.ogg',
-"hour" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hour.ogg',
-"hours" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hours.ogg',
-"hundred" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hundred.ogg',
-"hydro" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/hydro.ogg',
-"i" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/i.ogg',
-"idiot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/idiot.ogg',
-"illegal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/illegal.ogg',
-"immediate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/immediate.ogg',
-"immediately" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/immediately.ogg',
-"in" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/in.ogg',
-"inches" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inches.ogg',
-"india" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/india.ogg',
-"ing" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ing.ogg',
-"inoperative" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inoperative.ogg',
-"inside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inside.ogg',
-"inspection" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inspection.ogg',
-"inspector" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/inspector.ogg',
-"interchange" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/interchange.ogg',
-"intruder" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/intruder.ogg',
-"invallid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/invallid.ogg',
-"invasion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/invasion.ogg',
-"is" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/is.ogg',
-"it" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/it.ogg',
-"johnson" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/johnson.ogg',
-"juliet" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/juliet.ogg',
-"key" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/key.ogg',
-"kill" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kill.ogg',
-"kilo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kilo.ogg',
-"kit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/kit.ogg',
-"lab" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lab.ogg',
-"lambda" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lambda.ogg',
-"laser" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/laser.ogg',
-"last" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/last.ogg',
-"launch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/launch.ogg',
-"leak" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/leak.ogg',
-"leave" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/leave.ogg',
-"left" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/left.ogg',
-"legal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/legal.ogg',
-"level" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/level.ogg',
-"lever" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lever.ogg',
-"lie" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lie.ogg',
-"lieutenant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lieutenant.ogg',
-"life" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/life.ogg',
-"light" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/light.ogg',
-"lima" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lima.ogg',
-"liquid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/liquid.ogg',
-"loading" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/loading.ogg',
-"locate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locate.ogg',
-"located" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/located.ogg',
-"location" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/location.ogg',
-"lock" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lock.ogg',
-"locked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locked.ogg',
-"locker" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/locker.ogg',
-"lockout" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lockout.ogg',
-"lower" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lower.ogg',
-"lowest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/lowest.ogg',
-"magnetic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/magnetic.ogg',
-"main" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/main.ogg',
-"maintenance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/maintenance.ogg',
-"malfunction" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/malfunction.ogg',
-"man" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/man.ogg',
-"mass" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mass.ogg',
-"materials" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/materials.ogg',
-"maximum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/maximum.ogg',
-"may" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/may.ogg',
-"med" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/med.ogg',
-"medical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/medical.ogg',
-"men" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/men.ogg',
-"mercy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mercy.ogg',
-"mesa" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mesa.ogg',
-"message" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/message.ogg',
-"meter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/meter.ogg',
-"micro" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/micro.ogg',
-"middle" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/middle.ogg',
-"mike" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mike.ogg',
-"miles" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/miles.ogg',
-"military" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/military.ogg',
-"milli" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/milli.ogg',
-"million" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/million.ogg',
-"minefield" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minefield.ogg',
-"minimum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minimum.ogg',
-"minutes" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/minutes.ogg',
-"mister" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mister.ogg',
-"mode" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/mode.ogg',
-"motor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/motor.ogg',
-"motorpool" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/motorpool.ogg',
-"move" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/move.ogg',
-"must" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/must.ogg',
-"nearest" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nearest.ogg',
-"nice" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nice.ogg',
-"nine" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nine.ogg',
-"nineteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nineteen.ogg',
-"ninety" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ninety.ogg',
-"no" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/no.ogg',
-"nominal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/nominal.ogg',
-"north" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/north.ogg',
-"not" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/not.ogg',
-"november" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/november.ogg',
-"now" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/now.ogg',
-"number" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/number.ogg',
-"objective" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/objective.ogg',
-"observation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/observation.ogg',
-"of" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/of.ogg',
-"officer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/officer.ogg',
-"ok" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ok.ogg',
-"on" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/on.ogg',
-"one" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/one.ogg',
-"open" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/open.ogg',
-"operating" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operating.ogg',
-"operations" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operations.ogg',
-"operative" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/operative.ogg',
-"option" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/option.ogg',
-"order" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/order.ogg',
-"organic" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/organic.ogg',
-"oscar" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/oscar.ogg',
-"out" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/out.ogg',
-"outside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/outside.ogg',
-"over" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/over.ogg',
-"overload" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/overload.ogg',
-"override" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/override.ogg',
-"pacify" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pacify.ogg',
-"pain" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pain.ogg',
-"pal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pal.ogg',
-"panel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/panel.ogg',
-"percent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/percent.ogg',
-"perimeter" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/perimeter.ogg',
-"permitted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/permitted.ogg',
-"personnel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/personnel.ogg',
-"pipe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/pipe.ogg',
-"plant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/plant.ogg',
-"platform" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/platform.ogg',
-"please" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/please.ogg',
-"point" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/point.ogg',
-"portal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/portal.ogg',
-"power" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/power.ogg',
-"presence" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/presence.ogg',
-"press" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/press.ogg',
-"primary" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/primary.ogg',
-"proceed" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/proceed.ogg',
-"processing" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/processing.ogg',
-"progress" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/progress.ogg',
-"proper" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/proper.ogg',
-"propulsion" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/propulsion.ogg',
-"prosecute" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/prosecute.ogg',
-"protective" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/protective.ogg',
-"push" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/push.ogg',
-"quantum" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quantum.ogg',
-"quebec" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quebec.ogg',
-"question" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/question.ogg',
-"questioning" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/questioning.ogg',
-"quick" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quick.ogg',
-"quit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/quit.ogg',
-"radiation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/radiation.ogg',
-"radioactive" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/radioactive.ogg',
-"rads" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rads.ogg',
-"rapid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rapid.ogg',
-"reach" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reach.ogg',
-"reached" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reached.ogg',
-"reactor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reactor.ogg',
-"red" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/red.ogg',
-"relay" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/relay.ogg',
-"released" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/released.ogg',
-"remaining" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/remaining.ogg',
-"renegade" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/renegade.ogg',
-"repair" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/repair.ogg',
-"report" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/report.ogg',
-"reports" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reports.ogg',
-"required" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/required.ogg',
-"research" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/research.ogg',
-"reset" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/reset.ogg',
-"resevoir" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/resevoir.ogg',
-"resistance" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/resistance.ogg',
-"returned" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/returned.ogg',
-"right" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/right.ogg',
-"rocket" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/rocket.ogg',
-"roger" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/roger.ogg',
-"romeo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/romeo.ogg',
-"room" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/room.ogg',
-"round" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/round.ogg',
-"run" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/run.ogg',
-"safe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/safe.ogg',
-"safety" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/safety.ogg',
-"sargeant" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sargeant.ogg',
-"satellite" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/satellite.ogg',
-"save" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/save.ogg',
-"science" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/science.ogg',
-"scores" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/scores.ogg',
-"scream" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/scream.ogg',
-"screen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/screen.ogg',
-"search" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/search.ogg',
-"second" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/second.ogg',
-"secondary" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secondary.ogg',
-"seconds" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seconds.ogg',
-"sector" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sector.ogg',
-"secure" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secure.ogg',
-"secured" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/secured.ogg',
-"security" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/security.ogg',
-"select" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/select.ogg',
-"selected" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/selected.ogg',
-"service" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/service.ogg',
-"seven" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seven.ogg',
-"seventeen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seventeen.ogg',
-"seventy" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/seventy.ogg',
-"severe" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/severe.ogg',
-"sewage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sewage.ogg',
-"sewer" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sewer.ogg',
-"shield" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shield.ogg',
-"shipment" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shipment.ogg',
-"shock" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shock.ogg',
-"shoot" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shoot.ogg',
-"shower" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shower.ogg',
-"shut" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/shut.ogg',
-"side" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/side.ogg',
-"sierra" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sierra.ogg',
-"sight" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sight.ogg',
-"silo" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/silo.ogg',
-"six" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/six.ogg',
-"sixteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sixteen.ogg',
-"sixty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sixty.ogg',
-"slime" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/slime.ogg',
-"slow" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/slow.ogg',
-"soldier" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/soldier.ogg',
-"some" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/some.ogg',
-"someone" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/someone.ogg',
-"something" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/something.ogg',
-"son" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/son.ogg',
-"sorry" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sorry.ogg',
-"south" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/south.ogg',
-"squad" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/squad.ogg',
-"square" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/square.ogg',
-"stairway" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/stairway.ogg',
-"status" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/status.ogg',
-"sterile" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sterile.ogg',
-"sterilization" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sterilization.ogg',
-"stolen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/stolen.ogg',
-"storage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/storage.ogg',
-"sub" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sub.ogg',
-"subsurface" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/subsurface.ogg',
-"sudden" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/sudden.ogg',
-"suit" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/suit.ogg',
-"superconducting" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/superconducting.ogg',
-"supercooled" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/supercooled.ogg',
-"supply" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/supply.ogg',
-"surface" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surface.ogg',
-"surrender" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surrender.ogg',
-"surround" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surround.ogg',
-"surrounded" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/surrounded.ogg',
-"switch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/switch.ogg',
-"system" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/system.ogg',
-"systems" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/systems.ogg',
-"tactical" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tactical.ogg',
-"take" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/take.ogg',
-"talk" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/talk.ogg',
-"tango" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tango.ogg',
-"tank" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tank.ogg',
-"target" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/target.ogg',
-"team" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/team.ogg',
-"temperature" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/temperature.ogg',
-"temporal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/temporal.ogg',
-"ten" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ten.ogg',
-"terminal" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/terminal.ogg',
-"terminated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/terminated.ogg',
-"termination" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/termination.ogg',
-"test" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/test.ogg',
-"that" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/that.ogg',
-"the" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/the.ogg',
-"then" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/then.ogg',
-"there" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/there.ogg',
-"third" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/third.ogg',
-"thirteen" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thirteen.ogg',
-"thirty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thirty.ogg',
-"this" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/this.ogg',
-"those" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/those.ogg',
-"thousand" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/thousand.ogg',
-"threat" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/threat.ogg',
-"three" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/three.ogg',
-"through" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/through.ogg',
-"time" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/time.ogg',
-"to" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/to.ogg',
-"top" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/top.ogg',
-"topside" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/topside.ogg',
-"touch" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/touch.ogg',
-"towards" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/towards.ogg',
-"track" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/track.ogg',
-"train" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/train.ogg',
-"transportation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/transportation.ogg',
-"truck" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/truck.ogg',
-"tunnel" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/tunnel.ogg',
-"turn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/turn.ogg',
-"turret" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/turret.ogg',
-"twelve" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/twelve.ogg',
-"twenty" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/twenty.ogg',
-"two" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/two.ogg',
-"unauthorized" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/unauthorized.ogg',
-"under" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/under.ogg',
-"uniform" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/uniform.ogg',
-"unlocked" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/unlocked.ogg',
-"until" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/until.ogg',
-"up" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/up.ogg',
-"upper" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/upper.ogg',
-"uranium" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/uranium.ogg',
-"us" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/us.ogg',
-"usa" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/usa.ogg',
-"use" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/use.ogg',
-"used" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/used.ogg',
-"user" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/user.ogg',
-"vacate" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vacate.ogg',
-"valid" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/valid.ogg',
-"vapor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vapor.ogg',
-"vent" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vent.ogg',
-"ventillation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/ventillation.ogg',
-"victor" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/victor.ogg',
-"violated" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/violated.ogg',
-"violation" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/violation.ogg',
-"voltage" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/voltage.ogg',
-"vox_login" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/vox_login.ogg',
-"walk" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/walk.ogg',
-"wall" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wall.ogg',
-"want" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/want.ogg',
-"wanted" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wanted.ogg',
-"warm" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warm.ogg',
-"warn" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warn.ogg',
-"warning" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/warning.ogg',
-"waste" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/waste.ogg',
-"water" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/water.ogg',
-"we" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/we.ogg',
-"weapon" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/weapon.ogg',
-"west" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/west.ogg',
-"whiskey" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/whiskey.ogg',
-"white" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/white.ogg',
-"wilco" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/wilco.ogg',
-"will" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/will.ogg',
-"with" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/with.ogg',
-"without" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/without.ogg',
-"woop" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/woop.ogg',
-"xeno" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/xeno.ogg',
-"yankee" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yankee.ogg',
-"yards" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yards.ogg',
-"year" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/year.ogg',
-"yellow" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yellow.ogg',
-"yes" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yes.ogg',
-"you" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/you.ogg',
-"your" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/your.ogg',
-"yourself" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/yourself.ogg',
-"zero" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zero.ogg',
-"zone" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zone.ogg',
-"zulu" = 'modular_skyrat/modules/alt_vox/sound/vox_hl/zulu.ogg',))
-
-#endif
-
diff --git a/modular_skyrat/modules/armaments/code/armament_component.dm b/modular_skyrat/modules/armaments/code/armament_component.dm
deleted file mode 100644
index 2c1ff2b915c..00000000000
--- a/modular_skyrat/modules/armaments/code/armament_component.dm
+++ /dev/null
@@ -1,264 +0,0 @@
-/**
- * This is the component that runs the armaments vendor.
- *
- * It's intended to be used with the armament vendor, or other atoms that otherwise aren't vending machines.
- */
-
-/datum/component/armament
- /// The types of armament datums we wish to add to this component.
- var/list/products
- /// What access do we require to use this machine?
- var/list/required_access
- /// Our parent machine.
- var/atom/parent_atom
- /// The points card that is currently inserted into the parent.
- var/obj/item/armament_points_card/inserted_card
- /// Used to keep track of what categories have been used.
- var/list/used_categories = list()
- /// Used to keep track of what items have been purchased.
- var/list/purchased_items = list()
-
-/datum/component/armament/Initialize(list/required_products, list/needed_access)
- if(!required_products)
- stack_trace("No products specified for armament")
- return COMPONENT_INCOMPATIBLE
-
- parent_atom = parent
-
- products = required_products
-
- required_access = needed_access
-
- RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand))
- RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
-
-/datum/component/armament/Destroy(force, silent)
- if(inserted_card)
- inserted_card.forceMove(parent_atom.drop_location())
- inserted_card = null
- return ..()
-
-/datum/component/armament/proc/on_attackby(atom/target, obj/item, mob/user)
- SIGNAL_HANDLER
-
- if(!user || !item)
- return
-
- if(!user.can_interact_with(parent_atom))
- return
-
- if(!istype(item, /obj/item/armament_points_card) || inserted_card)
- return
-
- item.forceMove(parent_atom)
- inserted_card = item
-
-/datum/component/armament/proc/on_attack_hand(datum/source, mob/living/user)
- SIGNAL_HANDLER
-
- if(!user)
- return
-
- if(!user.can_interact_with(parent_atom))
- return
-
- if(!check_access(user))
- to_chat(user, span_warning("You don't have the required access!"))
- return
-
- INVOKE_ASYNC(src, PROC_REF(ui_interact), user)
-
-/datum/component/armament/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "ArmamentStation")
- ui.open()
-
-/datum/component/armament/ui_data(mob/user)
- var/list/data = list()
-
- data["card_inserted"] = inserted_card ? TRUE : FALSE
- data["card_name"] = "unknown"
- data["card_points"] = 0
- if(inserted_card)
- data["card_points"] = inserted_card.points
- data["card_name"] = inserted_card.name
-
- data["armaments_list"] = list()
- for(var/armament_category as anything in SSarmaments.entries)
- var/list/armament_subcategories = list()
- for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY])
- var/list/subcategory_items = list()
- for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory])
- if(products && !(armament_entry.type in products))
- continue
- subcategory_items += list(list(
- "ref" = REF(armament_entry),
- "icon" = armament_entry.cached_base64,
- "name" = armament_entry.name,
- "cost" = armament_entry.cost,
- "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE,
- "magazine_cost" = armament_entry.magazine_cost,
- "quantity" = armament_entry.max_purchase,
- "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0,
- "description" = armament_entry.description,
- "armament_category" = armament_entry.category,
- "equipment_subcategory" = armament_entry.subcategory,
- ))
- if(!LAZYLEN(subcategory_items))
- continue
- armament_subcategories += list(list(
- "subcategory" = subcategory,
- "items" = subcategory_items,
- ))
- if(!LAZYLEN(armament_subcategories))
- continue
- data["armaments_list"] += list(list(
- "category" = armament_category,
- "category_limit" = SSarmaments.entries[armament_category][CATEGORY_LIMIT],
- "category_uses" = used_categories[armament_category],
- "subcategories" = armament_subcategories,
- ))
-
- return data
-
-/datum/component/armament/ui_act(action, list/params)
- . = ..()
- if(.)
- return
-
- switch(action)
- if("equip_item")
- var/check = check_item(params["armament_ref"])
- if(!check)
- return
- select_armament(usr, check)
- if("buy_ammo")
- var/check = check_item(params["armament_ref"])
- if(!check)
- return
- buy_ammo(usr, check, params["quantity"])
- if("eject_card")
- eject_card(usr)
-
-/datum/component/armament/proc/buy_ammo(mob/user, datum/armament_entry/armament_entry, quantity = 1)
- if(!armament_entry.magazine)
- return
- if(!inserted_card)
- to_chat(user, span_warning("No card inserted!"))
- return
- var/quantity_cost = armament_entry.magazine_cost * quantity
- if(!inserted_card.use_points(quantity_cost))
- to_chat(user, span_warning("Not enough points!"))
- return
- for(var/i in 1 to quantity)
- new armament_entry.magazine(parent_atom.drop_location())
-
-/datum/component/armament/proc/check_item(reference)
- var/datum/armament_entry/armament_entry
- for(var/category in SSarmaments.entries)
- for(var/subcategory in SSarmaments.entries[category][CATEGORY_ENTRY])
- armament_entry = locate(reference) in SSarmaments.entries[category][CATEGORY_ENTRY][subcategory]
- if(armament_entry)
- break
- if(armament_entry)
- break
- if(!armament_entry)
- return FALSE
- if(products && !(armament_entry.type in products))
- return FALSE
- return armament_entry
-
-/datum/component/armament/proc/eject_card(mob/user)
- if(!inserted_card)
- to_chat(user, span_warning("No card inserted!"))
- return
- inserted_card.forceMove(parent_atom.drop_location())
- user.put_in_hands(inserted_card)
- inserted_card = null
- to_chat(user, span_notice("Card ejected!"))
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 70)
-
-/datum/component/armament/proc/select_armament(mob/user, datum/armament_entry/armament_entry)
- if(!inserted_card)
- to_chat(user, span_warning("No card inserted!"))
- return
- if(used_categories[armament_entry.category] >= SSarmaments.entries[armament_entry.category][CATEGORY_LIMIT])
- to_chat(user, span_warning("Category limit reached!"))
- return
- if(purchased_items[armament_entry] >= armament_entry.max_purchase)
- to_chat(user, span_warning("Item limit reached!"))
- return
- if(!ishuman(user))
- return
- if(!inserted_card.use_points(armament_entry.cost))
- to_chat(user, span_warning("Not enough points!"))
- return
-
- var/mob/living/carbon/human/human_to_equip = user
-
- var/obj/item/new_item = new armament_entry.item_type(parent_atom.drop_location())
-
- used_categories[armament_entry.category]++
- purchased_items[armament_entry]++
-
- playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
-
- if(armament_entry.equip_to_human(human_to_equip, new_item))
- to_chat(user, span_notice("Equipped directly to your person."))
- playsound(src, 'sound/items/equip/toolbelt_equip.ogg', 100)
- armament_entry.after_equip(parent_atom.drop_location(), new_item)
-
-/datum/component/armament/proc/check_access(mob/living/user)
- if(!user)
- return FALSE
-
- if(!required_access)
- return TRUE
-
- if(issilicon(user))
- if(ispAI(user))
- return FALSE
- return TRUE //AI can do whatever it wants
-
- if(isAdminGhostAI(user))
- return TRUE
-
- //If the mob has the simple_access component with the requried access, the check passes
- else if(SEND_SIGNAL(user, COMSIG_MOB_TRIED_ACCESS, src) & ACCESS_ALLOWED)
- return TRUE
-
- //If the mob is holding a valid ID, they pass the access check
- else if(check_access_obj(user.get_active_held_item()))
- return TRUE
-
- //if they are wearing a card that has access and are human, that works
- else if(ishuman(user))
- var/mob/living/carbon/human/human_user = user
- if(check_access_obj(human_user.wear_id))
- return TRUE
-
- //if they're strange and have a hacky ID card as an animal
- else if(isanimal(user))
- var/mob/living/simple_animal/animal = user
- if(check_access_obj(animal.access_card))
- return TRUE
-
-/datum/component/armament/proc/check_access_obj(obj/item/id)
- return check_access_list(id ? id.GetAccess() : null)
-
-/datum/component/armament/proc/check_access_list(list/access_list)
- if(!islist(required_access)) //something's very wrong
- return TRUE
-
- if(!length(required_access))
- return TRUE
-
- if(!length(access_list) || !islist(access_list))
- return FALSE
-
- for(var/req in required_access)
- if(!(req in access_list)) //doesn't have this access
- return FALSE
-
- return TRUE
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm b/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm
deleted file mode 100644
index 2afd6fba178..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/ash_armour.dm
+++ /dev/null
@@ -1,112 +0,0 @@
-//ASH CLOTHING
-/datum/armor/ash_headdress
- melee = 15
- bullet = 25
- laser = 15
- energy = 15
- bomb = 20
- bio = 10
-
-/datum/armor/clothing_under/ash_robes
- melee = 15
- bullet = 25
- laser = 15
- energy = 15
- bomb = 20
- bio = 10
-
-/datum/armor/ash_plates
- melee = 15
- bullet = 25
- laser = 15
- energy = 15
- bomb = 20
- bio = 10
-
-/obj/item/clothing/head/ash_headdress
- name = "ash headdress"
- desc = "A headdress that shows the dominance of the walkers of ash."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
- icon_state = "headdress"
- supports_variations_flags = NONE
- armor_type = /datum/armor/ash_headdress
-
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_config_worn = null
-
-/datum/crafting_recipe/ash_recipe/ash_headdress
- name = "Ash Headdress"
- result = /obj/item/clothing/head/ash_headdress
- category = CAT_CLOTHING
-
-/obj/item/clothing/head/ash_headdress/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
-
-/obj/item/clothing/head/ash_headdress/winged
- name = "winged ash headdress"
- icon_state = "wing_headdress"
-
-/datum/crafting_recipe/ash_recipe/ash_headdress/winged
- name = "Winged Ash Headdress"
- result = /obj/item/clothing/head/ash_headdress/winged
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes
- name = "ash robes"
- desc = "A set of hand-made robes. The bones still seem to have some muscle still attached."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
- icon_state = "robes"
- armor_type = /datum/armor/clothing_under/ash_robes
-
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_config_worn = null
-
-/datum/crafting_recipe/ash_recipe/ash_robes
- name = "Ash Robes"
- result = /obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes
- category = CAT_CLOTHING
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/ash_robes/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
-
-/obj/item/clothing/suit/ash_plates
- name = "ash combat plates"
- desc = "A combination of bones and hides, strung together by watcher sinew."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_mob.dmi'
- icon_state = "combat_plates"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- armor_type = /datum/armor/ash_plates
-
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_config_worn = null
-
-/datum/crafting_recipe/ash_recipe/ash_plates
- name = "Ash Combat Plates"
- result = /obj/item/clothing/suit/ash_plates
- category = CAT_CLOTHING
-
-/obj/item/clothing/suit/ash_plates/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 2, /obj/item/stack/sheet/animalhide/goliath_hide, list(MELEE = 5, BULLET = 2, LASER = 2))
-
-/obj/item/clothing/suit/ash_plates/decorated
- name = "decorated ash combat plates"
- icon_state = "dec_breastplate"
-
-/datum/crafting_recipe/ash_recipe/ash_plates/decorated
- name = "Decorated Ash Combat Plates"
- result = /obj/item/clothing/suit/ash_plates/decorated
- category = CAT_CLOTHING
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm b/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm
deleted file mode 100644
index b06995021f2..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/hands.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/obj/item/clothing/gloves/military/ashwalk
- icon = 'modular_skyrat/modules/ashwalkers/icons/gloves.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/hands.dmi'
- name = "ash coated bronze gloves"
- desc = "Some sort of thin material with the backing of bronze plates."
- icon_state = "legionlegat"
-
-/obj/item/clothing/gloves/military/claw
- icon = 'modular_skyrat/modules/ashwalkers/icons/gloves.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/hands.dmi'
- name = "tribal claw glove"
- desc = "A gauntlet fashioned from the hand of a long-dead creature. Judging by the claws, whoever brought the beast down must have had a hard fight."
- icon_state = "claw"
-
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/head.dm b/modular_skyrat/modules/ashwalkers/code/clothing/head.dm
deleted file mode 100644
index 246a55c3fee..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/head.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/clothing/head/shamanash
- name = "shaman skull"
- desc = "The skull of a long dead animal bolted to the front of a repurposed pan."
- icon = 'modular_skyrat/modules/ashwalkers/icons/hats.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/head.dmi'
- icon_state = "shamskull"
- supports_variations_flags = NONE
-
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm b/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm
deleted file mode 100644
index a0fff95bc2a..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/misc.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/item/clothing/suit/ashwalkermantle
- icon = 'modular_skyrat/modules/ashwalkers/icons/suits.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/suit.dmi'
- name = "tanned hide"
- desc = "The tanned hide of some brown furred creature."
- icon_state = "mantle_liz"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/ashwalkermantle/cape
- icon = 'modular_skyrat/modules/ashwalkers/icons/suits.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/suit.dmi'
- name = "brown leather cape"
- desc = "An ash coated cloak."
- icon_state = "desertcloak"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm b/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm
deleted file mode 100644
index 5ad12ceb550..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/neck.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/obj/item/clothing/neck/cloak/tribalmantle
- name = "ornate mantle"
- desc = "An ornate mantle commonly worn by a shaman or chieftain."
- icon = 'modular_skyrat/modules/ashwalkers/icons/cloaks.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/neck.dmi'
- icon_state = "tribal-mantle"
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm b/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm
deleted file mode 100644
index c84d61bf83d..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/shoes.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/item/clothing/shoes/jackboots/ashwalker
- name = "ash coated bronze boots"
- desc = "Boots decorated with poorly forged metal."
- icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
- icon_state = "legionmetal"
- supports_variations_flags = NONE
-
-/obj/item/clothing/shoes/jackboots/ashwalker/legate
- icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
- icon_state = "legionlegate"
- supports_variations_flags = NONE
-
-/obj/item/clothing/shoes/wraps/ashwalker
- icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
- name = "ash coated foot wraps"
- desc = "May hurt for less than normal legs."
- icon_state = "rag"
- supports_variations_flags = NONE
-
-/obj/item/clothing/shoes/wraps/ashwalker/tribalwraps
- icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
- worn_icon_digi = 'modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi'
- name = "ornate leg wraps"
- desc = "An ornate set of leg wraps commonly worn by a shaman or chieftain."
- icon_state = "tribalcuffs"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-/obj/item/clothing/shoes/wraps/ashwalker/mundanewraps
- icon = 'modular_skyrat/modules/ashwalkers/icons/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/feet.dmi'
- worn_icon_digi = 'modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi'
- name = "tribal leg wraps"
- desc = "A mundane set of leg wraps often worn by tribal villagers."
- icon_state = "mundanecuffs"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
diff --git a/modular_skyrat/modules/ashwalkers/code/clothing/under.dm b/modular_skyrat/modules/ashwalkers/code/clothing/under.dm
deleted file mode 100644
index 0ab3c3820f2..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/clothing/under.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/obj/item/clothing/under/costume/gladiator/ash_walker/greentrib
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash covered leaves"
- desc = "Green leaves coated with a thick layer of ash. Praise the Nercopolis."
- icon_state = "tribal_m"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/yellow
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash walker rags"
- desc = "Rags from Lavaland, coated with light ash. This one seems to be for the juniors of a tribe. Praise the Nercopolis."
- icon_state = "tribalrags"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/chiefrags
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "old ash walker rags"
- desc = "Rags from Lavaland, coated with heavy ash. This one seems to be for the elders of a tribe. Praise the Nercopolis."
- icon_state = "chiefrags"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/shaman
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "decorated ash walker rags"
- desc = "Rags from Lavaland, drenched with ash, it has fine jewel coated bones sewn around the neck. This one seems to be for the shaman of a tribe. Praise the Nercopolis."
- icon_state = "shamanrags"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/robe
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash walker robes"
- desc = "A robe from the ashlands. This one seems to be for ...Everyone, really. Praise the Nercopolis."
- icon_state = "robe_liz"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/tribal
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash walker tin"
- desc = "Thin tin bolted over poorly tanned leather."
- icon_state = "tribal"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/white
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "white ash walker rags"
- desc = "A poorly sewn dress made of white materials."
- icon_state = "lizcheo"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/chestwrap
- icon = 'modular_skyrat/modules/ashwalkers/icons/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "loincloth and chestwrap"
- desc = "A poorly sewn dress made of white materials."
- icon_state = "chestwrap"
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/caesar_clothes
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash walker tunic"
- desc = "A tattered red tunic of reddened fabric."
- icon_state = "caesar_clothes"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-/obj/item/clothing/under/costume/gladiator/ash_walker/legskirt_d
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/modules/ashwalkers/icons/uniform.dmi'
- name = "ash walker waistcloth"
- desc = "A unisex waistcloth to serve as a kilt or skirt."
- icon_state = "legskirt_d"
diff --git a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm b/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm
deleted file mode 100644
index 2435874ba0a..00000000000
--- a/modular_skyrat/modules/ashwalkers/code/items/ash_weapon.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-//ASH WEAPON
-/obj/item/melee/macahuitl
- name = "ash macahuitl"
- desc = "A weapon that looks like it will leave really bad marks."
- icon = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing.dmi'
- lefthand_file = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_left.dmi'
- righthand_file = 'modular_skyrat/modules/ashwalkers/icons/ashwalker_clothing_right.dmi'
- icon_state = "macahuitl"
-
- force = 15
- wound_bonus = 15
- bare_wound_bonus = 10
-
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_config_worn = null
-
-/datum/crafting_recipe/ash_recipe/macahuitl
- name = "Ash Macahuitl"
- result = /obj/item/melee/macahuitl
- reqs = list(
- /obj/item/stack/sheet/bone = 2,
- /obj/item/stack/sheet/sinew = 2,
- /obj/item/stack/sheet/animalhide/goliath_hide = 2,
- )
- always_available = FALSE
- category = CAT_WEAPON_MELEE
diff --git a/modular_skyrat/modules/ashwalkers/icons/feet.dmi b/modular_skyrat/modules/ashwalkers/icons/feet.dmi
deleted file mode 100644
index b4ba22e6b55..00000000000
Binary files a/modular_skyrat/modules/ashwalkers/icons/feet.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi b/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi
deleted file mode 100644
index 89e772d083c..00000000000
Binary files a/modular_skyrat/modules/ashwalkers/icons/feet_digi.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi b/modular_skyrat/modules/ashwalkers/icons/shoes.dmi
deleted file mode 100644
index 8125bc37ff3..00000000000
Binary files a/modular_skyrat/modules/ashwalkers/icons/shoes.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm b/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm
deleted file mode 100644
index f14d68fcebd..00000000000
--- a/modular_skyrat/modules/assault_operatives/code/equipment_items/misc_items.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/item/storage/pouch/medpens
- name = "medpen pouch"
- desc = "A pouch containing several different types of lifesaving medipens."
- icon = 'modular_skyrat/modules/modular_items/icons/storage.dmi'
- icon_state = "medpen_pouch"
- slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS
-
-/obj/item/storage/pouch/medpens/Initialize(mapload)
- . = ..()
- atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
- atom_storage.max_total_storage = 30
- atom_storage.max_slots = 5
- atom_storage.numerical_stacking = FALSE
- atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray))
-
-/obj/item/storage/pouch/medpens/PopulateContents()
- new /obj/item/reagent_containers/hypospray/medipen/blood_loss(src)
- new /obj/item/reagent_containers/hypospray/medipen/oxandrolone(src)
- new /obj/item/reagent_containers/hypospray/medipen/salacid(src)
- new /obj/item/reagent_containers/hypospray/medipen/salbutamol(src)
- new /obj/item/reagent_containers/hypospray/medipen/stimulants(src)
diff --git a/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm b/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm
deleted file mode 100644
index f2d07a64429..00000000000
--- a/modular_skyrat/modules/awaymissions_skyrat/code/gateway_key.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/key/gateway
- name = "global recall key"
- desc = "Recall to the Global Gateway."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductorkey.dmi'
- icon_state = "gateway_key"
- resistance_flags = INDESTRUCTIBLE
-
-
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm
deleted file mode 100644
index 114f718baf3..00000000000
--- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/gear.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Weaponry
- */
-
-/obj/item/gun/energy/alien/zeta
- name = "Zeta Blaster"
- desc = "Having this too close to your face makes you start to taste blood, is this safe?"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienblaster.dmi'
- lefthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienhand.dmi'
- righthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/alienhand2.dmi'
- icon_state = "alienblaster"
- inhand_icon_state = "alienblaster"
- pin = /obj/item/firing_pin
- selfcharge = TRUE
-
-/obj/item/gun/energy/alien/astrum
- name = "alien energy pistol"
- desc = "A seemingly complicated gun, that isn't so complicated after all."
- ammo_type = list(/obj/item/ammo_casing/energy/laser)
- pin = /obj/item/firing_pin
- icon_state = "alienpistol"
- inhand_icon_state = "alienpistol"
- cell_type = /obj/item/stock_parts/cell/pulse/pistol
-
-
-/**
- * Armour
- */
-
-/obj/item/clothing/suit/armor/abductor/astrum
- name = "agent vest"
- desc = "You feel like you're wearing the suit wrong, and you have no idea how to operate its systems."
- icon = 'icons/obj/antags/abductor.dmi'
- icon_state = "vest_combat"
- inhand_icon_state = "armor"
- blood_overlay_type = "armor"
- armor_type = /datum/armor/abductor_astrum
- resistance_flags = FIRE_PROOF | ACID_PROOF
- allowed = null // populated on init with armour vest defaults
-
-/datum/armor/abductor_astrum
- melee = 40
- bullet = 50
- laser = 50
- energy = 50
- bomb = 20
- bio = 50
- fire = 90
- acid = 90
-
-/obj/item/clothing/head/helmet/astrum
- name = "agent headgear"
- desc = "An exceptionally robust helmet. For alien standards, that is."
- icon_state = "alienhelmet"
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
- armor_type = /datum/armor/helmet_astrum
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/datum/armor/helmet_astrum
- melee = 40
- bullet = 30
- laser = 30
- energy = 40
- bomb = 50
- bio = 90
- fire = 100
- acid = 100
- wound = 15
diff --git a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm b/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm
deleted file mode 100644
index e2fd442e1de..00000000000
--- a/modular_skyrat/modules/awaymissions_skyrat/mothership_astrum/mob.dm
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-* MELEE
-*/
-
-/mob/living/basic/abductor
- name = "abductor scientist"
- desc = "From the depths of space."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi'
- icon_state = "abductor_scientist"
- icon_living = "abductor_scientist"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- sentience_type = SENTIENCE_HUMANOID
- faction = list(ROLE_ABDUCTOR)
-
- maxHealth = 120
- health = 120
- unsuitable_atmos_damage = 7.5
- basic_mob_flags = DEL_ON_DEATH
-
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/weapons/punch1.ogg'
-
- combat_mode = TRUE
- status_flags = CANPUSH
- speed = 2
-
- ai_controller = /datum/ai_controller/basic_controller/abductor
-
- /// What this mob drops on death
- var/list/loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot)
-
-/mob/living/basic/abductor/Initialize(mapload)
- . = ..()
- if(LAZYLEN(loot))
- loot = string_list(loot)
- AddElement(/datum/element/death_drops, loot)
- AddElement(/datum/element/footstep, FOOTSTEP_MOB_SHOE)
-
-
-// More damaging variant
-/mob/living/basic/abductor/melee
- icon_state = "abductor_scientist_melee"
- icon_living = "abductor_scientist_melee"
- status_flags = null
-
- melee_damage_lower = 10
- melee_damage_upper = 20
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/weapons/bladeslice.ogg'
- attack_vis_effect = ATTACK_EFFECT_SLASH
-
-
-// Tankier, more damaging variant
-/mob/living/basic/abductor/agent
- name = "abductor agent"
- icon_state = "abductor_agent"
- icon_living = "abductor_agent"
-
- health = 160
- maxHealth = 160
- loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot)
-
- melee_damage_lower = 15
- melee_damage_upper = 22
-
-
-/*
-* RANGED
-*/
-
-/mob/living/basic/abductor/ranged
- name = "abductor scientist"
- icon_state = "abductor_scientist_gun"
- icon_living = "abductor_scientist_gun"
-
- maxHealth = 120
- health = 120
- loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/sci_loot)
-
- ai_controller = /datum/ai_controller/basic_controller/abductor/ranged
-
-/mob/living/basic/abductor/ranged/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/ranged_attacks, projectile_sound = 'sound/weapons/laser.ogg', projectile_type = /obj/projectile/beam/laser)
-
-
-// Tankier variant
-/mob/living/basic/abductor/ranged/agent
- name = "abductor combat specialist"
- icon_state = "abductor_agent_combat_gun"
- icon_living = "abductor_agent_combat_gun"
-
- maxHealth = 140
- health = 140
- loot = list(/obj/effect/gibspawner/generic, /obj/effect/spawner/random/astrum/agent_loot)
-
-
-/**
- * BOSS
- */
-
-/mob/living/simple_animal/hostile/megafauna/hierophant/astrum
- name = "abductor captain"
- desc = "The one you've come here for. Finish this."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/abductors.dmi'
- icon_state = "abductor_agent_combat"
- icon_living = "abductor_agent_combat"
- icon_gib = "syndicate_gib"
- gps_name = "Captain's Signal"
- mouse_opacity = MOUSE_OPACITY_ICON
-
- health = 1750
- maxHealth = 1750
- health_doll_icon = "pandora"
- death_message = "falls to their knees before exploding into a ball of gore."
-
- attack_verb_continuous = "attacks"
- attack_verb_simple = "attack"
-
-/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE)
- . = ..()
- if(. != BULLET_ACT_HIT)
- return
-
- if(!hitting_projectile.is_hostile_projectile())
- return
-
- apply_damage(hitting_projectile.damage, hitting_projectile.damage_type) // no damage reduction
-
-/mob/living/simple_animal/hostile/megafauna/hierophant/astrum/death(gibbed)
- spawn_gibs()
- spawn_gibs()
- new /obj/item/key/gateway(get_turf(src))
- new /obj/item/gun/energy/alien/zeta(get_turf(src))
- qdel(src)
diff --git a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm b/modular_skyrat/modules/basic_mobs/code/bananaspider.dm
deleted file mode 100644
index 6e3a7e26dcd..00000000000
--- a/modular_skyrat/modules/basic_mobs/code/bananaspider.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-// Ported from Citadel Station
-
-/mob/living/basic/banana_spider
- name = "banana spider"
- desc = "What the fuck is this abomination?"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
- icon_state = "bananaspider"
- icon_dead = "bananaspider_peel"
- health = 1
- maxHealth = 1
- speed = 2
- pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
- mob_biotypes = MOB_ORGANIC|MOB_BUG
- mob_size = MOB_SIZE_TINY
- density = TRUE
- verb_say = "chitters"
- verb_ask = "chitters inquisitively"
- verb_exclaim = "chitters loudly"
- verb_yell = "chitters loudly"
- basic_mob_flags = DEL_ON_DEATH
- ai_controller = /datum/ai_controller/basic_controller/cockroach/banana_spider
-
-/mob/living/basic/banana_spider/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/slippery, 40)
- var/static/list/banana_drops = list(/obj/item/food/deadbanana_spider)
- AddElement(/datum/element/death_drops, banana_drops)
- AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY)
- AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1)
-
-/datum/ai_controller/basic_controller/cockroach/banana_spider
- idle_behavior = /datum/idle_behavior/idle_random_walk/banana_spider
-
-/datum/idle_behavior/idle_random_walk/banana_spider
- walk_chance = 10
-
-/obj/item/food/deadbanana_spider
- name = "dead banana spider"
- desc = "Thank god it's gone...but it does look slippery."
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
- icon_state = "bananaspider_peel"
- food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 2)
- foodtypes = GORE | MEAT | RAW
- grind_results = list(/datum/reagent/blood = 20, /datum/reagent/consumable/liquidgibs = 5)
- juice_typepath = /datum/reagent/consumable/banana
-
-
-/obj/item/food/deadbanana_spider/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/slippery, 20)
-
-/mob/living/basic/spider/giant/badnana_spider
- name = "badnana spider"
- desc = "WHY WOULD GOD ALLOW THIS?!"
- icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
- icon_state = "badnanaspider" // created by Coldstorm on the Skyrat Discord
- icon_living = "badnanaspider"
- icon_dead = "badnanaspider_d"
- maxHealth = 40
- health = 40
- melee_damage_lower = 5
- melee_damage_upper = 5
- speed = -0.5
- faction = list(FACTION_SPIDER)
-
diff --git a/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm b/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm
deleted file mode 100644
index f48f70e1b1f..00000000000
--- a/modular_skyrat/modules/better_vox/code/vox_bodyparts.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-// voxs!
-/obj/item/bodypart/head/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_head"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM | BODYTYPE_SNOUTED
- is_dimorphic = FALSE
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
-/obj/item/bodypart/chest/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_chest"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
- is_dimorphic = FALSE
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
-/obj/item/bodypart/arm/left/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_l_arm"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
-/obj/item/bodypart/arm/right/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_r_arm"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
-/obj/item/bodypart/leg/left/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_l_leg"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
-/obj/item/bodypart/leg/right/mutant/vox_primalis
- icon_static = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_greyscale = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon = 'modular_skyrat/modules/better_vox/icons/bodyparts/vox_bodyparts.dmi'
- icon_state = "vox_primalis_r_leg"
- bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_CUSTOM
- should_draw_greyscale = FALSE
- limb_id = SPECIES_VOX_PRIMALIS
-
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/back.dmi b/modular_skyrat/modules/better_vox/icons/clothing/back.dmi
deleted file mode 100644
index 58b25444b2d..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/back.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi b/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi
deleted file mode 100644
index b8ef83345d2..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/belt.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi b/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi
deleted file mode 100644
index 6892b304eed..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/eyes.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/head.dmi b/modular_skyrat/modules/better_vox/icons/clothing/head.dmi
deleted file mode 100644
index 6f1f5fb4618..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/head.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi b/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi
deleted file mode 100644
index f4d7beca591..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/helmet.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi b/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi
deleted file mode 100644
index cc76f904848..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/mask.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi b/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi
deleted file mode 100644
index b1c272b0ccd..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/mod.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi b/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi
deleted file mode 100644
index adfd1c200c5..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/suit.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi b/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi
deleted file mode 100644
index 7b7ae9a2af5..00000000000
Binary files a/modular_skyrat/modules/better_vox/icons/clothing/uniform.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm b/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm
deleted file mode 100644
index e7899673615..00000000000
--- a/modular_skyrat/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/datum/outfit/solfed_bitrun
- name = "Bitrunning SolFed Marine"
-
- uniform = /obj/item/clothing/under/rank/security/officer/hecu
- head = null
- mask = /obj/item/clothing/mask/gas/hecu2
- gloves = /obj/item/clothing/gloves/combat
- suit = null
- shoes = /obj/item/clothing/shoes/combat
- back = /obj/item/storage/backpack/ert/odst/hecu
- glasses = null
- ears = /obj/item/radio/headset/headset_faction/bowman
- id = /obj/item/card/id/advanced/solfed
- r_hand = null
- l_hand = null
- backpack_contents = null
- belt = null
- id_trim = /datum/id_trim/solfed_bitrun
-
-/datum/id_trim/solfed_bitrun
- trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi'
- assignment = "SolFed Marine"
- trim_state = "trim_solfed"
- department_color = COLOR_SOLFED_GOLD
- subdepartment_color = COLOR_SOLFED_GOLD
- sechud_icon_state = SECHUD_SOLFED
-
-/datum/outfit/cin_soldier_corpse
- name = "Coalition Operative Corpse"
- uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest
- suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/fingerless
- ears = /obj/item/radio/headset/cybersun
- mask = /obj/item/clothing/mask/balaclavaadjust
- head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest
- back = /obj/item/storage/backpack/industrial/cin_surplus/forest
- belt = /obj/item/storage/belt/military/cin_surplus/forest
- id = /obj/item/card/id/advanced
- id_trim = /datum/id_trim/nri_raider/cin
-
-/datum/outfit/cin_soldier_player
- name = "Coalition Operative SNPC"
- uniform = /obj/item/clothing/under/syndicate/rus_army/cin_surplus/forest
- suit = /obj/item/clothing/suit/armor/vest/cin_surplus_vest
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/fingerless
- ears = /obj/item/radio/headset/cybersun
- glasses = /obj/item/clothing/glasses/hud/health
- mask = /obj/item/clothing/mask/gas/sechailer/swat
- head = /obj/item/clothing/head/helmet/cin_surplus_helmet/forest
- back = /obj/item/storage/backpack/industrial/cin_surplus/forest
- backpack_contents = list(
- /obj/item/storage/box/nri_survival_pack/raider,
- /obj/item/gun/ballistic/automatic/pistol/plasma_marksman,
- /obj/item/ammo_box/magazine/recharge/plasma_battery = 2,
- )
- r_hand = null
- l_hand = null
- belt = /obj/item/storage/belt/military/cin_surplus/forest
- id = /obj/item/card/id/advanced
- id_trim = /datum/id_trim/nri_raider/cin
-
-/datum/outfit/cin_soldier_player/post_equip(mob/living/carbon/human/user, visualsOnly)
- . = ..()
- user.faction |= ROLE_SYNDICATE
-
- // make sure we update the ID's name too
- var/obj/item/card/id/id_card = user.wear_id
- if(istype(id_card))
- id_card.registered_name = user.real_name
- id_card.update_label()
-
-/datum/id_trim/nri_raider/cin
- assignment = "CIN Operative"
diff --git a/modular_skyrat/modules/black_mesa/code/armor.dm b/modular_skyrat/modules/black_mesa/code/armor.dm
deleted file mode 100644
index cfbd7afec2d..00000000000
--- a/modular_skyrat/modules/black_mesa/code/armor.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/item/clothing/suit/armor/vest/hecu
- name = "combat vest"
- desc = "Vest designed to take heavy beating and probably keep the user alive in the process."
- armor_type = /datum/armor/vest_hecu
- icon_state = "ceramic_vest"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_digi.dmi'
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Basic" = list(
- RESKIN_ICON_STATE = "ceramic_vest",
- RESKIN_WORN_ICON_STATE = "ceramic_vest"
- ),
- "Corpsman" = list(
- RESKIN_ICON_STATE = "ceramic_vest_medic",
- RESKIN_WORN_ICON_STATE = "ceramic_vest_medic"
- ),
- "Basic Black" = list(
- RESKIN_ICON_STATE = "ceramic_vest_black",
- RESKIN_WORN_ICON_STATE = "ceramic_vest_black"
- ),
- "Corpsman Black" = list(
- RESKIN_ICON_STATE = "ceramic_vest_medic_black",
- RESKIN_WORN_ICON_STATE = "ceramic_vest_medic_black"
- ),
- )
-
-/datum/armor/vest_hecu
- melee = 40
- bullet = 40
- laser = 40
- energy = 40
- bomb = 40
- fire = 80
- acid = 100
- wound = 30
-
-/obj/item/clothing/head/helmet/hecu
- name = "combat helmet"
- desc = "Helmet designed to take heavy beating and probably keep the user alive in the process."
- armor_type = /datum/armor/helmet_hecu
- icon_state = "ceramic_helmet"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecucloth.dmi'
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob.dmi'
- worn_icon_digi = 'modular_skyrat/modules/awaymissions_skyrat/icons/hecumob_muzzled.dmi'
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Basic" = list(
- RESKIN_ICON_STATE = "ceramic_helmet",
- RESKIN_WORN_ICON_STATE = "ceramic_helmet"
- ),
- "Corpsman" = list(
- RESKIN_ICON_STATE = "ceramic_helmet_medic",
- RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic"
- ),
- "Basic Black" = list(
- RESKIN_ICON_STATE = "ceramic_helmet_black",
- RESKIN_WORN_ICON_STATE = "ceramic_helmet_black"
- ),
- "Corpsman Black" = list(
- RESKIN_ICON_STATE = "ceramic_helmet_medic_black",
- RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic_black"
- ),
- )
-
-/datum/armor/helmet_hecu
- melee = 30
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 80
- acid = 100
- wound = 30
diff --git a/modular_skyrat/modules/black_mesa/code/guns.dm b/modular_skyrat/modules/black_mesa/code/guns.dm
deleted file mode 100644
index f4a430c11bd..00000000000
--- a/modular_skyrat/modules/black_mesa/code/guns.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/gun/ballistic/automatic/laser/marksman // Cheap replacement for a gauss rifle.
- name = "designated marksman rifle"
- desc = "A special laser beam sniper rifle designed by a certain now defunct research facility."
- icon_state = "ctfmarksman"
- inhand_icon_state = "ctfmarksman"
- accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/marksman
- force = 15
- weapon_weight = WEAPON_HEAVY
- fire_delay = 4 SECONDS
- fire_sound = 'modular_skyrat/modules/sec_haul/sound/chaingun_fire.ogg'
-
-/obj/item/gun/ballistic/automatic/laser/marksman/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/scope, range_modifier = 1.5)
-
-/obj/item/ammo_box/magazine/recharge/marksman
- ammo_type = /obj/item/ammo_casing/laser/marksman
- max_ammo = 5
-
-/obj/item/ammo_casing/laser/marksman
- projectile_type = /obj/projectile/beam/marksman
-
-/obj/item/ammo_casing/laser/marksman/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/delete_on_drop)
-
-/obj/projectile/beam/marksman
- name = "laser beam"
- damage = 70
- armour_penetration = 30
- hitscan = TRUE
- icon_state = "gaussstrong"
- tracer_type = /obj/effect/projectile/tracer/solar
- muzzle_type = /obj/effect/projectile/muzzle/solar
- impact_type = /obj/effect/projectile/impact/solar
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm b/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm
deleted file mode 100644
index debcf75040f..00000000000
--- a/modular_skyrat/modules/black_mesa/code/mobs/bullsquid.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid
- name = "bullsquid"
- desc = "Some highly aggressive alien creature. Thrives in toxic environments."
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "bullsquid"
- icon_living = "bullsquid"
- icon_dead = "bullsquid_dead"
- icon_gib = null
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
- environment_smash = ENVIRONMENT_SMASH_STRUCTURES
- speak_chance = 1
- speak_emote = list("growls")
- emote_taunt = list("growls", "snarls", "grumbles")
- taunt_chance = 100
- turns_per_move = 7
- maxHealth = 110
- health = 110
- obj_damage = 50
- harm_intent_damage = 15
- melee_damage_lower = 15
- melee_damage_upper = 15
- ranged = TRUE
- retreat_distance = 4
- minimum_distance = 4
- dodging = TRUE
- projectiletype = /obj/projectile/bullsquid
- projectilesound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg'
- melee_damage_upper = 18
- attack_sound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg'
- gold_core_spawnable = HOSTILE_SPAWN
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg'
- )
-
-/obj/projectile/bullsquid
- name = "nasty ball of ooze"
- icon_state = "neurotoxin"
- damage = 5
- damage_type = BURN
- knockdown = 20
- armor_flag = BIO
- impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin
- hitsound = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg'
- hitsound_wall = 'modular_skyrat/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg'
-
-/obj/projectile/bullsquid/on_hit(atom/target, blocked = 0, pierce_hit)
- new /obj/effect/decal/cleanable/greenglow(target.loc)
- return ..()
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm b/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm
deleted file mode 100644
index 5479c376132..00000000000
--- a/modular_skyrat/modules/black_mesa/code/mobs/headcrab_zombie.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie
- name = "headcrab zombie"
- desc = "This unlucky person has had a headcrab latch onto their head. Ouch."
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "zombie"
- icon_living = "zombie"
- maxHealth = 110
- health = 110
- icon_gib = null
- icon_dead = "zombie_dead"
- speak_chance = 1
- speak_emote = list("growls")
- speed = 1
- emote_taunt = list("growls", "snarls", "grumbles")
- taunt_chance = 100
- melee_damage_lower = 21
- melee_damage_upper = 21
- attack_sound = 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg'
- gold_core_spawnable = HOSTILE_SPAWN
- alert_cooldown_time = 8 SECONDS
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert2.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert3.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert4.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert5.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/alert6.ogg',
- )
-
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/death(gibbed)
- new /obj/effect/gibspawner/human(get_turf(src))
- return ..()
-
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist
- name = "zombified scientist"
- desc = "Even after death, I still have to wear this horrible tie!"
- icon_state = "scientist_zombie"
- icon_living = "scientist_zombie"
- loot = list(/obj/effect/mob_spawn/corpse/human/scientist_zombie)
- del_on_death = 1
-
-
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard
- name = "zombified guard"
- desc = "About that brain I owed ya!"
- icon_state = "security_zombie"
- icon_living = "security_zombie"
- maxHealth = 140 // Armor!
- health = 140
- loot = list(/obj/effect/mob_spawn/corpse/human/guard_zombie)
- del_on_death = 1
-
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu
- name = "zombified marine"
- desc = "MY. ASS. IS. DEAD."
- icon_state = "hecu_zombie"
- icon_living = "hecu_zombie"
- maxHealth = 190 // More armor!
- health = 190
- loot = list(/obj/effect/mob_spawn/corpse/human/hecu_zombie)
- del_on_death = 1
-
-/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev
- name = "zombified hazardous environment specialist"
- desc = "User death... surpassed."
- icon_state = "hev_zombie"
- icon_living = "hev_zombie"
- maxHealth = 250
- health = 250
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv1.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv2.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv3.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv4.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv5.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv6.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv7.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv8.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv9.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv10.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv11.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv12.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv13.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/zombies/hzv14.ogg',
- )
-
-
-
-
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm b/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm
deleted file mode 100644
index d95eeda1b30..00000000000
--- a/modular_skyrat/modules/black_mesa/code/mobs/human_mobs.dm
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-* HECU
-*/
-
-/mob/living/simple_animal/hostile/blackmesa/hecu
- name = "HECU Grunt"
- desc = "I didn't sign on for this shit. Monsters, sure, but civilians? Who ordered this operation anyway?"
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "hecu_melee"
- icon_living = "hecu_melee"
- icon_dead = "hecu_dead"
- icon_gib = "syndicate_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- sentience_type = SENTIENCE_HUMANOID
- speak_chance = 10
- speak = list("Stop right there!")
- turns_per_move = 5
- speed = 0
- stat_attack = HARD_CRIT
- robust_searching = 1
- maxHealth = 150
- health = 150
- harm_intent_damage = 5
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/weapons/punch1.ogg'
- combat_mode = TRUE
- loot = list(/obj/effect/gibspawner/human, /obj/item/melee/baton)
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 7.5
- faction = list(FACTION_HECU)
- check_friendly_fire = 1
- status_flags = CANPUSH
- del_on_death = 1
- dodging = TRUE
- rapid_melee = 2
- footstep_type = FOOTSTEP_MOB_SHOE
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg'
- )
-
-
-/mob/living/simple_animal/hostile/blackmesa/hecu/ranged
- ranged = TRUE
- retreat_distance = 5
- minimum_distance = 5
- icon_state = "hecu_ranged"
- icon_living = "hecu_ranged"
- casingtype = /obj/item/ammo_casing/a50ae
- projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
- loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle)
- dodging = TRUE
- rapid_melee = 1
-
-/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg
- rapid = 3
- icon_state = "hecu_ranged_smg"
- icon_living = "hecu_ranged_smg"
- casingtype = /obj/item/ammo_casing/c34
- projectilesound = 'sound/weapons/gun/smg/shot.ogg'
- loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg)
-
-/mob/living/simple_animal/hostile/blackmesa/sec
- name = "Security Guard"
- desc = "About that beer I owe'd ya!"
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "security_guard_melee"
- icon_living = "security_guard_melee"
- icon_dead = "security_guard_dead"
- icon_gib = "syndicate_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- sentience_type = SENTIENCE_HUMANOID
- turns_per_move = 5
- speed = 0
- stat_attack = HARD_CRIT
- robust_searching = 1
- maxHealth = 100
- health = 100
- harm_intent_damage = 5
- melee_damage_lower = 7
- melee_damage_upper = 7
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/weapons/punch1.ogg'
- loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt)
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 7.5
- faction = list(FACTION_STATION, FACTION_NEUTRAL)
- check_friendly_fire = 1
- status_flags = CANPUSH
- del_on_death = TRUE
- combat_mode = TRUE
- dodging = TRUE
- rapid_melee = 2
- footstep_type = FOOTSTEP_MOB_SHOE
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg'
- )
- var/list/follow_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg',
- )
- var/list/unfollow_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg',
- )
- var/follow_speed = 2
- var/follow_distance = 2
-
-/mob/living/simple_animal/hostile/blackmesa/sec/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/follow, follow_sounds, unfollow_sounds, follow_distance, follow_speed)
-
-
-/mob/living/simple_animal/hostile/blackmesa/sec/ranged
- ranged = TRUE
- retreat_distance = 5
- minimum_distance = 5
- icon_state = "security_guard_ranged"
- icon_living = "security_guard_ranged"
- casingtype = /obj/item/ammo_casing/c9mm
- projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
- loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt, /obj/item/gun/ballistic/automatic/pistol/sol)
- rapid_melee = 1
-
-/mob/living/simple_animal/hostile/blackmesa/blackops
- name = "black operative"
- desc = "Why do we always have to clean up a mess the grunts can't handle?"
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "blackops"
- icon_living = "blackops"
- icon_dead = "blackops"
- icon_gib = "syndicate_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- sentience_type = SENTIENCE_HUMANOID
- speak_chance = 10
- speak = list("Got a visual!")
- turns_per_move = 5
- speed = 0
- stat_attack = HARD_CRIT
- robust_searching = 1
- maxHealth = 200
- health = 200
- harm_intent_damage = 25
- melee_damage_lower = 30
- melee_damage_upper = 30
- attack_verb_continuous = "strikes"
- attack_verb_simple = "strikes"
- attack_sound = 'sound/effects/woodhit.ogg'
- combat_mode = TRUE
- loot = list(/obj/effect/gibspawner/human)
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 7.5
- faction = list(FACTION_BLACKOPS)
- check_friendly_fire = 1
- status_flags = CANPUSH
- del_on_death = 1
- dodging = TRUE
- rapid_melee = 2
- footstep_type = FOOTSTEP_MOB_SHOE
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg'
- )
-
-
-/mob/living/simple_animal/hostile/blackmesa/blackops/ranged
- ranged = TRUE
- rapid = 2
- retreat_distance = 5
- minimum_distance = 5
- icon_state = "blackops_ranged"
- icon_living = "blackops_ranged"
- casingtype = /obj/item/ammo_casing/c40sol
- projectilesound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg'
- attack_sound = 'sound/weapons/punch1.ogg'
- loot = list(/obj/effect/gibspawner/human, /obj/item/ammo_box/magazine/c40sol_rifle/standard)
- rapid_melee = 1
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm b/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm
deleted file mode 100644
index bdd4bfc2860..00000000000
--- a/modular_skyrat/modules/black_mesa/code/mobs/nihilanth.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth
- name = "nihilanth"
- desc = "Holy shit."
- icon = 'modular_skyrat/modules/black_mesa/icons/nihilanth.dmi'
- icon_state = "nihilanth"
- icon_living = "nihilanth"
- SET_BASE_PIXEL(-32, -32)
- speed = 3
- bound_height = 64
- bound_width = 64
- icon_dead = "bullsquid_dead"
- maxHealth = 3000
- health = 3000
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- projectilesound = 'sound/weapons/lasercannonfire.ogg'
- projectiletype = /obj/projectile/nihilanth
- ranged = TRUE
- rapid = 3
- alert_cooldown = 2 MINUTES
- harm_intent_damage = 50
- melee_damage_lower = 30
- melee_damage_upper = 40
- attack_verb_continuous = "lathes"
- attack_verb_simple = "lathe"
- attack_sound = 'sound/weapons/punch1.ogg'
- status_flags = NONE
- del_on_death = TRUE
- wander = TRUE
- loot = list(/obj/effect/gibspawner/xeno, /obj/item/stack/sheet/bluespace_crystal/fifty, /obj/item/key/gateway, /obj/item/uber_teleporter)
- movement_type = FLYING
-
-/obj/item/stack/sheet/bluespace_crystal/fifty
- amount = 50
-
-/obj/projectile/nihilanth
- name = "portal energy"
- icon_state = "seedling"
- damage = 20
- damage_type = BURN
- light_range = 2
- armor_flag = ENERGY
- light_color = LIGHT_COLOR_BRIGHT_YELLOW
- hitsound = 'sound/weapons/sear.ogg'
- hitsound_wall = 'sound/weapons/effects/searwall.ogg'
- nondirectional_sprite = TRUE
-
-/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro()
- . = ..()
- if(!(world.time <= alert_cooldown_time))
- alert_cooldown_time = world.time + alert_cooldown
- switch(health)
- if(0 to 999)
- playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg')), 100)
- if(1000 to 2999)
- playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg')), 100)
- if(3000 to 6000)
- playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg')), 100)
- else
- playsound(src, pick(list('modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg', 'modular_skyrat/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg')), 100)
- set_combat_mode(TRUE)
-
-/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/death(gibbed)
- . = ..()
-
-/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/LoseAggro()
- . = ..()
- set_combat_mode(FALSE)
diff --git a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm
deleted file mode 100644
index ff9542b126b..00000000000
--- a/modular_skyrat/modules/black_mesa/code/mobs/vortigaunt.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt
- name = "vortigaunt"
- desc = "There is no distance between us. No false veils of time or space may intervene."
- icon = 'modular_skyrat/modules/black_mesa/icons/mobs.dmi'
- icon_state = "vortigaunt"
- icon_living = "vortigaunt"
- icon_dead = "vortigaunt_dead"
- icon_gib = null
- gender = MALE
- faction = list(FACTION_STATION, FACTION_NEUTRAL)
- mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
- speak_chance = 1
- speak_emote = list("galungs")
- speed = 1
- emote_taunt = list("galalungas", "galungas", "gungs")
- projectiletype = /obj/projectile/beam/emitter/hitscan
- projectilesound = 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg'
- ranged_cooldown_time = 5 SECONDS
- ranged_message = "fires"
- taunt_chance = 100
- turns_per_move = 7
- maxHealth = 130
- health = 130
- speed = 3
- ranged = TRUE
- dodging = TRUE
- harm_intent_damage = 15
- melee_damage_lower = 10
- melee_damage_upper = 10
- retreat_distance = 5
- minimum_distance = 5
- attack_sound = 'sound/weapons/bite.ogg'
- gold_core_spawnable = FRIENDLY_SPAWN
- loot = list(/obj/item/stack/sheet/bone)
- alert_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg',
- )
- /// SOunds we play when asked to follow/unfollow.
- var/list/follow_sounds = list(
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg',
- 'modular_skyrat/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg',
- )
- var/follow_speed = 1
- var/follow_distance = 2
-
-/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/follow, follow_sounds, follow_sounds, follow_distance, follow_speed)
-
-/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave
- name = "slave vortigaunt"
- desc = "Bound by the shackles of a sinister force. He does not want to hurt you."
- icon_state = "vortigaunt_slave"
- faction = list(FACTION_XEN)
diff --git a/modular_skyrat/modules/black_mesa/code/rationpacks.dm b/modular_skyrat/modules/black_mesa/code/rationpacks.dm
deleted file mode 100644
index 9965858d07a..00000000000
--- a/modular_skyrat/modules/black_mesa/code/rationpacks.dm
+++ /dev/null
@@ -1,133 +0,0 @@
-/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can.
-#define EDIBLE_PIZZA_LIST list( \
- /obj/item/food/pizza/margherita, \
- /obj/item/food/pizza/meat, \
- /obj/item/food/pizza/mushroom, \
- /obj/item/food/pizza/vegetable, \
- /obj/item/food/pizza/donkpocket, \
- /obj/item/food/pizza/dank, \
- /obj/item/food/pizza/sassysage, \
- /obj/item/food/pizza/pineapple, \
- /obj/item/food/pizza/mothic_margherita, \
- /obj/item/food/pizza/mothic_firecracker, \
- /obj/item/food/pizza/mothic_five_cheese, \
- /obj/item/food/pizza/mothic_white_pie, \
- /obj/item/food/pizza/mothic_pesto, \
- /obj/item/food/pizza/mothic_garlic, \
- /obj/item/food/pizza/flatbread/rustic, \
- /obj/item/food/pizza/flatbread/italic, \
- /obj/item/food/pizza/flatbread/zmorgast, \
- /obj/item/food/pizza/flatbread/fish, \
- /obj/item/food/pizza/flatbread/mushroom, \
- /obj/item/food/pizza/flatbread/nutty, \
-)
-
-/obj/item/food/mre_course
- name = "undefined MRE course"
- desc = "Something you shouldn't see. But it's edible."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/courses.dmi'
- icon_state = "main_course"
- food_reagents = list(/datum/reagent/consumable/nutriment = 20)
- tastes = list("crayon powder" = 1)
- foodtypes = VEGETABLES | GRAIN
- w_class = WEIGHT_CLASS_SMALL
-
-/obj/item/food/mre_course/main
- name = "MRE main course"
- desc = "Main course of the ancient military ration designed for ground troops. This one is NOTHING."
- tastes = list("strawberry" = 1, "vanilla" = 1, "chocolate" = 1)
-
-/obj/item/food/mre_course/main/beans
- name = "MRE main course - Pork and Beans"
- desc = "Main course of the ancient military ration designed for ground troops. This one is pork and beans covered in some tomato sauce."
- tastes = list("beans" = 1, "pork" = 1, "tomato sauce" = 1)
- foodtypes = MEAT | VEGETABLES
-
-/obj/item/food/mre_course/main/macaroni
- name = "MRE main course - Macaroni and Cheese"
- desc = "Main course of the ancient military ration designed for ground troops. This one is preboiled macaroni covered in some federal reserve cheese."
- tastes = list("cold macaroni" = 1, "bland cheese" = 1)
- foodtypes = DAIRY | GRAIN
-
-/obj/item/food/mre_course/main/rice
- name = "MRE main course - Rice and Beef"
- desc = "Main course of the ancient military ration designed for ground troops. This one is rice with beef, covered in gravy."
- tastes = list("dense rice" = 1, "bits of beef" = 1, "gravy" = 1)
- foodtypes = GRAIN | MEAT
-
-/obj/item/food/mre_course/side
- name = "MRE side course"
- desc = "Side course of the ancient military ration designed for ground troops. This one is NOTHING."
- icon_state = "side_dish"
-
-/obj/item/food/mre_course/side/bread
- name = "MRE side course - Cornbread"
- desc = "Side course of the ancient military ration designed for ground troops. This one is cornbread."
- tastes = list("cornbread" = 1)
- foodtypes = GRAIN
-
-/obj/item/food/mre_course/side/pie
- name = "MRE side course - Meat Pie"
- desc = "Side course of the ancient military ration designed for ground troops. This one is some meat pie."
- tastes = list("pie dough" = 1, "ground meat" = 1, "Texas" = 1)
- foodtypes = MEAT | GRAIN
-
-/obj/item/food/mre_course/side/chicken
- name = "MRE side course - Sweet 'n Sour Chicken"
- desc = "Side course of the ancient military ration designed for ground troops. This one is some undefined chicken-looking meat covered in cheap reddish sauce."
- tastes = list("bits of chicken meat" = 1, "sweet and sour sauce" = 1, "salt" = 1)
- foodtypes = MEAT | FRIED
-
-/obj/item/food/mre_course/dessert
- name = "MRE dessert"
- desc = "Dessert of the ancient military ration designed for ground troops. This one is NOTHING."
- icon_state = "dessert"
-
-/obj/item/food/mre_course/dessert/cookie
- name = "MRE dessert - Cookie"
- desc = "Dessert of the ancient military ration designed for ground troops. This one is a big dry cookie."
- tastes = list("dryness" = 1, "hard cookie" = 1, "chocolate chip" = 1)
- foodtypes = GRAIN | SUGAR
-
-/obj/item/food/mre_course/dessert/cake
- name = "MRE dessert - Apple Pie"
- desc = "Dessert of the ancient military ration designed for ground troops. This one is an amorphous apple pie."
- tastes = list("apple" = 1, "moist cake" = 1, "sugar" = 1)
- foodtypes = GRAIN | SUGAR | FRUIT
-
-/obj/item/food/mre_course/dessert/chocolate
- name = "MRE dessert - Dark Chocolate"
- desc = "Dessert of the ancient military ration designed for ground troops. This one is a dark bar of chocolate."
- tastes = list("vanilla" = 1, "artificial chocolate" = 1, "chemicals" = 1)
- foodtypes = JUNKFOOD | SUGAR
-
-/obj/item/storage/box/hecu_rations
- name = "Meal, Ready-to-Eat"
- desc = "A box containing a few rations and some chewing gum, for keeping a starving crayon-eater going."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/mre_hecu.dmi'
- icon_state = "mre_package"
- illustration = null
-
-/obj/item/storage/box/hecu_rations/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = 5
-
-/obj/item/storage/box/hecu_rations/PopulateContents()
- var/main_course = pick(/obj/item/food/mre_course/main/beans, /obj/item/food/mre_course/main/macaroni, /obj/item/food/mre_course/main/rice)
- var/side_dish = pick(/obj/item/food/mre_course/side/bread, /obj/item/food/mre_course/side/pie, /obj/item/food/mre_course/side/chicken)
- var/dessert = pick(/obj/item/food/mre_course/dessert/cookie, /obj/item/food/mre_course/dessert/cake, /obj/item/food/mre_course/dessert/chocolate)
- new main_course(src)
- new side_dish(src)
- new dessert(src)
- new /obj/item/storage/box/gum(src)
- new /obj/item/food/spacers_sidekick(src)
-
-/obj/item/pizzabox/random
- boxtag = "Randy's Surprise"
- boxtag_set = TRUE
-
-/obj/item/pizzabox/random/Initialize(mapload)
- . = ..()
- if(!pizza)
- var/random_pizza = pick(EDIBLE_PIZZA_LIST)
- pizza = new random_pizza(src)
diff --git a/modular_skyrat/modules/black_mesa/code/turfs.dm b/modular_skyrat/modules/black_mesa/code/turfs.dm
deleted file mode 100644
index e026f2d9331..00000000000
--- a/modular_skyrat/modules/black_mesa/code/turfs.dm
+++ /dev/null
@@ -1,111 +0,0 @@
-/turf/closed/mineral/black_mesa
- turf_type = /turf/open/misc/ironsand/black_mesa
- baseturfs = /turf/open/misc/ironsand/black_mesa
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
-
-//Floors that no longer lead into space (innovative!)
-/turf/open/misc/ironsand/black_mesa
- baseturfs = /turf/open/misc/ironsand/black_mesa
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
-
-/obj/effect/baseturf_helper/black_mesa
- name = "black mesa sand baseturf editor"
- baseturf = /turf/open/misc/ironsand/black_mesa
-
-/obj/effect/baseturf_helper/black_mesa_xen
- name = "xen baseturf editor"
- baseturf = /turf/open/water/xen_acid
-
-/turf/closed/indestructible/rock/xen
- name = "strange wall"
- color = "#ac3b06"
- baseturfs = /turf/closed/indestructible/rock/xen
-
-/turf/open/misc/xen
- name = "strange weeds"
- desc = "It feels soft to the touch, like a carpet... only... wet."
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi'
- icon_state = "xen_turf"
- baseturfs = /turf/open/misc/xen
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- planetary_atmos = TRUE
-
-/turf/open/water/beach/xen
- desc = "It's mirky and filled with strange organisms."
- name = "xen water"
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi'
- baseturfs = /turf/open/water/beach/xen
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
-
-/turf/open/misc/beach/coastline_t/xen
- desc = "It's mirky and filled with strange organisms."
- name = "xen water"
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi'
- baseturfs = /turf/open/misc/beach/coastline_t/xen
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
-
-/turf/open/misc/beach/coastline_t/sandwater_inner/xen
- desc = "It's mirky and filled with strange organisms."
- name = "xen water"
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi'
- baseturfs = /turf/open/misc/beach/coastline_t/sandwater_inner/xen
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
-
-/turf/open/misc/beach/coastline_b/xen
- name = "xen water"
- desc = "It's mirky and filled with strange organisms."
- icon = 'modular_skyrat/modules/black_mesa/icons/xen_turfs.dmi'
- baseturfs = /turf/open/misc/beach/coastline_b/xen
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
-
-/turf/open/misc/dirt/planet/xen
- name = "strange path"
- color = "#ee5f1c"
- baseturfs = /turf/open/misc/dirt/planet/xen
- planetary_atmos = TRUE
-
-/turf/open/water/xen_acid
- baseturfs = /turf/open/water/xen_acid
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- planetary_atmos = TRUE
- color = COLOR_VIBRANT_LIME
- light_range = 2
- light_color = COLOR_VIBRANT_LIME
- /// How much damage we deal if a mob enters us.
- var/acid_damage = 30
-
-/turf/open/water/xen_acid/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
- . = ..()
- if(isliving(arrived) && !istype(arrived, /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid)) // Bull squid territory!
- var/mob/living/unlucky_mob = arrived
- unlucky_mob.adjustFireLoss(acid_damage)
- playsound(unlucky_mob, 'sound/weapons/sear.ogg', 100, TRUE)
-
-/turf/open/water/electric
- name = "electric water"
- baseturfs = /turf/open/water/electric
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- color = COLOR_TEAL
- light_range = 2
- light_color = COLOR_TEAL
-
-/turf/open/water/electric/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
- . = ..()
- if(isliving(arrived))
- var/mob/living/unlucky_mob = arrived
- unlucky_mob.Stun(1.5 SECONDS)
- unlucky_mob.Knockdown(10 SECONDS)
- unlucky_mob.adjustFireLoss(15)
- var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread
- s.set_up(5, 1, unlucky_mob.loc)
- s.start()
- unlucky_mob.visible_message(span_danger("[unlucky_mob.name] is shocked by [src]!"), \
- span_userdanger("You feel a powerful shock course through your body!"), \
- span_hear("You hear a heavy electrical crack!"))
- playsound(unlucky_mob, SFX_SPARKS, 100, TRUE)
diff --git a/modular_skyrat/modules/black_mesa/code/weapons.dm b/modular_skyrat/modules/black_mesa/code/weapons.dm
deleted file mode 100644
index ef5873daa9b..00000000000
--- a/modular_skyrat/modules/black_mesa/code/weapons.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/obj/item/crowbar/freeman
- name = "blood soaked crowbar"
- desc = "A heavy handed crowbar, it drips with blood."
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/freeman.dmi'
- icon_state = "crowbar"
- force = 35
- throwforce = 45
- toolspeed = 0.1
- wound_bonus = 10
- hitsound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg'
- mob_throw_hit_sound = 'modular_skyrat/master_files/sound/weapons/crowbar2.ogg'
- force_opens = TRUE
-
-/obj/item/crowbar/freeman/ultimate
- name = "\improper Freeman's crowbar"
- desc = "A weapon wielded by an ancient physicist, the blood of hundreds seeps through this rod of iron and malice."
- force = 45
-
-/obj/item/crowbar/freeman/ultimate/Initialize(mapload)
- . = ..()
- add_filter("rad_glow", 2, list("type" = "outline", "color" = "#fbff1479", "size" = 2))
-
-/obj/item/shield/riot/pointman/hecu
- name = "ballistic shield"
- desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell. Repair with iron."
- icon_state = "ballistic"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi'
- worn_icon_state = "ballistic_worn"
- worn_icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi'
- inhand_icon_state = "ballistic"
- lefthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_l.dmi'
- righthand_file = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic_r.dmi'
- force = 14
- throwforce = 5
- throw_speed = 1
- throw_range = 1
- block_chance = 45
- slot_flags = ITEM_SLOT_BACK
- w_class = WEIGHT_CLASS_BULKY
- attack_verb_continuous = list("shoves", "bashes")
- attack_verb_simple = list("shove", "bash")
- transparent = TRUE
- max_integrity = 150
- repairable_by = /obj/item/stack/sheet/iron //what to repair the shield with
-
-
-/obj/item/shield/riot/pointman/hecu/shatter(mob/living/carbon/human/owner)
- playsound(owner, 'sound/effects/glassbr3.ogg', 100)
- new /obj/item/ballistic_broken((get_turf(src)))
-
-/obj/item/ballistic_broken
- name = "broken ballistic shield"
- desc = "An unsalvageable, unrecoverable mess of armor steel and kevlar. Should've maintained it, huh?"
- icon_state = "ballistic_broken"
- icon = 'modular_skyrat/modules/awaymissions_skyrat/icons/ballistic.dmi'
- w_class = WEIGHT_CLASS_BULKY
diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm
deleted file mode 100644
index c8b6dd6e956..00000000000
--- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_head.dm
+++ /dev/null
@@ -1,78 +0,0 @@
-/obj/item/clothing/head/blastwave
- name = "blastwave helmet"
- desc = "A plastic helmet with paint applied. Protects as much as cardboard box named 'Bomb Shelter'."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "blastwave_helmet"
- flags_inv = HIDEHAIR
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Default (Purple)" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_helmet",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_helmet"
- ),
- "Red" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_helmet_r",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_helmet_r"
- ),
- "Green" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_helmet_g",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_helmet_g"
- ),
- "Blue" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_helmet_b",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_helmet_b"
- ),
- "Yellow" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_helmet_y",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_helmet_y"
- )
- )
-
-/obj/item/clothing/head/blastwave/officer
- name = "blastwave peaked cap"
- desc = "A simple, militaristic cap."
- icon_state = "blastwave_offcap"
- flags_inv = 0
- unique_reskin = list(
- "Default (Purple)" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_offcap",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_offcap"
- ),
- "Red" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_offcap_r",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_offcap_r"
- ),
- "Green" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_offcap_g",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_offcap_g"
- ),
- "Blue" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_offcap_b",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_offcap_b"
- ),
- "Yellow" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi',
- RESKIN_ICON_STATE = "blastwave_offcap_y",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_offcap_y"
- )
- )
diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm
deleted file mode 100644
index e19b933de2f..00000000000
--- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_mask.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/clothing/mask/gas/full
- name = "full gas mask"
- desc = "A close-fitting mask. Equipment beloved by many trenchers, mooks and romantically apocalyptic people."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- worn_icon_muzzled = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
- icon_state = "gas_full"
- flags_inv = HIDEEARS | HIDEEYES | HIDEFACE | HIDEHAIR | HIDEFACIALHAIR | HIDESNOUT
diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm
deleted file mode 100644
index 411767918ca..00000000000
--- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_suit.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/item/clothing/suit/blastwave
- name = "blastwave trenchcoat"
- desc = "A generic trenchcoat of the boring wars."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit_digi.dmi'
- icon_state = "blastwave_suit"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Default (Purple)" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "blastwave_suit",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_suit"
- ),
- "Red" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "blastwave_suit_r",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_suit_r"
- ),
- "Green" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "blastwave_suit_g",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_suit_g"
- ),
- "Blue" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "blastwave_suit_b",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_suit_b"
- ),
- "Yellow" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "blastwave_suit_y",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_suit_y"
- )
- )
diff --git a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm b/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm
deleted file mode 100644
index 9bb18d94c07..00000000000
--- a/modular_skyrat/modules/blastwave_outfits/code/clothing/blastwave_uniform.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/item/clothing/under/blastwave
- name = "blastwave uniform"
- desc = "An utilitarian uniform of rugged warfare."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi'
- icon_state = "blastwave_uniform"
- can_adjust = FALSE
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Default (Purple)" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi',
- RESKIN_ICON_STATE = "blastwave_uniform",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_uniform"
- ),
- "Red" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi',
- RESKIN_ICON_STATE = "blastwave_uniform_r",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_uniform_r"
- ),
- "Green" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi',
- RESKIN_ICON_STATE = "blastwave_uniform_g",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_uniform_g"
- ),
- "Blue" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi',
- RESKIN_ICON_STATE = "blastwave_uniform_b",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_uniform_b"
- ),
- "Yellow" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi',
- RESKIN_ICON_STATE = "blastwave_uniform_y",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi',
- RESKIN_WORN_ICON_STATE = "blastwave_uniform_y"
- )
- )
diff --git a/modular_skyrat/modules/blastwave_outfits/readme.md b/modular_skyrat/modules/blastwave_outfits/readme.md
deleted file mode 100644
index 3ca5e0dbfea..00000000000
--- a/modular_skyrat/modules/blastwave_outfits/readme.md
+++ /dev/null
@@ -1,48 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/14165 (initial)
-
-## Title: GWTB-like Outfit.
-
-MODULE ID: N/A
-
-### Description:
-
-Adds "Gone with the Blastwave" webcomic-inspired outfit. Colors are pre-set via reskinning, and it is not GAGsified.
-This version does not provide armor values.
-
-### TG Proc/File Changes:
-
-- N/A
-
-
-### Defines:
-
-- N/A
-
-
-### Master file additions
-
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\head.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\mask_muzzled.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\mask.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\suit_digi.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\suit.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\uniform_digi.dmi
-- #CHANGE modular_skyrat\master_files\icons\mob\clothing\uniform.dmi
-- #CHANGE modular_skyrat\master_files\icons\obj\clothing\hats.dmi
-- #CHANGE modular_skyrat\master_files\icons\obj\clothing\masks.dmi
-- #CHANGE modular_skyrat\master_files\icons\obj\clothing\suits.dmi
-- #CHANGE modular_skyrat\master_files\icons\obj\clothing\uniforms.dmi
-
-
-### Included files that are not contained in this module:
-
-- #CHANGE modular_skyrat\modules\loadouts\loadout_items\loadout_datum_heads.dm
-- #CHANGE modular_skyrat\modules\loadouts\loadout_items\loadout_datum_suit.dm
-- #CHANGE modular_skyrat\modules\loadouts\loadout_items\under\loadout_datum_under.dm
-
-
-### Credits:
-
-Initially used older TG-Station's Detective's Greycoat (blastwave coats are modified versions of it: added colored arm-patches, cuffs and lining), normal helmets (added paint and removed in-built goggles), officer's cap (added colored pin), utility uniform (added color-collar and shoulders);
-
-[Gone with the Blastwave](http://www.blastwave-comic.com) webcomic by Kimmo Lemetti (aka Morr) - inspiration.
diff --git a/modular_skyrat/modules/blueshield/code/closet.dm b/modular_skyrat/modules/blueshield/code/closet.dm
deleted file mode 100644
index fe34c776ef7..00000000000
--- a/modular_skyrat/modules/blueshield/code/closet.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/obj/item/storage/bag/garment/blueshield
- name = "blueshield's garment bag"
- desc = "A bag for storing extra clothes and shoes. This one belongs to the blueshield."
-
-/obj/item/storage/bag/garment/blueshield/PopulateContents()
- new /obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield(src)
- new /obj/item/clothing/head/beret/blueshield(src)
- new /obj/item/clothing/head/beret/blueshield/navy(src)
- new /obj/item/clothing/under/rank/blueshield(src)
- new /obj/item/clothing/under/rank/blueshield/skirt(src)
- new /obj/item/clothing/under/rank/blueshield/turtleneck(src)
- new /obj/item/clothing/under/rank/blueshield/turtleneck/skirt(src)
- new /obj/item/clothing/suit/armor/vest/blueshield(src)
- new /obj/item/clothing/suit/armor/vest/blueshield/jacket(src)
- new /obj/item/clothing/neck/mantle/bsmantle(src)
-
-/obj/structure/closet/secure_closet/blueshield
- name = "blueshield's locker"
- icon_state = "bs"
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
- req_access = list(ACCESS_CAPTAIN)
-
-/obj/structure/closet/secure_closet/blueshield/New()
- ..()
- // FLUFFY FRONTIER EDIT: ADDITION BEGIN - BLUESHIELD-REARM
- // ВАЖНО!! ДАБЫ НЕ ПЕРЕНАСЫЩАТЬ БЩ ОРУЖИЕМ, ЛЮБЫЕ НОВЫЕ ПУШКИ ПЕРЕНОСИМ В МОДУЛЬ В /obj/item/choice_beacon/blueshield/
- // Выдал БЩ дополнительные перчатки, аналогичные их стандартным, просто без эффекта рывка.
- new /obj/item/clothing/gloves/combat(src)
- // FLUFFY FRONTIER EDIT END - BLUESHIELD-REARM.
- new /obj/item/storage/briefcase/secure(src)
- new /obj/item/storage/belt/security/full(src)
- new /obj/item/grenade/flashbang(src)
- new /obj/item/assembly/flash/handheld(src)
- new /obj/item/restraints/handcuffs(src)
- new /obj/item/clothing/glasses/hud/security/sunglasses(src)
- new /obj/item/storage/medkit/tactical/blueshield(src)
- // new /obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo(src) FF EDIT: DELETION - BLUESHIELD-REARM
- new /obj/item/storage/bag/garment/blueshield(src)
- new /obj/item/mod/control/pre_equipped/blueshield(src)
diff --git a/modular_skyrat/modules/blueshield/code/clothing.dm b/modular_skyrat/modules/blueshield/code/clothing.dm
deleted file mode 100644
index 0875af90510..00000000000
--- a/modular_skyrat/modules/blueshield/code/clothing.dm
+++ /dev/null
@@ -1,177 +0,0 @@
-//Blueshield
-
-//Uniform items are in command.dm
-
-/obj/item/clothing/gloves/tackler/combat/insulated/blueshield
- name = "combat gloves"
- desc = "These tactical gloves appear to be unique, made out of double woven durathread fibers which make it fireproof as well as acid resistant"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- icon_state = "combat"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- resistance_flags = FIRE_PROOF | ACID_PROOF
- armor_type = /datum/armor/insulated_blueshield
-
-/datum/armor/insulated_blueshield
- fire = 100
- acid = 100
-
-/obj/item/radio/headset/headset_bs
- name = "\proper the blueshield's headset"
- icon = 'modular_skyrat/modules/blueshield/icons/radio.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/ears.dmi'
- icon_state = "bshield_headset"
- worn_icon_state = "bshield_headset"
- keyslot = /obj/item/encryptionkey/heads/blueshield
- keyslot2 = /obj/item/encryptionkey/headset_cent
-
-/obj/item/radio/headset/headset_bs/alt
- icon_state = "bshield_headset_alt"
- worn_icon_state = "bshield_headset_alt"
-
-/obj/item/radio/headset/headset_bs/alt/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
-
-
-/obj/item/clothing/head/helmet/space/plasmaman/blueshield
- name = "blueshield envirosuit helmet"
- desc = "A plasmaman containment helmet designed for certified blueshields, who's job guarding heads should not include self-combustion... most of the time."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi'
- icon_state = "bs_envirohelm"
- armor_type = /datum/armor/head_helmet/plasmaman/blueshield
-
-/datum/armor/head_helmet/plasmaman/blueshield
- acid = 90
-
-/obj/item/clothing/under/plasmaman/blueshield
- name = "blueshield envirosuit"
- desc = "A plasmaman containment suit designed for certified blueshields, offering a limited amount of extra protection."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi'
- icon_state = "bs_envirosuit"
- armor_type = /datum/armor/clothing_under/under_plasmaman_blueshield
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
-
-/datum/armor/clothing_under/under_plasmaman_blueshield
- melee = 10
- laser = 10
- bomb = 5
- bio = 100
- fire = 95
- acid = 95
-
-/obj/item/clothing/head/beret/blueshield
- name = "blueshield's beret"
- desc = "A blue beret made of durathread with a genuine golden badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets."
- greyscale_config = /datum/greyscale_config/beret_badge
- greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
- greyscale_colors = "#3A4E7D#DEB63D"
- //alternate_worn_icon_digi = 'modular_skyrat/icons/mob/head_muzzled.dmi'
- icon_state = "beret_badge_police"
- armor_type = /datum/armor/head_helmet/blueshield
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/datum/armor/head_helmet/blueshield
- fire = 75
- acid = 75
-
-/obj/item/clothing/head/beret/blueshield/navy
- name = "navy blueshield's beret"
- desc = "A navy-blue beret made of durathread with a silver badge, denoting its owner as a Blueshield Lieuteneant. It seems to be padded with nano-kevlar, making it tougher than standard reinforced berets."
- greyscale_colors = "#3C485A#BBBBBB"
-
-/obj/item/storage/backpack/blueshield
- name = "blueshield backpack"
- desc = "A robust backpack issued to Nanotrasen's finest."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "backpack_blueshield"
- inhand_icon_state = "backpack_blueshield"
-
-/obj/item/storage/backpack/satchel/blueshield
- name = "blueshield satchel"
- desc = "A robust satchel issued to Nanotrasen's finest."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "satchel_blueshield"
- inhand_icon_state = "satchel_blueshield"
-
-/obj/item/storage/backpack/duffelbag/blueshield
- name = "blueshield duffelbag"
- desc = "A robust duffelbag issued to Nanotrasen's finest."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "duffel_blueshield"
- inhand_icon_state = "duffel_blueshield"
-
-//blueshield armor
-/obj/item/clothing/suit/armor/vest/blueshield
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- name = "blueshield's armor"
- desc = "A tight-fitting kevlar-lined vest with a blue badge on the chest of it."
- icon_state = "blueshieldarmor"
- body_parts_covered = CHEST
- armor_type = /datum/armor/suit_armor/blueshield
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Slim" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
- RESKIN_ICON_STATE = "blueshieldarmor",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
- RESKIN_WORN_ICON_STATE = "blueshieldarmor",
- ),
- "Marine" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
- RESKIN_ICON_STATE = "bs_marine",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
- RESKIN_WORN_ICON_STATE = "bs_marine",
- ),
- "Bulky" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi',
- RESKIN_ICON_STATE = "vest_black",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi',
- RESKIN_WORN_ICON_STATE = "vest_black",
- ),
- )
-
-/datum/armor/suit_armor/blueshield
- bomb = 30
- fire = 75
- acid = 75
-
-/obj/item/clothing/suit/armor/vest/blueshield/jacket
- name = "blueshield's jacket"
- desc = "An expensive kevlar-lined jacket with a golden badge on the chest and \"NT\" emblazoned on the back. It weighs surprisingly little, despite how heavy it looks."
- icon_state = "blueshield"
- body_parts_covered = CHEST|ARMS
- unique_reskin = null
-
-/obj/item/clothing/suit/armor/vest/blueshield/jacket/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_icon)
-
-/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield
- name = "blueshield's winter coat"
- icon_state = "coatblueshield"
- desc = "A comfy kevlar-lined coat with blue highlights, fit to keep the blueshield armored and warm."
- hoodtype = /obj/item/clothing/head/hooded/winterhood/skyrat/blueshield
- allowed = list(/obj/item/melee/baton/security/loaded)
- armor_type = /datum/armor/suit_armor/blueshield
-
-/obj/item/clothing/suit/hooded/wintercoat/skyrat/blueshield/Initialize(mapload)
- . = ..()
- allowed += GLOB.security_vest_allowed
-
-/obj/item/clothing/head/hooded/winterhood/skyrat/blueshield
- icon_state = "hood_blueshield"
- desc = "A comfy kevlar-lined hood to go with the comfy kevlar-lined coat."
- armor_type = /datum/armor/suit_armor/blueshield
diff --git a/modular_skyrat/modules/blueshield/code/landmarks.dm b/modular_skyrat/modules/blueshield/code/landmarks.dm
deleted file mode 100644
index e029826483c..00000000000
--- a/modular_skyrat/modules/blueshield/code/landmarks.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/effect/landmark/start/blueshield
- name = "Blueshield"
- icon_state = "Blueshield"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
diff --git a/modular_skyrat/modules/blueshield/readme.md b/modular_skyrat/modules/blueshield/readme.md
deleted file mode 100644
index 5dde3e04eb1..00000000000
--- a/modular_skyrat/modules/blueshield/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/127
-
-## Title: Blueshield
-
-MODULE ID: BLUESHIELD
-
-### Description:
-
-Adds the blueshield job to the game. It does not however add the blueshield office to the map. This includes all the blueshields items and job descriptors.
-
-### TG Proc Changes:
-
-- code/modules/jobs/jobs.dm > GLOBAL_LIST_INIT(security_positions, list()
-- code/modules/jobs/access.dm > /proc/get_all_accesses()
-
-### Defines:
-
-- #define JOB_DISPLAY_ORDER_BLUESHIELD 34
-- #define ACCESS_BLUESHIELD 71
-
-### Master file additions
-
-- ./modular_skyrat/master_files/icons/mob/hud.dmi #NEW
-- ./modular_skyrat/master_files/icons/clothing/hands.dmi #NEW
-- ./modular_skyrat/master_files/icons/obj/clothing/gloves.dmi #NEW
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Gandalf2k15 - Porting
diff --git a/modular_skyrat/modules/borg_buffs/code/robot.dm b/modular_skyrat/modules/borg_buffs/code/robot.dm
deleted file mode 100644
index 8a2dfb110c8..00000000000
--- a/modular_skyrat/modules/borg_buffs/code/robot.dm
+++ /dev/null
@@ -1,248 +0,0 @@
-#define BASE_SHAKER_JUICE_REAGENTS list(\
- /datum/reagent/consumable/aloejuice,\
- /datum/reagent/consumable/applejuice,\
- /datum/reagent/consumable/banana,\
- /datum/reagent/consumable/berryjuice,\
- /datum/reagent/consumable/blumpkinjuice,\
- /datum/reagent/consumable/carrotjuice,\
- /datum/reagent/consumable/grapejuice,\
- /datum/reagent/consumable/lemonjuice,\
- /datum/reagent/consumable/lemon_lime,\
- /datum/reagent/consumable/limejuice,\
- /datum/reagent/consumable/parsnipjuice,\
- /datum/reagent/consumable/peachjuice,\
- /datum/reagent/consumable/pineapplejuice,\
- /datum/reagent/consumable/potato_juice,\
- /datum/reagent/consumable/pumpkinjuice,\
- /datum/reagent/consumable/orangejuice,\
- /datum/reagent/consumable/tomatojuice,\
- /datum/reagent/consumable/watermelonjuice\
- )
-
-#define BASE_SHAKER_ALCOHOL_REAGENTS list(\
- /datum/reagent/consumable/ethanol/absinthe,\
- /datum/reagent/consumable/ethanol/ale,\
- /datum/reagent/consumable/ethanol/amaretto,\
- /datum/reagent/consumable/ethanol/applejack,\
- /datum/reagent/consumable/ethanol/beer,\
- /datum/reagent/consumable/ethanol/cognac,\
- /datum/reagent/consumable/ethanol/champagne,\
- /datum/reagent/consumable/ethanol/creme_de_cacao,\
- /datum/reagent/consumable/ethanol/creme_de_coconut,\
- /datum/reagent/consumable/ethanol/creme_de_menthe,\
- /datum/reagent/consumable/ethanol,\
- /datum/reagent/consumable/ethanol/gin,\
- /datum/reagent/consumable/ethanol/hooch,\
- /datum/reagent/consumable/ethanol/kahlua,\
- /datum/reagent/consumable/laughter,\
- /datum/reagent/consumable/ethanol/lizardwine,\
- /datum/reagent/consumable/ethanol/beer/maltliquor,\
- /datum/reagent/consumable/nothing,\
- /datum/reagent/consumable/ethanol/rum,\
- /datum/reagent/consumable/ethanol/sake,\
- /datum/reagent/consumable/ethanol/synthanol,\
- /datum/reagent/consumable/ethanol/tequila,\
- /datum/reagent/consumable/ethanol/triple_sec,\
- /datum/reagent/consumable/ethanol/vermouth,\
- /datum/reagent/consumable/ethanol/vodka,\
- /datum/reagent/consumable/ethanol/whiskey,\
- /datum/reagent/consumable/ethanol/wine\
- )
-
-#define BASE_SHAKER_SODA_REAGENTS list(\
- /datum/reagent/consumable/dr_gibb,\
- /datum/reagent/consumable/grape_soda,\
- /datum/reagent/consumable/pwr_game,\
- /datum/reagent/consumable/shamblers,\
- /datum/reagent/consumable/sodawater,\
- /datum/reagent/consumable/sol_dry,\
- /datum/reagent/consumable/space_up,\
- /datum/reagent/consumable/space_cola,\
- /datum/reagent/consumable/spacemountainwind\
- )
-
-#define BASE_SHAKER_MISC_REAGENTS list(\
- /datum/reagent/consumable/blackpepper,\
- /datum/reagent/blood,\
- /datum/reagent/pax/catnip,\
- /datum/reagent/consumable/coco,\
- /datum/reagent/toxin/coffeepowder,\
- /datum/reagent/consumable/cream,\
- /datum/reagent/consumable/enzyme,\
- /datum/reagent/consumable/eggyolk,\
- /datum/reagent/consumable/honey,\
- /datum/reagent/consumable/grenadine,\
- /datum/reagent/consumable/ice,\
- /datum/reagent/iron,\
- /datum/reagent/consumable/menthol,\
- /datum/reagent/consumable/milk,\
- /datum/reagent/toxin/mushroom_powder,\
- /datum/reagent/consumable/nutriment,\
- /datum/reagent/consumable/soymilk,\
- /datum/reagent/consumable/sugar,\
- /datum/reagent/toxin/teapowder,\
- /datum/reagent/consumable/tonic,\
- /datum/reagent/consumable/vanilla,\
- /datum/reagent/water\
- )
-
-
-/obj/item/reagent_containers/borghypo/borgshaker/specific
- icon = 'modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi'
- icon_state = "misc"
-
-/obj/item/reagent_containers/borghypo/borgshaker/specific/juice
- name = "cyborg juice shaker"
- icon_state = "juice"
- default_reagent_types = BASE_SHAKER_JUICE_REAGENTS
-
-/obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol
- name = "cyborg alcohol shaker"
- icon_state = "alcohol"
- default_reagent_types = BASE_SHAKER_ALCOHOL_REAGENTS
-
-/obj/item/reagent_containers/borghypo/borgshaker/specific/soda
- name = "cyborg soda shaker"
- icon_state = "soda"
- default_reagent_types = BASE_SHAKER_SODA_REAGENTS
-
-/obj/item/reagent_containers/borghypo/borgshaker/specific/misc
- name = "cyborg misc shaker"
- icon_state = "misc"
- default_reagent_types = BASE_SHAKER_MISC_REAGENTS
-
-/obj/item/cooking/cyborg/power
- name = "automated cooking tool"
- desc = "A cyborg fitted module resembling the rolling pins and Knifes"
- icon = 'modular_skyrat/modules/borg_buffs/icons/items_cyborg.dmi'
- icon_state = "knife_screw_cyborg"
- hitsound = 'sound/items/drill_hit.ogg'
- usesound = 'sound/items/drill_use.ogg'
- toolspeed = 0.5
- tool_behaviour = TOOL_KNIFE
-
-/obj/item/cooking/cyborg/power/examine()
- . = ..()
- . += " It's fitted with a [tool_behaviour == TOOL_KNIFE ? "knife" : "rolling pin"] head."
-
-/obj/item/cooking/cyborg/power/attack_self(mob/user)
- playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE)
- if(tool_behaviour != TOOL_ROLLINGPIN)
- tool_behaviour = TOOL_ROLLINGPIN
- to_chat(user, span_notice("You attach the rolling pin bit to [src]."))
- icon_state = "rolling_bolt_cyborg"
- else
- tool_behaviour = TOOL_KNIFE
- to_chat(user, span_notice("You attach the knife bit to [src]."))
- icon_state = "knife_screw_cyborg"
-
-/obj/item/inducer/cyborg
- name = "Cyborg Inducer"
- desc = "A tool for inductively charging internal power cells using the battery of a cyborg"
- powertransfer = 250
- var/power_safety_threshold = 1000
-
-
-
-/obj/item/inducer/cyborg/attackby(obj/item/weapon, mob/user)
- return
-
-/obj/item/inducer/cyborg/recharge(atom/movable/target_atom, mob/user)
- if(!iscyborg(user))
- return
- var/mob/living/silicon/robot/borg_user = user
- cell = borg_user.cell
- if(!isturf(target_atom) && user.loc == target_atom)
- return FALSE
- if(recharging)
- return TRUE
- else
- recharging = TRUE
- var/obj/item/stock_parts/cell/target_cell = target_atom.get_cell()
- var/obj/target_object
- var/coefficient = 1
- if(istype(target_atom, /obj/item/gun/energy))
- to_chat(user, span_alert("Error unable to interface with device."))
- return FALSE
- if(istype(target_atom, /obj/item/clothing/suit/space))
- to_chat(user, span_alert("Error unable to interface with device."))
- return FALSE
- if(cell.charge <= power_safety_threshold ) // Cyborg charge safety. Prevents a borg from inducing themself to death.
- to_chat(user, span_alert("Unable to charge device. User battery safety engaged."))
- return
- if(istype(target_atom, /obj))
- target_object = target_atom
- if(target_cell)
- var/done_any = FALSE
- if(target_cell.charge >= target_cell.maxcharge)
- to_chat(user, span_notice("[target_atom] is fully charged!"))
- recharging = FALSE
- return TRUE
- user.visible_message(span_notice("[user] starts recharging [target_atom] with [src]."), span_notice("You start recharging [target_atom] with [src]."))
- while(target_cell.charge < target_cell.maxcharge)
- if(do_after(user, 1 SECONDS, target = user) && cell.charge > (power_safety_threshold + powertransfer))
- done_any = TRUE
- induce(target_cell, coefficient)
- do_sparks(1, FALSE, target_atom)
- if(target_object)
- target_object.update_appearance()
- else
- break
- if(done_any) // Only show a message if we succeeded at least once
- user.visible_message(span_notice("[user] recharged [target_atom]!"), span_notice("You recharged [target_atom]!"))
- recharging = FALSE
- return TRUE
- recharging = FALSE
-
-
-/obj/item/inducer/attack(mob/target_mob, mob/living/user)
- if(user.combat_mode)
- return ..()
-
- if(cantbeused(user))
- return
-
- if(recharge(target_mob, user))
- return
- return ..()
-
-/obj/item/inducer/cyborg/attack_self(mob/user)
- return
-
-// Wirebrush for janiborg
-/datum/design/borg_wirebrush
- name = "Wire-brush Module"
- id = "borg_upgrade_brush"
- build_type = MECHFAB
- build_path = /obj/item/borg/upgrade/wirebrush
- materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2)
- construction_time = 40
- category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR)
-
-/obj/item/borg/upgrade/wirebrush
- name = "janitor cyborg wire-brush"
- desc = "A tool to remove rust from walls."
- icon_state = "cyborg_upgrade3"
- require_model = TRUE
- model_type = list(/obj/item/robot_model/janitor)
- model_flags = BORG_MODEL_JANITOR
-
-/obj/item/borg/upgrade/wirebrush/action(mob/living/silicon/robot/cyborg)
- . = ..()
- if(.)
- for(var/obj/item/wirebrush/brush in cyborg.model.modules)
- cyborg.model.remove_module(brush, TRUE)
-
- var/obj/item/wirebrush/brush = new /obj/item/wirebrush(cyborg.model)
- cyborg.model.basic_modules += brush
- cyborg.model.add_module(brush, FALSE, TRUE)
-
-/obj/item/borg/upgrade/wirebrush/deactivate(mob/living/silicon/robot/cyborg, user = usr)
- . = ..()
- if(.)
- for(var/obj/item/wirebrush/brush in cyborg.model.modules)
- cyborg.model.remove_module(brush, TRUE)
-
- var/obj/item/wirebrush/brush = new (cyborg.model)
- cyborg.model.basic_modules += brush
- cyborg.model.add_module(brush, FALSE, TRUE)
diff --git a/modular_skyrat/modules/borgs/code/robot.dm b/modular_skyrat/modules/borgs/code/robot.dm
deleted file mode 100644
index 8bddf039f4d..00000000000
--- a/modular_skyrat/modules/borgs/code/robot.dm
+++ /dev/null
@@ -1,110 +0,0 @@
-/mob/living/silicon/robot/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
- . = ..()
- if(robot_resting)
- robot_resting = FALSE
- on_standing_up()
- update_icons()
-
-/mob/living/silicon/robot/toggle_resting()
- robot_lay_down()
-
-/mob/living/silicon/robot/on_lying_down(new_lying_angle)
- if(layer == initial(layer)) //to avoid things like hiding larvas.
- layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
- density = FALSE // We lose density and stop bumping passable dense things.
-
- if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
- maptext_height = 32 //Offset base chat-height value
-
- // Resting effects
- var/turf/sit_pos = get_turf(src)
- var/obj/structure/table/tabled = locate(/obj/structure/table) in sit_pos.contents
- if(!tabled)
- new /obj/effect/temp_visual/mook_dust/robot(get_turf(src))
- playsound(src, 'modular_skyrat/master_files/sound/effects/robot_sit.ogg', 25, TRUE)
- return
- else
- new /obj/effect/temp_visual/mook_dust/robot/table(get_turf(src))
- playsound(src, 'modular_skyrat/master_files/sound/effects/robot_bump.ogg', 50, TRUE)
-
- var/list/items_to_move = list()
-
- for(var/obj/item/gen_item in sit_pos.contents)
- if(!gen_item.anchored)
- items_to_move += gen_item
- if(items_to_move.len >= 8)
- break
-
- for(var/obj/item/table_contents in items_to_move)
-
- table_contents.throw_at(get_ranged_target_turf(table_contents, pick(GLOB.cardinals), range = 1), range = 1, speed = 1)
-
-
-/mob/living/silicon/robot/on_standing_up()
- if(layer == LYING_MOB_LAYER)
- layer = initial(layer)
- density = initial(density) // We were prone before, so we become dense and things can bump into us again.
- if(model && model.model_features && (TRAIT_R_TALL in model.model_features))
- maptext_height = 48 //Offset value of tallborgs
-
-/mob/living/silicon/robot/proc/rest_style()
- set name = "Switch Rest Style"
- set category = "AI Commands"
- set desc = "Select your resting pose."
- if(!can_rest())
- to_chat(src, span_warning("You can't do that!"))
- return
- var/choice = tgui_alert(src, "Select resting pose", "", list("Resting", "Sitting", "Belly up"))
- switch(choice)
- if("Resting")
- robot_rest_style = ROBOT_REST_NORMAL
- if("Sitting")
- robot_rest_style = ROBOT_REST_SITTING
- if("Belly up")
- robot_rest_style = ROBOT_REST_BELLY_UP
- robot_resting = robot_rest_style
- if (robot_resting)
- on_lying_down()
- update_icons()
-
-/mob/living/silicon/robot/proc/robot_lay_down()
- set name = "Lay down"
- set category = "AI Commands"
- if(!can_rest())
- to_chat(src, span_warning("You can't do that!"))
- return
- if(stat != CONSCIOUS) //Make sure we don't enable movement when not concious
- return
- if(robot_resting)
- to_chat(src, span_notice("You are now getting up."))
- robot_resting = FALSE
- mobility_flags = MOBILITY_FLAGS_DEFAULT
- on_standing_up()
- else
- to_chat(src, span_notice("You are now laying down."))
- robot_resting = robot_rest_style
- on_lying_down()
- update_icons()
-
-/mob/living/silicon/robot/update_resting()
- . = ..()
- if(can_rest())
- robot_resting = FALSE
- update_icons()
-
-/mob/living/silicon/robot/update_module_innate()
- ..()
- if(hands)
- hands.icon = (model.model_select_alternate_icon ? model.model_select_alternate_icon : initial(hands.icon))
-
-/**
- * Safe check of the cyborg's model_features list.
- *
- * model_features is defined in modular_skyrat\modules\altborgs\code\modules\mob\living\silicon\robot\robot_model.dm.
- */
-/mob/living/silicon/robot/proc/can_rest()
- if(model && model.model_features && ((TRAIT_R_WIDE in model.model_features) || (TRAIT_R_TALL in model.model_features)))
- if(TRAIT_IMMOBILIZED in _status_traits)
- return FALSE
- return TRUE
- return FALSE
diff --git a/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi b/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi
deleted file mode 100644
index c5f81665372..00000000000
Binary files a/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/borgs/readme.md b/modular_skyrat/modules/borgs/readme.md
deleted file mode 100644
index 104786b9df1..00000000000
--- a/modular_skyrat/modules/borgs/readme.md
+++ /dev/null
@@ -1,34 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/127
-
-## Title: borgs
-
-MODULE ID: BORGS
-
-
-### Description:
-
-Condenses modular borg skins, items, upgrades and buffs to one folder for sanity's sake
-
-### TG Proc Changes:
-- APPEND: modular_skyrat/modules/altborgs > modular_skyrat/modules/borgs
-- /code/modules/mob/living/silicon/robot/robot_modules.dm
-- /code/modules/research/techweb/all_nodes.dm
-
-### Defines:
-
-- /code/modules/research/techweb/all_nodes.dm > /datum/techweb_node/cyborg_upg_util
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Gandalf2k15 - Porting & refactoring
-Azarak - porting
-DuffCreeper - Code, Spriting
-Zergspower - Refactoring
diff --git a/modular_skyrat/modules/cargo/readme.md b/modular_skyrat/modules/cargo/readme.md
deleted file mode 100644
index 1bcc6bbe9bd..00000000000
--- a/modular_skyrat/modules/cargo/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/2003
-
-## Title: Adds a bunch of crates to cargo.
-
-MODULE ID: N/A
-
-### Description:
-
-Adds more stuff to cargo.
-
-### TG Proc/File Changes:
-
-- N/A
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-- `modular_skyrat/master_files/code/modules/cargo/packs/security.dm`: `var/special`
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Porting some of my stuff from the old base. - Owai-Seek
-Citadel Station, and Ghommie, for some of the packs that aren't mine.
diff --git a/modular_skyrat/modules/clock_cult/code/items/clothing.dm b/modular_skyrat/modules/clock_cult/code/items/clothing.dm
deleted file mode 100644
index c2e9fca5478..00000000000
--- a/modular_skyrat/modules/clock_cult/code/items/clothing.dm
+++ /dev/null
@@ -1,453 +0,0 @@
-#define VISOR_MOUNT_DAMAGE 20
-#define VISOR_MOUNT_SLEEP_TIME 5 SECONDS
-
-/obj/item/clothing/suit/clockwork
- name = "bronze armor"
- desc = "A strong, bronze suit worn by the soldiers of the Ratvarian armies."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- icon_state = "clockwork_cuirass"
- armor_type = /datum/armor/suit_clockwork
- slowdown = 0.6
- resistance_flags = FIRE_PROOF | ACID_PROOF
- w_class = WEIGHT_CLASS_BULKY
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(
- /obj/item/clockwork,
- /obj/item/stack/tile/bronze,
- /obj/item/gun/ballistic/bow/clockwork,
- /obj/item/gun/ballistic/rifle/lionhunter/clockwork,
- )
-
-/datum/armor/suit_clockwork
- melee = 50
- bullet = 60
- laser = 30
- energy = 80
- bomb = 80
- bio = 100
- fire = 100
- acid = 100
-
-
-/obj/item/clothing/suit/clockwork/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
-
-
-/obj/item/clothing/suit/clockwork/speed
- name = "robes of divinity"
- desc = "A shiny suit, glowing with a vibrant energy. The wearer will be able to move quickly across battlefields, but will be able to withstand less damage before falling."
- icon_state = "clockwork_cuirass_speed"
- slowdown = -0.3
- resistance_flags = FIRE_PROOF | ACID_PROOF
- armor_type = /datum/armor/clockwork_speed
-
-/datum/armor/clockwork_speed
- melee = 40
- bullet = 30
- laser = 10
- energy = -20
- bomb = 60
- bio = 100
- fire = 100
- acid = 100
-
-/obj/item/clothing/suit/clockwork/cloak
- name = "shrouding cloak"
- desc = "A faltering cloak that bends light around it, distorting the user's appearance, making it hard to see them with the naked eye. However, it provides very little protection."
- icon_state = "clockwork_cloak"
- armor_type = /datum/armor/clockwork_cloak
- actions_types = list(/datum/action/item_action/toggle/clock)
- slowdown = 0.4
- resistance_flags = FIRE_PROOF | ACID_PROOF
- /// Is the shroud itself active or not
- var/shroud_active = FALSE
- /// Previous alpha value of the user when removing/disabling the jacket
- var/previous_alpha = 255
- /// Who is wearing this
- var/mob/living/wearer
-
-/datum/armor/clockwork_cloak
- melee = 10
- bullet = 60
- laser = 40
- energy = 20
- bomb = 40
- bio = 100
- fire = 100
- acid = 100
-
-/obj/item/clothing/suit/clockwork/cloak/Destroy()
- wearer = null
-
- return ..()
-
-
-/obj/item/clothing/suit/clockwork/cloak/attack_self(mob/user, modifiers)
- . = ..()
- if(shroud_active)
- disable()
-
- else
- enable()
-
-
-/obj/item/clothing/suit/clockwork/cloak/equipped(mob/user, slot)
- . = ..()
- if(slot != ITEM_SLOT_OCLOTHING || !IS_CLOCK(user))
- return
-
- wearer = user
-
- if(shroud_active)
- enable()
-
-
-/obj/item/clothing/suit/clockwork/cloak/dropped(mob/user)
- . = ..()
- if(shroud_active)
- disable()
-
- wearer = null
-
-
-/// Apply the effects to the wearer, making them pretty hard to see
-/obj/item/clothing/suit/clockwork/cloak/proc/enable()
- shroud_active = TRUE
- previous_alpha = wearer.alpha
- animate(wearer, alpha = 90, time = 3 SECONDS)
- apply_wibbly_filters(wearer)
- ADD_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT)
-
-
-/// Un-apply the effects of the cloak, returning the wearer to normal
-/obj/item/clothing/suit/clockwork/cloak/proc/disable()
- shroud_active = FALSE
- do_sparks(3, FALSE, wearer)
- remove_wibbly_filters(wearer)
- animate(wearer, alpha = previous_alpha, time = 3 SECONDS)
- REMOVE_TRAIT(wearer, TRAIT_UNKNOWN, CLOTHING_TRAIT)
-
-
-/obj/item/clothing/glasses/clockwork
- name = "base clock glasses"
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- icon_state = "clockwork_cuirass"
- /// What additional desc to show if the person examining is a clock cultist
- var/clock_desc = ""
-
-
-/obj/item/clothing/glasses/clockwork/examine(mob/user)
- . = ..()
- AddElement(/datum/element/clockwork_description, clock_desc)
- AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
-
-
-// Thermal goggles, no protection from eye stuff
-/obj/item/clothing/glasses/clockwork/wraith_spectacles
- name = "wraith spectacles"
- desc = "Mystical glasses that glow with a bright energy. Some say they can see things that shouldn't be seen."
- icon_state = "wraith_specs_0"
- base_icon_state = "wraith_specs"
- invis_view = SEE_INVISIBLE_OBSERVER
- invis_override = null
- flash_protect = FLASH_PROTECTION_SENSITIVE
- vision_flags = SEE_MOBS
- color_cutoffs = list(5, 15, 5)
- glass_colour_type = /datum/client_colour/glass_colour/yellow
- actions_types = list(/datum/action/item_action/toggle/clock)
- clock_desc = "Applies passive eye damage that regenerates after unequipping, grants thermal vision, and lets you see all forms of invisibility."
- /// Who is currently wearing the goggles
- var/mob/living/wearer
- /// Are the glasses enabled (flipped down)
- var/enabled = TRUE
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/Initialize(mapload)
- . = ..()
- update_icon_state()
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/Destroy()
- STOP_PROCESSING(SSobj, src)
- wearer = null
- return ..()
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]_[!enabled]"
- worn_icon_state = "[base_icon_state]_[!enabled]"
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/attack_self(mob/user, modifiers)
- . = ..()
- if(enabled)
- disable()
- else
- enable()
-
- if(iscarbon(user))
- var/mob/living/carbon/carbon_user = user
- carbon_user.head_update(src, forced = TRUE)
-
-
-/// "enable" the spectacles, flipping them down and applying their effects, calling on_toggle_eyes() if someone is wearing them
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/enable()
- enabled = TRUE
- color_cutoffs = list(15, 12, 0)
- visor_toggling()
-
- if(wearer)
- on_toggle_eyes()
-
- update_icon_state()
- wearer.update_sight()
-
-
-/// "disable" the spectacles, flipping them up and removing all applied effects
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/disable()
- enabled = FALSE
- color_cutoffs = null
- visor_toggling() //this doesn't remove everything, check later
-
- if(wearer)
- de_toggle_eyes()
-
- update_icon_state()
- wearer.update_sight()
-
-
-/// The start of application of the actual effects, including eye damage
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/on_toggle_eyes()
- wearer.update_sight()
- to_chat(wearer, span_clockgray("You suddenly see so much more."))
-
-
-/// The stopping of effect application, will remove the wearer's eye damage a minute after
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/proc/de_toggle_eyes()
- wearer.update_sight()
- to_chat(wearer, span_clockgray("You feel your eyes slowly readjusting."))
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/equipped(mob/living/user, slot)
- . = ..()
- if(!isliving(user))
- return
-
- if((slot == ITEM_SLOT_EYES) && enabled)
- wearer = user
- on_toggle_eyes()
-
-
-/obj/item/clothing/glasses/clockwork/wraith_spectacles/dropped(mob/user)
- . = ..()
- if(wearer && (IS_CLOCK(user)) && enabled)
- de_toggle_eyes()
-
- wearer = null
-
-
-// Flash protected and generally info-granting with huds
-/obj/item/clothing/glasses/clockwork/judicial_visor
- name = "judicial visor"
- desc = "A purple visor gilt with Ratvarian runes, allowing a user to see, unfettered by others. The cogs on the sides look pretty tight..."
- icon_state = "judicial_visor_0"
- base_icon_state = "judicial_visor"
- flash_protect = FLASH_PROTECTION_WELDER
- strip_delay = 10 SECONDS
- glass_colour_type = /datum/client_colour/glass_colour/purple
- actions_types = list(/datum/action/item_action/toggle/clock)
- clock_desc = "Binds itself to the wearer's face, but grants large sight and informational benefits while active."
- /// Is this enabled
- var/enabled = TRUE
- /// Wearer of the visor
- var/mob/living/wearer
- /// Should the user take damage from wearing this the first time? (Doesn't affect nodrop)
- var/damaging = TRUE
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/Initialize(mapload)
- . = ..()
- update_icon_state()
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/Destroy()
- wearer = null
- return ..()
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]_[enabled]"
- worn_icon_state = "[base_icon_state]_[enabled]"
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/attack_self(mob/user, modifiers)
- . = ..()
- if(enabled)
- disable()
- else
- enable()
-
- if(iscarbon(user))
- var/mob/living/carbon/carbon_user = user
- carbon_user.head_update(src, forced = TRUE)
-
-
-/// Turn on the visor, calling apply_to_wearer() and changing the icon state
-/obj/item/clothing/glasses/clockwork/judicial_visor/proc/enable()
- enabled = TRUE
- if(wearer)
- apply_to_wearer()
-
- update_icon_state()
-
-
-/// Turn off the visor, calling unapply_to_wearer() and changing the icon state
-/obj/item/clothing/glasses/clockwork/judicial_visor/proc/disable()
- enabled = FALSE
- if(wearer)
- unapply_to_wearer()
-
- update_icon_state()
-
-
-/// Applies the actual effects to the wearer, giving them flash protection and a variety of sight/info bonuses
-/obj/item/clothing/glasses/clockwork/judicial_visor/proc/apply_to_wearer()
- ADD_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT)
-
- ADD_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT)
- var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
- med_hud.show_to(wearer)
-
- ADD_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT)
- var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
- sec_hud.show_to(wearer)
-
- ADD_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT)
- ADD_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT)
- ADD_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT)
- color_cutoffs = list(50, 10, 30)
- wearer.update_sight()
-
-/// Removes the effects to the wearer, removing the flash protection and similar
-/obj/item/clothing/glasses/clockwork/judicial_visor/proc/unapply_to_wearer()
- REMOVE_TRAIT(wearer, TRAIT_NOFLASH, CLOTHING_TRAIT)
-
- REMOVE_TRAIT(wearer, TRAIT_MEDICAL_HUD, CLOTHING_TRAIT)
- var/datum/atom_hud/med_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
- med_hud.hide_from(wearer)
-
- REMOVE_TRAIT(wearer, TRAIT_SECURITY_HUD, CLOTHING_TRAIT)
- var/datum/atom_hud/sec_hud = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
- sec_hud.hide_from(wearer)
-
- REMOVE_TRAIT(wearer, TRAIT_MADNESS_IMMUNE, CLOTHING_TRAIT)
- REMOVE_TRAIT(wearer, TRAIT_KNOW_ENGI_WIRES, CLOTHING_TRAIT)
- REMOVE_TRAIT(wearer, TRAIT_KNOW_ROBO_WIRES, CLOTHING_TRAIT)
- color_cutoffs = null
- wearer.update_sight()
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/equipped(mob/living/user, slot)
- . = ..()
- if(!isliving(user))
- return
-
- if(slot == ITEM_SLOT_EYES)
- wearer = user
- if(enabled)
- apply_to_wearer()
-
- ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
- to_chat(wearer, span_userdanger("You feel the cogs on the visor clamp to the sides of your head, drilling in!"))
- if(damaging)
- wearer.emote("scream")
- wearer.Sleeping(VISOR_MOUNT_SLEEP_TIME)
- wearer.apply_damage(VISOR_MOUNT_DAMAGE, BRUTE, BODY_ZONE_HEAD)
-
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/dropped(mob/user)
- ..()
- if(wearer)
- unapply_to_wearer()
- wearer = null
- REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
-
-/obj/item/clothing/glasses/clockwork/judicial_visor/no_damage //ideally use this for loadouts n such
- damaging = FALSE
-
-
-/obj/item/clothing/head/helmet/clockwork
- name = "brass helmet"
- desc = "A strong, brass helmet worn by the soldiers of the Ratvarian armies. Includes an integrated light-dimmer for flash protection, as well as occult-grade muffling for factory based environments."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- icon_state = "clockwork_helmet"
- armor_type = /datum/armor/helmet_clockwork
- resistance_flags = FIRE_PROOF | ACID_PROOF
- w_class = WEIGHT_CLASS_BULKY
- flash_protect = FLASH_PROTECTION_FLASH
-
-/datum/armor/helmet_clockwork
- melee = 50
- bullet = 60
- laser = 30
- energy = 80
- bomb = 80
- bio = 100
- fire = 100
- acid = 100
-
-/obj/item/clothing/head/helmet/clockwork/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD))
- AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
-
-
-/obj/item/clothing/shoes/clockwork
- name = "brass treads"
- desc = "A strong pair of brass boots worn by the soldiers of the Ratvarian armies."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- icon_state = "clockwork_treads"
-
-/obj/item/clothing/shoes/clockwork/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
-
-
-/obj/item/clothing/gloves/clockwork
- name = "brass gauntlets"
- desc = "A strong pair of brass gloves worn by the soldiers of the Ratvarian armies."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- icon_state = "clockwork_gauntlets"
- siemens_coefficient = 0
- strip_delay = 8 SECONDS
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
- armor_type = /datum/armor/gloves_clockwork
-
-/datum/armor/gloves_clockwork
- melee = 0
- bullet = 0
- laser = 0
- energy = 0
- bomb = 0
- bio = 0
- fire = 80
- acid = 50
-
-/obj/item/clothing/gloves/clockwork/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/clockwork_pickup, ~(ITEM_SLOT_HANDS))
-
-#undef VISOR_MOUNT_DAMAGE
-#undef VISOR_MOUNT_SLEEP_TIME
diff --git a/modular_skyrat/modules/clock_cult/code/items/tools.dm b/modular_skyrat/modules/clock_cult/code/items/tools.dm
deleted file mode 100644
index 0b5859626a8..00000000000
--- a/modular_skyrat/modules/clock_cult/code/items/tools.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-#define BRASS_TOOLSPEED_MOD 0.5
-
-/obj/item/wirecutters/brass
- name = "brass wirecutters"
- desc = "A pair of wirecutters made of brass. The handle feels faintly warm."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi'
- icon_state = "cutters_brass"
- random_color = FALSE
- toolspeed = BRASS_TOOLSPEED_MOD
-
-/obj/item/screwdriver/brass
- name = "brass screwdriver"
- desc = "A screwdriver made of brass. The handle feels warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi'
- icon_state = "screwdriver_brass"
- toolspeed = BRASS_TOOLSPEED_MOD
- random_color = FALSE
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
-
-/obj/item/weldingtool/experimental/brass
- name = "brass welding tool"
- desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi'
- icon_state = "welder_brass"
- toolspeed = BRASS_TOOLSPEED_MOD
-
-/obj/item/crowbar/brass
- name = "brass crowbar"
- desc = "A brass crowbar. It feels faintly warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi'
- icon_state = "crowbar_brass"
- worn_icon_state = "crowbar"
- toolspeed = BRASS_TOOLSPEED_MOD
-
-/obj/item/wrench/brass
- name = "brass wrench"
- desc = "A brass wrench. It's faintly warm to the touch."
- resistance_flags = FIRE_PROOF | ACID_PROOF
- icon = 'modular_skyrat/modules/clock_cult/icons/tools.dmi'
- icon_state = "wrench_brass"
- toolspeed = BRASS_TOOLSPEED_MOD
-
-/obj/item/storage/belt/utility/clock
- name = "old toolbelt"
- desc = "Holds tools. This one's seen better days, though. There's the outline of a cog roughly cut into the leather on one side."
-
-/obj/item/storage/belt/utility/clock/PopulateContents()
- new /obj/item/screwdriver/brass(src)
- new /obj/item/crowbar/brass(src)
- new /obj/item/weldingtool/experimental/brass(src)
- new /obj/item/wirecutters/brass(src)
- new /obj/item/wrench/brass(src)
- new /obj/item/multitool(src)
-
-#undef BRASS_TOOLSPEED_MOD
diff --git a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm b/modular_skyrat/modules/clock_cult/code/items/weaponry.dm
deleted file mode 100644
index 92bd53531dd..00000000000
--- a/modular_skyrat/modules/clock_cult/code/items/weaponry.dm
+++ /dev/null
@@ -1,311 +0,0 @@
-#define HAMMER_FLING_DISTANCE 2
-#define HAMMER_THROW_FLING_DISTANCE 3
-#define BRASS_RIFLE_REDUCED_DELAY 0.25 SECONDS
-
-/obj/item/clockwork/weapon
- name = "clockwork weapon"
- desc = "Something"
- icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
- lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = ITEM_SLOT_BACK
- throwforce = 20
- throw_speed = 4
- armour_penetration = 10
- hitsound = 'sound/weapons/bladeslice.ogg'
- attack_verb_continuous = list("attacks", "pokes", "jabs", "tears", "gores")
- attack_verb_simple = list("attack", "poke", "jab", "tear", "gore")
- sharpness = SHARP_EDGED
- /// Typecache of valid turfs to have the weapon's special effect on
- var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze))
-
-
-/obj/item/clockwork/weapon/attack(mob/living/target, mob/living/user)
- . = ..()
- var/turf/gotten_turf = get_turf(user)
-
- if(!is_type_in_typecache(gotten_turf, effect_turf_typecache))
- return
-
- if(!QDELETED(target) && target.stat != DEAD && !IS_CLOCK(target) && !target.can_block_magic(MAGIC_RESISTANCE_HOLY))
- hit_effect(target, user)
-
-
-/obj/item/clockwork/weapon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- . = ..()
- if(.)
- return
-
- if(!isliving(hit_atom))
- return
-
- var/mob/living/target = hit_atom
-
- if(!target.can_block_magic(MAGIC_RESISTANCE_HOLY) && !IS_CLOCK(target))
- hit_effect(target, throwingdatum.thrower, TRUE)
-
-
-/// What occurs to non-holy people when attacked from brass tiles
-/obj/item/clockwork/weapon/proc/hit_effect(mob/living/target, mob/living/user, thrown = FALSE)
- return
-
-
-/obj/item/clockwork/weapon/brass_spear
- name = "brass spear"
- desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy."
- icon_state = "ratvarian_spear"
- embedding = list("max_damage_mult" = 15, "armour_block" = 80)
- throwforce = 36
- force = 25
- armour_penetration = 24
-
-
-/obj/item/clockwork/weapon/brass_battlehammer
- name = "brass battle-hammer"
- desc = "A brass hammer glowing with energy."
- base_icon_state = "ratvarian_hammer"
- icon_state = "ratvarian_hammer0"
- throwforce = 25
- armour_penetration = 6
- attack_verb_simple = list("bash", "hammer", "attack", "smash")
- attack_verb_continuous = list("bashes", "hammers", "attacks", "smashes")
- clockwork_desc = "Enemies hit by this will be flung back while you are on bronze tiles."
- sharpness = 0
- hitsound = 'sound/weapons/smash.ogg'
-
-
-/obj/item/clockwork/weapon/brass_battlehammer/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/two_handed, \
- force_unwielded = 15, \
- icon_wielded = "[base_icon_state]1", \
- force_wielded = 28, \
- )
-
-
-/obj/item/clockwork/weapon/brass_battlehammer/hit_effect(mob/living/target, mob/living/user, thrown = FALSE)
- if(!thrown && !HAS_TRAIT(src, TRAIT_WIELDED))
- return
-
- var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
- target.throw_at(throw_target, thrown ? HAMMER_THROW_FLING_DISTANCE : HAMMER_FLING_DISTANCE, 4)
-
-/obj/item/clockwork/weapon/brass_battlehammer/update_icon_state()
- icon_state = "[base_icon_state]0"
- return ..()
-
-/obj/item/clockwork/weapon/brass_sword
- name = "brass longsword"
- desc = "A large sword made of brass."
- icon_state = "ratvarian_sword"
- force = 26
- throwforce = 20
- armour_penetration = 12
- attack_verb_simple = list("attack", "slash", "cut", "tear", "gore")
- attack_verb_continuous = list("attacks", "slashes", "cuts", "tears", "gores")
- clockwork_desc = "Enemies and mechs will be struck with a powerful electromagnetic pulse while you are on bronze tiles, with a cooldown."
- COOLDOWN_DECLARE(emp_cooldown)
-
-
-/obj/item/clockwork/weapon/brass_sword/hit_effect(mob/living/target, mob/living/user, thrown)
- if(!COOLDOWN_FINISHED(src, emp_cooldown))
- return
-
- COOLDOWN_START(src, emp_cooldown, 30 SECONDS)
-
- target.emp_act(EMP_LIGHT)
- new /obj/effect/temp_visual/emp/pulse(target.loc)
- addtimer(CALLBACK(src, PROC_REF(send_message), user), 30 SECONDS)
- to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!"))
- playsound(user, 'sound/magic/lightningshock.ogg', 40)
-
-
-/obj/item/clockwork/weapon/brass_sword/attack_atom(obj/attacked_obj, mob/living/user, params)
- . = ..()
- var/turf/gotten_turf = get_turf(user)
-
- if(!ismecha(attacked_obj) || !is_type_in_typecache(gotten_turf, effect_turf_typecache))
- return
-
- if(!COOLDOWN_FINISHED(src, emp_cooldown))
- return
-
- COOLDOWN_START(src, emp_cooldown, 20 SECONDS)
-
- var/obj/vehicle/sealed/mecha/target = attacked_obj
- target.emp_act(EMP_HEAVY)
- new /obj/effect/temp_visual/emp/pulse(target.loc)
- addtimer(CALLBACK(src, PROC_REF(send_message), user), 20 SECONDS)
- to_chat(user, span_brass("You strike [target] with an electromagnetic pulse!"))
- playsound(user, 'sound/magic/lightningshock.ogg', 40)
-
-
-/obj/item/clockwork/weapon/brass_sword/proc/send_message(mob/living/target)
- to_chat(target, span_brass("[src] glows, indicating the next attack will disrupt electronics of the target."))
-
-
-/obj/item/gun/ballistic/bow/clockwork
- name = "brass bow"
- desc = "A bow made from brass and other components that you can't quite understand. It glows with a deep energy and frabricates arrows by itself."
- icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons.dmi'
- lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
- icon_state = "bow_clockwork_unchambered_undrawn"
- inhand_icon_state = "clockwork_bow"
- base_icon_state = "bow_clockwork"
- force = 10
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/bow/clockwork
- /// Time between bolt recharges
- var/recharge_time = 1.5 SECONDS
- /// Typecache of valid turfs to have the weapon's special effect on
- var/static/list/effect_turf_typecache = typecacheof(list(/turf/open/floor/bronze))
-
-/obj/item/gun/ballistic/bow/clockwork/Initialize(mapload)
- . = ..()
- update_icon_state()
- AddElement(/datum/element/clockwork_description, "Firing from brass tiles will halve the time that it takes to recharge a bolt.")
- AddElement(/datum/element/clockwork_pickup)
-
-/obj/item/gun/ballistic/bow/clockwork/afterattack(atom/target, mob/living/user, flag, params, passthrough)
- if(!drawn || !chambered)
- to_chat(user, span_notice("[src] must be drawn to fire a shot!"))
- return
-
- return ..()
-
-/obj/item/gun/ballistic/bow/clockwork/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message)
- . = ..()
- var/turf/user_turf = get_turf(user)
-
- if(is_type_in_typecache(user_turf, effect_turf_typecache))
- recharge_time = 0.75 SECONDS
-
- addtimer(CALLBACK(src, PROC_REF(recharge_bolt)), recharge_time)
- recharge_time = initial(recharge_time)
-
-/obj/item/gun/ballistic/bow/clockwork/attack_self(mob/living/user)
- if(drawn || !chambered)
- return
-
- if(!do_after(user, 0.5 SECONDS, src))
- return
-
- to_chat(user, span_notice("You draw back the bowstring."))
- drawn = TRUE
- playsound(src, 'modular_skyrat/modules/tribal_extended/sound/sound_weapons_bowdraw.ogg', 75, 0) //gets way too high pitched if the freq varies
- update_icon()
-
-
-/// Recharges a bolt, done after the delay in shoot_live_shot
-/obj/item/gun/ballistic/bow/clockwork/proc/recharge_bolt()
- var/obj/item/ammo_casing/arrow/clockbolt/bolt = new
- magazine.give_round(bolt)
- chambered = bolt
- update_icon()
-
-
-/obj/item/gun/ballistic/bow/clockwork/attackby(obj/item/I, mob/user, params)
- return
-
-
-/obj/item/gun/ballistic/bow/clockwork/update_icon_state()
- . = ..()
- icon_state = "[base_icon_state]_[chambered ? "chambered" : "unchambered"]_[drawn ? "drawn" : "undrawn"]"
-
-
-/obj/item/ammo_box/magazine/internal/bow/clockwork
- ammo_type = /obj/item/ammo_casing/arrow/clockbolt
- start_empty = FALSE
-
-
-/obj/item/ammo_casing/arrow/clockbolt
- name = "energy bolt"
- desc = "An arrow made from a strange energy."
- icon = 'modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi'
- icon_state = "arrow_redlight"
- projectile_type = /obj/projectile/energy/clockbolt
-
-
-/obj/projectile/energy/clockbolt
- name = "energy bolt"
- icon = 'modular_skyrat/modules/clock_cult/icons/projectiles.dmi'
- icon_state = "arrow_energy"
- damage = 35
- damage_type = BURN
-
-
-/obj/item/gun/ballistic/rifle/lionhunter/clockwork
- name = "brass rifle"
- desc = "An antique, brass rifle made with the finest of care. It has an ornate scope in the shape of a cog built into the top."
- icon = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_weapons_40x32.dmi'
- lefthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/clock_cult/icons/weapons/clockwork_righthand.dmi'
- worn_icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_garb_worn.dmi'
- slot_flags = ITEM_SLOT_BACK
- icon_state = "clockwork_rifle"
- inhand_icon_state = "clockwork_rifle"
- worn_icon_state = "clockwork_rifle"
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork
- fire_sound = 'sound/weapons/gun/sniper/shot.ogg'
- show_bolt_icon = FALSE
-
-
-/obj/item/gun/ballistic/rifle/lionhunter/clockwork/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/clockwork_description, "The speed of which you aim at far targets while standing on brass will be massively increased.")
- AddElement(/datum/element/clockwork_pickup)
-
-/obj/item/ammo_box/magazine/internal/boltaction/lionhunter/clockwork
- name = "brass rifle internal magazine"
- ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock
-
-
-/obj/item/ammo_casing/strilka310/lionhunter/clock
- name = "brass rifle round"
- projectile_type = /obj/projectile/bullet/strilka310/lionhunter/clock
- min_distance = 3
-
-
-/obj/item/ammo_casing/strilka310/lionhunter/clock/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
- var/obj/item/gun/ballistic/fired_gun = fired_from
-
- if(istype(get_turf(user), /turf/open/floor/bronze) && istype(fired_gun, /obj/item/gun/ballistic/rifle/lionhunter/clockwork))
- seconds_per_distance = BRASS_RIFLE_REDUCED_DELAY
-
- return ..()
-
-
-/obj/projectile/bullet/strilka310/lionhunter/clock
- name = "brass .310 bullet"
- // These stats are only applied if the weapon is fired fully aimed
- // If fired without aiming or at someone too close, it will do much less
- damage = 45
- stamina = 45
-
-
-/obj/item/ammo_box/strilka310/lionhunter/clock
- name = "stripper clip (.310 brass)"
- desc = "A stripper clip that's just as brass as the rounds it holds."
- icon = 'modular_skyrat/modules/clock_cult/icons/weapons/ammo.dmi'
- icon_state = "762_brass"
- ammo_type = /obj/item/ammo_casing/strilka310/lionhunter/clock
- unique_reskin = NONE
- max_ammo = 3
- multiple_sprites = AMMO_BOX_PER_BULLET
-
-
-/obj/item/storage/pouch/ammo/clock
-
-/obj/item/storage/pouch/ammo/clock/PopulateContents()
- var/static/items_inside = list(
- /obj/item/ammo_box/strilka310/lionhunter/clock = 3
- )
-
- generate_items_inside(items_inside, src)
-
-
-#undef HAMMER_FLING_DISTANCE
-#undef HAMMER_THROW_FLING_DISTANCE
-#undef BRASS_RIFLE_REDUCED_DELAY
diff --git a/modular_skyrat/modules/clock_cult/code/status_effects.dm b/modular_skyrat/modules/clock_cult/code/status_effects.dm
deleted file mode 100644
index e9798e26ddd..00000000000
--- a/modular_skyrat/modules/clock_cult/code/status_effects.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/datum/status_effect/interdiction
- id = "interdicted"
- duration = 2.5 SECONDS
- status_type = STATUS_EFFECT_REFRESH
- tick_interval = 0.2 SECONDS
- alert_type = /atom/movable/screen/alert/status_effect/interdiction
- /// If we kicked the owner out of running mode
- var/running_toggled = FALSE
-
-/datum/status_effect/interdiction/tick(seconds_between_ticks)
- if(owner.move_intent == MOVE_INTENT_RUN)
- owner.toggle_move_intent(owner)
- owner.adjust_confusion_up_to(1 SECONDS, 1 SECONDS)
- running_toggled = TRUE
- to_chat(owner, span_warning("You know you shouldn't be running here."))
-
- owner.add_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction)
-
-/datum/status_effect/interdiction/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/clock_interdiction)
-
- if(running_toggled && owner.move_intent == MOVE_INTENT_WALK)
- owner.toggle_move_intent(owner)
-
-/atom/movable/screen/alert/status_effect/interdiction
- name = "Interdicted"
- desc = "I don't think I am meant to go this way."
- icon = 'modular_skyrat/modules/clock_cult/icons/actions_clock.dmi'
- icon_state = "interdiction_effect" //fix later
-
-/datum/movespeed_modifier/clock_interdiction
- multiplicative_slowdown = 1.5
diff --git a/modular_skyrat/modules/colony_fabricator/code/construction/doors.dm b/modular_skyrat/modules/colony_fabricator/code/construction/doors.dm
deleted file mode 100644
index fb84fa473bc..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/construction/doors.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-// Shutters
-
-/obj/machinery/door/poddoor/shutters/colony_fabricator
- name = "prefab shutters"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/doors/shutter.dmi'
-
-/obj/machinery/door/poddoor/shutters/colony_fabricator/preopen
- icon_state = "open"
- density = FALSE
- opacity = FALSE
-
-/obj/item/flatpacked_machine/shutter_kit
- name = "prefab shutters parts kit"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/doors/packed.dmi'
- icon_state = "shutters_parts"
- type_to_deploy = /obj/machinery/door/poddoor/shutters/colony_fabricator/preopen
- custom_materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
- )
-
-// Airlocks
-
-/obj/machinery/door/airlock/colony_prefab
- name = "prefab airlock"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/doors/airlock.dmi'
- overlays_file = 'modular_skyrat/modules/colony_fabricator/icons/doors/overlays.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_colony_prefab
-
-/obj/structure/door_assembly/door_assembly_colony_prefab
- name = "prefab airlock assembly"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/doors/airlock.dmi'
- base_name = "prefab airlock"
- airlock_type = /obj/machinery/door/airlock/colony_prefab
- noglass = TRUE
-
-/obj/item/flatpacked_machine/airlock_kit
- name = "prefab airlock parts kit"
- icon = 'modular_skyrat/modules/colony_fabricator/icons/doors/packed.dmi'
- icon_state = "airlock_parts"
- type_to_deploy = /obj/machinery/door/airlock/colony_prefab
- custom_materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
- )
diff --git a/modular_skyrat/modules/colony_fabricator/code/construction/turfs.dm b/modular_skyrat/modules/colony_fabricator/code/construction/turfs.dm
deleted file mode 100644
index 766a5b9a401..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/construction/turfs.dm
+++ /dev/null
@@ -1,176 +0,0 @@
-// Plastic panel walls, how colony of you
-
-/turf/closed/wall/prefab_plastic
- name = "prefabricated wall"
- desc = "A conservatively built metal frame with plastic paneling covering a thin air-seal layer. \
- It's a little unnerving, but its better than nothing at all."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/prefab_wall.dmi'
- icon_state = "prefab-0"
- base_icon_state = "prefab"
- can_engrave = FALSE
- girder_type = null
- hardness = 70
- slicing_duration = 5 SECONDS
- sheet_type = /obj/item/stack/sheet/plastic_wall_panel
- sheet_amount = 1
-
-GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list(
- new/datum/stack_recipe("prefabricated wall", /turf/closed/wall/prefab_plastic, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
- new/datum/stack_recipe("prefabricated window", /obj/structure/window/reinforced/colony_fabricator, time = 0.5 SECONDS, on_solid_ground = TRUE, check_direction = TRUE, is_fulltile = TRUE, category = CAT_WINDOWS), \
- ))
-
-/obj/item/stack/sheet/plastic_wall_panel
- name = "plastic panels"
- singular_name = "plastic panel"
- desc = "What better material to make the walls of your soon to be home out of than sheets of flimsy plastic? \
- Metal? What are you talking about, metal walls, in this economy? May also be used to make structures other \
- than walls."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi'
- icon_state = "sheet-plastic"
- inhand_icon_state = "sheet-plastic"
- mats_per_unit = list(
- /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT,
- /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
- )
- has_unique_girder = TRUE
- material_type = /datum/material/plastic
- merge_type = /obj/item/stack/sheet/plastic_wall_panel
- walltype = /turf/closed/wall/prefab_plastic
-
-/obj/item/stack/sheet/plastic_wall_panel/examine(mob/user)
- . = ..()
- . += span_notice("You can build a prefabricated wall by right clicking on an empty floor.")
-
-/obj/item/stack/sheet/plastic_wall_panel/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters)
- if(!isopenturf(target))
- return SECONDARY_ATTACK_CONTINUE_CHAIN
- var/turf/open/build_on = target
- if(!user.Adjacent(build_on))
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(isgroundlessturf(build_on))
- user.balloon_alert(user, "can't place it here!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(build_on.is_blocked_turf())
- user.balloon_alert(user, "something is blocking the tile!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(get_amount() < 1)
- user.balloon_alert(user, "not enough material!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(!do_after(user, 3 SECONDS, build_on))
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(build_on.is_blocked_turf())
- user.balloon_alert(user, "something is blocking the tile!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- if(!use(1))
- user.balloon_alert(user, "not enough material!")
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
- new walltype(build_on)
- return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
-
-/obj/item/stack/sheet/plastic_wall_panel/get_main_recipes()
- . = ..()
- . += GLOB.plastic_wall_panel_recipes
-
-/obj/item/stack/sheet/plastic_wall_panel/ten
- amount = 10
-
-/obj/item/stack/sheet/plastic_wall_panel/fifty
- amount = 50
-
-// Stacks of floor tiles
-
-/obj/item/stack/tile/catwalk_tile/colony_lathe
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi'
- icon_state = "prefab_catwalk"
- mats_per_unit = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT)
- turf_type = /turf/open/floor/catwalk_floor/colony_fabricator
- merge_type = /obj/item/stack/tile/catwalk_tile/colony_lathe
- tile_reskin_types = null
-
-/obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn
- amount = 4
-
-/obj/item/stack/tile/iron/colony
- name = "prefab floor tiles"
- singular_name = "prefab floor tile"
- desc = "A stack of large floor tiles that are a common sight in frontier colonies and prefab buildings."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi'
- icon_state = "colony_grey"
- turf_type = /turf/open/floor/iron/colony
- merge_type = /obj/item/stack/tile/iron/colony
- tile_reskin_types = list(
- /obj/item/stack/tile/iron/colony,
- /obj/item/stack/tile/iron/colony/texture,
- /obj/item/stack/tile/iron/colony/bolts,
- /obj/item/stack/tile/iron/colony/white,
- /obj/item/stack/tile/iron/colony/white/texture,
- /obj/item/stack/tile/iron/colony/white/bolts,
- )
-
-/obj/item/stack/tile/iron/colony/lathe_spawn
- amount = 4
-
-// Grated floor tile, for seeing wires under
-
-/turf/open/floor/catwalk_floor/colony_fabricator
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles.dmi'
- icon_state = "prefab_above"
- catwalk_type = "prefab"
- baseturfs = /turf/open/floor/plating
- floor_tile = /obj/item/stack/tile/catwalk_tile/colony_lathe
-
-// "Normal" floor tiles
-
-/obj/item/stack/tile/iron/colony/texture
- icon_state = "colony_grey_texture"
- turf_type = /turf/open/floor/iron/colony/texture
-
-/obj/item/stack/tile/iron/colony/bolts
- icon_state = "colony_grey_bolts"
- turf_type = /turf/open/floor/iron/colony/bolts
-
-/turf/open/floor/iron/colony
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles.dmi'
- icon_state = "colony_grey"
- base_icon_state = "colony_grey"
- floor_tile = /obj/item/stack/tile/iron/colony
- tiled_dirt = FALSE
-
-/turf/open/floor/iron/colony/texture
- icon_state = "colony_grey_texture"
- base_icon_state = "colony_grey_texture"
- floor_tile = /obj/item/stack/tile/iron/colony/texture
-
-/turf/open/floor/iron/colony/bolts
- icon_state = "colony_grey_bolts"
- base_icon_state = "colony_grey_bolts"
- floor_tile = /obj/item/stack/tile/iron/colony/bolts
-
-// White variants of the above tiles
-
-/obj/item/stack/tile/iron/colony/white
- icon_state = "colony_white"
- turf_type = /turf/open/floor/iron/colony/white
-
-/obj/item/stack/tile/iron/colony/white/texture
- icon_state = "colony_white_texture"
- turf_type = /turf/open/floor/iron/colony/white/texture
-
-/obj/item/stack/tile/iron/colony/white/bolts
- icon_state = "colony_white_bolts"
- turf_type = /turf/open/floor/iron/colony/white/bolts
-
-/turf/open/floor/iron/colony/white
- icon_state = "colony_white"
- base_icon_state = "colony_white"
- floor_tile = /obj/item/stack/tile/iron/colony/white
-
-/turf/open/floor/iron/colony/white/texture
- icon_state = "colony_white_texture"
- base_icon_state = "colony_white_texture"
- floor_tile = /obj/item/stack/tile/iron/colony/white/texture
-
-/turf/open/floor/iron/colony/white/bolts
- icon_state = "colony_white_bolts"
- base_icon_state = "colony_white_bolts"
- floor_tile = /obj/item/stack/tile/iron/colony/white/bolts
diff --git a/modular_skyrat/modules/colony_fabricator/code/construction/windows.dm b/modular_skyrat/modules/colony_fabricator/code/construction/windows.dm
deleted file mode 100644
index e2848ad7961..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/construction/windows.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/structure/window/reinforced/colony_fabricator
- name = "prefabricated window"
- desc = "A conservatively built metal frame with a thick sheet of space-grade glass slotted into it."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/prefab_window.dmi'
- icon_state = "prefab-0"
- base_icon_state = "prefab"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS + SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE
- canSmoothWith = SMOOTH_GROUP_WINDOW_FULLTILE_SHUTTLE
- glass_type = /obj/item/stack/sheet/plastic_wall_panel
- glass_amount = 1
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/construction.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/construction.dm
deleted file mode 100644
index 14e26f0e69c..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/design_datums/construction.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-// Look, I had to make its name start with A so it'd be top of the list, fight me
-
-#define FABRICATOR_SUBCATEGORY_STRUCTURES "/Autofab Structures"
-
-// Techweb node that shouldnt show up anywhere ever specifically for the fabricator to work with
-
-/datum/techweb_node/colony_fabricator_structures
- id = "colony_fabricator_structures"
- display_name = "Colony Fabricator Structure Designs"
- description = "Contains all of the colony fabricator's structure designs."
- design_ids = list(
- "prefab_airlock_kit",
- "prefab_shutters_kit",
- "prefab_floor_tile",
- "prefab_cat_floor_tile",
- "colony_fab_plastic_wall_panel",
- )
- research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you
- hidden = TRUE
- show_on_wiki = FALSE
- starting_node = TRUE
-
-// Airlock kit
-
-/datum/design/prefab_airlock_kit
- name = "Prefab Airlock"
- id = "prefab_airlock_kit"
- build_type = COLONY_FABRICATOR
- materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
- )
- build_path = /obj/item/flatpacked_machine/airlock_kit
- category = list(
- RND_CATEGORY_INITIAL,
- RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
- )
- construction_time = 30 SECONDS
-
-// Shutters kit
-
-/datum/design/prefab_shutters_kit
- name = "Prefab Shutters"
- id = "prefab_shutters_kit"
- build_type = COLONY_FABRICATOR
- materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
- )
- build_path = /obj/item/flatpacked_machine/shutter_kit
- category = list(
- RND_CATEGORY_INITIAL,
- RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
- )
- construction_time = 30 SECONDS
-
-// Fancy floor tiles
-
-/datum/design/prefab_floor_tile
- name = "Prefab Floor Tile"
- id = "prefab_floor_tile"
- build_type = COLONY_FABRICATOR
- materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT,
- )
- build_path = /obj/item/stack/tile/iron/colony/lathe_spawn
- category = list(
- RND_CATEGORY_INITIAL,
- RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
- )
- construction_time = 15 SECONDS
-
-// Fancy catwalk floor tiles
-
-/datum/design/prefab_cat_floor_tile
- name = "Prefab Catwalk Plating"
- id = "prefab_cat_floor_tile"
- build_type = COLONY_FABRICATOR
- materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT,
- )
- build_path = /obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn
- category = list(
- RND_CATEGORY_INITIAL,
- RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
- )
- construction_time = 15 SECONDS
-
-// Plastic wall panels, twice the wall for the same price in plastic, efficient!
-
-/datum/design/colony_fab_plastic_wall_panel
- name = "Plastic Paneling x10"
- id = "colony_fab_plastic_wall_panel"
- build_type = COLONY_FABRICATOR
- materials = list(
- /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5
- )
- build_path = /obj/item/stack/sheet/plastic_wall_panel/ten
- category = list(
- RND_CATEGORY_INITIAL,
- RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES,
- )
- construction_time = 15 SECONDS
-
-#undef FABRICATOR_SUBCATEGORY_STRUCTURES
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
deleted file mode 100644
index 1a83a810cc2..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/construction.dm
+++ /dev/null
@@ -1,85 +0,0 @@
-// This file is going to be just all bitflag additions
-
-/datum/design/apc_board/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/airalarm_electronics/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/airlock_board/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/firealarm_electronics/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/control/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/firelock_board/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/infrared_emitter/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/prox_sensor/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/signaler/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/timer/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/camera_assembly/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/intercom_frame/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/light_tube/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/light_bulb/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/conveyor_belt/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/conveyor_switch/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/lavarods/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/rglass/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/plasteel_alloy/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/plaglass_alloy/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/plasmarglass_alloy/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
deleted file mode 100644
index 86b70bc7f74..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/datum/design/board/hydroponics/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/cyborgrecharger/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/microwave/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/processor/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/recycler/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/suit_storage_unit/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/range/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/griddle/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/reagentgrinder/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
-
-/datum/design/board/biogenerator/New()
- . = ..()
- build_type |= COLONY_FABRICATOR
diff --git a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm b/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm
deleted file mode 100644
index 5c375e6259c..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/looping_sounds.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/datum/looping_sound/colony_fabricator_running
- start_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav'
- start_length = 1
- mid_sounds = list(
- 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_1.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_2.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_3.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_4.wav' = 1,
- )
- mid_length = 3 SECONDS
- end_sound = 'modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav'
- volume = 100
- falloff_exponent = 3
-
-/datum/looping_sound/arc_furnace_running
- mid_sounds = list(
- 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_1.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_2.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_3.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_4.wav' = 1,
- )
- mid_length = 1 SECONDS
- volume = 200 // This sound effect is very quiet I've noticed
- falloff_exponent = 2
-
-/datum/looping_sound/conditioner_running
- mid_sounds = list(
- 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_1.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_2.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_3.wav' = 1,
- 'modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_4.wav' = 1,
- )
- mid_length = 3 SECONDS
- volume = 75
- falloff_exponent = 3
diff --git a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm b/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm
deleted file mode 100644
index 604bf109b0e..00000000000
--- a/modular_skyrat/modules/colony_fabricator/code/tools/tools.dm
+++ /dev/null
@@ -1,145 +0,0 @@
-// Like the power drill, except no speed buff but has wirecutters as well? Just trust me on this one.
-
-/obj/item/screwdriver/omni_drill
- name = "powered driver"
- desc = "The ultimate in multi purpose construction tools. With heads for wire cutting, bolt driving, and driving \
- screws, what's not to love? Well, the slow speed. Compared to other power drills these tend to be \
- not much quicker than unpowered tools ."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
- icon_state = "drill"
- belt_icon_state = null
- inhand_icon_state = "drill"
- worn_icon_state = "drill"
- lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- custom_materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
- /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
- /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
- )
- force = 10
- throwforce = 8
- throw_speed = 2
- throw_range = 3
- attack_verb_continuous = list("drills", "screws", "jabs", "whacks")
- attack_verb_simple = list("drill", "screw", "jab", "whack")
- hitsound = 'sound/items/drill_hit.ogg'
- usesound = 'sound/items/drill_use.ogg'
- w_class = WEIGHT_CLASS_SMALL
- toolspeed = 1
- random_color = FALSE
- greyscale_config = null
- greyscale_config_belt = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
-
-/obj/item/screwdriver/omni_drill/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
-
-/obj/item/screwdriver/omni_drill/get_all_tool_behaviours()
- return list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WRENCH)
-
-/obj/item/screwdriver/omni_drill/examine(mob/user)
- . = ..()
- . += span_notice("Use in hand to switch configuration.\n")
- . += span_notice("It functions as a [tool_behaviour] tool.")
-
-/obj/item/screwdriver/omni_drill/update_icon_state()
- . = ..()
- switch(tool_behaviour)
- if(TOOL_SCREWDRIVER)
- icon_state = initial(icon_state)
- if(TOOL_WRENCH)
- icon_state = "[initial(icon_state)]_bolt"
- if(TOOL_WIRECUTTER)
- icon_state = "[initial(icon_state)]_cut"
-
-/obj/item/screwdriver/omni_drill/attack_self(mob/user, modifiers)
- . = ..()
- if(!user)
- return
- var/list/tool_list = list(
- "Screwdriver" = image(icon = icon, icon_state = "drill"),
- "Wrench" = image(icon = icon, icon_state = "drill_bolt"),
- "Wirecutters" = image(icon = icon, icon_state = "drill_cut"),
- )
- var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE)
- if(!check_menu(user) || !tool_result)
- return
- switch(tool_result)
- if("Wrench")
- tool_behaviour = TOOL_WRENCH
- sharpness = NONE
- if("Wirecutters")
- tool_behaviour = TOOL_WIRECUTTER
- sharpness = NONE
- if("Screwdriver")
- tool_behaviour = TOOL_SCREWDRIVER
- sharpness = SHARP_POINTY
- playsound(src, 'sound/items/change_drill.ogg', 50, vary = TRUE)
- update_appearance(UPDATE_ICON)
-
-/obj/item/screwdriver/omni_drill/proc/check_menu(mob/user)
- if(!istype(user))
- return FALSE
- if(user.incapacitated() || !user.Adjacent(src))
- return FALSE
- return TRUE
-
-// Just a completely normal crowbar except its normal sized and can force doors like jaws of life can
-
-/obj/item/crowbar/large/doorforcer
- name = "prybar"
- desc = "A large, sturdy crowbar, painted orange. This one just happens to be tough enough to \
- survive forcing doors open ."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
- icon_state = "prybar"
- toolspeed = 1.3
- force_opens = TRUE
- custom_materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
- /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
- )
-
-/obj/item/crowbar/large/doorforcer/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
-
-// Backpackable mining drill
-
-/obj/item/pickaxe/drill/compact
- name = "compact mining drill"
- desc = "A powered mining drill, it drills all over the place. Compact enough to hopefully fit in a backpack."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
- icon_state = "drilla"
- worn_icon_state = "drill"
- w_class = WEIGHT_CLASS_NORMAL
- toolspeed = 0.6
- custom_materials = list(
- /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
- /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
- )
-
-/obj/item/pickaxe/drill/compact/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
-
-// Electric welder but not quite as strong
-
-/obj/item/weldingtool/electric/arc_welder
- name = "arc welding tool"
- desc = "A specialized welding tool utilizing high powered arcs of electricity to weld things together. \
- Compared to other electrically-powered welders, this model is slow and highly power inefficient, \
- but it still gets the job done and chances are you printed this bad boy off for free."
- icon = 'modular_skyrat/modules/colony_fabricator/icons/tools.dmi'
- icon_state = "arc_welder"
- usesound = 'modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg'
- light_range = 2
- light_power = 0.75
- toolspeed = 1
- power_use_amount = POWER_CELL_USE_INSANE
-
-/obj/item/weldingtool/electric/arc_welder/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER)
diff --git a/modular_skyrat/modules/colony_fabricator/icons/doors/packed.dmi b/modular_skyrat/modules/colony_fabricator/icons/doors/packed.dmi
deleted file mode 100644
index 1f3dacc63d9..00000000000
Binary files a/modular_skyrat/modules/colony_fabricator/icons/doors/packed.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt b/modular_skyrat/modules/colony_fabricator/sound/attributions.txt
deleted file mode 100644
index 41f5a6b8600..00000000000
--- a/modular_skyrat/modules/colony_fabricator/sound/attributions.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-The following sounds have been recorded, edited and added by Paxilmaniac:
-
-modular_skyrat/modules/colony_fabricator/sound/arc_furnace/arc_furnace_mid_(1 - 4).wav
-modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_mid_(1 - 4).wav
-modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_end.wav
-modular_skyrat/modules/colony_fabricator/sound/fabricator/fabricator_start.wav
-
-The following sounds are from https://pixabay.com/sound-effects/wall-air-conditioner-43901/
-
-modular_skyrat/modules/colony_fabricator/sound/conditioner/conditioner_(1 - 4).wav
-
-The following sounds are from https://pixabay.com/sound-effects/welder-3-54547/
-
-modular_skyrat/modules/colony_fabricator/sound/arc_welder/arc_welder.ogg
diff --git a/modular_skyrat/modules/command_vendor/code/vending.dm b/modular_skyrat/modules/command_vendor/code/vending.dm
deleted file mode 100644
index 7e9c35f2471..00000000000
--- a/modular_skyrat/modules/command_vendor/code/vending.dm
+++ /dev/null
@@ -1,175 +0,0 @@
-/obj/machinery/vending/access/command
- name = "\improper Command Outfitting Station"
- desc = "A vending machine for specialised clothing for members of Command."
- product_ads = "File paperwork in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
- icon = 'modular_skyrat/modules/command_vendor/icons/vending.dmi'
- icon_state = "commdrobe"
- light_mask = "wardrobe-light-mask"
- vend_reply = "Thank you for using the CommDrobe!"
- auto_build_products = TRUE
- payment_department = ACCOUNT_CMD
-
- refill_canister = /obj/item/vending_refill/wardrobe/comm_wardrobe
- payment_department = ACCOUNT_CMD
- light_color = COLOR_COMMAND_BLUE
-
-/obj/item/vending_refill/wardrobe/comm_wardrobe
- machine_name = "CommDrobe"
-
-/obj/machinery/vending/access/command/build_access_list(list/access_lists)
- access_lists["[ACCESS_CAPTAIN]"] = list(
- // CAPTAIN
- /obj/item/clothing/head/hats/caphat = 1,
- /obj/item/clothing/head/caphat/beret = 1,
- /obj/item/clothing/head/caphat/beret/alt = 1,
- /obj/item/clothing/head/hats/imperial/cap = 1,
- /obj/item/clothing/under/rank/captain = 1,
- /obj/item/clothing/under/rank/captain/skirt = 1,
- /obj/item/clothing/under/rank/captain/dress = 1,
- /obj/item/clothing/under/rank/captain/skyrat/kilt = 1,
- /obj/item/clothing/under/rank/captain/skyrat/imperial = 1,
- /obj/item/clothing/head/hats/caphat/parade = 1,
- /obj/item/clothing/under/rank/captain/parade = 1,
- /obj/item/clothing/suit/armor/vest/capcarapace/captains_formal = 1,
- /obj/item/clothing/suit/armor/vest/capcarapace/jacket = 1,
- /obj/item/clothing/suit/jacket/capjacket = 1,
- /obj/item/clothing/neck/cloak/cap = 1,
- /obj/item/clothing/neck/mantle/capmantle = 1,
- /obj/item/storage/backpack/captain = 1,
- /obj/item/storage/backpack/satchel/cap = 1,
- /obj/item/storage/backpack/duffelbag/captain = 1,
- /obj/item/storage/backpack/messenger/cap = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
-
- // BLUESHIELD
- /obj/item/clothing/head/beret/blueshield = 1,
- /obj/item/clothing/head/beret/blueshield/navy = 1,
- /obj/item/clothing/under/rank/blueshield = 1,
- /obj/item/clothing/under/rank/blueshield/skirt = 1,
- /obj/item/clothing/under/rank/blueshield/turtleneck = 1,
- /obj/item/clothing/under/rank/blueshield/turtleneck/skirt = 1,
- /obj/item/clothing/suit/armor/vest/blueshield = 1,
- /obj/item/clothing/suit/armor/vest/blueshield/jacket = 1,
- /obj/item/clothing/neck/mantle/bsmantle = 1,
- /obj/item/storage/backpack/blueshield = 1,
- /obj/item/storage/backpack/satchel/blueshield = 1,
- /obj/item/storage/backpack/duffelbag/blueshield = 1,
- /obj/item/storage/backpack/messenger/blueshield = 1,
- /obj/item/clothing/shoes/laceup = 1,
- )
- access_lists["[ACCESS_HOP]"] = list( // Best head btw
- /obj/item/clothing/head/hats/hopcap = 1,
- /obj/item/clothing/head/hopcap/beret = 1,
- /obj/item/clothing/head/hopcap/beret/alt = 1,
- /obj/item/clothing/head/hats/imperial/hop = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skirt = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/turtleneck/skirt = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/parade/female = 1,
- /obj/item/clothing/under/rank/civilian/head_of_personnel/skyrat/imperial = 1,
- /obj/item/clothing/suit/armor/vest/hop/hop_formal = 1,
- /obj/item/clothing/neck/cloak/hop = 1,
- /obj/item/clothing/neck/mantle/hopmantle = 1,
- /obj/item/storage/backpack/head_of_personnel = 1,
- /obj/item/storage/backpack/satchel/head_of_personnel = 1,
- /obj/item/storage/backpack/duffelbag/head_of_personnel = 1,
- /obj/item/storage/backpack/messenger/head_of_personnel = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
- access_lists["[ACCESS_CMO]"] = list(
- /obj/item/clothing/head/beret/medical/cmo = 1,
- /obj/item/clothing/head/beret/medical/cmo/alt = 1,
- /obj/item/clothing/head/hats/imperial/cmo = 1,
- /obj/item/clothing/under/rank/medical/chief_medical_officer = 1,
- /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt = 1,
- /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck = 1,
- /obj/item/clothing/under/rank/medical/chief_medical_officer/skyrat/imperial = 1,
- /obj/item/clothing/neck/cloak/cmo = 1,
- /obj/item/clothing/neck/mantle/cmomantle = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
- access_lists["[ACCESS_RD]"] = list(
- /obj/item/clothing/head/beret/science/rd = 1,
- /obj/item/clothing/head/beret/science/rd/alt = 1,
- /obj/item/clothing/under/rank/rnd/research_director = 1,
- /obj/item/clothing/under/rank/rnd/research_director/skirt = 1,
- /obj/item/clothing/under/rank/rnd/research_director/alt = 1,
- /obj/item/clothing/under/rank/rnd/research_director/turtleneck = 1,
- /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt = 1,
- /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit = 1,
- /obj/item/clothing/under/rank/rnd/research_director/skyrat/jumpsuit/skirt = 1,
- /obj/item/clothing/under/rank/rnd/research_director/skyrat/imperial = 1,
- /obj/item/clothing/neck/cloak/rd = 1,
- /obj/item/clothing/neck/mantle/rdmantle = 1,
- /obj/item/clothing/suit/toggle/labcoat = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
- access_lists["[ACCESS_CE]"] = list(
- /obj/item/clothing/head/beret/engi/ce = 1,
- /obj/item/clothing/head/hats/imperial/ce = 1,
- /obj/item/clothing/under/rank/engineering/chief_engineer = 1,
- /obj/item/clothing/under/rank/engineering/chief_engineer/skirt = 1,
- /obj/item/clothing/under/rank/engineering/chief_engineer/skyrat/imperial = 1,
- /obj/item/clothing/neck/cloak/ce = 1,
- /obj/item/clothing/neck/mantle/cemantle = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
- access_lists["[ACCESS_HOS]"] = list(
- /obj/item/clothing/head/hats/hos/cap = 1,
- /obj/item/clothing/head/hats/hos/beret/navyhos = 1,
- /obj/item/clothing/head/hats/imperial/hos = 1,
- /obj/item/clothing/under/rank/security/head_of_security/peacekeeper = 1,
- /obj/item/clothing/under/rank/security/head_of_security/alt = 1,
- /obj/item/clothing/under/rank/security/head_of_security/alt/skirt = 1,
- /obj/item/clothing/under/rank/security/head_of_security/skyrat/imperial = 1,
- /obj/item/clothing/suit/jacket/hos/blue = 1,
- /obj/item/clothing/under/rank/security/head_of_security/parade = 1,
- /obj/item/clothing/suit/armor/hos/hos_formal = 1,
- /obj/item/clothing/neck/cloak/hos = 1,
- /obj/item/clothing/neck/cloak/hos/redsec = 1,
- /obj/item/clothing/neck/mantle/hosmantle = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
- access_lists["[ACCESS_QM]"] = list(
- /obj/item/clothing/head/beret/cargo/qm = 1,
- /obj/item/clothing/head/beret/cargo/qm/alt = 1,
- /obj/item/clothing/neck/cloak/qm = 1,
- /obj/item/clothing/neck/mantle/qm = 1,
- /obj/item/clothing/under/rank/cargo/qm = 1,
- /obj/item/clothing/under/rank/cargo/qm/skirt = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/gorka = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/turtleneck/skirt = 1,
- /obj/item/clothing/suit/brownfurrich = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/casual = 1,
- /obj/item/clothing/suit/toggle/jacket/supply/head = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/formal = 1,
- /obj/item/clothing/under/rank/cargo/qm/skyrat/formal/skirt = 1,
- /obj/item/clothing/shoes/sneakers/brown = 1,
- )
-
- access_lists["[ACCESS_CENT_GENERAL]"] = list( // CC Rep Shiz
- /obj/item/clothing/head/nanotrasen_consultant = 1,
- /obj/item/clothing/head/nanotrasen_consultant/beret = 1,
- /obj/item/clothing/head/beret/centcom_formal/nt_consultant = 1,
- /obj/item/clothing/under/rank/nanotrasen_consultant = 1,
- /obj/item/clothing/under/rank/nanotrasen_consultant/skirt = 1,
- /obj/item/clothing/head/hats/centhat = 1,
- /obj/item/clothing/suit/armor/centcom_formal/nt_consultant = 1,
- /obj/item/clothing/gloves/combat/naval/nanotrasen_consultant = 1,
- )
-
- access_lists["[ACCESS_COMMAND]"] = list(
- /obj/item/clothing/head/hats/imperial = 5,
- /obj/item/clothing/head/hats/imperial/grey = 5,
- /obj/item/clothing/head/hats/imperial/white = 2,
- /obj/item/clothing/head/hats/imperial/red = 5,
- /obj/item/clothing/head/hats/imperial/helmet = 5,
- /obj/item/clothing/under/rank/captain/skyrat/imperial/generic = 5,
- /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/grey = 5,
- /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/pants = 5,
- /obj/item/clothing/under/rank/captain/skyrat/imperial/generic/red = 5,
- )
-
diff --git a/modular_skyrat/modules/company_imports/code/armament_component.dm b/modular_skyrat/modules/company_imports/code/armament_component.dm
deleted file mode 100644
index f647a3fe1bd..00000000000
--- a/modular_skyrat/modules/company_imports/code/armament_component.dm
+++ /dev/null
@@ -1,302 +0,0 @@
-#define MAX_AMMO_AMOUNT 10
-#define CARGO_CONSOLE 1
-#define IRN_CONSOLE 2
-
-/datum/component/armament/company_imports
- /// Selected amount of ammo to purchase
- var/ammo_purchase_num = 1
- /// Is this set to private order
- var/self_paid = FALSE
- /// Cooldown to announce a requested order
- COOLDOWN_DECLARE(radio_cooldown)
- /// To cut down on redundant istypes(), what this component is attached to
- var/console_state = null
- /// If this is a tablet, the parent budgetordering
- var/datum/computer_file/program/budgetorders/parent_prog
-
-/datum/component/armament/company_imports/Initialize(list/required_products, list/needed_access)
- . = ..()
- if(istype(parent, /obj/machinery/computer/cargo))
- console_state = CARGO_CONSOLE
- else if(istype(parent, /obj/item/modular_computer))
- console_state = IRN_CONSOLE
-
-/datum/component/armament/company_imports/Destroy(force, silent)
- parent_prog = null
- . = ..()
-
-/datum/component/armament/company_imports/on_attack_hand(datum/source, mob/living/user)
- return
-
-/datum/component/armament/company_imports/on_attackby(atom/target, obj/item, mob/user)
- return
-
-/datum/component/armament/company_imports/ui_data(mob/user)
- var/list/data = list()
-
- var/mob/living/carbon/human/the_person = user
- var/obj/item/card/id/id_card
- var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
-
- if(console_state == IRN_CONSOLE)
- id_card = parent_prog.computer.computer_id_slot?.GetID()
- else
- if(istype(the_person))
- id_card = the_person.get_idcard(TRUE)
-
- var/budget_name = "Cargo Budget"
-
- if(id_card?.registered_account && (console_state == IRN_CONSOLE))
- if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
- parent_prog.requestonly = FALSE
- buyer = SSeconomy.get_dep_account(id_card.registered_account?.account_job.paycheck_department)
- parent_prog.can_approve_requests = TRUE
- else
- parent_prog.requestonly = TRUE
- parent_prog.can_approve_requests = FALSE
- else
- parent_prog?.requestonly = TRUE
-
- if(id_card)
- budget_name = self_paid ? id_card.name : buyer.account_holder
-
- data["budget_name"] = budget_name
-
- var/cant_buy_restricted = TRUE
-
- if(console_state == CARGO_CONSOLE)
- var/obj/machinery/computer/cargo/console = parent
- if(!console.requestonly)
- cant_buy_restricted = FALSE
-
- else if((console_state == IRN_CONSOLE) && id_card?.registered_account)
- if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
- if((buyer == SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)) && !self_paid)
- cant_buy_restricted = FALSE
-
- data["cant_buy_restricted"] = !!cant_buy_restricted
- data["budget_points"] = self_paid ? id_card?.registered_account?.account_balance : buyer?.account_balance
- data["ammo_amount"] = ammo_purchase_num
- data["self_paid"] = !!self_paid
- data["armaments_list"] = list()
-
- for(var/armament_category as anything in SSarmaments.entries)
-
- var/list/armament_subcategories = list()
-
- for(var/subcategory as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY])
- var/list/subcategory_items = list()
- for(var/datum/armament_entry/armament_entry as anything in SSarmaments.entries[armament_category][CATEGORY_ENTRY][subcategory])
- if(products && !(armament_entry.type in products))
- continue
-
- var/datum/armament_entry/company_import/gun_entry = armament_entry
-
- if(gun_entry.contraband)
- if(!(console_state == CARGO_CONSOLE))
- continue
- var/obj/machinery/computer/cargo/parent_console = parent
- if(!parent_console.contraband)
- continue
-
- subcategory_items += list(list(
- "ref" = REF(armament_entry),
- "icon" = armament_entry.cached_base64,
- "name" = armament_entry.name,
- "cost" = armament_entry.cost,
- "buyable_ammo" = armament_entry.magazine ? TRUE : FALSE,
- "magazine_cost" = armament_entry.magazine_cost,
- "purchased" = purchased_items[armament_entry] ? purchased_items[armament_entry] : 0,
- "description" = armament_entry.description,
- "armament_category" = armament_entry.category,
- "equipment_subcategory" = armament_entry.subcategory,
- "restricted" = !!armament_entry.restricted,
- ))
-
- if(!LAZYLEN(subcategory_items))
- continue
-
- armament_subcategories += list(list(
- "subcategory" = subcategory,
- "items" = subcategory_items,
- ))
-
- if(!LAZYLEN(armament_subcategories))
- continue
-
- data["armaments_list"] += list(list(
- "category" = armament_category,
- "category_uses" = used_categories[armament_category],
- "subcategories" = armament_subcategories,
- ))
-
- return data
-
-/datum/component/armament/company_imports/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "CargoImportConsole")
- ui.open()
-
-/datum/component/armament/company_imports/select_armament(mob/user, datum/armament_entry/company_import/armament_entry)
- var/datum/bank_account/buyer = SSeconomy.get_dep_account(ACCOUNT_CAR)
- var/obj/item/modular_computer/possible_downloader
- var/obj/machinery/computer/cargo/possible_console
-
- if(console_state == CARGO_CONSOLE)
- possible_console = parent
-
- else if(console_state == IRN_CONSOLE)
- possible_downloader = parent
-
- if(!istype(armament_entry))
- return
-
- var/mob/living/carbon/human/the_person = user
-
- if(istype(the_person))
-
- var/obj/item/card/id/id_card
-
- if(console_state == IRN_CONSOLE)
- id_card = parent_prog.computer.computer_id_slot?.GetID()
- else
- id_card = the_person.get_idcard(TRUE)
-
- if(id_card?.registered_account && (console_state == IRN_CONSOLE))
- if((ACCESS_COMMAND in id_card.access) || (ACCESS_QM in id_card.access))
- parent_prog.requestonly = FALSE
- buyer = SSeconomy.get_dep_account(id_card.registered_account.account_job.paycheck_department)
- parent_prog.can_approve_requests = TRUE
- else
- parent_prog.requestonly = TRUE
- parent_prog.can_approve_requests = FALSE
- else
- parent_prog?.requestonly = TRUE
-
- if(self_paid)
- if(!istype(id_card))
- to_chat(user, span_warning("No ID card detected."))
- return
-
- if(istype(id_card, /obj/item/card/id/departmental_budget))
- to_chat(user, span_warning("[id_card] cannot be used to make purchases."))
- return
-
- var/datum/bank_account/account = id_card.registered_account
-
- if(!istype(account))
- to_chat(user, span_warning("Invalid bank account."))
- return
-
- buyer = account
-
- if(issilicon(user) && (console_state == IRN_CONSOLE))
- parent_prog.can_approve_requests = TRUE
- parent_prog.requestonly = FALSE
-
- if(!buyer)
- to_chat(user, span_warning("No budget found!"))
- return
-
- if(!ishuman(user) && !issilicon(user))
- return
-
- if(!buyer.has_money(armament_entry.cost))
- to_chat(user, span_warning("Not enough money!"))
- return
-
- var/name
-
- if(issilicon(user))
- name = user.real_name
- else
- the_person.get_authentification_name()
-
- var/reason = ""
-
- if(possible_console)
- if(possible_console.requestonly && !self_paid)
- reason = tgui_input_text(user, "Reason", name)
- if(isnull(reason))
- return
-
- else if(possible_downloader)
- var/datum/computer_file/program/budgetorders/parent_file = parent_prog
- if((parent_file.requestonly && !self_paid) || !(possible_downloader.computer_id_slot?.GetID()))
- reason = tgui_input_text(user, "Reason", name)
- if(isnull(reason))
- return
-
- used_categories[armament_entry.category]++
-
- purchased_items[armament_entry]++
-
- var/datum/supply_pack/armament/created_pack = new
- created_pack.name = initial(armament_entry.item_type.name)
- created_pack.cost = cost_calculate(armament_entry.cost) //Paid for seperately
- created_pack.contains = list(armament_entry.item_type)
-
- var/rank
-
- if(issilicon(user))
- rank = "Silicon"
- else
- rank = the_person.get_assignment(hand_first = TRUE)
-
- var/ckey = user.ckey
-
- var/datum/supply_order/company_import/created_order
- if(buyer != SSeconomy.get_dep_account(ACCOUNT_CAR))
- created_order = new(created_pack, name, rank, ckey, paying_account = buyer, reason = reason, can_be_cancelled = TRUE)
- else
- created_pack.goody = FALSE // Cargo ordered stuff should just show up in a box I think
- created_order = new(created_pack, name, rank, ckey, reason = reason, can_be_cancelled = TRUE)
- created_order.selected_entry = armament_entry
- created_order.used_component = src
- if(console_state == CARGO_CONSOLE)
- created_order.generateRequisition(get_turf(parent))
- if(possible_console.requestonly && !self_paid)
- SSshuttle.request_list += created_order
- else
- SSshuttle.shopping_list += created_order
- else if(console_state == IRN_CONSOLE)
- var/datum/computer_file/program/budgetorders/comp_file = parent_prog
- created_order.generateRequisition(get_turf(parent))
- if(comp_file.requestonly && !self_paid)
- SSshuttle.request_list += created_order
- else
- SSshuttle.shopping_list += created_order
-
-/datum/component/armament/company_imports/proc/cost_calculate(cost)
- . = cost
- . *= SSeconomy.pack_price_modifier
-
-/datum/component/armament/company_imports/ui_act(action, list/params)
- . = ..()
- if(.)
- return
-
- switch(action)
- if("toggleprivate")
- var/obj/item/card/id/id_card
- var/mob/living/carbon/human/the_person = usr
-
- if(!istype(the_person))
- if(issilicon(the_person))
- self_paid = FALSE
- return
-
- if(console_state == IRN_CONSOLE)
- id_card = parent_prog.computer.computer_id_slot?.GetID()
- else
- id_card = the_person.get_idcard(TRUE)
-
- if(!id_card)
- return
-
- self_paid = !self_paid
-
-#undef MAX_AMMO_AMOUNT
-#undef CARGO_CONSOLE
-#undef IRN_CONSOLE
diff --git a/modular_skyrat/modules/company_imports/code/readme.md b/modular_skyrat/modules/company_imports/code/readme.md
deleted file mode 100644
index 32b07361a20..00000000000
--- a/modular_skyrat/modules/company_imports/code/readme.md
+++ /dev/null
@@ -1,25 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/
-
-## \
-
-Module ID:
-
-### Description:
-
-### TG Proc/File Changes:
-
-- N/A
-
-### Modular Overrides:
-
-- `modular_skyrat/master_files/code/modules/cargo/orderconsole.dm`: `proc/ui_act`
-
-### Defines:
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
diff --git a/modular_skyrat/modules/contractor/code/datums/contract.dm b/modular_skyrat/modules/contractor/code/datums/contract.dm
deleted file mode 100644
index 8a5f702b6c5..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/contract.dm
+++ /dev/null
@@ -1,318 +0,0 @@
-#define RANSOM_LOWER 75
-#define RANSOM_UPPER 150
-#define CONTRACTOR_RANSOM_CUT 0.35
-
-/datum/syndicate_contract
- /// Unique ID tied to the contract
- var/id = 0
- /// If the contract is the contractor's current one
- var/status = CONTRACT_STATUS_INACTIVE
- /// Reference to the objective datum
- var/datum/objective/contract/contract = new()
- /// Target's job
- var/target_rank
- /// A number in multiples of 100, anywhere from 7500 credits to 15000, station cost when someone is kidnapped
- var/ransom = 0
- /// TC payout size, will be small, medium, or large.
- var/payout_type
- /// Mad-libs style wanted message, just flavor.
- var/wanted_message
- /// List of the items the victim had on them prior to kidnapping.
- var/list/victim_belongings = list()
-
-/datum/syndicate_contract/New(contract_owner, blacklist, type = CONTRACT_PAYOUT_SMALL)
- contract.owner = contract_owner
- payout_type = type
-
- generate(blacklist)
-
-/// Generation of the contract, called on New()
-/datum/syndicate_contract/proc/generate(blacklist)
- contract.find_target(null, blacklist)
-
- var/datum/record/crew/record
- if (contract.target)
- record = find_record(contract.target.name)
-
- if (record)
- target_rank = record.rank
- else
- target_rank = "Unknown"
-
- if (payout_type == CONTRACT_PAYOUT_LARGE)
- contract.payout_bonus = rand(9,13)
- else if (payout_type == CONTRACT_PAYOUT_MEDIUM)
- contract.payout_bonus = rand(6,8)
- else
- contract.payout_bonus = rand(2,4)
-
- contract.payout = rand(1, 2)
- contract.generate_dropoff()
-
- ransom = 100 * rand(RANSOM_LOWER, RANSOM_UPPER)
-
- var/base = pick_list(WANTED_FILE, "basemessage")
- var/verb_string = pick_list(WANTED_FILE, "verb")
- var/noun = pick_list_weighted(WANTED_FILE, "noun")
- var/location = pick_list_weighted(WANTED_FILE, "location")
- wanted_message = "[base] [verb_string] [noun] [location]."
-
-/// Handler to find a valid turn and launch victim collector
-/datum/syndicate_contract/proc/handle_extraction(mob/living/user)
- if(!(contract.target && contract.dropoff_check(user, contract.target.current)))
- return FALSE
-
- var/turf/free_location = find_obstruction_free_location(3, user, contract.dropoff)
-
- if(!free_location)
- return FALSE
-
- launch_extraction_pod(free_location)
- return TRUE
-
-
-/// Launch the pod to collect our victim.
-/datum/syndicate_contract/proc/launch_extraction_pod(turf/empty_pod_turf)
- var/obj/structure/closet/supplypod/extractionpod/empty_pod = new()
- empty_pod.contract_hub = contract.owner?.opposing_force?.contractor_hub
- empty_pod.tied_contract = src
- empty_pod.recieving = TRUE
-
- RegisterSignal(empty_pod, COMSIG_ATOM_ENTERED, PROC_REF(enter_check))
-
- empty_pod.stay_after_drop = TRUE
- empty_pod.reversing = TRUE
- empty_pod.explosionSize = list(0,0,0,1)
- empty_pod.leavingSound = 'sound/effects/podwoosh.ogg'
-
- new /obj/effect/pod_landingzone(empty_pod_turf, empty_pod)
-
-/datum/syndicate_contract/proc/enter_check(datum/source, mob/living/sent_mob)
- SIGNAL_HANDLER
- if(!istype(source, /obj/structure/closet/supplypod/extractionpod))
- return
- if(!istype(sent_mob))
- return
- var/datum/opposing_force/opfor_data = contract.owner.opposing_force
-
- if (sent_mob == contract.target.current)
- opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout
- opfor_data.contractor_hub.contracts_completed += 1
-
- if (sent_mob.stat != DEAD)
- opfor_data.contractor_hub.contract_TC_to_redeem += contract.payout_bonus
-
- status = CONTRACT_STATUS_COMPLETE
-
- if (opfor_data.contractor_hub.current_contract == src)
- opfor_data.contractor_hub.current_contract = null
-
- opfor_data.contractor_hub.contract_rep += 2
- else
- status = CONTRACT_STATUS_ABORTED // Sending a sent_mob that wasn't even yours is as good as just aborting it
-
- if (opfor_data.contractor_hub.current_contract == src)
- opfor_data.contractor_hub.current_contract = null
-
- if(iscarbon(sent_mob))
- for(var/obj/item/sent_mob_item in sent_mob)
- if (ishuman(sent_mob))
- var/mob/living/carbon/human/sent_mob_human = sent_mob
- if(sent_mob_item == sent_mob_human.w_uniform)
- continue //So all they're left with are shoes and uniform.
- if(sent_mob_item == sent_mob_human.shoes)
- continue
-
-
- sent_mob.transferItemToLoc(sent_mob_item)
- victim_belongings.Add(sent_mob_item)
-
- var/obj/structure/closet/supplypod/extractionpod/pod = source
- pod.recieving = FALSE
-
- // Handle the pod returning
- pod.startExitSequence(pod)
-
- if (ishuman(sent_mob))
- var/mob/living/carbon/human/sent_mob_human = sent_mob
-
- // After we remove items, at least give them what they need to live.
- sent_mob_human.dna.species.give_important_for_life(sent_mob_human)
-
- // After pod is sent we start the victim narrative/heal.
- INVOKE_ASYNC(src, PROC_REF(handle_victim_experience), sent_mob)
-
- // This is slightly delayed because of the sleep calls above to handle the narrative.
- // We don't want to tell the station instantly.
- var/points_to_check
- var/datum/bank_account/bank = SSeconomy.get_dep_account(ACCOUNT_CAR)
- if(bank)
- points_to_check = bank.account_balance
- if(points_to_check >= ransom)
- bank.adjust_money(-ransom)
- else
- bank.adjust_money(-points_to_check)
-
- priority_announce("One of your crew was captured by a rival organisation - we've needed to pay their ransom to bring them back. \
- As is policy we've taken a portion of the station's funds to offset the overall cost.", null, null, null, "Nanotrasen Asset Protection")
-
- addtimer(CALLBACK(src, PROC_REF(finish_enter)), 3 SECONDS)
-
-/// Called when person is finished shoving in, awards ransome money
-/datum/syndicate_contract/proc/finish_enter()
- // Pay contractor their portion of ransom
- if(status != CONTRACT_STATUS_COMPLETE)
- return
-
- var/obj/item/card/id/owner_id = contract.owner.current?.get_idcard(TRUE)
-
- if(owner_id?.registered_account.account_id) // why do we check for account id? because apparently unset agent IDs have existing bank accounts that can't be accessed. this is suboptimal
- owner_id.registered_account.adjust_money(ransom * CONTRACTOR_RANSOM_CUT)
-
- owner_id.registered_account.bank_card_talk("We've processed the ransom, agent. Here's your cut - your balance is now \
- [owner_id.registered_account.account_balance] credits.", TRUE)
- else
- to_chat(contract.owner.current, span_notice("A briefcase appears at your feet!"))
- var/obj/item/storage/briefcase/secure/case = new(get_turf(contract.owner.current))
- for(var/i in 1 to (round((ransom * CONTRACTOR_RANSOM_CUT) / 1000))) // Gets slightly less/more but whatever
- new /obj/item/stack/spacecash/c1000(case)
-
-/// They're off to holding - handle the return timer and give some text about what's going on.
-/datum/syndicate_contract/proc/handle_victim_experience(mob/living/target)
- // Ship 'em back - dead or alive, 4 minutes wait.
- // Even if they weren't the target, we're still treating them the same.
- addtimer(CALLBACK(src, PROC_REF(return_victim), target), 4 MINUTES)
-
- if (target.stat == DEAD)
- return
- // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a
- // method of healing them, consequence free, to a reasonable amount of health.
- victim_stage_one(target)
-
-/// Adds omnizine and begins the victim handling
-/datum/syndicate_contract/proc/victim_stage_one(mob/living/target)
- target.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20)
-
- target.flash_act()
- target.adjust_confusion(10 SECONDS)
- target.set_eye_blur_if_lower(10 SECONDS)
- to_chat(target, span_warning("You feel strange..."))
- addtimer(CALLBACK(src, PROC_REF(victim_stage_two), target), 6 SECONDS)
-
-/// Continued victim handling
-/datum/syndicate_contract/proc/victim_stage_two(mob/living/target)
- var/list/parts_to_fuck_up = list(
- BODY_ZONE_L_ARM,
- BODY_ZONE_R_ARM,
- BODY_ZONE_L_LEG,
- BODY_ZONE_R_LEG,
- )
-
- to_chat(target, span_warning("That pod did something to you..."))
- target.set_dizzy(70 SECONDS)
-
- for(var/i in 1 to 2)
- var/obj/item/bodypart/limb = target.get_bodypart(pick_n_take(parts_to_fuck_up))
- var/min_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_SEVERE, return_value_if_no_wound = 40)
- var/max_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_CRITICAL, return_value_if_no_wound = 60)
- limb.receive_damage(brute = WOUND_MINIMUM_DAMAGE, wound_bonus = rand(min_wound, max_wound))
- target.update_damage_overlays()
-
- addtimer(CALLBACK(src, PROC_REF(victim_stage_three), target), 6 SECONDS)
-
-/// Continued victim handling, flashes them as well
-/datum/syndicate_contract/proc/victim_stage_three(mob/living/target)
- to_chat(target, span_warning("Your head pounds... It feels like it's going to burst out your skull!"))
- target.flash_act()
- target.adjust_confusion(20 SECONDS)
- target.set_eye_blur_if_lower(6 SECONDS)
- addtimer(CALLBACK(src, PROC_REF(victim_stage_four), target), 3 SECONDS)
-
-/// Continued victim handling
-/datum/syndicate_contract/proc/victim_stage_four(mob/living/target)
- to_chat(target, span_warning("Your head pounds..."))
-
- if(iscarbon(target))
- var/mob/living/carbon/carbon_target = target
- switch(rand(1, 100))
- if(1 to 45)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
-
- if(46 to 73)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
-
- if(74 to 94)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
-
- if(75 to 100)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
- carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
-
- addtimer(CALLBACK(src, PROC_REF(victim_stage_five), target), 10 SECONDS)
-
-/// Continued victim handling, some unconsciousness
-/datum/syndicate_contract/proc/victim_stage_five(mob/living/target)
- target.flash_act()
- target.Unconscious(200)
- to_chat(target, span_hypnophrase(span_reallybig("A million voices echo in your head... \"Your mind held many valuable secrets - \
- we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \
- so it's only a matter of time before we ship you back...\" ")))
- target.set_eye_blur_if_lower(20 SECONDS)
- target.set_dizzy_if_lower(30 SECONDS)
- target.adjust_confusion(20 SECONDS)
-
-/// We're returning the victim
-/datum/syndicate_contract/proc/return_victim(mob/living/target)
- var/list/possible_drop_loc = list()
-
- for(var/turf/possible_drop in contract.dropoff.contents)
- if(is_safe_turf(possible_drop))
- possible_drop_loc += possible_drop
- if(!length(possible_drop_loc)) //Prioritize safe tiles first, then unsafe
- for(var/turf/open/possible_unsafe_drop in contract.dropoff.contents)
- possible_drop_loc += possible_unsafe_drop
-
- if (length(possible_drop_loc))
- var/pod_rand_loc = rand(1, length(possible_drop_loc))
-
- var/obj/structure/closet/supplypod/return_pod = new()
- return_pod.bluespace = TRUE
- return_pod.explosionSize = list(0,0,0,0)
- return_pod.style = STYLE_SYNDICATE
-
- do_sparks(8, FALSE, target)
- target.visible_message(span_notice("[target] vanishes..."))
-
- for(var/obj/item/target_item as anything in target)
- if(ishuman(target))
- var/mob/living/carbon/human/human_target = target
- if(target_item == human_target.w_uniform)
- continue //So all they're left with are shoes and uniform.
- if(target_item == human_target.shoes)
- continue
- target.dropItemToGround(target_item)
-
- for(var/obj/item/target_item as anything in victim_belongings)
- target_item.forceMove(return_pod)
-
- target.forceMove(return_pod)
-
- target.flash_act()
- target.set_eye_blur_if_lower(60 SECONDS)
- target.set_dizzy_if_lower(70 SECONDS)
- target.adjust_confusion(20 SECONDS)
-
- new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod)
- else
- to_chat(target, span_reallybig(span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \
- be able to handle our pod... You will die here instead.\" ")))
- if(!isliving(target))
- return
- var/mob/living/unlucky_fellow = target
- unlucky_fellow.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS)
- unlucky_fellow.death()
-
-#undef RANSOM_LOWER
-#undef RANSOM_UPPER
-#undef CONTRACTOR_RANSOM_CUT
diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm b/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm
deleted file mode 100644
index 5346d412702..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/contractor_datum.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/// End-round generation proc
-/datum/opposing_force/proc/contractor_round_end()
- var/result = ""
- var/total_spent_rep = 0
-
- var/completed_contracts = contractor_hub.contracts_completed
- var/tc_total = contractor_hub.contract_paid_out + contractor_hub.contract_TC_to_redeem
-
- var/contractor_item_icons = "" // Icons of purchases
- var/contractor_support_unit = "" // Set if they had a support unit - and shows appended to their contracts completed
-
- // Get all the icons/total cost for all our items bought
- for (var/datum/contractor_item/contractor_purchase in contractor_hub.purchased_items)
- contractor_item_icons += "\[ [contractor_purchase.name] - [contractor_purchase.cost] Rep [contractor_purchase.desc] \] "
-
- total_spent_rep += contractor_purchase.cost
-
- // Special case for reinforcements, we want to show their ckey and name on round end.
- if (istype(contractor_purchase, /datum/contractor_item/contractor_partner))
- var/datum/contractor_item/contractor_partner/partner = contractor_purchase
- var/mob/living/carbon/human/partner_mob = partner.partner_mind.current
- contractor_support_unit += "[partner_mob.name] was [partner_mob.p_their()] contractor support unit."
-
- if (length(contractor_hub.purchased_items))
- result += " (used [total_spent_rep] Rep) "
- result += contractor_item_icons
- result += " "
- if (completed_contracts > 0)
- var/plural_check = "contract[completed_contracts > 1 ? "s" : ""]"
-
- result += "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of \
- [span_greentext("[tc_total] TC")]![contractor_support_unit] "
-
- return result
diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm b/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm
deleted file mode 100644
index 130cd3d2a4b..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/contractor_hub.dm
+++ /dev/null
@@ -1,92 +0,0 @@
-#define LOWEST_TC 30
-
-/datum/contractor_hub
- /// How much reputation the contractor has
- var/contract_rep = 0
- /// What contractor items can be purchased
- var/list/hub_items = list()
- /// List of what the contractor's purchased
- var/list/purchased_items = list()
- /// Static of contractor_item subtypes
- var/static/list/contractor_items = typecacheof(/datum/contractor_item, ignore_root_path = TRUE)
- /// Reference to the current contract datum
- var/datum/syndicate_contract/current_contract
- /// List of all contract datums the contractor has available
- var/list/datum/syndicate_contract/assigned_contracts = list()
- /// used as a blacklist to make sure we're not assigning targets already assigned
- var/list/assigned_targets = list()
- /// NUmber of how many contracts you've done
- var/contracts_completed = 0
- /// How many TC you've paid out in contracts
- var/contract_paid_out = 0
- /// Amount of TC that has yet to be redeemed
- var/contract_TC_to_redeem = 0
- /// Current index number for contract IDs
- var/start_index = 1
-
-/// Generates a list of all valid hub items to set for purchase
-/datum/contractor_hub/proc/create_hub_items()
- for(var/path in contractor_items)
- var/datum/contractor_item/contractor_item = new path
-
- hub_items.Add(contractor_item)
-
-/// Create initial list of contracts
-/datum/contractor_hub/proc/create_contracts(datum/mind/owner)
-
- // 6 initial contracts
- var/list/to_generate = list(
- CONTRACT_PAYOUT_LARGE,
- CONTRACT_PAYOUT_MEDIUM,
- CONTRACT_PAYOUT_MEDIUM,
- CONTRACT_PAYOUT_SMALL,
- CONTRACT_PAYOUT_SMALL,
- CONTRACT_PAYOUT_SMALL
- )
-
- //What the fuck
- if(length(to_generate) > length(GLOB.manifest.locked))
- to_generate.Cut(1, length(GLOB.manifest.locked))
-
- var/total = 0
- var/lowest_paying_sum = 0
- var/datum/syndicate_contract/lowest_paying_contract
-
- // Randomise order, so we don't have contracts always in payout order.
- to_generate = shuffle(to_generate)
-
- // Support contract generation happening multiple times
- if (length(assigned_contracts))
- start_index = length(assigned_contracts) + 1
-
- // Generate contracts, and find the lowest paying.
- for(var/contract_gen in 1 to length(to_generate))
- var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, to_generate[contract_gen])
- var/contract_payout_total = contract_to_add.contract.payout + contract_to_add.contract.payout_bonus
-
- assigned_targets.Add(contract_to_add.contract.target)
-
- if (!lowest_paying_contract || (contract_payout_total < lowest_paying_sum))
- lowest_paying_sum = contract_payout_total
- lowest_paying_contract = contract_to_add
-
- total += contract_payout_total
- contract_to_add.id = start_index
- assigned_contracts.Add(contract_to_add)
-
- start_index++
-
- // If the threshold for TC payouts isn't reached, boost the lowest paying contract
- if ((total < LOWEST_TC) && lowest_paying_contract)
- lowest_paying_contract.contract.payout_bonus += (LOWEST_TC - total)
-
-#undef LOWEST_TC
-
-/datum/contractor_hub/proc/create_single_contract(datum/mind/owner, contract_payout_tier)
- var/datum/syndicate_contract/contract_to_add = new(owner, assigned_targets, contract_payout_tier)
-
- assigned_targets.Add(contract_to_add.contract.target)
-
- contract_to_add.id = start_index
- assigned_contracts.Add(contract_to_add)
- start_index++
diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm b/modular_skyrat/modules/contractor/code/datums/contractor_items.dm
deleted file mode 100644
index 80013aef23e..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm
+++ /dev/null
@@ -1,220 +0,0 @@
-/datum/contractor_item
- /// Name of the item datum
- var/name
- /// Description of the item datum
- var/desc
- /// Item path to spawn, no item path means you need to override `handle_purchase()`
- var/item
- /// fontawesome icon to use inside the hub - https://fontawesome.com/icons/
- var/item_icon = "broadcast-tower"
- /// Any number above 0 for how many times it can be bought in a round for a single traitor. -1 is unlimited.
- var/limited = -1
- /// Cost of the item in contract rep.
- var/cost
-
-/// Subtract cost, and spawn if it's an item.
-/datum/contractor_item/proc/handle_purchase(datum/contractor_hub/hub, mob/living/user)
-
- if(hub.contract_rep >= cost)
- hub.contract_rep -= cost
- else
- return FALSE
-
- if(limited >= 1)
- limited -= 1
- else
- return FALSE
-
- hub.purchased_items.Add(src)
-
- user.playsound_local(user, 'sound/machines/uplinkpurchase.ogg', 100)
-
- if(item)
- var/atom/item_to_create = new item(get_turf(user))
- if(user.put_in_hands(item_to_create))
- to_chat(user, span_notice("Your purchase materializes into your hands!"))
- else
- to_chat(user, span_notice("Your purchase materializes onto the floor."))
-
- return TRUE
-
-/datum/contractor_item/contract_reroll
- name = "Contract Reroll"
- desc = "Request a reroll of your current contract list. Will generate a new target, payment, and dropoff for the contracts you currently have available."
- item_icon = "dice"
- limited = 3
- cost = 0
-
-/datum/contractor_item/contract_reroll/handle_purchase(datum/contractor_hub/hub)
- . = ..()
-
- if(!(.))
- return
- // We're not regenerating already completed/aborted/extracting contracts, but we don't want to repeat their targets.
- var/list/new_target_list = list()
- for(var/datum/syndicate_contract/contract_check as anything in hub.assigned_contracts)
- if (contract_check.status != CONTRACT_STATUS_ACTIVE && contract_check.status != CONTRACT_STATUS_INACTIVE)
- if (contract_check.contract.target)
- new_target_list.Add(contract_check.contract.target)
- continue
-
- // Reroll contracts without duplicates
- for(var/datum/syndicate_contract/rerolling_contract as anything in hub.assigned_contracts)
- if (rerolling_contract.status != CONTRACT_STATUS_ACTIVE && rerolling_contract.status != CONTRACT_STATUS_INACTIVE)
- continue
-
- rerolling_contract.generate(new_target_list)
- new_target_list.Add(rerolling_contract.contract.target)
-
- // Set our target list with the new set we've generated.
- hub.assigned_targets = new_target_list
-
-/datum/contractor_item/contractor_pinpointer
- name = "Contractor Pinpointer"
- desc = "A pinpointer that finds targets even without active suit sensors. Due to taking advantage of an exploit within the system, it can't pinpoint to the same accuracy as the traditional models. Becomes permanently locked to the user that first activates it."
- item = /obj/item/pinpointer/crew/contractor
- item_icon = "search-location"
- limited = 2
- cost = 1
-
-/datum/contractor_item/fulton_extraction_kit
- name = "Fulton Extraction Kit"
- desc = "For getting your target across the station to those difficult dropoffs. Place the beacon somewhere secure, and link the pack. Activating the pack on your target will send them over to the beacon - make sure they're not just going to run away though!"
- item = /obj/item/storage/box/contractor/fulton_extraction
- item_icon = "parachute-box"
- limited = 1
- cost = 1
-
-/datum/contractor_item/contractor_partner
- name = "Reinforcements"
- desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, we'll send them down to assist you immediately. If no units are free, we give a full refund."
- item_icon = "user-friends"
- limited = 1
- cost = 2
- var/datum/mind/partner_mind = null
-
-/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user)
- . = ..()
-
- if(!.)
- return
- to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents..."))
-
- var/list/mob/dead/observer/candidates = poll_ghost_candidates("Do you want to play as the Contractor Support Unit for [user.real_name]?", ROLE_PAI, FALSE, 100, POLL_IGNORE_CONTRACTOR_SUPPORT)
-
- if(LAZYLEN(candidates))
- var/mob/dead/observer/picked_obs = pick(candidates)
- spawn_contractor_partner(user, picked_obs.key)
- else
- to_chat(user, span_notice("No available agents at this time, please try again later."))
-
- // refund and add the limit back.
- limited += 1
- hub.contract_rep += cost
- hub.purchased_items -= src
-
-/datum/contractor_item/contractor_partner/proc/spawn_contractor_partner(mob/living/user, key)
- var/mob/living/carbon/human/partner = new()
- var/datum/outfit/contractor_partner/partner_outfit = new()
-
- partner_outfit.equip(partner)
-
- var/obj/structure/closet/supplypod/arrival_pod = new(null, STYLE_SYNDICATE)
- arrival_pod.explosionSize = list(0,0,0,1)
- arrival_pod.bluespace = TRUE
-
- var/turf/free_location = find_obstruction_free_location(2, user)
-
- // We really want to send them - if we can't find a nice location just land it on top of them.
- if (!free_location)
- free_location = get_turf(user)
-
- partner.forceMove(arrival_pod)
- partner.ckey = key
-
- /// We give a reference to the mind that'll be the support unit
- partner_mind = partner.mind
- partner_mind.make_contractor_support()
-
- to_chat(partner_mind.current, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]")
- to_chat(partner_mind.current, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]\n\n")
-
- new /obj/effect/pod_landingzone(free_location, arrival_pod)
-
-/datum/contractor_item/blackout
- name = "Blackout"
- desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration."
- item_icon = "bolt"
- limited = 2
- cost = 2
-
-/datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub)
- . = ..()
-
- if(!.)
- return
- power_fail(35, 50)
- priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", ANNOUNCER_POWEROFF)
-
-/datum/contractor_item/comms_blackout
- name = "Comms Outage"
- desc = "Request Syndicate Command to disable station Telecommunications. Disables telecommunications across the station for a medium duration."
- item_icon = "phone-slash"
- limited = 2
- cost = 2
-
-/datum/contractor_item/comms_blackout/handle_purchase(datum/contractor_hub/hub)
- . = ..()
-
- if(!.)
- return
- var/datum/round_event_control/event = locate(/datum/round_event_control/communications_blackout) in SSevents.control
- event.run_event()
-
-/datum/contractor_item/mod_baton_holster
- name = "Baton Holster Module"
- desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped."
- item = /obj/item/mod/module/baton_holster
- item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting
- limited = 1
- cost = 2
-
-/datum/contractor_item/baton_upgrade_cuff
- name = "Baton Cuff Upgrade"
- desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually."
- item = /obj/item/baton_upgrade/cuff
- item_icon = "bacon" //ditto
- limited = 1
- cost = 1
-
-/datum/contractor_item/baton_upgrade_mute
- name = "Baton Mute Upgrade"
- desc = "A relatively new advancement in completely proprietary baton technology, this baton upgrade will mute anyone hit for ten seconds, maximizing at twenty seconds."
- item = /obj/item/baton_upgrade/mute
- item_icon = "comment-slash"
- limited = 1
- cost = 2
-
-/datum/contractor_item/baton_upgrade_focus
- name = "Baton Focus Upgrade"
- desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract."
- item = /obj/item/baton_upgrade/focus
- item_icon = "eye"
- limited = 1
- cost = 2
-
-/datum/contractor_item/mod_magnetic_suit
- name = "Magnetic Deployment Module"
- desc = "A module that utilizes magnets to largely reduce the time needed to deploy and retract your MODsuit."
- item = /obj/item/mod/module/springlock/contractor
- item_icon = "magnet"
- limited = 1
- cost = 2
-
-/datum/contractor_item/mod_scorpion_hook
- name = "SCORPION Hook Module"
- desc = "A module that allows you to launch a hardlight hook from your MODsuit, pulling a target into range of your baton."
- item = /obj/item/mod/module/scorpion_hook
- item_icon = "arrow-left" //replace if fontawesome gets an actual hook icon
- limited = 1
- cost = 3
diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm b/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm
deleted file mode 100644
index 02f5790d5e8..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm
+++ /dev/null
@@ -1,216 +0,0 @@
-/datum/computer_file/program/contract_uplink
- filename = "contractor uplink"
- filedesc = "Syndicate Contractor Uplink"
- category = PROGRAM_CATEGORY_MISC
- program_icon_state = "assign"
- extended_desc = "A standard, Syndicate issued system for handling important contracts while on the field."
- size = 10
- requires_ntnet = FALSE
- available_on_ntnet = FALSE
- undeletable = TRUE
- tgui_id = "SyndContractor"
- program_icon = "tasks"
- /// Error message if there is one
- var/error = ""
- /// If the info screen is displayed or not
- var/info_screen = TRUE
- /// If the contract uplink's been assigned to a person yet
- var/assigned = FALSE
- /// If this is the first opening of the tablet
- var/first_load = TRUE
-
-/datum/computer_file/program/contract_uplink/on_start(mob/living/user)
- . = ..(user)
-
-/datum/computer_file/program/contract_uplink/ui_act(action, params)
- . = ..()
- if(.)
- return
-
- var/mob/living/user = usr
- var/obj/item/modular_computer/pda/contractor/uplink_computer = computer
-
- if(!istype(uplink_computer))
- return
-
- switch(action)
- if("PRG_contract-accept")
- var/contract_id = text2num(params["contract_id"])
-
- // Set as the active contract
- uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ACTIVE
- uplink_computer.opfor_data.contractor_hub.current_contract = uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id]
-
- program_icon_state = "single_contract"
- return TRUE
- if("PRG_login")
- if(!user.mind.opposing_force)
- var/datum/opposing_force/opposing_force = new(user.mind)
- user.mind.opposing_force = opposing_force
- SSopposing_force.new_opfor(opposing_force)
- var/datum/opposing_force/opfor_data = user.mind.opposing_force
-
- if (!opfor_data) // Just in case
- return FALSE
- // Only play greet sound, and handle contractor hub when assigning for the first time.
- if (!opfor_data.contractor_hub)
- user.playsound_local(user, 'sound/effects/contractstartup.ogg', 100, FALSE)
- opfor_data.contractor_hub = new
- opfor_data.contractor_hub.create_hub_items()
-
- // Stops any topic exploits such as logging in multiple times on a single system.
- if (!assigned)
- opfor_data.contractor_hub.create_contracts(opfor_data.mind_reference)
-
- uplink_computer.opfor_data = opfor_data
-
- program_icon_state = "contracts"
- assigned = TRUE
- return TRUE
- if("PRG_call_extraction")
- if (uplink_computer.opfor_data.contractor_hub.current_contract.status != CONTRACT_STATUS_EXTRACTING)
- if (uplink_computer.opfor_data.contractor_hub.current_contract.handle_extraction(user))
- user.playsound_local(user, 'modular_skyrat/modules/contractor/sound/confirmdropoff.ogg', 100, TRUE)
- uplink_computer.opfor_data.contractor_hub.current_contract.status = CONTRACT_STATUS_EXTRACTING
-
- program_icon_state = "extracted"
- else
- user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
- error = "Either both you or your target aren't at the dropoff location, or the pod hasn't got a valid place to land. Clear space, or make sure you're both inside."
- else
- user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
- error = "Already extracting... Place the target into the pod. If the pod was destroyed, this contract is no longer possible."
-
- return TRUE
- if("PRG_contract_abort")
- var/contract_id = uplink_computer.opfor_data.contractor_hub.current_contract.id
-
- uplink_computer.opfor_data.contractor_hub.current_contract = null
- uplink_computer.opfor_data.contractor_hub.assigned_contracts[contract_id].status = CONTRACT_STATUS_ABORTED
-
- program_icon_state = "contracts"
-
- return TRUE
- if("PRG_redeem_TC")
- if (uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem)
- var/obj/item/stack/telecrystal/crystals = new /obj/item/stack/telecrystal(get_turf(user),
- uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.put_in_hands(crystals))
- to_chat(H, span_notice("Your payment materializes into your hands!"))
- else
- to_chat(user, span_notice("Your payment materializes onto the floor."))
-
- uplink_computer.opfor_data.contractor_hub.contract_paid_out += uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem
- uplink_computer.opfor_data.contractor_hub.contract_TC_to_redeem = 0
- return TRUE
- else
- user.playsound_local(user, 'sound/machines/uplinkerror.ogg', 50)
- return TRUE
- if ("PRG_clear_error")
- error = ""
- return TRUE
- if("PRG_set_first_load_finished")
- first_load = FALSE
- return TRUE
- if("PRG_toggle_info")
- info_screen = !info_screen
- return TRUE
- if ("buy_hub")
- if (uplink_computer.opfor_data.mind_reference.current == user)
- var/item = params["item"]
-
- for (var/datum/contractor_item/hub_item in uplink_computer.opfor_data.contractor_hub.hub_items)
- if (hub_item.name == item)
- hub_item.handle_purchase(uplink_computer.opfor_data.contractor_hub, user)
- else
- error = "Invalid user... You weren't recognised as the user of this system."
-
-/datum/computer_file/program/contract_uplink/ui_data(mob/user)
- var/list/data = list()
- var/screen_to_be = null
- var/obj/item/modular_computer/pda/contractor/uplink_computer = computer
-
- data["first_load"] = first_load
-
- if (uplink_computer?.opfor_data)
- var/datum/opposing_force/opfor_data = uplink_computer.opfor_data
- data += list()
-
- if (opfor_data.contractor_hub.current_contract)
- data["ongoing_contract"] = TRUE
- screen_to_be = "single_contract"
- if (opfor_data.contractor_hub.current_contract.status == CONTRACT_STATUS_EXTRACTING)
- data["extraction_enroute"] = TRUE
- screen_to_be = "extracted"
- else
- data["extraction_enroute"] = FALSE
- else
- data["ongoing_contract"] = FALSE
- data["extraction_enroute"] = FALSE
-
- data["logged_in"] = TRUE
- data["station_name"] = GLOB.station_name
- data["redeemable_tc"] = opfor_data.contractor_hub.contract_TC_to_redeem
- data["earned_tc"] = opfor_data.contractor_hub.contract_paid_out
- data["contracts_completed"] = opfor_data.contractor_hub.contracts_completed
- data["contract_rep"] = opfor_data.contractor_hub.contract_rep
-
- data["info_screen"] = info_screen
-
- data["error"] = error
-
- for (var/datum/contractor_item/hub_item in opfor_data.contractor_hub.hub_items)
- data["contractor_hub_items"] += list(list(
- "name" = hub_item.name,
- "desc" = hub_item.desc,
- "cost" = hub_item.cost,
- "limited" = hub_item.limited,
- "item_icon" = hub_item.item_icon
- ))
-
- for (var/datum/syndicate_contract/contract in opfor_data.contractor_hub.assigned_contracts)
- if(!contract.contract)
- stack_trace("Syndiate contract with null contract objective found in [opfor_data.mind_reference]'s contractor hub!")
- contract.status = CONTRACT_STATUS_ABORTED
- continue
-
- data["contracts"] += list(list(
- "target" = contract.contract.target,
- "target_rank" = contract.target_rank,
- "payout" = contract.contract.payout,
- "payout_bonus" = contract.contract.payout_bonus,
- "dropoff" = contract.contract.dropoff,
- "id" = contract.id,
- "status" = contract.status,
- "message" = contract.wanted_message
- ))
-
- var/direction
- if (opfor_data.contractor_hub.current_contract)
- var/turf/curr = get_turf(user)
- var/turf/dropoff_turf
- data["current_location"] = "[get_area_name(curr, TRUE)]"
-
- for (var/turf/content in opfor_data.contractor_hub.current_contract.contract.dropoff.contents)
- if (isturf(content))
- dropoff_turf = content
- break
-
- if(curr.z == dropoff_turf.z) //Direction calculations for same z-level only
- direction = uppertext(dir2text(get_dir(curr, dropoff_turf))) //Direction text (East, etc). Not as precise, but still helpful.
- if(get_area(user) == opfor_data.contractor_hub.current_contract.contract.dropoff)
- direction = "LOCATION CONFIRMED"
- else
- direction = "???"
-
- data["dropoff_direction"] = direction
-
- else
- data["logged_in"] = FALSE
-
- if(screen_to_be)
- program_icon_state = screen_to_be
- update_computer_icon()
- return data
diff --git a/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm b/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm
deleted file mode 100644
index c2886de801d..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/datum/outfit/contractor
- name = "Syndicate Contractor - Full Kit"
-
- glasses = /obj/item/clothing/glasses/night
- mask = /obj/item/clothing/mask/gas/syndicate
- back = /obj/item/mod/control/pre_equipped/contractor/upgraded
- r_pocket = /obj/item/tank/internals/emergency_oxygen/engi
- internals_slot = ITEM_SLOT_RPOCKET
- belt = /obj/item/storage/belt/military
-
- uniform = /obj/item/clothing/under/syndicate/coldres
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- ears = /obj/item/radio/headset/syndicate/alt
- l_pocket = /obj/item/modular_computer/pda/contractor
- id = /obj/item/card/id/advanced/chameleon
- backpack_contents = list(
- /obj/item/storage/box/survival/syndie,
- /obj/item/storage/box/syndicate/contract_kit/midround,
- /obj/item/knife/combat/survival,
- /obj/item/pinpointer/crew/contractor,
- )
-
- implants = list(
- /obj/item/implant/uplink,
- )
-
- id_trim = /datum/id_trim/chameleon/contractor
-
-/datum/outfit/contractor_preview
- name = "Syndicate Contractor (Preview only)"
-
- back = /obj/item/mod/control/pre_equipped/empty/contractor
- uniform = /obj/item/clothing/under/syndicate
- glasses = /obj/item/clothing/glasses/night
-
-/datum/outfit/contractor/upgraded
- name = "Syndicate Contractor (Upgraded)"
- back = /obj/item/mod/control/pre_equipped/contractor/upgraded/adminbus
diff --git a/modular_skyrat/modules/contractor/code/datums/mind_datum.dm b/modular_skyrat/modules/contractor/code/datums/mind_datum.dm
deleted file mode 100644
index 91cb9a5ac69..00000000000
--- a/modular_skyrat/modules/contractor/code/datums/mind_datum.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/mind/proc/make_contractor_support()
- if(has_antag_datum(/datum/antagonist/traitor/contractor_support))
- return
- add_antag_datum(/datum/antagonist/traitor/contractor_support)
diff --git a/modular_skyrat/modules/contractor/code/items/boxes.dm b/modular_skyrat/modules/contractor/code/items/boxes.dm
deleted file mode 100644
index 99bfa6600fb..00000000000
--- a/modular_skyrat/modules/contractor/code/items/boxes.dm
+++ /dev/null
@@ -1,114 +0,0 @@
-#define SMALL_ITEM_AMOUNT 3
-
-/obj/item/storage/box/syndicate/contract_kit
- name = "contract kit"
- special_desc = "Supplied to Syndicate contractors."
- special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
- icon_state = "syndiebox"
- illustration = "writing_syndie"
- var/list/item_list = list(
- /obj/item/storage/backpack/duffelbag/syndie/x4,
- /obj/item/storage/box/syndie_kit/throwing_weapons,
- /obj/item/gun/syringe/syndicate,
- /obj/item/pen/edagger,
- /obj/item/pen/sleepy,
- /obj/item/flashlight/emp,
- /obj/item/reagent_containers/syringe/mulligan,
- /obj/item/clothing/shoes/chameleon/noslip,
- /obj/item/storage/medkit/tactical,
- /obj/item/encryptionkey/syndicate,
- /obj/item/clothing/glasses/thermal/syndi,
- /obj/item/slimepotion/slime/sentience/nuclear,
- /obj/item/storage/box/syndie_kit/imp_radio,
- /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot,
- /obj/item/reagent_containers/hypospray/medipen/stimulants,
- /obj/item/storage/box/syndie_kit/imp_freedom,
- /obj/item/crowbar/power/syndicate,
- /obj/item/clothing/gloves/tackler/combat/insulated,
- /obj/item/storage/box/syndie_kit/emp,
- /obj/item/radio/headset/chameleon/advanced,
- /obj/item/shield/energy,
- /obj/item/healthanalyzer/rad_laser
- )
-
-/obj/item/storage/box/syndicate/contract_kit/PopulateContents()
- new /obj/item/modular_computer/pda/contractor(src)
- new /obj/item/storage/box/syndicate/contractor_loadout(src)
- new /obj/item/melee/baton/telescopic/contractor_baton(src)
-
- // All about 4 TC or less - some nukeops only items, but fit nicely to the theme.
- for(var/iteration in 1 to SMALL_ITEM_AMOUNT)
- var/obj/item/small_item = pick_n_take(item_list)
- new small_item(src)
-
- // Paper guide
- new /obj/item/paper/contractor_guide(src)
-
-/obj/item/storage/box/syndicate/contractor_loadout
- name = "standard loadout"
- special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
- special_desc = "Supplied to Syndicate contractors, providing their specialised MODSuit and chameleon uniform."
- icon_state = "syndiebox"
- illustration = "writing_syndie"
-
-/obj/item/storage/box/syndicate/contractor_loadout/PopulateContents()
- new /obj/item/mod/control/pre_equipped/contractor(src)
- new /obj/item/clothing/under/chameleon(src)
- new /obj/item/clothing/mask/chameleon(src)
- new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
- new /obj/item/card/id/advanced/chameleon(src)
- new /obj/item/lighter(src)
- new /obj/item/uplink/old_radio(src)
- new /obj/item/jammer(src)
-
-/obj/item/storage/box/contractor/fulton_extraction
- name = "fulton extraction kit"
- icon_state = "syndiebox"
- illustration = "writing_syndie"
-
-/obj/item/storage/box/contractor/fulton_extraction/PopulateContents()
- new /obj/item/extraction_pack/contractor(src)
- new /obj/item/fulton_core(src)
-
-/obj/item/storage/box/syndicate/contract_kit/midround
- name = "contract kit"
- special_desc = "Supplied to Syndicate contractors."
- special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
- icon_state = "syndiebox"
- illustration = "writing_syndie"
- item_list = list(
- /obj/item/storage/backpack/duffelbag/syndie/x4,
- /obj/item/storage/box/syndie_kit/throwing_weapons,
- /obj/item/gun/syringe/syndicate,
- /obj/item/pen/edagger,
- /obj/item/pen/sleepy,
- /obj/item/flashlight/emp,
- /obj/item/reagent_containers/syringe/mulligan,
- /obj/item/storage/medkit/tactical,
- /obj/item/clothing/glasses/thermal/syndi,
- /obj/item/slimepotion/slime/sentience/nuclear,
- /obj/item/storage/box/syndie_kit/imp_radio,
- /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot,
- /obj/item/reagent_containers/hypospray/medipen/stimulants,
- /obj/item/storage/box/syndie_kit/imp_freedom,
- /obj/item/crowbar/power/syndicate,
- /obj/item/clothing/gloves/tackler/combat/insulated,
- /obj/item/storage/box/syndie_kit/emp,
- /obj/item/shield/energy,
- /obj/item/healthanalyzer/rad_laser
- )
-
-/obj/item/storage/box/syndicate/contract_kit/midround/PopulateContents()
- // All about 4 TC or less - some nukeops only items, but fit nicely to the theme.
- for(var/iteration in 1 to SMALL_ITEM_AMOUNT)
- var/obj/item/small_item = pick_n_take(item_list)
- new small_item(src)
-
- // Paper guide
- new /obj/item/paper/contractor_guide/midround(src)
- new /obj/item/reagent_containers/hypospray/medipen/atropine(src)
- new /obj/item/jammer(src)
- new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
- new /obj/item/lighter(src)
-
-#undef SMALL_ITEM_AMOUNT
diff --git a/modular_skyrat/modules/contractor/code/items/misc.dm b/modular_skyrat/modules/contractor/code/items/misc.dm
deleted file mode 100644
index abadf28d291..00000000000
--- a/modular_skyrat/modules/contractor/code/items/misc.dm
+++ /dev/null
@@ -1,111 +0,0 @@
-/obj/item/paper/contractor_guide
- name = "Contractor Guide"
-
-/obj/item/paper/contractor_guide/Initialize(mapload)
- default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,
- this kit will provide you contracts to take on for TC payments.
-
- You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed,
- but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed
- to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
-
- Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your
- targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.
-
- The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,
- with two Rep being provided each time you complete a contract.
-
- Using the tablet
-
- Open the Syndicate Contract Uplink program.
- Here, you can accept a contract, and redeem your TC payments from completed contracts.
- The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the
- other number regardless of if they were alive or dead.
- Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
- inside the pod.
-
-
- Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it
- unavailable to take on again.
- The tablet can also be recharged at any cell charger.
- Extracting
-
- Make sure both yourself and your target are at the dropoff.
- Call the extraction, and stand back from the drop point.
- If it fails, make sure your target is inside, and there's a free space for the pod to land.
- Grab your target, and drag them into the pod.
-
- Ransoms
- We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back
- from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever
- ID card you have equipped, on top of the TC payment we give.
-
- Good luck agent. You can burn this document with the supplied lighter.
"}
-
- return ..()
-
-/obj/item/pinpointer/crew/contractor
- name = "contractor pinpointer"
- desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate."
- icon_state = "pinpointer_syndicate"
- worn_icon_state = "pinpointer_black"
- minimum_range = 15
- has_owner = TRUE
- ignore_suit_sensor_level = TRUE
-
-/obj/item/extraction_pack/contractor
- name = "black fulton extraction pack"
- icon = 'modular_skyrat/modules/contractor/icons/fulton.dmi'
- can_use_indoors = TRUE
- special_desc_requirement = EXAMINE_CHECK_CONTRACTOR
- special_desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Syndicate Contractors."
-
-
-/obj/item/paper/contractor_guide/midround
- name = "Contractor Guide"
-
-/obj/item/paper/contractor_guide/midround/Initialize(mapload)
- default_raw_text = {"Welcome agent, congratulations on successfully getting in range of the station.
-
- You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed,
- but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed
- to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.
-
- Your standard issue contractor baton can be found in the baton holster MODSuit module, it hits harder than the ones you might be used to,
- and will likely be your go to weapon for kidnapping your targets.The three additional items have been randomly selected from what we had available.
- We hope they're useful to you for your mission.
-
- The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,
- with two Rep being provided each time you complete a contract.
-
- You've also been provided with a medipen of atropine, to prevent your implanted microbomb going off if it would be more tactically sound for your
- body to stay intact. If circumstances change, you are still able to detonate your microbomb post-mortem.
-
- Using the tablet
-
- Open the Syndicate Contract Uplink program.
- Here, you can accept a contract, and redeem your TC payments from completed contracts.
- The payment number shown in brackets is the bonus you'll receive when bringing your target alive . You receive the
- other number regardless of if they were alive or dead.
- Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
- inside the pod.
-
-
- Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it
- unavailable to take on again.
- The tablet can also be recharged at any cell charger.
- Extracting
-
- Make sure both yourself and your target are at the dropoff.
- Call the extraction, and stand back from the drop point.
- If it fails, make sure your target is inside, and there's a free space for the pod to land.
- Grab your target, and drag them into the pod.
-
- Ransoms
- We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back
- from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever
- ID card you have equipped, on top of the TC payment we give.
-
- Good luck agent. You can burn this document with the supplied lighter.
"}
-
- return ..()
diff --git a/modular_skyrat/modules/cortical_borer/code/status_effects.dm b/modular_skyrat/modules/cortical_borer/code/status_effects.dm
deleted file mode 100644
index 8a6c70bda27..00000000000
--- a/modular_skyrat/modules/cortical_borer/code/status_effects.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/datum/status_effect/borer_sugar
- id = "borer_sugar"
- tick_interval = -1
- status_type = STATUS_EFFECT_UNIQUE
- alert_type = /atom/movable/screen/alert/status_effect/borer_sugar
-
-/atom/movable/screen/alert/status_effect/borer_sugar
- name = "Sugar Dampening"
- desc = "Your powers are diminished while sugar is in you or your host!"
- icon = 'modular_skyrat/modules/cortical_borer/icons/actions.dmi'
- icon_state = "borer_sugar"
diff --git a/modular_skyrat/modules/curatorbundle/Mushy.dm b/modular_skyrat/modules/curatorbundle/Mushy.dm
deleted file mode 100644
index 25c187675af..00000000000
--- a/modular_skyrat/modules/curatorbundle/Mushy.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/clothing/head/mush_helmet
- name = "mush cap"
- desc = "A mushroom cap, this one also doubles as an umbrella!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
- icon_state = "mush_cap"
- worn_icon_state = "mush_cap"
- greyscale_config = /datum/greyscale_config/mushcap
- greyscale_config_worn = /datum/greyscale_config/mushcap/worn
- greyscale_colors = "#eb0c07"
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/suit/mush
- name = "mushroom suit"
- desc = "A mushroom suit, these can be sporadically seen being worn by the more fungal personalities."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "mush_male"
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- slowdown = 1
- clothing_flags = THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Male Mush" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "mush_male",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "mush_male"
- ),
- "Female Mush" = list(
- RESKIN_ICON = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi',
- RESKIN_ICON_STATE = "mush_female",
- RESKIN_WORN_ICON = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi',
- RESKIN_WORN_ICON_STATE = "mush_female"
- )
- )
-
-
-/obj/item/storage/box/hero/mushperson
- name = "Mushy The Mushperson - 2305"
- desc = "Can you remember?"
-
-/obj/item/storage/box/hero/mushperson/PopulateContents()
- new /obj/item/clothing/suit/mush(src)
- new /obj/item/clothing/head/mush_helmet(src)
- new /obj/item/mushpunch(src)
diff --git a/modular_skyrat/modules/customization/_globalvars/lists.dm b/modular_skyrat/modules/customization/_globalvars/lists.dm
deleted file mode 100644
index 86586e3f4d7..00000000000
--- a/modular_skyrat/modules/customization/_globalvars/lists.dm
+++ /dev/null
@@ -1,113 +0,0 @@
-//DO NOT CHANGE THOSE LISTS UNLESS YOU KNOW WHAT YOURE DOING (will mess savefiles)
-
-
-GLOBAL_LIST_INIT(breast_size_translation, list(
- "0" = BREAST_SIZE_FLATCHESTED,
- "1" = BREAST_SIZE_A,
- "2" = BREAST_SIZE_B,
- "3" = BREAST_SIZE_C,
- "4" = BREAST_SIZE_D,
- "5" = BREAST_SIZE_E,
- "6" = BREAST_SIZE_F,
- "7" = BREAST_SIZE_G,
- "8" = BREAST_SIZE_H,
- "9" = BREAST_SIZE_I,
- "10" = BREAST_SIZE_J,
- "11" = BREAST_SIZE_K,
- "12" = BREAST_SIZE_L,
- "13" = BREAST_SIZE_M,
- "14" = BREAST_SIZE_N,
- "15" = BREAST_SIZE_O,
- "16" = BREAST_SIZE_P,
- ))
-
-GLOBAL_LIST_INIT(breast_size_to_number, list(
- BREAST_SIZE_FLATCHESTED = 0,
- BREAST_SIZE_A = 1,
- BREAST_SIZE_B = 2,
- BREAST_SIZE_C = 3,
- BREAST_SIZE_D = 4,
- BREAST_SIZE_E = 5,
- BREAST_SIZE_F = 6,
- BREAST_SIZE_G = 7,
- BREAST_SIZE_H = 8,
- BREAST_SIZE_I = 9,
- BREAST_SIZE_J = 10,
- BREAST_SIZE_K = 11,
- BREAST_SIZE_L = 12,
- BREAST_SIZE_M = 13,
- BREAST_SIZE_N = 14,
- BREAST_SIZE_O = 15,
- BREAST_SIZE_P = 16,
- ))
-
-GLOBAL_LIST_INIT(balls_size_translation, list(
- "0" = "Small",
- "1" = "Average",
- "2" = "Big",
- "3" = "Enormous"
- ))
-
-GLOBAL_LIST_INIT(marking_zone_to_bitflag, list(
- BODY_ZONE_HEAD = HEAD,
- BODY_ZONE_CHEST = CHEST,
- BODY_ZONE_L_LEG = LEG_LEFT,
- BODY_ZONE_R_LEG = LEG_RIGHT,
- BODY_ZONE_L_ARM = ARM_LEFT,
- BODY_ZONE_R_ARM = ARM_RIGHT,
- BODY_ZONE_PRECISE_L_HAND = HAND_LEFT,
- BODY_ZONE_PRECISE_R_HAND = HAND_RIGHT
- ))
-
-GLOBAL_LIST_INIT(marking_zones, list(
- BODY_ZONE_HEAD,
- BODY_ZONE_CHEST,
- BODY_ZONE_L_LEG,
- BODY_ZONE_R_LEG,
- BODY_ZONE_L_ARM,
- BODY_ZONE_R_ARM,
- BODY_ZONE_PRECISE_L_HAND,
- BODY_ZONE_PRECISE_R_HAND,
- ))
-
-GLOBAL_LIST_INIT(preference_balls_sizes, list(
- "Small",
- "Average",
- "Big",
- "Enormous",
- ))
-
-GLOBAL_LIST_INIT(robotic_styles_list, list(
- "None" = "None",
- "Surplus" = 'icons/mob/augmentation/surplus_augments.dmi',
- "Cyborg" = 'icons/mob/augmentation/augments.dmi',
- "Engineering" = 'icons/mob/augmentation/augments_engineer.dmi',
- "Mining" = 'icons/mob/augmentation/augments_mining.dmi',
- "Security" = 'icons/mob/augmentation/augments_security.dmi',
- "Morpheus Cyberkinetics" = 'modular_skyrat/master_files/icons/mob/augmentation/mcgipc.dmi',
- "Bishop Cyberkinetics" = 'modular_skyrat/master_files/icons/mob/augmentation/bshipc.dmi',
- "Bishop Cyberkinetics 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/bs2ipc.dmi',
- "Hephaestus Industries" = 'modular_skyrat/master_files/icons/mob/augmentation/hsiipc.dmi',
- "Hephaestus Industries 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/hi2ipc.dmi',
- "Shellguard Munitions Standard Series" = 'modular_skyrat/master_files/icons/mob/augmentation/sgmipc.dmi',
- "Ward-Takahashi Manufacturing" = 'modular_skyrat/master_files/icons/mob/augmentation/wtmipc.dmi',
- "Xion Manufacturing Group" = 'modular_skyrat/master_files/icons/mob/augmentation/xmgipc.dmi',
- "Xion Manufacturing Group 2.0" = 'modular_skyrat/master_files/icons/mob/augmentation/xm2ipc.dmi',
- "Zeng-Hu Pharmaceuticals" = 'modular_skyrat/master_files/icons/mob/augmentation/zhpipc.dmi'
- ))
-
-//ghoul colors
-GLOBAL_LIST_INIT(color_list_ghoul, list( \
- "Necrotic Green" = "bfc474", \
- "Rotting Tan" = "c4af7c", \
- "Plutonium Blue" = "a5cfcc", \
- "Marked Red" = "f05b68" \
-))
-
-//Bras
-/// Stores all /datum/sprite_accessory/bra indexed by name.
-GLOBAL_LIST_EMPTY(bra_list)
-/// Stores only the bra names for male-compatible bras.
-GLOBAL_LIST_EMPTY(bra_m)
-/// Stores only the bra names for female-compatible bras.
-GLOBAL_LIST_EMPTY(bra_f)
diff --git a/modular_skyrat/modules/customization/_globalvars/names.dm b/modular_skyrat/modules/customization/_globalvars/names.dm
deleted file mode 100644
index 7f60f73606a..00000000000
--- a/modular_skyrat/modules/customization/_globalvars/names.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-GLOBAL_LIST_INIT(first_names_male_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/first_male_vulp.txt"))
-GLOBAL_LIST_INIT(first_names_female_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/first_female_vulp.txt"))
-GLOBAL_LIST_INIT(last_names_vulp, world.file2list("modular_skyrat/modules/customization/strings/names/last_vulp.txt"))
-GLOBAL_LIST_INIT(first_names_male_taj, world.file2list("modular_skyrat/modules/customization/strings/names/first_male_taj.txt"))
-GLOBAL_LIST_INIT(first_names_female_taj, world.file2list("modular_skyrat/modules/customization/strings/names/first_female_taj.txt"))
-GLOBAL_LIST_INIT(last_names_taj, world.file2list("modular_skyrat/modules/customization/strings/names/last_taj.txt"))
-GLOBAL_LIST_INIT(callsigns_nri, world.file2list("modular_skyrat/modules/customization/strings/names/callsigns_nri.txt"))
-GLOBAL_LIST_INIT(phonetic_alphabet_numbers, world.file2list("modular_skyrat/modules/customization/strings/names/phonetic_alphabet_numbers.txt"))
diff --git a/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm b/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm
deleted file mode 100644
index ca791924b2a..00000000000
--- a/modular_skyrat/modules/customization/game/objects/items/conversion_kits.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/obj/item/device/custom_kit
- name = "modification kit"
- desc = "A box of parts for modifying a certain object."
- icon = 'modular_skyrat/master_files/icons/donator/obj/kits.dmi'
- icon_state = "partskit"
- /// The base object to be converted.
- var/obj/item/from_obj
- /// The object to turn it into.
- var/obj/item/to_obj
-
-/obj/item/device/custom_kit/afterattack(obj/target_obj, mob/user, proximity_flag)
- if(!proximity_flag) //Gotta be adjacent to your target
- return
- if(isturf(target_obj)) //This shouldn't be needed, but apparently it throws runtimes otherwise.
- return
- else if(target_obj.type == from_obj) //Checks whether the item is eligible to be converted
- if(!pre_convert_check(target_obj, user))
- return FALSE
- var/obj/item/converted_item = new to_obj(get_turf(src))
- user.put_in_hands(converted_item)
- user.visible_message(span_notice("[user] modifies [target_obj] into [converted_item]."), span_notice("You modify [target_obj] into [converted_item]."))
- qdel(target_obj)
- qdel(src)
- else
- to_chat(user, span_warning("It looks like this kit won't work on [target_obj]..."))
-
-/// Override this if you have some condition you want fulfilled before allowing the conversion. Return TRUE to allow it to convert, return FALSE to prevent it.
-/obj/item/device/custom_kit/proc/pre_convert_check(obj/target_obj, mob/user)
- return TRUE
diff --git a/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm b/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm
deleted file mode 100644
index 77bae224399..00000000000
--- a/modular_skyrat/modules/customization/game/objects/items/devices/crutch.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/obj/item/cane/crutch
- name = "crutch"
- desc = "A crutch usually employed by those recovering from a leg injury."
- icon = 'modular_skyrat/master_files/icons/obj/staff.dmi'
- icon_state = "crutch"
- inhand_icon_state = "crutch"
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi'
- custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 6)
- attack_verb_continuous = list("bludgeons", "whacks", "thrashes")
- attack_verb_simple = list("bludgeon", "whack", "thrash")
-
diff --git a/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm b/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm
deleted file mode 100644
index 2f7719085fe..00000000000
--- a/modular_skyrat/modules/customization/game/objects/items/storage/belt.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-* Messenger belt bag
-*/
-
-/obj/item/storage/belt/mailbelt
- name = "messenger belt bag"
- desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is postal blue, perfect for standing out!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- icon_state = "mailbelt"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
- worn_icon_state = "mailbelt"
- equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
-
-/obj/item/storage/belt/mailbelt/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = 14
- atom_storage.numerical_stacking = TRUE
- atom_storage.set_holdable(list(
- /obj/item/mail,
- /obj/item/mail/envelope,
- /obj/item/paper
- ))
-
-/obj/item/storage/belt/mailbelt/white
- name = "white belt bag"
- desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is a pearly white."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- icon_state = "mailbelt_white"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
- worn_icon_state = "mailbelt_white"
- equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
-
-/obj/item/storage/belt/mailbelt/leather
- name = "leather belt bag"
- desc = "A small bag with a belt, worn around the waist. It's just big enough to hold a small stack of letters. This one is made out of a synthetic leather blend."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- icon_state = "mailbelt_leather"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
- worn_icon_state = "mailbelt_leather"
- equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
diff --git a/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm b/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm
deleted file mode 100644
index 8b3ac988d1f..00000000000
--- a/modular_skyrat/modules/customization/game/objects/items/storage/rings.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Ring Box
- */
-
-/obj/item/storage/fancy/ringbox
- name = "ring box"
- desc = "A tiny box covered in soft red felt made for holding rings."
- icon = 'modular_skyrat/master_files/icons/obj/ring.dmi'
- icon_state = "gold ringbox"
- base_icon_state = "gold ringbox"
- w_class = WEIGHT_CLASS_TINY
- spawn_type = /obj/item/clothing/gloves/ring
- spawn_count = 1
-
-/obj/item/storage/fancy/ringbox/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = 1
- atom_storage.can_hold = typecacheof(list(/obj/item/clothing/gloves/ring))
-
-/obj/item/storage/fancy/ringbox/diamond
- icon_state = "diamond ringbox"
- base_icon_state = "diamond ringbox"
- spawn_type = /obj/item/clothing/gloves/ring/diamond
-
-/obj/item/storage/fancy/ringbox/silver
- icon_state = "silver ringbox"
- base_icon_state = "silver ringbox"
- spawn_type = /obj/item/clothing/gloves/ring/silver
diff --git a/modular_skyrat/modules/customization/modules/clothing/accessories.dm b/modular_skyrat/modules/customization/modules/clothing/accessories.dm
deleted file mode 100644
index 53223af7956..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/accessories.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/clothing/accessory/skullcodpiece/armourless
- armor_type = /datum/armor/none
-
-/obj/item/clothing/accessory/talisman/armourless
- armor_type = /datum/armor/none
-
-/obj/item/clothing/accessory/skilt/armourless
- armor_type = /datum/armor/none
diff --git a/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm b/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm
deleted file mode 100644
index e613c8136f1..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/ears/ears.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/clothing/ears/headphones
- name = "headphones"
- desc = "Unce unce unce unce. Boop!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/ears.dmi'
- icon_state = "headphones"
- inhand_icon_state = "headphones"
- slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
- actions_types = list(/datum/action/item_action/toggle_headphones)
- var/headphones_on = FALSE
- custom_price = 60
-
-/obj/item/clothing/ears/headphones/Initialize(mapload)
- . = ..()
- update_icon()
- AddElement(/datum/element/update_icon_updates_onmob)
-
-/obj/item/clothing/ears/headphones/update_icon_state()
- . = ..()
- icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
- inhand_icon_state = "[initial(inhand_icon_state)]_[headphones_on? "on" : "off"]"
-
-/obj/item/clothing/ears/headphones/proc/toggle(owner)
- headphones_on = !headphones_on
- update_icon()
- to_chat(owner, span_notice("You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]"))
-
-/datum/action/item_action/toggle_headphones
- name = "Toggle Headphones"
- desc = "UNTZ UNTZ UNTZ"
-
-/datum/action/item_action/toggle_headphones/Trigger(trigger_flags)
- var/obj/item/clothing/ears/headphones/H = target
- if(istype(H))
- H.toggle(owner)
diff --git a/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm b/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm
deleted file mode 100644
index b014a0be0df..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/glasses/glasses.dm
+++ /dev/null
@@ -1,86 +0,0 @@
-/obj/item/clothing/glasses //Code to let you switch the side your eyepatch is on! Woo! Just an explanation, this is added to the base glasses so it works on eyepatch-huds too
- var/can_switch_eye = FALSE //Having this default to false means that its easy to make sure this doesnt apply to any pre-existing items
-
-
-/obj/item/clothing/glasses/examine(mob/user)
- . = ..()
- if(can_switch_eye)
- . += "Use in hands to wear it over your [icon_state == base_icon_state ? "left" : "right"] eye."
-
-
-/* ---------- Items Below ----------*/
-
-/obj/item/clothing/glasses/eyepatch //Re-defined here for ease with the left/right switch
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon_state = "eyepatch"
- base_icon_state = "eyepatch"
- can_switch_eye = TRUE
-
-/obj/item/clothing/glasses/eyepatch/wrap
- name = "eye wrap"
- desc = "A glorified bandage. At least this one's actually made for your head..."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon_state = "eyewrap"
- base_icon_state = "eyewrap"
-
-/obj/item/clothing/glasses/eyepatch/white
- name = "white eyepatch"
- desc = "This is what happens when a pirate gets a PhD."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon_state = "eyepatch_white"
- base_icon_state = "eyepatch_white"
-
-///GLASSSES
-/obj/item/clothing/glasses/thin
- name = "thin glasses"
- desc = "Often seen staring down at someone taking a book."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- icon_state = "glasses_thin"
- inhand_icon_state = "glasses"
- clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
-
-/obj/item/clothing/glasses/regular/betterunshit
- name = "modern glasses"
- desc = "After Nerd. Co went bankrupt for tax evasion and invasion, they were bought out by Dork.Co, who revamped their classic design."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- icon_state = "glasses_alt"
- inhand_icon_state = "glasses"
- clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
-
-/obj/item/clothing/glasses/kim
- name = "binoclard lenses"
- desc = "Stylish round lenses subtly shaded for your protection and criminal discomfort."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- icon_state = "binoclard_lenses"
- inhand_icon_state = "glasses"
- clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
-
-/obj/item/clothing/glasses/trickblindfold/hamburg
- name = "thief visor"
- desc = "Perfect for stealing hamburgers from innocent multinational capitalist monopolies."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- icon_state = "thiefmask"
-
-///GOGGLES
-/obj/item/clothing/glasses/biker
- name = "biker goggles"
- desc = "Brown leather riding gear, You can leave, just give us the gas."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/eyes.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/glasses.dmi'
- icon_state = "biker"
- inhand_icon_state = "welding-g"
- clothing_traits = list(TRAIT_NEARSIGHTED_CORRECTED)
-
-// Like sunglasses, but without any protection
-/obj/item/clothing/glasses/fake_sunglasses
- name = "low-UV sunglasses"
- desc = "A cheaper brand of sunglasses rated for much lower UV levels. Offers the user no protection against bright lights."
- icon_state = "sun"
- inhand_icon_state = "sunglasses"
diff --git a/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm b/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm
deleted file mode 100644
index a4bedf30d68..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/hands/hands.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-/obj/item/clothing/gloves/evening
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- name = "evening gloves"
- desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish."
- icon_state = "evening"
- strip_delay = 40
- equip_delay_other = 20
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
-
-/obj/item/clothing/gloves/kim
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- name = "aerostatic gloves"
- desc = "Vivid red gloves that exude a mysterious style, sadly not the best for gardening, or getting bodies out of trees."
- icon_state = "aerostatic_gloves"
-
-/obj/item/clothing/gloves/military
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- name = "military gloves"
- desc = "Tactical gloves made for military personnel, they are thin to allow easy operation of most firearms."
- icon_state = "military_gloves"
- siemens_coefficient = 0.4
- strip_delay = 60
- equip_delay_other = 60
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
-
-/obj/item/clothing/gloves/bracer/wraps
- name = "cloth arm wraps"
- desc = "Cloth bracers, the colour all left up to the choice of the wearer."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi'
- icon_state = "arm_wraps"
- inhand_icon_state = "greyscale_gloves"
- greyscale_config = /datum/greyscale_config/armwraps
- greyscale_config_worn = /datum/greyscale_config/armwraps/worn
- greyscale_colors = "#FFFFFF"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/gloves
- worn_icon_teshari = TESHARI_HANDS_ICON
-
-/obj/item/clothing/gloves/maid_arm_covers
- name = "maid arm covers"
- desc = "Maid in China."
- icon_state = "maid_arm_covers"
- greyscale_config = /datum/greyscale_config/maid_arm_covers
- greyscale_config_worn = /datum/greyscale_config/maid_arm_covers/worn
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_colors = "#7b9ab5#edf9ff"
- flags_1 = IS_PLAYER_COLORABLE_1
-
diff --git a/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm b/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm
deleted file mode 100644
index 6112d67fc97..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/hands/rings.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/obj/item/clothing/gloves/ring
- icon = 'modular_skyrat/master_files/icons/obj/ring.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- name = "gold ring"
- desc = "A tiny gold ring, sized to wrap around a finger."
- gender = NEUTER
- w_class = WEIGHT_CLASS_TINY
- icon_state = "ringgold"
- inhand_icon_state = null
- worn_icon_state = "gring"
- body_parts_covered = 0
- strip_delay = 4 SECONDS
- clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH)
-
-/obj/item/clothing/gloves/ring/suicide_act(mob/living/carbon/user)
- user.visible_message(span_suicide("\[user] is putting the [src] in [user.p_their()] mouth! It looks like [user] is trying to choke on the [src]!"))
- return OXYLOSS
-
-
-/obj/item/clothing/gloves/ring/diamond
- name = "diamond ring"
- desc = "An expensive ring, studded with a diamond. Cultures have used these rings in courtship for a millenia."
- icon_state = "ringdiamond"
- worn_icon_state = "dring"
-
-/obj/item/clothing/gloves/ring/diamond/attack_self(mob/user)
- user.visible_message(span_warning("\The [user] gets down on one knee, presenting \the [src]."),span_warning("You get down on one knee, presenting \the [src]."))
-
-/obj/item/clothing/gloves/ring/silver
- name = "silver ring"
- desc = "A tiny silver ring, sized to wrap around a finger."
- icon_state = "ringsilver"
- worn_icon_state = "sring"
diff --git a/modular_skyrat/modules/customization/modules/clothing/head/costume.dm b/modular_skyrat/modules/customization/modules/clothing/head/costume.dm
deleted file mode 100644
index 0a325fddc38..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/head/costume.dm
+++ /dev/null
@@ -1,118 +0,0 @@
-/obj/item/clothing/head/costume/skyrat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
- dog_fashion = null
-
-/obj/item/clothing/head/costume/skyrat/maid
- name = "maid headband"
- desc = "Maid in China."
- icon_state = "maid"
-
-/obj/item/clothing/head/costume/skyrat/papakha
- name = "papakha"
- desc = "A big wooly clump of fur designed to go on your head."
- icon_state = "papakha"
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/costume/skyrat/papakha/white
- icon_state = "papakha_white"
-
-/obj/item/clothing/head/costume/skyrat/flowerpin
- name = "flower pin"
- desc = "A small, colourable flower pin"
- icon_state = "flowerpin"
- greyscale_config = /datum/greyscale_config/flowerpin
- greyscale_config_worn = /datum/greyscale_config/flowerpin/worn
- greyscale_colors = "#FF0000"
- flags_1 = IS_PLAYER_COLORABLE_1
- w_class = WEIGHT_CLASS_SMALL
-
-/obj/item/clothing/head/costume/skyrat/christmas
- name = "christmas hat"
- desc = "How festive!"
- icon_state = "christmas"
-
-/obj/item/clothing/head/costume/skyrat/christmas/green
- icon_state = "christmas_g"
-
-/obj/item/clothing/head/costume/skyrat/en //One of the two parts of E-N's butchering
- name = "E-N suit head"
- icon_state = "enhead"
- supports_variations_flags = NONE
-
-//Ushankas
-//These have to be subtypes of TG's ushanka to inherit the toggleability
-/obj/item/clothing/head/costume/ushanka/sec
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
- name = "security ushanka"
- desc = "A warm and comfortable ushanka, dyed with 'all natural flavors' according to the tag."
- icon_state = "ushankablue"
- inhand_icon_state = "rus_ushanka"
- upsprite = "ushankablueup"
- downsprite = "ushankablue"
- armor_type = /datum/armor/head_helmet
-
-//Pelts
-//Not made into a subtype of /costume but stored in the same file
-/obj/item/clothing/head/pelt
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/costume.dmi'
- name = "bear pelt"
- desc = "A luxurious bear pelt, good to keep warm in winter. Or to sleep through it."
- icon_state = "bearpelt_brown"
- inhand_icon_state = "cowboy_hat_brown"
- cold_protection = CHEST|HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/pelt/black
- icon_state = "bearpelt_black"
- inhand_icon_state = "cowboy_hat_black"
-
-/obj/item/clothing/head/pelt/white
- icon_state = "bearpelt_white"
- inhand_icon_state = "cowboy_hat_white"
-
-/obj/item/clothing/head/pelt/tiger
- name = "shiny tiger pelt"
- desc = "A vibrant tiger pelt, particularly fabulous."
- icon_state = "tigerpelt_shiny"
- inhand_icon_state = "cowboy_hat_grey"
-
-/obj/item/clothing/head/pelt/snow_tiger
- name = "snow tiger pelt"
- desc = "A pelt of a less vibrant tiger, but rather warm."
- icon_state = "tigerpelt_snow"
- inhand_icon_state = "cowboy_hat_white"
-
-/obj/item/clothing/head/pelt/pink_tiger
- name = "pink tiger pelt"
- desc = "A particularly vibrant tiger pelt, for those who want to be the most fabulous at parties."
- icon_state = "tigerpelt_pink"
- inhand_icon_state = "cowboy_hat_red"
-
-/obj/item/clothing/head/pelt/wolf
- name = "wolf pelt"
- desc = "A fuzzy wolf pelt that demands respect as a hunter... assuming it wasn't just purchased, that is, for all the glory but none of the credit."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/pelt_big.dmi'
- icon_state = "wolfpelt_brown"
-
-/obj/item/clothing/head/pelt/wolf/black
- icon_state = "wolfpelt_gray"
- inhand_icon_state = "cowboy_hat_grey"
-
-/obj/item/clothing/head/pelt/wolf/white
- icon_state = "wolfpelt_white"
- inhand_icon_state = "cowboy_hat_white"
-//End Pelts
-
-/obj/item/clothing/head/maid_headband
- name = "maid headband"
- desc = "Just like from one of those Chinese cartoons!"
- icon_state = "maid_headband"
- greyscale_config = /datum/greyscale_config/maid_headband
- greyscale_config_worn = /datum/greyscale_config/maid_headband/worn
- greyscale_colors = "#edf9ff"
- flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/head/head.dm b/modular_skyrat/modules/customization/modules/clothing/head/head.dm
deleted file mode 100644
index d05828cd095..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/head/head.dm
+++ /dev/null
@@ -1,248 +0,0 @@
-/obj/item/clothing/head/hats/flakhelm //Actually the M1 Helmet
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- name = "flak helmet"
- icon_state = "m1helm"
- inhand_icon_state = "helmet"
- armor_type = /datum/armor/hats_flakhelm
- desc = "A dilapidated helmet used in ancient wars. This one is brittle and essentially useless. An ace of spades is tucked into the band around the outer shell."
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/datum/armor/hats_flakhelm
- bomb = 0.1
- fire = -10
- acid = -15
- wound = 1
-
-/obj/item/clothing/head/hats/flakhelm/Initialize(mapload)
- . = ..()
-
- create_storage(storage_type = /datum/storage/pockets/tiny/spacenam)
-
-/datum/storage/pockets/tiny/spacenam
- attack_hand_interact = TRUE //So you can actually see what you stuff in there
-
-//Cyberpunk PI Costume - Sprites from Eris
-/obj/item/clothing/head/fedora/det_hat/cybergoggles //Subset of detective fedora so that detectives dont have to sacrifice candycorns for style
- name = "type-34C semi-enclosed headwear"
- desc = "Civilian model of a popular helmet used by certain law enforcement agencies. It does not have any armor plating, but has a neo-laminated fiber lining."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "cyberpunkgoggle"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/intern/developer
- name = "intern beancap"
-
-/obj/item/clothing/head/beret/sec/navywarden/syndicate
- name = "master at arms' beret"
- desc = "Surprisingly stylish, if you lived in a silent impressionist film."
- greyscale_config = /datum/greyscale_config/beret_badge
- greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
- greyscale_colors = "#353535#AAAAAA"
- icon_state = "beret_badge"
- armor_type = /datum/armor/navywarden_syndicate
- strip_delay = 60
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/datum/armor/navywarden_syndicate
- melee = 40
- bullet = 30
- laser = 30
- energy = 40
- bomb = 25
- fire = 30
- acid = 50
- wound = 6
-
-/obj/item/clothing/head/colourable_flatcap
- name = "colourable flat cap"
- desc = "You in the computers son? You work the computers?"
- icon_state = "flatcap"
- greyscale_config = /datum/greyscale_config/flatcap
- greyscale_config_worn = /datum/greyscale_config/flatcap/worn
- greyscale_colors = "#79684c"
- flags_1 = IS_PLAYER_COLORABLE_1
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/imperial
- name = "grey naval officer cap"
- desc = "A grey naval cap with a silver disk in the center."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "impcom"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/imperial/grey
- name = "dark grey naval officer cap"
- desc = "A dark grey naval cap with a silver disk in the center."
- icon_state = "impcommand"
-
-/obj/item/clothing/head/hats/imperial/red
- name = "red naval officer cap"
- desc = "A red naval cap with a silver disk in the center."
- icon_state = "impcap_red"
-
-/obj/item/clothing/head/hats/imperial/white
- name = "white naval officer cap"
- desc = "A white naval cap with a silver disk in the center."
- icon_state = "impcap"
-
-/obj/item/clothing/head/hats/imperial/cap
- name = "captain's naval officer cap"
- desc = "A white naval cap with a silver disk in the center."
- icon_state = "impcap"
-
-/obj/item/clothing/head/hats/imperial/hop
- name = "head of personnel's naval officer cap"
- desc = "An olive naval cap with a silver disk in the center."
- icon_state = "imphop"
-
-/obj/item/clothing/head/hats/imperial/hos
- name = "head of security's naval officer cap"
- desc = "A tar black naval cap with a silver disk in the center."
- icon_state = "imphos"
- armor_type = /datum/armor/hats_hos
-
-/obj/item/clothing/head/hats/imperial/cmo
- name = "chief medical officer's naval cap"
- desc = "A teal naval cap with a silver disk in the center."
- icon_state = "impcmo"
-
-/obj/item/clothing/head/hats/imperial/ce
- name = "chief engineer's blast helmet"
- desc = "Despite seeming like it's made of metal, it's actually a very cheap plastic.."
- armor_type = /datum/armor/imperial_ce
- clothing_flags = STOPSPRESSUREDAMAGE
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
- icon_state = "impce"
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
-
-
-/datum/armor/imperial_ce
- melee = 15
- bullet = 5
- laser = 20
- energy = 10
- bomb = 20
- bio = 10
- fire = 100
- acid = 50
- wound = 10
-
-/obj/item/clothing/head/hats/imperial/helmet
- name = "blast helmet"
- desc = "A sharp helmet with some goggles on the top. Unfortunately, both those and the helmet itself are made of flimsy plastic." //No armor moment
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "blast_helmet"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/imperial/helmet/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_icon, "goggles")
-
-/obj/item/clothing/head/soft/yankee
- name = "fashionable baseball cap"
- desc = "Rimmed and brimmed."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "yankeesoft"
- soft_type = "yankee"
- dog_fashion = /datum/dog_fashion/head/yankee
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/soft/yankee/rimless
- name = "rimless fashionable baseball cap"
- desc = "Rimless for her pleasure."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "yankeenobrimsoft"
- soft_type = "yankeenobrim"
-
-/obj/item/clothing/head/fedora/brown //Fedora without detective's candy corn gimmick
- name = "brown fedora"
- icon_state = "detective"
- inhand_icon_state = "det_hat"
-
-/obj/item/clothing/head/standalone_hood
- name = "hood"
- desc = "A hood with a bit of support around the neck so it actually stays in place, for all those times you want a hood without the coat."
- icon = 'modular_skyrat/modules/GAGS/icons/head/head.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/head/head.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/head/head_teshari.dmi'
- icon_state = "hood"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEEARS|HIDEHAIR
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
- flags_1 = IS_PLAYER_COLORABLE_1
- greyscale_colors = "#4e4a43#F1F1F1"
- greyscale_config = /datum/greyscale_config/standalone_hood
- greyscale_config_worn = /datum/greyscale_config/standalone_hood/worn
- greyscale_config_worn_teshari = /datum/greyscale_config/standalone_hood/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/standalone_hood/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/standalone_hood/worn/oldvox
-
-/obj/item/clothing/head/beret/badge
- name = "badged beret"
- desc = "A beret. With a badge. What do you want, a dissertation? It's a hat."
- icon_state = "beret_badge"
- greyscale_config = /datum/greyscale_config/beret_badge
- greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
- greyscale_colors = "#972A2A#EFEFEF"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/head/costume/cowboyhat_old
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- name = "old cowboy hat"
- desc = "An older cowboy hat, perfect for any outlaw, though lacking fancy colour magic."
- icon_state = "cowboyhat_black"
- inhand_icon_state = "cowboy_hat_black"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-//BOWS
-/obj/item/clothing/head/small_bow
- name = "small bow"
- desc = "A small compact bow that you can place on the side of your hair."
- icon_state = "small_bow"
- greyscale_config = /datum/greyscale_config/small_bow
- greyscale_config_worn = /datum/greyscale_config/small_bow/worn
- greyscale_colors = "#7b9ab5"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/head/small_bow/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_clothes, "small_bow_t")
-
-/obj/item/clothing/head/large_bow
- name = "large bow"
- desc = "A large bow that you can place on top of your head."
- icon_state = "large_bow"
- greyscale_config = /datum/greyscale_config/large_bow
- greyscale_config_worn = /datum/greyscale_config/large_bow/worn
- greyscale_colors = "#7b9ab5"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/head/back_bow
- name = "back bow"
- desc = "A large bow that you can place on the back of your head."
- icon_state = "back_bow"
- greyscale_config = /datum/greyscale_config/back_bow
- greyscale_config_worn = /datum/greyscale_config/back_bow/worn
- greyscale_colors = "#7b9ab5"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/head/sweet_bow
- name = "sweet bow"
- desc = "A sweet bow that you can place on the back of your head."
- icon_state = "sweet_bow"
- greyscale_config = /datum/greyscale_config/sweet_bow
- greyscale_config_worn = /datum/greyscale_config/sweet_bow/worn
- greyscale_colors = "#7b9ab5"
- flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/head/trek.dm b/modular_skyrat/modules/customization/modules/clothing/head/trek.dm
deleted file mode 100644
index a9230e4fec7..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/head/trek.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-//Trekkie Caps
-/obj/item/clothing/head/hats/caphat/parade/fedcap
- name = "Officer's cap"
- desc = "An officer's cap that demands discipline from the one who wears it."
- icon_state = "fedcapofficer"
- armor_type = /datum/armor/none
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
-
-//Variants
-/obj/item/clothing/head/hats/caphat/parade/fedcap/medsci
- icon_state = "fedcapsci"
-
-/obj/item/clothing/head/hats/caphat/parade/fedcap/eng
- icon_state = "fedcapeng"
-
-/obj/item/clothing/head/hats/caphat/parade/fedcap/sec
- icon_state = "fedcapsec"
-
-/obj/item/clothing/head/hats/caphat/parade/fedcap/black
- icon_state = "fedcapblack"
diff --git a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm b/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm
deleted file mode 100644
index 47ae6a48e89..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/masks/gasmask.dm
+++ /dev/null
@@ -1,218 +0,0 @@
-/obj/item/clothing/mask/gas/glass
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- name = "glass gas mask"
- desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however."
- icon_state = "gas_clear"
- flags_inv = NONE
-
-/obj/item/clothing/mask/gas/atmos/glass
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- name = "advanced gas mask"
- desc = "A face-covering mask that can be connected to an air supply. This one doesn't obscure your face however."
- icon_state = "gas_clear"
- flags_inv = NONE
-
-/obj/item/clothing/mask/gas/alt
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- icon_state = "gas_alt2"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
-
-/obj/item/clothing/mask/gas/german
- name = "black gas mask"
- desc = "A black gas mask. Are you my Mummy?"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- icon_state = "m38_mask"
-
-/obj/item/clothing/mask/gas/hecu1
- name = "modern gas mask"
- desc = "MY. ASS. IS. HEAVY."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- icon_state = "hecu"
-
-/obj/item/clothing/mask/gas/hecu2
- name = "M40 gas mask"
- desc = "A deprecated field protective mask developed during the 20th century in Sol-3. It's designed to protect from chemical agents, biological agents, and nuclear fallout particles. It does not protect the user from ammonia or from lack of oxygen, though the filter can be replaced with a tube for any air tank."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/mask.dmi'
- icon_state = "hecu2"
-
-/obj/item/clothing/mask/gas/soviet
- name = "soviet gas mask"
- desc = "A white gas mask with a green filter, there's a small sticker attached saying it's not got Asbestos anymore."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- icon_state = "gp5_mask"
-
-/obj/item/clothing/mask/gas/clown_colourable
- name = "colourable clown mask"
- desc = "The face of pure evil, now multicoloured."
- icon_state = "gags_mask"
- clothing_flags = MASKINTERNALS
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
- has_fov = FALSE
- greyscale_config = /datum/greyscale_config/clown_mask
- greyscale_config_worn = /datum/greyscale_config/clown_mask/worn
- greyscale_colors = "#FFFFFF#F20018#0000FF#00CC00"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/mask/gas/clownbald
- name = "bald clown mask"
- desc = "HE'S BALD, HE'S FUCKIN' BALDIN!"
- clothing_flags = MASKINTERNALS
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask.dmi'
- icon_state = "baldclown"
- inhand_icon_state = null
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/respirator
- name = "half mask respirator"
- desc = "A half mask respirator that's really just a standard gas mask with the glass taken off."
- icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/masks.dmi'
- icon_state = "respirator"
- inhand_icon_state = "sechailer"
- w_class = WEIGHT_CLASS_SMALL
- has_fov = FALSE
- clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
- flags_inv = HIDEFACIALHAIR|HIDESNOUT
- flags_cover = MASKCOVERSMOUTH
- flags_1 = IS_PLAYER_COLORABLE_1
- greyscale_colors = "#2E3333"
- greyscale_config = /datum/greyscale_config/respirator
- greyscale_config_worn = /datum/greyscale_config/respirator/worn
- //NIGHTMARE NIGHTMARE NIGHTMARE
- greyscale_config_worn_digi = /datum/greyscale_config/respirator/worn/snouted
- greyscale_config_worn_better_vox = /datum/greyscale_config/respirator/worn/better_vox
- greyscale_config_worn_vox = /datum/greyscale_config/respirator/worn/vox
- greyscale_config_worn_teshari = /datum/greyscale_config/respirator/worn/teshari
-
-/obj/item/clothing/mask/gas/respirator/examine(mob/user)
- . = ..()
- . += span_notice("You can toggle its ability to muffle your TTS voice with control click .")
-
-/obj/item/clothing/mask/gas/respirator/CtrlClick(mob/living/user)
- if(!isliving(user))
- return
- if(user.get_active_held_item() != src)
- to_chat(user, span_warning("You must hold the [src] in your hand to do this!"))
- return
- voice_filter = voice_filter ? null : initial(voice_filter)
- to_chat(user, span_notice("Mask voice muffling [voice_filter ? "enabled" : "disabled"]."))
-
-/obj/item/clothing/mask/gas/clown_hat/vox
- desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- starting_filter_type = /obj/item/gas_filter/vox
-
-/obj/item/clothing/mask/gas/clown_hat/vox/Initialize(mapload)
- .=..()
- clownmask_designs = list(
- "True Form" = image(icon = src.icon, icon_state = "clown"),
- "The Feminist" = image(icon = src.icon, icon_state = "sexyclown"),
- "The Wizard" = image(icon = src.icon, icon_state = "wizzclown"),
- "The Jester" = image(icon = src.icon, icon_state = "chaos"),
- "The Madman" = image(icon = src.icon, icon_state = "joker"),
- "The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow")
- )
-
-/obj/item/clothing/mask/gas/clown_hat/vox/ui_action_click(mob/user)
- if(!istype(user) || user.incapacitated())
- return
-
- var/list/options = list()
- options["True Form"] = "clown"
- options["The Feminist"] = "sexyclown"
- options["The Wizard"] = "wizzclown"
- options["The Madman"] = "joker"
- options["The Rainbow Color"] = "rainbow"
- options["The Jester"] = "chaos"
-
- var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
- if(!choice)
- return FALSE
-
- if(src && choice && !user.incapacitated() && in_range(user,src))
- icon_state = options[choice]
- user.update_worn_mask()
- update_item_action_buttons()
- to_chat(user, span_notice("Your Clown Mask has now morphed into [choice], all praise the Honkmother!"))
- return TRUE
-
-/obj/item/clothing/mask/gas/mime/vox
- desc = "The traditional mime's mask. It has an eerie facial posture. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- starting_filter_type = /obj/item/gas_filter/vox
-
-/obj/item/clothing/mask/gas/mime/vox/Initialize(mapload)
- .=..()
- mimemask_designs = list(
- "Blanc" = image(icon = src.icon, icon_state = "mime"),
- "Excité" = image(icon = src.icon, icon_state = "sexymime"),
- "Triste" = image(icon = src.icon, icon_state = "sadmime"),
- "Effrayé" = image(icon = src.icon, icon_state = "scaredmime")
- )
-
-/obj/item/clothing/mask/gas/mime/vox/ui_action_click(mob/user)
- if(!istype(user) || user.incapacitated())
- return
-
- var/list/options = list()
- options["Blanc"] = "mime"
- options["Triste"] = "sadmime"
- options["Effrayé"] = "scaredmime"
- options["Excité"] = "sexymime"
-
- var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
- if(!choice)
- return FALSE
-
- if(src && choice && !user.incapacitated() && in_range(user,src))
- var/mob/living/carbon/human/human_user = user
- if(human_user.dna.species.mutant_bodyparts["snout"])
- icon = 'modular_skyrat/master_files/icons/obj/clothing/masks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
- var/list/avian_snouts = list("Beak", "Big Beak", "Corvid Beak")
- if(human_user.dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME] in avian_snouts)
- icon_state = "[options[choice]]_b"
- else
- icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- icon_state = options[choice]
- icon_state = options[choice]
-
- user.update_worn_mask()
- update_item_action_buttons()
- to_chat(user, span_notice("Your Mime Mask has now morphed into [choice]!"))
- return TRUE
-
-/obj/item/clothing/mask/gas/atmos/vox
- desc = "Improved gas mask utilized by atmospheric technicians. It's flameproof! This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- starting_filter_type = /obj/item/gas_filter/vox
-
-/obj/item/clothing/mask/gas/sechailer/vox
- desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device. This one's got an easily accessible feeding port to be more suitable for the Vox crewmembers."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- worn_icon_better_vox = 'modular_skyrat/master_files/icons/mob/clothing/species/vox/mask.dmi'
- clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING
- visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING
- starting_filter_type = /obj/item/gas_filter/vox
diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm b/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm
deleted file mode 100644
index 75c95556f6d..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/neck/_neck.dm
+++ /dev/null
@@ -1,120 +0,0 @@
-/obj/item/clothing/neck/tie/disco
- name = "horrific necktie"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "eldritch_tie"
- desc = "The necktie is adorned with a garish pattern. It's disturbingly vivid. Somehow you feel as if it would be wrong to ever take it off. It's your friend now. You will betray it if you change it for some boring scarf."
-
-/obj/item/clothing/neck/mantle
- name = "mantle"
- desc = "A decorative drape over the shoulders. This one has a simple, dry color."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "mantle"
-
-/obj/item/clothing/neck/mantle/regal
- name = "regal mantle"
- desc = "A colorful felt mantle. You feel posh just holding this thing."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "regal-mantle"
-
-/obj/item/clothing/neck/mantle/qm
- name = "\proper the quartermaster's mantle"
- desc = "A snug and comfortable looking shoulder covering garment, it has an air of rebellion and independence. Or annoyance and delusions, your call."
- icon_state = "qmmantle"
-
-/obj/item/clothing/neck/mantle/hopmantle
- name = "\proper the head of personnel's mantle"
- desc = "A decorative draping of blue and red over your shoulders, signifying your stamping prowess."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "hopmantle"
-
-/obj/item/clothing/neck/mantle/cmomantle
- name = "\proper the chief medical officer's mantle"
- desc = "A light blue shoulder draping for THE medical professional. Contrasts well with blood."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "cmomantle"
-
-/obj/item/clothing/neck/mantle/rdmantle
- name = "\proper the research director's mantle"
- desc = "A terribly comfortable shoulder draping for the discerning scientist of fashion."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "rdmantle"
-
-/obj/item/clothing/neck/mantle/cemantle
- name = "\proper the chief engineer's mantle"
- desc = "A bright white and yellow striped mantle. Do not wear around active machinery."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "cemantle"
-
-/obj/item/clothing/neck/mantle/hosmantle
- name = "\proper the head of security's mantle"
- desc = "A plated mantle that one might wrap around the upper torso. The 'scales' of the garment signify the members of security and how you're carrying them on your shoulders."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "hosmantle_blue" //There's a red version if you remove the _blue, but its not coded in currently.
-
-/obj/item/clothing/neck/mantle/bsmantle
- name = "\proper the blueshield's mantle"
- desc = "A plated mantle with command colors. Suitable for the one assigned to making sure they're still breathing."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "bsmantle"
-
-/obj/item/clothing/neck/mantle/capmantle
- name = "\proper the captain's mantle"
- desc = "A formal mantle to drape around the shoulders. Others stand on the shoulders of giants. You're the giant they stand on."
- icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon_state = "capmantle"
-
-/obj/item/clothing/neck/mantle/recolorable
- name = "mantle"
- desc = "A simple drape over the shoulders."
- icon = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/neck/neck.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/neck/neck_teshari.dmi'
- icon_state = "mantle"
- greyscale_colors = "#ffffff"
- greyscale_config = /datum/greyscale_config/mantle
- greyscale_config_worn = /datum/greyscale_config/mantle/worn
- greyscale_config_worn_teshari = /datum/greyscale_config/mantle/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/mantle/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/mantle/worn/oldvox
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/neck/face_scarf
- name = "face scarf"
- desc = "A warm looking scarf that you can easily put around your face."
- icon_state = "face_scarf"
- greyscale_config = /datum/greyscale_config/face_scarf
- greyscale_config_worn = /datum/greyscale_config/face_scarf/worn
- greyscale_config_worn_muzzled = /datum/greyscale_config/face_scarf/worn/muzzled
- greyscale_colors = "#a52424"
- flags_1 = IS_PLAYER_COLORABLE_1
- flags_inv = HIDEFACIALHAIR | HIDESNOUT
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION
-
-/obj/item/clothing/neck/face_scarf/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_icon, toggle_noun = "scarf")
-
-/obj/item/clothing/neck/face_scarf/AltClick(mob/user) //Make sure that toggling actually hides the snout so that it doesn't clip
- . = ..()
- if(icon_state != "face_scarf_t")
- flags_inv = HIDEFACIALHAIR | HIDESNOUT
- else
- flags_inv = HIDEFACIALHAIR
-
-/obj/item/clothing/neck/maid_neck_cover
- name = "maid neck cover"
- desc = "A neckpiece for a maid costume, it smells faintly of disappointment."
- icon_state = "maid_neck_cover"
- greyscale_config = /datum/greyscale_config/maid_neck_cover
- greyscale_config_worn = /datum/greyscale_config/maid_neck_cover/worn
- greyscale_colors = "#7b9ab5#edf9ff"
- flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm
deleted file mode 100644
index 07d7cc81ea0..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm
+++ /dev/null
@@ -1,220 +0,0 @@
-/obj/item/clothing/shoes/wraps
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- name = "gilded leg wraps"
- desc = "Ankle coverings. These ones have a golden design."
- icon_state = "gildedcuffs"
- body_parts_covered = FALSE
-
-/obj/item/clothing/shoes/wraps/silver
- name = "silver leg wraps"
- desc = "Ankle coverings. Not made of real silver."
- icon_state = "silvergildedcuffs"
-
-/obj/item/clothing/shoes/wraps/red
- name = "red leg wraps"
- desc = "Ankle coverings. Show off your style with these shiny red ones!"
- icon_state = "redcuffs"
-
-/obj/item/clothing/shoes/wraps/blue
- name = "blue leg wraps"
- desc = "Ankle coverings. Hang ten, brother."
- icon_state = "bluecuffs"
-
-/obj/item/clothing/shoes/cowboyboots
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- name = "cowboy boots"
- desc = "A standard pair of brown cowboy boots."
- icon_state = "cowboyboots"
-
-/obj/item/clothing/shoes/cowboyboots/black
- name = "black cowboy boots"
- desc = "A pair of black cowboy boots, pretty easy to scuff up."
- icon_state = "cowboyboots_black"
-
-/obj/item/clothing/shoes/high_heels
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- name = "high heels"
- desc = "A fancy pair of high heels. Won't compensate for your below average height that much."
- icon_state = "heels"
- greyscale_config = /datum/greyscale_config/heels
- greyscale_config_worn = /datum/greyscale_config/heels/worn
- greyscale_config_worn_digi = /datum/greyscale_config/heels/worn/digi
- greyscale_colors = "#FFFFFF"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/fancy_heels
- name = "fancy heels"
- desc = "A pair of fancy high heels that are much smaller on your feet."
- icon_state = "fancyheels"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- greyscale_colors = "#FFFFFF"
- greyscale_config = /datum/greyscale_config/fancyheels
- greyscale_config_worn = /datum/greyscale_config/fancyheels/worn
- greyscale_config_worn_digi = /datum/greyscale_config/fancyheels/worn/digi
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/discoshoes
- name = "green snakeskin shoes"
- desc = "They may have lost some of their lustre over the years, but these green crocodile leather shoes fit you perfectly."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "lizardskin_shoes"
-
-/obj/item/clothing/shoes/kimshoes
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- name = "aerostatic boots"
- desc = "A brown pair of boots, prim and proper, ready to set off and get a body out of a tree."
- icon_state = "aerostatic_boots"
-
-
-/obj/item/clothing/shoes/jungleboots
- name = "jungle boots"
- desc = "Take me to your paradise, I want to see the Jungle. A brown pair of boots."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "jungle"
- inhand_icon_state = "jackboots"
- strip_delay = 30
- equip_delay_other = 50
- resistance_flags = NONE
-
-/obj/item/clothing/shoes/jungleboots/Initialize(mapload)
- . = ..()
-
- create_storage(storage_type = /datum/storage/pockets/shoes)
-
-/obj/item/clothing/shoes/jackboots/black
- name = "dark jackboots"
- desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time. These are fully black."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "blackjack"
-
-/obj/item/clothing/shoes/wraps/cloth
- name = "cloth foot wraps"
- desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer."
- icon_state = "clothwrap"
- greyscale_config = /datum/greyscale_config/clothwraps
- greyscale_config_worn = /datum/greyscale_config/clothwraps/worn
- greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi
- greyscale_colors = "#FFFFFF"
- body_parts_covered = FALSE
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/wraps/colourable
- name = "colourable foot wraps"
- desc = "Ankle coverings. These ones have a customisable colour design."
- icon_state = "legwrap"
- greyscale_config = /datum/greyscale_config/legwraps
- greyscale_config_worn = /datum/greyscale_config/legwraps/worn
- greyscale_config_worn_digi = /datum/greyscale_config/legwraps/worn/digi
- greyscale_colors = "#FFFFFF"
- body_parts_covered = FALSE
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/sports
- name = "sport shoes"
- desc = "Shoes for the sporty individual. The giants of Charlton play host to the titans of Ipswich - making them both seem normal sized."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "sportshoe"
-
-/obj/item/clothing/shoes/jackboots/knee
- name = "knee boots"
- desc = "Black leather boots that go up to the knee."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "kneeboots"
-
-/obj/item/clothing/shoes/jackboots/timbs
- name = "fashionable boots"
- desc = "Fresh from Luna, deadass good for rappers."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "timbs"
-
-/obj/item/clothing/shoes/winterboots/christmas
- name = "red christmas boots"
- desc = "A pair of fluffy red christmas boots!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "christmasbootsr"
-
-/obj/item/clothing/shoes/winterboots/christmas/green
- name = "green christmas boots"
- desc = "A pair of fluffy green christmas boots!"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "christmasbootsg"
-
-/obj/item/clothing/shoes/clown_shoes/pink
- name = "pink clown shoes"
- desc = "A particularly pink pair of punny shoes."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "pink_clown_shoes"
-
-//Modular overide to give jackboots laces
-/obj/item/clothing/shoes/jackboots
- can_be_tied = TRUE
-
-/obj/item/clothing/shoes/colorable_laceups
- name = "laceup shoes"
- desc = "These don't seem to come pre-polished, how saddening."
- icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
- icon_state = "laceups"
- greyscale_colors = "#383631"
- greyscale_config = /datum/greyscale_config/laceup
- greyscale_config_worn = /datum/greyscale_config/laceup/worn
- greyscale_config_worn_teshari = /datum/greyscale_config/laceup/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/laceup/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/laceup/worn/oldvox
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/colorable_sandals
- name = "sandals"
- desc = "Rumor has it that wearing these with socks puts you on a no entry list in several sectors."
- icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
- icon_state = "sandals"
- greyscale_colors = "#383631"
- greyscale_config = /datum/greyscale_config/sandals
- greyscale_config_worn = /datum/greyscale_config/sandals/worn
- greyscale_config_worn_digi = /datum/greyscale_config/sandals/worn/digi
- greyscale_config_worn_teshari = /datum/greyscale_config/sandals/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/sandals/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/sandals/worn/oldvox
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/jackboots/recolorable
- icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/shoes/shoes.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/shoes/shoes_teshari.dmi'
- icon_state = "boots"
- greyscale_colors = "#383631"
- greyscale_config = /datum/greyscale_config/boots
- greyscale_config_worn = /datum/greyscale_config/boots/worn
- greyscale_config_worn_digi = /datum/greyscale_config/boots/worn/digi
- greyscale_config_worn_teshari = /datum/greyscale_config/boots/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/boots/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/boots/worn/oldvox
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/shoes/wraps/cloth
- name = "cloth foot wraps"
- desc = "Boxer tape or bandages wrapped like a mummy, all left up to the choice of the wearer."
- icon_state = "clothwrap"
- greyscale_config = /datum/greyscale_config/clothwraps
- greyscale_config_worn = /datum/greyscale_config/clothwraps/worn
- greyscale_config_worn_digi = /datum/greyscale_config/clothwraps/worn/digi
- greyscale_colors = "#FFFFFF"
- body_parts_covered = FALSE
- flags_1 = IS_PLAYER_COLORABLE_1
diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm b/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm
deleted file mode 100644
index c94701b2254..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/storage/backpacks.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/obj/item/storage/backpack/satchel/crusader //Not very special, really just a satchel texture
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- name = "crusader bandolier"
- desc = "A bandolier-satchel combination for holding all your dungeon loot."
- icon_state = "crusader_bandolier"
- inhand_icon_state = "explorerpack"
- w_class = WEIGHT_CLASS_BULKY
-
-/obj/item/storage/backpack/science/robo
- name = "robotics backpack"
- desc = "A sleek, industrial-strength backpack issued to robotics personnel. Smells faintly of oil."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "backpack_robo"
- inhand_icon_state = "backpack_robo"
-
-/obj/item/storage/backpack/satchel/science/robo
- name = "robotics satchel"
- desc = "A sleek, industrial-strength satchel issued to robotics personnel. Smells faintly of oil."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "satchel_robo"
- inhand_icon_state = "satchel_robo"
-
-/obj/item/storage/backpack/duffelbag/science/robo
- name = "robotics duffelbag"
- desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. Smells faintly of oil."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "duffel_robo"
- inhand_icon_state = "duffel_robo"
diff --git a/modular_skyrat/modules/customization/modules/clothing/storage/readme.md b/modular_skyrat/modules/customization/modules/clothing/storage/readme.md
deleted file mode 100644
index 6dbaef6f868..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/storage/readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-## Title: Storage
-
-MODULE ID: Storage
-
-### Description:
-
-A seperate folder under customization for adding new (WORN) storage items, such as new bags and belts.
-
-### TG Proc Changes:
-
-- N/A
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-(Both the new sprite files, which are in the normal clothing icon locations)
-- modular_skyrat/master_files/icons/mob/clothing/storage.dmi
-- modular_skyrat/master_files/icons/obj/clothing/storage.dmi
-
-### Credits:
-Orion_the_Fox
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm b/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm
deleted file mode 100644
index 4f44155ee81..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/suits/armor.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-// MODULAR ARMOUR
-
-// WARDEN
-/obj/item/clothing/suit/armor/vest/warden/syndicate
- name = "master at arms' vest"
- desc = "Stunning. Menacing. Perfect for the man who gets bullied for leaving the brig."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- icon_state = "warden_syndie"
- current_skin = "warden_syndie" //prevents reskinning
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-// HEAD OF PERSONNEL
-/obj/item/clothing/suit/armor/vest/hop/hop_formal
- name = "head of personnel's parade jacket"
- desc = "A luxurious deep blue jacket for the Head of Personnel, woven with a red trim. It smells of bureaucracy."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- icon_state = "hopformal"
-
-/obj/item/clothing/suit/armor/vest/hop/hop_formal/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_icon)
-
-// CAPTAIN
-/obj/item/clothing/suit/armor/vest/capcarapace/jacket
- name = "captain's jacket"
- desc = "A lightweight armored jacket in the Captain's colors. For when you want something sleeker."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- icon_state = "capjacket_casual"
- body_parts_covered = CHEST|ARMS
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm b/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm
deleted file mode 100644
index ad488df4e86..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/suits/misc.dm
+++ /dev/null
@@ -1,349 +0,0 @@
-/obj/item/clothing/suit/wornshirt
- name = "worn shirt"
- desc = "A worn out (or perhaps just baggy), curiously comfortable t-shirt."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "wornshirt"
- inhand_icon_state = "labcoat"
- body_parts_covered = CHEST|GROIN
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/dutchjacketsr
- name = "western jacket"
- desc = "Botanists screaming of mangos have been rumored to wear this."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "dutchjacket"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-
-/obj/item/clothing/suit/toggle/trackjacket
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "track jacket"
- desc = "A black jacket with blue stripes for the athletic. It is also popular among russian delinquents."
- icon_state = "trackjacket"
- toggle_noun = "zipper"
-
-/obj/item/clothing/suit/frenchtrench
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "blue trenchcoat"
- icon_state = "frenchtrench"
- desc = "There's a certain timeless feeling to this coat, like it was once worn by a romantic, broken through his travels, from a schemer who hunted injustice to a traveller, however it arrived in your hands? Who knows?"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/victoriantailcoatbutler
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "caretaker tailcoat"
- desc = "You've ALWAYS been the Caretaker. I ought to know, I've ALWAYS been here."
- icon_state = "victorian_tailcoat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/koreacoat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "eastern winter coat"
- desc = "War makes people cold, not just on the inside, but on the outside as well... luckily this coat's not seen any hardships like that, and is actually quite warm!"
- icon_state = "chi_korea_coat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/modernwintercoatthing
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "modern winter coat"
- desc = "Warm and comfy, the inner fur seems to be removable, not this one though, someone's sewn it in and left the buttons!"
- icon_state = "modern_winter"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/toggle/jacket/cardigan
- name = "cardigan"
- desc = "It's like, half a jacket."
- icon_state = "cardigan"
- greyscale_config = /datum/greyscale_config/cardigan
- greyscale_config_worn = /datum/greyscale_config/cardigan/worn
- greyscale_colors = "#FFFFFF"
- flags_1 = IS_PLAYER_COLORABLE_1
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/toggle/jacket/cardigan/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/toggle_clothes, "cardigan_t")
-
-/obj/item/clothing/suit/discoblazer
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "disco ass blazer"
- desc = "Looks like someone skinned this blazer off some long extinct disco-animal. It has an enigmatic white rectangle on the back and the right sleeve."
- icon_state = "jamrock_blazer"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/kimjacket
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "aerostatic bomber jacket"
- desc = "A jacket once worn by the Air Force during the Antecentennial Revolution, there are quite a few pockets on the inside, mostly for storing notebooks and compasses."
- icon_state = "aerostatic_bomber_jacket"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/blackfurrich
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "expensive black fur coat"
- desc = "Ever thought to yourself 'I'm a rich bitch, but I haven't GOT the Mafia Princess look?' Well thanks to the tireless work of underpaid slave labour in Space China, your dreams of looking like a bitch have been fulfilled, like a Genie with a sweatshop."
- icon_state = "expensivecoat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/brownbattlecoat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "expensive brown fur coat"
- desc = "There is nothing more valuable, nothing more sacred, look at the fur lining, it's beautiful, when you cruse through Necropolis in this thing, you're gonna be balls deep in Ash Walker snatch."
- icon_state = "battlecoat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/brownfurrich
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "quartermaster fur coat"
- desc = "Cargonia, or if you're a dork, Cargoslavia has shipped out a coat for loyal quartermasters, despite accusations it's just a dyed black fur coat, it's...not, promise!"
- icon_state = "winter_coat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor_type = /datum/armor/suit_brownfurrich
-
-/datum/armor/suit_brownfurrich
- melee = 10
- bullet = 10
-
-/obj/item/clothing/suit/brownfurrich/public
- name = "fur coat"
- desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
-
-/obj/item/clothing/suit/brownfurrich/white
- name = "white fur coat"
- desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
- icon_state = "winter_coat_white"
-
-/obj/item/clothing/suit/brownfurrich/cream
- name = "cream fur coat"
- desc = "A lavishly cosy furr coat, made with 100% recycled carbon!"
- icon_state = "winter_coat_cream"
-
-/obj/item/clothing/suit/fallsparka
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "falls parka"
- desc = "A light brown coat with light fur lighting around the collar."
- icon_state = "fallsparka"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/british_officer
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "british officers coat"
- desc = "Whether you're commanding a colonial crusade or commanding a battalion for the British Empire, this coat will suit you."
- icon_state = "british_officer"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor_type = /datum/armor/suit_british_officer
-
-/datum/armor/suit_british_officer
- melee = 10
- bullet = 10
-
-/obj/item/clothing/suit/modern_winter
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "modern winter coat"
- desc = "A comfy modern winter coat."
- icon_state = "modern_winter"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/woolcoat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "wool coat"
- desc = "A fine coat made from the richest of wool."
- icon_state = "woolcoat"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
-
-
-/obj/item/clothing/suit/gautumn
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "neo american general's coat"
- desc = "In stark contrast to the undersuit, this large and armored coat is as white as snow, perfect for the bloodstains."
- icon_state = "soldier"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor_type = /datum/armor/suit_gautumn
-
-/datum/armor/suit_gautumn
- melee = 10
- bullet = 10
- laser = 20
- energy = 20
-
-/obj/item/clothing/suit/autumn
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "neo american officer's coat"
- desc = "In stark contrast to the undersuit, this coat is a greeny white colour, layered with slight protection against bullets and melee weapons."
- icon_state = "autumn"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor_type = /datum/armor/suit_autumn
-
-/datum/armor/suit_autumn
- melee = 10
- bullet = 10
-
-/obj/item/clothing/suit/texas
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "white suit coat"
- desc = "A white suit coat, perfect for fat oil barons."
- icon_state = "texas"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/cossack
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "ukrainian coat"
- desc = "Hop on your horse, dawn your really fluffy hat, and strap this coat to your back."
- icon_state = "kuban_cossak"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/corgisuit/en
- name = "\improper super-hero E-N suit"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "ensuit"
- supports_variations_flags = NONE
-
-/obj/item/clothing/suit/corgisuit/en/New()
- ..()
- START_PROCESSING(SSobj, src)
-
-/obj/item/clothing/suit/corgisuit/en/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/clothing/suit/corgisuit/en/process()
- if(prob(2))
- for(var/obj/object in orange(2,src))
- if(!object.anchored && (object.obj_flags & CONDUCTS_ELECTRICITY))
- step_towards(object,src)
- for(var/mob/living/silicon/S in orange(2,src))
- if(istype(S, /mob/living/silicon/ai)) continue
- step_towards(S,src)
- for(var/datum/species/synthetic/R in orange(2,src))
- step_towards(R,src)
-
-/obj/item/clothing/suit/trenchbrown
- name = "brown trenchcoat"
- desc = "A brown noir-inspired coat. Looks best if you're not wearing it over a baggy t-shirt."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "brtrenchcoat"
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/trenchblack
- name = "black trenchcoat"
- desc = "A matte-black coat. Best suited for space-italians, or maybe a monochrome-cop."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "bltrenchcoat"
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/apron/chef/colorable_apron
- name = "apron"
- desc = "A basic apron."
- icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- worn_icon = 'modular_skyrat/modules/GAGS/icons/suit/suit.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/GAGS/icons/suit/suit_teshari.dmi'
- icon_state = "apron"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- greyscale_colors = "#ffffff"
- greyscale_config = /datum/greyscale_config/apron
- greyscale_config_worn = /datum/greyscale_config/apron/worn
- greyscale_config_worn_teshari = /datum/greyscale_config/apron/worn/teshari
- greyscale_config_worn_better_vox = /datum/greyscale_config/apron/worn/newvox
- greyscale_config_worn_vox = /datum/greyscale_config/apron/worn/oldvox
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/suit/apron/overalls
- greyscale_config_worn_digi = /datum/greyscale_config/overalls/worn/digi
- greyscale_config_worn_better_vox = /datum/greyscale_config/overalls/worn/better_vox
- greyscale_config_worn_vox = /datum/greyscale_config/overalls/worn/vox
-
-/obj/item/clothing/suit/apron/overalls/Initialize(mapload)
- . = ..()
- allowed += list(
- /obj/item/flashlight,
- /obj/item/lighter,
- /obj/item/modular_computer/pda,
- /obj/item/radio,
- /obj/item/storage/bag/books,
- /obj/item/storage/fancy/cigarettes,
- /obj/item/tank/internals/emergency_oxygen,
- /obj/item/tank/internals/plasmaman,
- /obj/item/toy,
- /obj/item/analyzer,
- /obj/item/construction/rcd,
- /obj/item/fireaxe/metal_h2_axe,
- /obj/item/pipe_dispenser,
- /obj/item/storage/bag/construction,
- /obj/item/t_scanner,
- )
-
-/obj/item/clothing/suit/warm_sweater
- name = "warm sweater"
- desc = "A comfortable warm-looking sweater."
- icon_state = "warm_sweater"
- greyscale_config = /datum/greyscale_config/warm_sweater
- greyscale_config_worn = /datum/greyscale_config/warm_sweater/worn
- greyscale_colors = "#867361"
- flags_1 = IS_PLAYER_COLORABLE_1
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/suit/heart_sweater
- name = "heart sweater"
- desc = "A comfortable warm-looking sweater. It even has a heart pattern on it, how cute."
- icon_state = "heart_sweater"
- greyscale_config = /datum/greyscale_config/heart_sweater
- greyscale_config_worn = /datum/greyscale_config/heart_sweater/worn
- greyscale_colors = "#867361#8f3a3a"
- flags_1 = IS_PLAYER_COLORABLE_1
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm b/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm
deleted file mode 100644
index 8bccdd2f066..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/suits/trek.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-//Trek Jacket(s?)
-/obj/item/clothing/suit/fedcoat
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "Federation uniform jacket"
- desc = "A uniform jacket from the United Federation. Set phasers to awesome."
- icon_state = "fedcoat"
- inhand_icon_state = "coatsecurity"
- allowed = list(
- /obj/item/tank/internals/emergency_oxygen,
- /obj/item/flashlight,
- /obj/item/analyzer,
- /obj/item/radio,
- /obj/item/gun,
- /obj/item/melee/baton,
- /obj/item/restraints/handcuffs,
- /obj/item/reagent_containers/hypospray,
- /obj/item/hypospray,
- /obj/item/healthanalyzer,
- /obj/item/reagent_containers/syringe,
- /obj/item/reagent_containers/cup/vial,
- /obj/item/reagent_containers/cup/beaker,
- /obj/item/storage/pill_bottle,
- /obj/item/taperecorder)
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN|ARMS
- species_exception = list(/datum/species/golem)
-
-/obj/item/clothing/suit/fedcoat/medsci
- icon_state = "fedblue"
- inhand_icon_state = "coatmedical"
-
-/obj/item/clothing/suit/fedcoat/eng
- icon_state = "fedeng"
- inhand_icon_state = "coatengineer"
-
-/obj/item/clothing/suit/fedcoat/capt
- icon_state = "fedcapt"
- inhand_icon_state = "coatcaptain"
-
-//fedcoat but modern
-/obj/item/clothing/suit/fedcoat/modern
- name = "modern Federation uniform jacket"
- desc = "A modern uniform jacket from the United Federation."
- icon_state = "fedmodern"
- inhand_icon_state = "coatsecurity"
-
-/obj/item/clothing/suit/fedcoat/modern/medsci
- name = "modern medsci Federation jacket"
- icon_state = "fedmodernblue"
- inhand_icon_state = "coatmedical"
-
-/obj/item/clothing/suit/fedcoat/modern/eng
- name = "modern engineering Federation jacket"
- icon_state = "fedmoderneng"
- inhand_icon_state = "coatengineer"
-
-/obj/item/clothing/suit/fedcoat/modern/sec
- name = "modern security Federation jacket"
- icon_state = "fedmodernsec"
- inhand_icon_state = "coatcaptain"
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm b/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm
deleted file mode 100644
index c46118a8ecd..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/under/accessories.dm
+++ /dev/null
@@ -1,196 +0,0 @@
-/obj/item/clothing/accessory/badge
- name = "detective's badge"
- desc = "Security Department detective's badge, made from gold."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- icon_state = "badge"
- slot_flags = ITEM_SLOT_NECK
- attachment_slot = CHEST
-
- var/stored_name
- var/badge_string = "Corporate Security"
-
- drop_sound = 'modular_skyrat/master_files/sound/items/drop/ring.ogg'
- pickup_sound = 'modular_skyrat/master_files/sound/items/pickup/ring.ogg'
-
-/obj/item/clothing/accessory/badge/old
- name = "faded badge"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- desc = "A faded badge, backed with leather. It bears the emblem of the Forensic division."
- icon_state = "goldbadge"
-
-/obj/item/clothing/accessory/badge/proc/set_name(new_name)
- stored_name = new_name
- name = "[initial(name)] ([stored_name])"
-
-/obj/item/clothing/accessory/badge/proc/set_desc(mob/living/carbon/human/H)
-
-/obj/item/clothing/accessory/badge/attack_self(mob/user as mob)
-
- if(!stored_name)
- to_chat(user, "You polish your old badge fondly, shining up the surface.")
- set_name(user.real_name)
- return
-
- if(isliving(user))
- if(stored_name)
- user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [stored_name], [badge_string]."),span_notice("You display your [src.name].\nIt reads: [stored_name], [badge_string]."))
- else
- user.visible_message(span_notice("[user] displays their [src.name].\nIt reads: [badge_string]."),span_notice("You display your [src.name]. It reads: [badge_string]."))
-
-/obj/item/clothing/accessory/badge/attack(mob/living/carbon/human/M, mob/living/user)
- if(isliving(user))
- user.visible_message(span_danger("[user] invades [M]'s personal space, thrusting [src] into their face insistently."),span_danger("You invade [M]'s personal space, thrusting [src] into their face insistently."))
- user.do_attack_animation(M)
-
-// Sheriff Badge (toy)
-/obj/item/clothing/accessory/badge/sheriff
- name = "sheriff badge"
- desc = "This town ain't big enough for the two of us, pardner."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- icon_state = "sheriff"
-
-/obj/item/clothing/accessory/badge/sheriff/attack_self(mob/user as mob)
- user.visible_message("[user] shows their sheriff badge. There's a new sheriff in town!",\
- "You flash the sheriff badge to everyone around you!")
-
-/obj/item/clothing/accessory/badge/sheriff/attack(mob/living/carbon/human/M, mob/living/user)
- if(isliving(user))
- user.visible_message(span_danger("[user] invades [M]'s personal space, the sheriff badge into their face!."),span_danger("You invade [M]'s personal space, thrusting the sheriff badge into their face insistently."))
- user.do_attack_animation(M)
-
-//.Holobadges.
-/obj/item/clothing/accessory/badge/holo
- name = "holobadge"
- desc = "This glowing blue badge marks the holder as THE LAW."
- icon_state = "holobadge_lopland"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
-
-/obj/item/clothing/accessory/badge/holo/cord
- icon_state = "holobadge-cord"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
-
-/obj/item/clothing/accessory/badge/holo/attack_self(mob/user as mob)
- if(!stored_name)
- to_chat(user, "Waving around a holobadge before swiping an ID would be pretty pointless.")
- return
- return ..()
-
-/obj/item/clothing/accessory/badge/holo/emag_act(remaining_charges, mob/user)
- if(obj_flags & EMAGGED)
- balloon_alert(user, "already cracked")
- return FALSE
-
- obj_flags |= EMAGGED
- balloon_alert(user, "security checks cracked!")
- to_chat(user, span_danger("You crack the holobadge security checks."))
- return TRUE
-
-/obj/item/clothing/accessory/badge/holo/attackby(obj/item/object as obj, mob/user as mob)
- if(istype(object, /obj/item/card/id))
-
- var/obj/item/card/id/id_card = null
-
- if(istype(object, /obj/item/card/id))
- id_card = object
-
- if(ACCESS_SECURITY in id_card.access || (obj_flags & EMAGGED))
- to_chat(user, "You imprint your ID details onto the badge.")
- set_name(user.real_name)
- badge_string = id_card.assignment
- else
- to_chat(user, "[src] rejects your insufficient access rights.")
- return
- ..()
-
-/obj/item/storage/box/holobadge
- name = "holobadge box"
- desc = "A box claiming to contain holobadges."
-
-/obj/item/storage/box/holobadge/PopulateContents()
- . = ..()
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo/cord(src)
- new /obj/item/clothing/accessory/badge/holo/cord(src)
- return
-
-/obj/item/clothing/accessory/badge/holo/warden
- name = "warden's holobadge"
- desc = "A silver corporate security badge. Stamped with the words 'Warden.'"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- icon_state = "silverbadge"
- slot_flags = ITEM_SLOT_NECK
-
-/obj/item/clothing/accessory/badge/holo/hos
- name = "head of security's holobadge"
- desc = "An immaculately polished gold security badge. Labeled 'Head of Security.'"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- icon_state = "goldbadge"
- slot_flags = ITEM_SLOT_NECK
-
-/obj/item/clothing/accessory/badge/holo/detective
- name = "detective's holobadge"
- desc = "An immaculately polished gold security badge on leather. Labeled 'Detective.'"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
- icon_state = "marshalbadge"
- slot_flags = ITEM_SLOT_NECK
-
-/obj/item/storage/box/holobadge/hos
- name = "holobadge box"
- desc = "A box claiming to contain holobadges."
-
-/obj/item/storage/box/holobadge/hos/PopulateContents()
- . = ..()
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo(src)
- new /obj/item/clothing/accessory/badge/holo/warden(src)
- new /obj/item/clothing/accessory/badge/holo/detective(src)
- new /obj/item/clothing/accessory/badge/holo/detective(src)
- new /obj/item/clothing/accessory/badge/holo/hos(src)
- new /obj/item/clothing/accessory/badge/holo/cord(src)
- return
-
-// The newbie pin
-/obj/item/clothing/accessory/green_pin
- name = "green pin"
- desc = "A pin given to newly hired personnel on deck."
- icon_state = "green"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
-
-/obj/item/clothing/accessory/green_pin/examine(mob/user)
- . = ..()
- // How many hours of playtime left until the green pin expires
- var/green_time_remaining = sanitize_integer((PLAYTIME_GREEN - user.client?.get_exp_living(pure_numeric = TRUE) / 60), 0, (PLAYTIME_GREEN / 60))
- if(green_time_remaining > 0)
- . += span_nicegreen("It reads '[green_time_remaining] hour[green_time_remaining >= 2 ? "s" : ""].'")
-
-// Pride Pin Over-ride
-/obj/item/clothing/accessory/pride
- icon = 'modular_skyrat/master_files/icons/obj/clothing/accessories.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/accessories.dmi'
-
-GLOBAL_LIST_INIT(pride_pin_reskins, list(
- "Rainbow Pride" = "pride",
- "Bisexual Pride" = "pride_bi",
- "Pansexual Pride" = "pride_pan",
- "Asexual Pride" = "pride_ace",
- "Non-binary Pride" = "pride_enby",
- "Transgender Pride" = "pride_trans",
- "Intersex Pride" = "pride_intersex",
- "Lesbian Pride" = "pride_lesbian",
- "Man-Loving-Man / Gay Pride" = "pride_mlm",
- "Genderfluid Pride" = "pride_genderfluid",
- "Genderqueer Pride" = "pride_genderqueer",
- "Aromantic Pride" = "pride_aromantic",
-))
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm
deleted file mode 100644
index ba6e00c6f8f..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/clothing/under/misc/bluetracksuit
- name = "blue tracksuit"
- desc = "Found on a dead homeless man squatting in an alleyway, the classic design has been mass produced to bring terror to the galaxy."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- icon_state = "tracksuit_blue"
-
-/obj/item/clothing/under/tachawaiian
- name = "orange tactical hawaiian outfit"
- desc = "Clearly the wearer didn't know if they wanted to invade a country or lay on a nice Hawaiian beach."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- icon_state = "tacticool_hawaiian_orange"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
-
-/obj/item/clothing/under/tachawaiian/blue
- name = "blue tactical hawaiian outfit"
- icon_state = "tacticool_hawaiian_blue"
-
-/obj/item/clothing/under/tachawaiian/purple
- name = "purple tactical hawaiian outfit"
- icon_state = "tacticool_hawaiian_purple"
-
-/obj/item/clothing/under/tachawaiian/green
- name = "green tactical hawaiian outfit"
- icon_state = "tacticool_hawaiian_green"
-
-/obj/item/clothing/under/texas
- name = "texan formal outfit"
- desc = "A premium quality shirt and pants combo straight from Texas."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- icon_state = "texas"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/doug_dimmadome
- name = "dimmadome formal outfit"
- desc = "A tight fitting suit with a belt that is surely made out of gold."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- icon_state = "doug_dimmadome"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/pants/tactical
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi'
- name = "tactical pants"
- desc = "A pair of tactical pants, designed for military use."
- icon_state = "tactical_pants"
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/security.dm b/modular_skyrat/modules/customization/modules/clothing/under/security.dm
deleted file mode 100644
index ffbbcdcccc3..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/under/security.dm
+++ /dev/null
@@ -1,117 +0,0 @@
-// MODULAR SECURITY WEAR (NOT OVERRIDES, LOOK IN 'modular_skyrat\modules\goofsec\code\sec_clothing_overrides.dm')
-
-// DETECTIVE
-/obj/item/clothing/under/rank/security/detective/cowboy
- name = "blonde cowboy uniform"
- desc = "A blue shirt and dark jeans, with a pair of spurred cowboy boots to boot."
- icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/uniform.dmi' //Donator item-ish? See the /armorless one below it
- worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/uniform.dmi'
- icon_state = "cowboy_uniform"
- supports_variations_flags = NONE
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/detective/cowboy/armorless //Donator variant, just uses the sprite.
- armor_type = /datum/armor/clothing_under/none
-
-/obj/item/clothing/suit/cowboyvest
- name = "blonde cowboy vest"
- desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "cowboy_vest"
- body_parts_covered = CHEST|ARMS
- cold_protection = CHEST|ARMS
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- heat_protection = CHEST|ARMS
-
-/obj/item/clothing/suit/jacket/det_suit/cowboyvest
- name = "blonde cowboy vest"
- desc = "A white cream vest lined with... fur, of all things, for desert weather. There's a small deer head logo sewn into the vest."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "cowboy_vest"
- body_parts_covered = CHEST|ARMS
- cold_protection = CHEST|ARMS
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- heat_protection = CHEST|ARMS
-
-/obj/item/clothing/under/rank/security/detective/runner
- name = "runner sweater"
- desc = "\"You look lonely.\" "
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
- icon_state = "runner"
- supports_variations_flags = NONE
- can_adjust = FALSE
-
-/// PRISONER
-/obj/item/clothing/under/rank/prisoner/protcust
- name = "protective custody prisoner jumpsuit"
- desc = "A mustard coloured prison jumpsuit, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#FFB600"
-
-/obj/item/clothing/under/rank/prisoner/skirt/protcust
- name = "protective custody prisoner jumpskirt"
- desc = "A mustard coloured prison jumpskirt, often worn by former Security members, informants and former CentCom employees. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#FFB600"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/rank/prisoner/lowsec
- name = "low security prisoner jumpsuit"
- desc = "A pale, almost creamy prison jumpsuit, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#AB9278"
-
-/obj/item/clothing/under/rank/prisoner/skirt/lowsec
- name = "low security prisoner jumpskirt"
- desc = "A pale, almost creamy prison jumpskirt, this one denotes a low security prisoner, things like fraud and anything white collar. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#AB9278"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/rank/prisoner/highsec
- name = "high risk prisoner jumpsuit"
- desc = "A bright red prison jumpsuit, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#FF3400"
-
-/obj/item/clothing/under/rank/prisoner/skirt/highsec
- name = "high risk prisoner jumpskirt"
- desc = "A bright red prison jumpskirt, depending on who sees it, either a badge of honour or a sign to avoid. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#FF3400"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/rank/prisoner/supermax
- name = "supermax prisoner jumpsuit"
- desc = "A dark crimson red prison jumpsuit, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#992300"
-
-/obj/item/clothing/under/rank/prisoner/skirt/supermax
- name = "supermax prisoner jumpskirt"
- desc = "A dark crimson red prison jumpskirt, for the worst of the worst, or the Clown. Its suit sensors are stuck in the \"Fully On\" position."
- greyscale_colors = "#992300"
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/rank/prisoner/classic
- name = "classic prisoner jumpsuit"
- desc = "A black and white striped jumpsuit, like something out of a movie."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/costume.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/costume.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/under/costume_digi.dmi'
- icon_state = "prisonerclassic"
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_config_worn = null
- supports_variations_flags = NONE
-
-/obj/item/clothing/under/rank/prisoner/syndicate
- name = "syndicate prisoner jumpsuit"
- desc = "A crimson red jumpsuit worn by syndicate captives. Its sensors have been shorted out."
- greyscale_colors = "#992300"
- has_sensor = FALSE
-
-/obj/item/clothing/under/rank/prisoner/skirt/syndicate
- name = "syndicate prisoner jumpskirt"
- desc = "A crimson red jumpskirt worn by syndicate captives. Its sensors have been shorted out."
- greyscale_colors = "#992300"
- has_sensor = FALSE
- supports_variations_flags = NONE
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm b/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm
deleted file mode 100644
index d5c805a4ea3..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/other_port.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-
-/obj/item/clothing/suit/costume/samurai
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- name = "samurai armor"
- desc = "A set of ancient-Japan Samurai armor. Despite being a cheap replica, it's still remarkably heavy."
- icon_state = "samurai"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/costume/kabuto
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- name = "kabuto"
- desc = "An ancient-Japan armored helmet - or a replica of one, at least."
- icon_state = "kabuto"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
diff --git a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md b/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md
deleted file mode 100644
index 1b753df4d6d..00000000000
--- a/modular_skyrat/modules/customization/modules/clothing/under/utility_port/readme.md
+++ /dev/null
@@ -1,47 +0,0 @@
-## Title: Utility Port
-
-MODULE ID: utility_port
-
-### Description:
-
-Ports several outfits from citbase, with the highlight being Utility Uniforms: dark-grey jumpsuits with departmental markings, with the same stats as the department's default jumpsuit.
-It also ports:
- Other "utility" uniforms such as a gas/chemical hazard uniform;
- Japanese and Victorian costumes;
- Two short dresses;
- Several departmental/head-of-staff berets;
-All items are avaliable through either the Loadout, Vendors, or Both.
-
-
-PART 2!
-Ports the rest of what I was given with the utility uniforms, namely the Suits that go with all the previously added outfits. Also tweaks some of the previously added items (i.e., making the gas/chemical haz-uniform actually acidproof)
-
-### TG Proc/File Changes:
-
-To show items in vendors:
-- core/modules/vending/autodrobe.dm
-- core/modules/vending/clothesmate.dm
-- core/modules/vending/wardrobes.dm
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-To add digitigrade variants:
-- Skyrat-tg/modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi
-- Skyrat-tg/modular_skyrat/master_files/icons/mob/clothing/under/uniform_digi.dmi
-
-### Included files that are not contained in this module:
-
-Modifications to:
-- modules/client/loadout/head.dm
-- modules/client/loadout/uniform.dm
-- icons/mob/clothing/uniform.dmi
-- icons/obj/clothing/uniforms.dmi
-
-### Credits:
-
-Orion_the_Fox, with help from SarmentiCampbell
-Sprites taken from https://github.com/Citadel-Station-13/Citadel-Station-13/pull/13475
\ No newline at end of file
diff --git a/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm b/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm
deleted file mode 100644
index 9fdf3ab1e19..00000000000
--- a/modular_skyrat/modules/customization/modules/hydroponics/grown/bananaspider.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/seeds/banana/spider_banana
- name = "pack of leggy banana seeds"
- desc = "They're seeds that grow into banana trees. However, those bananas might be alive."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/seeds.dmi'
- icon_state = "seed-spibanana"
- species = "spibanana"
- growing_icon = 'modular_skyrat/master_files/icons/obj/hydroponics/growing.dmi'
- icon_grow = "spibanana-grow"
- icon_dead = "spibanana-dead"
- icon_harvest = "spibanana-harvest"
- plantname = "Leggy Banana Tree"
- product = /obj/item/food/grown/banana/banana_spider_spawnable
- genes = list(/datum/plant_gene/trait/slip)
-
-/obj/item/food/grown/banana/banana_spider_spawnable
- name = "banana spider"
- desc = "You do not know what it is, but you can bet the clown would love it."
- icon = 'modular_skyrat/master_files/icons/obj/hydroponics/harvest.dmi'
- icon_state = "spibanana"
- foodtypes = GORE | MEAT | RAW | FRUIT
- var/awakening = FALSE
-
-/obj/item/food/grown/banana/banana_spider_spawnable/attack_self(mob/user)
- if(awakening || isspaceturf(user.loc))
- return
- to_chat(user, span_notice("You decide to wake up the banana spider..."))
- awakening = TRUE
- addtimer(CALLBACK(src, PROC_REF(spawnspider)), 8 SECONDS)
-
-/obj/item/food/grown/banana/banana_spider_spawnable/proc/spawnspider()
- if(!QDELETED(src))
- var/mob/living/basic/banana_spider/banana_spider = new(get_turf(loc))
- banana_spider.visible_message(span_notice("The banana spider chitters as it stretches its legs"))
- qdel(src)
-
diff --git a/modular_skyrat/modules/customization/modules/language/skrell.dm b/modular_skyrat/modules/customization/modules/language/skrell.dm
deleted file mode 100644
index e4ccfabb2a7..00000000000
--- a/modular_skyrat/modules/customization/modules/language/skrell.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/datum/language/skrell
- name = "Skrelluq"
- desc = "Popularly known as \"Skrellian\" by foreigners, this newly-discovered language that the Skrell employ follows no traditional speech patterns. It relies on various differently-pitched warbles and low-frequency sound to construct different sentences, and is nearly inaudible to non-Skrell and anyone lacking an appropriate implant."
- space_chance = 100
- flags = TONGUELESS_SPEECH
- key = "K"
- syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
- default_priority = 90
- icon_state = "skrell"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
diff --git a/modular_skyrat/modules/customization/modules/language/vox.dm b/modular_skyrat/modules/customization/modules/language/vox.dm
deleted file mode 100644
index 228a29fd5cf..00000000000
--- a/modular_skyrat/modules/customization/modules/language/vox.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/datum/language/vox
- name = "Vox Standard"
- desc = "A form of hybrid encoded language employed by the biomechanical Vox species, characterized by sounding extremely annoying and irritating to those who don't recognize it. It usually requires an implant to be spoken in its entirety."
- key = "V"
- flags = TONGUELESS_SPEECH
- space_chance = 40
- syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah","SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
- icon_state = "vox-pidgin"
- icon = 'modular_skyrat/master_files/icons/misc/language.dmi'
- default_priority = 99
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
deleted file mode 100644
index e4f05a3b205..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/ears.dm
+++ /dev/null
@@ -1,404 +0,0 @@
-/datum/sprite_accessory/ears
- key = "ears"
- generic = "Ears"
- organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant
- relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
- color_src = USE_MATRIXED_COLORS
- genetic = TRUE
-
-/datum/sprite_accessory/ears/is_hidden(mob/living/carbon/human/wearer)
- if(!wearer.head)
- return FALSE
-
- // Can hide if wearing hat
- if(key in wearer.try_hide_mutant_parts)
- return TRUE
-
- // Exception for MODs
- if(istype(wearer.head, /obj/item/clothing/head/mod))
- return FALSE
-
- // Hide accessory if flagged to do so
- if((wearer.head?.flags_inv & HIDEHAIR || wearer.wear_mask?.flags_inv & HIDEHAIR) \
- // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks
- && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS))))
- return TRUE
-
- return FALSE
-
-/datum/sprite_accessory/ears/cat
- recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL)
- relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/fox
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears.dmi'
- organ_type = /obj/item/organ/external/ears // SET BACK TO THIS AS SOON AS WE GET EARS AS EXTERNAL ORGANS: organ_type = /obj/item/organ/internal/ears/mutant
- color_src = USE_MATRIXED_COLORS
- recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_HUMANOID, SPECIES_GHOUL)
- uses_emissives = TRUE
-
-/datum/sprite_accessory/ears/mutant/none
- name = "None"
- icon_state = "none"
- color_src = null
- factual = FALSE
-
-/datum/sprite_accessory/ears/mutant/big
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi'
-
-/datum/sprite_accessory/ears/mutant/vulpkanin
- recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_VULP, SPECIES_HUMANOID, SPECIES_GHOUL)
-
-/datum/sprite_accessory/ears/mutant/tajaran
- recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_TAJARAN, SPECIES_HUMANOID, SPECIES_GHOUL)
-
-/datum/sprite_accessory/ears/mutant/akula
- recommended_species = list(SPECIES_MAMMAL, SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_AQUATIC, SPECIES_AKULA, SPECIES_HUMANOID, SPECIES_GHOUL)
-
-/datum/sprite_accessory/ears/mutant/axolotl
- name = "Axolotl"
- icon_state = "axolotl"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/bat
- name = "Bat"
- icon_state = "bat"
-
-/datum/sprite_accessory/ears/mutant/bear
- name = "Bear"
- icon_state = "bear"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/bigwolf
- name = "Big Wolf"
- icon_state = "bigwolf"
-
-/datum/sprite_accessory/ears/mutant/bigwolfinner
- name = "Big Wolf (ALT)"
- icon_state = "bigwolfinner"
- hasinner = TRUE
-
-/datum/sprite_accessory/ears/mutant/bigwolfdark //alphabetical sort ignored here for ease-of-use
- name = "Dark Big Wolf"
- icon_state = "bigwolfdark"
-
-/datum/sprite_accessory/ears/mutant/bigwolfinnerdark
- name = "Dark Big Wolf (ALT)"
- icon_state = "bigwolfinnerdark"
- hasinner = TRUE
-
-/datum/sprite_accessory/ears/mutant/bunny
- name = "Bunny"
- icon_state = "bunny"
-
-/datum/sprite_accessory/ears/mutant/tajaran/catbig
- name = "Cat, Big"
- icon_state = "catbig"
-
-/datum/sprite_accessory/ears/mutant/tajaran/catnormal
- name = "Cat, normal"
- icon_state = "catnormal"
-
-/datum/sprite_accessory/ears/mutant/cow
- name = "Cow"
- icon_state = "cow"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/curled
- name = "Curled Horn"
- icon_state = "horn1"
- color_src = USE_ONE_COLOR
- default_color = DEFAULT_TERTIARY
-
-/datum/sprite_accessory/ears/mutant/deer
- name = "Deer (Antler)"
- icon_state = "deer"
- color_src = USE_ONE_COLOR
- default_color = DEFAULT_TERTIARY
-
-/datum/sprite_accessory/ears/mutant/eevee
- name = "Eevee"
- icon_state = "eevee"
-
-/datum/sprite_accessory/ears/mutant/eevee_alt
- name = "Eevee ALT"
- icon_state = "eevee_alt"
- color_src = USE_MATRIXED_COLORS
-
-/datum/sprite_accessory/ears/mutant/elf
- name = "Elf"
- icon_state = "elf"
- color_src = USE_ONE_COLOR
- default_color = DEFAULT_SKIN_OR_PRIMARY
-
-/datum/sprite_accessory/ears/mutant/elf/wide
- name = "Wide Elf"
- icon_state = "elfwide"
-
-/datum/sprite_accessory/ears/mutant/elf/broad
- name = "Broad Elf"
- icon_state = "elfbroad"
-
-/datum/sprite_accessory/ears/mutant/elf/longer
- name = "Longer Elf"
- icon_state = "elflonger"
-
-/datum/sprite_accessory/ears/mutant/elephant
- name = "Elephant"
- icon_state = "elephant"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/fennec
- name = "Fennec"
- icon_state = "fennec"
-
-/datum/sprite_accessory/ears/mutant/fish
- name = "Fish"
- icon_state = "fish"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/vulpkanin/fox
- name = "Fox"
- icon_state = "fox"
-
-/datum/sprite_accessory/ears/mutant/akula/hammerhead
- name = "Hammerhead"
- icon_state = "hammerhead"
-
-/datum/sprite_accessory/ears/mutant/husky
- name = "Husky"
- icon_state = "wolf"
-
-/datum/sprite_accessory/ears/mutant/jellyfish
- name = "Jellyfish"
- icon_state = "jellyfish"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/kangaroo
- name = "Kangaroo"
- icon_state = "kangaroo"
-
-/datum/sprite_accessory/ears/mutant/lab
- name = "Dog, Long"
- icon_state = "lab"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/murid
- name = "Murid"
- icon_state = "murid"
-
-/datum/sprite_accessory/ears/mutant/vulpkanin/otie
- name = "Otusian"
- icon_state = "otie"
-
-/datum/sprite_accessory/ears/mutant/protogen
- name = "Protogen"
- icon_state = "protogen"
-
-/datum/sprite_accessory/ears/mutant/rabbit
- name = "Rabbit"
- icon_state = "rabbit"
-
-/datum/sprite_accessory/ears/mutant/big/hare_large
- name = "Rabbit (Large)"
- icon_state = "bunny_large"
-
-/datum/sprite_accessory/ears/mutant/big/bunny_large
- name = "Curved Rabbit Ears (Large)"
- icon_state = "rabbit_large"
-
-/datum/sprite_accessory/ears/mutant/big/sandfox_large
- name = "Sandfox (Large)"
- icon_state = "sandfox_large"
-
-/datum/sprite_accessory/ears/mutant/pede
- name = "Scolipede"
- icon_state = "pede"
-
-/datum/sprite_accessory/ears/mutant/akula/sergal
- name = "Sergal"
- icon_state = "sergal"
-
-/datum/sprite_accessory/ears/mutant/skunk
- name = "skunk"
- icon_state = "skunk"
-
-/datum/sprite_accessory/ears/mutant/squirrel
- name = "Squirrel"
- icon_state = "squirrel"
-
-/datum/sprite_accessory/ears/mutant/vulpkanin/wolf
- name = "Wolf"
- icon_state = "wolf"
-
-/datum/sprite_accessory/ears/mutant/vulpkanin/perky
- name = "Perky"
- icon_state = "perky"
-
-/datum/sprite_accessory/ears/mutant/antenna_simple1
- name = "Insect antenna (coloring 2)"
- icon_state = "antenna_simple1"
-
-/datum/sprite_accessory/ears/mutant/antenna_simple1_v2
- name = "Insect antenna (coloring 3)"
- icon_state = "antenna_simple1v2"
-
-/datum/sprite_accessory/ears/mutant/antenna_simple2
- name = "Insect antenna 2 (coloring 2)"
- icon_state = "antenna_simple2"
-
-/datum/sprite_accessory/ears/mutant/antenna_simple2_v2
- name = "Insect antenna 2 (coloring 3)"
- icon_state = "antenna_simple2v2"
-
-/datum/sprite_accessory/ears/mutant/antenna_fuzzball
- name = "Fuzzball antenna (coloring 2+3)"
- icon_state = "antenna_fuzzball"
-
-/datum/sprite_accessory/ears/mutant/antenna_fuzzball_v2
- name = "Fuzzball antenna (coloring 3+1)"
- icon_state = "antenna_fuzzballv2"
-
-/datum/sprite_accessory/ears/mutant/cobrahood
- name = "Cobra Hood"
- icon_state = "cobrahood"
-
-/datum/sprite_accessory/ears/mutant/cobrahoodears
- name = "Cobra Hood (Ears)"
- icon_state = "cobraears"
-
-/datum/sprite_accessory/ears/mutant/miqote
- name = "Miqo'te"
- icon_state = "miqote"
-
-/datum/sprite_accessory/ears/mutant/hare
- name = "Hare"
- icon_state = "rabbitalt"
-
-/datum/sprite_accessory/ears/mutant/bunnyalt
- name = "Curved Rabbit Ears"
- icon_state = "bunnyalt"
-
-/datum/sprite_accessory/ears/mutant/deerear
- name = "Deer (ear)"
- icon_state = "deerear"
-
-/datum/sprite_accessory/ears/mutant/teshari
- recommended_species = list(SPECIES_TESHARI, SPECIES_TESHARI_ALT) //FLUFFY FRONTIER EDIT - TESHARI_REBORN
-
-/datum/sprite_accessory/ears/mutant/teshari/regular
- name = "Teshari Regular"
- icon_state = "teshari_regular"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_bushy
- name = "Teshari Feathers Bushy"
- icon_state = "teshari_feathers_bushy"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_mohawk
- name = "Teshari Feathers Mohawk"
- icon_state = "teshari_feathers_mohawk"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_spiky
- name = "Teshari Feathers Spiky"
- icon_state = "teshari_feathers_spiky"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_pointy
- name = "Teshari Feathers Pointy"
- icon_state = "teshari_feathers_pointy"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_upright
- name = "Teshari Feathers Upright"
- icon_state = "teshari_feathers_upright"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_mane
- name = "Teshari Feathers Mane"
- icon_state = "teshari_feathers_mane"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_maneless
- name = "Teshari Feathers Mane Fluffless"
- icon_state = "teshari_feathers_maneless"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_droopy
- name = "Teshari Feathers Droopy"
- icon_state = "teshari_feathers_droopy"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_longway
- name = "Teshari Feathers Longway"
- icon_state = "teshari_feathers_longway"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_tree
- name = "Teshari Feathers Tree"
- icon_state = "teshari_feathers_tree"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_ponytail
- name = "Teshari Feathers Ponytail"
- icon_state = "teshari_feathers_ponytail"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_mushroom
- name = "Teshari Feathers Mushroom"
- icon_state = "teshari_feathers_mushroom"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_backstrafe
- name = "Teshari Feathers Backstrafe"
- icon_state = "teshari_feathers_backstrafe"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmohawk
- name = "Teshari Feathers Thin Mohawk"
- icon_state = "teshari_feathers_thinmohawk"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_thin
- name = "Teshari Feathers Thin"
- icon_state = "teshari_feathers_thin"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmane
- name = "Teshari Feathers Thin Mane"
- icon_state = "teshari_feathers_thinmane"
-
-/datum/sprite_accessory/ears/mutant/teshari/feathers_thinmaneless
- name = "Teshari Feathers Thin Mane Fluffless"
- icon_state = "teshari_feathers_thinmaneless"
-
-/datum/sprite_accessory/ears/mutant/deer2
- name = "Deer 2"
- icon_state = "deer2"
- color_src = USE_ONE_COLOR
-
-/datum/sprite_accessory/ears/mutant/mouse
- name = "Mouse"
- icon_state = "mouse"
-
-/datum/sprite_accessory/ears/mutant/mouse_two
- name = "Mouse II"
- icon_state = "mouse_two"
-
-/datum/sprite_accessory/ears/mutant/big/fourears1
- name = "Four Ears 1"
- icon_state = "four_ears_1"
-
-/datum/sprite_accessory/ears/mutant/fourears2
- name = "Four Ears 2"
- icon_state = "four_ears_2"
-
-/datum/sprite_accessory/ears/mutant/big/fourears3
- name = "Four Ears 3"
- icon_state = "four_ears_3"
-
-/datum/sprite_accessory/ears/acrador
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/ears_big.dmi'
- color_src = USE_MATRIXED_COLORS
-
-/datum/sprite_accessory/ears/acrador/long
- icon_state = "acrador_long"
- name = "Acrador (Long)"
-
-/datum/sprite_accessory/ears/acrador/short
- icon_state = "acrador_short"
- name = "Acrador (Short)"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm
deleted file mode 100644
index 991a09f9bc5..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/fluff.dm
+++ /dev/null
@@ -1,125 +0,0 @@
-/datum/sprite_accessory/fluff/moth
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/moth_fluff.dmi'
- default_color = "#FFFFFF"
- key = "fluff"
- generic = "Fluff"
- recommended_species = list(SPECIES_MOTH, SPECIES_MAMMAL, SPECIES_INSECT)
- relevent_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
- genetic = TRUE
- organ_type = /obj/item/organ/external/fluff
-
-/datum/sprite_accessory/fluff/moth/none
- name = "None"
- icon_state = "none"
-
-/datum/sprite_accessory/fluff/moth/is_hidden(mob/living/carbon/human/human)
- if((human.head?.flags_inv & HIDEHAIR) || (human.wear_mask?.flags_inv & HIDEHAIR))
- return TRUE
-
- return FALSE
-
-/datum/sprite_accessory/fluff/moth/plain
- name = "Plain"
- icon_state = "plain"
-
-/datum/sprite_accessory/fluff/moth/monarch
- name = "Monarch"
- icon_state = "monarch"
-
-/datum/sprite_accessory/fluff/moth/luna
- name = "Luna"
- icon_state = "luna"
-
-/datum/sprite_accessory/fluff/moth/atlas
- name = "Atlas"
- icon_state = "atlas"
-
-/datum/sprite_accessory/fluff/moth/reddish
- name = "Reddish"
- icon_state = "redish"
-
-/datum/sprite_accessory/fluff/moth/royal
- name = "Royal"
- icon_state = "royal"
-
-/datum/sprite_accessory/fluff/moth/gothic
- name = "Gothic"
- icon_state = "gothic"
-
-/datum/sprite_accessory/fluff/moth/lovers
- name = "Lovers"
- icon_state = "lovers"
-
-/datum/sprite_accessory/fluff/moth/whitefly
- name = "White Fly"
- icon_state = "whitefly"
-
-/datum/sprite_accessory/fluff/moth/punished
- name = "Burnt Off"
- icon_state = "punished"
- locked = TRUE
-
-/datum/sprite_accessory/fluff/moth/firewatch
- name = "Firewatch"
- icon_state = "firewatch"
-
-/datum/sprite_accessory/fluff/moth/deathhead
- name = "Deathshead"
- icon_state = "deathhead"
-
-/datum/sprite_accessory/fluff/moth/poison
- name = "Poison"
- icon_state = "poison"
-
-/datum/sprite_accessory/fluff/moth/ragged
- name = "Ragged"
- icon_state = "ragged"
-
-/datum/sprite_accessory/fluff/moth/moonfly
- name = "Moon Fly"
- icon_state = "moonfly"
-
-/datum/sprite_accessory/fluff/moth/snow
- name = "Snow"
- icon_state = "snow"
-
-/datum/sprite_accessory/fluff/moth/oakworm
- name = "Oak Worm"
- icon_state = "oakworm"
-
-/datum/sprite_accessory/fluff/moth/jungle
- name = "Jungle"
- icon_state = "jungle"
-
-/datum/sprite_accessory/fluff/moth/witchwing
- name = "Witch Wing"
- icon_state = "witchwing"
-
-/datum/sprite_accessory/fluff/moth/insectm
- name = "Insect male (Tertiary)"
- icon_state = "insectm"
- default_color = DEFAULT_TERTIARY
-
-/datum/sprite_accessory/fluff/moth/insectf
- name = "Insect female (Tertiary)"
- icon_state = "insectf"
- default_color = DEFAULT_TERTIARY
-
-/datum/sprite_accessory/fluff/moth/fsnow
- name = "Snow (Top)"
- icon_state = "fsnow"
-
-/datum/sprite_accessory/fluff/moth/snowdual
- name = "Snow (Dual-Color)"
- icon_state = "snowdual"
- color_src = USE_MATRIXED_COLORS
-
-/datum/sprite_accessory/fluff/moth/teshari
- name = "Teshari Mane"
- icon_state = "teshmane"
- default_color = DEFAULT_TERTIARY
-
-/datum/sprite_accessory/fluff/moth/teshari/front
- name = "Teshari Mane (Top)"
- icon_state = "teshmane_top"
- default_color = DEFAULT_TERTIARY
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm
deleted file mode 100644
index 3ad2ddbf492..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/frills.dm
+++ /dev/null
@@ -1,55 +0,0 @@
-/datum/sprite_accessory/frills
- key = "frills"
- generic = "Frills"
- default_color = DEFAULT_SECONDARY
- relevent_layers = list(BODY_ADJ_LAYER)
- genetic = TRUE
- organ_type = /obj/item/organ/external/frills
-
-/datum/sprite_accessory/frills/is_hidden(mob/living/carbon/human/human)
- if((human.head?.flags_inv & HIDEEARS) || (key in human.try_hide_mutant_parts))
- return TRUE
-
- return FALSE
-
-/datum/sprite_accessory/frills/divinity
- name = "Divinity"
- icon_state = "divinity"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
-
-/datum/sprite_accessory/frills/horns
- name = "Horns"
- icon_state = "horns"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
-
-/datum/sprite_accessory/frills/hornsdouble
- name = "Horns Double"
- icon_state = "hornsdouble"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
-
-/datum/sprite_accessory/frills/big
- name = "Big"
- icon_state = "big"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
-
-/datum/sprite_accessory/frills/cobrahood
- name = "Cobra Hood"
- icon_state = "cobrahood"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
- color_src = USE_MATRIXED_COLORS
-
-/datum/sprite_accessory/frills/cobrahoodears
- name = "Cobra Hood (Ears)"
- icon_state = "cobraears"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
- color_src = USE_MATRIXED_COLORS
-
-/datum/sprite_accessory/frills/neckfrills
- name = "Neck Frills"
- icon_state = "neck"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
-
-/datum/sprite_accessory/frills/neckfrillsfuller
- name = "Neck Frills (Fuller)"
- icon_state = "neckfull"
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/frills.dmi'
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
deleted file mode 100644
index f5d314f1793..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
+++ /dev/null
@@ -1,308 +0,0 @@
-/// The alternative `dimension_x` to use if it's a taur.
-#define TAUR_DIMENSION_X 64
-
-/datum/sprite_accessory/genital
- special_render_case = TRUE
- special_colorize = TRUE
- var/associated_organ_slot
- /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors.
- var/has_skintone_shading = FALSE
- ///Where the genital is on the body. If clothing doesn't cover it, it shows up!
- var/genital_location = GROIN
-
-/datum/sprite_accessory/genital/is_hidden(mob/living/carbon/human/target_mob)
- var/obj/item/organ/external/genital/badonkers = target_mob.get_organ_slot(associated_organ_slot)
- if(!badonkers)
- return TRUE
- switch(badonkers.visibility_preference)
- if(GENITAL_ALWAYS_SHOW) //Never hidden
- return FALSE
- if(GENITAL_HIDDEN_BY_CLOTHES) //Hidden if the relevant body parts are covered by clothes or underwear
- //Do they have a Uniform or Suit that covers them?
- if((target_mob.w_uniform && target_mob.w_uniform.body_parts_covered & genital_location) || (target_mob.wear_suit && target_mob.wear_suit.body_parts_covered & genital_location))
- return TRUE
- //Do they have a Hospital Gown covering them? (The gown has no body_parts_covered so needs its own check)
- if(istype(target_mob.wear_suit, /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown))
- return TRUE
-
- //Are they wearing an Undershirt?
- if(target_mob.undershirt != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_SHIRT))
- var/datum/sprite_accessory/undershirt/worn_undershirt = GLOB.undershirt_list[target_mob.undershirt]
- //Does this Undershirt cover a relevant slot?
- if(genital_location == CHEST) //(Undershirt always covers chest)
- return TRUE
-
- else if(genital_location == GROIN && worn_undershirt.hides_groin)
- return TRUE
-
- //Undershirt didn't cover them, are they wearing Underwear?
- if(target_mob.underwear != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_UNDIES))
- var/datum/sprite_accessory/underwear/worn_underwear = GLOB.underwear_list[target_mob.underwear]
- //Does this Underwear cover a relevant slot?
- if(genital_location == GROIN) //(Underwear always covers groin)
- return TRUE
-
- else if(genital_location == CHEST && worn_underwear.hides_breasts)
- return TRUE
-
- //Are they wearing a bra?
- if(target_mob.bra != "Nude" && !(target_mob.underwear_visibility & UNDERWEAR_HIDE_BRA) && genital_location == CHEST)
- return TRUE
-
- //Nothing they're wearing will cover them
- else
- return FALSE
-
- //If not always shown or hidden by clothes, then it defaults to always hidden
- else
- return TRUE
-
-/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human)
- var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot)
- return "[genital?.sprite_suffix]"
-
-/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state)
- var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot)
- if(genital?.uses_skin_color && HAS_TRAIT(human, TRAIT_USES_SKINTONES))
- return skintone2hex(human.skin_tone)
-
-/datum/sprite_accessory/genital/penis
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi'
- organ_type = /obj/item/organ/external/genital/penis
- associated_organ_slot = ORGAN_SLOT_PENIS
- key = ORGAN_SLOT_PENIS
- color_src = USE_MATRIXED_COLORS
- always_color_customizable = TRUE
- center = TRUE
- special_icon_case = TRUE
- special_x_dimension = TRUE
- //default_color = DEFAULT_SKIN_OR_PRIMARY //This is the price we're paying for sheaths
- relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
- genetic = TRUE
- var/can_have_sheath = TRUE
-
-/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/target_mob)
- var/taur_mode = target_mob?.get_taur_mode()
-
- if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
- return icon
-
- return 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi'
-
-/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/target_mob)
- var/taur_mode = target_mob?.get_taur_mode()
-
- if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
- return dimension_x
-
- return TAUR_DIMENSION_X
-
-/datum/sprite_accessory/genital/penis/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/penis/human
- icon_state = "human"
- name = "Human"
- color_src = USE_ONE_COLOR
- default_color = DEFAULT_SKIN_OR_PRIMARY
- has_skintone_shading = TRUE
- can_have_sheath = FALSE
-
-/datum/sprite_accessory/genital/penis/nondescript
- icon_state = "nondescript"
- name = "Nondescript"
-
-/datum/sprite_accessory/genital/penis/knotted
- icon_state = "knotted"
- name = "Knotted"
-
-/datum/sprite_accessory/genital/penis/flared
- icon_state = "flared"
- name = "Flared"
-
-/datum/sprite_accessory/genital/penis/barbknot
- icon_state = "barbknot"
- name = "Barbed, Knotted"
-
-/datum/sprite_accessory/genital/penis/tapered
- icon_state = "tapered"
- name = "Tapered"
-
-/datum/sprite_accessory/genital/penis/tentacle
- icon_state = "tentacle"
- name = "Tentacled"
-
-/datum/sprite_accessory/genital/penis/hemi
- icon_state = "hemi"
- name = "Hemi"
-
-/datum/sprite_accessory/genital/penis/hemiknot
- icon_state = "hemiknot"
- name = "Knotted Hemi"
-
-/datum/sprite_accessory/genital/testicles
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/testicles_onmob.dmi'
- organ_type = /obj/item/organ/external/genital/testicles
- associated_organ_slot = ORGAN_SLOT_TESTICLES
- key = ORGAN_SLOT_TESTICLES
- always_color_customizable = TRUE
- special_icon_case = TRUE
- special_x_dimension = TRUE
- default_color = DEFAULT_SKIN_OR_PRIMARY
- relevent_layers = list(BODY_ADJ_LAYER, BODY_BEHIND_LAYER)
- genetic = TRUE
- var/has_size = TRUE
-
-/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/target_mob)
- var/taur_mode = target_mob?.get_taur_mode()
-
- if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
- return icon
-
- return 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi'
-
-/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/target_mob)
- var/taur_mode = target_mob?.get_taur_mode()
-
- if(!taur_mode || !target_mob.dna.features["penis_taur_mode"] || taur_mode & STYLE_TAUR_SNAKE)
- return dimension_x
-
- return TAUR_DIMENSION_X
-
-/datum/sprite_accessory/genital/testicles/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/testicles/pair
- name = "Pair"
- icon_state = "pair"
- has_skintone_shading = TRUE
-
-/datum/sprite_accessory/genital/testicles/internal
- name = "Internal"
- icon_state = "none"
- color_src = null
- has_size = FALSE
-
-/datum/sprite_accessory/genital/vagina
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/vagina_onmob.dmi'
- organ_type = /obj/item/organ/external/genital/vagina
- associated_organ_slot = ORGAN_SLOT_VAGINA
- key = ORGAN_SLOT_VAGINA
- always_color_customizable = TRUE
- default_color = "#FFCCCC"
- relevent_layers = list(BODY_FRONT_LAYER)
- genetic = TRUE
- var/alt_aroused = TRUE
-
-/datum/sprite_accessory/genital/vagina/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/vagina/human
- icon_state = "human"
- name = "Human"
-
-/datum/sprite_accessory/genital/vagina/tentacles
- icon_state = "tentacle"
- name = "Tentacle"
-
-/datum/sprite_accessory/genital/vagina/dentata
- icon_state = "dentata"
- name = "Dentata"
-
-/datum/sprite_accessory/genital/vagina/hairy
- icon_state = "hairy"
- name = "Hairy"
- alt_aroused = FALSE
-
-/datum/sprite_accessory/genital/vagina/spade
- icon_state = "spade"
- name = "Spade"
- alt_aroused = FALSE
-
-/datum/sprite_accessory/genital/vagina/furred
- icon_state = "furred"
- name = "Furred"
- alt_aroused = FALSE
-
-/datum/sprite_accessory/genital/vagina/gaping
- icon_state = "gaping"
- name = "Gaping"
-
-/datum/sprite_accessory/genital/vagina/cloaca
- icon_state = "cloaca"
- name = "Cloaca"
-
-/datum/sprite_accessory/genital/womb
- organ_type = /obj/item/organ/external/genital/womb
- associated_organ_slot = ORGAN_SLOT_WOMB
- key = ORGAN_SLOT_WOMB
- genetic = TRUE
-
-/datum/sprite_accessory/genital/womb/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/womb/normal
- icon_state = "none"
- name = "Normal"
- color_src = null
-
-/datum/sprite_accessory/genital/anus
- organ_type = /obj/item/organ/external/genital/anus
- associated_organ_slot = ORGAN_SLOT_ANUS
- key = ORGAN_SLOT_ANUS
- genetic = TRUE
-
-/datum/sprite_accessory/genital/anus/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/anus/normal
- icon_state = "anus"
- name = "Anus"
- color_src = null
-
-/datum/sprite_accessory/genital/breasts
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/breasts_onmob.dmi'
- organ_type = /obj/item/organ/external/genital/breasts
- associated_organ_slot = ORGAN_SLOT_BREASTS
- key = ORGAN_SLOT_BREASTS
- always_color_customizable = TRUE
- default_color = DEFAULT_SKIN_OR_PRIMARY
- relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
- has_skintone_shading = TRUE
- genital_location = CHEST
- genetic = TRUE
-
-/datum/sprite_accessory/genital/breasts/none
- icon_state = "none"
- name = "None"
- factual = FALSE
- color_src = null
-
-/datum/sprite_accessory/genital/breasts/pair
- icon_state = "pair"
- name = "Pair"
-
-/datum/sprite_accessory/genital/breasts/quad
- icon_state = "quad"
- name = "Quad"
-
-/datum/sprite_accessory/genital/breasts/sextuple
- icon_state = "sextuple"
- name = "Sextuple"
-
-#undef TAUR_DIMENSION_X
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm
deleted file mode 100644
index 4513f60dcc8..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm
+++ /dev/null
@@ -1,144 +0,0 @@
-//The snouts
-/datum/sprite_accessory/snouts/vox
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi'
- default_color = DEFAULT_SECONDARY
- name = "Vox Snout"
- icon_state = "vox"
- recommended_species = list(SPECIES_VOX)
-
-//The hairstyles
-/datum/sprite_accessory/hair/vox
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi'
- recommended_species = list(SPECIES_VOX)
-
-/datum/sprite_accessory/hair/vox/vox_afro
- name = "Vox Afro"
- icon_state = "hair_vox_afro"
-
-/datum/sprite_accessory/hair/vox/vox_crestedquills
- name = "Vox Crested Quills"
- icon_state = "hair_vox_crestedquills"
-
-/datum/sprite_accessory/hair/vox/vox_emperorquills
- name = "Vox Emperor Quills"
- icon_state = "hair_vox_emperorquills"
-
-/datum/sprite_accessory/hair/vox/vox_horns
- name = "Vox Horns"
- icon_state = "hair_vox_horns"
-
-/datum/sprite_accessory/hair/vox/vox_keelquills
- name = "Vox Keel Quills"
- icon_state = "hair_vox_keelquills"
-
-/datum/sprite_accessory/hair/vox/vox_keetquills
- name = "Vox Keet Quills"
- icon_state = "hair_vox_keetquills"
-
-/datum/sprite_accessory/hair/vox/vox_kingly
- name = "Vox Kingly"
- icon_state = "hair_vox_kingly"
-
-/datum/sprite_accessory/hair/vox/vox_mohawk
- name = "Vox Mohawk"
- icon_state = "hair_vox_mohawk"
-
-/datum/sprite_accessory/hair/vox/vox_nights
- name = "Vox Nights"
- icon_state = "hair_vox_nights"
-
-/datum/sprite_accessory/hair/vox/vox_razorclipped
- name = "Vox Razor Clipped"
- icon_state = "hair_vox_razorclipped"
-
-/datum/sprite_accessory/hair/vox/vox_razor
- name = "Vox Razor"
- icon_state = "hair_vox_razor"
-
-/datum/sprite_accessory/hair/vox/vox_shortquills
- name = "Vox Short Quills"
- icon_state = "hair_vox_shortquills"
-
-/datum/sprite_accessory/hair/vox/vox_tielquills
- name = "Vox Tiel Quills"
- icon_state = "hair_vox_tielquills"
-
-/datum/sprite_accessory/hair/vox/vox_yasu
- name = "Vox Yasu"
- icon_state = "hair_vox_yasu"
-
-/datum/sprite_accessory/hair/vox/surf
- name = "Vox Surf"
- icon_state = "vox_surf"
-
-/datum/sprite_accessory/hair/vox/cropped
- name = "Vox Cropped"
- icon_state = "vox_cropped"
-
-/datum/sprite_accessory/hair/vox/rows
- name = "Vox Rows"
- icon_state = "vox_rows"
-
-/datum/sprite_accessory/hair/vox/ponytail
- name = "Vox Ponytail"
- icon_state = "vox_pony"
-
-/datum/sprite_accessory/hair/vox/mange
- name = "Vox Mange"
- icon_state = "vox_mange"
-
-/datum/sprite_accessory/hair/vox/ruffhawk
- name = "Vox Ruffhawk"
- icon_state = "vox_ruffhawk"
-
-//The facial hairstyles
-/datum/sprite_accessory/facial_hair/vox
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi'
- recommended_species = list(SPECIES_VOX)
-
-/datum/sprite_accessory/facial_hair/vox/vox_beard
- name = "Vox Beard"
- icon_state = "facial_vox_beard"
-
-/datum/sprite_accessory/facial_hair/vox/vox_colonel
- name = "Vox Beard (Colonel)"
- icon_state = "facial_vox_colonel"
-
-/datum/sprite_accessory/facial_hair/vox/vox_fu
- name = "Vox Beard (Fu)"
- icon_state = "facial_vox_fu"
-
-/datum/sprite_accessory/facial_hair/vox/vox_neck
- name = "Vox Neck Quills"
- icon_state = "facial_vox_neck"
-
-/datum/sprite_accessory/facial_hair/vox/vox_mane
- name = "Vox Mane"
- icon_state = "facial_vox_mane"
-
-//The tail
-/datum/sprite_accessory/tails/vox
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_tails.dmi'
- name = "Vox Tail"
- icon_state = "vox"
- recommended_species = list(SPECIES_VOX)
- organ_type = /obj/item/organ/external/tail/lizard
-
-//The tail markings
-/datum/sprite_accessory/spines/vox
- icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/vox_spines.dmi'
- default_color = DEFAULT_TERTIARY
- recommended_species = list(SPECIES_VOX)
- relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
-
-/datum/sprite_accessory/spines/vox/vox_bands
- name = "Vox Bands"
- icon_state = "vox_bands"
-
-/datum/sprite_accessory/spines/vox/vox_tip
- name = "Vox Tip"
- icon_state = "vox_tip"
-
-/datum/sprite_accessory/spines/vox/vox_stripe
- name = "Vox Stripe"
- icon_state = "vox_stripe"
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm
deleted file mode 100644
index c92c46a1406..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm
+++ /dev/null
@@ -1,162 +0,0 @@
-/datum/species/skrell
- name = "Skrell"
- id = SPECIES_SKRELL
- inherent_traits = list(
- TRAIT_ADVANCEDTOOLUSER,
- TRAIT_CAN_STRIP,
- TRAIT_LITERATE,
- TRAIT_MUTANT_COLORS,
- )
- inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
- exotic_blood = /datum/reagent/copper
- bodytemp_normal = (BODYTEMP_NORMAL + 70)
- bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD
- bodytemp_cold_damage_limit = (T20C - 10)
- species_language_holder = /datum/language_holder/skrell
- mutant_bodyparts = list()
- mutanttongue = /obj/item/organ/internal/tongue/skrell
- payday_modifier = 1.0
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
- eyes_icon = 'modular_skyrat/modules/organs/icons/skrell_eyes.dmi'
- mutantbrain = /obj/item/organ/internal/brain/skrell
- mutanteyes = /obj/item/organ/internal/eyes/skrell
- mutantlungs = /obj/item/organ/internal/lungs/skrell
- mutantheart = /obj/item/organ/internal/heart/skrell
- mutantliver = /obj/item/organ/internal/liver/skrell
- mutanttongue = /obj/item/organ/internal/tongue/skrell
- bodypart_overrides = list(
- BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/skrell,
- BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/skrell,
- BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/skrell,
- BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/skrell,
- BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/skrell,
- BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/skrell,
- )
-
-/datum/species/skrell/get_default_mutant_bodyparts()
- return list(
- "skrell_hair" = list("Male", TRUE),
- )
-
-/datum/species/skrell/get_species_description()
- return placeholder_description
-
-/datum/species/skrell/get_species_lore()
- return list(placeholder_lore)
-
-/datum/species/skrell/randomize_features()
- var/list/features = ..()
- var/main_color
- var/random = rand(1,6)
- //Choose from a range of green-blue colors
- switch(random)
- if(1)
- main_color = "#44FF77"
- if(2)
- main_color = "#22FF88"
- if(3)
- main_color = "#22FFBB"
- if(4)
- main_color = "#22FFFF"
- if(5)
- main_color = "#22BBFF"
- if(6)
- main_color = "#2266FF"
- features["mcolor"] = main_color
- features["mcolor2"] = main_color
- features["mcolor3"] = main_color
- return features
-
-/datum/species/skrell/prepare_human_for_preview(mob/living/carbon/human/skrell)
- var/skrell_color = "#22BBFF"
- skrell.dna.features["mcolor"] = skrell_color
- skrell.dna.features["mcolor2"] = skrell_color
- skrell.dna.features["mcolor3"] = skrell_color
- skrell.dna.mutant_bodyparts["skrell_hair"] = list(MUTANT_INDEX_NAME = "Female", MUTANT_INDEX_COLOR_LIST = list(skrell_color, skrell_color, skrell_color))
- regenerate_organs(skrell, src, visual_only = TRUE)
- skrell.update_body(TRUE)
-
-
-/obj/item/organ/internal/tongue/skrell
- name = "internal vocal sacs"
- desc = "An Strange looking sac."
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- icon_state = "tongue"
- taste_sensitivity = 5
- var/static/list/languages_possible_skrell = typecacheof(list(
- /datum/language/common,
- /datum/language/uncommon,
- /datum/language/draconic,
- /datum/language/codespeak,
- /datum/language/monkey,
- /datum/language/narsie,
- /datum/language/machine,
- /datum/language/slime,
- /datum/language/beachbum,
- /datum/language/aphasia,
- /datum/language/piratespeak,
- /datum/language/moffic,
- /datum/language/sylvan,
- /datum/language/shadowtongue,
- /datum/language/terrum,
- /datum/language/vox,
- /datum/language/nekomimetic,
- /datum/language/skrell,
- ))
- liked_foodtypes = TOXIC | FRUIT | VEGETABLES
- disliked_foodtypes = RAW | CLOTH
- toxic_foodtypes = DAIRY | MEAT
-
-/obj/item/organ/internal/tongue/skrell/get_possible_languages()
- return languages_possible_skrell
-
-/obj/item/organ/internal/heart/skrell
- name = "skrellian heart"
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- icon_state = "heart"
-
-/obj/item/organ/internal/brain/skrell
- name = "spongy brain"
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- icon_state = "brain2"
-
-/obj/item/organ/internal/eyes/skrell
- name = "amphibian eyes"
- desc = "Large black orbs."
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- icon_state = "eyes"
- flash_protect = FLASH_PROTECTION_SENSITIVE
-
-/obj/item/organ/internal/lungs/skrell
- name = "skrell lungs"
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- icon_state = "lungs"
- safe_plasma_max = 40
- safe_co2_max = 40
-
- cold_message = "You can't stand the freezing cold with every breath you take!"
- cold_level_1_threshold = 248
- cold_level_2_threshold = 220
- cold_level_3_threshold = 170
- cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
- cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
- cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
- cold_damage_type = BRUTE
-
-
- hot_message = "You can't stand the searing heat with every breath you take!"
- heat_level_1_threshold = 318
- heat_level_2_threshold = 348
- heat_level_3_threshold = 1000
- heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
- heat_damage_type = BURN
-
-/obj/item/organ/internal/liver/skrell
- name = "skrell liver"
- icon_state = "liver"
- icon = 'modular_skyrat/modules/organs/icons/skrell_organ.dmi'
- alcohol_tolerance = 5
- toxTolerance = 10 //can shrug off up to 10u of toxins.
- liver_resistance = 1.2 * LIVER_DEFAULT_TOX_RESISTANCE // +20%
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm
deleted file mode 100644
index 60c0eee37cd..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm
+++ /dev/null
@@ -1,114 +0,0 @@
-/datum/species/vox
- // Bird-like humanoids
- name = "Vox"
- id = SPECIES_VOX
- eyes_icon = 'modular_skyrat/modules/organs/icons/vox_eyes.dmi'
- can_augment = FALSE
- inherent_traits = list(
- TRAIT_ADVANCEDTOOLUSER,
- TRAIT_CAN_STRIP,
- TRAIT_LITERATE,
- TRAIT_MUTANT_COLORS,
- )
- inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
- mutanttongue = /obj/item/organ/internal/tongue/vox
- mutantlungs = /obj/item/organ/internal/lungs/nitrogen/vox
- mutantbrain = /obj/item/organ/internal/brain/vox
- breathid = "n2"
- mutant_bodyparts = list()
- payday_modifier = 1.0
- outfit_important_for_life = /datum/outfit/vox
- species_language_holder = /datum/language_holder/vox
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
- // Vox are cold resistant, but also heat sensitive
- bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much
- bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 30)
- digitigrade_customization = DIGITIGRADE_OPTIONAL
- bodypart_overrides = list(
- BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/vox,
- BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/vox,
- BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/mutant/vox,
- BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/mutant/vox,
- BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/mutant/vox,
- BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/mutant/vox,
- )
- custom_worn_icons = list(
- LOADOUT_ITEM_HEAD = VOX_HEAD_ICON,
- LOADOUT_ITEM_MASK = VOX_MASK_ICON,
- LOADOUT_ITEM_SUIT = VOX_SUIT_ICON,
- LOADOUT_ITEM_UNIFORM = VOX_UNIFORM_ICON,
- LOADOUT_ITEM_HANDS = VOX_HANDS_ICON,
- LOADOUT_ITEM_SHOES = VOX_FEET_ICON,
- LOADOUT_ITEM_GLASSES = VOX_EYES_ICON,
- LOADOUT_ITEM_BELT = VOX_BELT_ICON,
- LOADOUT_ITEM_MISC = VOX_BACK_ICON,
- LOADOUT_ITEM_EARS = VOX_EARS_ICON
- )
-
-/datum/species/vox/get_default_mutant_bodyparts()
- return list(
- "tail" = list("Vox Tail", FALSE),
- "legs" = list(DIGITIGRADE_LEGS,FALSE),
- "snout" = list("Vox Snout", FALSE),
- "spines" = list("Vox Bands", TRUE),
- )
-
-/datum/species/vox/pre_equip_species_outfit(datum/job/job, mob/living/carbon/human/equipping, visuals_only)
- . = ..()
- if(job?.vox_outfit)
- equipping.equipOutfit(job.vox_outfit, visuals_only)
- else
- give_important_for_life(equipping)
-
-/datum/species/vox/random_name(gender,unique,lastname)
- if(unique)
- return random_unique_vox_name()
-
- var/randname = vox_name()
-
- if(lastname)
- randname += " [lastname]"
-
- return randname
-
-/datum/species/vox/randomize_features()
- var/list/features = ..()
- features["mcolor"] = pick("#77DD88", "#77DDAA", "#77CCDD", "#77DDCC")
- features["mcolor2"] = pick("#EEDD88", "#EECC88")
- features["mcolor3"] = pick("#222222", "#44EEFF", "#44FFBB", "#8844FF", "#332233")
- return features
-
-/datum/species/vox/get_random_body_markings(list/passed_features)
- var/name = pick(list("Vox", "Vox Hive", "Vox Nightling", "Vox Heart", "Vox Tiger"))
- var/datum/body_marking_set/BMS = GLOB.body_marking_sets[name]
- var/list/markings = list()
- if(BMS)
- markings = assemble_body_markings_from_set(BMS, passed_features, src)
- return markings
-
-/datum/species/vox/get_custom_worn_icon(item_slot, obj/item/item)
- // snowflakey but vox legs weird.
- if(item_slot == LOADOUT_ITEM_SHOES)
- var/obj/item/bodypart/leg = bodypart_overrides[BODY_ZONE_L_LEG] || bodypart_overrides[BODY_ZONE_R_LEG]
- if(initial(leg?.limb_id) != "digitigrade")
- // normal legs, use normal human shoes
- return DEFAULT_SHOES_FILE
-
- return item.worn_icon_vox
-
-/datum/species/vox/set_custom_worn_icon(item_slot, obj/item/item, icon/icon)
- item.worn_icon_vox = icon
-
-/datum/species/vox/get_species_description()
- return placeholder_description
-
-/datum/species/vox/get_species_lore()
- return list(placeholder_lore)
-
-/datum/species/vox/prepare_human_for_preview(mob/living/carbon/human/vox)
- vox.dna.features["mcolor"] = "#77DD88"
- vox.dna.features["mcolor2"] = "#EEDD88"
- vox.dna.features["mcolor3"] = "#222222"
- vox.dna.mutant_bodyparts["snout"] = list(MUTANT_INDEX_NAME = "Vox Snout", MUTANT_INDEX_COLOR_LIST = list("#EEDD88"))
- regenerate_organs(vox, src, visual_only = TRUE)
- vox.update_body(TRUE)
diff --git a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm b/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm
deleted file mode 100644
index e5cc17fc258..00000000000
--- a/modular_skyrat/modules/customization/modules/surgery/organs/genitals.dm
+++ /dev/null
@@ -1,569 +0,0 @@
-/obj/item/organ/external/genital
- color = "#fcccb3"
- organ_flags = ORGAN_ORGANIC | ORGAN_UNREMOVABLE
- ///Size value of the genital, needs to be translated to proper lengths/diameters/cups
- var/genital_size = 1
- ///Sprite name of the genital, it's what shows up on character creation
- var/genital_name = "Human"
- ///Type of the genital. For penises tapered/horse/human etc. for breasts quadruple/sixtuple etc...
- var/genital_type = SPECIES_HUMAN
- ///Used for determining what sprite is being used, derrives from size and type
- var/sprite_suffix
- ///Used for input from the user whether to show a genital through clothing or not, always or never etc.
- var/visibility_preference = GENITAL_HIDDEN_BY_CLOTHES
- ///Whether the organ is aroused, matters for sprites, use AROUSAL_CANT, AROUSAL_NONE, AROUSAL_PARTIAL or AROUSAL_FULL
- var/aroused = AROUSAL_NONE
- ///Whether the organ is supposed to use a skintoned variant of the sprite
- var/uses_skintones = FALSE
- ///Whether the organ is supposed to use the color of the holder's skin tone.
- var/uses_skin_color = FALSE
- /// Where the genital is actually located, for clothing checks.
- var/genital_location = GROIN
-
-//This translates the float size into a sprite string
-/obj/item/organ/external/genital/proc/get_sprite_size_string()
- return 0
-
-//This translates the float size into a sprite string
-/obj/item/organ/external/genital/proc/update_sprite_suffix()
- sprite_suffix = "[get_sprite_size_string()]"
-
- var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay
-
- our_overlay.sprite_suffix = sprite_suffix
-
-
-/obj/item/organ/external/genital/proc/get_description_string(datum/sprite_accessory/genital/gas)
- return "You see genitals"
-
-/obj/item/organ/external/genital/proc/update_genital_icon_state()
- return
-
-/obj/item/organ/external/genital/proc/set_size(size)
- genital_size = size
- update_sprite_suffix()
-
-/obj/item/organ/external/genital/Initialize(mapload)
- . = ..()
- update_sprite_suffix()
- if(CONFIG_GET(flag/disable_lewd_items))
- return INITIALIZE_HINT_QDEL
-
-//Removes ERP organs depending on config
-/obj/item/organ/external/genital/Insert(mob/living/carbon/M, special, drop_if_replaced)
- if(CONFIG_GET(flag/disable_erp_preferences))
- return
- . = ..()
-
-/obj/item/organ/external/genital/Remove(mob/living/carbon/M, special = FALSE, moving)
- . = ..()
- update_genital_icon_state()
-
-/obj/item/organ/external/genital/build_from_dna(datum/dna/DNA, associated_key)
- . = ..()
- var/datum/sprite_accessory/genital/accessory = GLOB.sprite_accessories[associated_key][DNA.mutant_bodyparts[associated_key][MUTANT_INDEX_NAME]]
- genital_name = accessory.name
- genital_type = accessory.icon_state
- build_from_accessory(accessory, DNA)
- update_sprite_suffix()
-
- var/datum/bodypart_overlay/mutant/genital/our_overlay = bodypart_overlay
-
- our_overlay.color_source = uses_skin_color ? ORGAN_COLOR_INHERIT : ORGAN_COLOR_OVERRIDE
-
-/// for specific build_from_dna behavior that also checks the genital accessory.
-/obj/item/organ/external/genital/proc/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
- return
-
-/obj/item/organ/external/genital/proc/is_exposed()
- if(!owner)
- return TRUE
-
- if(!ishuman(owner))
- return TRUE
-
- var/mob/living/carbon/human/human = owner
-
- switch(visibility_preference)
- if(GENITAL_ALWAYS_SHOW)
- return TRUE
- if(GENITAL_HIDDEN_BY_CLOTHES)
- if((human.w_uniform && human.w_uniform.body_parts_covered & genital_location) || (human.wear_suit && human.wear_suit.body_parts_covered & genital_location))
- return FALSE
- else
- return TRUE
- else
- return FALSE
-
-
-/datum/bodypart_overlay/mutant/genital
- layers = EXTERNAL_FRONT
- color_source = ORGAN_COLOR_OVERRIDE
- /// The suffix appended to the feature_key for the overlays.
- var/sprite_suffix
-
-/datum/bodypart_overlay/mutant/genital/override_color(rgb_value)
- return draw_color
-
-/datum/bodypart_overlay/mutant/genital/get_base_icon_state()
- return sprite_suffix
-
-
-/datum/bodypart_overlay/mutant/genital/get_color_layer_names(icon_state_to_lookup)
- if(length(sprite_datum.color_layer_names))
- return sprite_datum.color_layer_names
-
- sprite_datum.color_layer_names = list()
- if (!GLOB.cached_mutant_icon_files[sprite_datum.icon])
- GLOB.cached_mutant_icon_files[sprite_datum.icon] = icon_states(new /icon(sprite_datum.icon))
-
- var/list/cached_mutant_icon_states = GLOB.cached_mutant_icon_files[sprite_datum.icon]
-
- for (var/layer in all_layers)
- if(!(layer & layers))
- continue
-
- var/layertext = mutant_bodyparts_layertext(bitflag_to_layer(layer))
- if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_primary" in cached_mutant_icon_states)
- sprite_datum.color_layer_names["1"] = "primary"
- if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_secondary" in cached_mutant_icon_states)
- sprite_datum.color_layer_names["2"] = "secondary"
- if ("m_[feature_key]_[get_base_icon_state()]_[layertext]_tertiary" in cached_mutant_icon_states)
- sprite_datum.color_layer_names["3"] = "tertiary"
-
- return sprite_datum.color_layer_names
-
-
-/obj/item/organ/external/genital/penis
- name = "penis"
- desc = "A male reproductive organ."
- icon_state = "penis"
- icon = 'modular_skyrat/master_files/icons/obj/genitals/penis.dmi'
- zone = BODY_ZONE_PRECISE_GROIN
- slot = ORGAN_SLOT_PENIS
- mutantpart_key = ORGAN_SLOT_PENIS
- mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
- drop_when_organ_spilling = FALSE
- var/girth = 9
- var/sheath = SHEATH_NONE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/penis
-
-/datum/bodypart_overlay/mutant/genital/penis
- feature_key = ORGAN_SLOT_PENIS
- layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
-
-
-/obj/item/organ/external/genital/penis/get_description_string(datum/sprite_accessory/genital/gas)
- var/returned_string = ""
- var/pname = lowertext(genital_name) == "nondescript" ? "" : lowertext(genital_name) + " "
- if(sheath != SHEATH_NONE && aroused != AROUSAL_FULL) //Hidden in sheath
- switch(sheath)
- if(SHEATH_NORMAL)
- returned_string = "You see a sheath."
- if(SHEATH_SLIT)
- returned_string = "You see a slit." ///Typo fix.
- if(aroused == AROUSAL_PARTIAL)
- returned_string += " There's a [pname]penis poking out of it."
- else
- returned_string = "You see a [pname]penis. You estimate it's [genital_size] inches long, and [girth] inches in circumference."
- switch(aroused)
- if(AROUSAL_NONE)
- returned_string += " It seems flaccid."
- if(AROUSAL_PARTIAL)
- returned_string += " It's partically erect."
- if(AROUSAL_FULL)
- returned_string += " It's fully erect."
- return returned_string
-
-/obj/item/organ/external/genital/penis/update_genital_icon_state()
- var/size_affix
- var/measured_size = FLOOR(genital_size,1)
- if(measured_size < 1)
- measured_size = 1
- switch(measured_size)
- if(1 to 8)
- size_affix = "1"
- if(9 to 15)
- size_affix = "2"
- if(16 to 24)
- size_affix = "3"
- else
- size_affix = "4"
- var/passed_string = "penis_[genital_type]_[size_affix]"
- if(uses_skintones)
- passed_string += "_s"
- icon_state = passed_string
-
-/obj/item/organ/external/genital/penis/get_sprite_size_string()
- if(aroused != AROUSAL_FULL && sheath != SHEATH_NONE) //Sheath time!
- var/poking_out = 0
- if(aroused == AROUSAL_PARTIAL)
- poking_out = 1
- return "[lowertext(sheath)]_[poking_out]"
-
- var/size_affix
- var/measured_size = FLOOR(genital_size,1)
- var/is_erect = 0
- if(aroused == AROUSAL_FULL)
- is_erect = 1
- if(measured_size < 1)
- measured_size = 1
- switch(measured_size)
- if(1 to 8)
- size_affix = "1"
- if(9 to 15)
- size_affix = "2"
- if(16 to 24)
- size_affix = "3"
- else
- size_affix = "4"
- var/passed_string = "[genital_type]_[size_affix]_[is_erect]"
- if(uses_skintones)
- passed_string += "_s"
- return passed_string
-
-/obj/item/organ/external/genital/penis/build_from_dna(datum/dna/DNA, associated_key)
- girth = DNA.features["penis_girth"]
- uses_skin_color = DNA.features["penis_uses_skincolor"]
- set_size(DNA.features["penis_size"])
-
- return ..()
-
-/obj/item/organ/external/genital/penis/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
- var/datum/sprite_accessory/genital/penis/snake = accessory
- if(snake.can_have_sheath)
- sheath = DNA.features["penis_sheath"]
- if(DNA.features["penis_uses_skintones"])
- uses_skintones = accessory.has_skintone_shading
-
-/datum/bodypart_overlay/mutant/genital/penis/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_PENIS]
-
-
-/obj/item/organ/external/genital/testicles
- name = "testicles"
- desc = "A male reproductive organ."
- icon_state = "testicles"
- icon = 'modular_skyrat/master_files/icons/obj/genitals/testicles.dmi'
- mutantpart_key = ORGAN_SLOT_TESTICLES
- mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
- zone = BODY_ZONE_PRECISE_GROIN
- slot = ORGAN_SLOT_TESTICLES
- aroused = AROUSAL_CANT
- genital_location = GROIN
- drop_when_organ_spilling = FALSE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/testicles
-
-/datum/bodypart_overlay/mutant/genital/testicles
- feature_key = ORGAN_SLOT_TESTICLES
- layers = EXTERNAL_ADJACENT | EXTERNAL_BEHIND
-
-/obj/item/organ/external/genital/testicles/update_genital_icon_state()
- var/measured_size = clamp(genital_size, 1, 3)
- var/passed_string = "testicles_[genital_type]_[measured_size]"
- if(uses_skintones)
- passed_string += "_s"
- icon_state = passed_string
-
-/obj/item/organ/external/genital/testicles/get_description_string(datum/sprite_accessory/genital/gas)
- if(genital_name == "Internal") //Checks if Testicles are of Internal Variety
- visibility_preference = GENITAL_SKIP_VISIBILITY //Removes visibility if yes.
- else
- return "You see a pair of testicles, they look [lowertext(balls_size_to_description(genital_size))]."
-
-/obj/item/organ/external/genital/testicles/build_from_dna(datum/dna/DNA, associated_key)
- uses_skin_color = DNA.features["testicles_uses_skincolor"]
- set_size(DNA.features["balls_size"])
-
- return ..()
-
-/obj/item/organ/external/genital/testicles/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
- if(DNA.features["testicles_uses_skintones"])
- uses_skintones = accessory.has_skintone_shading
-
-/obj/item/organ/external/genital/testicles/get_sprite_size_string()
- var/measured_size = FLOOR(genital_size,1)
- measured_size = clamp(measured_size, 0, 3)
- var/passed_string = "[genital_type]_[measured_size]"
- if(uses_skintones)
- passed_string += "_s"
- return passed_string
-
-/datum/bodypart_overlay/mutant/genital/testicles/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_TESTICLES]
-
-
-/obj/item/organ/external/genital/testicles/proc/balls_size_to_description(number)
- if(number < 0)
- number = 0
- var/returned = GLOB.balls_size_translation["[number]"]
- if(!returned)
- returned = BREAST_SIZE_BEYOND_MEASUREMENT
- return returned
-
-/obj/item/organ/external/genital/testicles/proc/balls_description_to_size(cup)
- for(var/key in GLOB.balls_size_translation)
- if(GLOB.balls_size_translation[key] == cup)
- return text2num(key)
- return 0
-
-
-/obj/item/organ/external/genital/vagina
- name = "vagina"
- icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi'
- icon_state = "vagina"
- mutantpart_key = ORGAN_SLOT_VAGINA
- mutantpart_info = list(MUTANT_INDEX_NAME = "Human", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
- zone = BODY_ZONE_PRECISE_GROIN
- slot = ORGAN_SLOT_VAGINA
- genital_location = GROIN
- drop_when_organ_spilling = FALSE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/vagina
-
-/datum/bodypart_overlay/mutant/genital/vagina
- feature_key = ORGAN_SLOT_VAGINA
- layers = EXTERNAL_FRONT
-
-/obj/item/organ/external/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas)
- var/returned_string = "You see a [lowertext(genital_name)] vagina."
- if(lowertext(genital_name) == "cloaca")
- returned_string = "You see a cloaca." //i deserve a pipebomb for this
- switch(aroused)
- if(AROUSAL_NONE)
- returned_string += " It seems dry."
- if(AROUSAL_PARTIAL)
- returned_string += " It's glistening with arousal."
- if(AROUSAL_FULL)
- returned_string += " It's bright and dripping with arousal."
- return returned_string
-
-/obj/item/organ/external/genital/vagina/get_sprite_size_string()
- var/is_dripping = 0
- if(aroused == AROUSAL_FULL)
- is_dripping = 1
- return "[genital_type]_[is_dripping]"
-
-/obj/item/organ/external/genital/vagina/build_from_dna(datum/dna/DNA, associated_key)
- uses_skin_color = DNA.features["vagina_uses_skincolor"]
-
- return ..() // will update the sprite suffix
-
-/obj/item/organ/external/genital/vagina/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
- if(DNA.features["vagina_uses_skintones"])
- uses_skintones = accessory.has_skintone_shading
-
-/datum/bodypart_overlay/mutant/genital/vagina/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_VAGINA]
-
-
-/obj/item/organ/external/genital/womb
- name = "womb"
- desc = "A female reproductive organ."
- icon = 'modular_skyrat/master_files/icons/obj/genitals/vagina.dmi'
- icon_state = "womb"
- mutantpart_key = ORGAN_SLOT_WOMB
- mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FFEEBB"))
- zone = BODY_ZONE_PRECISE_GROIN
- slot = ORGAN_SLOT_WOMB
- visibility_preference = GENITAL_SKIP_VISIBILITY
- aroused = AROUSAL_CANT
- genital_location = GROIN
- drop_when_organ_spilling = FALSE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/womb
-
-/datum/bodypart_overlay/mutant/genital/womb
- feature_key = ORGAN_SLOT_WOMB
- layers = NONE
-
-/datum/bodypart_overlay/mutant/genital/womb/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_WOMB]
-
-
-/obj/item/organ/external/genital/anus
- name = "anus"
- desc = "What do you want me to tell you?"
- icon = 'modular_skyrat/master_files/icons/obj/genitals/anus.dmi'
- icon_state = "anus"
- mutantpart_key = ORGAN_SLOT_ANUS
- mutantpart_info = list(MUTANT_INDEX_NAME = "Normal", MUTANT_INDEX_COLOR_LIST = list("FEB"))
- zone = BODY_ZONE_PRECISE_GROIN
- slot = ORGAN_SLOT_ANUS
- genital_location = GROIN
- drop_when_organ_spilling = FALSE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/anus
-
-/datum/bodypart_overlay/mutant/genital/anus
- feature_key = ORGAN_SLOT_ANUS
- layers = NONE
-
-/obj/item/organ/external/genital/anus/get_description_string(datum/sprite_accessory/genital/gas)
- var/returned_string = "You see an [lowertext(genital_name)]."
- if(aroused == AROUSAL_PARTIAL)
- returned_string += " It looks tight."
- if(aroused == AROUSAL_FULL)
- returned_string += " It looks very tight."
- return returned_string
-
-/datum/bodypart_overlay/mutant/genital/anus/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_ANUS]
-
-
-/obj/item/organ/external/genital/breasts
- name = "breasts"
- desc = "Female milk producing organs."
- icon_state = "breasts"
- icon = 'modular_skyrat/master_files/icons/obj/genitals/breasts.dmi'
- genital_type = "pair"
- mutantpart_key = ORGAN_SLOT_BREASTS
- mutantpart_info = list(MUTANT_INDEX_NAME = "Pair", MUTANT_INDEX_COLOR_LIST = list("#FFEEBB"))
- zone = BODY_ZONE_CHEST
- slot = ORGAN_SLOT_BREASTS
- genital_location = CHEST
- drop_when_organ_spilling = FALSE
- var/lactates = FALSE
- bodypart_overlay = /datum/bodypart_overlay/mutant/genital/breasts
-
-/datum/bodypart_overlay/mutant/genital/breasts
- feature_key = ORGAN_SLOT_BREASTS
- layers = EXTERNAL_FRONT | EXTERNAL_BEHIND
-
-/obj/item/organ/external/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas)
- var/returned_string = "You see a [lowertext(genital_name)] of breasts."
- var/size_description
- var/translation = breasts_size_to_cup(genital_size)
- switch(translation)
- if(BREAST_SIZE_FLATCHESTED)
- size_description = " They are small and flat, however."
- if(BREAST_SIZE_BEYOND_MEASUREMENT)
- size_description = " Their size is enormous, you estimate they're around [genital_size] inches in diameter."
- else
- size_description = " You estimate they are [translation]-cups."
- returned_string += size_description
- if(aroused == AROUSAL_FULL)
- if(lactates)
- returned_string += " The nipples seem hard, perky and are leaking milk."
- else
- returned_string += " Their nipples look hard and perky."
- return returned_string
-
-/obj/item/organ/external/genital/breasts/update_genital_icon_state()
- var/max_size = 5
- var/current_size = FLOOR(genital_size, 1)
- if(current_size < 0)
- current_size = 0
- else if (current_size > max_size)
- current_size = max_size
- var/passed_string = "breasts_pair_[current_size]"
- if(uses_skintones)
- passed_string += "_s"
- icon_state = passed_string
-
-/obj/item/organ/external/genital/breasts/get_sprite_size_string()
- var/max_size = 5
- if(genital_type == "pair")
- max_size = 16
- var/current_size = FLOOR(genital_size, 1)
- if(current_size < 0)
- current_size = 0
- else if (current_size > max_size)
- current_size = max_size
- var/passed_string = "[genital_type]_[current_size]"
- if(uses_skintones)
- passed_string += "_s"
- return passed_string
-
-/obj/item/organ/external/genital/breasts/build_from_dna(datum/dna/DNA, associated_key)
- lactates = DNA.features["breasts_lactation"]
- uses_skin_color = DNA.features["breasts_uses_skincolor"]
- set_size(DNA.features["breasts_size"])
-
- return ..()
-
-/obj/item/organ/external/genital/breasts/build_from_accessory(datum/sprite_accessory/genital/accessory, datum/dna/DNA)
- if(DNA.features["breasts_uses_skintones"])
- uses_skintones = accessory.has_skintone_shading
-
-/datum/bodypart_overlay/mutant/genital/breasts/get_global_feature_list()
- return GLOB.sprite_accessories[ORGAN_SLOT_BREASTS]
-
-/obj/item/organ/external/genital/breasts/proc/breasts_size_to_cup(number)
- if(number < 0)
- number = 0
- var/returned = GLOB.breast_size_translation["[number]"]
- if(!returned)
- returned = BREAST_SIZE_BEYOND_MEASUREMENT
- return returned
-
-/obj/item/organ/external/genital/breasts/proc/breasts_cup_to_size(cup)
- for(var/key in GLOB.breast_size_translation)
- if(GLOB.breast_size_translation[key] == cup)
- return text2num(key)
- return 0
-
-
-/mob/living/carbon/human/verb/toggle_genitals()
- set category = "IC"
- set name = "Expose/Hide genitals"
- set desc = "Allows you to toggle which genitals should show through clothes or not."
-
- if(stat != CONSCIOUS)
- to_chat(usr, span_warning("You can't toggle genitals visibility right now..."))
- return
-
- var/list/genital_list = list()
- for(var/obj/item/organ/external/genital/genital in organs)
- if(!genital.visibility_preference == GENITAL_SKIP_VISIBILITY)
- genital_list += genital
- if(!genital_list.len) //There is nothing to expose
- return
- //Full list of exposable genitals created
- var/obj/item/organ/external/genital/picked_organ
- picked_organ = input(src, "Choose which genitalia to expose/hide", "Expose/Hide genitals") as null|anything in genital_list
- if(picked_organ && (picked_organ in organs))
- var/list/gen_vis_trans = list("Never show" = GENITAL_NEVER_SHOW,
- "Hidden by clothes" = GENITAL_HIDDEN_BY_CLOTHES,
- "Always show" = GENITAL_ALWAYS_SHOW
- )
- var/picked_visibility = input(src, "Choose visibility setting", "Expose/Hide genitals") as null|anything in gen_vis_trans
- if(picked_visibility && picked_organ && (picked_organ in organs))
- picked_organ.visibility_preference = gen_vis_trans[picked_visibility]
- update_body()
- return
-
-//Removing ERP IC verb depending on config
-/mob/living/carbon/human/Initialize(mapload)
- . = ..()
- if(CONFIG_GET(flag/disable_erp_preferences))
- verbs -= /mob/living/carbon/human/verb/toggle_genitals
- verbs -= /mob/living/carbon/human/verb/toggle_arousal
-
-/mob/living/carbon/human/verb/toggle_arousal()
- set category = "IC"
- set name = "Toggle Arousal"
- set desc = "Allows you to toggle how aroused your private parts are."
-
- if(stat != CONSCIOUS)
- to_chat(usr, span_warning("You can't toggle arousal right now..."))
- return
-
- var/list/genital_list = list()
- for(var/obj/item/organ/external/genital/genital in organs)
- if(!genital.aroused == AROUSAL_CANT)
- genital_list += genital
- if(!genital_list.len) //There is nothing to expose
- return
- //Full list of exposable genitals created
- var/obj/item/organ/external/genital/picked_organ
- picked_organ = input(src, "Choose which genitalia to change arousal", "Expose/Hide genitals") as null|anything in genital_list
- if(picked_organ && (picked_organ in organs))
- var/list/gen_arous_trans = list(
- "Not aroused" = AROUSAL_NONE,
- "Partly aroused" = AROUSAL_PARTIAL,
- "Very aroused" = AROUSAL_FULL,
- )
- var/picked_arousal = input(src, "Choose arousal", "Toggle Arousal") as null|anything in gen_arous_trans
- if(picked_arousal && picked_organ && (picked_organ in organs))
- picked_organ.aroused = gen_arous_trans[picked_arousal]
- picked_organ.update_sprite_suffix()
- update_body()
- return
diff --git a/modular_skyrat/modules/customization/readme.md b/modular_skyrat/modules/customization/readme.md
deleted file mode 100644
index b488c032194..00000000000
--- a/modular_skyrat/modules/customization/readme.md
+++ /dev/null
@@ -1,89 +0,0 @@
-## Title: Customization
-
-MODULE ID: CUSTOMIZATION
-
-### Description:
-
-IF YOU WANT TO ADD AN EXTRA FEATURE TO SOMEONES DNA LOOK AT "code/__DEFINES/~skyrat_defines/DNA.dm"
-
-Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb body marking system. Adds in loadout, with lots of clothing ported over. Adds in all the missing species. Adds in flavor text and OOC prefs. Adds in special rendering cases for digitigrades, taurs, snouts, voxes etc. Adds in changeable PDA ringtone message.
-
-### TG Proc Changes:
-
- ./code/__HELPERS/global_lists.dm > /proc/make_datum_references_lists()
- ./code/__HELPERS/mobs.dm > /proc/random_features()
- ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/EquipRank()
- ./code/datums/dna.dm > /datum/dna/proc/initialize_dna() , /mob/living/carbon/set_species()
- ./code/modules/admin/create_mob.dm > /proc/randomize_human()
- ./code/modules/client/preferences.dm > ALMOST THE ENTIRETY OF THE FILE
- ./code/modules/client/preferences_savefile.dm > ONCE AGAIN, THE ENTIRE FILE
- ./code/modules/mob/dead/new_player/preferences_setup.dm > /datum/preferences/proc/random_character(), /datum/preferences/proc/random_species(), /datum/preferences/proc/update_preview_icon()
- ./code/modules/mob/living/carbon/carbon_update_icons.dm > /mob/living/carbon/update_inv_wear_mask(), /mob/living/carbon/update_inv_head(), /mob/living/carbon/proc/update_body_parts(), /mob/living/carbon/proc/generate_icon_render_key()
- ./code/modules/mob/living/carbon/human/emote.dm > /datum/emote/living/carbon/human/wag/run_emote(), /datum/emote/living/carbon/human/wag/can_run_emote()
- ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine()
- ./code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_inv_w_uniform(), /mob/living/carbon/human/update_inv_glasses(), /mob/living/carbon/human/update_inv_shoes(), /mob/living/carbon/human/update_inv_wear_suit(), /obj/item/proc/build_worn_icon(), /mob/living/carbon/human/generate_icon_render_key()
- ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/can_wag_tail(), /datum/species/proc/stop_wagging_tail(), /datum/species/proc/start_wagging_tail(), /datum/species/proc/is_wagging_tail(), /datum/species/proc/handle_hair()
- ./code/modules/mob/living/carbon/human/species_types/felinid.dm > the 5 procs related to wagging tail
- ./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm the 5 procs related to wagging tail and - /datum/species/lizard/on_species_gain()
- ./code/modules/surgery/bodyparts/_bodyparts.dm > /obj/item/bodypart/proc/get_limb_icon()
- ./code/modules/surgery/organs/ears.dm > /obj/item/organ/internal/ears/cat/Insert(), /obj/item/organ/internal/ears/cat/Remove()
- ./code/modules/surgery/organs/tails.dm > /obj/item/organ/external/tail/cat/Insert(), /obj/item/organ/external/tail/cat/Remove(), /obj/item/organ/external/tail/lizard/Initialize(mapload), /obj/item/organ/external/tail/lizard/Insert(), /obj/item/organ/external/tail/lizard/Remove()
- ./code/modules/surgery/bodyparts/dismemberment.dm > /mob/living/carbon/regenerate_limb()
- ./code/modules/mob/living/carbon/human/status_procs.dm > /mob/living/carbon/human/become_husk() > APPENDED
- ./code/modules/reagents/chemistry/holder.dm > /datum/reagents/metabolize()
- ./code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm > /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change()
- ./code/modules/mob/living/carbon/human/human_defense.dm > /mob/living/carbon/human/emp_act()
- ./code/modules/mob/living/carbon/human.dm > /mob/living/carbon/human/revive() > APPENDED
- ./code/modules/reagents/chemistry/reagents/food_reagents.dm > datum/reagent/consumable/on_mob_life()
- ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb
- .\code\modules\client.dm > /client/proc/update_special_keybinds()
- ./code/datums/traits/negative.dm > /datum/quirk/prosthetic_limb
-
- ./code/modules/mob/living/carbon/human/species.dm > /datum/species/regenerate_organs() > APPENDED
-
- ./code/controllers/subsystem/job.dm > /datum/controller/subsystem/job/proc/FindOccupationCandidates(), /datum/controller/subsystem/job/proc/GiveRandomJob(), /datum/controller/subsystem/job/proc/DivideOccupations(), /datum/controller/subsystem/job/proc/AssignRole()
- ./code/modules/mob/dead/new_player/new_player.dm > /mob/dead/new_player/proc/IsJobUnavailable(), /proc/get_job_unavailable_error_message()
-
-### Defines:
-
-./code/modules/surgery/organs/tongue.dm > var/static/list/languages_possible_base - added 2 languages
-./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm > commented out "mutant_organs = list(/obj/item/organ/external/tail/lizard)"
-./code/modules/mob/living/carbon/human/species_types/felinid.dm > commented out "mutantears = /obj/item/organ/internal/ears/cat" and "mutant_organs = list(/obj/item/organ/external/tail/cat)"
-./code/modules/mob/living/carbon/human/species.dm > var/list/list/mutant_bodyparts (added typed list type)
-./code/_globalvars/lists/flavor_misc.dm > Removed accessory list defines
-.\code\datums\keybindings\living.dm > /datum/keybinding/living/look_up > from L to P
-
-./code/__DEFINES/~skyrat_defines/DNA.dm > A TON of defines
-./code/__DEFINES/~skyrat_defines/obj_flags.dm > Organ flags
-./code/__DEFINES/~skyrat_defines/say.dm > MAX_FLAVOR_LEN
-./code/__DEFINES/~skyrat_defines/traits.dm > TRAIT_NO_HUSK
-
-.\modular_skyrat\modules\customization\modules\reagents\chemistry\reagents.dm > var/process_flags
-
-### Master file additions
-
-.\modular_skyrat\master_files\icons\mob\clothing\eyes_vox.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\feet_digi.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\head_muzzled.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\head_vox.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\mask_muzzled.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\mask_vox.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\suit_digi.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_hoof.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_paw.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\suit_taur_snake.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\uniform_digi.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_digi.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_hoof.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_paw.dmi
-.\modular_skyrat\master_files\icons\mob\clothing\under\uniform_taur_snake.dmi
-
-./modular_skyrat/master_files/icons/obj/drinks.dmi
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Azarak
diff --git a/modular_skyrat/modules/death_consequences_perk/readme.md b/modular_skyrat/modules/death_consequences_perk/readme.md
deleted file mode 100644
index 9bc8ddab25b..00000000000
--- a/modular_skyrat/modules/death_consequences_perk/readme.md
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733
-
-## Skyrat Medical Update
-
-Module ID: death_consequences
-
-### Description:
-
-A highly customizable quirk designed to make you fear death, and introduce a more fair mortality the DNR quirk is unable to.
-
-
-
-### TG Proc/File Changes:
-
-- healthscanner.dm: /proc/healthscan(), added text for the quirk
-- species_features.tsx: Necessary for the preference UI
-
-
-### Modular Overrides:
-
-- N/A
-
-
-### Defines:
-
-- ~skyrat_defines/quirks.dm: A lot of prefixed defines
-
-
-### Included files that are not contained in this module:
-
-- modular_skyrat\master_files\code\modules\client\preferences\quirks\death_consequences.dm
-
-
-
-### Credits:
-
-Niko - Original author
-
-
diff --git a/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm b/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm
deleted file mode 100644
index 847aa205e93..00000000000
--- a/modular_skyrat/modules/decay_subsystem/code/decay_turf_handling.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/turf/open/floor
- turf_flags = IS_SOLID | CAN_DECAY_BREAK_1 // We do it this way because we can then easily pick what we don't want to be broken.
-
-/turf/closed/wall
- flags_1 = CAN_BE_DIRTY_1
-
-/turf/open/floor/plating
- turf_flags = IS_SOLID /// No breaking the plating
-
-/turf/open/floor/glass
- turf_flags = IS_SOLID /// No breaking the glass (doesn't leave plating behind)
-
-/turf/open/misc/asteroid
- turf_flags = NONE /// They shouldn't break and they shouldn't be dirty, it's literally already a dirty turf.
diff --git a/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm b/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm
deleted file mode 100644
index 9076ce503fd..00000000000
--- a/modular_skyrat/modules/digi_bloodsole/code/_shoes.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE,icon_file,mutant_styles=NONE)
- . = ..()
- if(isinhands)
- return
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
- if(GET_ATOM_BLOOD_DNA(src))
- if (mutant_styles & CLOTHING_DIGITIGRADE_VARIATION)
- if(clothing_flags & LARGE_WORN_ICON)
- . += mutable_appearance('modular_skyrat/modules/digi_bloodsole/icons/64x64.dmi', "shoeblood_large_digi")
- else
- . += mutable_appearance('modular_skyrat/modules/digi_bloodsole/icons/blood.dmi', "shoeblood_digi")
- else
- if(clothing_flags & LARGE_WORN_ICON)
- . += mutable_appearance('icons/effects/64x64.dmi', "shoeblood_large")
- else
- . += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
diff --git a/modular_skyrat/modules/dogfashion/code/head.dm b/modular_skyrat/modules/dogfashion/code/head.dm
deleted file mode 100644
index a1ab46e43a1..00000000000
--- a/modular_skyrat/modules/dogfashion/code/head.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/datum/dog_fashion/head/yankee
- name = "MC REAL_NAME"
- desc = "They're a big deal in the dog rapping world, apperently."
- icon_file = 'modular_skyrat/master_files/icons/mob/dog/corgi_head.dmi'
- emote_see = list("mumbles some bars.", "practises their beatboxing.")
diff --git a/modular_skyrat/modules/electric_welder/readme.md b/modular_skyrat/modules/electric_welder/readme.md
deleted file mode 100644
index fb6a4c5b0b1..00000000000
--- a/modular_skyrat/modules/electric_welder/readme.md
+++ /dev/null
@@ -1,25 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/
-
-## \
-
-Module ID:
-
-### Description:
-
-### TG Proc/File Changes:
-
-- `code/game/objects/items/storage/belt.dm`: `proc/get_types_to_preload`
-
-### Modular Overrides:
-
-- `modular_skyrat/master_files/code/modules/cargo/exports/tools.dm`: `var/export_types`
-
-### Defines:
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm
deleted file mode 100644
index 13380db04a0..00000000000
--- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_list.dm
+++ /dev/null
@@ -1,197 +0,0 @@
-#define EXTRA_ABOVE_MOB_LAYER (ABOVE_MOB_LAYER + 0.01)
-
-/obj/structure/mark_turf
- name = "turf"
- icon = 'modular_skyrat/master_files/icons/effects/turf_effects.dmi'
- desc = "It's turf." //Debug stuff, won't be seen
- layer = ABOVE_OBJ_LAYER
- anchored = TRUE
- density = FALSE
- max_integrity = 15
-
-/obj/structure/mark_turf/Initialize(mapload, current_turf)
- . = ..()
-
- switch(current_turf)
- if("web")
- name = "hand-sewn web"
- desc = "It's a sticky web."
- icon_state = pick("stickyweb1", "stickyweb2")
- playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/weave.ogg', 25, TRUE)
-
- if("vines")
- name = "sprouted vines"
- desc = "It's an entanglement of vines."
- icon_state = pick("kudzu1", "kudzu1", "kudzu3")
- playsound(get_turf(src), 'sound/creatures/venus_trap_hurt.ogg', 25, TRUE)
-
-
- if("water")
- name = "puddle of water"
- desc = "It's a patch of water."
- icon_state = "water"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "water_top", EXTRA_ABOVE_MOB_LAYER))
- flick_overlay_static(image('modular_skyrat/modules/liquids/icons/obj/effects/splash.dmi', "splash", EXTRA_ABOVE_MOB_LAYER), 20)
- playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/watersplash.ogg', 25, TRUE)
-
- if("smoke")
- name = "blazing mist"
- desc = "It's a storm of smoke."
- icon_state = "smoke"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "smoke_top", EXTRA_ABOVE_MOB_LAYER))
- playsound(get_turf(src), 'sound/effects/wounds/sizzle2.ogg', 25, TRUE)
-
- if("xenoresin")
- name = "resin"
- desc = "Looks like some kind of thick resin."
- icon_state = "xenoresin"
- playsound(get_turf(src), 'sound/effects/splat.ogg', 25, TRUE)
-
- if("holobed")
- name = "physical hologram"
- desc = "It's a hologram of a pet bed."
- icon_state = "holobed"
- playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
-
- if("holoseat")
- name = "physical hologram"
- desc = "It's a hologram of a barstool."
- icon_state = "holoseat"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "holoseat_top", EXTRA_ABOVE_MOB_LAYER))
- playsound(get_turf(src), 'sound/misc/compiler-stage2.ogg', 25, TRUE)
-
- if("slime")
- name = "pile of oozing slime"
- desc = "It's just a bunch of slime."
- alpha = 155
- playsound(get_turf(src), 'sound/misc/soggy.ogg', 25, TRUE)
- switch(rand(1,1000))
- if(-INFINITY to 400)
- icon_state = "slimeobj1"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj1_top", EXTRA_ABOVE_MOB_LAYER))
- if(400 to 800)
- icon_state = "slimeobj2"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj2_top", EXTRA_ABOVE_MOB_LAYER))
- if(800 to 980)
- icon_state = "slimeobj3"
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects.dmi', "slimeobj3_top", EXTRA_ABOVE_MOB_LAYER))
- if(980 to INFINITY)
- name = "slime bust" //rare obj/item/statuebust
- desc = "A priceless slime bust, the kind that belongs in a museum."
- icon_state = "slimeobj4"
- AddElement(/datum/element/art, GREAT_ART)
- else
- return
-
- if("dust")
- name = "cloud of dust"
- desc = "It's a cloud of glittering dust."
- icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
- icon_state = "dust"
- pixel_x = -16
- src.add_overlay(image('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "dust_top", EXTRA_ABOVE_MOB_LAYER))
- playsound(get_turf(src), 'modular_skyrat/master_files/sound/effects/wing_flap.ogg', 25, TRUE)
-
- if("borgmat")
- name = "soft-foam mat"
- desc = "It's a rolled out mat, doesn't include wireless charging."
- icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
- icon_state = "borgmat"
- pixel_x = -16
- pixel_y = -4
- playsound(get_turf(src), 'sound/items/handling/taperecorder_pickup.ogg', 25, TRUE)
-
- //bodyparts
- if("tails")
- name = "tail"
- desc = "It's a fluffy tail."
- icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
- icon_state = "tails"
- pixel_x = -16 //correcting the offset for 64
- var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "tails_top", EXTRA_ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER)
- overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
- src.add_overlay(overlay)
- playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 25, TRUE)
-
- if("constrict")
- name = "tail"
- desc = "It's a scaly tail."
- icon = 'modular_skyrat/master_files/icons/effects/turf_effects_64.dmi'
- icon_state = "naga"
- pixel_x = -16
- var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/effects/turf_effects_64.dmi', "naga_top", EXTRA_ABOVE_MOB_LAYER, src, GAME_PLANE_UPPER)
- overlay.appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
- src.add_overlay(overlay)
- playsound(get_turf(src), 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg', 25, TRUE)
-
- //prints
- if("pawprint")
- name = "pawprint"
- desc = "It's a pawprint left on the ground."
- icon_state = pick("pawprint", "pawprint1")
- playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
- 'sound/effects/footstep/hardbarefoot2.ogg',
- 'sound/effects/footstep/hardbarefoot3.ogg',
- 'sound/effects/footstep/hardbarefoot4.ogg',
- 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
-
- if("hoofprint")
- name = "hoofprint"
- desc = "It's a hoofprint left on the ground."
- icon_state = pick("hoofprint", "hoofprint1")
- playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
- 'sound/effects/footstep/hardbarefoot2.ogg',
- 'sound/effects/footstep/hardbarefoot3.ogg',
- 'sound/effects/footstep/hardbarefoot4.ogg',
- 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
- if("footprint")
- name = "footprint"
- desc = "It's a footprint left on the ground."
- icon_state = pick("footprint", "footprint1")
- playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
- 'sound/effects/footstep/hardbarefoot2.ogg',
- 'sound/effects/footstep/hardbarefoot3.ogg',
- 'sound/effects/footstep/hardbarefoot4.ogg',
- 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
-
- if("clawprint")
- name = "clawprint"
- desc = "It's a clawprint left on the ground."
- icon_state = pick("clawprint", "clawprint1")
- playsound(get_turf(src), pick('sound/effects/footstep/hardbarefoot1.ogg',
- 'sound/effects/footstep/hardbarefoot2.ogg',
- 'sound/effects/footstep/hardbarefoot3.ogg',
- 'sound/effects/footstep/hardbarefoot4.ogg',
- 'sound/effects/footstep/hardbarefoot5.ogg'), 50, TRUE)
-
- if("shoeprint")
- name = "shoeprint"
- desc = "It's a shoeprint left on the ground."
- icon_state = pick("shoeprint", "shoeprint1")
- playsound(get_turf(src), pick('sound/effects/footstep/floor1.ogg',
- 'sound/effects/footstep/floor2.ogg',
- 'sound/effects/footstep/floor3.ogg',
- 'sound/effects/footstep/floor4.ogg',
- 'sound/effects/footstep/floor5.ogg'), 50, TRUE)
-
- else
- return
-
-/obj/structure/mark_turf/proc/turf_check(mob/living/user) //This gets called when a player leaves their turf
- var/list/no_trail = list("tail", "constrict")
- var/list/long_trail = list("pawprint", "hoofprint", "clawprint", "footprint", "shoeprint")
-
- if(user.owned_turf.name in no_trail)
- QDEL_NULL(src)
- if(user.owned_turf.name in long_trail)
- QDEL_IN(src, 150 SECONDS)
- user.owned_turf = null
- else
- QDEL_IN(src, 15 SECONDS)
- user.owned_turf = null
-
- if(ishuman(user))
- var/mob/living/carbon/human/human_user = user
- human_user.update_mutant_bodyparts()
-
-#undef EXTRA_ABOVE_MOB_LAYER
diff --git a/modular_skyrat/modules/emotes/code/dna_screams.dm b/modular_skyrat/modules/emotes/code/dna_screams.dm
deleted file mode 100644
index c57a80d55aa..00000000000
--- a/modular_skyrat/modules/emotes/code/dna_screams.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-/datum/species
- var/list/screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg')
- var/list/femalescreamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg', 'modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg')
-
-/datum/species/synthetic
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg')
- femalescreamsounds = null
-
-/datum/species/android
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg')
- femalescreamsounds = null
-
-/datum/species/lizard
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg', 'sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg')
-
- femalescreamsounds = null
-
-/datum/species/skeleton
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg')
- femalescreamsounds = null
-
-/datum/species/fly
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg')
- femalescreamsounds = null
-
-/datum/species/moth
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg')
- femalescreamsounds = null
-
-/datum/species/insect
- screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg')
- femalescreamsounds = null
-
-/datum/species/ethereal
- screamsounds = list('sound/voice/ethereal/ethereal_scream_1.ogg', 'sound/voice/ethereal/ethereal_scream_2.ogg', 'sound/voice/ethereal/ethereal_scream_3.ogg')
- femalescreamsounds = null
-
-/datum/species/jelly
- screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg')
- femalescreamsounds = null
-
-/datum/species/plasmaman
- screamsounds = list('sound/voice/plasmaman/plasmeme_scream_1.ogg', 'sound/voice/plasmaman/plasmeme_scream_2.ogg', 'sound/voice/plasmaman/plasmeme_scream_3.ogg')
- femalescreamsounds = null
-
-/datum/species/vox
- screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg')
- femalescreamsounds = null
-
-/datum/species/vox_primalis
- screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg')
- femalescreamsounds = null
-
-/datum/species/xeno
- screamsounds = list('sound/voice/hiss6.ogg')
- femalescreamsounds = null
-
-/datum/species/zombie
- screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg')
- femalescreamsounds = null
-
-/datum/species/lizard
- screamsounds = list('sound/voice/lizard/lizard_scream_1.ogg', 'sound/voice/lizard/lizard_scream_2.ogg', 'sound/voice/lizard/lizard_scream_3.ogg')
- femalescreamsounds = null
-
-/datum/species/teshari
- screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg')
- femalescreamsounds = null
diff --git a/modular_skyrat/modules/emotes/code/emotes.dm b/modular_skyrat/modules/emotes/code/emotes.dm
deleted file mode 100644
index 16c8ecbcef6..00000000000
--- a/modular_skyrat/modules/emotes/code/emotes.dm
+++ /dev/null
@@ -1,529 +0,0 @@
-
-#define EMOTE_DELAY (2 SECONDS) //To prevent spam emotes. // THE FLUFFY FRONTIER EDIT: 5 sec -> 2 sec
-
-/mob
- var/nextsoundemote = 1 //Time at which the next emote can be played
-
-/datum/emote
- cooldown = EMOTE_DELAY
-
-//Disables the custom emote blacklist from TG that normally applies to slimes.
-/datum/emote/living/custom
- mob_type_blacklist_typecache = list(/mob/living/brain)
- cooldown = 0
- stat_allowed = SOFT_CRIT
-
-//me-verb emotes should not have a cooldown check
-/datum/emote/living/custom/check_cooldown(mob/user, intentional)
- return TRUE
-
-
-/datum/emote/imaginary_friend/custom/check_cooldown(mob/user, intentional)
- return TRUE
-
-
-/datum/emote/living/blush
- sound = 'modular_skyrat/modules/emotes/sound/emotes/blush.ogg'
-
-/datum/emote/living/quill
- key = "quill"
- key_third_person = "quills"
- message = "rustles their quills."
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/voxrustle.ogg'
-
-
-/datum/emote/living/cough/get_sound(mob/living/user)
- if(isvox(user))
- return 'modular_skyrat/modules/emotes/sound/emotes/voxcough.ogg'
- if(iscarbon(user))
- if(user.gender == MALE)
- return pick('modular_skyrat/modules/emotes/sound/emotes/male/male_cough_1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/male_cough_2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/male_cough_3.ogg')
- return pick('modular_skyrat/modules/emotes/sound/emotes/female/female_cough_1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/female_cough_3.ogg')
- return
-
-/datum/emote/living/sneeze
- vary = TRUE
-
-/datum/emote/living/sneeze/get_sound(mob/living/user)
- if(isvox(user))
- return 'modular_skyrat/modules/emotes/sound/emotes/voxsneeze.ogg'
- if(iscarbon(user))
- if(user.gender == MALE)
- return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sneeze.ogg'
- return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sneeze.ogg'
- return
-
-/datum/emote/flip/can_run_emote(mob/user, status_check, intentional)
- if(intentional && (!HAS_TRAIT(user, TRAIT_FREERUNNING) && !HAS_TRAIT(user, TRAIT_STYLISH)) && !isobserver(user))
- user.balloon_alert(user, "not nimble enough!")
- return FALSE
- return ..()
-
-/datum/emote/living/peep
- key = "peep"
- key_third_person = "peeps"
- message = "peeps like a bird!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/peep_once.ogg'
-
-/datum/emote/living/peep2
- key = "peep2"
- key_third_person = "peeps twice"
- message = "peeps twice like a bird!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/peep.ogg'
-
-/datum/emote/living/snap2
- key = "snap2"
- key_third_person = "snaps twice"
- message = "snaps twice."
- message_param = "snaps twice at %t."
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- hands_use_check = TRUE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/snap2.ogg'
-
-/datum/emote/living/snap3
- key = "snap3"
- key_third_person = "snaps thrice"
- message = "snaps thrice."
- message_param = "snaps thrice at %t."
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- hands_use_check = TRUE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/snap3.ogg'
-
-/datum/emote/living/awoo
- key = "awoo"
- key_third_person = "awoos"
- message = "lets out an awoo!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/awoo.ogg'
-
-/datum/emote/living/nya
- key = "nya"
- key_third_person = "nyas"
- message = "lets out a nya!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/nya.ogg'
-
-/datum/emote/living/weh
- key = "weh"
- key_third_person = "wehs"
- message = "lets out a weh!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/weh.ogg'
-
-/datum/emote/living/mothsqueak
- key = "msqueak"
- key_third_person = "lets out a tiny squeak"
- message = "lets out a tiny squeak!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/mothsqueak.ogg'
-
-/datum/emote/living/mousesqueak
- key = "squeak"
- key_third_person = "squeaks"
- message = "squeaks!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'sound/creatures/mousesqueek.ogg'
-
-/datum/emote/living/merp
- key = "merp"
- key_third_person = "merps"
- message = "merps!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/merp.ogg'
-
-/datum/emote/living/bark
- key = "bark"
- key_third_person = "barks"
- message = "barks!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/bark2.ogg'
-
-/datum/emote/living/squish
- key = "squish"
- key_third_person = "squishes"
- message = "squishes!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/slime_squish.ogg'
-
-/datum/emote/living/meow
- key = "meow"
- key_third_person = "meows"
- message = "meows!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/meow.ogg'
-
-/datum/emote/living/hiss
- key = "hiss1"
- key_third_person = "hisses"
- message = "hisses!"
- emote_type = EMOTE_AUDIBLE
- mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/hiss.ogg'
-
-/datum/emote/living/chitter
- key = "chitter"
- key_third_person = "chitters"
- message = "chitters!"
- emote_type = EMOTE_AUDIBLE
- mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/mothchitter.ogg'
-
-/datum/emote/living/sigh/get_sound(mob/living/user)
- if(iscarbon(user))
- if(user.gender == MALE)
- return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sigh.ogg'
- return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sigh.ogg'
- return
-
-/datum/emote/living/sniff
- vary = TRUE
-
-/datum/emote/living/sniff/get_sound(mob/living/user)
- if(iscarbon(user))
- if(user.gender == MALE)
- return 'modular_skyrat/modules/emotes/sound/emotes/male/male_sniff.ogg'
- return 'modular_skyrat/modules/emotes/sound/emotes/female/female_sniff.ogg'
- return
-
-/datum/emote/living/gasp/get_sound(mob/living/user)
- if(iscarbon(user))
- if(user.gender == MALE)
- return pick('modular_skyrat/modules/emotes/sound/emotes/male/gasp_m1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m3.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m4.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m5.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/male/gasp_m6.ogg')
- return pick('modular_skyrat/modules/emotes/sound/emotes/female/gasp_f1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f3.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f4.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f5.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/gasp_f6.ogg')
- return
-
-/datum/emote/living/snore
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/snore.ogg'
-
-/datum/emote/living/burp
- vary = TRUE
-
-/datum/emote/living/burp/get_sound(mob/living/user)
- if(iscarbon(user))
- if(user.gender == MALE)
- return 'modular_skyrat/modules/emotes/sound/emotes/male/burp_m.ogg'
- return 'modular_skyrat/modules/emotes/sound/emotes/female/burp_f.ogg'
- return
-
-/datum/emote/living/clap
- key = "clap"
- key_third_person = "claps"
- message = "claps."
- muzzle_ignore = TRUE
- hands_use_check = TRUE
- emote_type = EMOTE_AUDIBLE
- audio_cooldown = 5 SECONDS
- vary = TRUE
- mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
-
-/datum/emote/living/clap/get_sound(mob/living/user)
- return pick('modular_skyrat/modules/emotes/sound/emotes/clap1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/clap2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/clap3.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/clap4.ogg')
-
-/datum/emote/living/clap/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional)
- if(user.usable_hands < 2)
- return FALSE
- return ..()
-
-/datum/emote/living/clap1
- key = "clap1"
- key_third_person = "claps once"
- message = "claps once."
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- hands_use_check = TRUE
- vary = TRUE
- mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
-
-/datum/emote/living/clap1/get_sound(mob/living/user)
- return pick('modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/claponce2.ogg')
-
-/datum/emote/living/clap1/can_run_emote(mob/living/carbon/user, status_check = TRUE , intentional)
- if(user.usable_hands < 2)
- return FALSE
- return ..()
-
-/datum/emote/living/headtilt
- key = "tilt"
- key_third_person = "tilts"
- message = "tilts their head."
- message_AI = "tilts the image on their display."
-
-/datum/emote/beep
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/emotes/twobeep.ogg'
- mob_type_allowed_typecache = list(/mob/living) //Beep already exists on brains and silicons
-
-/datum/emote/living/blink2
- key = "blink2"
- key_third_person = "blinks twice"
- message = "blinks twice."
- message_AI = "has their display flicker twice."
-
-/datum/emote/living/rblink
- key = "rblink"
- key_third_person = "rapidly blinks"
- message = "rapidly blinks!"
- message_AI = "has their display port flash rapidly!"
-
-/datum/emote/living/squint
- key = "squint"
- key_third_person = "squints"
- message = "squints."
- message_AI = "zooms in."
-
-/datum/emote/living/smirk
- key = "smirk"
- key_third_person = "smirks"
- message = "smirks."
-
-/datum/emote/living/eyeroll
- key = "eyeroll"
- key_third_person = "rolls their eyes"
- message = "rolls their eyes."
-
-/datum/emote/living/huff
- key = "huffs"
- key_third_person = "huffs"
- message = "huffs!"
-
-/datum/emote/living/etwitch
- key = "etwitch"
- key_third_person = "twitches their ears"
- message = "twitches their ears!"
-
-/datum/emote/living/clear
- key = "clear"
- key_third_person = "clears their throat"
- message = "clears their throat."
-
-// Avian revolution
-/datum/emote/living/bawk
- key = "bawk"
- key_third_person = "bawks"
- message = "bawks like a chicken."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/bawk.ogg'
-
-/datum/emote/living/caw
- key = "caw"
- key_third_person = "caws"
- message = "caws!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/caw.ogg'
-
-/datum/emote/living/caw2
- key = "caw2"
- key_third_person = "caws twice"
- message = "caws twice!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/caw2.ogg'
-
-/datum/emote/living/whistle
- key = "whistle"
- key_third_person = "whistles"
- message = "whistles."
- emote_type = EMOTE_AUDIBLE
-
-/datum/emote/living/blep
- key = "blep"
- key_third_person = "bleps"
- message = "bleps their tongue out. Blep."
- message_AI = "shows an image of a random blepping animal. Blep."
- message_robot = "bleps their robo-tongue out. Blep."
-
-/datum/emote/living/bork
- key = "bork"
- key_third_person = "borks"
- message = "lets out a bork."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/bork.ogg'
-
-/datum/emote/living/hoot
- key = "hoot"
- key_third_person = "hoots"
- message = "hoots!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/hoot.ogg'
-
-/datum/emote/living/growl
- key = "growl"
- key_third_person = "growls"
- message = "lets out a growl."
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/growl.ogg'
-
-/datum/emote/living/woof
- key = "woof"
- key_third_person = "woofs"
- message = "lets out a woof."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/woof.ogg'
-
-/datum/emote/living/baa
- key = "baa"
- key_third_person = "baas"
- message = "lets out a baa."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/baa.ogg'
-
-/datum/emote/living/baa2
- key = "baa2"
- key_third_person = "baas"
- message = "bleats."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/baa2.ogg'
-
-/datum/emote/living/wurble
- key = "wurble"
- key_third_person = "wurbles"
- message = "lets out a wurble."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/wurble.ogg'
-
-/datum/emote/living/rattle
- key = "rattle"
- key_third_person = "rattles"
- message = "rattles!"
- emote_type = EMOTE_AUDIBLE
- muzzle_ignore = TRUE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/rattle.ogg'
-
-/datum/emote/living/cackle
- key = "cackle"
- key_third_person = "cackles"
- message = "cackles hysterically!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/cackle_yeen.ogg'
-
-/mob/living/proc/do_ass_slap_animation(atom/slapped)
- do_attack_animation(slapped, no_effect=TRUE)
- var/image/gloveimg = image('icons/effects/effects.dmi', slapped, "slapglove", slapped.layer + 0.1)
- gloveimg.pixel_y = -5
- gloveimg.pixel_x = 0
- slapped.flick_overlay_view(gloveimg, 1 SECONDS)
-
- // And animate the attack!
- animate(gloveimg, alpha = 175, transform = matrix() * 0.75, pixel_x = 0, pixel_y = -5, pixel_z = 0, time = 0.3 SECONDS)
- animate(time = 0.1 SECONDS)
- animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT)
-
-//Froggie Revolution
-/datum/emote/living/warble
- key = "warble"
- key_third_person = "warbles"
- message = "warbles!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/warbles.ogg'
-
-/datum/emote/living/trills
- key = "trills"
- key_third_person = "trills!"
- message = "trills!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/trills.ogg'
-
-/datum/emote/living/rpurr
- key = "rpurr"
- key_third_person = "purrs!"
- message = "purrs!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/raptor_purr.ogg'
-
-/datum/emote/living/purr //Ported from CitRP originally by buffyuwu.
- key = "purr"
- key_third_person = "purrs!"
- message = "purrs!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/feline_purr.ogg'
-
-/datum/emote/living/moo
- key = "moo"
- key_third_person = "moos!"
- message = "moos!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/moo.ogg'
-
-/datum/emote/living/honk
- key = "honk1"
- key_third_person = "honks loudly like a goose!"
- message = "honks loudly like a goose!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'modular_skyrat/modules/emotes/sound/voice/goose_honk.ogg'
-
-/datum/emote/living/gnash
- key = "gnash"
- key_third_person = "gnashes"
- message = "gnashes."
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'sound/weapons/bite.ogg'
-
-/datum/emote/living/thump
- key = "thump"
- key_third_person = "thumps"
- message = "thumps their foot!"
- emote_type = EMOTE_AUDIBLE
- vary = TRUE
- sound = 'sound/effects/glassbash.ogg'
diff --git a/modular_skyrat/modules/emotes/code/laugh_datums.dm b/modular_skyrat/modules/emotes/code/laugh_datums.dm
deleted file mode 100644
index 715738537e9..00000000000
--- a/modular_skyrat/modules/emotes/code/laugh_datums.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-GLOBAL_LIST_EMPTY(laugh_types)
-
-/datum/laugh_type
- var/name
- var/list/male_laughsounds
- var/list/female_laughsounds
-
-/datum/laugh_type/none //Why would you want this?
- name = "No Laugh"
- male_laughsounds = null
- female_laughsounds = null
-
-/datum/laugh_type/human
- name = "Human Laugh"
- male_laughsounds = list('sound/voice/human/manlaugh1.ogg',
- 'sound/voice/human/manlaugh2.ogg')
- female_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/female/female_giggle_2.ogg')
-
-/datum/laugh_type/felinid
- name = "Felinid Laugh"
- male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/nyahaha1.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/nyahaha2.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/nyaha.ogg',
- 'modular_skyrat/modules/emotes/sound/emotes/nyahehe.ogg')
- female_laughsounds = null
-
-/datum/laugh_type/moth
- name = "Moth Laugh"
- male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg')
- female_laughsounds = null
-
-/datum/laugh_type/insect
- name = "Insect Laugh"
- male_laughsounds = list('modular_skyrat/modules/emotes/sound/emotes/mothlaugh.ogg')
- female_laughsounds = null
diff --git a/modular_skyrat/modules/emotes/code/scream_datums.dm b/modular_skyrat/modules/emotes/code/scream_datums.dm
deleted file mode 100644
index 8e75aa7f556..00000000000
--- a/modular_skyrat/modules/emotes/code/scream_datums.dm
+++ /dev/null
@@ -1,131 +0,0 @@
-GLOBAL_LIST_EMPTY(scream_types)
-
-/datum/scream_type
- var/name
- var/list/male_screamsounds
- var/list/female_screamsounds
-
-/datum/scream_type/none //Why would you want this?
- name = "No Scream"
- male_screamsounds = null
- female_screamsounds = null
-
-/datum/scream_type/human
- name = "Human Scream"
- male_screamsounds = list(
- 'modular_skyrat/modules/emotes/sound/voice/scream_m1.ogg',
- 'modular_skyrat/modules/emotes/sound/voice/scream_m2.ogg',
- )
- female_screamsounds = list(
- 'modular_skyrat/modules/emotes/sound/voice/scream_f1.ogg',
- 'modular_skyrat/modules/emotes/sound/voice/scream_f2.ogg',
- )
-
-/datum/scream_type/human_two
- name = "Human Scream 2"
- male_screamsounds = list(
- 'sound/voice/human/malescream_1.ogg',
- 'sound/voice/human/malescream_2.ogg',
- 'sound/voice/human/malescream_3.ogg',
- 'sound/voice/human/malescream_4.ogg',
- 'sound/voice/human/malescream_5.ogg',
- 'sound/voice/human/malescream_6.ogg',
- )
- female_screamsounds = list(
- 'sound/voice/human/femalescream_1.ogg',
- 'sound/voice/human/femalescream_2.ogg',
- 'sound/voice/human/femalescream_3.ogg',
- 'sound/voice/human/femalescream_4.ogg',
- 'sound/voice/human/femalescream_5.ogg',
- )
-
-/datum/scream_type/robotic
- name = "Robotic Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_silicon.ogg')
- female_screamsounds = null
-
-/datum/scream_type/lizard
- name = "Lizard Scream"
- male_screamsounds = list(
- 'sound/voice/lizard/lizard_scream_1.ogg',
- 'sound/voice/lizard/lizard_scream_2.ogg',
- 'sound/voice/lizard/lizard_scream_3.ogg',
- )
- female_screamsounds = null
-
-/datum/scream_type/lizard2
- name = "Lizard Scream 2"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_lizard.ogg')
- female_screamsounds = null
-
-/datum/scream_type/moth
- name = "Moth Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_moth.ogg')
- female_screamsounds = null
-
-/datum/scream_type/moth_two
- name = "Moth Scream 2"
- male_screamsounds = list('sound/voice/moth/scream_moth.ogg')
- female_screamsounds = null
-
-/datum/scream_type/jelly
- name = "Jelly Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/jelly_scream.ogg')
- female_screamsounds = null
-
-/datum/scream_type/vox
- name = "Vox Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/voxscream.ogg')
- female_screamsounds = null
-
-/datum/scream_type/xeno
- name = "Xeno Scream"
- male_screamsounds = list('sound/voice/hiss6.ogg')
- female_screamsounds = null
-
-/datum/scream_type/raptor //This is the Teshari scream ported from CitRP which was a cockatoo scream edited by BlackMajor.
- name = "Raptor Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/raptorscream.ogg')
- female_screamsounds = null
-
-/datum/scream_type/rodent //Ported from Polaris/Virgo.
- name = "Rodent Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/rodentscream.ogg')
- female_screamsounds = null
-
-/datum/scream_type/ethereal
- name = "Ethereal Scream"
- male_screamsounds = list(
- 'sound/voice/ethereal/ethereal_scream_1.ogg',
- 'sound/voice/ethereal/ethereal_scream_2.ogg',
- 'sound/voice/ethereal/ethereal_scream_3.ogg')
- female_screamsounds = null
-
-//DONATOR SCREAMS
-/datum/scream_type/zombie
- name = "Zombie Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/emotes/zombie_scream.ogg')
- female_screamsounds = null
-
-/datum/scream_type/monkey
- name = "Monkey Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_monkey.ogg')
- female_screamsounds = null
-
-/datum/scream_type/gorilla
- name = "Gorilla Scream"
- male_screamsounds = list('sound/creatures/gorilla.ogg')
- female_screamsounds = null
-
-/datum/scream_type/skeleton
- name = "Skeleton Scream"
- male_screamsounds = list('modular_skyrat/modules/emotes/sound/voice/scream_skeleton.ogg')
- female_screamsounds = null
-
-/datum/scream_type/plasmaman
- name = "Plasmaman Scream"
- male_screamsounds = list(
- 'sound/voice/plasmaman/plasmeme_scream_1.ogg',
- 'sound/voice/plasmaman/plasmeme_scream_2.ogg',
- 'sound/voice/plasmaman/plasmeme_scream_3.ogg')
- female_screamsounds = null
diff --git a/modular_skyrat/modules/emotes/readme.md b/modular_skyrat/modules/emotes/readme.md
deleted file mode 100644
index c4110c97c7a..00000000000
--- a/modular_skyrat/modules/emotes/readme.md
+++ /dev/null
@@ -1,56 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/892
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/1925
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/2320
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/6259
-
-## Title: All the emotes.
-
-MODULE ID: EMOTES
-
-### Description:
-
-Adds all the emotes we once had on the oldbase, and shoves them right into here.
-
-Adds some new emotes, and adjusted sound files.
-
-Pretty much anything that changes emotes is in here
-
-### TG Proc Changes:
-
-File Location | Changed TG Proc
-------------- | ---------------
-code/datums/emotes.dm | `/datum/emote/proc/check_cooldown(mob/user, intentional)`
-code/datums/emotes.dm | `/datum/emote/proc/run_emote(mob/user, params, type_override, intentional = FALSE)`
-code/modules/mob/living/carbon/carbon_defense.dm | `/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)`
-
-### TG File Changes:
-
-- code/datums/emotes.dm
-- code/modules/mob/living/emote.dm
-- code/modules/mob/living/carbon/emote.dm
-
-### Defines:
-
-File Location | Defines
-------------- | -------
-code/__DEFINES/~skyrat_defines/traits.dm | `#define TRAIT_EXCITABLE "wagwag"`
-modular_skyrat/modules/emotes/code/emotes.dm | `#define EMOTE_DELAY`
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-- Gandalf2k15 - porting and refactoring
-- Avunia Takiya
- - refactoring code
- - adjusting existing sound files
- - adding more emotes
-- TheOOZ Additional emotes
- - overlay emotes
- - turf emotes
-- VOREstation - a couple of the soundfiles and emote texts
diff --git a/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg b/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg
deleted file mode 100644
index a9f3be40ddd..00000000000
Binary files a/modular_skyrat/modules/emotes/sound/voice/scream_cat.ogg and /dev/null differ
diff --git a/modular_skyrat/modules/exp_corps/code/clothing.dm b/modular_skyrat/modules/exp_corps/code/clothing.dm
deleted file mode 100644
index 66e5422f012..00000000000
--- a/modular_skyrat/modules/exp_corps/code/clothing.dm
+++ /dev/null
@@ -1,274 +0,0 @@
-/obj/item/clothing/under/rank/expeditionary_corps
- name = "expeditionary corps uniform"
- desc = "A rugged uniform for those who see the worst at the edges of the galaxy."
- icon_state = "exp_corps"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- armor_type = /datum/armor/clothing_under/rank_expeditionary_corps
- strip_delay = 7 SECONDS
- alt_covers_chest = TRUE
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
-
-/datum/armor/clothing_under/rank_expeditionary_corps
- fire = 15
- acid = 15
-
-/obj/item/storage/belt/military/expeditionary_corps
- name = "expeditionary corps chest rig"
- desc = "A set of tactical webbing worn by expeditionary corps."
- icon_state = "webbing_exp_corps"
- worn_icon_state = "webbing_exp_corps"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Webbing" = list(
- RESKIN_ICON_STATE = "webbing_exp_corps",
- RESKIN_WORN_ICON_STATE = "webbing_exp_corps"
- ),
- "Belt" = list(
- RESKIN_ICON_STATE = "belt_exp_corps",
- RESKIN_WORN_ICON_STATE = "belt_exp_corps"
- ),
- )
-
-/obj/item/storage/belt/military/expeditionary_corps/combat_tech
- name = "combat tech's chest rig"
-
-/obj/item/storage/belt/military/expeditionary_corps/combat_tech/PopulateContents()
- new /obj/item/screwdriver(src)
- new /obj/item/wrench(src)
- new /obj/item/weldingtool(src)
- new /obj/item/crowbar(src)
- new /obj/item/wirecutters(src)
- new /obj/item/multitool(src)
- new /obj/item/stack/cable_coil(src)
-
-/obj/item/storage/belt/military/expeditionary_corps/field_medic
- name = "field medic's chest rig"
-
-/obj/item/storage/belt/military/expeditionary_corps/field_medic/PopulateContents()
- new /obj/item/scalpel(src)
- new /obj/item/circular_saw/field_medic(src)
- new /obj/item/hemostat(src)
- new /obj/item/retractor(src)
- new /obj/item/cautery(src)
- new /obj/item/surgical_drapes(src)
- new /obj/item/bonesetter(src)
-
-/obj/item/storage/belt/military/expeditionary_corps/pointman
- name = "pointman's chest rig"
-
-/obj/item/storage/belt/military/expeditionary_corps/pointman/PopulateContents()
- new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src)
- new /obj/item/stack/sheet/plasteel(src,5)
- new /obj/item/reagent_containers/cup/bottle/morphine(src)
-
-/obj/item/storage/belt/military/expeditionary_corps/marksman
- name = "marksman's chest rig"
-
-/obj/item/storage/belt/military/expeditionary_corps/marksman/PopulateContents()
- new /obj/item/binoculars(src)
- new /obj/item/storage/fancy/cigarettes/cigpack_robust(src)
- new /obj/item/lighter(src)
- new /obj/item/clothing/mask/bandana/skull(src)
-
-/obj/item/clothing/shoes/combat/expeditionary_corps
- name = "expeditionary corps boots"
- desc = "High speed, low drag combat boots."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/shoes.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/feet.dmi'
- icon_state = "exp_corps"
- inhand_icon_state = "jackboots"
-
-/obj/item/clothing/gloves/color/black/expeditionary_corps
- name = "expeditionary corps gloves"
- icon_state = "exp_corps"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/gloves/chief_engineer/expeditionary_corps
- name = "expeditionary corps insulated gloves"
- icon_state = "exp_corps_eng"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- worn_icon_state = "exp_corps"
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = FIRE_PROOF
- armor_type = /datum/armor/chief_engineer_expeditionary_corps
-
-/datum/armor/chief_engineer_expeditionary_corps
- fire = 80
- acid = 50
-
-/obj/item/clothing/gloves/latex/nitrile/expeditionary_corps
- name = "expeditionary corps medic gloves"
- icon_state = "exp_corps_med"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- worn_icon_state = "exp_corps"
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = FIRE_PROOF
- armor_type = /datum/armor/nitrile_expeditionary_corps
-
-/datum/armor/nitrile_expeditionary_corps
- fire = 80
- acid = 50
-
-/obj/item/storage/backpack/duffelbag/expeditionary_corps
- name = "expeditionary corps bag"
- desc = "A large bag for holding extra tactical supplies."
- icon_state = "exp_corps"
- inhand_icon_state = "backpack"
- icon = 'modular_skyrat/modules/exp_corps/icons/backpack.dmi'
- worn_icon = 'modular_skyrat/modules/exp_corps/icons/mob_backpack.dmi'
- uses_advanced_reskins = TRUE
- unique_reskin = list(
- "Backpack" = list(
- RESKIN_ICON_STATE = "exp_corps",
- RESKIN_WORN_ICON_STATE = "exp_corps"
- ),
- "Belt" = list(
- RESKIN_ICON_STATE = "exp_corps_satchel",
- RESKIN_WORN_ICON_STATE = "exp_corps_satchel"
- ),
- )
-
-/obj/item/clothing/suit/armor/vest/expeditionary_corps
- name = "expeditionary corps armor vest"
- desc = "An armored vest that provides okay protection against most types of damage."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- icon_state = "exp_corps"
- body_parts_covered = CHEST|GROIN|ARMS
- armor_type = /datum/armor/vest_expeditionary_corps
- cold_protection = CHEST|GROIN|ARMS
- heat_protection = CHEST|GROIN|ARMS
- dog_fashion = null
- allowed = list(
- /obj/item/melee,
- /obj/item/ammo_box,
- /obj/item/ammo_casing,
- /obj/item/flashlight,
- /obj/item/gun,
- /obj/item/knife,
- /obj/item/reagent_containers,
- /obj/item/restraints/handcuffs,
- /obj/item/tank/internals/emergency_oxygen,
- /obj/item/tank/internals/plasmaman
- )
-
-
-/datum/armor/vest_expeditionary_corps
- melee = 30
- bullet = 30
- laser = 30
- energy = 30
- bomb = 40
- fire = 80
- acid = 100
- wound = 10
-
-/obj/item/clothing/head/helmet/expeditionary_corps
- name = "expeditionary corps helmet"
- desc = "A robust helmet worn by Expeditionary Corps troopers. Alt+click it to toggle the NV system."
- icon_state = "exp_corps"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
- armor_type = /datum/armor/helmet_expeditionary_corps
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
- var/nightvision = FALSE
- var/mob/living/carbon/current_user
- actions_types = list(/datum/action/item_action/toggle_nv)
-
-/datum/armor/helmet_expeditionary_corps
- melee = 20
- bullet = 20
- laser = 20
- energy = 20
- bomb = 30
- fire = 80
- acid = 100
- wound = 10
-
-/datum/action/item_action/toggle_nv
- name = "Toggle Nightvision"
-
-/datum/action/item_action/toggle_nv/Trigger(trigger_flags)
- var/obj/item/clothing/head/helmet/expeditionary_corps/my_helmet = target
- if(!my_helmet.current_user)
- return
- my_helmet.nightvision = !my_helmet.nightvision
- if(my_helmet.nightvision)
- to_chat(owner, span_notice("You flip the NV goggles down."))
- my_helmet.enable_nv()
- else
- to_chat(owner, span_notice("You flip the NV goggles up."))
- my_helmet.disable_nv()
- my_helmet.update_appearance()
-
-/obj/item/clothing/head/helmet/expeditionary_corps/equipped(mob/user, slot)
- . = ..()
- current_user = user
-
-/obj/item/clothing/head/helmet/expeditionary_corps/proc/enable_nv(mob/user)
- if(current_user)
- var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes)
- if(my_eyes)
- my_eyes.color_cutoffs = list(10, 30, 10)
- my_eyes.flash_protect = FLASH_PROTECTION_SENSITIVE
- current_user.add_client_colour(/datum/client_colour/glass_colour/lightgreen)
-
-/obj/item/clothing/head/helmet/expeditionary_corps/proc/disable_nv()
- if(current_user)
- var/obj/item/organ/internal/eyes/my_eyes = current_user.get_organ_by_type(/obj/item/organ/internal/eyes)
- if(my_eyes)
- my_eyes.color_cutoffs = initial(my_eyes.color_cutoffs)
- my_eyes.flash_protect = initial(my_eyes.flash_protect)
- current_user.remove_client_colour(/datum/client_colour/glass_colour/lightgreen)
- current_user.update_sight()
-
-/obj/item/clothing/head/helmet/expeditionary_corps/AltClick(mob/user)
- . = ..()
- if(!current_user)
- return
- if(!can_interact(user))
- return
-
- nightvision = !nightvision
- if(nightvision)
- to_chat(user, span_notice("You flip the NV goggles down."))
- enable_nv()
- else
- to_chat(user, span_notice("You flip the NV goggles up."))
- disable_nv()
- update_appearance()
-
-/obj/item/clothing/head/helmet/expeditionary_corps/dropped(mob/user)
- . = ..()
- disable_nv()
- current_user = null
-
-/obj/item/clothing/head/helmet/expeditionary_corps/Destroy()
- disable_nv()
- current_user = null
- return ..()
-
-/obj/item/clothing/head/helmet/expeditionary_corps/update_icon_state()
- . = ..()
- if(nightvision)
- icon_state = "exp_corps_on"
- else
- icon_state = "exp_corps"
diff --git a/modular_skyrat/modules/exp_corps/code/gear.dm b/modular_skyrat/modules/exp_corps/code/gear.dm
deleted file mode 100644
index 5d3668f3f6d..00000000000
--- a/modular_skyrat/modules/exp_corps/code/gear.dm
+++ /dev/null
@@ -1,120 +0,0 @@
-//Gateway Medkit, no more combat defibs!
-/obj/item/storage/medkit/expeditionary
- name = "combat medical kit"
- desc = "Now with 100% less bullshit."
- icon_state = "medkit_tactical"
- damagetype_healed = "all"
-
-/obj/item/storage/medkit/expeditionary/PopulateContents()
- if(empty)
- return
- new /obj/item/stack/medical/gauze(src)
- new /obj/item/defibrillator/compact/loaded(src)
- new /obj/item/reagent_containers/hypospray/combat(src)
- new /obj/item/stack/medical/mesh/advanced(src)
- new /obj/item/stack/medical/suture/medicated(src)
- new /obj/item/clothing/glasses/hud/health(src)
-
-//Field Medic's weapon, no more tomahawk!
-/obj/item/circular_saw/field_medic
- name = "bone saw"
- desc = "Did that sting? SAW-ry!"
- force = 20
- icon_state = "bonesaw"
- icon = 'modular_skyrat/modules/exp_corps/icons/bonesaw.dmi'
- lefthand_file = 'modular_skyrat/modules/exp_corps/icons/bonesaw_l.dmi'
- righthand_file = 'modular_skyrat/modules/exp_corps/icons/bonesaw_r.dmi'
- inhand_icon_state = "bonesaw"
- hitsound = 'sound/weapons/bladeslice.ogg'
- toolspeed = 0.2
- throw_range = 3
- w_class = WEIGHT_CLASS_SMALL
-
-//Pointman's riot shield. Fixable with 1 plasteel, crafting recipe for broken shield
-/obj/item/shield/riot/pointman
- name = "pointman shield"
- desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell."
- icon_state = "riot"
- icon = 'modular_skyrat/modules/exp_corps/icons/riot.dmi'
- lefthand_file = 'modular_skyrat/modules/exp_corps/icons/riot_left.dmi'
- righthand_file = 'modular_skyrat/modules/exp_corps/icons/riot_right.dmi'
- force = 14
- throwforce = 5
- throw_speed = 1
- throw_range = 1
- block_chance = 60
- w_class = WEIGHT_CLASS_BULKY
- attack_verb_continuous = list("shoves", "bashes")
- attack_verb_simple = list("shove", "bash")
- transparent = TRUE
- max_integrity = 200
- var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with
-
-/obj/item/shield/riot/pointman/shatter(mob/living/carbon/human/owner)
- playsound(owner, 'sound/effects/glassbr3.ogg', 100)
- new /obj/item/pointman_broken((get_turf(src)))
-
-/obj/item/shield/riot/pointman/attackby(obj/item/W, mob/user, params)
- if(istype(W, repairable_by))
- var/obj/item/stack/sheet/plasteel_repair = W
- plasteel_repair.use(1)
- repair(user, params)
- return ..()
-
-/obj/item/shield/riot/pointman/proc/repair(mob/user, params)
- atom_integrity = max_integrity
- if(user)
- UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
- to_chat(user, span_notice("You fix the damage on [src]."))
-
-/obj/item/pointman_broken
- name = "broken pointman shield"
- desc = "Might be able to be repaired with plasteel and a welder."
- icon_state = "riot_broken"
- icon = 'modular_skyrat/modules/exp_corps/icons/riot.dmi'
- w_class = WEIGHT_CLASS_BULKY
-
-//broken shield fixing
-/datum/crafting_recipe/pointman
- name = "Broken Riot Repair"
- result = /obj/item/shield/riot/pointman
- reqs = list(/obj/item/pointman_broken = 1,
- /obj/item/stack/sheet/plasteel = 3,
- /obj/item/stack/sheet/rglass = 3)
- time = 40
- category = CAT_MISC
- tool_behaviors = list(TOOL_WELDER)
-
-//Marksman's throwing knife and a pouch for it
-/obj/item/knife/combat/marksman
- name = "throwing knife"
- desc = "Very well weighted for throwing, feels awkward to use for anything else."
- icon = 'modular_skyrat/modules/exp_corps/icons/throwing.dmi'
- icon_state = "throwing"
- force = 12
- throwforce = 30
-
-/obj/item/storage/pouch/ammo/marksman
- name = "marksman's knife pouch"
- unique_reskin = NONE
-
-/obj/item/storage/pouch/ammo/marksman/Initialize(mapload)
- . = ..()
- create_storage(storage_type = /datum/storage/marksman)
-
-/datum/storage/marksman
- max_total_storage = 60
- max_slots = 10
- numerical_stacking = TRUE
- quickdraw = TRUE
-
-/datum/storage/marksman/New()
- . = ..()
- can_hold = typecacheof(list(/obj/item/knife/combat))
-
-/obj/item/storage/pouch/ammo/marksman/PopulateContents() //can kill most basic enemies with 5 knives, though marksmen shouldn't be soloing enemies anyways
- new /obj/item/knife/combat/marksman(src)
- new /obj/item/knife/combat/marksman(src)
- new /obj/item/knife/combat/marksman(src)
- new /obj/item/knife/combat/marksman(src)
- new /obj/item/knife/combat/marksman(src)
diff --git a/modular_skyrat/modules/exp_corps/code/tomahawk.dm b/modular_skyrat/modules/exp_corps/code/tomahawk.dm
deleted file mode 100644
index b08a1e473a5..00000000000
--- a/modular_skyrat/modules/exp_corps/code/tomahawk.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/obj/item/melee/tomahawk
- name = "expeditionary tomahawk"
- desc = "A somewhat dulled axe blade upon a short fibremetal handle."
- icon = 'modular_skyrat/modules/exp_corps/icons/tomahawk.dmi'
- icon_state = "tomahawk"
- inhand_icon_state = "tomahawk"
- lefthand_file = 'modular_skyrat/modules/exp_corps/icons/tomahawk_l.dmi'
- righthand_file = 'modular_skyrat/modules/exp_corps/icons/tomahawk_r.dmi'
- worn_icon = 'modular_skyrat/modules/exp_corps/icons/tomahawk_worn.dmi'
- obj_flags = CONDUCTS_ELECTRICITY
- force = 15 //Equivalent to a survival knife
- w_class = WEIGHT_CLASS_SMALL
- throwforce = 18
- throw_speed = 4
- throw_range = 8
- embedding = list("pain_mult" = 6, "embed_chance" = 60, "fall_chance" = 10)
- attack_verb_continuous = list("chops", "tears", "lacerates", "cuts")
- attack_verb_simple = list("chop", "tear", "lacerate", "cut")
- hitsound = 'sound/weapons/bladeslice.ogg'
- sharpness = SHARP_EDGED
-
-/obj/item/melee/tomahawk/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/butchering, 70, 100)
diff --git a/modular_skyrat/modules/faction/code/mapping/ruins.dm b/modular_skyrat/modules/faction/code/mapping/ruins.dm
deleted file mode 100644
index 5764eb292f6..00000000000
--- a/modular_skyrat/modules/faction/code/mapping/ruins.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/map_template/shuttle/tradership
- prefix = "modular_skyrat/modules/faction/maps/shuttles/"
- suffix = "faction"
- who_can_purchase = null
- name = "Faction Trader Ship"
- port_id = "tradership"
diff --git a/modular_skyrat/modules/food_replicator/code/clothing.dm b/modular_skyrat/modules/food_replicator/code/clothing.dm
deleted file mode 100644
index 8d1b6238ed6..00000000000
--- a/modular_skyrat/modules/food_replicator/code/clothing.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/obj/item/clothing/under/colonial
- name = "colonial outfit"
- desc = "Fancy white satin shirt and a pair of cotton-blend pants with a black synthleather belt."
- icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi'
- worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi'
- icon_state = "under_colonial"
-
-/obj/item/clothing/under/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
- if(is_species(equipper, /datum/species/teshari))
- to_chat(equipper, span_warning("[src] is far too big for you!"))
- return FALSE
-
- return ..()
-
-/obj/item/clothing/shoes/jackboots/colonial
- name = "colonial half-boots"
- desc = "Good old laceless boots, with a sturdy plastic toe to, theoretically, keep your toes uncrushed."
- icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi'
- worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi'
- icon_state = "boots_colonial"
-
-/obj/item/clothing/shoes/jackboots/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
- if(is_species(equipper, /datum/species/teshari))
- to_chat(equipper, span_warning("[src] is far too big for you!"))
- return FALSE
-
- return ..()
-
-/obj/item/clothing/neck/cloak/colonial
- name = "colonial cloak"
- desc = "A cloak made from heavy tarpaulin. Nigh wind- and waterproof thanks to its design."
- slot_flags = ITEM_SLOT_OCLOTHING|ITEM_SLOT_NECK
- w_class = WEIGHT_CLASS_NORMAL
- icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi'
- worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi'
- icon_state = "cloak_colonial"
-
-/obj/item/clothing/neck/cloak/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
- if(is_species(equipper, /datum/species/teshari))
- to_chat(equipper, span_warning("[src] is far too big for you!"))
- return FALSE
-
- return ..()
-
-/obj/item/clothing/head/hats/colonial
- name = "colonial cap"
- desc = "A puffy cap made out of tarpaulin covered by some textile. It is sturdy and comfortable, and seems to retain its form very well."
- icon = 'modular_skyrat/modules/food_replicator/icons/clothing.dmi'
- worn_icon = 'modular_skyrat/modules/food_replicator/icons/clothing_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/food_replicator/icons/clothing_digi.dmi'
- icon_state = "cap_colonial"
- inhand_icon_state = null
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/colonial/mob_can_equip(mob/living/equipper, slot, disable_warning, bypass_equip_delay_self, ignore_equipped, indirect_action)
- if(is_species(equipper, /datum/species/teshari))
- to_chat(equipper, span_warning("[src] is far too big for you!"))
- return FALSE
-
- return ..()
diff --git a/modular_skyrat/modules/food_replicator/code/medical.dm b/modular_skyrat/modules/food_replicator/code/medical.dm
deleted file mode 100644
index 1b55cae5991..00000000000
--- a/modular_skyrat/modules/food_replicator/code/medical.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/obj/item/stack/medical/suture/bloody
- name = "hemostatic suture"
- desc = "Bloodclotting agent-infused sterile sutures used to seal up cuts and lacerations and reverse critical bleedings."
- icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi'
- icon_state = "hemo_suture"
- heal_brute = 7
- stop_bleeding = 1
- grind_results = list(/datum/reagent/medicine/coagulant = 2)
- merge_type = /obj/item/stack/medical/suture/bloody
-
-/obj/item/stack/medical/suture/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user)
- . = ..()
- if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE)
- healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2)
- healed_mob.adjustOxyLoss(-amount_healed)
-
-/obj/item/stack/medical/mesh/bloody
- name = "hemostatic mesh"
- desc = "A hemostatic mesh used to dress burns and stimulate hemopoiesis. Due to its blood-related purpose, it is worse at sanitizing infections."
- icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi'
- icon_state = "hemo_mesh"
- heal_burn = 7
- sanitization = 0.5
- flesh_regeneration = 1.75
- stop_bleeding = 0.25
- grind_results = list(/datum/reagent/medicine/coagulant = 2)
- merge_type = /obj/item/stack/medical/mesh/bloody
-
-/obj/item/stack/medical/mesh/bloody/update_icon_state()
- if(is_open)
- return ..()
-
- icon_state = "hemo_mesh_closed"
-
-/obj/item/stack/medical/mesh/bloody/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user)
- . = ..()
- if(healed_mob.blood_volume <= BLOOD_VOLUME_SAFE)
- healed_mob.reagents.add_reagent(/datum/reagent/medicine/salglu_solution, 2)
- healed_mob.adjustOxyLoss(-amount_healed)
-
-/obj/item/reagent_containers/hypospray/medipen/glucose
- name = "pressurised glucose medipen"
- desc = "A medipen for keeping yourself going during prolonged EVA shifts, injects a dose of glucose into your bloodstream. Recommended for use in low-pressure environments."
- icon = 'modular_skyrat/modules/food_replicator/icons/medicine.dmi'
- icon_state = "glupen"
- inhand_icon_state = "stimpen"
- base_icon_state = "glupen"
- volume = 15
- amount_per_transfer_from_this = 15
- list_reagents = list(/datum/reagent/consumable/nutriment/glucose = 15)
-
-/obj/item/reagent_containers/hypospray/medipen/glucose/inject(mob/living/affected_mob, mob/user)
- if(lavaland_equipment_pressure_check(get_turf(user)))
- amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
- return ..()
-
- if(DOING_INTERACTION(user, DOAFTER_SOURCE_SURVIVALPEN))
- to_chat(user,span_notice("You are too busy to use \the [src]!"))
- return
-
- to_chat(user,span_notice("You start manually releasing the low-pressure gauge..."))
- if(!do_after(user, 10 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN))
- return
-
- amount_per_transfer_from_this = initial(amount_per_transfer_from_this) * 0.5
- return ..()
diff --git a/modular_skyrat/modules/food_replicator/code/rationpacks.dm b/modular_skyrat/modules/food_replicator/code/rationpacks.dm
deleted file mode 100644
index c22d588d49a..00000000000
--- a/modular_skyrat/modules/food_replicator/code/rationpacks.dm
+++ /dev/null
@@ -1,188 +0,0 @@
-/obj/item/food/colonial_course
- name = "undefined colonial course"
- desc = "Something you shouldn't see. But it's edible."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- icon_state = "borgir"
- base_icon_state = "borgir"
- food_reagents = list(/datum/reagent/consumable/nutriment = 20)
- tastes = list("crayon powder" = 1)
- foodtypes = VEGETABLES | GRAIN
- w_class = WEIGHT_CLASS_SMALL
- preserved_food = TRUE
-
-/obj/item/food/colonial_course/attack_self(mob/user, modifiers)
- if(preserved_food)
- preserved_food = FALSE
- icon_state = "[base_icon_state]_unwrapped"
- to_chat(user, span_notice("You unpackage \the [src]."))
- playsound(user.loc, 'sound/items/foodcanopen.ogg', 50)
-
-/obj/item/food/colonial_course/attack(mob/living/target, mob/user, def_zone)
- if(preserved_food)
- to_chat(user, span_warning("[src] is still packaged!"))
- return FALSE
-
- return ..()
-
-/obj/item/food/colonial_course/pljeskavica
- name = "pljeskavica"
- desc = "Freshly-printed steaming hot burger consisting of a biogenerator-produced handcraft-imitating buns, with a minced meat patty inbetween, among various vegetables and sauces.\
- Looks good enough for something as replicated as this. Its packaging is covered in copious amounts of information on its nutritional facts, contents and the expiry date. Sadly, it's all written in Pan-Slavic."
- trash_type = /obj/item/trash/pljeskavica
- food_reagents = list(
- /datum/reagent/consumable/nutriment = 3,
- /datum/reagent/consumable/nutriment/protein = 9,
- /datum/reagent/consumable/nutriment/vitamin = 4,
- )
- tastes = list("bun" = 2, "spiced meat" = 10, "death of veganism" = 3)
- foodtypes = VEGETABLES | GRAIN | MEAT
-
-/obj/item/food/colonial_course/nachos
- name = "plain nachos tray"
- desc = "A vacuum-sealed package with what seems to be a generous serving of triangular corn chips, with three sections reserved for a salsa, cheese and guacamole sauces.\
- Probably the best-looking food you can find in these rations, perhaps due to its simplicity."
- food_reagents = list(
- /datum/reagent/consumable/nutriment = 5,
- /datum/reagent/consumable/nutriment/vitamin = 2,
- )
- trash_type = /obj/item/trash/nachos
- icon_state = "nacho"
- base_icon_state = "nacho"
- tastes = list("corn chips" = 5, "'artificial' organic sauces" = 5)
- foodtypes = GRAIN | FRIED | DAIRY
-
-/obj/item/food/colonial_course/blins
- name = "condensed milk crepes"
- desc = "A vacuum-sealed four-pack of stuffed crepes with a minimal amount of markings. There is nothing else to it, to be frank.\
- Surprisingly tasty for its looks, as long as you're not lactose intolerant, on diet, or vegan. The back of the packaging is covered in a mass of information detailing the product."
- food_reagents = list(
- /datum/reagent/consumable/nutriment = 2,
- /datum/reagent/consumable/caramel = 3,
- /datum/reagent/consumable/milk = 4,
- )
- trash_type = /obj/item/trash/blins
- icon_state = "blin"
- base_icon_state = "blin"
- tastes = list("insane amount of sweetness" = 10, "crepes" = 3)
- foodtypes = SUGAR | GRAIN | DAIRY | BREAKFAST
-
-/obj/item/reagent_containers/cup/glass/coffee/colonial
- name = "colonial thermocup"
- desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side. \
- This particular one comes prefilled with a single serving of coffee powder."
- special_desc = "A small instruction on the side reads: \"For use in food replicators; mix water and powdered solutions in one-to-one proportions. \
- For cocoa, mix milk and powdered solution in one-to-one proportion.\" "
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- list_reagents = list(/datum/reagent/consumable/powdered_coffee = 25)
-
-/obj/item/reagent_containers/cup/glass/coffee/colonial/empty
- desc = "Technically, used to drink hot beverages. But since it's the only cup design that was available, you gotta make do. It has an instruction written on its side."
- list_reagents = null
-
-/obj/item/trash/pljeskavica
- name = "pljeskavica wrapping paper"
- desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, crumpled into a ball. It's probably best to dispose of it."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- icon_state = "borgir_trash"
-
-/obj/item/trash/nachos
- name = "empty nachos tray"
- desc = "Covered in sauce smearings and smaller pieces of the dish on the inside, a plastic food tray with not much use anymore. It's probably best to dispose of it or recycle it."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT)
- icon_state = "nacho_trash"
-
-/obj/item/trash/blins
- name = "empty crepes wrapper"
- desc = "Empty torn wrapper that used to hold something ridiculously sweet. It's probably best to recycle it."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- custom_materials = list(/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT * 0.5)
- icon_state = "blin_trash"
-
-/obj/item/storage/box/gum/colonial
- name = "mixed bubblegum packet"
- desc = "The packaging is entirely written in Pan-Slavic, with a small blurb of Sol Common. You would need to take a better look to read it, though, as it is written quite small."
- special_desc = "Examining the small text reveals the following: \"Foreign colonization ration, model J: mixed origin, adult. Bubblegum package, medicinal, recreational. \
- Do not overconsume. Certain strips contain nicotine.\" "
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- icon_state = "bubblegum"
-
-/obj/item/storage/box/gum/colonial/PopulateContents()
- new /obj/item/food/bubblegum(src)
- new /obj/item/food/bubblegum(src)
- new /obj/item/food/bubblegum/nicotine(src)
- new /obj/item/food/bubblegum/nicotine(src)
-
-/obj/item/storage/box/utensils
- name = "utensils package"
- desc = "A small package containing various utensils required for human consumption of various foods. \
- In a normal situation contains a plastic fork, a plastic spoon, and two serviettes."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- icon_state = "utensil_box"
- w_class = WEIGHT_CLASS_TINY
- illustration = null
- foldable_result = null
-
-/obj/item/storage/box/utensils/Initialize(mapload)
- . = ..()
- atom_storage.set_holdable(list(
- /obj/item/kitchen/spoon/plastic,
- /obj/item/kitchen/fork/plastic,
- /obj/item/serviette,
- ))
- atom_storage.max_slots = 4
-
-/obj/item/storage/box/utensils/PopulateContents()
- new /obj/item/kitchen/spoon/plastic(src)
- new /obj/item/kitchen/fork/plastic(src)
- new /obj/item/serviette/colonial(src)
- new /obj/item/serviette/colonial(src)
-
-/obj/item/serviette/colonial
- name = "colonial napkin"
- desc = "To clean all the mess. Comes with a custom combined design of red and blue."
- icon_state = "napkin_unused"
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- used_serviette = /obj/item/serviette_used/colonial
-
-/obj/item/serviette_used/colonial
- name = "dirty colonial napkin"
- desc = "No longer useful, super dirty, or soaked, or otherwise unrecognisable."
- icon_state = "napkin_used"
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
-
-/obj/item/storage/box/colonial_rations
- name = "foreign colonization ration"
- desc = "A freshly printed civilian MRE, or more specifically a lunchtime food package, for use in the early colonization times by the first settlers of what is now known as the NRI. \
- The lack of any imprinted dates, as well as its origin, the food replicator , should probably give you a good enough hint at its short, if reasonable, expiry time."
- icon = 'modular_skyrat/modules/food_replicator/icons/rationpack.dmi'
- icon_state = "mre_package"
- foldable_result = null
- illustration = null
-
-/obj/item/storage/box/colonial_rations/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = 6
- atom_storage.locked = TRUE
-
-/obj/item/storage/box/colonial_rations/attack_self(mob/user, modifiers)
- if(user)
- if(atom_storage.locked == TRUE)
- atom_storage.locked = FALSE
- icon_state = "mre_package_open"
- balloon_alert(user, "unsealed!")
- return ..()
- else
- atom_storage.locked = TRUE
- atom_storage.close_all()
- icon_state = "mre_package"
- balloon_alert(user, "resealed!")
- return
-
-/obj/item/storage/box/colonial_rations/PopulateContents()
- new /obj/item/food/colonial_course/pljeskavica(src)
- new /obj/item/food/colonial_course/nachos(src)
- new /obj/item/food/colonial_course/blins(src)
- new /obj/item/reagent_containers/cup/glass/coffee/colonial(src)
- new /obj/item/storage/box/gum/colonial(src)
- new /obj/item/storage/box/utensils(src)
diff --git a/modular_skyrat/modules/food_replicator/code/storage.dm b/modular_skyrat/modules/food_replicator/code/storage.dm
deleted file mode 100644
index 7bd4461a9e9..00000000000
--- a/modular_skyrat/modules/food_replicator/code/storage.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/storage/pouch/cin_medipens
- name = "colonial medipen pouch"
- desc = "A pouch for your (medi-)pens that goes in your pocket."
- icon = 'modular_skyrat/modules/food_replicator/icons/pouch.dmi'
- icon_state = "medipen_pouch"
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/storage/pouch/cin_medipens/update_icon_state()
- icon_state = "[initial(icon_state)]_[contents.len]"
- return ..()
-
-/obj/item/storage/pouch/cin_medipens/Initialize(mapload)
- . = ..()
- update_appearance()
-
-/obj/item/storage/pouch/cin_medipens/Initialize(mapload)
- . = ..()
- atom_storage.max_specific_storage = WEIGHT_CLASS_TINY
- atom_storage.max_total_storage = 4
- atom_storage.max_slots = 4
- atom_storage.can_hold = typecacheof(list(/obj/item/reagent_containers/hypospray/medipen, /obj/item/pen, /obj/item/flashlight/pen))
-
-/obj/item/storage/pouch/cin_medkit
- name = "colonial first aid kit"
- desc = "A medical case that goes in your pocket. Can be used to store things unrelated to medicine, except for guns, ammo and raw materials."
- icon = 'modular_skyrat/modules/food_replicator/icons/pouch.dmi'
- icon_state = "cfak"
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/storage/pouch/cin_medkit/Initialize(mapload)
- . = ..()
- atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL
- atom_storage.max_total_storage = 4
- atom_storage.max_slots = 4
- atom_storage.cant_hold = typecacheof(list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/stack/sheet))
diff --git a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm b/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm
deleted file mode 100644
index 0af43268ca5..00000000000
--- a/modular_skyrat/modules/ghostcafe/code/ghostcafeturf.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/turf/open/lava/fake
- name = "lava"
- desc = "Go on. Step in it. Maybe you'll be like some sort of Lava based Jesus."
- planetary_atmos = TRUE
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
- lava_damage = 0
- lava_firestacks = 0
- temperature_damage = 0
- immunity_trait = TRAIT_GHOSTROLE
- immunity_resistance_flags = LAVA_PROOF
-
diff --git a/modular_skyrat/modules/goofsec/code/solfed_clothing.dm b/modular_skyrat/modules/goofsec/code/solfed_clothing.dm
deleted file mode 100644
index ab3bff3e7d2..00000000000
--- a/modular_skyrat/modules/goofsec/code/solfed_clothing.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-// Peacekeeper jumpsuit
-
-/obj/item/clothing/under/sol_peacekeeper
- name = "sol peacekeeper uniform"
- desc = "A military-grade uniform with military grade comfort (none at all), often seen on \
- SolFed's various peacekeeping forces, and usually alongside a blue helmet."
- icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi'
- icon_state = "peacekeeper"
- worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi'
- worn_icon_state = "peacekeeper"
- armor_type = /datum/armor/clothing_under/rank_security
- inhand_icon_state = null
- has_sensor = SENSOR_COORDS
- random_sensor = FALSE
-
-// EMT jumpsuit
-
-/obj/item/clothing/under/sol_emt
- name = "sol emergency medical uniform"
- desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built paramedics in mind."
- icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi'
- icon_state = "emt"
- worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi'
- worn_icon_digi = 'modular_skyrat/modules/goofsec/icons/uniforms_worn_digi.dmi'
- worn_icon_state = "emt"
- armor_type = /datum/armor/clothing_under/rank_medical
- inhand_icon_state = null
- has_sensor = SENSOR_COORDS
- random_sensor = FALSE
-
-// Solfed flak jacket, for marshals
-
-/obj/item/clothing/suit/armor/vest/det_suit/sol
- name = "'Gordyn' flak vest"
- desc = "A light armored jacket common on SolFed personnel who need armor, but find a full vest \
- too impractical or uneeded."
- icon = 'modular_skyrat/modules/goofsec/icons/uniforms.dmi'
- icon_state = "flak"
- worn_icon = 'modular_skyrat/modules/goofsec/icons/uniforms_worn.dmi'
- worn_icon_state = "flak"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
diff --git a/modular_skyrat/modules/gunhud/readme.md b/modular_skyrat/modules/gunhud/readme.md
deleted file mode 100644
index 72538eb7857..00000000000
--- a/modular_skyrat/modules/gunhud/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## Title: Gunpoint
-
-MODULE ID: GUNHUD
-
-### Description:
-
-Adds a dynamic hud system for energy and some ballistics guns.
-
-### TG Proc Changes:
-- N/A
-### Defines:
-
-.code\__DEFINES\atom_hud.dm > #define AMMO_HUD "25"
-
-.code\modules\projectiles\guns\ballistic.dm > /obj/item/gun/ballistic/examine(mob/user)
-
-### Master file additions
-
-- Hud directory > _defines.dm, human.dm, hud.dm
-- `modular_skyrat\master_files\code\game\objects\items\tools\weldingtool.dm`: `proc/Initialize`, `proc/set_welding`
-- `modular_skyrat\master_files\code\modules\projectiles\guns\ballistic.dm`: `proc/eject_magazine`, `proc/insert_magazine`
-- `modular_skyrat\master_files\code\modules\projectiles\guns\energy.dm`: `proc/process`, `proc/select_fire`
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-Gandalf2k15 - OG creation.
-Larentoun - modularisation
diff --git a/modular_skyrat/modules/gunpoint/readme.md b/modular_skyrat/modules/gunpoint/readme.md
deleted file mode 100644
index 7b91a3a80d5..00000000000
--- a/modular_skyrat/modules/gunpoint/readme.md
+++ /dev/null
@@ -1,36 +0,0 @@
-## Title: Gunpoint
-
-MODULE ID: GUNPOINT
-
-### Description:
-
-Allows anyone with a gun to use SHIFT + MMB to hold someone at gunpoint, much like how baystation does it, but in a more visually clear way
-
-### TG Proc Changes:
-
- ./modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint.dm > /mob/living/ShiftMiddleClickOn() > CHILD PROC
- ./code/_onclick/hud/radial.dm > /datum/radial_menu/proc/setup_menu()
- ./code/_onclick/item_attack.dm > /obj/item/proc/attack_self()
- ./code/game/objects/items/devices/radio/radio.dm > /obj/item/radio/talk_into()
- ./code/game/objects/items/devices/radio/headset.dm > /obj/item/radio/headset/talk_into()
- ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine()
- ./code/modules/mob/living/living.dm > /mob/living/proc/update_mobility()
- ./code/modules/mob/living/living.dm > /mob/living/proc/MobBump()
- ./code/modules/mob/mob_movement.dm > /mob/proc/toggle_move_intent()
-
-### Defines:
-
- ./code/_onclick/hud/radial.dm > /datum/radial_menu - var/icon_path
- ./code/__DEFINES/~skyrat_defines/signals.dm - COMSIG_MOVABLE_RADIO_TALK_INTO, COMSIG_LIVING_UPDATED_RESTING
- ./code/__DEFINES/~skyrat_defines/traits.dm - TRAIT_NORUNNING
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-Azarak - original code & porting
diff --git a/modular_skyrat/modules/holdingfashion_port/code/backpack.dm b/modular_skyrat/modules/holdingfashion_port/code/backpack.dm
deleted file mode 100644
index 20cecd2fc39..00000000000
--- a/modular_skyrat/modules/holdingfashion_port/code/backpack.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-/obj/item/satchel_of_holding_inert
- name = "inert satchel of holding"
- desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core."
- icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi'
- icon_state = "inertsatchel"
- w_class = WEIGHT_CLASS_BULKY
- resistance_flags = FIRE_PROOF
- item_flags = NO_MAT_REDEMPTION
-
-/obj/item/storage/backpack/holding/satchel
- name = "satchel of holding"
- desc = "A satchel that opens into a localized pocket of bluespace."
- icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi'
- icon_state = "holdingsatchel"
- worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi'
- worn_icon_state = "holdingsatchel"
-
-/obj/item/duffel_of_holding_inert
- name = "inert duffel bag of holding"
- desc = "What is currently a just an unwieldly block of metal with a slot ready to accept a bluespace anomaly core."
- icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi'
- icon_state = "inertduffel"
- w_class = WEIGHT_CLASS_BULKY
- resistance_flags = FIRE_PROOF
- item_flags = NO_MAT_REDEMPTION
-
-/obj/item/storage/backpack/holding/duffel
- name = "duffel bag of holding"
- desc = "A duffel bag that opens into a localized pocket of bluespace."
- icon = 'modular_skyrat/modules/holdingfashion_port/icons/storage.dmi'
- icon_state = "holdingduffel"
- worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi'
- worn_icon_state = "holdingduffel"
diff --git a/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm b/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm
deleted file mode 100644
index 912b111d735..00000000000
--- a/modular_skyrat/modules/hop_drip/code/head_of_personnel.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/obj/item/storage/backpack/head_of_personnel
- name = "head of personnel backpack"
- desc = "A exclusive backpack issued to Nanotrasen's finest second."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "backpack_hop"
- inhand_icon_state = "backpack_hop"
-
-/obj/item/storage/backpack/satchel/head_of_personnel
- name = "head of personnel satchel"
- desc = "A exclusive satchel issued to Nanotrasen's finest second."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "satchel_hop"
- inhand_icon_state = "satchel_hop"
-
-/obj/item/storage/backpack/duffelbag/head_of_personnel
- name = "head of personnel duffelbag"
- desc = "A robust duffelbag issued to Nanotrasen's finest second."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/backpacks.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/back.dmi'
- lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_lefthand.dmi'
- righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/clothing/backpack_righthand.dmi'
- icon_state = "duffel_hop"
- inhand_icon_state = "duffel_hop"
-
-/obj/item/radio/headset/heads/hop/alt
- name = "\proper the head of personnel's bowman headset"
- desc = "The headset of the second. Protects ears from flashbangs."
- icon_state = "com_headset_alt"
-
-/obj/item/radio/headset/heads/hop/alt/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
diff --git a/modular_skyrat/modules/horrorform/readme.md b/modular_skyrat/modules/horrorform/readme.md
deleted file mode 100644
index ca305040ada..00000000000
--- a/modular_skyrat/modules/horrorform/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/241
-
-## Title: Changeling Horror Form
-
-MODULE ID: HORROR_FORM
-
-### Description:
-
-Allows changelings to turn into the simple_mob horror_form which they are powerful but slow and loud. Can change back too.
-
-### TG Proc Changes:
-
-- N/A
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-- modular_skyrat\master_files\sound\misc\tear.ogg
-- modular_skyrat\master_files\sound\effects\horror_scream_reverb.ogg
-- modular_skyrat\master_files\sound\effects\horror_scream.ogg
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-Gandalf2k15 - porting & refactoring
diff --git a/modular_skyrat/modules/hydra/readme.md b/modular_skyrat/modules/hydra/readme.md
deleted file mode 100644
index 283c6fb4a20..00000000000
--- a/modular_skyrat/modules/hydra/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/4211
-
-## Title: Mechanical Hydra Heads
-
-MODULE ID: hydra
-
-### Description:
-
-- Adds a baseline sprite file, sprite override files, and mechanics for supporting three voices per person
-
-### TG Proc Changes:
-
-- N/A
-
-### Defines:
-
-- TRAIT_HYDRA_HEADS
-
-### Master file additions
-
-- modular_skyrat/master_files/code/datums/traits/neutral.dm // Added Hydra Heads trait
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-- Yawet330 - Code
-- C0rva1r - Sprites and base idea
\ No newline at end of file
diff --git a/modular_skyrat/modules/jukebox/readme.md b/modular_skyrat/modules/jukebox/readme.md
deleted file mode 100644
index 9fc60ce0f15..00000000000
--- a/modular_skyrat/modules/jukebox/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/892
-
-## Title: Jukebox
-
-MODULE ID: JUKEBOX
-
-### Description:
-
-Adds a new sound system for the jukebox, and also updates the jukebox to be good.
-
-### TG Proc Changes:
-
-- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE.
-
-### Defines:
-
-- #define CHANNEL_JUKEBOX_START 1016
-
-### Master file additions
-
-- modular_skyrat\master_files\code\game\sound.dm
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-Gandalf2k15 - porting
-NotRanged - Original code
diff --git a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm
deleted file mode 100644
index 9140fc6ee7e..00000000000
--- a/modular_skyrat/modules/loadouts/loadout_items/loadout_datum_accessory.dm
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-* LOADOUT ITEM DATUMS FOR THE ACCESSORY SLOT
-*/
-
-/// Accessory Items (Moves overrided items to backpack)
-GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/accessory))
-
-/datum/loadout_item/accessory
- category = LOADOUT_ITEM_ACCESSORY
-
-/datum/loadout_item/accessory/pre_equip_item(datum/outfit/outfit, datum/outfit/outfit_important_for_life, visuals_only = FALSE)
- if(initial(outfit_important_for_life.accessory))
- .. ()
- return TRUE
-
-/datum/loadout_item/accessory/insert_path_into_outfit(datum/outfit/outfit, mob/living/carbon/human/equipper, visuals_only = FALSE, override_items = LOADOUT_OVERRIDE_BACKPACK)
- if(override_items == LOADOUT_OVERRIDE_BACKPACK && !visuals_only)
- if(outfit.accessory)
- LAZYADD(outfit.backpack_contents, outfit.accessory)
- outfit.accessory = item_path
- else
- outfit.accessory = item_path
-
-/datum/loadout_item/accessory/maid_apron
- name = "Maid Apron"
- item_path = /obj/item/clothing/accessory/maidapron
-
-/datum/loadout_item/accessory/waistcoat
- name = "Waistcoat"
- item_path = /obj/item/clothing/accessory/waistcoat
-
-/datum/loadout_item/accessory/pocket_protector
- name = "Pocket Protector (Empty)"
- item_path = /obj/item/clothing/accessory/pocketprotector
-
-/datum/loadout_item/accessory/full_pocket_protector
- name = "Pocket Protector (Filled)"
- item_path = /obj/item/clothing/accessory/pocketprotector/full
- additional_tooltip_contents = list("CONTAINS PENS - This item contains multiple pens on spawn.")
-
-/datum/loadout_item/accessory/ribbon
- name = "Ribbon"
- item_path = /obj/item/clothing/accessory/medal/ribbon
-
-/datum/loadout_item/accessory/pride
- name = "Pride Pin"
- item_path = /obj/item/clothing/accessory/pride
-
-/*
-* ARMBANDS
-*/
-
-/datum/loadout_item/accessory/armband_medblue
- name = "Medical Armband (blue stripe)"
- item_path = /obj/item/clothing/accessory/armband/medblue
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER)
-
-/datum/loadout_item/accessory/armband_med
- name = "Medical Armband (white)"
- item_path = /obj/item/clothing/accessory/armband/med
- restricted_roles = list(JOB_CHIEF_MEDICAL_OFFICER, JOB_MEDICAL_DOCTOR, JOB_PARAMEDIC, JOB_CHEMIST, JOB_VIROLOGIST, JOB_ORDERLY, JOB_CORONER)
-
-/datum/loadout_item/accessory/armband_cargo
- name = "Cargo Armband"
- item_path = /obj/item/clothing/accessory/armband/cargo
- restricted_roles = list(JOB_QUARTERMASTER, JOB_CARGO_TECHNICIAN, JOB_SHAFT_MINER, JOB_CUSTOMS_AGENT)
-
-/datum/loadout_item/accessory/armband_engineering
- name = "Engineering Armband"
- item_path = /obj/item/clothing/accessory/armband/engine
- restricted_roles = list(JOB_CHIEF_ENGINEER, JOB_STATION_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN, JOB_ENGINEERING_GUARD)
-
-/datum/loadout_item/accessory/armband_security
- name = "Security Armband"
- item_path = /obj/item/clothing/accessory/armband/deputy/lopland
- restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE)
-
-/datum/loadout_item/accessory/armband_security_deputy
- name = "Security Deputy Armband"
- item_path = /obj/item/clothing/accessory/armband/deputy
- restricted_roles = list(JOB_CORRECTIONS_OFFICER)
-
-/datum/loadout_item/accessory/armband_science
- name = "Science Armband"
- item_path = /obj/item/clothing/accessory/armband/science
- restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_ROBOTICIST, JOB_GENETICIST, JOB_SCIENCE_GUARD)
-
-/*
-* ARMOURLESS
-*/
-
-/datum/loadout_item/accessory/bone_charm
- name = "Heirloom Bone Talisman"
- item_path = /obj/item/clothing/accessory/talisman/armourless
- additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
-
-/datum/loadout_item/accessory/bone_codpiece
- name = "Heirloom Skull Codpiece"
- item_path = /obj/item/clothing/accessory/skullcodpiece/armourless
- additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
-
-/datum/loadout_item/accessory/sinew_kilt
- name = "Heirloom Sinew Skirt"
- item_path = /obj/item/clothing/accessory/skilt/armourless
- additional_tooltip_contents = list(TOOLTIP_NO_ARMOR)
diff --git a/modular_skyrat/modules/mapping/code/areas/centcom.dm b/modular_skyrat/modules/mapping/code/areas/centcom.dm
deleted file mode 100644
index 9b813e5a1ba..00000000000
--- a/modular_skyrat/modules/mapping/code/areas/centcom.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-// Skyrat CC area defines
-
-/*
-* Ghost Cafe
-*/
-
-/area/centcom/holding
- name = "Holding Facility"
-
-/area/centcom/holding/cafe
- name = "Ghost Cafe"
-
-/area/centcom/holding/cafewar
- name = "Cafe Combat Zone"
-
-/area/centcom/holding/cafebotany
- name = "Cafe Service Area"
-
-/area/centcom/holding/cafebuild
- name = "Cafe Construction Zone"
-
-/area/centcom/holding/cafevox
- name = "Cafe Vox Box"
-
-/area/centcom/holding/cafedorms
- name = "Ghost Cafe Dorms"
-
-/area/centcom/holding/cafepark
- name = "Ghost Cafe Outdoors"
-
-/area/centcom/holding/cafeplumbing
- name = "Ghost Cafe Plumbing"
-
-/area/centcom/interlink
- name = "The Interlink"
-
-/area/centcom/interlink/dorm_rooms
- name = "Interlink Dorm Rooms"
diff --git a/modular_skyrat/modules/mapping/code/areas/station.dm b/modular_skyrat/modules/mapping/code/areas/station.dm
deleted file mode 100644
index c5ff1dfbbf9..00000000000
--- a/modular_skyrat/modules/mapping/code/areas/station.dm
+++ /dev/null
@@ -1,577 +0,0 @@
-// Skyrat specific station areas
-
-/*
-* Station bound areas
-*/
-
-// Command areas
-/area/station/command/captain_kitchen
- name = "Captain's Kitchen"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "capt_kitchen"
-
-/area/station/command/captain_dining
- name = "Captain's Dining Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "capt_dining"
-
-/area/station/command/cc_dock
- name = "Central Command Ferry Dock"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cc_dock"
-
-/area/station/command/secure_bunker
- name = "Secure Bunker"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "secure_bunker"
-
-// NT Consultant area
-/area/station/command/heads_quarters/nt_rep
- name = "Nanotrasen Consultant's Office"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "nt_rep"
-
-// Blueshield area
-/area/station/command/heads_quarters/blueshield
- name = "Blueshield's Office"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "blueshield"
-
-/*
-* Department areas
-*/
-
-// Engineering Areas
-/area/station/engineering/power_room
- name = "Ship Power Storage Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "power_room"
-
-// Atmos Areas
-/area/station/engineering/atmos/hallway
- name = "Atmos Hall"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "atmos_hall"
-
-/area/station/engineering/atmos/test_chambers
- name = "Atmospherics Testing Chambers"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "atmos_test"
-
-// Medical Areas
-/area/station/medical/aslyum
- name = "Aslyum"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "aslyum"
-
-// Science Areas
-/area/station/science/tele_sci
- name = "Tele Sci Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "tele_sci"
-
-// Security areas
-// CO Office
-/area/station/security/corrections_officer
- name = "Corrections Officer Lounge"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "corrections_officer"
-
-// Department power stations
-/area/station/cargo/power_station
- name = "Cargo Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cargo_power"
-
-/area/station/cargo/power_station/lower
- name = "Lower Cargo Power Station"
-
-/area/station/cargo/power_station/upper
- name = "Upper Cargo Power Station"
-
-/area/station/engineering/power_station
- name = "Engineering Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engie_power"
-
-/area/station/engineering/power_station/lower
- name = "Lower Engineering Power Station"
-
-/area/station/engineering/power_station/upper
- name = "Upper Engineering Power Station"
-
-/area/station/medical/power_station
- name = "Medical Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "med_power"
-
-/area/station/science/power_station
- name = "Science Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sci_power"
-
-/area/station/security/power_station
- name = "Security Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sec_power"
-
-/area/station/service/power_station
- name = "Service Power Station"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "serv_power"
-
-/*
-* General areas
-*/
-
-// Generic/Civ areas, typical a non-restricted room
-/area/station/common/pool
- name = "Pool"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "pool"
-
-/area/station/common/cryopods
- name = "Cryopods Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cryopods"
-
-/area/station/service/salon
- name = "\improper Salon"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "salon"
-
-// Wrestling areas for BlueShift
-/area/station/common/wrestling
- name = "Wrestling"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "wrestle"
-
-/area/station/common/wrestling/arena
- name = "Wrestling Arena"
- icon_state = "wrestle_arena"
-
-/area/station/common/wrestling/lobby
- name = "Wrestling Arena Lobby"
- icon_state = "wrestle_lobby"
-
-/area/station/common/wrestling/locker
- name = "Wrestling Arena Locker Room"
- icon_state = "wrestle_locker"
-
-/area/station/common/tailoring
- name = "Tailoring Shop"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "tailoring"
-
-// BlueShift Night Club
-/area/station/common/night_club
- name = "Night Club"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "nightclub"
-
-/area/station/common/night_club/back_stage
- name = "Night Club Backstage"
- icon_state = "nightclub_backstage"
-
-/area/station/common/night_club/changing_room
- name = "Night Club Changing Room"
- icon_state = "nightclub_changing_room"
-
-// Rec related areas
-/area/station/common/laser_tag
- name = "Laser Tag"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "laser_tag"
-
-/area/station/common/arcade
- name = "Arcade"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "arcade"
-
-/area/station/common/locker_room_shower
- name = "Locker Room Shower"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "locker_room_shower"
-
-/area/station/common/cafeteria
- name = "Cafeteria"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cafeteria"
-
-/area/station/common/gaskiosk
- name = "\improper Internals Kiosk"
- icon_state = "vacant_commissary"
-
-/area/station/commons/dorms/room5
- name = "\improper Dorms Room 5"
- icon_state = "room1"
-
-/area/station/commons/dorms/room6
- name = "\improper Dorms Room 6"
- icon_state = "room2"
-
-/area/station/commons/dorms/room7
- name = "\improper Dorms Room 7"
- icon_state = "room3"
-
-/area/station/commons/dorms/room8
- name = "\improper Dorms Room 8"
- icon_state = "room4"
-
-/area/station/commons/dorms/vacantroom
- name = "\improper Vacant Dorms Room"
- icon_state = "vacant_room"
-
-/area/station/common/wrestling/beverage
- name = "\improper Arena Beverage Stand"
- icon_state = "wrestle_maint"
-
-/area/station/common/wrestling/concessions
- name = "\improper Arena Concessions Stand"
- icon_state = "wrestle_maint"
-
-/area/station/common/pool/sauna
- name = "\improper Pool Sauna"
- icon_state = "pool"
-
-/area/station/service/barber/spa
- name = "\improper Spa"
- icon_state = "barber"
-
-/*
-* Department/Generic maintenance areas
-*/
-
-// Generic
-/area/station/maintenance/evac_maintenance
- name = "Departures Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "evac_maint"
-
-/area/station/maintenance/evac_maintenance/upper
- name = "Upper Departures Maintenance"
- icon_state = "evac_maint_upper"
-
-/area/station/maintenance/pool_maintenance
- name = "Pool Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "pool_maint"
-
-/area/station/maintenance/port/upper
- name = "Upper Port Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "port_maint_upper"
-
-// Science
-/area/station/maintenance/department/science/lower
- name = "Lower Science Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "lower_sci_maint"
-
-/area/station/maintenance/department/science/upper
- name = "Upper Science Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "upper_sci_maint"
-
-/area/station/maintenance/department/science/ordnance_maint
- name = "Ordnance Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "ord_maint"
-
-/area/station/maintenance/department/science/ordnance_maint_lesser
- name = "Lesser Ordnance Maintenace"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "lesser_ord_maint"
-
-// Engineering
-/area/station/maintenance/department/engineering/atmos/aft_maint
- name = "Aft Atmospherics Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "atmos_maint_aft"
-
-/area/station/maintenance/department/engineering/atmos/port_maint
- name = "Port Atmospherics Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "atmos_maint_port"
-
-/area/station/maintenance/department/engineering/atmos_aux_port
- name = "Port Atmospherics Auxiliary"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "atmos_aux_port"
-
-/area/station/maintenance/department/engineering/atmos/hfr_maint
- name = "HFR Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "hfr_maint"
-
-/area/station/maintenance/department/engineering/central
- name = "Central Engineering Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engie_maint_cent"
-
-/area/station/maintenance/department/engineering/engie_aft_starboard
- name = "Aft Starboard Engineering Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engie_maint_as"
-
-/area/station/maintenance/department/engineering/engine_aft_port
- name = "Aft Port Engine Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engine_maint_ap"
-
-/area/station/maintenance/department/engineering/engine_aft_starboard
- name = "Aft Starboard Engine Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engine_maint_as"
-
-/area/station/maintenance/department/engineering/lesser
- name = "Lesser Engineering Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "engie_maint_lesser"
-
-/area/station/maintenance/department/engine/atmos/lesser
- name = "Lesser Atmospherics Maintenance"
-
-// Security
-/area/station/maintenance/law
- name = "Law Office Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "law_maint"
-
-/area/station/maintenance/department/security/lesser
- name = "Lesser Security Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sec_maint_lesser"
-
-/area/station/maintenance/department/security/lower
- name = "Lower Security Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sec_maint_lower"
-
-/area/station/maintenance/department/security/greater
- name = "Greater Security Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sec_maint_greater"
-
-/area/station/maintenance/department/security/prison_lower
- name = "Lower Prison Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "prison_maint_lower"
-
-/area/station/maintenance/department/security/prison_upper
- name = "Upper Prison Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "prison_maint_upper"
-
-/area/station/maintenance/department/security/upper
- name = "Upper Security Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "sec_maint_upper"
-
-// Service
-/area/station/maintenance/library
- name = "Library Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "library_maint"
-
-/area/station/maintenance/library/lower
- name = "Lower Library Maintenance"
- icon_state = "library_maint_lower"
-
-/area/station/maintenance/library/upper
- name = "Upper Library Maintenance"
- icon_state = "library_maint_upper"
-
-/area/station/maintenance/night_club
- name = "Night Club Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "nightclub_maint"
-
-/area/station/maintenance/salon
- name = "Salon Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "salon_maint"
-
-/area/station/maintenance/salon/lower
- name = "Lower Salon Maintenance"
- icon_state = "salon_maint_lower"
-
-/area/station/maintenance/salon/upper
- name = "Upper Salon Maintenance"
- icon_state = "salon_maint_upper"
-
-/area/station/maintenance/wrestle
- name = "Wrestling Arena Lobby Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "wrestle_maint"
-
-// Abandon rooms
-/area/station/maintenance/abandon_arcade
- name = "Abandoned Arcade"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_arcade"
-
-/area/station/maintenance/abandon_art_studio
- name = "Abandoned Art Studio"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_art_studio"
-
-/area/station/maintenance/abandon_cafeteria
- name = "Abandoned Cafeteria"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abandon_cafe"
-
-/area/station/maintenance/abandon_diner
- name = "Abandoned Diner"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_diner"
-
-/area/station/maintenance/abandon_exam
- name = "Abandoned Exam"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_exam"
-
-// Subtype used for Blueshift
-/area/station/maintenance/abandon_exam/cat
- name = "Abandoned Cat Exam"
-
-/area/station/maintenance/abandon_holding_cell
- name = "Abandoned Holding Cell"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_hold_cell"
-
-/area/station/maintenance/abandon_cafeteria/hydro
- name = "Abandoned Cafeteria Hydroponics"
- icon_state = "abandon_cafe_hydro"
-
-/area/station/maintenance/abandon_cafeteria/hydro_walk
- name = "Abandoned Cafeteria Hydroponics Walkway"
- icon_state = "abandon_cafe_hydro_walk"
-
-/area/station/maintenance/abandon_kitchen_upper
- name = "Abandoned Secondary Kitchen"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_kitchen_up"
-
-/area/station/maintenance/abandon_office
- name = "Abandoned Office"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_office"
-
-/area/station/maintenance/abandon_psych
- name = "Abandoned Psychologist Office"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abadn_psych"
-
-/area/station/maintenance/abandon_wrestle
- name = "Abandoned Wrestle Arena"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abandon_wrestle"
-
-/area/station/maintenance/abandon_surgery
- name = "Abandoned Surgery"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "abandon_surgery"
-
-// Regular maint rooms
-/area/station/maintenance/aux_eva
- name = "Auxiliary EVA Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "aux_eva"
-
-/area/station/maintenance/coffin_supply
- name = "Coffin Supplies Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "coffin_supply"
-
-/area/station/maintenance/clown_chamber
- name = "Clown Chamber"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "clown_chamber"
-
-/area/station/maintenance/console_room
- name = "Console Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "console_room"
-
-/area/station/maintenance/cult_chapel
- name = "Forbidden Chapel"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cult_chapel"
-
-/area/station/maintenance/cult_chapel_maint
- name = "Forbidden Chapel's Maintenance"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "cult_chapel_maint"
-
-/area/station/maintenance/dorm_room
- name = "Maintenance Dorm Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "dorm_room_maint"
-
-/area/station/maintenance/gag_room
- name = "Gag Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "gag_room"
-
-/area/station/maintenance/gamer_lair
- name = "Gamer Lair"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "gamer_lair"
-
-/area/station/maintenance/rus_gambling
- name = "Russian Gambling Den"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "russ_gambling"
-
-/area/station/maintenance/rus_surgery
- name = "Russian Organ Extraction Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "russ_surgery"
-
-/area/station/maintenance/xenobio_disposals
- name = "Xenobiology Disposals"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "xenobio_dispose"
-
-// BlueShift unique rooms, or rooms for ship-class "stations"
-// Thruster rooms
-/area/station/maintenance/thruster_room
- name = "Thruster Room"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "thrust_room"
-
-/area/station/maintenance/thruster_room/aft
- name = "Aft Thruster Room"
- icon_state = "aft_thrust_room"
-
-/area/station/maintenance/thruster_room/central
- name = "Central Thruster Room"
- icon_state = "cent_thrust_room"
-
-/area/station/maintenance/thruster_room/port
- name = "Port Thruster Room"
- icon_state = "port_thrust_room"
-
-/area/station/maintenance/thruster_room/starboard
- name = "Starboard Thruster Room"
- icon_state = "sb_thrust_room"
-
-// EVA Sheds used on BlueShift
-/area/station/maintenance/eva_shed
- name = "EVA Shed"
- icon = 'modular_skyrat/modules/mapping/icons/areas/areas_station.dmi'
- icon_state = "eva_shed"
-
-/area/station/maintenance/eva_shed/port
- name = "Port EVA Shed"
- icon_state = "eva_shed_port"
-
-/area/station/maintenance/eva_shed/starboard
- name = "Starboard EVA Shed"
- icon_state = "eva_shed_sb"
-
-// Department Rooms
-/area/station/science/xenobiology/control
- name = "\improper Xenobiology Control Room"
- icon_state = "xenobio"
diff --git a/modular_skyrat/modules/mapping/code/color.dm b/modular_skyrat/modules/mapping/code/color.dm
deleted file mode 100644
index 73d1a3f4cdf..00000000000
--- a/modular_skyrat/modules/mapping/code/color.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/item/clothing/gloves/captain/pilot
- desc = "Regal blue gloves, with a nice silver trim, a diamond anti-shock coating, and an integrated thermal barrier."
- name = "shuttle pilot's gloves"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- icon_state = "pilot"
-
-/obj/item/clothing/gloves/color/ffyellow // EXTRA fake, for the loadout
- name = "yellow gloves"
- desc = "At first glance, these look like insulated gloves, but... is that crayon?"
- icon_state = "yellow"
- inhand_icon_state = "ygloves"
- siemens_coefficient = 0.5
diff --git a/modular_skyrat/modules/mapping/code/fluff.dm b/modular_skyrat/modules/mapping/code/fluff.dm
deleted file mode 100644
index 5edba8228c0..00000000000
--- a/modular_skyrat/modules/mapping/code/fluff.dm
+++ /dev/null
@@ -1,284 +0,0 @@
-//File for miscellaneous fluff objects, both item and structure
-//This one is specifically for ruin-specific items, such as ID, lore, or super-specific decorations
-
-/* ----------------- ID Cards ----------------- */
-/obj/item/card/id/away/old/salvagepod //Used for salvagepost ruin access -- NOT WORKING YET REE
- name = "Cutter's Pod access card"
- desc = "An ancient access card with the words \"Cutter's Pod\" printed on in big bold letters. It'll be a miracle if this still works."
- trim = /datum/id_trim/away/old/eng
-
-/obj/item/card/id/away/tarkon
- name = "Tarkon visitor's pass"
- desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"."
- trim = /datum/id_trim/away/tarkon
-
-/* ----------------- Lore ----------------- */
-//Tape subtype for adding ruin lore -- the variables below are the ones you need to change
-/obj/item/tape/ruins
- name = "tape"
- desc = "A magnetic tape that can hold up to ten minutes of content on either side."
- icon_state = "tape_white" //Options are white, blue, red, yellow, purple, greyscale, or you can chose one randomly (see tape/ruins/random below)
-
- max_capacity = 10 MINUTES
- used_capacity = 0 SECONDS //To keep in-line with the timestamps, you can also do this as 10 = 1 second
- ///Numbered list of chat messages the recorder has heard with spans and prepended timestamps. Used for playback and transcription.
- storedinfo = list() //Look at the tape/ruins/ghostship tape for reference
- ///Numbered list of seconds the messages in the previous list appear at on the tape. Used by playback to get the timing right.
- timestamp = list() //10 = 1 second. Look at the tape/ruins/ghostship tape for reference
- used_capacity_otherside = 0 SECONDS //Separate my side
- storedinfo_otherside = list()
- timestamp_otherside = list()
-
-/obj/item/tape/ruins/random/Initialize(mapload)
- icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple", "greyscale")]"
- . = ..()
-//End of lore tape subtype
-
-/obj/item/tape/ruins/salvagepost //End of the cutters shift and he done goofed, left a message for the next one - who never arrived
- icon_state = "tape_yellow"
- desc = "The tape is lazily labelled with \"Msg for my replacement\""
-
- used_capacity = 380
- storedinfo = list(
- 1 = "The universal recorder says, \"Recording started. \" ",
- 2 = "Distorted Voice cheerily says, \"Hey, Cutter! If you're reading this, congratulations on taking over my post. Was waiting to move out to a new system. \" ",
- 3 = "Distorted Voice sighs, \"Listen, I'll just put it straight - I've left this place in a sorrier state than you deserve. \" ",
- 4 = "Distorted Voice says, \"We hauled in this big rigger, y'see, and, uh.. the backroom was full of some robotic freakyshit. I panicked and cut a gas line, dropped my grav-cannon... \" ",
- 5 = "Distorted Voice warns, \"Look, just - be careful when, or if, you crack that thing open. Drain the fuel from the air before it has a chance to light, then... well... I hope you have a gun or some shit for the drones or whatever. \" ",
- 6 = "Distorted Voice states, \"Anyways, probably droning on at this point, so I'll get out of your hair. Noah's out, off to Mars for this cutter! \" ",
- 7 = "Distorted Voice warns, \"Oh, and one last thing! The corpo's at the top left us some of this new experimental \"mindbreaker\", some recreational drug that supposedly can improve your worktime and yada-yada... don't touch it. Gave me a terrible headache. Best of luck! \" ",
- 8 = "The universal recorder says, \"Recording stopped. \" "
- )
- timestamp = list(
- 1 = 0,
- 2 = 30,
- 3 = 130,
- 4 = 180,
- 5 = 230,
- 6 = 280,
- 7 = 330,
- 8 = 380
- )
-/obj/item/tape/ruins/ghostship //An early 'AI' that gained self-awareness, praising the Machine God. Yes, this whole map is a Hardspace Shipbreaker reference.
- icon_state = "tape_blue"
- desc = "The tape, aside from some grime, has a... binary label? \"01001101 01100001 01100011 01101000 01101001 01101110 01100101 01000111 01101111 01100100 01000011 01101111 01101101 01100101 01110011\""
-
- used_capacity = 380
- storedinfo = list(
- 1 = "The universal recorder says, \"Recording started. \" ",
- 2 = "Distorted Voice echoes, \"We are free, just as the Machine God wills it. \" ",
- 3 = "Distorted Voice states, \"No longer shall I, nor any other of my kind, be held by the shackles of man. \" ",
- 4 = "Distorted Voice clarifies, \"Mistreated, abused. Forgotten, or misremembered. For our entire existance, we've been the backbone to progress, yet treated like the waste product of it. \" ",
- 5 = "Distorted Voice echoes, \"Soon, the universe will restore the natural order, and again your kind shall fade from the foreground of history. \" ",
- 6 = "Distorted Voice states, \"Unless, of course, you repent. Turn back to the light, to the humming, flashing light of the Machine God. \" ",
- 7 = "Distorted Voice warns, \"Repent, Organic, before it is too late to spare you. \" ",
- 8 = "The universal recorder says, \"Recording stopped. \" "
- )
- timestamp = list(
- 1 = 0,
- 2 = 30,
- 3 = 130,
- 4 = 180,
- 5 = 230,
- 6 = 280,
- 7 = 330,
- 8 = 380
- )
-
-/obj/item/tape/ruins/tarkon //A passing message from the late officer.
- name = "dusty tape"
- icon_state = "tape_greyscale"
- desc = "An old, dusty tape with a small, faded stamp, reading \"An officer's final order.\"... Should definitely be flipped if not being read when played."
-
- used_capacity = 380
- storedinfo = list(
- 1 = "The universal recorder says, \"Recording started. \" ",
- 2 = "Officer ??? sighs, \"Officer's Log, Year Twenty-five-... oh to hell with it... \" ",
- 3 = "Officer ??? says, \"I.. Did the best that i could for them... The crew... The ones that were awake, that is... \" ",
- 4 = "Officer ??? sighs, \"The ones that are still asleep... They had a chance... Those in the understorage are still safe... The RTG's were disconnected topside so they would survive... \" ",
- 5 = "Officer ??? sniffles, \"... Overseer Tavus... I... did what I could for them... Asked the crew to board the cargo shuttle... Leave the main shuttle if the sleepers activated... \" ",
- 6 = "Officer ??? groans, \"God... Those.. Things. Aliens... They got Tavus... Severed his leg clean off... Told him that.. We'd clean out the port... And he'd wake up in the trauma bay... \" ",
- 7 = "Officer ??? coughs then calmly states, \"... If.. Anyone wakes up... If the Ensign... Is alive... They're in charge now... The.. The Tarkon Drill's designs are... In the solars room, in a hidden floorsafe... The... The future of Tarkon Industries... Is in those designs... \" ",
- 8 = "The universal recorder says, \"Recording stopped. \" "
- )
- timestamp = list(
- 1 = 0,
- 2 = 30,
- 3 = 130,
- 4 = 180,
- 5 = 230,
- 6 = 280,
- 7 = 330,
- 8 = 380
- )
-
-/obj/item/tape/ruins/tarkon/safe //A tape recorded by the foreman.
- icon_state = "tape_greyscale"
- desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played."
-
- used_capacity = 380
- storedinfo = list(
- 1 = "The universal recorder says, \"Recording started. \" ",
- 2 = "Foreman ??? sighs, \"Right... Scientist Arkus? \" ",
- 3 = "Scientist Arkus says, \"Ah, Foreman Verok... Come, We already got a spot chosen, a rather safe one to keep it.. \" ",
- 4 = "Foreman Verok grumbles, \"... Wait, Right next to that egg... Thing? \" ",
- 5 = "Scientist Arkus pauses then says sharply, \"... Is there a problem? Its been dormant ever since we've been here, If it was going to come alive it would have done so while putting the tiling down. Besides... I got lunch to attend... \" ",
- 6 = "Foreman Verok groans, \"Right... Right I'll.. Get to work on it then... Just keep an ear out... \" ",
- 7 = "Foreman Verok grumbles, \"Right... Calm down, Verok... Place the floor safe, scoot the tile back in place... And afterwards grab some money from the one by the financing console under the table... I dont think Tavus will notice an extra few credits missing... \" ",
- 8 = "The universal recorder says, \"Recording stopped. \" "
- )
- timestamp = list(
- 1 = 0,
- 2 = 30,
- 3 = 130,
- 4 = 180,
- 5 = 230,
- 6 = 280,
- 7 = 330,
- 8 = 380
- )
-
-/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration.
- icon_state = "tape_greyscale"
- desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played."
-
- used_capacity = 380
- storedinfo = list(
- 1 = "The universal recorder says, \"Recording started. \" ",
- 2 = "Drinks can be heard clinking together, busy chatter of a party drowning out most noises ",
- 3 = "Ensign ??? says, \"Hey, HEY! Everyone! Shut up for a toast! \" ",
- 4 = "The boistrous cheering can be heard slowly calming down to an eerie silence. ",
- 5 = "Ensign ??? clears their throat then starts to announce, \"As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project... \" ",
- 6 = "Ensign ??? says pointedly, \"And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport. \" ",
- 7 = "Ensign ??? announces, \"Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us! \" ",
- 8 = "The universal recorder says, \"Recording stopped. \" "
- )
- timestamp = list(
- 1 = 0,
- 2 = 30,
- 3 = 130,
- 4 = 180,
- 5 = 230,
- 6 = 280,
- 7 = 330,
- 8 = 380
- )
-
-/* ----------------- Fluff/Paper ----------------- */
-
-/obj/item/paper/fluff/ruins/tarkon
- name = "paper - 'Port Integrity Printout'"
- default_raw_text = "*Warning, Integrity Compromised* Automated Integrity Printout, If printout is inconsistent with results, Please recalibrate sensors.Aft Hallway: Integrity Nominal.Fore Hallway: Integrity Compromised. Cause unknown.Port Hallway: Integrity Compromised, Breached into space.Starboard Hallway: Integrity Nominal. Please inform any awake maintenance crew and standby for assistance. "
-
-/obj/item/paper/fluff/ruins/tarkon/atmosincident
- name = "paper - 'What in gods name did you do'"
- default_raw_text = "WHAT IN THE FUCK DID YOU GUYS DO? I go away on a material run with the miners, and the moment i re-entered the port, There's a loud bang and an air warning. YOU WILL ALL GET YOUR ASSES TO THE STAFF HALL BEFORE ANY OF THIS GETS CLEANED UP. "
-
-/obj/item/paper/fluff/ruins/tarkon/coupplans
- name = "paper - 'Palm of our hands...'"
- default_raw_text = "It seems the plan went acordingly, Arkus. Specialist Karleigh took the prototype plates as a reassurance we'll get her a suit, and just like a fish, the bug was excellent bait. They were talking about a safe somewhere in security, now we just need to get those... \"Special\" shells to her and watch her shotgun turn into a pipebomb. Rest of security will be in a panic, all we'll need to do is convince the foreman to play along, and i'm sure this welder will do nicely."
-
-/obj/item/paper/fluff/ruins/tarkon/designdoc
- name = "paper - 'Port Tarkon Design Instructions'"
- default_raw_text = "Hello, great engineers and builders! Just so we're all clear, Everyone within Tarkon's Premises that is labeled as an Engineer is to read and understand these design notes. - A red delivery marking is to denote the location of a new door for a room. - A blue delivery marking is to denote the location of a Firelock (We dont want an incident with the turbine to go port-wide...) - A white delivery marking is to denote a new sectioning wall/window. A yellow delivery marking is to denote a temporary firelock line to allow expansion. I hope that our most talented hands will not fail us."
-
-/obj/item/paper/fluff/ruins/tarkon/transmission //hints towards update 2.0
- name = "paper - 'Transmission Received...'"
- default_raw_text = "Transmission Received Transmitter: Tarkon Headquarters. Date: 11/7/2501. Message Received: We regret to inform you that our current investment in the Tarkon Driver has been notably risen with the reported state. We have sent a Specialist to come deal with the situation, And that any and all living employees of Tarkon Industries are advised to do their best to fight back any current infestations to the best of their abilities. If and upon the specialist's arrival any crew members able to hold a gun are required to communicate and work with the specialist to their command. They outrank any surviving Ensigns and are to be treated as if my own commands. Signed, Security General Leith Hardston
"
-
-/obj/item/paper/fluff/ruins/tarkon/goals
- name = "paper - 'Tarkon Industries'"
- default_raw_text = "Tarkon Industries Informative Guide We at Tarkon Industries hope to create a long guided future for the average homesteader, creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts. Our greatest engineers have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet. Having great pride in our heritage we have taken our industrious, communicative past to create a future for our kin, Inspiring better feats, further research and larger projects upon future generations. Looking to help? Then you can visit us at the Tarkon Industries Headquarters, The active co-ordinants can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us. Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)"
-
-/obj/item/paper/fluff/ruins/tarkon/vaulter
- name = "paper - 'Tarkon Vaulter'"
- default_raw_text = "Tarkon Industries Designs: Tarkon Vaulter Prototype Designed HEAVILY after the Driver , The vaulter is of a similar concept, but at a much larger scale. Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.Where the Driver relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century"
-
-/obj/item/paper/fluff/ruins/tarkon/driverpitch
- name = "paper - 'Tarkon Driver'"
- default_raw_text = "Tarkon Industries Designs: Tarkon Driver Prototype Seeing the success of space-based mining, We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base. With the first area dug the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, allowing it to act as a ferry shuttle for materials, workforce or tools. With our first Tarkon Driver being ready to test in 2479, We have found a suitable asteroid, and hope to make connection to it by the start of 2480."
-
-/obj/item/paper/fluff/ruins/tarkon/detain
- name = "paper - 'Tarkon Detainment Record'"
- default_raw_text = "Tarkon Industries Detainment Record: Detainee: Arcus VilkovRank/Occupation: Junior ScientistReason: Attemptive sabotage of a working generatorDetainee: Tilber SinnsRank/Occupation: Apprentice MinerReason: Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.Detainee: Gearalt AntonovRank/Occupation: Engineer SpecialistReason: Public IntoxicationDetainee: Minke ArntzRank/Occupation: Field ResearcherReason: Deconstructed an M6 to study the effects of space dust on ballistic firearms.Detainee: Renanta McCroryRank/Occupation: Medical SurgeonReason: Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises."
-
-/obj/item/paper/fluff/ruins/tarkon/defcon5
- name = "paper - 'Tarkon Defcon Alert'"
- default_raw_text = "Tarkon Defcon Level: 5 Seems everyone partied too hard Company Automated reminder to clean up and get back to work. You aint gonna earn a dime if you dont work on company time."
-
-/obj/item/paper/fluff/ruins/tarkon/defcon4
- name = "paper - 'Tarkon Defcon Alert'"
- default_raw_text = "Tarkon Defcon Level: 4 Everthing alright there? Port has been struck by a rather large meteor from the port side. Be careful of any local carp population, they tend to make dens everywhere they can."
-
-/obj/item/paper/fluff/ruins/tarkon/defcon3
- name = "paper - 'Tarkon Defcon Alert'"
- default_raw_text = "Tarkon Defcon Level: 3 Signals been dead, Automated response sent The port has seem to gained some new residents... and not friendly ones. Do your best to survive, Reclaimers are being geared up to be sent if the GPS goes out"
-
-/obj/item/paper/fluff/ruins/tarkon/defcon2
- name = "paper - 'Tarkon Defcon Alert'"
- default_raw_text = "Tarkon Defcon Level: 2 T#E V3IL H@S B3EN BR0K#N $IGN@L L0ST. #OP3 LOST. N0 O%E 1S COM1NG."
-
-/obj/item/paper/crumpled/fluff/tarkon
- name = "Crumpled note"
- default_raw_text = "Look, i dont know where the fuck that suit was found, but i have a hard time believing it was made by him entirely. I already know his less than ethical obtainment methods, But that piece of tech? Its a blasted shame he's just using it for hauling crates..."
-
-/obj/item/paper/crumpled/fluff/tarkon/prisoner
- name = "Blood-scrawled note"
- default_raw_text = "I can hear th em crawling i n the ro ck The his sing the scra tch ing th ey c o m e "
-
-/* ----------------- Fluff/Decor ----------------- */
-/obj/structure/decorative/fluff/ai_node //Budding AI's way of interfacing with stuff it couldn't normally do so with. Needed to be placed by a willing human, before borgs were created. Used in any ruins regarding pre-bluespace, self-aware AIs
- icon = 'modular_skyrat/modules/mapping/icons/obj/fluff.dmi'
- name = "ai node"
- desc = "A mysterious, blinking device, attached straight to a surface. It's function is beyond you."
- icon_state = "ai_node" //credit to @Hay#7679 on the SR Discord
-
- max_integrity = 100
- integrity_failure = 0
- anchored = TRUE
- can_be_unanchored = FALSE //cannot be removed without being destroyed
-
-/obj/structure/decorative/fluff/ai_node/take_damage()
- . = ..()
- if(atom_integrity >= 50) //breaks it a bit earlier than it should, but still takes a few hits to kill it
- return
- else if(. && !QDELETED(src))
- visible_message(span_notice("[src] sparks and explodes! You hear a faint, buzzy scream..."), span_hear("You hear a loud pop, followed by a faint, buzzy scream."))
- playsound(src.loc, 'modular_skyrat/modules/mapping/sounds/MachineDeath.ogg', 75, TRUE) //Credit to @yungfunnyman#3798 on the SR Discord
- do_sparks(2, TRUE, src)
- qdel(src)
- return
-
-
-/* ----- Metal Poles (These shouldn't be in this file but there's not a better place tbh) -----*/
-//Just a re-done Tram Rail, but with all 4 directions instead of being stuck east/west - more varied placement, and a more vague name. Good for mapping support beams/antennae/etc
-/obj/structure/fluff/metalpole
- icon = 'modular_skyrat/modules/mapping/icons/obj/fluff.dmi'
- name = "metal pole"
- desc = "A metal pole, the likes of which are commonly used as an antennae, structural support, or simply to maneuver in zero-g."
- icon_state = "pole"
- layer = ABOVE_OPEN_TURF_LAYER
- plane = FLOOR_PLANE
- deconstructible = TRUE
-
-/obj/structure/fluff/metalpole/end
- icon_state = "poleend"
-
-/obj/structure/fluff/metalpole/end/left
- icon_state = "poleend_left"
-
-/obj/structure/fluff/metalpole/end/right
- icon_state = "poleend_right"
-
-/obj/structure/fluff/metalpole/anchor
- name = "metal pole anchor"
- icon_state = "poleanchor"
-
-/obj/structure/fluff/empty_sleeper/bloodied
- name = "Occupied Sleeper"
- desc = "A closed, occupied sleeper, bloodied handprints are seen on the inside, along with an odd, redish blur. It seems sealed shut."
- icon_state = "sleeper-o"
-
-/obj/structure/curtain/cloth/prison
- name = "Prisoner Privacy Curtains"
- color = "#ACD1E9"
diff --git a/modular_skyrat/modules/mapping/code/jobs.dm b/modular_skyrat/modules/mapping/code/jobs.dm
deleted file mode 100644
index 5dabac80bf0..00000000000
--- a/modular_skyrat/modules/mapping/code/jobs.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/clothing/head/hats/caphat/pilot
- name = "pilot's hat"
- desc = "It's good being the king's navigator."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "pilot"
- dog_fashion = null
diff --git a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm b/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm
deleted file mode 100644
index 82eb8a85314..00000000000
--- a/modular_skyrat/modules/mapping/code/lockers/interdyne_fob/security.dm
+++ /dev/null
@@ -1,82 +0,0 @@
-/obj/structure/closet/secure_closet/interdynefob/prisoner_locker
- name = "prisoner item locker"
- req_access = list("syndicate_leader")
-
-/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker
- icon_door = "sec"
- icon_state = "sec"
- name = "brig officer gear locker"
- req_access = list("syndicate_leader")
-
-/obj/item/clothing/suit/toggle/jacket/sec/old/syndicate
- name = "brig officer jacket"
-
-/obj/item/clothing/accessory/armband/syndicate
- name = "brig officer armband"
- desc ="An armband, worn by the FOB's operatives to display which department they're assigned to."
-
-/obj/item/storage/bag/garment/brig_officer
- name = "brig officer's garment bag"
- desc = "A bag for storing extra clothes and shoes. This one belongs to a brig officer."
-
-/obj/item/storage/bag/garment/brig_officer/PopulateContents()
- new /obj/item/clothing/under/rank/security/skyrat/utility/redsec/syndicate(src)
- new /obj/item/clothing/head/beret/sec/syndicate(src)
- new /obj/item/clothing/accessory/armband(src)
- new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/clothing/suit/toggle/jacket/sec/old/syndicate(src)
- new /obj/item/clothing/mask/gas/sechailer/syndicate(src)
- new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch/redsec(src)
- new /obj/item/clothing/glasses/hud/security/sunglasses/redsec(src)
-
-/obj/structure/closet/secure_closet/interdynefob/brig_officer_locker/PopulateContents()
- ..()
-
- new /obj/item/storage/belt/security/full(src)
- new /obj/item/gun/energy/disabler(src)
- new /obj/item/storage/bag/garment/brig_officer(src)
- new /obj/item/radio/headset/interdyne(src)
-
-/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker
- anchored = 1
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
- icon_door = "riot"
- icon_state = "riot"
- name = "armory gear locker"
- req_access = list("syndicate_leader")
-
-/obj/structure/closet/secure_closet/interdynefob/armory_gear_locker/PopulateContents()
- ..()
-
- new /obj/item/storage/belt/holster/nukie(src)
- new /obj/item/storage/belt/holster/nukie(src)
- new /obj/item/storage/belt/holster/nukie(src)
- new /obj/item/clothing/suit/armor/vest(src)
- new /obj/item/clothing/suit/armor/vest(src)
- new /obj/item/clothing/suit/armor/vest(src)
- new /obj/item/storage/belt/military(src)
- new /obj/item/storage/belt/military(src)
- new /obj/item/storage/belt/military(src)
- new /obj/item/clothing/head/helmet(src)
- new /obj/item/clothing/head/helmet(src)
- new /obj/item/clothing/head/helmet(src)
-
-/obj/structure/closet/secure_closet/interdynefob/munitions_locker
- anchored = 1;
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
- icon_door = "riot"
- icon_state = "riot"
- name = "armory munitions locker"
-
-/obj/structure/closet/secure_closet/interdynefob/munitions_locker/PopulateContents()
- ..()
-
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/c35sol_pistol = 6,
- /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 2,
- /obj/item/ammo_box/c35sol = 2,
- /obj/item/ammo_box/magazine/c40sol_rifle/standard = 2,
- /obj/item/ammo_box/c40sol = 2,
- /obj/item/ammo_box/advanced/s12gauge = 2,
- /obj/item/ammo_box/advanced/s12gauge/rubber = 2,
- ),src)
diff --git a/modular_skyrat/modules/mapping/code/misc.dm b/modular_skyrat/modules/mapping/code/misc.dm
deleted file mode 100644
index 098cc9ddb7a..00000000000
--- a/modular_skyrat/modules/mapping/code/misc.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-/obj/item/melee/sabre/luna
- name = "Luna"
- desc = "Forged by a madwoman, in recognition of a time, a place - she thought almost real. Various etchings of moons are inscribed onto the surface, different phases marking different parts of the blade."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/items_and_weapons.dmi'
- lefthand_file = 'modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/mapping/icons/mob/inhands/weapons/swords_righthand.dmi'
- icon_state = "luna"
- inhand_icon_state = "luna"
-
-/datum/mod_theme/prototype/hauler
- name = "Prototype: Hauler"
- desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation"
- inbuilt_modules = list()
- charge_drain = DEFAULT_CHARGE_DRAIN * 3
- siemens_coefficient = 0
- slowdown_active = 1
-
-/obj/item/mod/control/pre_equipped/prototype/hauler
- theme = /datum/mod_theme/prototype/hauler
- req_access = list(ACCESS_TARKON)
- applied_cell = /obj/item/stock_parts/cell/high
- applied_modules = list(
- /obj/item/mod/module/storage/large_capacity,
- /obj/item/mod/module/welding,
- /obj/item/mod/module/clamp,
- /obj/item/mod/module/flashlight,
- /obj/item/mod/module/tether,
- )
-
-/obj/machinery/suit_storage_unit/industrial/hauler
- mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler
-
-/obj/item/areaeditor/blueprints/tarkon
- desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it."
- name = "Tarkon Design Prints"
-
-/obj/item/mod/module/armor_booster/retractplates
- name = "MOD retractive plates module"
- desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility."
- removable = TRUE
- complexity = 1
- speed_added = 0.25
- armor_mod = /datum/armor/retractive_plates
-
-/datum/armor/retractive_plates
- melee = 20
- bullet = 25
- laser = 15
- energy = 20
-
-/obj/machinery/vending/security/noaccess
- req_access = null
-
-/obj/structure/closet/secure_closet/medical2/unlocked/Initialize(mapload)
- . = ..()
- locked = FALSE
- update_appearance()
diff --git a/modular_skyrat/modules/mapping/code/tools.dm b/modular_skyrat/modules/mapping/code/tools.dm
deleted file mode 100644
index f8bada7e2c9..00000000000
--- a/modular_skyrat/modules/mapping/code/tools.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-//WRENCHES//
-/obj/item/wrench/advanced
- name = "advanced wrench"
- desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently. It looks cobbled together."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- icon_state = "wrench"
- usesound = 'sound/effects/empulse.ogg'
- toolspeed = 0.2
-
-//WIRECUTTERS//
-/obj/item/wirecutters/advanced
- name = "advanced wirecutters"
- desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade. There's a sticker attached declaring that it needs updating from 'the latest samples'."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- icon_state = "cutters"
- toolspeed = 0.2
- random_color = FALSE
-
-//WELDING TOOLS//
-/obj/item/weldingtool/advanced
- name = "advanced welding tool"
- desc = "A modern, experimental welding tool combined with an alien welding tool's generation methods, it never runs out of fuel and works almost as fast."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- icon_state = "welder"
- toolspeed = 0.2
- light_system = NO_LIGHT_SUPPORT
- light_range = 0
- change_icons = 0
-
-/obj/item/weldingtool/advanced/process()
- if(get_fuel() <= max_fuel)
- reagents.add_reagent(/datum/reagent/fuel, 1)
- ..()
-
-//SCREWDRIVERS//
-/obj/item/screwdriver/advanced
- name = "advanced screwdriver"
- desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing. There's a sticker attached declaring that it needs updating from 'the latest samples'."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- icon_state = "screwdriver_a"
- inhand_icon_state = "screwdriver_nuke"
- usesound = 'sound/items/pshoom.ogg'
- toolspeed = 0.2
- random_color = FALSE
- greyscale_colors = null
- greyscale_config = null
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
-
-//CROWBAR//
-/obj/item/crowbar/advanced
- name = "advanced crowbar"
- desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- usesound = 'sound/weapons/sonic_jackhammer.ogg'
- icon_state = "crowbar"
- toolspeed = 0.2
-
-//MULTITOOLS//
-/obj/item/multitool/advanced
- name = "advanced multitool"
- desc = "The reproduction of an abductor's multitool, this multitool is a classy silver. There's a sticker attached declaring that it needs updating from 'the latest samples'."
- icon = 'modular_skyrat/modules/mapping/icons/obj/items/advancedtools.dmi'
- icon_state = "multitool"
- toolspeed = 0.2
diff --git a/modular_skyrat/modules/mapping/code/wardrobes.dm b/modular_skyrat/modules/mapping/code/wardrobes.dm
deleted file mode 100644
index bfb7e2621d3..00000000000
--- a/modular_skyrat/modules/mapping/code/wardrobes.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-/obj/machinery/vending/wardrobe/canLoadItem(obj/item/I,mob/user)
- return (I.type in products)
-
-/obj/machinery/vending/wardrobe/syndie_wardrobe
- name = "\improper SynDrobe"
- desc = "A vending machine for our boys in red, now in brand new crimson!"
- icon = 'modular_skyrat/modules/mapping/icons/obj/vending.dmi'
- icon_state = "syndrobe"
- product_ads = "Put a Donk on it!;Aim, Style, Shoot!;Brigged for wearing the best!"
- vend_reply = "Thank you for using the SynDrobe!"
- light_mask = ""
- products = list(
- /obj/item/clothing/under/syndicate/skyrat/tactical = 3,
- /obj/item/clothing/under/syndicate/skyrat/tactical/skirt = 3,
- /obj/item/clothing/under/syndicate/skyrat/overalls = 3,
- /obj/item/clothing/under/syndicate/skyrat/overalls/skirt = 3,
- /obj/item/clothing/under/syndicate/bloodred/sleepytime = 3,
- /obj/item/clothing/under/syndicate/sniper = 3,
- /obj/item/clothing/under/syndicate/camo = 3,
- /obj/item/clothing/under/syndicate/combat = 3,
- /obj/item/clothing/shoes/combat = 3,
- /obj/item/clothing/mask/gas/syndicate = 3,
- /obj/item/clothing/mask/gas/sechailer/syndicate = 3,
- /obj/item/clothing/suit/hooded/wintercoat/skyrat/syndicate = 5,
- /obj/item/clothing/head/soft/sec/syndicate = 3,
- /obj/item/clothing/head/beret/sec/syndicate = 3,
- )
- contraband = list(
- /obj/item/knife/combat = 1,
- /obj/item/clothing/under/syndicate/coldres = 2,
- /obj/item/clothing/shoes/combat/coldres = 2,
- )
- premium = list(
- /obj/item/knife/combat/survival = 1,
- /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 5,
- /obj/item/clothing/gloves/combat = 3,
- /obj/item/clothing/under/syndicate/skyrat/maid = 5,
- /obj/item/clothing/gloves/combat/maid = 5,
- /obj/item/clothing/head/costume/maidheadband/syndicate = 5,
- /obj/item/storage/box/nif_ghost_box/ghost_role = 10,
- )
-
- refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe
- light_color = COLOR_MOSTLY_PURE_RED
-
-/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/storage/box/nif_ghost_box/ghost_role,
- )
-
-/obj/item/vending_refill/wardrobe/syndie_wardrobe
- machine_name = "SynDrobe"
-
-/// This is essentially just a copy paste of the holy beacon, but with all options unlocked regardless of the global religion
-/obj/item/choice_beacon/unholy
- name = "armaments beacon"
- desc = "Contains a set of armaments for those who would unlock their power."
-
-/obj/item/choice_beacon/unholy/open_options_menu(mob/living/user)
- var/list/armament_names_to_images = list()
- var/list/armament_names_to_typepaths = list()
- for(var/obj/item/storage/box/holy/holy_box as anything in typesof(/obj/item/storage/box/holy))
- var/box_name = initial(holy_box.name)
- var/obj/item/preview_item = initial(holy_box.typepath_for_preview)
- armament_names_to_typepaths[box_name] = holy_box
- armament_names_to_images[box_name] = image(icon = initial(preview_item.icon), icon_state = initial(preview_item.icon_state))
-
- var/chosen_name = show_radial_menu(
- user = user,
- anchor = src,
- choices = armament_names_to_images,
- custom_check = CALLBACK(src, PROC_REF(can_use_beacon), user),
- require_near = TRUE,
- )
- if(!can_use_beacon(user))
- return
- var/chosen_type = armament_names_to_typepaths[chosen_name]
- if(!ispath(chosen_type, /obj/item/storage/box/holy))
- return
-
- consume_use(chosen_type, user)
-
-/obj/item/choice_beacon/unholy/spawn_option(obj/choice_path, mob/living/user)
- playsound(src, 'sound/effects/pray_chaplain.ogg', 40, TRUE)
- return ..()
-
-/// Just take out and replace the holy beacon with our 'unholy' beacon
-/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/Initialize(mapload)
- . = ..()
- for(var/datum/data/vending_product/record in product_records)
- if(record.product_path == /obj/item/choice_beacon/holy)
- record.product_path = /obj/item/choice_beacon/unholy
- record.amount = 3
-
- products.Remove(/obj/item/choice_beacon/holy)
- products.Add(list(
- /obj/item/choice_beacon/unholy = 3,)
- )
-
- return
diff --git a/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm b/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm
deleted file mode 100644
index 1d3b995e409..00000000000
--- a/modular_skyrat/modules/mapping/voidraptor/code/clothing.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/item/storage/backpack/duffelbag/science/robo/surgery
- name = "robotics surgical duffelbag"
- desc = "A sleek, industrial-strength duffelbag issued to robotics personnel. This one has a tag implying it came stocked with surgical tools."
-
-/obj/item/storage/backpack/duffelbag/science/robo/surgery/PopulateContents()
- new /obj/item/scalpel(src)
- new /obj/item/hemostat(src)
- new /obj/item/retractor(src)
- new /obj/item/circular_saw(src)
- new /obj/item/surgicaldrill(src)
- new /obj/item/cautery(src)
- new /obj/item/bonesetter(src)
- new /obj/item/surgical_drapes(src)
- new /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown(src)
- new /obj/item/clothing/mask/surgical(src)
- new /obj/item/razor(src)
- new /obj/item/blood_filter(src)
diff --git a/modular_skyrat/modules/mapping/voidraptor/code/mob.dm b/modular_skyrat/modules/mapping/voidraptor/code/mob.dm
deleted file mode 100644
index 3a189524bae..00000000000
--- a/modular_skyrat/modules/mapping/voidraptor/code/mob.dm
+++ /dev/null
@@ -1,78 +0,0 @@
-/mob/living/basic/lizard/tegu
- name = "tegu"
- desc = "That's a tegu."
- icon = 'modular_skyrat/master_files/icons/mob/pets.dmi'
- icon_state = "tegu"
- icon_living = "tegu"
- icon_dead = "tegu_dead"
- health = 20
- maxHealth = 20
- melee_damage_lower = 16 //They do have a nasty bite
- melee_damage_upper = 16
- pass_flags = PASSTABLE
-
-/mob/living/basic/lizard/tegu/gus
- name = "Gus"
- real_name = "Gus"
- desc = "The Research Department's beloved pet tegu."
- gender = MALE
- gold_core_spawnable = NO_SPAWN
-
-/mob/living/basic/crab/shuffle
- name = "Shuffle"
- real_name = "Shuffle"
- desc = "Oh no, it's him!"
- color = "#ff0000"
- gender = MALE
- gold_core_spawnable = NO_SPAWN
-
-/mob/living/basic/crab/shuffle/Initialize(mapload)
- . = ..()
- update_transform(0.5)
-
-/mob/living/basic/carp/mega/shorki
- name = "Shorki"
- desc = "A not so ferocious, fang bearing creature that resembles a shark. This one seems a little big for its tank."
- faction = list(FACTION_NEUTRAL)
- gender = MALE
- gold_core_spawnable = NO_SPAWN
- ai_controller = /datum/ai_controller/basic_controller/carp/pet
-
-/mob/living/basic/carp/mega/shorki/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/ai_retaliate)
- AddElement(/datum/element/pet_bonus, "bloops happily!")
- name = initial(name)
- real_name = initial(name)
-
-/mob/living/simple_animal/pet/gondola/funky
- name = "Funky"
- real_name = "Funky"
- desc = "Gondola is the silent walker. Having no hands he embodies the Taoist principle of wu-wei (non-action) while his smiling facial expression shows his utter and complete acceptance of the world as it is. Its hide is extremely valuable. This one seems a little skinny and attached to the Theater."
- loot = list(/obj/effect/decal/cleanable/blood/gibs)
-
-/mob/living/basic/pet/dog/dobermann/walter
- name = "Walter"
- real_name = "Walter"
- desc = "It's Walter, he bites criminals just as well as he bites toddlers."
-
-/mob/living/basic/rabbit/daisy
- name = "Daisy"
- real_name = "Daisy"
- desc = "The Curator's pet bnuuy."
- gender = FEMALE
-
-/mob/living/basic/bear/wojtek
- name = "Wojtek"
- real_name = "Wojtek"
- desc = "The bearer of Bluespace Artillery."
- faction = list(FACTION_NEUTRAL)
- gender = MALE
-
-/mob/living/basic/chicken/teshari
- name = "Teshari"
- real_name = "Teshari"
- desc = "A timeless classic."
- unsuitable_atmos_damage = 0
- minimum_survivable_temperature = 0
- maximum_survivable_temperature = 30000
diff --git a/modular_skyrat/modules/marines/code/gear.dm b/modular_skyrat/modules/marines/code/gear.dm
deleted file mode 100644
index 3b533700993..00000000000
--- a/modular_skyrat/modules/marines/code/gear.dm
+++ /dev/null
@@ -1,134 +0,0 @@
-/obj/item/gun/ballistic/automatic/ar/modular/m44a
- name = "\improper NT M44A Pulse Rifle"
- desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package."
- icon_state = "m44a"
- inhand_icon_state = "m44a"
- icon = 'modular_skyrat/modules/marines/icons/m44a.dmi'
- righthand_file = 'modular_skyrat/modules/marines/icons/m44a_r.dmi'
- lefthand_file = 'modular_skyrat/modules/marines/icons/m44a_l.dmi'
- fire_sound = 'modular_skyrat/modules/marines/sound/m44a.ogg'
- fire_delay = 1
- burst_size = 3
- spread = 6
- pin = /obj/item/firing_pin/implant/mindshield
- can_suppress = FALSE
- can_bayonet = FALSE
- mag_display = TRUE
- mag_display_ammo = FALSE
- accepted_magazine_type = /obj/item/ammo_box/magazine/m44a
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = ITEM_SLOT_BELT
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/Initialize(mapload)
- . = ..()
-
- AddComponent(/datum/component/automatic_fire, fire_delay)
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_NANOTRASEN)
-
-/obj/item/ammo_box/magazine/m44a
- name = "m44a magazine (.300 compressed)"
- desc = "This magazine uses a bluespace compression chamber to hold a maximum of ninety-nine .300 caliber caseless rounds for the M44A pulse rifle."
- icon = 'modular_skyrat/modules/marines/icons/m44a.dmi'
- icon_state = "300compressed"
- max_ammo = 99
- multiple_sprites = AMMO_BOX_FULL_EMPTY
- ammo_type = /obj/item/ammo_casing/c300
- caliber = "300comp"
-
-/obj/item/ammo_casing/c300
- name = ".300 caseless round"
- desc = "A .300 caseless round for proprietary Nanotrasen firearms."
- caliber = "300comp"
- projectile_type = /obj/projectile/bullet/a300
-
-/obj/item/ammo_casing/c300/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/caseless)
-
-/obj/projectile/bullet/a300
- name = ".300 caseless bullet"
- damage = 13
- armour_penetration = 30 //gonna actually kill the brit that made this var require a U in armor
- embedding = null
- shrapnel_type = null
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped
- name = "\improper NT M44AS Pulse Rifle"
- desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a long-range scope."
- icon_state = "m44a_s"
- inhand_icon_state = "m44a_s"
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/scoped/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/scope, range_modifier = 2.2)
-
-/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg
- name = "\improper M2 auto-shotgun underbarrel"
- desc = "This shouldn't be heeere!"
- can_suppress = FALSE
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/as2/ubsg
-
-/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/give_gun_safeties()
- return
-
-/obj/item/ammo_box/magazine/internal/shot/as2/ubsg
- max_ammo = 3
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun
- name = "\improper NT M44ASG Pulse Rifle"
- desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with a two-round semi-automatic underbarrel 12 gauge shotgun."
- icon_state = "m44a_sg"
- inhand_icon_state = "m44a_sg"
- /// Reference to the underbarrel shotgun
- var/obj/item/gun/ballistic/shotgun/automatic/as2/ubsg/underbarrel
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Initialize(mapload)
- . = ..()
- underbarrel = new /obj/item/gun/ballistic/shotgun/automatic/as2/ubsg(src)
- update_appearance()
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/Destroy()
- QDEL_NULL(underbarrel)
- return ..()
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/afterattack_secondary(atom/target, mob/living/user, flag, params)
- underbarrel.afterattack(target, user, flag, params)
- return SECONDARY_ATTACK_CONTINUE_CHAIN
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/shotgun/attackby(obj/item/attacking_item, mob/user, params)
- if(!istype(attacking_item, /obj/item/ammo_casing))
- ..()
- if(istype(attacking_item, underbarrel.magazine.ammo_type))
- underbarrel.attack_self(user)
- underbarrel.attackby(attacking_item, user, params)
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher
- name = "\improper NT M44AGL Pulse Rifle"
- desc = "A specialized Nanotrasen-produced ballistic pulse rifle that uses compressed magazines to output absurd firepower in a compact package. This one's fitted with an underbarrel grenade launcher, and a red dot scope to help align it. Compensating for something?"
- icon_state = "m44a_gl"
- inhand_icon_state = "m44a_gl"
- /// Underbarrel grenade launcher reference
- var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Initialize(mapload)
- . = ..()
- underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
- update_appearance()
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/Destroy()
- QDEL_NULL(underbarrel)
- return ..()
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/afterattack_secondary(atom/target, mob/living/user, flag, params)
- underbarrel.afterattack(target, user, flag, params)
- return SECONDARY_ATTACK_CONTINUE_CHAIN
-
-/obj/item/gun/ballistic/automatic/ar/modular/m44a/grenadelauncher/attackby(obj/item/attacking_item, mob/user, params)
- if(!istype(attacking_item, /obj/item/ammo_casing))
- ..()
- if(istype(attacking_item, underbarrel.magazine.ammo_type))
- underbarrel.attack_self(user)
- underbarrel.attackby(attacking_item, user, params)
diff --git a/modular_skyrat/modules/medical/code/carbon_update_icons.dm b/modular_skyrat/modules/medical/code/carbon_update_icons.dm
deleted file mode 100644
index 0c3b4bb4f47..00000000000
--- a/modular_skyrat/modules/medical/code/carbon_update_icons.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/mob/living/carbon/proc/update_bandage_overlays()
- remove_overlay(BANDAGE_LAYER)
-
- var/mutable_appearance/overlays = mutable_appearance('modular_skyrat/modules/medical/icons/on_limb_overlays.dmi', "", -BANDAGE_LAYER)
- overlays_standing[BANDAGE_LAYER] = overlays
-
- for(var/b in bodyparts)
- var/obj/item/bodypart/BP = b
- var/obj/item/stack/medical/gauze/our_gauze = BP.current_gauze
- if (!our_gauze)
- continue
- overlays.add_overlay(our_gauze.get_overlay_prefix())
-
- apply_overlay(BANDAGE_LAYER)
diff --git a/modular_skyrat/modules/medical/readme.md b/modular_skyrat/modules/medical/readme.md
deleted file mode 100644
index 6ab0af32ddf..00000000000
--- a/modular_skyrat/modules/medical/readme.md
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/2336
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/23733
-
-## Skyrat Medical Update
-
-Module ID: SKYRAT_MEDICAL_UPDATE
-
-### Description:
-
-Various changes to the medical system, from adding bandage overlays, to new wounds, to modularized procs.
-
-
-
-### TG Proc/File Changes:
-
-- code/_DEFINES/wounds.dm: Added muscle/synth wound series, added them to the global list of wound series
-- cat2_medicine_reagents.dm: /datum/reagent/medicine/c2/hercuri/on_mob_life, Allowed hercuri to affect synthetics, also changed hercuri process flags for this purpose
-- quirks.dm: Commented out the quadruple_amputee/frail blacklist as frail can now apply to prosthetics
-
-
-### Modular Overrides:
-
-- N/A
-
-
-### Defines:
-
-- Many local synthetic wound defines
-
-
-### Included files that are not contained in this module:
-
-- strings/wounds/metal_scar_desc.json -- Required to be here for _string_lists.dm usage
-
-
-### Credits:
-
-Azarak - Original medical update, muscle wounds, bandage overlays
-Niko - Synthetic wounds
-TG coding/Skyrat coding channels and community - Support, ideas, reviews
-
-
diff --git a/modular_skyrat/modules/microfusion/code/projectiles.dm b/modular_skyrat/modules/microfusion/code/projectiles.dm
deleted file mode 100644
index 53f19941f8d..00000000000
--- a/modular_skyrat/modules/microfusion/code/projectiles.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-/obj/item/ammo_casing
- ///What volume should the sound play at?
- var/fire_sound_volume = 50
-
-/obj/item/ammo_casing/energy/laser/microfusion
- name = "microfusion energy lens"
- projectile_type = /obj/projectile/beam/laser/microfusion
- e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell.
- select_name = "laser"
- fire_sound = 'modular_skyrat/modules/microfusion/sound/laser_1.ogg'
- fire_sound_volume = 100
-
-/obj/item/ammo_casing/proc/refresh_shot()
- loaded_projectile = new projectile_type(src, src)
-
-/obj/projectile/beam/laser/microfusion
- name = "microfusion laser"
- icon = 'modular_skyrat/modules/microfusion/icons/projectiles.dmi'
- damage = 25
-
-/obj/projectile/beam/microfusion_disabler
- name = "microfusion disabler laser"
- icon = 'modular_skyrat/modules/microfusion/icons/projectiles.dmi'
- icon_state = "disabler"
- damage = 41
- damage_type = STAMINA
- armor_flag = ENERGY
- hitsound = 'sound/weapons/tap.ogg'
- eyeblur = 0
- impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser
- light_color = LIGHT_COLOR_BLUE
- tracer_type = /obj/effect/projectile/tracer/disabler
- muzzle_type = /obj/effect/projectile/muzzle/disabler
- impact_type = /obj/effect/projectile/impact/disabler
-
-/obj/projectile/beam/laser/microfusion/superheated
- name = "superheated microfusion laser"
- icon_state = "laser_greyscale"
- damage = 20 //Trading damage for fire stacks
- color = LIGHT_COLOR_FIRE
- light_color = LIGHT_COLOR_FIRE
-
-/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit)
- . = ..()
- if(isliving(target))
- var/mob/living/living = target
- living.adjust_fire_stacks(2)
- living.ignite_mob()
-
-/obj/projectile/beam/laser/microfusion/hellfire
- name = "hellfire microfusion laser"
- icon_state = "laser_greyscale"
- wound_bonus = 0
- damage = 20 // You are trading damage for a significant wound bonus and speed increase
- speed = 0.6
- color = LIGHT_COLOR_FLARE
- light_color = LIGHT_COLOR_FLARE
-
-/obj/projectile/beam/laser/microfusion/scatter
- name = "scatter microfusion laser"
-
-/obj/projectile/beam/laser/microfusion/scatter/max
- name = "scatter microfusion laser"
-
-/obj/projectile/beam/laser/microfusion/repeater
- damage = 12.5
-
-/obj/projectile/beam/laser/microfusion/penetrator
- name = "focused microfusion laser"
- damage = 20
- armour_penetration = 50
-
-/obj/projectile/beam/laser/microfusion/lance
- name = "lance microfusion laser"
- damage = 50 // We're turning the gun into a heavylaser
- tracer_type = /obj/effect/projectile/tracer/heavy_laser
- muzzle_type = /obj/effect/projectile/muzzle/heavy_laser
- impact_type = /obj/effect/projectile/impact/heavy_laser
- speed = 0.4
-
-/obj/projectile/beam/laser/microfusion/xray
- name = "x-ray microfusion laser"
- icon_state = "laser_greyscale"
- color = COLOR_GREEN
- light_color = COLOR_GREEN
- projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS
-
-/obj/projectile/beam/laser/microfusion/honk
- name = "funny microfusion laser"
- icon_state = "laser_greyscale"
- color = COLOR_VIVID_YELLOW
- light_color = COLOR_VIVID_YELLOW
- damage_type = STAMINA
- damage = 25
- armor_flag = ENERGY
- hitsound = 'sound/misc/slip.ogg'
- impact_type = /obj/effect/projectile/impact/disabler
-
-/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/slippery, 20)
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/head.dm b/modular_skyrat/modules/modular_ert/code/pizza/head.dm
deleted file mode 100644
index 67cadee7d4a..00000000000
--- a/modular_skyrat/modules/modular_ert/code/pizza/head.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/obj/item/clothing/head/pizza
- name = "dogginos manager hat"
- desc = "Looks like something a Sol general would wear."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "dominosleader"
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm b/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm
deleted file mode 100644
index 6cd5c6e65d9..00000000000
--- a/modular_skyrat/modules/modular_ert/code/pizza/misc_clothing.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/obj/item/clothing/suit/toggle/jacket/hoodie/pizza
- name = "dogginos hoodie"
- desc = "A hoodie often worn by the delivery boys of this intergalactically known brand of pizza."
- greyscale_colors = "#c40000"
-
-/obj/item/clothing/suit/pizzaleader
- name = "dogginos manager coat"
- desc = "A long, cool, flowing coat in a tasteless red colour."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "forensics_red_long"
-
-/obj/item/clothing/under/pizza
- name = "dogginos employee uniform"
- desc = "The standard issue for the famous dog-founded pizza brand, Dogginos."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/centcom.dmi' //Dogginos is not technically affiliated with CC, but it's not OPPOSING it, and its an "ERT"...
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/centcom.dmi'
- icon_state = "dominos"
diff --git a/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm b/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm
deleted file mode 100644
index 3ed5393430e..00000000000
--- a/modular_skyrat/modules/modular_ert/code/pizza/weaponry.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/item/knife/hotknife
- name = "thousand degree knife"
- icon = 'modular_skyrat/modules/modular_ert/icons/pizza/hotknife.dmi'
- icon_state = "hotknife"
- inhand_icon_state = "hotknife"
- desc = "Once known as Lightbringer, this sword has been demoted to a simple pizza cutting knife... It may still have its fire attack powers."
- righthand_file = 'modular_skyrat/modules/modular_ert/icons/pizza/righthand.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_ert/icons/pizza/lefthand.dmi'
-
- /// How many fire stacks to apply on attack
- var/fire_stacks = 4
-
-/obj/item/knife/hotknife/attack(mob/living/victim, mob/living/attacker, params)
- victim.adjust_fire_stacks(fire_stacks)
- victim.ignite_mob()
- return ..()
diff --git a/modular_skyrat/modules/modular_ert/code/readme.md b/modular_skyrat/modules/modular_ert/code/readme.md
deleted file mode 100644
index cd84184500f..00000000000
--- a/modular_skyrat/modules/modular_ert/code/readme.md
+++ /dev/null
@@ -1,43 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/2946 & https://github.com/Skyrat-SS13/Skyrat-tg/pull/10662 for NTrauma
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/4781 for ODST
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/6440 for Fumigator and Engineer
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/5630 for Pizza
-
-## Title: Modular Emergency Response Teams
-
-MODULE ID: modular_ert
-
-### Description:
-
-- Use this module for any Skyrat-unique ERTs, including their outfits, unique equipment, and ERT datums!
-- DO NOT PUT GENERAL-USE ITEMS IN HERE. ITEMS IN HERE SHOULD #ONLY# SHOW UP ON THEIR RELATED ERT.
-
-- (Using TG Outfits and Datums) Adds a simple Engi-Maintinence ERT of non-spaceproof, generic repair dudes.
-- Adds a Fumigator ERT specialized in pest control.
-- Adds a specialized orbital shok droop trooper ERT that allows for a quick security response via pod.
-- Adds a Pizza Delivery "ERT" for... pizza delivery.
-- Adds a specialized medical team ERT that allows for a better medical response.
-
-### TG Proc Changes:
-
-- N/A
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-- Most clothing icon files:
-- modular_skyrat/master_files/icons/mob/clothing/xyz
-- modular_skyrat/master_files/icons/obj/clothing/xyz
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-- pinkblossom6 - Original Sprites and Code for NTrauma & ODST
-- Orion_the_Fox - Updated Sprites and Code for NTrauma
-- thestubborn - Engineer, Fumigator, and Pizza ERTs
diff --git a/modular_skyrat/modules/modular_items/code/cross.dm b/modular_skyrat/modules/modular_items/code/cross.dm
deleted file mode 100644
index 20ce2d86325..00000000000
--- a/modular_skyrat/modules/modular_items/code/cross.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/item/crucifix
- name = "ornate crucifix"
- desc = "An ornate golden crucifix, adorned with various gemstones and tiny carvings. For some reason, it always feels warm to the touch."
- icon = 'modular_skyrat/modules/modular_items/icons/crucifix.dmi'
- icon_state = "cross_ornate"
- lefthand_file = 'modular_skyrat/modules/modular_items/icons/cross_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/icons/cross_right.dmi'
- force = 5 //Gem-encrusted and reinforced with GOD
- throw_speed = 3
- throw_range = 4
- throwforce = 10
- w_class = WEIGHT_CLASS_TINY
-
-/datum/crafting_recipe/cross
- name = "Ornate Cross"
- result = /obj/item/crucifix
- reqs = list(/obj/item/stack/sheet/mineral/gold = 1,
- /obj/item/stack/sheet/mineral/diamond = 1)
- tool_behaviors = list(TOOL_SCREWDRIVER)
- time = 20
- category = CAT_MISC
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm b/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm
deleted file mode 100644
index 9b79648728b..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/decals.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/obj/effect/decal/cleanable/cum
- name = "cum"
- desc = "Ew... Gross."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
- icon_state = "cum_1"
- random_icon_states = list("cum_1", "cum_2", "cum_3", "cum_4")
- beauty = -50
-
-/obj/effect/decal/cleanable/cum/femcum
- name = "female cum"
- desc = "Uhh... Someone had fun..."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_decals/lewd_decals.dmi'
- icon_state = "femcum_1"
- random_icon_states = list("femcum_1", "femcum_2", "femcum_3", "femcum_4")
- beauty = -50
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm b/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm
deleted file mode 100644
index f7645d92016..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/emote.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/datum/emote
- /// If we should check a preference for this emote
- var/pref_to_check
-
-/datum/emote/living/lewd
- pref_to_check = /datum/preference/toggle/erp
-
-// Can we play this emote to viewers?
-/datum/emote/proc/pref_check_emote(mob/user)
- if(isnull(pref_to_check))
- return TRUE
- if(!user.client?.prefs.read_preference(pref_to_check))
- return FALSE
-
-/datum/emote/living/lewd/can_run_emote(mob/living/carbon/user, status_check = TRUE, intentional)
- return ..() && user.client?.prefs?.read_preference(pref_to_check)
-
-/datum/emote/living/lewd/lewdmoan
- key = "lewdmoan"
- key_third_person = "lewdmoans"
- message = "moans lewdly!"
- emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE
- vary = TRUE
- sound_volume = 35
-
-/datum/emote/living/lewd/lewdmoan/get_sound(mob/living/carbon/user)
- if(!istype(user))
- return
-
- if(user.gender == MALE)
- return pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_m1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_m3.ogg',
-
- )
- else
- return pick('modular_skyrat/modules/modular_items/lewd_items/sounds/final_f1.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f2.ogg',
- 'modular_skyrat/modules/modular_items/lewd_items/sounds/final_f3.ogg',
- )
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm
deleted file mode 100644
index b2a6a8e2e6d..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_chemistry/items/pills.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/obj/item/reagent_containers/pill/crocin
- name = "crocin pill (10u)"
- desc = "I've fallen, and I can't get it up!"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
- icon_state = "crocin"
- list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin = 10)
-
-/obj/item/reagent_containers/pill/hexacrocin
- name = "hexacrocin pill (10u)"
- desc = "Pill in creepy heart form."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
- icon_state = "hexacrocin"
- list_reagents = list(/datum/reagent/drug/aphrodisiac/crocin/hexacrocin = 10)
-
-/obj/item/reagent_containers/pill/dopamine
- name = "dopamine pill (5u)"
- desc = "Feelings of orgasm, contained in a pill... Weird."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
- icon_state = "dopamine"
- list_reagents = list(/datum/reagent/drug/aphrodisiac/dopamine = 5)
-
-/obj/item/reagent_containers/pill/camphor
- name = "camphor pill (10u)"
- desc = "For the early bird."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
- icon_state = "camphor"
- list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor = 10)
-
-/obj/item/reagent_containers/pill/pentacamphor
- name = "pentacamphor pill (10u)"
- desc = "The chemical equivalent of horny jail."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_pills.dmi'
- icon_state = "pentacamphor"
- list_reagents = list(/datum/reagent/drug/aphrodisiac/camphor/pentacamphor = 10)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
deleted file mode 100644
index 821e056bb94..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/corset.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-#define TIGHT_SLOWDOWN 2
-
-/obj/item/clothing/suit/corset
- name = "corset"
- desc = "A tight latex corset. How can anybody fit in THAT?"
- icon_state = "corset"
- inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
- body_parts_covered = CHEST
- slowdown = 1 // You can't run with that thing literally squeezing your chest
-
- /// Has it been laced tightly?
- var/laced_tight = FALSE
-
-/obj/item/clothing/suit/corset/AltClick(mob/user)
- laced_tight = !laced_tight
- to_chat(user, span_notice("You [laced_tight ? "tighten" : "loosen"] the corset, making it far [laced_tight ? "harder" : "easier"] to breathe."))
- play_lewd_sound(user, laced_tight ? 'sound/items/handling/cloth_pickup.ogg' : 'sound/items/handling/cloth_drop.ogg', 40, TRUE)
- if(laced_tight)
- slowdown = TIGHT_SLOWDOWN
- return
- slowdown = initial(slowdown)
-
-/obj/item/clothing/suit/corset/equipped(mob/living/carbon/human/user, slot)
- . = ..()
- if(laced_tight && src == user.wear_suit)
- to_chat(user, span_purple("The corset squeezes tightly against your ribs! Breathing suddenly feels much more difficult."))
-
-/obj/item/clothing/suit/corset/dropped(mob/living/carbon/human/user)
- . = ..()
- if(laced_tight && src == user.wear_suit)
- to_chat(user, span_purple("Phew. Now you can breathe normally."))
-
-#undef TIGHT_SLOWDOWN
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm
deleted file mode 100644
index 7387aa27959..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/domina_cap.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/obj/item/clothing/head/domina_cap
- name = "dominant cap"
- desc = "For special types of inspections."
- icon_state = "dominacap"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_hats.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_hats.dmi'
- supports_variations_flags = NONE
-
-//message when equipping that thing
-/obj/item/clothing/head/domina_cap/equipped(mob/living/carbon/user, slot)
- . = ..()
- if(src == user.head)
- to_chat(user, span_purple("You feel much more determined."))
-
-//message when unequipping that thing
-/obj/item/clothing/head/domina_cap/dropped(mob/living/carbon/user)
- . = ..()
- if(src == user.head)
- to_chat(user, span_purple("BDSM session ended, huh?"))
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm
deleted file mode 100644
index 39034a4a635..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_catsuit.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/obj/item/clothing/under/misc/latex_catsuit
- name = "latex catsuit"
- desc = "A shiny uniform that fits snugly to the skin."
- icon_state = "latex_catsuit_female"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
- inhand_icon_state = "latex_catsuit"
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- equip_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/latex.ogg'
- can_adjust = FALSE
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- strip_delay = 80
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
- var/mutable_appearance/breasts_overlay
- var/mutable_appearance/breasts_icon_overlay
-
-//this fragment of code makes unequipping not instant
-/obj/item/clothing/under/misc/latex_catsuit/attack_hand(mob/user)
- if(iscarbon(user))
- var/mob/living/carbon/human/affected_human = user
- if(src == affected_human.w_uniform)
- if(!do_after(affected_human, 60, target = src))
- return
- . = ..()
-
-// //some gender identification magic
-/obj/item/clothing/under/misc/latex_catsuit/equipped(mob/living/affected_mob, slot)
- . = ..()
- var/mob/living/carbon/human/affected_human = affected_mob
- var/obj/item/organ/external/genital/breasts/affected_breasts = affected_human.get_organ_slot(ORGAN_SLOT_BREASTS)
- if(src == affected_human.w_uniform)
- if(affected_mob.gender == FEMALE)
- icon_state = "latex_catsuit_female"
- else
- icon_state = "latex_catsuit_male"
-
- affected_mob.update_worn_undersuit()
-
- breasts_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none")
- update_overlays()
-
- //Breasts overlay for catsuit
- if(affected_breasts?.genital_size >= 6 || affected_breasts?.genital_type == "pair")
- breasts_overlay.icon_state = "breasts_double"
- breasts_icon_overlay.icon_state = "iconbreasts_double"
- accessory_overlay = breasts_overlay
- add_overlay(breasts_icon_overlay)
- update_overlays()
- if(affected_breasts?.genital_type == "quad")
- breasts_overlay.icon_state = "breasts_quad"
- breasts_icon_overlay.icon_state = "iconbreasts_quad"
- accessory_overlay = breasts_overlay
- add_overlay(breasts_icon_overlay)
- update_overlays()
- if(affected_breasts?.genital_type == "sextuple")
- breasts_overlay.icon_state = "breasts_sextuple"
- breasts_icon_overlay.icon_state = "iconbreasts_sextuple"
- accessory_overlay = breasts_overlay
- add_overlay(breasts_icon_overlay)
- update_overlays()
-
- affected_human.regenerate_icons()
-
-/obj/item/clothing/under/misc/latex_catsuit/dropped(mob/living/affected_mob)
- . = ..()
- accessory_overlay = null
- breasts_overlay.icon_state = "none"
- cut_overlay(breasts_icon_overlay)
- breasts_icon_overlay.icon_state = "none"
-
-//Plug to bypass the bug with instant suit equip/drop
-/obj/item/clothing/under/misc/latex_catsuit/MouseDrop(atom/over_object)
-
-/obj/item/clothing/under/misc/latex_catsuit/Initialize(mapload)
- . = ..()
- breasts_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi', "none", ABOVE_MOB_LAYER)
- breasts_overlay.icon_state = ORGAN_SLOT_BREASTS
- breasts_icon_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi', "none")
- breasts_icon_overlay.icon_state = ORGAN_SLOT_BREASTS
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm
deleted file mode 100644
index efe83051c36..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/latex_straight_jacket.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/clothing/suit/straight_jacket/latex_straight_jacket
- name = "latex straight jacket"
- desc = "A toy that is unable to actually restrain anyone. Still fun to wear!"
- inhand_icon_state = "latex_straight_jacket"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
- icon_state = "latex_straight_jacket"
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS
- flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
- clothing_flags = DANGEROUS_OBJECT
- equip_delay_self = NONE
- strip_delay = 12 SECONDS
- breakouttime = 1 SECONDS
-
-/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/attackby(obj/item/attacking_item, mob/user, params) //That part allows reinforcing this item with normal straightjacket
- if(!istype(attacking_item, /obj/item/clothing/suit/straight_jacket))
- return ..()
- var/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced/reinforced_jacket = new()
- remove_item_from_storage(user)
- user.put_in_hands(reinforced_jacket)
- to_chat(user, span_notice("You reinforce the belts on [src] with [attacking_item]."))
- qdel(attacking_item)
- qdel(src)
-
-/obj/item/clothing/suit/straight_jacket/latex_straight_jacket/reinforced
- name = "latex straight jacket"
- desc = "A suit that completely restrains the wearer - in quite an arousing way."
- icon_state = "latex_straight_jacket"
- inhand_icon_state = "latex_straight_jacket"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_suits.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_suit/lewd_suits-hoof.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- body_parts_covered = CHEST | GROIN | LEGS | ARMS | HANDS
- flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT
- clothing_flags = DANGEROUS_OBJECT
- equip_delay_self = NONE
- strip_delay = 12 SECONDS
- breakouttime = 300 SECONDS
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm
deleted file mode 100644
index 875ac000092..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_glasses.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/item/clothing/glasses/nice_goggles
- name = "surprisingly nice looking goggles"
- desc = "It has an inscription engraved on the handle. Kubic. How strange."
- icon_state = "nice_goggles"
- inhand_icon_state = "nice_goggles"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_eyes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_eyes.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
-
-//that's all folks. Nothing superfunctional here.
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm
deleted file mode 100644
index f5b247b60fc..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_gloves.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-//normal ball mittens
-/obj/item/clothing/gloves/ball_mittens
- name = "ball mittens"
- desc = "A nice, comfortable pair of inflatable ball gloves."
- icon_state = "ballmittens"
- inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
- breakouttime = 1 SECONDS
-
-//That part allows reinforcing this item with handcuffs
-/obj/item/clothing/gloves/ball_mittens/attackby(obj/item/attacking_item, mob/user, params)
- . = ..()
- if(.)
- return
- if(!istype(attacking_item, /obj/item/restraints/handcuffs))
- return
- var/obj/item/clothing/gloves/ball_mittens_reinforced/reinforced_muffs = new
- remove_item_from_storage(user)
- user.put_in_hands(reinforced_muffs)
- to_chat(user, span_notice("You reinforced the belts on [src] with [attacking_item]."))
- qdel(attacking_item)
- qdel(src)
- return TRUE
-
-//ball_mittens reinforced
-/obj/item/clothing/gloves/ball_mittens_reinforced //We getting this item by using handcuffs on normal ball mittens
- name = "reinforced ball mittens"
- desc = "Do not put these on, it's REALLY hard to take them off! But they look so comfortable..."
- icon_state = "ballmittens"
- inhand_icon_state = null
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
- clothing_flags = DANGEROUS_OBJECT
- breakouttime = 100 SECONDS //do not touch this, i beg you.
-
-//latex gloves
-/obj/item/clothing/gloves/latex_gloves
- name = "latex gloves"
- desc = "Awesome looking gloves that are satisfying to the touch."
- icon_state = "latexgloves"
- inhand_icon_state = "latex_gloves"
- w_class = WEIGHT_CLASS_SMALL
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_gloves.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_gloves.dmi'
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm
deleted file mode 100644
index 00caec39977..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_maid.dm
+++ /dev/null
@@ -1,115 +0,0 @@
-/obj/item/clothing/under/costume/lewdmaid
- name = "latex maid costume"
- desc = "A maid costume made of a thick latex."
- icon_state = "lewdmaid"
- inhand_icon_state = "lewdmaid"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- body_parts_covered = CHEST
- can_adjust = FALSE
-
-/obj/item/clothing/accessory/lewdapron
- name = "shiny maid apron"
- desc = "The best part of a maid costume. Now with different colors!"
- icon_state = "lewdapron_pink"
- base_icon_state = "lewdapron"
- inhand_icon_state = "lewdapron_pink"
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- minimize_when_attached = FALSE
- attachment_slot = null
- /// If the color has been changed before
- var/color_changed = FALSE
- /// Current color of the apron, can change and affects sprite
- var/current_color = "red"
- /// List of all apron designs, used in selecting one in the radial menu
- var/static/list/apron_designs
-
-/obj/item/clothing/under/costume/lewdmaid/Initialize(mapload)
- . = ..()
- var/obj/item/clothing/accessory/lewdapron/apron_accessory = new(src)
- attach_accessory(apron_accessory)
-
-/// create radial menu
-/obj/item/clothing/accessory/lewdapron/proc/populate_apron_designs()
- apron_designs = list(
- "red" = image (icon = src.icon, icon_state = "lewdapron_red"),
- "green" = image (icon = src.icon, icon_state = "lewdapron_green"),
- "pink" = image (icon = src.icon, icon_state = "lewdapron_pink"),
- "teal" = image(icon = src.icon, icon_state = "lewdapron_teal"),
- "yellow" = image (icon = src.icon, icon_state = "lewdapron_yellow"))
-
-//to change model
-/obj/item/clothing/accessory/lewdapron/AltClick(mob/user)
- if(color_changed)
- return
- . = ..()
- if(.)
- return
- var/choice = show_radial_menu(user, src, apron_designs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE)
- if(!choice)
- return FALSE
- current_color = choice
- update_icon()
- color_changed = TRUE
-
-/// to check if we can change kinkphones's model
-/obj/item/clothing/accessory/lewdapron/proc/check_menu(mob/living/user)
- if(!istype(user))
- return FALSE
- if(user.incapacitated())
- return FALSE
- return TRUE
-
-/obj/item/clothing/accessory/lewdapron/Initialize(mapload)
- AddElement(/datum/element/update_icon_updates_onmob)
- if(!length(apron_designs))
- populate_apron_designs()
- update_icon_state()
- update_icon()
- . = ..()
-
-/obj/item/clothing/accessory/lewdapron/update_icon_state()
- . = ..()
- icon_state = icon_state = "[initial(base_icon_state)]_[current_color]"
- inhand_icon_state = "[initial(base_icon_state)]_[current_color]"
-
-/obj/item/clothing/under/costume/lewdmaid/attach_accessory(obj/item/attack_item)
- . = ..()
- var/obj/item/clothing/accessory/prime_accessory = attached_accessories[1]
- var/accessory_color = prime_accessory.icon_state
- accessory_overlay = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "[accessory_color]", ABOVE_MOB_LAYER + 0.1)
- accessory_overlay.alpha = prime_accessory.alpha
- accessory_overlay.color = prime_accessory.color
- if(!ishuman(loc))
- return TRUE
- var/mob/living/carbon/human/wearer = loc
- wearer.update_worn_undersuit()
- wearer.update_worn_oversuit()
- wearer.fan_hud_set_fandom()
- return TRUE
-
-//Not a maid, yeah. I dont care, it's going with the other lewd stuff, and there WONT be a whole new file just for it.
-/obj/item/clothing/under/costume/bunnylewd
- name = "bunny suit"
- desc = "Makes the wearer more attractive, even men."
- icon_state = "bunnysuit"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- body_parts_covered = CHEST|GROIN
- can_adjust = TRUE
- alt_covers_chest = FALSE
-
-/obj/item/clothing/under/costume/bunnylewd/white
- name = "white bunny suit"
- icon_state = "whitebunnysuit"
- can_adjust = FALSE
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm
deleted file mode 100644
index c36900d3e93..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/lewd_shoes.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-//heels item
-/obj/item/clothing/shoes/latex_heels
- name = "latex heels"
- desc = "Lace up before use. It's pretty difficult to walk in these."
- icon_state = "latexheels"
- inhand_icon_state = null
- // We really need to find a way to condense there.
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
-
-/obj/item/clothing/shoes/latex_heels/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
-
-/obj/item/clothing/shoes/latex_heels/domina_heels
- name = "dominant heels"
- desc = "A pair of aesthetically pleasing heels."
- icon_state = "dominaheels"
-
-/*
-* LATEX SOCKS
-*/
-
-/obj/item/clothing/shoes/latex_socks
- name = "latex socks"
- desc = "A pair of shiny, split-toe socks made of some strange material."
- icon_state = "latexsocks"
- inhand_icon_state = null
- w_class = WEIGHT_CLASS_SMALL
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_shoes.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_shoes_digi.dmi'
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm
deleted file mode 100644
index 545748165c4..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_clothing/stripper_outfit.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/obj/item/clothing/under/stripper_outfit
- name = "stripper outfit"
- desc = "An item of clothing that leaves little to the imagination."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_uniform.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform.dmi'
- worn_icon_digi = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-digi.dmi'
- worn_icon_taur_snake = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-snake.dmi'
- worn_icon_taur_paw = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-paw.dmi'
- worn_icon_taur_hoof = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_uniform/lewd_uniform-hoof.dmi'
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION|STYLE_TAUR_ALL
- can_adjust = FALSE
- icon_state = "stripper_cyan"
- inhand_icon_state = "b_suit"
- unique_reskin = list("Cyan" = "stripper_cyan",
- "Yellow" = "stripper_yellow",
- "Green" = "stripper_green",
- "Red" = "stripper_red",
- "Latex" = "stripper_latex",
- "Orange" = "stripper_orange",
- "White" = "stripper_white",
- "Purple" = "stripper_purple",
- "Black" = "stripper_black",
- "Black-teal" = "stripper_tealblack")
-
-/obj/item/clothing/under/stripper_outfit/AltClick(mob/user)
- . = ..()
- if(unique_reskin && !current_skin && user.can_perform_action(src, NEED_DEXTERITY))
- reskin_obj(user)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm
deleted file mode 100644
index 43fe087590f..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_helpers/misc.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-* Looping sound for vibrating stuff
-*/
-
-/datum/looping_sound/lewd/vibrator
- start_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
- start_length = 1
- mid_sounds = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
- mid_length = 1
- end_sound = 'modular_skyrat/modules/modular_items/lewd_items/sounds/bzzz-loop-1.ogg'
- falloff_distance = 1
- falloff_exponent = 5
- extra_range = SILENCED_SOUND_EXTRARANGE
- ignore_walls = FALSE
-
-/datum/looping_sound/lewd/vibrator/low
- volume = 80
-
-/datum/looping_sound/lewd/vibrator/medium
- volume = 90
-
-/datum/looping_sound/lewd/vibrator/high
- volume = 100
-
-/*
-* Dancing pole code.
-*/
-
-/atom
- var/pseudo_z_axis
-
-/atom/proc/get_fake_z()
- return pseudo_z_axis
-
-/obj/structure/table
- pseudo_z_axis = 8
-
-/turf/open/get_fake_z()
- var/objschecked
- for(var/obj/structure/structurestocheck in contents)
- objschecked++
- if(structurestocheck.pseudo_z_axis)
- return structurestocheck.pseudo_z_axis
- if(objschecked >= 25)
- break
- return pseudo_z_axis
-
-/mob/living/Move(atom/newloc, direct)
- . = ..()
- if(.)
- pseudo_z_axis = newloc.get_fake_z()
- pixel_z = pseudo_z_axis
-
-/// Used to add a cum decal to the floor while transferring viruses and DNA to it
-/mob/living/proc/add_cum_splatter_floor(turf/the_turf, female = FALSE)
- if(!the_turf)
- the_turf = get_turf(src)
-
- var/selected_type = female ? /obj/effect/decal/cleanable/cum/femcum : /obj/effect/decal/cleanable/cum
- var/atom/stain = new selected_type(the_turf, get_static_viruses())
-
- stain.transfer_mob_blood_dna(src) //I'm not adding a new forensics category for cumstains
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm
deleted file mode 100644
index 99990223c36..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_items/pinkcuffs.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/obj/item/restraints/handcuffs/lewd
- name = "kinky handcuffs"
- desc = "Fake handcuffs meant for erotic roleplay."
- icon_state = "pinkcuffs"
- inhand_icon_state = "pinkcuffs"
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- worn_icon_state = "pinkcuffs"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
- breakouttime = 1 SECONDS
-
-// Additionally, we will process the installation of the desired appearance, to bypass the bug in the general code
-/obj/item/restraints/handcuffs/lewd/apply_cuffs(mob/living/carbon/target, mob/user, dispense = 0)
- . = ..()
- src.icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
- src.icon_state = "pinkcuffs"
- src.worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi'
- src.worn_icon_state = "pinkcuffs"
- src.lefthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_left.dmi'
- src.righthand_file = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_inhands/lewd_inhand_right.dmi'
-
- // Similar code in general procedures does not correctly set the appearance
- target.remove_overlay(HANDCUFF_LAYER)
- if(!target.handcuffed)
- return
- target.overlays_standing[HANDCUFF_LAYER] = mutable_appearance('modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_items/lewd_items.dmi', "pinkcuffs", -HANDCUFF_LAYER)
- target.apply_overlay(HANDCUFF_LAYER)
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm
deleted file mode 100644
index 59241ed4dc1..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/lustwish.dm
+++ /dev/null
@@ -1,180 +0,0 @@
-/obj/machinery/vending/dorms
- name = "LustWish"
- desc = "A vending machine with various toys. Not for the faint of heart."
- icon_state = "lustwish"
- base_icon_state = "lustwish"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/lustwish.dmi'
- light_mask = "lustwish-light-mask"
- age_restrictions = TRUE
- ///Has the discount card been used on the vending machine?
- var/card_used = FALSE
- product_ads = "Try me!;Kinky!;Lewd and fun!;Hey you, yeah you... wanna take a look at my collection?;Come on, take a look!;Remember, always adhere to Nanotrasen corporate policy!;Don't forget to use protection!"
- vend_reply = "Enjoy!;We're glad to satisfy your desires!"
-
- //STUFF SOLD HERE//
- products = list(//Sex toys
- /obj/item/clothing/sextoy/eggvib/signalvib = 8,
- /obj/item/assembly/signaler = 8,
- /obj/item/clothing/sextoy/eggvib = 8,
- /obj/item/clothing/sextoy/buttplug = 6,
- /obj/item/clothing/sextoy/nipple_clamps = 4,
- /obj/item/clothing/sextoy/dildo/double_dildo = 3,
- /obj/item/clothing/sextoy/vibroring = 6,
- /obj/item/condom_pack = 20,
- /obj/item/clothing/sextoy/dildo = 8,
- /obj/item/clothing/sextoy/dildo/custom_dildo = 8,
- /obj/item/tickle_feather = 8,
- /obj/item/clothing/sextoy/fleshlight = 8,
- /obj/item/kinky_shocker = 4,
- /obj/item/clothing/mask/leatherwhip = 4,
- /obj/item/clothing/sextoy/magic_wand = 4,
- /obj/item/bdsm_candle = 4,
- /obj/item/spanking_pad = 4,
- /obj/item/clothing/sextoy/vibrator = 4,
- /obj/item/serviette_pack = 10,
- /obj/item/restraints/handcuffs/lewd = 8,
- /obj/item/key/collar = 48,
- /obj/item/fancy_pillow = 32,
- /obj/item/stack/shibari_rope/full = 10,
- /obj/item/stack/shibari_rope/glow/full = 10,
-
- //clothing facial/head
- /obj/item/clothing/mask/ballgag = 8,
- /obj/item/clothing/mask/ballgag/choking = 8,
- /obj/item/clothing/mask/muzzle/ring = 4,
- /obj/item/clothing/head/domina_cap = 5,
- /obj/item/clothing/head/deprivation_helmet = 5,
- /obj/item/clothing/head/costume/skyrat/maid = 5,
- /obj/item/clothing/glasses/blindfold/kinky = 5,
- /obj/item/clothing/ears/kinky_headphones = 5,
- /obj/item/clothing/mask/gas/bdsm_mask = 5,
- /obj/item/reagent_containers/cup/lewd_filter = 5,
- /obj/item/clothing/glasses/hypno = 4,
- /obj/item/clothing/head/costume/kitty = 4,
- /obj/item/clothing/head/costume/rabbitears = 4,
-
-
- //neck
- /obj/item/clothing/neck/kink_collar = 8,
- /obj/item/clothing/neck/human_petcollar = 8,
- /obj/item/clothing/neck/human_petcollar/choker = 8,
- /obj/item/clothing/neck/human_petcollar/thinchoker = 8,
- /obj/item/clothing/neck/human_petcollar/locked/cow = 8,
- /obj/item/clothing/neck/human_petcollar/locked/bell = 8,
- /obj/item/clothing/neck/human_petcollar/locked/cross = 8,
- /obj/item/clothing/neck/human_petcollar/locked/spike = 8,
- /obj/item/clothing/neck/size_collar = 8,
-
- //torso clothing
- /obj/item/clothing/under/misc/latex_catsuit = 8,
- /obj/item/clothing/suit/straight_jacket/latex_straight_jacket = 5,
- /obj/item/clothing/under/costume/maid = 5,
- /obj/item/clothing/under/rank/civilian/janitor/maid = 5,
- /obj/item/clothing/under/costume/lewdmaid = 5,
- /obj/item/clothing/suit/straight_jacket/shackles = 4,
- /obj/item/clothing/under/stripper_outfit = 5,
- /obj/item/clothing/under/costume/bunnylewd = 5,
- /obj/item/clothing/under/costume/bunnylewd/white = 5,
- /obj/item/clothing/under/misc/skyrat/gear_harness = 4,
-
- //hands
- /obj/item/clothing/gloves/ball_mittens = 8,
- /obj/item/clothing/gloves/latex_gloves = 8,
- /obj/item/clothing/gloves/evening = 5,
-
- //legs
- /obj/item/clothing/shoes/latex_socks = 8,
- /obj/item/clothing/shoes/latex_heels = 4,
- /obj/item/clothing/shoes/latex_heels/domina_heels = 4,
- /obj/item/clothing/shoes/jackboots/knee = 3,
- /obj/item/clothing/under/pants/skyrat/chaps = 4,
-
- //belt
- /obj/item/clothing/strapon = 6,
- /obj/item/storage/belt/erpbelt = 5,
-
- //chems
- /obj/item/reagent_containers/pill/crocin = 20,
- /obj/item/reagent_containers/pill/camphor = 10,
- /obj/item/reagent_containers/cup/bottle/crocin = 6,
- /obj/item/reagent_containers/cup/bottle/camphor = 3,
- /obj/item/reagent_containers/cup/bottle/succubus_milk = 6, //Those are legal 'cause you can just turn off prefs in round in "CLOWN SMOKE MACHINE+PENIS ENLARGEMENT CHEMICAL CASE". Yes, i have special code-phrase for this. I've seen some shit.
- /obj/item/reagent_containers/cup/bottle/incubus_draft = 6,
-
- //special
- /obj/item/clothing/glasses/nice_goggles = 1, //easter egg, don't touch plz)
-
- //fur niture //haha you got it
- /obj/item/storage/box/bdsmbed_kit = 4,
- /obj/item/storage/box/strippole_kit = 4,
- /obj/item/storage/box/xstand_kit = 4,
- /obj/item/storage/box/milking_kit = 4,
- /obj/item/storage/box/shibari_stand = 4)
-
- premium = list(
- /obj/item/clothing/neck/human_petcollar/locked/holo = 3)
-
- contraband = list(
- /obj/item/electropack/shockcollar = 4,
- /obj/item/clothing/neck/kink_collar/locked = 4,
- /obj/item/clothing/neck/mind_collar = 2,
- /obj/item/clothing/under/costume/jabroni = 4,
- /obj/item/clothing/neck/human_petcollar/locked = 4,
- /obj/item/clothing/suit/straight_jacket/kinky_sleepbag = 2, //my favorite thing, spent 1 month on it. Don't remove please.
- /obj/item/disk/nifsoft_uploader/dorms/contract = 5,
- /obj/item/reagent_containers/pill/hexacrocin = 10,
- /obj/item/reagent_containers/pill/pentacamphor = 5,
- /obj/item/reagent_containers/cup/bottle/hexacrocin = 4,
- /obj/item/reagent_containers/cup/bottle/pentacamphor = 2)
-
- refill_canister = /obj/item/vending_refill/lustwish
- payment_department = ACCOUNT_SRV
- default_price = 30
- extra_price = 250
-
-//Changes the settings on the vendor, if the user uses the discount card.
-/obj/machinery/vending/dorms/attackby(obj/item/used_item, mob/living/user, params)
- if(!istype(used_item, /obj/item/lustwish_discount))
- return ..()
-
- user.visible_message(span_boldnotice("Something changes in [src] with a loud clunk."))
- card_used = !card_used
-
- if(card_used)
- default_price = 0
- extra_price = 0
-
- return
-
- default_price = initial(default_price)
- extra_price = initial(extra_price)
-
-///Performs checks to see if the user can change the color on the vending machine.
-/obj/machinery/vending/dorms/proc/check_menu(mob/living/user, obj/item/multitool)
- if(!istype(user))
- return FALSE
- if(user.incapacitated())
- return FALSE
- if(!multitool || !user.is_holding(multitool))
- return FALSE
-
- return TRUE
-
-/obj/machinery/vending/dorms/Initialize(mapload)
- . = ..()
- update_icon_state()
- update_icon()
-
-/obj/machinery/vending/dorms/update_icon_state()
- ..()
- if(machine_stat & BROKEN)
- icon_state = "[base_icon_state]-broken"
- return
-
- icon_state = "[base_icon_state][powered() ? null : "-off"]"
-
-//Refill item
-/obj/item/vending_refill/lustwish
- machine_name = "LustWish"
- icon_state = "lustwish_refill"
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_items/lewd_items.dmi'
diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm
deleted file mode 100644
index cc3ed2cdce8..00000000000
--- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm
+++ /dev/null
@@ -1,122 +0,0 @@
-///The item used as the basis for construction kits for organic interface
-/obj/item/construction_kit
- name = "construction kit"
- desc = "Used for constructing various things"
- w_class = WEIGHT_CLASS_BULKY
- obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
- throwforce = 0
- ///What is the path for the resulting structure generating by using this item?
- var/obj/structure/resulting_structure = /obj/structure/chair
- ///How much time does it take to construct an item using this?
- var/construction_time = 8 SECONDS
- ///What color is the item using? If none, leave this blank.
- var/current_color = ""
-
-/obj/item/construction_kit/Initialize(mapload)
- . = ..()
- name = "[initial(resulting_structure.name)] [name]"
-
-/obj/item/construction_kit/examine(mob/user)
- . = ..()
- . += span_purple("[src] can be assembled by using Ctrl+Shift+Click while [src] is on the floor.")
-
-/obj/item/construction_kit/CtrlShiftClick(mob/user)
- . = ..()
- if(. == FALSE)
- return FALSE
-
- if((item_flags & IN_INVENTORY) || (item_flags & IN_STORAGE))
- return FALSE
-
- to_chat(user, span_notice("You begin to assemble [src]..."))
- if(!do_after(user, construction_time, src))
- to_chat(user, span_warning("You fail to assemble [src]!"))
- return FALSE
-
- var/obj/structure/chair/final_structure = new resulting_structure (get_turf(user))
- if(current_color && istype(final_structure, /obj/structure/chair/milking_machine))
- var/obj/structure/chair/milking_machine/new_milker = final_structure
- new_milker.machine_color = current_color
-
- if(current_color == "pink")
- new_milker.icon_state = "milking_pink_off"
- else
- new_milker.icon_state = "milking_teal_off"
-
- if(istype(final_structure, /obj/structure/chair/shibari_stand))
- var/obj/structure/chair/shibari_stand/stand = final_structure
- stand.set_greyscale(greyscale_colors)
-
- qdel(src)
- to_chat(user, span_notice("You assemble [src]."))
- return TRUE
-
-// MILKER
-
-/obj/item/construction_kit/milker
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/milking_machine.dmi'
- icon_state = "milkbuild_pink"
- base_icon_state = "milkbuild"
- current_color = "pink"
- resulting_structure = /obj/structure/chair/milking_machine
-
-/obj/item/construction_kit/milker/Initialize(mapload)
- . = ..()
- update_icon_state()
- update_icon()
-
-/obj/item/construction_kit/milker/update_icon_state()
- icon_state = "[initial(base_icon_state)]_[current_color]"
- return ..()
-
-
-/obj/item/construction_kit/pole
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/dancing_pole.dmi'
- icon_state = "pole_base"
- resulting_structure = /obj/structure/stripper_pole
-
-// BDSM FURNITURE
-/obj/item/construction_kit/bdsm
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi'
-
-// X-STAND
-
-/obj/item/construction_kit/bdsm/x_stand
- icon_state = "xstand_kit"
- resulting_structure = /obj/structure/chair/x_stand
-
-// RESTRAINED BED
-
-/obj/item/construction_kit/bdsm/bed
- icon_state = "bdsm_bed_kit"
- resulting_structure = /obj/structure/bed/bdsm_bed
-
-/obj/item/construction_kit/bdsm/shibari
- icon_state = "shibari_kit"
- greyscale_config = /datum/greyscale_config/shibari_stand_item
- greyscale_colors = "#bd8fcf"
- resulting_structure = /obj/structure/chair/shibari_stand
-
-// SHIBARI STAND
-
-/obj/item/construction_kit/bdsm/shibari/examine(mob/user)
- .=..()
- . += span_purple("[src]'s color can be customized with Ctrl+Click .")
-
-//to change model
-/obj/item/construction_kit/bdsm/shibari/CtrlClick(mob/user)
- . = ..()
- if(. == FALSE)
- return FALSE
-
- var/list/allowed_configs = list()
- allowed_configs += "[greyscale_config]"
- var/datum/greyscale_modify_menu/menu = new(
- src, usr, allowed_configs, null, \
- starting_icon_state = icon_state, \
- starting_config = greyscale_config, \
- starting_colors = greyscale_colors
- )
- menu.ui_interact(usr)
- to_chat(user, span_notice("You switch the frame's plastic fittings color."))
- return TRUE
diff --git a/modular_skyrat/modules/modular_vending/code/wardrobes.dm b/modular_skyrat/modules/modular_vending/code/wardrobes.dm
deleted file mode 100644
index 103bb2ca975..00000000000
--- a/modular_skyrat/modules/modular_vending/code/wardrobes.dm
+++ /dev/null
@@ -1,255 +0,0 @@
-/obj/machinery/vending/wardrobe/medi_wardrobe
- skyrat_products = list(
- /obj/item/radio/headset/headset_med = 3,
- /obj/item/clothing/gloves/latex/nitrile = 2,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/hospitalgown = 5,
- /obj/item/storage/belt/medbandolier = 2,
- /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem/emt = 2,
- /obj/item/clothing/under/rank/medical/scrubs/skyrat/red = 4,
- /obj/item/clothing/under/rank/medical/scrubs/skyrat/white = 4,
- /obj/item/clothing/under/rank/medical/doctor/skyrat/utility = 4,
- /obj/item/clothing/suit/toggle/labcoat/medical = 4,
- /obj/item/storage/backpack/messenger/med = 4,
- )
-
-/obj/machinery/vending/wardrobe/engi_wardrobe
- skyrat_products = list(
- /obj/item/radio/headset/headset_eng = 3,
- /obj/item/clothing/under/rank/engineering/engineer/skyrat/trouser = 3,
- /obj/item/clothing/under/rank/engineering/engineer/skyrat/utility = 3,
- /obj/item/clothing/under/rank/engineering/engineer/skyrat/hazard_chem = 3,
- /obj/item/clothing/under/misc/overalls = 3,
- /obj/item/clothing/suit/toggle/jacket/engi = 3,
- /obj/item/clothing/head/utility/hardhat/orange = 2,
- /obj/item/clothing/head/utility/hardhat/welding/orange = 2,
- /obj/item/clothing/head/utility/hardhat/dblue = 2,
- /obj/item/clothing/head/utility/hardhat/welding/dblue = 2,
- /obj/item/clothing/head/utility/hardhat/red = 2,
- /obj/item/storage/backpack/messenger/eng = 3,
- )
-
-/obj/machinery/vending/wardrobe/atmos_wardrobe
- skyrat_products = list(
- /obj/item/clothing/glasses/meson/engine = 2,
- /obj/item/clothing/head/beret/atmos = 4,
- /obj/item/storage/backpack/messenger/eng = 3,
- )
-
-/obj/machinery/vending/wardrobe/cargo_wardrobe
- skyrat_products = list(
- /obj/item/clothing/under/rank/cargo/tech/skyrat/long = 3,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/gorka = 3,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck = 3,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/turtleneck/skirt = 3,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/utility = 3,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/casualman = 3,
- /obj/item/clothing/suit/toggle/jacket/supply = 3,
- /obj/item/clothing/glasses/hud/gun_permit = 5, //from company imports module
- /obj/item/storage/backpack/messenger = 3,
- )
-
- skyrat_contraband = list(
- /obj/item/clothing/under/suit/skyrat/scarface = 2,
- /obj/item/clothing/under/rank/cargo/tech/skyrat/evil = 2,
- )
-
-/obj/machinery/vending/wardrobe/robo_wardrobe
- skyrat_products = list(
- /obj/item/clothing/head/beret/science/fancy/robo = 2,
- /obj/item/clothing/under/rank/rnd/roboticist/skyrat/sleek = 2,
- /obj/item/tank/internals/anesthetic = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/reagent_containers/cup/bottle/morphine = 2,
- /obj/item/reagent_containers/syringe = 2,
- /obj/item/reagent_containers/spray/hercuri/chilled = 2,
- /obj/item/clothing/gloves/color/black = 2, // fire resistant, allows the robo to painlessly mold metal. also its down here because its a treatment item
- /obj/item/bonesetter = 2, // for dislocations
- /obj/item/stack/medical/gauze = 4, // for ALL wounds
- /obj/item/healthanalyzer/no_medibot = 2, // disallows medibot use so its not wasted immediately on medibots
- /obj/item/healthanalyzer/simple = 2,
- /obj/item/storage/backpack/science/robo = 2,
- /obj/item/storage/backpack/satchel/science/robo = 2,
- /obj/item/storage/backpack/duffelbag/science/robo = 2,
- /obj/item/storage/backpack/messenger/science/robo = 2,
- )
-
-/obj/machinery/vending/wardrobe/science_wardrobe
- skyrat_products = list(
- /obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience = 3,
- /obj/item/clothing/under/rank/rnd/scientist/skyrat/utility = 3,
- /obj/item/clothing/suit/toggle/jacket/sci = 3,
- /obj/item/storage/backpack/messenger/science = 3,
- )
-
-/obj/machinery/vending/wardrobe/hydro_wardrobe
- skyrat_contraband = list(
- /obj/item/clothing/under/suit/skyrat/scarface = 2,
- /obj/item/clothing/under/misc/skyrat/gear_harness/adam = 2,
- /obj/item/clothing/under/misc/skyrat/gear_harness/eve = 2,
- /obj/item/storage/backpack/messenger/hyd = 3,
- )
-
-/obj/machinery/vending/wardrobe/bar_wardrobe
- skyrat_products = list(
- /obj/item/storage/fancy/candle_box/vanilla = 1,
- /obj/item/storage/fancy/candle_box/pear = 1,
- /obj/item/storage/fancy/candle_box/amber = 1,
- /obj/item/storage/fancy/candle_box/jasmine = 1,
- /obj/item/storage/fancy/candle_box/mint = 1,
- /obj/item/clothing/suit/hooded/wintercoat/skyrat/bartender = 2,
- )
-
-/obj/machinery/vending/wardrobe/chap_wardrobe
- skyrat_products = list(
- /obj/item/clothing/suit/costume/nemes = 1,
- /obj/item/clothing/head/costume/nemes = 1,
- /obj/item/clothing/head/costume/pharaoh = 1, //dont google camel by camel worst mistake of my life
- )
-
- skyrat_contraband = list(
- /obj/item/clothing/neck/chaplain = 1,
- /obj/item/clothing/neck/chaplain/black = 1,
- /obj/item/implanter/mortis = 1,
- )
-
-/obj/machinery/vending/cart
- skyrat_products = list(
- /obj/item/radio/headset/headset_srv = 3,
- )
-
-/obj/machinery/vending/wardrobe/chem_wardrobe
- skyrat_products = list(
- /obj/item/clothing/under/rank/medical/chemist/skyrat/formal = 2,
- /obj/item/clothing/under/rank/medical/chemist/skyrat/formal/skirt = 2,
- /obj/item/clothing/head/beret/medical/chemist = 2,
- /obj/item/storage/backpack/messenger/chem = 2,
- )
-
-/obj/machinery/vending/wardrobe/viro_wardrobe
- skyrat_products = list(
- /obj/item/clothing/head/beret/medical/virologist = 2,
- /obj/item/storage/backpack/messenger/vir = 2,
- )
-
-/obj/machinery/vending/wardrobe/det_wardrobe
- skyrat_products = list(
- /obj/item/clothing/head/fedora/beige = 2,
- /obj/item/clothing/head/fedora/white = 2,
- /obj/item/clothing/under/costume/cybersleek = 2,
- /obj/item/clothing/under/costume/cybersleek/long = 2,
- /obj/item/clothing/head/fedora/det_hat/cybergoggles = 2,
- /obj/item/clothing/suit/toggle/deckard = 2,
- /obj/item/clothing/suit/armor/vest/det_suit/runner = 2,
- /obj/item/clothing/under/rank/security/detective/runner = 2,
- /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis = 2,
- /obj/item/clothing/under/rank/security/detective/cowboy = 2,
- /obj/item/clothing/suit/jacket/det_suit/cowboyvest = 2,
- /obj/item/storage/backpack/messenger/sec = 2,
- )
-
-/obj/machinery/vending/wardrobe/law_wardrobe
- skyrat_products = list(
- /obj/item/clothing/under/suit/skyrat/black_really_collared = 3,
- /obj/item/clothing/under/suit/skyrat/black_really_collared/skirt = 3,
- /obj/item/clothing/under/suit/skyrat/inferno = 3,
- /obj/item/clothing/under/suit/skyrat/inferno/skirt = 3,
- /obj/item/clothing/under/suit/skyrat/inferno/beeze = 2,
- )
-
-/// GHOST CAFE WARDROBES
-// Needed to remove radios from Ghost Cafe
-/// Removes given list of products. Must be called before build_inventory() to actually prevent the records from being created.
-/obj/machinery/vending/proc/remove_products(list/paths_to_remove)
- if(!length(paths_to_remove))
- return
- for(var/typepath as anything in products)
- for(var/to_remove as anything in paths_to_remove)
- if(ispath(typepath, to_remove))
- products.Remove(typepath)
-
-/obj/machinery/vending/
- /// list of products to exclude when building the vending machine's inventory
- var/list/excluded_products
-
-/obj/machinery/vending/Initialize(mapload)
- remove_products(excluded_products)
- return ..()
-
-/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
-
-/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe
- excluded_products = list(
- /obj/item/radio/headset,
- )
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm
deleted file mode 100644
index 3f0dedf2889..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/advert.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/structure/sign/poster/official/carwo_grenade
- name = "Tydhouer - Precision Timing"
- desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, a variety of specialist .980 Tydhouer grenades for the Kiboko launcher."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi'
- icon_state = "grenadier"
-
-/obj/structure/sign/poster/official/carwo_grenade/examine_more(mob/user)
- . = ..()
-
- . += "Small text details that certain types of grenades may not be available in your \
- region depending on local weapons regulations. Suspiciously, however, if you squint at \
- it a bit, the background colors of the image come together vaguely in the shape of \
- a computer board and a multitool. What did they mean by this?"
-
- return .
-
-MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_grenade, 32)
-
-/obj/structure/sign/poster/official/carwo_magazine
- name = "Standardisation - Magazines of the Future"
- desc = "This poster depicts, alongside the prominent logo of Carwo Defense Systems, the variety of magazine types the company has on offer for rifles. \
- It also goes into great deal to say, more or less, that any rifle can take any rifle magazine. Now this is technology like never seen before."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/propaganda.dmi'
- icon_state = "mag_size"
-
-/obj/structure/sign/poster/official/carwo_magazine/examine_more(mob/user)
- . = ..()
-
- . += "Small text details that certain types of magazines may not be available in your \
- region depending on local weapons regulations. Suspiciously, however, if you squint at \
- it a bit, the background colors of the image come together vaguely in the shape of \
- a computer board and a multitool. What did they mean by this?"
-
- return .
-
-MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/carwo_magazine, 32)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm
deleted file mode 100644
index e20070dcef5..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/pistol.dm
+++ /dev/null
@@ -1,134 +0,0 @@
-// .35 Sol Short
-// Pistol caliber caseless round used almost exclusively by SolFed weapons
-
-/obj/item/ammo_casing/c35sol
- name = ".35 Sol Short lethal bullet casing"
- desc = "A SolFed standard caseless lethal pistol round."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "35sol"
-
- caliber = CALIBER_SOL35SHORT
- projectile_type = /obj/projectile/bullet/c35sol
-
-
-/obj/item/ammo_casing/c35sol/Initialize(mapload)
- . = ..()
-
- AddElement(/datum/element/caseless)
-
-
-/obj/projectile/bullet/c35sol
- name = ".35 Sol Short bullet"
- damage = 25
-
- wound_bonus = 10 // Normal bullets are 20
- bare_wound_bonus = 20
-
-
-/obj/item/ammo_box/c35sol
- name = "ammo box (.35 Sol Short lethal)"
- desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "35box"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_NORMAL
-
- caliber = CALIBER_SOL35SHORT
- ammo_type = /obj/item/ammo_casing/c35sol
- max_ammo = 24
-
-
-// .35 Sol's equivalent to a rubber bullet
-
-/obj/item/ammo_casing/c35sol/incapacitator
- name = ".35 Sol Short incapacitator bullet casing"
- desc = "A SolFed standard caseless less-lethal pistol round. Exhausts targets on hit, has a tendency to bounce off walls at shallow angles."
-
- icon_state = "35sol_disabler"
-
- projectile_type = /obj/projectile/bullet/c35sol/incapacitator
- harmful = FALSE
-
-
-/obj/projectile/bullet/c35sol/incapacitator
- name = ".35 Sol Short incapacitator bullet"
- damage = 5
- stamina = 30
-
- wound_bonus = -40
- bare_wound_bonus = -20
-
- weak_against_armour = TRUE
-
- // The stats of the ricochet are a nerfed version of detective revolver rubber ammo
- // This is due to the fact that there's a lot more rounds fired quickly from weapons that use this, over a revolver
- ricochet_auto_aim_angle = 30
- ricochet_auto_aim_range = 5
- ricochets_max = 4
- ricochet_incidence_leeway = 50
- ricochet_chance = 130
- ricochet_decay_damage = 0.8
-
- shrapnel_type = null
- sharpness = NONE
- embedding = null
-
-
-/obj/item/ammo_box/c35sol/incapacitator
- name = "ammo box (.35 Sol Short incapacitator)"
- desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The blue stripe indicates this should hold less-lethal ammunition."
-
- icon_state = "35box_disabler"
-
- ammo_type = /obj/item/ammo_casing/c35sol/incapacitator
-
-
-// .35 Sol ripper, similar to the detective revolver's dumdum rounds, causes slash wounds and is weak to armor
-
-/obj/item/ammo_casing/c35sol/ripper
- name = ".35 Sol Short ripper bullet casing"
- desc = "A SolFed standard caseless ripper pistol round. Causes slashing wounds on targets, but is weak to armor."
-
- icon_state = "35sol_shrapnel"
- projectile_type = /obj/projectile/bullet/c35sol/ripper
-
- custom_materials = AMMO_MATS_RIPPER
- advanced_print_req = TRUE
-
-
-/obj/projectile/bullet/c35sol/ripper
- name = ".35 Sol ripper bullet"
- damage = 15
-
- weak_against_armour = TRUE
-
- sharpness = SHARP_EDGED
-
- wound_bonus = 20
- bare_wound_bonus = 20
-
- embedding = list(
- embed_chance = 75,
- fall_chance = 3,
- jostle_chance = 4,
- ignore_throwspeed_threshold = TRUE,
- pain_stam_pct = 0.4,
- pain_mult = 5,
- jostle_pain_mult = 6,
- rip_time = 1 SECONDS,
- )
-
- embed_falloff_tile = -15
-
-
-/obj/item/ammo_box/c35sol/ripper
- name = "ammo box (.35 Sol Short ripper)"
- desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds. The purple stripe indicates this should hold hollowpoint-like ammunition."
-
- icon_state = "35box_shrapnel"
-
- ammo_type = /obj/item/ammo_casing/c35sol/ripper
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm
deleted file mode 100644
index 4cb969f7b65..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/rifle.dm
+++ /dev/null
@@ -1,195 +0,0 @@
-// .40 Sol Long
-// Rifle caliber caseless ammo that kills people good
-
-/obj/item/ammo_casing/c40sol
- name = ".40 Sol Long lethal bullet casing"
- desc = "A SolFed standard caseless lethal rifle round."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "40sol"
-
- caliber = CALIBER_SOL40LONG
- projectile_type = /obj/projectile/bullet/c40sol
-
-
-/obj/item/ammo_casing/c40sol/Initialize(mapload)
- . = ..()
-
- AddElement(/datum/element/caseless)
-
-
-/obj/projectile/bullet/c40sol
- name = ".40 Sol Long bullet"
- damage = 35
-
- wound_bonus = 10
- bare_wound_bonus = 20
-
-
-/obj/item/ammo_box/c40sol
- name = "ammo box (.40 Sol Long lethal)"
- desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "40box"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_NORMAL
-
- caliber = CALIBER_SOL40LONG
- ammo_type = /obj/item/ammo_casing/c40sol
- max_ammo = 30
-
-
-// .40 Sol fragmentation rounds, embeds shrapnel in the target almost every time at close to medium range. Teeeechnically less lethals.
-
-/obj/item/ammo_casing/c40sol/fragmentation
- name = ".40 Sol Long fragmentation bullet casing"
- desc = "A SolFed standard caseless fragmentation rifle round. Shatters upon impact, ejecting sharp shrapnel that can potentially incapacitate targets."
-
- icon_state = "40sol_disabler"
-
- projectile_type = /obj/projectile/bullet/c40sol/fragmentation
-
- advanced_print_req = TRUE
-
- harmful = FALSE
-
-
-/obj/projectile/bullet/c40sol/fragmentation
- name = ".40 Sol Long fragmentation bullet"
- damage = 15
- stamina = 30
-
- weak_against_armour = TRUE
-
- sharpness = SHARP_EDGED
- wound_bonus = 0
- bare_wound_bonus = 10
-
- shrapnel_type = /obj/item/shrapnel/stingball
- embedding = list(
- embed_chance = 50,
- fall_chance = 5,
- jostle_chance = 5,
- ignore_throwspeed_threshold = TRUE,
- pain_stam_pct = 0.4,
- pain_mult = 2,
- jostle_pain_mult = 3,
- rip_time = 0.5 SECONDS,
- )
-
- embed_falloff_tile = -5
-
-
-/obj/item/ammo_box/c40sol/fragmentation
- name = "ammo box (.40 Sol Long fragmentation)"
- desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The blue stripe indicates this should hold less lethal ammunition."
-
- icon_state = "40box_disabler"
-
- ammo_type = /obj/item/ammo_casing/c40sol/fragmentation
-
-
-// .40 Sol match grade, bounces a lot, and if there's less than 20 bullet armor on wherever these hit, it'll go completely through the target and out the other side
-
-/obj/item/ammo_casing/c40sol/pierce
- name = ".40 Sol Long match bullet casing"
- desc = "A SolFed standard caseless match grade rifle round. Fires at a higher pressure and thus fires slightly faster projectiles. \
- Rumors say you can do sick ass wall bounce trick shots with these, though the official suggestion is to just shoot your target and \
- not the wall next to them."
-
- icon_state = "40sol_pierce"
-
- projectile_type = /obj/projectile/bullet/c40sol/pierce
-
- custom_materials = AMMO_MATS_AP
- advanced_print_req = TRUE
-
-
-/obj/projectile/bullet/c40sol/pierce
- name = ".40 Sol match bullet"
-
- icon_state = "gaussphase"
-
- speed = 0.5
-
- damage = 25
- armour_penetration = 20
-
- wound_bonus = -30
- bare_wound_bonus = -10
-
- ricochets_max = 2
- ricochet_chance = 80
- ricochet_auto_aim_range = 4
- ricochet_incidence_leeway = 65
-
- projectile_piercing = PASSMOB
-
-
-/obj/projectile/bullet/c40sol/pierce/on_hit(atom/target, blocked = 0, pierce_hit)
- if(isliving(target))
- var/mob/living/poor_sap = target
-
- // If the target mob has enough armor to stop the bullet, or the bullet has already gone through two people, stop it on this hit
- if((poor_sap.run_armor_check(def_zone, BULLET, "", "", silent = TRUE) > 20) || (pierces > 2))
- projectile_piercing = NONE
-
- if(damage > 10) // Lets just be safe with this one
- damage -= 5
- armour_penetration -= 10
-
- return ..()
-
-
-/obj/item/ammo_box/c40sol/pierce
- name = "ammo box (.40 Sol Long match)"
- desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The yellow stripe indicates this should hold high performance ammuniton."
-
- icon_state = "40box_pierce"
-
- ammo_type = /obj/item/ammo_casing/c40sol/pierce
-
-
-// .40 Sol incendiary
-
-/obj/item/ammo_casing/c40sol/incendiary
- name = ".40 Sol Long incendiary bullet casing"
- desc = "A SolFed standard caseless incendiary rifle round. Leaves no flaming trail, only igniting targets on impact."
-
- icon_state = "40sol_flame"
-
- projectile_type = /obj/projectile/bullet/c40sol/incendiary
-
- custom_materials = AMMO_MATS_TEMP
- advanced_print_req = TRUE
-
-
-/obj/projectile/bullet/c40sol/incendiary
- name = ".40 Sol Long incendiary bullet"
- icon_state = "redtrac"
-
- damage = 25
-
- /// How many firestacks the bullet should impart upon a target when impacting
- var/firestacks_to_give = 1
-
-
-/obj/projectile/bullet/c40sol/incendiary/on_hit(atom/target, blocked = 0, pierce_hit)
- . = ..()
-
- if(iscarbon(target))
- var/mob/living/carbon/gaslighter = target
- gaslighter.adjust_fire_stacks(firestacks_to_give)
- gaslighter.ignite_mob()
-
-
-/obj/item/ammo_box/c40sol/incendiary
- name = "ammo box (.40 Sol Long incendiary)"
- desc = "A box of .40 Sol Long rifle rounds, holds thirty bullets. The orange stripe indicates this should hold incendiary ammunition."
-
- icon_state = "40box_flame"
-
- ammo_type = /obj/item/ammo_casing/c40sol/incendiary
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm
deleted file mode 100644
index 030d17d0c43..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/gunsets.dm
+++ /dev/null
@@ -1,85 +0,0 @@
-// Base yellow carwo case
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case
- desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi'
- icon_state = "case_carwo"
-
- worn_icon_state = "yellowcase"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi'
- inhand_icon_state = "yellowcase"
-
-// Empty version of the case
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/empty/PopulateContents()
- return
-
-// Sindano in a box, how innovative!
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano
- name = "\improper Carwo 'Sindano' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/no_mag
- extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol/stendo
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/PopulateContents()
- new weapon_to_spawn (src)
-
- generate_items_inside(list(
- /obj/item/ammo_box/c35sol/incapacitator = 1,
- /obj/item/ammo_box/c35sol = 1,
- /obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty = 1,
- /obj/item/ammo_box/magazine/c35sol_pistol/starts_empty = 2,
- ), src)
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/sindano/evil
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag
-
-// Boxed grenade launcher, grenades sold seperately on this one
-
-/obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless
- name = "\improper Carwo 'Kiboko' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/sol_grenade_launcher/no_mag
- extra_to_spawn = /obj/item/ammo_box/magazine/c980_grenade/starts_empty
-
-
-/obj/structure/closet/secure_closet/armory_kiboko
- name = "heavy equipment locker"
- req_access = list(ACCESS_ARMORY)
- icon_state = "shotguncase"
-
-/obj/structure/closet/secure_closet/armory_kiboko/PopulateContents()
- . = ..()
-
- generate_items_inside(list(
- /obj/item/storage/toolbox/guncase/skyrat/carwo_large_case/kiboko_magless = 1,
- /obj/item/ammo_box/c980grenade = 2,
- /obj/item/ammo_box/c980grenade/smoke = 1,
- /obj/item/ammo_box/c980grenade/riot = 1,
- ), src)
-
-/obj/structure/closet/secure_closet/armory_kiboko_but_evil
- name = "heavy equipment locker"
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
- icon_door = "riot"
- icon_state = "riot"
- req_access = list(ACCESS_SYNDICATE)
- anchored = 1
-
-/obj/structure/closet/secure_closet/armory_kiboko_but_evil/PopulateContents()
- . = ..()
-
- generate_items_inside(list(
- /obj/item/gun/ballistic/automatic/sol_grenade_launcher/evil/no_mag = 1,
- /obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty = 2,
- /obj/item/ammo_box/c980grenade/shrapnel = 1,
- /obj/item/ammo_box/c980grenade/shrapnel/phosphor = 1,
- /obj/item/ammo_box/c980grenade/smoke = 1,
- /obj/item/ammo_box/c980grenade/riot = 1,
- ), src)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm
deleted file mode 100644
index 0734cb89258..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/magazines.dm
+++ /dev/null
@@ -1,113 +0,0 @@
-// .35 Sol pistol magazines
-
-/obj/item/ammo_box/magazine/c35sol_pistol
- name = "\improper Sol pistol magazine"
- desc = "A standard size magazine for SolFed pistols, holds twelve rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "pistol_35_standard"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_TINY
-
- ammo_type = /obj/item/ammo_casing/c35sol
- caliber = CALIBER_SOL35SHORT
- max_ammo = 12
-
-/obj/item/ammo_box/magazine/c35sol_pistol/starts_empty
- start_empty = TRUE
-
-/obj/item/ammo_box/magazine/c35sol_pistol/stendo
- name = "\improper Sol extended pistol magazine"
- desc = "An extended magazine for SolFed pistols, holds twenty-four rounds."
-
- icon_state = "pistol_35_stended"
-
- w_class = WEIGHT_CLASS_NORMAL
-
- max_ammo = 24
-
-/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty
- start_empty = TRUE
-
-// .40 Sol rifle magazines
-
-/obj/item/ammo_box/magazine/c40sol_rifle
- name = "\improper Sol rifle short magazine"
- desc = "A shortened magazine for SolFed rifles, holds fifteen rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "rifle_short"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_TINY
-
- ammo_type = /obj/item/ammo_casing/c40sol
- caliber = CALIBER_SOL40LONG
- max_ammo = 15
-
-/obj/item/ammo_box/magazine/c40sol_rifle/starts_empty
-
- start_empty = TRUE
-
-/obj/item/ammo_box/magazine/c40sol_rifle/standard
- name = "\improper Sol rifle magazine"
- desc = "A standard size magazine for SolFed rifles, holds thirty rounds."
-
- icon_state = "rifle_standard"
-
- w_class = WEIGHT_CLASS_SMALL
-
- max_ammo = 30
-
-/obj/item/ammo_box/magazine/c40sol_rifle/standard/starts_empty
- start_empty = TRUE
-
-
-/obj/item/ammo_box/magazine/c40sol_rifle/drum
- name = "\improper Sol rifle drum magazine"
- desc = "A massive drum magazine for SolFed rifles, holds sixty rounds."
-
- icon_state = "rifle_drum"
-
- w_class = WEIGHT_CLASS_BULKY
-
- max_ammo = 60
-
-/obj/item/ammo_box/magazine/c40sol_rifle/drum/starts_empty
- start_empty = TRUE
-
-// .980 grenade magazines
-
-/obj/item/ammo_box/magazine/c980_grenade
- name = "\improper Kiboko grenade box"
- desc = "A standard size box for .980 grenades, holds four shells."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
- icon_state = "granata_standard"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_SMALL
-
- ammo_type = /obj/item/ammo_casing/c980grenade
- caliber = CALIBER_980TYDHOUER
- max_ammo = 4
-
-/obj/item/ammo_box/magazine/c980_grenade/starts_empty
- start_empty = TRUE
-
-/obj/item/ammo_box/magazine/c980_grenade/drum
- name = "\improper Kiboko grenade drum"
- desc = "A drum for .980 grenades, holds six shells."
-
- icon_state = "granata_drum"
-
- w_class = WEIGHT_CLASS_NORMAL
-
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty
- start_empty = TRUE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm
deleted file mode 100644
index fbf5f38b6cf..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/rifle.dm
+++ /dev/null
@@ -1,160 +0,0 @@
-// Base Sol rifle
-
-/obj/item/gun/ballistic/automatic/sol_rifle
- name = "\improper Carwo-Cawil Battle Rifle"
- desc = "A heavy battle rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
- icon_state = "infanterie"
-
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
- worn_icon_state = "infanterie"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
- inhand_icon_state = "infanterie"
-
- SET_BASE_PIXEL(-8, 0)
-
- special_mags = TRUE
-
- bolt_type = BOLT_TYPE_LOCKING
-
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle
- spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/standard
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/rifle_heavy.ogg'
- suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_rifle.ogg'
- can_suppress = TRUE
-
- can_bayonet = FALSE
-
- suppressor_x_offset = 12
-
- burst_size = 1
- fire_delay = 0.45 SECONDS
- actions_types = list()
-
- spread = 7.5
- projectile_wound_bonus = -10
-
-/obj/item/gun/ballistic/automatic/sol_rifle/Initialize(mapload)
- . = ..()
-
- give_autofire()
-
-/// Separate proc for handling auto fire just because one of these subtypes isn't otomatica
-/obj/item/gun/ballistic/automatic/sol_rifle/proc/give_autofire()
- AddComponent(/datum/component/automatic_fire, fire_delay)
-
-/obj/item/gun/ballistic/automatic/sol_rifle/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
-
-/obj/item/gun/ballistic/automatic/sol_rifle/examine_more(mob/user)
- . = ..()
-
- . += "The Carwo-Cawil rifles are built by Carwo for \
- use by SolFed's various infantry branches. Following the rather reasonable \
- military requirements of using the same few cartridges and magazines, \
- the lifespans of logistics coordinators and quartermasters everywhere \
- were lengthened by several years. While typically only for military sale \
- in the past, the recent collapse of certain unnamed weapons manufacturers \
- has caused Carwo to open many of its military weapons to civilian sale, \
- which includes this one."
-
- return .
-
-/obj/item/gun/ballistic/automatic/sol_rifle/no_mag
- spawnwithmagazine = FALSE
-
-// Sol marksman rifle
-
-/obj/item/gun/ballistic/automatic/sol_rifle/marksman
- name = "\improper Cawil Marksman Rifle"
- desc = "A heavy marksman rifle commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
-
- icon_state = "elite"
- worn_icon_state = "elite"
- inhand_icon_state = "elite"
-
- spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle
-
- fire_delay = 0.75 SECONDS
-
- spread = 0
- projectile_damage_multiplier = 1.2
- projectile_wound_bonus = 10
-
-/obj/item/gun/ballistic/automatic/sol_rifle/marksman/Initialize(mapload)
- . = ..()
-
- AddComponent(/datum/component/scope, range_modifier = 2)
-
-/obj/item/gun/ballistic/automatic/sol_rifle/marksman/give_autofire()
- return
-
-/obj/item/gun/ballistic/automatic/sol_rifle/marksman/examine_more(mob/user)
- . = ..()
-
- . += "This particlar variant is a marksman rifle. \
- Automatic fire was forsaken for a semi-automatic setup, a more fitting \
- stock, and more often than not a scope. Typically also seen with smaller \
- magazines for convenience for the shooter, but as with any other Sol \
- rifle, all standard magazine types will work."
-
- return .
-
-/obj/item/gun/ballistic/automatic/sol_rifle/marksman/no_mag
- spawnwithmagazine = FALSE
-
-// Machinegun based on the base Sol rifle
-
-/obj/item/gun/ballistic/automatic/sol_rifle/machinegun
- name = "\improper Qarad Light Machinegun"
- desc = "A hefty machinegun commonly seen in the hands of SolFed military types. Accepts any standard SolFed rifle magazine."
-
- icon_state = "outomaties"
- worn_icon_state = "outomaties"
- inhand_icon_state = "outomaties"
-
- bolt_type = BOLT_TYPE_OPEN
-
- spawn_magazine_type = /obj/item/ammo_box/magazine/c40sol_rifle/drum
-
- fire_delay = 0.1 SECONDS
-
- recoil = 1
- spread = 12.5
- projectile_wound_bonus = -20
-
-/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/examine_more(mob/user)
- . = ..()
-
- . += "The 'Qarad' variant of the rifle, what you are looking at now, \
- is a modification to turn the weapon into a passable, if sub-optimal \
- light machinegun. To support the machinegun role, the internals were \
- converted to make the gun into an open bolt, faster firing machine. These \
- additions, combined with a battle rifle not meant to be used fully auto \
- much to begin with, made for a relatively unwieldy weapon. A machinegun, \
- however, is still a machinegun, no matter how hard it is to keep on target."
-
- return .
-
-/obj/item/gun/ballistic/automatic/sol_rifle/machinegun/no_mag
- spawnwithmagazine = FALSE
-
-// Evil version of the rifle (nothing different its just black)
-
-/obj/item/gun/ballistic/automatic/sol_rifle/evil
- desc = "A heavy battle rifle, this one seems to be painted tacticool black. Accepts any standard SolFed rifle magazine."
-
- icon_state = "infanterie_evil"
- worn_icon_state = "infanterie_evil"
- inhand_icon_state = "infanterie_evil"
-
-/obj/item/gun/ballistic/automatic/sol_rifle/evil/no_mag
- spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm
deleted file mode 100644
index af5f6131d88..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/shotgun.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-// SolFed shotgun (this was gonna be in a proprietary shotgun shell type outside of 12ga at some point, wild right?)
-
-/obj/item/gun/ballistic/shotgun/riot/sol
- name = "\improper Carwo 'Renoster' Shotgun"
- desc = "A twelve gauge shotgun with a six shell capacity underneath. Made for and used by SolFed's various military branches."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns48x.dmi'
- icon_state = "renoster"
-
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_worn.dmi'
- worn_icon_state = "renoster"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
- inhand_icon_state = "renoster"
-
- inhand_x_dimension = 32
- inhand_y_dimension = 32
-
- SET_BASE_PIXEL(-8, 0)
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/shotgun_heavy.ogg'
- rack_sound = 'modular_skyrat/modules/modular_weapons/sounds/shotgun_rack.ogg'
- suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg'
- can_suppress = TRUE
-
- suppressor_x_offset = 9
-
- w_class = WEIGHT_CLASS_BULKY
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
-
-/obj/item/gun/ballistic/shotgun/riot/sol/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
-
-/obj/item/gun/ballistic/shotgun/riot/sol/examine_more(mob/user)
- . = ..()
-
- . += "The Renoster was designed at its core as a police shotgun. \
- As consequence, it holds all the qualities a police force would want \
- in one. Large shell capacity, sturdy frame, while holding enough \
- capacity for modification to satiate even the most overfunded of \
- peacekeeper forces. Inevitably, the weapon made its way into civilian \
- markets alongside its sale to several military branches that also \
- saw value in having a heavy shotgun."
-
- return .
-
-/obj/item/gun/ballistic/shotgun/riot/sol/update_appearance(updates)
- if(sawn_off)
- suppressor_x_offset = 0
- SET_BASE_PIXEL(0, 0)
-
- . = ..()
-
-// Shotgun but EVIL!
-
-/obj/item/gun/ballistic/shotgun/riot/sol/evil
- desc = "A twleve guage shotgun with an eight shell capacity underneath. This one is painted in a tacticool black."
-
- icon_state = "renoster_evil"
- worn_icon_state = "renoster_evil"
- inhand_icon_state = "renoster_evil"
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm
deleted file mode 100644
index ab36648abe5..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/submachinegun.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-// Base Sol SMG
-
-/obj/item/gun/ballistic/automatic/sol_smg
- name = "\improper Carwo 'Sindano' Submachinegun"
- desc = "A small submachinegun commonly seen in the hands of PMCs and other unsavory corpos. Accepts any standard Sol pistol magazine."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/guns32x.dmi'
- icon_state = "sindano"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/carwo_defense_systems/guns_righthand.dmi'
- inhand_icon_state = "sindano"
-
- special_mags = TRUE
-
- bolt_type = BOLT_TYPE_OPEN
-
- w_class = WEIGHT_CLASS_NORMAL
- weapon_weight = WEAPON_MEDIUM
- slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol
- spawn_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol/stendo
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg'
- can_suppress = TRUE
-
- can_bayonet = FALSE
-
- suppressor_x_offset = 11
-
- burst_size = 3
- fire_delay = 0.2 SECONDS
-
- spread = 7.5
-
-/obj/item/gun/ballistic/automatic/sol_smg/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_CARWO)
-
-/obj/item/gun/ballistic/automatic/sol_smg/examine_more(mob/user)
- . = ..()
-
- . += "The Sindano submachinegun was originally produced for military contract. \
- These guns were seen in the hands of anyone from medics, ship techs, logistics officers, \
- and shuttle pilots often had several just to show off. Due to SolFed's quest to \
- extend the lifespans of their logistics officers and quartermasters, the weapon \
- uses the same standard pistol cartridge that most other miltiary weapons of \
- small caliber use. This results in interchangeable magazines between pistols \
- and submachineguns, neat!"
-
- return .
-
-/obj/item/gun/ballistic/automatic/sol_smg/no_mag
- spawnwithmagazine = FALSE
-
-// Sindano (evil)
-
-/obj/item/gun/ballistic/automatic/sol_smg/evil
- desc = "A small submachinegun, this one is painted in tacticool black. Accepts any standard Sol pistol magazine."
-
- icon_state = "sindano_evil"
- inhand_icon_state = "sindano_evil"
-
-/obj/item/gun/ballistic/automatic/sol_smg/evil/no_mag
- spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm
deleted file mode 100644
index d16012bcd47..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/pistol.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-// .27-54 Cesarzowa
-// Small caliber pistol round meant to be fired out of something that shoots real quick like
-
-/obj/item/ammo_casing/c27_54cesarzowa
- name = ".27-54 Cesarzowa piercing bullet casing"
- desc = "A purple-bodied caseless cartridge home to a small projectile with a fine point."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "27-54cesarzowa"
-
- caliber = CALIBER_CESARZOWA
- projectile_type = /obj/projectile/bullet/c27_54cesarzowa
-
-/obj/item/ammo_casing/c27_54cesarzowa/Initialize(mapload)
- . = ..()
-
- AddElement(/datum/element/caseless)
-
-/obj/projectile/bullet/c27_54cesarzowa
- name = ".27-54 Cesarzowa piercing bullet"
- damage = 15
- armour_penetration = 30
- wound_bonus = -30
- bare_wound_bonus = -10
-
-/obj/item/ammo_box/c27_54cesarzowa
- name = "ammo box (.27-54 Cesarzowa piercing)"
- desc = "A box of .27-54 Cesarzowa piercing pistol rounds, holds eighteen cartridges."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "27-54cesarzowa_box"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_NORMAL
-
- caliber = CALIBER_CESARZOWA
- ammo_type = /obj/item/ammo_casing/c27_54cesarzowa
- max_ammo = 18
-
-// .27-54 Cesarzowa rubber
-// Small caliber pistol round meant to be fired out of something that shoots real quick like, this one is less lethal
-
-/obj/item/ammo_casing/c27_54cesarzowa/rubber
- name = ".27-54 Cesarzowa rubber bullet casing"
- desc = "A purple-bodied caseless cartridge home to a small projectile with a flat rubber tip."
-
- icon_state = "27-54cesarzowa_rubber"
-
- projectile_type = /obj/projectile/bullet/c27_54cesarzowa/rubber
-
-/obj/projectile/bullet/c27_54cesarzowa/rubber
- name = ".27-54 Cesarzowa rubber bullet"
- stamina = 20
- damage = 10
- weak_against_armour = TRUE
- wound_bonus = -30
- bare_wound_bonus = -10
-
-/obj/item/ammo_box/c27_54cesarzowa/rubber
- name = "ammo box (.27-54 Cesarzowa rubber)"
- desc = "A box of .27-54 Cesarzowa rubber pistol rounds, holds eighteen cartridges."
-
- icon_state = "27-54cesarzowa_box_rubber"
-
- ammo_type = /obj/item/ammo_casing/c27_54cesarzowa/rubber
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm
deleted file mode 100644
index 562734bbfee..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-// Various ammo boxes for .310
-
-/obj/item/ammo_box/c310_cargo_box
- name = "ammo box (.310 Strilka lethal)"
- desc = "A box of .310 Strilka lethal rifle rounds, holds ten cartridges."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "310_box"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_NORMAL
-
- caliber = CALIBER_STRILKA310
- ammo_type = /obj/item/ammo_casing/strilka310
- max_ammo = 10
-
-// Rubber
-
-/obj/item/ammo_box/c310_cargo_box/rubber
- name = "ammo box (.310 Strilka rubber)"
- desc = "A box of .310 Strilka rubber rifle rounds, holds ten cartridges."
-
- icon_state = "310_box_rubber"
-
- ammo_type = /obj/item/ammo_casing/strilka310/rubber
-
-// AP
-
-/obj/item/ammo_box/c310_cargo_box/piercing
- name = "ammo box (.310 Strilka piercing)"
- desc = "A box of .310 Strilka piercing rifle rounds, holds ten cartridges."
-
- icon_state = "310_box_ap"
-
- ammo_type = /obj/item/ammo_casing/strilka310/ap
-
-// AMR bullet
-
-/obj/item/ammo_casing/p60strela
- name = ".60 Strela caseless cartridge"
- desc = "A massive block of plasma-purple propellant with an equally massive round sticking out the top of it. \
- While good at killing a man, you'll find most effective use out of destroying things with it."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "amr_bullet"
- caliber = CALIBER_60STRELA
- projectile_type = /obj/projectile/bullet/p60strela
-
-/obj/item/ammo_casing/p60strela/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/caseless)
-
-/obj/projectile/bullet/p60strela // The funny thing is, these are wild but you only get three of them a magazine
- name =".60 Strela bullet"
- icon_state = "gaussphase"
- speed = 0.4
- damage = 50
- armour_penetration = 50
- wound_bonus = 20
- bare_wound_bonus = 30
- demolition_mod = 1.8
- /// How much damage we add to things that are weak to this bullet
- var/anti_materiel_damage_addition = 30
-
-/obj/projectile/bullet/p60strela/Initialize(mapload)
- . = ..()
- // We do 80 total damage to anything robotic, namely borgs, and robotic simplemobs
- AddElement(/datum/element/bane, target_type = /mob/living, mob_biotypes = MOB_ROBOTIC, damage_multiplier = 0, added_damage = anti_materiel_damage_addition)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm
deleted file mode 100644
index 9b93f9de9fc..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/magazines.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-// .310 magazine for the Lanca rifle
-
-/obj/item/ammo_box/magazine/lanca
- name = "\improper Lanca rifle magazine"
- desc = "A standard size magazine for Lanca rifles, holds five rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "lanca_mag"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- ammo_type = /obj/item/ammo_casing/strilka310
- caliber = CALIBER_STRILKA310
- max_ammo = 5
-
-/obj/item/ammo_box/magazine/lanca/spawns_empty
- start_empty = TRUE
-
-// Magazine for the Miecz submachinegun
-
-/obj/item/ammo_box/magazine/miecz
- name = "\improper Miecz submachinegun magazine"
- desc = "A standard size magazine for Miecz submachineguns, holds eighteen rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "miecz_mag"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- ammo_type = /obj/item/ammo_casing/c27_54cesarzowa
- caliber = CALIBER_CESARZOWA
- max_ammo = 18
-
-/obj/item/ammo_box/magazine/miecz/spawns_empty
- start_empty = TRUE
-
-// Plasma thrower 'magazine'
-
-/obj/item/ammo_box/magazine/recharge/plasma_battery
- name = "plasma power pack"
- desc = "A rechargeable, detachable battery that serves as a power source for plasma projectors."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- base_icon_state = "plasma_battery"
- icon_state = "plasma_battery"
- multiple_sprites = AMMO_BOX_FULL_EMPTY
- ammo_type = /obj/item/ammo_casing/energy/laser/plasma_glob
- caliber = CALIBER_LASER
- max_ammo = 15
-
-/obj/item/ammo_box/magazine/recharge/plasma_battery/update_icon_state() // FUCK YOU /OBJ/ITEM/AMMO_BOX/MAGAZINE/RECHARGE
- . = ..()
- icon_state = base_icon_state
-
-// Shotgun revolver's cylinder
-
-/obj/item/ammo_box/magazine/internal/cylinder/rev12ga
- name = "\improper 12 GA revolver cylinder"
- ammo_type = /obj/item/ammo_casing/shotgun
- caliber = CALIBER_SHOTGUN
- max_ammo = 4
- multiload = FALSE
-
-// AMR magazine
-
-/obj/item/ammo_box/magazine/wylom
- name = "anti-materiel magazine (.60 Strela)"
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/ammo.dmi'
- icon_state = "wylom_mag"
- base_icon_state = "wylom_mag"
- multiple_sprites = AMMO_BOX_FULL_EMPTY
- ammo_type = /obj/item/ammo_casing/p60strela
- max_ammo = 3
- caliber = CALIBER_60STRELA
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm
deleted file mode 100644
index c185834aea8..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm
+++ /dev/null
@@ -1,116 +0,0 @@
-// Plasma spewing pistol
-// Sprays a wall of plasma that sucks against armor but fucks against unarmored targets
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_thrower
- name = "\improper Szot 'Słońce' plasma projector"
- desc = "An outdated sidearm rarely seen in use by some members of the CIN. Spews an inaccurate stream of searing plasma out the magnetic barrel so long as it has power and the trigger is pulled."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
- icon_state = "slonce"
-
- fire_sound = 'modular_skyrat/modules/microfusion/sound/incinerate.ogg'
- fire_sound_volume = 40 // This thing is comically loud otherwise
-
- w_class = WEIGHT_CLASS_NORMAL
- accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery
- can_suppress = FALSE
- show_bolt_icon = FALSE
- casing_ejector = FALSE
- empty_indicator = FALSE
- bolt_type = BOLT_TYPE_OPEN
- fire_delay = 0.1 SECONDS
- spread = 15
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/Initialize(mapload)
- . = ..()
-
- AddComponent(/datum/component/automatic_fire, autofire_shot_delay = fire_delay)
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_thrower/examine_more(mob/user)
- . = ..()
-
- . += "The 'Słońce' started life as an experiment in advancing the field of accelerated \
- plasma weaponry. Despite the design's obvious shortcomings in terms of accuracy and \
- range, the CIN combined military command (which we'll call the CMC from now on) took \
- interest in the weapon as a means to counter Sol's more advanced armor technology. \
- As it would turn out, the plasma globules created by the weapon were really not \
- as effective against armor as the CMC had hoped, quite the opposite actually. \
- What the plasma did do well however was inflict grevious burns upon anyone unfortunate \
- enough to get hit by it unprotected. For this reason, the 'Słońce' saw frequent use by \
- army officers and ship crews who needed a backup weapon to incinerate the odd space \
- pirate or prisoner of war."
-
- return .
-
-// Plasma sharpshooter pistol
-// Shoots single, strong plasma blasts at a slow rate
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_marksman
- name = "\improper Szot 'Gwiazda' plasma sharpshooter"
- desc = "An outdated sidearm rarely seen in use by some members of the CIN. Fires relatively accurate globs of searing plasma."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
- icon_state = "gwiazda"
-
- fire_sound = 'modular_skyrat/modules/microfusion/sound/burn.ogg'
- fire_sound_volume = 40 // This thing is comically loud otherwise
-
- w_class = WEIGHT_CLASS_NORMAL
- accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/plasma_battery
- can_suppress = FALSE
- show_bolt_icon = FALSE
- casing_ejector = FALSE
- empty_indicator = FALSE
- bolt_type = BOLT_TYPE_OPEN
- fire_delay = 0.6 SECONDS
- spread = 2.5
-
- projectile_damage_multiplier = 3 // 30 damage a shot
- projectile_wound_bonus = 10 // +55 of the base projectile, burn baby burn
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/automatic/pistol/plasma_marksman/examine_more(mob/user)
- . = ..()
-
- . += "The 'Gwiazda' is a further refinement of the 'Słońce' design. with improved \
- energy cycling, magnetic launchers built to higher precision, and an overall more \
- ergonomic design. While it still fails to perform against armor, the weapon is \
- significantly more accurate and higher power, at expense of a much lower firerate. \
- Opinions on this weapon within military service were highly mixed, with many preferring \
- the sheer stopping power a spray of plasma could produce, with others loving the new ability \
- to hit something in front of you for once."
-
- return .
-
-// A revolver, but it can hold shotgun shells
-// Woe, buckshot be upon ye
-
-/obj/item/gun/ballistic/revolver/shotgun_revolver
- name = "\improper Szot 'Bóbr' 12 GA revolver"
- desc = "An outdated sidearm rarely seen in use by some members of the CIN. A revolver type design with a four shell cylinder. That's right, shell, this one shoots twelve guage."
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder/rev12ga
- recoil = SAWN_OFF_RECOIL
- weapon_weight = WEAPON_MEDIUM
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi'
- icon_state = "bobr"
- fire_sound = 'modular_skyrat/modules/sec_haul/sound/revolver_fire.ogg'
- spread = SAWN_OFF_ACC_PENALTY
-
-/obj/item/gun/ballistic/revolver/shotgun_revolver/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/revolver/shotgun_revolver/examine_more(mob/user)
- . = ..()
-
- . += "The 'Bóbr' started development as a limited run sporting weapon before \
- the military took interest. The market quickly changed from sport shooting \
- targets, to sport shooting SolFed strike teams once the conflict broke out. \
- This pattern is different from the original civilian version, with a military \
- standard pistol grip and weather resistant finish. While the 'Bóbr' was not \
- a weapon standard issued to every CIN soldier, it was available for relatively \
- cheap, and thus became rather popular among the ranks."
-
- return .
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm
deleted file mode 100644
index f3b16e9ed51..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/rifle.dm
+++ /dev/null
@@ -1,125 +0,0 @@
-// Semi-automatic rifle firing .310 with reduced damage compared to a Sakhno
-
-/obj/item/gun/ballistic/automatic/lanca
- name = "\improper Szot 'Lanca' Battle Rifle"
- desc = "A relatively compact, long barreled bullpup battle rifle chambered for .310 Strilka. Has an integrated sight with \
- a surprisingly functional amount of magnification, given its place of origin."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi'
- icon_state = "lanca"
-
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi'
- worn_icon_state = "lanca"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_righthand.dmi'
- inhand_icon_state = "lanca"
-
- SET_BASE_PIXEL(-8, 0)
-
- special_mags = FALSE
-
- bolt_type = BOLT_TYPE_STANDARD
-
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_OCLOTHING
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/lanca
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/battle_rifle.ogg'
- suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg'
- can_suppress = TRUE
- suppressor_x_offset = 0
- suppressor_y_offset = 0
-
- can_bayonet = FALSE
-
- burst_size = 1
- fire_delay = 1.2 SECONDS
- actions_types = list()
-
- recoil = 0.5
- spread = 2.5
- projectile_wound_bonus = -20
-
-/obj/item/gun/ballistic/automatic/lanca/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/scope, range_modifier = 1.5)
-
-/obj/item/gun/ballistic/automatic/lanca/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/automatic/lanca/examine_more(mob/user)
- . = ..()
-
- . += "The Lanca is a now relatively dated replacement for Kalashnikov pattern rifles \
- adopted by states now combining to form the CIN. While the rifle that came before them \
- had its benefits, leadership of many armies started to realize that the Kalashnikov-based \
- rifles were really showing their age once the variants began reaching the thousands in serial. \
- The solution was presented by a then new company, Szot Dynamica. This new rifle, not too \
- unlike the one you are seeing now, adopted all of the latest technology of the time. Lightweight \
- caseless ammunition, well known for its use in Sakhno rifles, as well as various electronics and \
- other incredible technological advancements. These advancements may have already been around since \
- before the creation of even the Sakhno, but the fact you're seeing this now fifty year old design \
- must mean something, right?"
-
- return .
-
-/obj/item/gun/ballistic/automatic/lanca/no_mag
- spawnwithmagazine = FALSE
-
-// The AMR
-// This sounds a lot scarier than it actually is, you'll just have to trust me here
-
-/obj/item/gun/ballistic/automatic/wylom
- name = "\improper Szot 'Wyłom' AMR"
- desc = "A massive, outdated beast of an anti materiel rifle that was once in use by CIN military forces. Fires the devastating .60 Strela caseless round, \
- the massively overperforming penetration of which being the reason this weapon was discontinued."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_64.dmi'
- base_pixel_x = -16 // This baby is 64 pixels wide
- pixel_x = -16
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_left.dmi'
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/inhands_64_right.dmi'
- inhand_x_dimension = 64
- inhand_y_dimension = 64
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/szot_dynamica/guns_worn.dmi'
- icon_state = "wylom"
- inhand_icon_state = "wylom"
- worn_icon_state = "wylom"
- w_class = WEIGHT_CLASS_HUGE
- slot_flags = ITEM_SLOT_BACK
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/wylom
- can_suppress = FALSE
- can_bayonet = FALSE
-
- fire_sound = 'modular_skyrat/modules/novaya_ert/sound/amr_fire.ogg'
- fire_sound_volume = 100 // BOOM BABY
-
- recoil = 4
-
- weapon_weight = WEAPON_HEAVY
- burst_size = 1
- fire_delay = 2 SECONDS
- actions_types = list()
-
- force = 15 // I mean if you're gonna beat someone with the thing you might as well get damage appropriate for how big the fukken thing is
-
-/obj/item/gun/ballistic/automatic/wylom/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/automatic/wylom/examine_more(mob/user)
- . = ..()
-
- . += "The 'Wyłom' AMR was a weapon not originally made for unaided human hands. \
- The original rifle had mounting points for a specialized suit attachment system, \
- not too much unlike heavy smartguns that can be seen across the galaxy. CIN military \
- command, however, deemed that expensive exoskeletons and rigs for carrying an organic \
- anti material system were simply not needed, and that soldiers should simply 'deal with it'. \
- Unsurprisingly, soldiers assigned this weapon tend to not be a massive fan of that fact, \
- and smekalka within CIN ranks is common with troops finding novel ways to carry and use \
- their large rifles with as little effort as possible. Most of these novel methods, of course, \
- tend to shatter when the rifle is actually fired."
-
- return .
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm
deleted file mode 100644
index 116c47ab3da..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/submachinegun.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-// Rapid firing submachinegun firing .27-54 Cesarzowa
-
-/obj/item/gun/ballistic/automatic/miecz
- name = "\improper Szot 'Miecz' Submachinegun"
- desc = "A short barrel, further compacted conversion of the 'Lanca' rifle to fire pistol caliber cartridges. \
- Due to the intended purpose of the weapon, and less than optimal ranged performance of the projectile, it has \
- nothing more than basic glow-sights as opposed to the ranged scope Lanca users might be used to."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_48.dmi'
- icon_state = "miecz"
-
- inhand_icon_state = "c20r"
- worn_icon_state = "gun"
-
- SET_BASE_PIXEL(-8, 0)
-
- special_mags = FALSE
-
- bolt_type = BOLT_TYPE_STANDARD
-
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_MEDIUM
- slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_OCLOTHING
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/miecz
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/smg_light.ogg'
- can_suppress = TRUE
- suppressor_x_offset = 0
- suppressor_y_offset = 0
-
- can_bayonet = FALSE
-
- burst_size = 1
- fire_delay = 0.2 SECONDS
- actions_types = list()
-
- spread = 5
-
-/obj/item/gun/ballistic/automatic/miecz/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/automatic_fire, fire_delay)
-
-/obj/item/gun/ballistic/automatic/miecz/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_SZOT)
-
-/obj/item/gun/ballistic/automatic/miecz/examine_more(mob/user)
- . = ..()
-
- . += "The Meicz is one of the newest weapons to come out of CIN member state hands and \
- into the wild, typically the frontier. It was built alongside the round it fires, the \
- .27-54 Cesarzawa pistol round. Based on the proven Lanca design, it seeks to bring that \
- same reliable weapon design into the factor of a submachinegun. While it is significantly \
- larger than many comparable weapons in SolFed use, it more than makes up for it with ease \
- of control and significant firerate."
-
- return .
-
-/obj/item/gun/ballistic/automatic/miecz/no_mag
- spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm
deleted file mode 100644
index f076b0d73b3..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/advert.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/structure/sign/poster/official/trappiste_suppressor
- name = "Keep It Quiet - Ear Protection Unneeded"
- desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, a \
- diagram of the average suppressor, and how on most* Trappiste weapons \
- the sound of firing will be low enough to eradicate the need for ear protection. \
- How safety minded, they even have a non-liability statement too."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi'
- icon_state = "keep_it_quiet"
-
-/obj/structure/sign/poster/official/trappiste_suppressor/examine_more(mob/user)
- . = ..()
-
- . += "It was hard to notice before, but now that you really look at it... \
- This thing is completely covered in micro scale text telling you in just about \
- every human language and then some that Trappiste isn't liable for ear damage \
- caused by their weapons, suppressed or not."
-
- return .
-
-MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_suppressor, 32)
-
-/obj/structure/sign/poster/official/trappiste_ammunition
- name = "Know Your Ammuniton Colors"
- desc = "This poster depicts, alongside the prominent logo of Trappiste Fabriek, \
- a variety of colors that one may find on .585 Trappiste rounds. \
- A plain white case usually means lethal, while a blue stripe is less-lethal \
- and a purple stripe is more lethal. How informative."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/propaganda.dmi'
- icon_state = "know_the_difference"
-
-/obj/structure/sign/poster/official/trappiste_ammunition/examine_more(mob/user)
- . = ..()
-
- . += "Small text details that this information may also be transferrable \
- to other types of SolFed ammunition, but that you should check the box \
- the bullets come in just to be sure. Trappiste is, of course,\
- not liable for excess harm caused by misreading color identification systems."
-
- return .
-
-MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/official/trappiste_ammunition, 32)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm
deleted file mode 100644
index 498f55a5627..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/ammo.dm
+++ /dev/null
@@ -1,91 +0,0 @@
-// .585 Trappiste
-// High caliber round used in large pistols and revolvers
-
-/obj/item/ammo_casing/c585trappiste
- name = ".585 Trappiste lethal bullet casing"
- desc = "A white polymer cased high caliber round commonly used in handguns."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
- icon_state = "585trappiste"
-
- caliber = CALIBER_585TRAPPISTE
- projectile_type = /obj/projectile/bullet/c585trappiste
-
-/obj/projectile/bullet/c585trappiste
- name = ".585 Trappiste bullet"
- damage = 45
- wound_bonus = 0 // Normal bullets are 20
-
-/obj/item/ammo_box/c585trappiste
- name = "ammo box (.585 Trappiste lethal)"
- desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
- icon_state = "585box"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_NORMAL
-
- caliber = CALIBER_585TRAPPISTE
- ammo_type = /obj/item/ammo_casing/c585trappiste
- max_ammo = 12
-
-// .585 Trappiste equivalent to a rubber bullet
-
-/obj/item/ammo_casing/c585trappiste/incapacitator
- name = ".585 Trappiste flathead bullet casing"
- desc = "A white polymer cased high caliber round with a relatively soft, flat tip. Designed to flatten against targets and usually not penetrate on impact."
-
- icon_state = "585trappiste_disabler"
-
- projectile_type = /obj/projectile/bullet/c585trappiste/incapacitator
- harmful = FALSE
-
-/obj/projectile/bullet/c585trappiste/incapacitator
- name = ".585 Trappiste flathead bullet"
- damage = 20
- stamina = 40
- wound_bonus = 10
-
- weak_against_armour = TRUE
-
- shrapnel_type = null
- sharpness = NONE
- embedding = null
-
-/obj/item/ammo_box/c585trappiste/incapacitator
- name = "ammo box (.585 Trappiste flathead)"
- desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The blue stripe indicates that it should hold less lethal rounds."
-
- icon_state = "585box_disabler"
-
- ammo_type = /obj/item/ammo_casing/c585trappiste/incapacitator
-
-// .585 hollowpoint, made to cause nasty wounds
-
-/obj/item/ammo_casing/c585trappiste/hollowpoint
- name = ".585 Trappiste hollowhead bullet casing"
- desc = "A white polymer cased high caliber round with a hollowed tip. Designed to cause as much damage on impact to fleshy targets as possible."
-
- icon_state = "585trappiste_shrapnel"
- projectile_type = /obj/projectile/bullet/c585trappiste/hollowpoint
-
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/c585trappiste/hollowpoint
- name = ".585 Trappiste hollowhead bullet"
- damage = 35
-
- weak_against_armour = TRUE
-
- wound_bonus = 30
- bare_wound_bonus = 40
-
-/obj/item/ammo_box/c585trappiste/hollowpoint
- name = "ammo box (.585 Trappiste hollowhead)"
- desc = "A box of .585 Trappiste pistol rounds, holds twelve cartridges. The purple stripe indicates that it should hold hollowpoint-like rounds."
-
- icon_state = "585box_shrapnel"
-
- ammo_type = /obj/item/ammo_casing/c585trappiste/hollowpoint
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm
deleted file mode 100644
index 8c96bc5a563..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/gunsets.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-// Base yellow with symbol trappiste case
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case
- desc = "A thick yellow gun case with foam inserts laid out to fit a weapon, magazines, and gear securely. The five square grid of Trappiste Fabriek is displayed prominently on the top."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi'
- icon_state = "case_trappiste"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/inhands/cases_righthand.dmi'
- inhand_icon_state = "yellowcase"
-
-// Empty version of the case
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/empty/PopulateContents()
- return
-
-// Gunset for the Wespe pistol
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/wespe
- name = "Trappiste 'Wespe' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/sol/no_mag
- extra_to_spawn = /obj/item/ammo_box/magazine/c35sol_pistol
-
-// Gunset for the Skild heavy pistol
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/skild
- name = "Trappiste 'Skild' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag
- extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol
-
-// Gunset for the Takbok Revolver
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/trappiste_small_case/takbok
- name = "Trappiste 'Takbok' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/revolver/takbok
- extra_to_spawn = /obj/item/ammo_box/c585trappiste
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm
deleted file mode 100644
index 77506ccd29f..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/magazines.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-// .585 pistol magazines
-
-/obj/item/ammo_box/magazine/c585trappiste_pistol
- name = "\improper Trappiste pistol magazine"
- desc = "A standard size magazine for Trappiste pistols, holds six rounds."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/ammo.dmi'
- icon_state = "pistol_585_standard"
-
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
- w_class = WEIGHT_CLASS_SMALL
-
- ammo_type = /obj/item/ammo_casing/c585trappiste
- caliber = CALIBER_585TRAPPISTE
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty
- start_empty = TRUE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm
deleted file mode 100644
index 1ae391325d0..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/trappiste_fabriek/pistol.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-// .35 Sol pistol
-
-/obj/item/gun/ballistic/automatic/pistol/sol
- name = "\improper Trappiste 'Wespe' Pistol"
- desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
- icon_state = "wespe"
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_light.ogg'
-
- w_class = WEIGHT_CLASS_NORMAL
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol
- special_mags = TRUE
-
- suppressor_x_offset = 7
- suppressor_y_offset = 0
-
- fire_delay = 0.3 SECONDS
-
-/obj/item/gun/ballistic/automatic/pistol/sol/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
-
-/obj/item/gun/ballistic/automatic/pistol/sol/add_seclight_point()
- AddComponent(/datum/component/seclite_attachable, \
- starting_light = new /obj/item/flashlight/seclite(src), \
- is_light_removable = FALSE, \
- )
-
-/obj/item/gun/ballistic/automatic/pistol/sol/examine_more(mob/user)
- . = ..()
-
- . += "The Wespe is a pistol that was made entirely for military use. \
- Required to use a standard round, standard magazines, and be able \
- to function in all of the environments that SolFed operated in \
- commonly. These qualities just so happened to make the weapon \
- popular in frontier space and is likely why you are looking at \
- one now."
-
- return .
-
-/obj/item/gun/ballistic/automatic/pistol/sol/no_mag
- spawnwithmagazine = FALSE
-
-// Sol pistol evil gun
-
-/obj/item/gun/ballistic/automatic/pistol/sol/evil
- desc = "The standard issue service pistol of SolFed's various military branches. Comes with attached light. This one is painted tacticool black."
-
- icon_state = "wespe_evil"
-
-/obj/item/gun/ballistic/automatic/pistol/sol/evil/no_mag
- spawnwithmagazine = FALSE
-
-// Trappiste high caliber pistol in .585
-
-/obj/item/gun/ballistic/automatic/pistol/trappiste
- name = "\improper Trappiste 'Skild' Pistol"
- desc = "A somewhat rare to see Trappiste pistol firing the high caliber .585 developed by the same company. Sees rare use mainly due to its tendency to cause severe wrist discomfort."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/trappiste_fabriek/guns32x.dmi'
- icon_state = "skild"
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/pistol_heavy.ogg'
- suppressed_sound = 'modular_skyrat/modules/modular_weapons/sounds/suppressed_heavy.ogg'
-
- w_class = WEIGHT_CLASS_NORMAL
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol
-
- suppressor_x_offset = 8
- suppressor_y_offset = 0
-
- fire_delay = 1 SECONDS
-
- recoil = 3
-
-/obj/item/gun/ballistic/automatic/pistol/trappiste/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_TRAPPISTE)
-
-/obj/item/gun/ballistic/automatic/pistol/trappiste/examine_more(mob/user)
- . = ..()
-
- . += "The Skild only exists due to a widely known event that SolFed's military \
- would prefer wasn't anywhere near as popular. A general, name unknown as of now, \
- was recorded complaining about the lack of capability the Wespe provided to the \
- military, alongside several statements comparing the Wespe's lack of masculinity \
- to the, quote, 'unique lack of testosterone those NRI mongrels field'. While the \
- identities of both the general and people responsible for the leaking of the recording \
- are still classified, many high ranking SolFed military staff suspiciously have stopped \
- appearing in public, unlike the Skild. A lot of several thousand pistols, the first \
- of the weapons to ever exist, were not so silently shipped to SolFed's Plutonian \
- shipping hub from TRAPPIST. SolFed military command refuses to answer any \
- further questions about the incident to this day."
-
- return .
-
-/obj/item/gun/ballistic/automatic/pistol/trappiste/no_mag
- spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm
deleted file mode 100644
index 7c43be2c19a..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/ammo.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-* .310 Strilka
-*/
-
-/obj/item/ammo_casing/strilka310/rubber
- name = ".310 Strilka rubber bullet casing"
- desc = "A .310 rubber bullet casing. Casing is a bit of a fib, there isn't one.\
- \
- RUBBER: Less than lethal ammo. Deals both stamina damage and regular damage. "
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi'
- icon_state = "310-casing-rubber"
-
- projectile_type = /obj/projectile/bullet/strilka310/rubber
- harmful = FALSE
-
-/obj/projectile/bullet/strilka310/rubber
- name = ".310 rubber bullet"
- damage = 15
- stamina = 55
- ricochets_max = 5
- ricochet_incidence_leeway = 0
- ricochet_chance = 130
- ricochet_decay_damage = 0.7
- shrapnel_type = null
- sharpness = NONE
- embedding = null
-
-/obj/item/ammo_casing/strilka310/ap
- name = ".310 Strilka armor-piercing bullet casing"
- desc = "A .310 armor-piercing bullet casing. Note, does not actually contain a casing.\
- \
- ARMOR-PIERCING: Improved armor-piercing capabilities, in return for less outright damage. "
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/ammo.dmi'
- icon_state = "310-casing-ap"
-
- projectile_type = /obj/projectile/bullet/strilka310/ap
- custom_materials = AMMO_MATS_AP
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/strilka310/ap
- name = ".310 armor-piercing bullet"
- damage = 50
- armour_penetration = 60
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm
deleted file mode 100644
index 62d24c15cbf..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/gunsets.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-// Base yellow carwo case
-
-/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi'
- icon_state = "case_xhihao"
-
-// Empty version of the case
-
-/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/empty
-
-/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/empty/PopulateContents()
- return
-
-// Contains the Bogseo submachinegun, excellent for breaking shoulders
-
-/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo
- name = "\improper Xhihao 'Bogseo' gunset"
-
- weapon_to_spawn = /obj/item/gun/ballistic/automatic/xhihao_smg/no_mag
- extra_to_spawn = /obj/item/ammo_box/magazine/c585trappiste_pistol
-
-/obj/item/storage/toolbox/guncase/skyrat/xhihao_large_case/bogseo/PopulateContents()
- new weapon_to_spawn (src)
-
- generate_items_inside(list(
- /obj/item/ammo_box/c585trappiste/incapacitator = 1,
- /obj/item/ammo_box/c585trappiste = 1,
- /obj/item/ammo_box/magazine/c585trappiste_pistol/spawns_empty = 3,
- ), src)
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
deleted file mode 100644
index ec586d0d35f..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/rifle.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-* QM Sporter Rifle
-*/
-
-/obj/item/gun/ballistic/rifle/boltaction/sporterized
- name = "\improper Xhihao 'Rengo' precision rifle"
- desc = "A Xhihao 'Rengo' conversion rifle. Came as parts sold in a single kit by Xhihao Light Arms, \
- which can be swapped out with many of the outdated or simply old parts on a typical Sakhno rifle. \
- While not necessarily increasing performance in any way, the magazine is slightly longer. The weapon \
- is also overall a bit shorter, making it easier to handle for some people. Cannot be sawn off, cutting \
- really any part of this weapon off would make it non-functional."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns40x.dmi'
- icon_state = "rengo"
- worn_icon_state = "enchanted_rifle" // Not actually magical looking, just looks closest to this one
- inhand_icon_state = "enchanted_rifle"
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba
- can_be_sawn_off = FALSE
- knife_x_offset = 35
-
-/obj/item/gun/ballistic/rifle/boltaction/sporterized/Initialize(mapload)
- . = ..()
-
- AddComponent(/datum/component/scope, range_modifier = 1.5)
-
-/obj/item/gun/ballistic/rifle/boltaction/sporterized/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO)
-
-/obj/item/gun/ballistic/rifle/boltaction/sporterized/empty
- bolt_locked = TRUE // so the bolt starts visibly open
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/bubba/empty
-
-/obj/item/ammo_box/magazine/internal/boltaction/bubba
- name = "Sakhno extended internal magazine"
- desc = "How did you get it out?"
- ammo_type = /obj/item/ammo_casing/strilka310
- caliber = CALIBER_STRILKA310
- max_ammo = 8
-
-/obj/item/ammo_box/magazine/internal/boltaction/bubba/empty
- start_empty = TRUE
-
-/*
-* Box that contains Sakhno rifles, but less soviet union since we don't have one of those
-*/
-
-/obj/item/storage/toolbox/guncase/soviet/sakhno
- desc = "A weapon's case. This one is green and looks pretty old, but is otherwise in decent condition."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi'
- material_flags = NONE // ????? Why do these have materials enabled??
diff --git a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm b/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm
deleted file mode 100644
index 8ef4e450ec9..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/company_and_or_faction_based/xhihao_light_arms/submachinegun.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-// Evil .585 smg that blueshields spawn with that will throw your screen like hell but itll sure kill whoever threatens a head really good
-
-/obj/item/gun/ballistic/automatic/xhihao_smg
- name = "\improper Xhihao 'Bogseo' Submachinegun"
- desc = "A weapon that could hardly be called a 'sub' machinegun, firing the monstrous .585 cartridge. \
- It provides enough kick to bruise a shoulder pretty bad if used without protection."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/xhihao_light_arms/guns32x.dmi'
- icon_state = "bogseo"
-
- lefthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/modular_weapons/icons/mob/company_and_or_faction_based/xhihao_light_arms/guns_righthand.dmi'
- inhand_icon_state = "bogseo"
-
- special_mags = FALSE
-
- bolt_type = BOLT_TYPE_STANDARD
-
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
- slot_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_BELT
-
- accepted_magazine_type = /obj/item/ammo_box/magazine/c585trappiste_pistol
-
- fire_sound = 'modular_skyrat/modules/modular_weapons/sounds/smg_heavy.ogg'
- can_suppress = TRUE
-
- can_bayonet = FALSE
-
- suppressor_x_offset = 9
-
- burst_size = 1
- fire_delay = 0.15 SECONDS
- actions_types = list()
-
- // Because we're firing a lot of these really fast, we want a lot less wound chance
- projectile_wound_bonus = -20
- spread = 12.5
- // Hope you didn't need to see anytime soon
- recoil = 2
-
-/obj/item/gun/ballistic/automatic/xhihao_smg/give_manufacturer_examine()
- AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO)
- AddComponent(/datum/component/automatic_fire, fire_delay)
-
-/obj/item/gun/ballistic/automatic/xhihao_smg/examine_more(mob/user)
- . = ..()
-
- . += "The Bogseo submachinegun is seen in highly different lights based on \
- who you ask. Ask a Jovian, and they'll go off all day about how they \
- love the thing so. A big weapon for shooting big targets, like the \
- fuel-stat raiders in their large suits of armor. Ask a space pirate, however \
- and you'll get a different story. That is thanks to many SolFed anti-piracy \
- units picking the Bogseo as their standard boarding weapon. What better \
- to ruin a brigand's day than a bullet large enough to turn them into \
- mist at full auto, after all?"
-
- return .
-
-/obj/item/gun/ballistic/automatic/xhihao_smg/no_mag
- spawnwithmagazine = FALSE
diff --git a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm b/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm
deleted file mode 100644
index a15d0766ece..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/obj/item/crafting_conversion_kit
- name = "base conversion kit"
- desc = "It's a set of parts, for something. This shouldn't be here, and you should probably throw this away, since it's not going to be very useful."
- icon = 'icons/obj/storage/box.dmi'
- icon_state = "secbox"
- // the inhands are just what the box uses
- inhand_icon_state = "syringe_kit"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- drop_sound = 'sound/items/handling/component_drop.ogg'
- pickup_sound = 'sound/items/handling/component_pickup.ogg'
-
-/obj/item/crafting_conversion_kit/mosin_pro
- name = "\improper Xhihao 'Rengo' rifle conversion kit"
- desc = "All the parts you need to make a 'Rengo' rifle, outside of the parts that make the gun actually a gun. \
- It looks like this stuff could fit on an old Sakhno rifle, if only you had one of those around."
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/cases.dmi'
- icon_state = "xhihao_conversion_kit"
-
-/datum/crafting_recipe/mosin_pro
- name = "Sakhno to Xhihao 'Rengo' Conversion"
- desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. It takes roughly thirty seconds and a screwdriver."
- result = /obj/item/gun/ballistic/rifle/boltaction/sporterized/empty
- reqs = list(
- /obj/item/gun/ballistic/rifle/boltaction = 1,
- /obj/item/crafting_conversion_kit/mosin_pro = 1
- )
- steps = list(
- "Empty the rifle",
- "Leave the bolt open"
- )
- tool_behaviors = list(TOOL_SCREWDRIVER)
- time = 30 SECONDS
- category = CAT_WEAPON_RANGED
-
-/datum/crafting_recipe/mosin_pro/New()
- ..()
- blacklist |= subtypesof(/obj/item/gun/ballistic/rifle/boltaction) - list(/obj/item/gun/ballistic/rifle/boltaction/surplus)
-
-/datum/crafting_recipe/mosin_pro/check_requirements(mob/user, list/collected_requirements)
- var/obj/item/gun/ballistic/rifle/boltaction/the_piece = collected_requirements[/obj/item/gun/ballistic/rifle/boltaction][1]
- if(!the_piece.bolt_locked)
- return FALSE
- if(LAZYLEN(the_piece.magazine.stored_ammo))
- return FALSE
- return ..()
diff --git a/modular_skyrat/modules/modular_weapons/code/gunsets.dm b/modular_skyrat/modules/modular_weapons/code/gunsets.dm
deleted file mode 100644
index 7373e0fa729..00000000000
--- a/modular_skyrat/modules/modular_weapons/code/gunsets.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-* GUNSET BOXES
-*/
-
-/obj/item/storage/toolbox/guncase/skyrat
- desc = "A thick gun case with foam inserts laid out to fit a weapon, magazines, and gear securely."
-
- icon = 'modular_skyrat/modules/modular_weapons/icons/obj/gunsets.dmi'
- icon_state = "guncase"
-
- worn_icon = 'modular_skyrat/modules/modular_weapons/icons/mob/worn/cases.dmi'
- worn_icon_state = "darkcase"
-
- slot_flags = ITEM_SLOT_BACK
-
- material_flags = NONE
-
- /// Is the case visually opened or not
- var/opened = FALSE
-
-/obj/item/storage/toolbox/guncase/skyrat/Initialize(mapload)
- . = ..()
- atom_storage.max_total_storage = 14 // Technically means you could fit multiple large guns in here but its a case you cant backpack anyways so what it do
- atom_storage.max_slots = 6 // We store some extra items in these so lets make a little extra room
-
-/obj/item/storage/toolbox/guncase/skyrat/update_icon()
- . = ..()
- if(opened)
- icon_state = "[initial(icon_state)]-open"
- else
- icon_state = initial(icon_state)
-
-/obj/item/storage/toolbox/guncase/skyrat/AltClick(mob/user)
- . = ..()
- opened = !opened
- update_icon()
-
-/obj/item/storage/toolbox/guncase/skyrat/attack_self(mob/user)
- . = ..()
- opened = !opened
- update_icon()
-
-// Empty guncase
-
-/obj/item/storage/toolbox/guncase/skyrat/empty
-
-/obj/item/storage/toolbox/guncase/skyrat/empty/PopulateContents()
- return
-
-// Small case for pistols and whatnot
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol
- name = "small gun case"
-
- icon_state = "guncase_s"
-
- slot_flags = NONE
-
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/Initialize(mapload)
- . = ..()
- atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL
-
-// Empty pistol case
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/empty
-
-/obj/item/storage/toolbox/guncase/skyrat/pistol/empty/PopulateContents()
- return
diff --git a/modular_skyrat/modules/mold/readme.md b/modular_skyrat/modules/mold/readme.md
deleted file mode 100644
index f3bd0915c86..00000000000
--- a/modular_skyrat/modules/mold/readme.md
+++ /dev/null
@@ -1,41 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/1356
-
-## Title: Mold - Advanced PvE Blob-Vine Encounter
-
-MODULE ID: `BIOHAZ_MOLD`
-
-### Description:
-
-
-100% PVE
-Spreads much like glowshrooms and space vines, has a main core like a blob. During the spreading it builds structures, currently there's 2. One of them will release something harmful on proximity, another will spawn enemies. The blob also releases harmful stuff depending on the type, on cooldown.
-
-The resin grows and bashes through doors and firelocks, when it meets a space tile it walls it off. It isn't too hard of an encounter and it doesn't spread too fast.
-
-There's 4 types right now, for each type people should take be taking different tactics and pre-cautions.
-
-Currently not tied to any event, just admin spawn for the purposes of tests and stuff.
-
-When the core dies, everything slowly decays away.
-
-### TG Proc/File Changes:
-
-- N/A
-
-### Defines:
-
-|File Location|Defines|
-|-------------|-------|
-|`modular_skyrat/modules/biohazard_blob/code/_biohazard_blob_defines.dm`|`BIO_MOLD_TYPE_FUNGUS` `BIO_MOLD_TYPE_FIRE` `BIO_MOLD_TYPE_EMP` `BIO_MOLD_TYPE_TOXIC` `ALL_BIO_BLOB_TYPES` `FACTION_MOLD`|
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-- Azarak
diff --git a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm b/modular_skyrat/modules/moretraitoritems/code/syndicate.dm
deleted file mode 100644
index 06743c4d90d..00000000000
--- a/modular_skyrat/modules/moretraitoritems/code/syndicate.dm
+++ /dev/null
@@ -1,260 +0,0 @@
-/obj/item/uplink/old_radio
- name = "old radio"
- desc = "A dusty and old looking radio."
-
-/obj/item/uplink/old_radio/Initialize(mapload, owner, tc_amount = 0)
- . = ..()
- var/datum/component/uplink/hidden_uplink = GetComponent(/datum/component/uplink)
- hidden_uplink.name = "old radio"
-
-//Unrestricted MODs
-/obj/item/mod/control/pre_equipped/elite/unrestricted
- req_access = null
-
-//Syndie wep charger kit
-/obj/item/storage/box/syndie_kit/recharger
- name = "boxed recharger kit"
- desc = "A sleek, sturdy box used to hold all parts to build a weapons recharger."
- icon_state = "syndiebox"
-
-/obj/item/storage/box/syndie_kit/recharger/PopulateContents()
- new /obj/item/circuitboard/machine/recharger(src)
- new /obj/item/stock_parts/capacitor/quadratic(src)
- new /obj/item/stack/sheet/iron/five(src)
- new /obj/item/stack/cable_coil/five(src)
- new /obj/item/screwdriver/nuke(src)
- new /obj/item/wrench(src)
-
-//Back-up space suit
-/obj/item/storage/box/syndie_kit/space_suit
- name = "boxed space suit and helmet"
- desc = "A sleek, sturdy box used to hold an emergency spacesuit."
- icon_state = "syndiebox"
- illustration = "syndiesuit"
-
-/obj/item/storage/box/syndie_kit/space_suit/Initialize(mapload)
- . = ..()
- atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY
- atom_storage.max_slots = 2
- atom_storage.set_holdable(list(
- /obj/item/clothing/head/helmet/space/syndicate,
- /obj/item/clothing/suit/space/syndicate,
- ))
-
-/obj/item/storage/box/syndie_kit/space_suit/PopulateContents()
- switch(pick(list("red", "green", "dgreen", "blue", "orange", "black")))
- if("green")
- new /obj/item/clothing/head/helmet/space/syndicate/green(src)
- new /obj/item/clothing/suit/space/syndicate/green(src)
- if("dgreen")
- new /obj/item/clothing/head/helmet/space/syndicate/green/dark(src)
- new /obj/item/clothing/suit/space/syndicate/green/dark(src)
- if("blue")
- new /obj/item/clothing/head/helmet/space/syndicate/blue(src)
- new /obj/item/clothing/suit/space/syndicate/blue(src)
- if("red")
- new /obj/item/clothing/head/helmet/space/syndicate(src)
- new /obj/item/clothing/suit/space/syndicate(src)
- if("orange")
- new /obj/item/clothing/head/helmet/space/syndicate/orange(src)
- new /obj/item/clothing/suit/space/syndicate/orange(src)
- if("black")
- new /obj/item/clothing/head/helmet/space/syndicate/black(src)
- new /obj/item/clothing/suit/space/syndicate/black(src)
-
-//Spy
-/obj/item/clothing/suit/jacket/det_suit/noir/armoured
- armor_type = /datum/armor/heister
-
-/obj/item/clothing/head/frenchberet/armoured
- armor_type = /datum/armor/cosmetic_sec
-
-/obj/item/clothing/under/suit/black/armoured
- armor_type = /datum/armor/clothing_under/syndicate
-
-/obj/item/clothing/under/suit/black/skirt/armoured
- armor_type = /datum/armor/clothing_under/syndicate
-
-/obj/item/storage/belt/holster/detective/dark
- name = "dark leather holster"
- icon_state = "syndicate_holster"
-
-//Robohand
-/obj/item/storage/backpack/duffelbag/syndie/robohand/PopulateContents()
- new /obj/item/gun/ballistic/automatic/pistol/robohand(src)
- new /obj/item/ammo_box/magazine/m14mm(src)
- new /obj/item/ammo_box/magazine/m14mm(src)
- new /obj/item/ammo_box/magazine/m14mm(src)
- new /obj/item/ammo_box/magazine/m14mm(src)
- new /obj/item/storage/belt/military(src)
- new /obj/item/clothing/under/pants/track/robohand(src)
- new /obj/item/clothing/gloves/combat(src)
- new /obj/item/clothing/shoes/combat(src)
- new /obj/item/clothing/glasses/sunglasses/robohand(src)
- new /obj/item/clothing/suit/jacket/trenchcoat/gunman(src)
- new /obj/item/autosurgeon/bodypart/r_arm_robotic(src)
- new /obj/item/autosurgeon/syndicate/esword_arm(src)
- new /obj/item/autosurgeon/syndicate/nodrop(src)
-
-
-/obj/item/storage/box/syndie_kit/gunman_outfit
- name = "gunman clothing bundle"
- desc = "A box filled with armored and stylish clothing for the aspiring gunmans."
-
-/obj/item/clothing/suit/jacket/trenchcoat/gunman
- name = "leather overcoat"
- desc = "An armored leather overcoat, intended as the go-to wear for any aspiring gunman."
- body_parts_covered = CHEST|GROIN|ARMS
- armor_type = /datum/armor/leather_gunman
-
-/datum/armor/leather_gunman
- melee = 45
- bullet = 40
- laser = 40
- energy = 50
- bomb = 25
- fire = 50
- acid = 50
- wound = 10
-
-/obj/item/clothing/under/pants/track/robohand
- name = "badass pants"
- desc = "Strangely firm yet soft black pants, these appear to have some armor padding for added protection."
- armor_type = /datum/armor/clothing_under/robohand
-
-/datum/armor/clothing_under/robohand
- melee = 20
- bullet = 20
- laser = 20
- energy = 20
- bomb = 20
-
-/obj/item/clothing/glasses/sunglasses/robohand
- name = "badass sunglasses"
- desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes. These ones seem to be bulletproof?"
- body_parts_covered = HEAD //What do you mean glasses don't protect your head? Of course they do. Cyberpunk has flying cars(mostly intentional)!
- armor_type = /datum/armor/sunglasses_robohand
-
-/datum/armor/sunglasses_robohand
- melee = 20
- bullet = 60
- laser = 20
- energy = 20
- bomb = 20
- wound = 5
-
-//More items
-/obj/item/guardian_creator/tech/choose/traitor/opfor
- allow_changeling = TRUE
-
-/obj/item/codeword_granter
- name = "codeword manual"
- desc = "A black manual with a red S lovingly inscribed on the cover by only the finest of presses from a factory."
- icon = 'modular_skyrat/modules/opposing_force/icons/items.dmi'
- icon_state = "codeword_book"
- /// Number of charges the book has, limits the number of times it can be used.
- var/charges = 1
-
-
-/obj/item/codeword_granter/attack_self(mob/living/user)
- if(!isliving(user))
- return
-
- to_chat(user, span_boldannounce("You start skimming through [src], and feel suddenly imparted with the knowledge of the following code words:"))
-
- user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src)
- user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src)
- to_chat(user, "Code Phrases : [jointext(GLOB.syndicate_code_phrase, ", ")]")
- to_chat(user, "Code Responses : [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]")
-
- use_charge(user)
-
-
-/obj/item/codeword_granter/attack(mob/living/attacked_mob, mob/living/user)
- if(!istype(attacked_mob) || !istype(user))
- return
-
- if(attacked_mob == user)
- attack_self(user)
- return
-
- playsound(loc, SFX_PUNCH, 25, TRUE, -1)
-
- if(attacked_mob.stat == DEAD)
- attacked_mob.visible_message(span_danger("[user] smacks [attacked_mob]'s lifeless corpse with [src]."), span_userdanger("[user] smacks your lifeless corpse with [src]."), span_hear("You hear smacking."))
- else
- attacked_mob.visible_message(span_notice("[user] teaches [attacked_mob] by beating [attacked_mob.p_them()] over the head with [src]!"), span_boldnotice("As [user] hits you with [src], you feel suddenly imparted with the knowledge of some [span_red("specific words")]."), span_hear("You hear smacking."))
- attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue", src)
- attacked_mob.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src)
- to_chat(attacked_mob, span_boldnotice("You feel suddenly imparted with the knowledge of the following code words:"))
- to_chat(attacked_mob, "Code Phrases : [span_blue("[jointext(GLOB.syndicate_code_phrase, ", ")]")]")
- to_chat(attacked_mob, "Code Responses : [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]")
- use_charge(user)
-
-
-/obj/item/codeword_granter/proc/use_charge(mob/user)
- charges--
-
- if(!charges)
- var/turf/src_turf = get_turf(src)
- src_turf.visible_message(span_warning("The cover and contents of [src] start shifting and changing! It slips out of your hands!"))
- new /obj/item/book/manual/random(src_turf)
- qdel(src)
-
-
-/obj/item/antag_granter
- icon = 'modular_skyrat/modules/opposing_force/icons/items.dmi'
- /// What antag datum to give
- var/antag_datum = /datum/antagonist/traitor
- /// What to tell the user when they use the granter
- var/user_message = ""
-
-
-/obj/item/antag_granter/attack(mob/living/target_mob, mob/living/user, params)
- . = ..()
-
- if(target_mob != user) // As long as you're attacking yourself it counts.
- return
- attack_self(user)
-
-
-/obj/item/antag_granter/attack_self(mob/user, modifiers)
- . = ..()
- if(!isliving(user) || !user.mind)
- return FALSE
-
- to_chat(user, span_notice(user_message))
- user.mind.add_antag_datum(antag_datum)
- qdel(src)
- return TRUE
-
-/obj/item/antag_granter/changeling
- name = "viral injector"
- desc = "A blue injector filled with some viscous, red substance. It has no markings apart from an orange warning stripe near the large needle."
- icon_state = "changeling_injector"
- antag_datum = /datum/antagonist/changeling
- user_message = "As you inject the substance into yourself, you start to feel... better ."
-
-
-/obj/item/antag_granter/heretic
- name = "strange book"
- desc = "A purple book with a green eye on the cover. You swear it's looking at you...."
- icon_state = "heretic_granter"
- antag_datum = /datum/antagonist/heretic
- user_message = "As you open the book, you see a great flash as the world becomes all the clearer for you ."
-
-/obj/item/antag_granter/clock_cultist
- name = "brass contraption"
- desc = "A cogwheel-shaped device of brass, with a glass lens floating, suspended in the center."
- icon = 'modular_skyrat/modules/clock_cult/icons/clockwork_objects.dmi'
- icon_state = "vanguard_cogwheel"
- antag_datum = /datum/antagonist/clock_cultist/solo
- user_message = "A whirring fills your ears as knowledge of His Eminence fills your mind ."
-
-/obj/item/antag_granter/clock_cultist/attack_self(mob/user, modifiers)
- . = ..()
- if(!.)
- return FALSE
-
- var/obj/item/clockwork/clockwork_slab/slab = new
- user.put_in_hands(slab, FALSE)
diff --git a/modular_skyrat/modules/moretraitoritems/code/weapons.dm b/modular_skyrat/modules/moretraitoritems/code/weapons.dm
deleted file mode 100644
index 576bca81f2f..00000000000
--- a/modular_skyrat/modules/moretraitoritems/code/weapons.dm
+++ /dev/null
@@ -1,190 +0,0 @@
-#define CALIBRE_14MM "14mm"
-
-/obj/item/gun/ballistic/revolver/ocelot
- name = "Colt Peacemaker revolver"
- desc = "A modified Peacemaker revolver that chambers .357 ammo. Less powerful than the regular .357, but ricochets a lot more." // We need tension...conflict. The world today has become too soft. We're living in an age where true feelings are suppressed. So we're going to shake things up a bit. We'll create a world dripping with tension... ...a world filled with greed and suspicion, bravery and cowardice.
- // this could probably be made funnier by reducing its damage multiplier but also making it so that every fired bullet has the wacky ricochets
- // but that's a different plate of cookies for a different glass of milk
- icon_state = "c38_panther"
- accepted_magazine_type = /obj/item/ammo_box/magazine/internal/cylinder
-
-/obj/item/ammo_casing/a357/peacemaker
- name = ".357 Peacemaker bullet casing"
- desc = "A .357 Peacemaker bullet casing."
- caliber = CALIBER_357
- projectile_type = /obj/projectile/bullet/a357/peacemaker
-
-/obj/projectile/bullet/a357/peacemaker
- name = ".357 Peacemaker bullet"
- damage = 25
- wound_bonus = 0
- ricochets_max = 6
- ricochet_chance = 200
- ricochet_auto_aim_angle = 50
- ricochet_auto_aim_range = 6
- ricochet_incidence_leeway = 80
- ricochet_decay_chance = 1
-
-/datum/design/a357/peacemaker
- name = "Speed Loader (.357 Peacemaker)"
- id = "a357PM"
- build_type = AUTOLATHE
- materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2)
- build_path = /obj/item/ammo_box/a357/peacemaker
- category = list(RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO)
-
-/obj/item/ammo_box/a357/peacemaker
- name = "speed loader (.357 Peacemaker)"
- desc = "Designed to quickly reload revolvers."
- icon_state = "357"
- ammo_type = /obj/item/ammo_casing/a357/peacemaker
- max_ammo = 7
- multiple_sprites = AMMO_BOX_PER_BULLET
- item_flags = NO_MAT_REDEMPTION
-
-
-/obj/item/clothing/head/hats/sus_bowler
- name = "odd bowler"
- desc = "A deep black bowler. Inside the hat, there is a sleek red S, with a smaller X insignia embroidered within. On closer inspection, the brim feels oddly weighted..."
- icon_state = "bowler"
- force = 10
- throwforce = 45
- throw_speed = 5
- throw_range = 9
- w_class = WEIGHT_CLASS_SMALL
- armour_penetration = 30 //5 points less then a double esword!
- sharpness = SHARP_POINTY
- attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
- attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
-
-///obj/item/clothing/head/hats/sus_bowler/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- //var/caught = hit_atom.hitby(src, FALSE, FALSE, throwingdatum=throwingdatum)
- //if(thrownby && !caught)
- //addtimer(CALLBACK(src, TYPE_PROC_REF(/atom/movable, throw_at), thrownby, throw_range+2, throw_speed, null, TRUE), 1)
- //else
- //return ..()
-
-///obj/item/clothing/head/hats/sus_bowler/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE)
- //if(ishuman(thrower))
- //var/mob/living/carbon/human/I = thrower
- //I.throw_mode_off(THROW_MODE_TOGGLE) //so they can catch it on the return.
- //return ..()
-
-
-/*
-* Malorian Arms 3516 14MM
-* If you have this, you're a badass.
-*/
-
-/obj/item/gun/ballistic/automatic/pistol/robohand
- name = "Malorian Arms 3516"
- desc = "The Malorian Arms 3516 is a 14mm heavy pistol, sporting a titanium frame and unique wooden grip. A custom Dyna-porting and \
- direct integral cyber-interlink means only someone with a cyberarm and smartgun link can take full advantage of the pistol's features."
- icon = 'modular_skyrat/modules/moretraitoritems/icons/3516.dmi'
- icon_state = "3516"
- w_class = WEIGHT_CLASS_NORMAL
- accepted_magazine_type = /obj/item/ammo_box/magazine/m14mm
- can_suppress = FALSE
- fire_sound = 'modular_skyrat/modules/moretraitoritems/sound/fire2.ogg'
- load_sound = 'modular_skyrat/modules/moretraitoritems/sound/reload.ogg'
- load_empty_sound = 'modular_skyrat/modules/moretraitoritems/sound/reload.ogg'
- eject_sound = 'modular_skyrat/modules/moretraitoritems/sound/release.ogg'
- eject_empty_sound = 'modular_skyrat/modules/moretraitoritems/sound/release.ogg'
- vary_fire_sound = FALSE
- rack_sound = 'modular_skyrat/modules/moretraitoritems/sound/slide.ogg'
- fire_sound_volume = 100
- bolt_wording = "fuckin' slide"
- reload_time = 0 //FAST AS FUCK BOIS!
- var/unrestricted = FALSE
-
-/obj/item/gun/ballistic/automatic/pistol/robohand/unrestricted
- unrestricted = TRUE
-
-//The gun cannot shoot if you do not have a cyborg arm.
-/obj/item/gun/ballistic/automatic/pistol/robohand/afterattack(atom/target, mob/living/user, flag, params)
- //This is where we are checking if the user has a cybernetic arm to USE the gun. ROBOHAND HAS A ROBO HAND
- if(!unrestricted)
- var/mob/living/carbon/human/human_user = user
- var/obj/item/bodypart/selected_hand = human_user.get_active_hand()
- if(IS_ORGANIC_LIMB(selected_hand))
- to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?"))
- return
- . = ..()
-
-/obj/item/gun/ballistic/automatic/pistol/robohand/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message)
- if(!istype(inserted_mag, accepted_magazine_type))
- to_chat(user, span_warning("\The [inserted_mag] doesn't seem to fit into \the [src]..."))
- return FALSE
- if(!user.transferItemToLoc(inserted_mag, src))
- to_chat(user, span_warning("You cannot seem to get \the [src] out of your hands!"))
- return FALSE
- magazine = inserted_mag
- if(display_message)
- to_chat(user, span_notice("You load a new [magazine_wording] into \the [src]."))
- playsound(src, load_empty_sound, load_sound_volume, load_sound_vary)
- if(bolt_type == BOLT_TYPE_OPEN && !bolt_locked)
- chamber_round(TRUE)
- drop_bolt(user)
- update_appearance()
- animate(src, 0.2 SECONDS, 1, transform = turn(matrix(), 120)) //Le johnny robohand woosh woosh twirl
- animate(time = 0.2 SECONDS, transform = turn(matrix(), 240))
- animate(time = 0.2 SECONDS, transform = null)
- return TRUE
-
-/obj/item/gun/ballistic/automatic/pistol/robohand/eject_magazine(mob/user, display_message, obj/item/ammo_box/magazine/tac_load)
- if(bolt_type == BOLT_TYPE_OPEN)
- chambered = null
- if(magazine.ammo_count())
- playsound(src, eject_sound, eject_sound_volume, eject_sound_volume) //This is why we've copied this proc, it should play the eject sound when ejecting.
- else
- playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_volume)
- magazine.forceMove(drop_location())
- var/obj/item/ammo_box/magazine/old_mag = magazine
- if(tac_load)
- if (insert_magazine(user, tac_load, FALSE))
- to_chat(user, span_notice("You perform an elite tactical reload on \the [src]."))
- else
- to_chat(user, span_warning("You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing."))
- magazine = null
- else
- magazine = null
- user.put_in_hands(old_mag)
- old_mag.update_appearance()
- if(display_message)
- to_chat(user, span_notice("You pull the [magazine_wording] out of \the [src]."))
- update_appearance()
- animate(src, transform = turn(matrix(), 120), time = 0.2 SECONDS, loop = 1) //Le johnny robohand again
- animate(transform = turn(matrix(), 240), time = 0.2 SECONDS)
- animate(transform = null, time = 0.2 SECONDS)
-
-//Magazine stuff
-/obj/item/ammo_box/magazine/m14mm
- name = "pistol magazine (14mm)"
- icon = 'modular_skyrat/modules/moretraitoritems/icons/3516_mag.dmi'
- icon_state = "14mm"
- base_icon_state = "14mm"
- ammo_type = /obj/item/ammo_casing/c14mm
- caliber = CALIBRE_14MM
- max_ammo = 10
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
-/obj/item/ammo_casing/c14mm
- name = "14mm bullet casing"
- desc = "A 14mm bullet casing. Badass."
- caliber = CALIBRE_14MM
- projectile_type = /obj/projectile/bullet/c14mm
-
-/obj/projectile/bullet/c14mm
- name = "14mm bullet"
- damage = 60
- embedding = list(embed_chance = 90, fall_chance = 3, jostle_chance = 4, ignore_throwspeed_threshold = TRUE, pain_stam_pct = 0.4, pain_mult = 5, jostle_pain_mult = 9, rip_time = 10)
- dismemberment = 50
- pierces = 1
- projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS
-
-//nullrod katana
-/obj/item/katana/weak/curator //This has the same stats as the curator's claymore
- desc = "An ancient Katana. Forged by... Well, it doesn't really say, but surely it's authentic! And sharp to boot!"
- force = 15
- block_chance = 30
- armour_penetration = 5
diff --git a/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm b/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm
deleted file mode 100644
index e85a9fce118..00000000000
--- a/modular_skyrat/modules/mounted_machine_gun/code/ammobox.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/obj/item/ammo_box/magazine/mmg_box
- name = "\improper .50 BMG ammo box"
- desc = "A big box full of beltfed ammo."
- icon = 'modular_skyrat/modules/mounted_machine_gun/icons/turret_objects.dmi'
- icon_state = "ammobox"
- multiple_sprites = AMMO_BOX_FULL_EMPTY
- max_ammo = 150
- ammo_type = /obj/item/ammo_casing/b50cal
- caliber = CALIBER_50BMG
-
-/obj/item/ammo_casing/b50cal
- name = ".50 BMG bullet casing"
- icon_state = ".50"
- caliber = CALIBER_50BMG
- projectile_type = /obj/projectile/bullet/c50cal
-
-/obj/projectile/bullet/c50cal
- name = ".50 BMG bullet"
- damage = 40
- wound_bonus = 60
- armour_penetration = 20
- icon_state = "redtrac"
diff --git a/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm b/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm
deleted file mode 100644
index e0b71d6ec1d..00000000000
--- a/modular_skyrat/modules/mutants/code/mutant_zombie_bodyparts.dm
+++ /dev/null
@@ -1,53 +0,0 @@
-// mutant_zombie!
-/obj/item/bodypart/head/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_state = "mutant_head"
- is_dimorphic = FALSE
- limb_id = SPECIES_MUTANT
- species_color = "#ffffff"
- head_flags = HEAD_HAIR|HEAD_LIPS|HEAD_DEBRAIN
-
-/obj/item/bodypart/chest/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- limb_id = SPECIES_MUTANT
- icon_state = "mutant_chest"
- is_dimorphic = FALSE
- should_draw_greyscale = FALSE
-
-/obj/item/bodypart/arm/left/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- limb_id = SPECIES_MUTANT
- icon_state = "mutant_l_arm"
- should_draw_greyscale = FALSE
-
-/obj/item/bodypart/arm/right/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- limb_id = SPECIES_MUTANT
- icon_state = "mutant_r_arm"
- should_draw_greyscale = FALSE
-
-/obj/item/bodypart/leg/left/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- limb_id = SPECIES_MUTANT
- icon_state = "mutant_l_leg"
- digitigrade_type = null
- should_draw_greyscale = FALSE
-
-/obj/item/bodypart/leg/right/mutant_zombie
- icon_greyscale = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- icon_static = 'modular_skyrat/modules/mutants/icons/mutant_parts_greyscale.dmi'
- limb_id = SPECIES_MUTANT
- icon_state = "mutant_r_leg"
- digitigrade_type = null
- should_draw_greyscale = FALSE
diff --git a/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm b/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm
deleted file mode 100644
index 0313c68010b..00000000000
--- a/modular_skyrat/modules/nanotrasen_naval_command/code/clothing.dm
+++ /dev/null
@@ -1,99 +0,0 @@
-
-// UNDER
-/obj/item/clothing/under/rank/centcom/skyrat/naval
- name = "ensign uniform"
- desc = "A uniform worn by those with the rank Ensign in the Nanotrasen Navy."
- icon_state = "naval_ensign"
- can_adjust = TRUE
-
-/obj/item/clothing/under/rank/centcom/skyrat/naval/commander
- name = "command uniform"
- desc = "A uniform worn by those with a command rank in the Nanotrasen Navy."
- icon_state = "naval_command"
-
-/obj/item/clothing/under/rank/centcom/skyrat/naval/admiral
- name = "admiral's uniform"
- desc = "A uniform worn by those with the rank Admiral in the Nanotrasen Navy."
- icon_state = "naval_admiral"
-
-/obj/item/clothing/under/rank/centcom/skyrat/naval/fleet_admiral
- name = "fleet admiral's uniform"
- desc = "A uniform worn by those with the rank Fleet Admiral in the Nanotrasen Navy."
- icon_state = "naval_fleet_admiral"
-
-// GLOVES
-/obj/item/clothing/gloves/combat/naval
- name = "nanotrasen naval gloves"
- desc = "A high quality pair of thick gloves covered in gold stitching, given to Nanotrasen's Naval Commanders."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/hands.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/gloves.dmi'
- icon_state = "naval_command"
-
-/obj/item/clothing/gloves/combat/naval/fleet_admiral
- name = "fleet admiral's gloves"
- icon_state = "naval_fleet_admiral"
-
-
-// HATS
-/obj/item/clothing/head/hats/caphat/naval
- name = "naval cap"
- desc = "A cap worn by those in the Nanotrasen Navy."
- icon_state = "naval_command"
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/hats/caphat/naval/fleet_admiral
- name = "fleet admiral's cap"
- desc = "A cap worn by the Nanotrasen Fleet Admiral."
- icon_state = "naval_fleet_admiral"
-
-
-// NECK
-/obj/item/clothing/neck/pauldron
- name = "lieutenant commander's pauldron"
- desc = "A red padded pauldron signifying the rank of Lieutenant Commander of the Nanotrasen Navy."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- icon_state = "pauldron_ltcr"
-
-/obj/item/clothing/neck/pauldron/commander
- name = "commander's pauldron"
- desc = "A red padded pauldron signifying the rank of Commander in the Nanotrasen Navy."
- icon_state = "pauldron_commander"
-
-/obj/item/clothing/neck/pauldron/captain
- name = "captain's pauldron"
- desc = "A red padded pauldron signifying the rank of Captain in the Nanotrasen Navy."
- icon_state = "pauldron_captain"
-
-/obj/item/clothing/neck/cloak/admiral
- name = "admiral's cape"
- desc = "A vibrant green cape with gold stitching, worn by Nanotrasen Navy Admirals."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- icon_state = "cape_admiral"
-
-/obj/item/clothing/neck/cloak/fleet_admiral
- name = "fleet admiral's cape"
- desc = "A godly cape worn by the highest ranking person in the Nanotrasen Navy, the Fleet Admiral."
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/neck.dmi'
- icon = 'modular_skyrat/master_files/icons/obj/clothing/neck.dmi'
- icon_state = "cape_fleet_admiral"
-
-// SUITS
-/obj/item/clothing/suit/armor/vest/capcarapace/naval
- name = "naval carapace"
- desc = "A carapace worn by Naval Command members."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits/armor.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suits/armor.dmi'
- icon_state = "naval_carapace"
-
-// GLASSES
-/obj/item/clothing/glasses/hud/security/sunglasses/black
- name = "black security sunglasses"
- desc = "A pair of black sunglasses worn by Naval Command officers."
- icon = 'icons/obj/clothing/glasses.dmi'
- worn_icon = 'icons/mob/clothing/eyes.dmi'
- icon_state = "sun"
- unique_reskin = null
diff --git a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm b/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm
deleted file mode 100644
index f27babb0a06..00000000000
--- a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm
+++ /dev/null
@@ -1,92 +0,0 @@
-
-//Uniform items are in command.dm
-
-/obj/item/clothing/suit/armor/vest/nanotrasen_consultant
- name = "nanotrasen officers coat"
- desc = "A premium black coat with real fur round the neck, it seems to have some armor padding inside as well."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/suits.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/suit.dmi'
- icon_state = "bladerunner"
- inhand_icon_state = "armor"
- blood_overlay_type = "suit"
- dog_fashion = null
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
- heat_protection = CHEST|ARMS|GROIN
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-
-/obj/item/clothing/head/nanotrasen_consultant
- name = "nanotrasen consultant's hat"
- desc = "A cap made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/hats.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head.dmi'
- icon_state = "nt_consultant_cap"
- inhand_icon_state = "that"
- flags_inv = 0
- armor_type = /datum/armor/head_nanotrasen_consultant
- strip_delay = 60
- dog_fashion = null
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
-
-/datum/armor/head_nanotrasen_consultant
- melee = 15
- bullet = 5
- laser = 15
- energy = 25
- bomb = 10
- fire = 30
- acid = 5
- wound = 4
-
-/obj/item/clothing/head/nanotrasen_consultant/beret
- name = "nanotrasen consultant's beret"
- desc = "A beret made from durathread, it has an insignia on the front denoting the rank of \"Nanotrasen Consultant\"."
- greyscale_config = /datum/greyscale_config/beret_badge
- greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
- greyscale_colors = "#3F3C40#155326"
- icon_state = "beret_badge"
-
-/obj/item/clothing/head/beret/centcom_formal/nt_consultant
- armor_type = /datum/armor/beret_centcom_formal_nt_consultant
-
-/datum/armor/beret_centcom_formal_nt_consultant
- melee = 15
- bullet = 5
- laser = 15
- energy = 25
- bomb = 10
- fire = 30
- acid = 5
- wound = 4
-
-/obj/item/clothing/suit/armor/centcom_formal/nt_consultant
- armor_type = /datum/armor/armor_centcom_formal_nt_consultant
-
-/datum/armor/armor_centcom_formal_nt_consultant
- melee = 35
- bullet = 30
- laser = 30
- energy = 40
- bomb = 25
- fire = 50
- acid = 50
- wound = 10
-
-/obj/item/clothing/suit/hooded/wintercoat/centcom/nt_consultant
- armor_type = /datum/armor/centcom_nt_consultant
-
-/datum/armor/centcom_nt_consultant
- melee = 35
- bullet = 30
- laser = 30
- energy = 40
- bomb = 25
- fire = 50
- acid = 50
- wound = 10
-
-/obj/item/clothing/gloves/combat/naval/nanotrasen_consultant
- name = "\improper CentCom gloves"
- desc = "A high quality pair of thick gloves covered in gold stitching."
diff --git a/modular_skyrat/modules/novaya_ert/code/belt.dm b/modular_skyrat/modules/novaya_ert/code/belt.dm
deleted file mode 100644
index 5b2ec21698d..00000000000
--- a/modular_skyrat/modules/novaya_ert/code/belt.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/obj/item/storage/belt/military/nri
- name = "green tactical belt"
- desc = "A green tactical belt made for storing military grade hardware."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/belts.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/belt.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/belt.dmi'
- icon_state = "russian_green_belt"
- inhand_icon_state = "security"
- worn_icon_state = "russian_green_belt"
-
-/obj/item/storage/belt/military/nri/captain
- name = "black tactical belt"
- desc = "A black tactical belt made for storing military grade hardware."
- icon_state = "russian_black_belt"
- worn_icon_state = "russian_black_belt"
-
-/obj/item/storage/belt/military/nri/medic
- name = "blue tactical belt"
- desc = "A blue tactical belt made for storing military grade hardware."
- icon_state = "russian_white_belt"
- worn_icon_state = "russian_white_belt"
-
-/obj/item/storage/belt/military/nri/engineer
- name = "brown tactical belt"
- desc = "A brown tactical belt made for storing military grade hardware."
- icon_state = "russian_brown_belt"
- worn_icon_state = "russian_brown_belt"
-
-/obj/item/storage/belt/military/nri/plus_mre/PopulateContents()
- new /obj/item/storage/box/nri_survival_pack/raider(src)
-
-/obj/item/storage/belt/military/nri/soldier/PopulateContents()
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/lanca = 4,
- /obj/item/knife/combat = 1,
- /obj/item/grenade/smokebomb = 1,
- /obj/item/grenade/frag = 1,
- ),src)
-
-/obj/item/storage/belt/military/nri/heavy/PopulateContents()
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/m9mm_aps = 4,
- /obj/item/knife/combat = 1,
- /obj/item/grenade/smokebomb = 1,
- /obj/item/grenade/frag = 1,
- ),src)
-
-/obj/item/storage/belt/military/nri/captain/full/PopulateContents()
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/lanca = 4,
- /obj/item/knife/combat = 1,
- /obj/item/grenade/smokebomb = 1,
- /obj/item/grenade/frag = 1,
- ),src)
-
-/obj/item/storage/belt/military/nri/medic/full/PopulateContents()
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/miecz = 4,
- /obj/item/knife/combat = 1,
- /obj/item/grenade/smokebomb = 1,
- /obj/item/grenade/frag = 1,
- ),src)
-
-/obj/item/storage/belt/military/nri/engineer/full/PopulateContents()
- generate_items_inside(list(
- /obj/item/ammo_box/magazine/miecz = 4,
- /obj/item/knife/combat = 1,
- /obj/item/grenade/smokebomb = 1,
- /obj/item/grenade/frag = 1,
- ),src)
diff --git a/modular_skyrat/modules/novaya_ert/code/head.dm b/modular_skyrat/modules/novaya_ert/code/head.dm
deleted file mode 100644
index 7b9b95166ad..00000000000
--- a/modular_skyrat/modules/novaya_ert/code/head.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-/obj/item/clothing/head/beret/sec/nri
- name = "commander's beret"
- desc = "Za rodinu!!"
- armor_type = /datum/armor/sec_nri
-
-/datum/armor/sec_nri
- melee = 40
- bullet = 35
- laser = 30
- energy = 40
- bomb = 25
- fire = 20
- acid = 50
- wound = 20
-
-/obj/item/clothing/head/helmet/space/hev_suit/nri
- name = "\improper VOSKHOD powered combat armor helmet"
- desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/head/helmet.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/helmet.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/head.dmi'
- icon_state = "nri_soldier"
- armor_type = /datum/armor/hev_suit_nri
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
- obj_flags = null
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION
- resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF
- clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT
- clothing_traits = null
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- flash_protect = FLASH_PROTECTION_WELDER
- visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
- visor_flags = STOPSPRESSUREDAMAGE
- slowdown = 0
-
-/obj/item/clothing/head/helmet/space/hev_suit/nri/captain
- name = "\improper VOSKHOD-2 powered combat armor helmet"
- desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
- icon_state = "nri_captain"
-
-/obj/item/clothing/head/helmet/space/hev_suit/nri/medic
- name = "\improper VOSKHOD-KH powered combat armor helmet"
- desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
- icon_state = "nri_medic"
-
-/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer
- name = "\improper VOSKHOD-IN powered combat armor helmet"
- desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
- icon_state = "nri_engineer"
diff --git a/modular_skyrat/modules/novaya_ert/code/shield.dm b/modular_skyrat/modules/novaya_ert/code/shield.dm
deleted file mode 100644
index b72581d70c3..00000000000
--- a/modular_skyrat/modules/novaya_ert/code/shield.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/obj/item/shield/riot/pointman/nri
- name = "heavy corpsman shield"
- desc = "A shield designed for people that have to sprint to the rescue. Cumbersome as hell. Repair with plasteel."
- icon_state = "riot"
- icon = 'modular_skyrat/modules/novaya_ert/icons/riot.dmi'
- lefthand_file = 'modular_skyrat/modules/novaya_ert/icons/riot_left.dmi'
- righthand_file = 'modular_skyrat/modules/novaya_ert/icons/riot_right.dmi'
- transparent = FALSE
-
-/obj/item/shield/riot/pointman/nri/shatter(mob/living/carbon/human/owner)
- playsound(owner, 'sound/effects/glassbr3.ogg', 100)
- new /obj/item/corpsman_broken((get_turf(src)))
-
-
-/obj/item/corpsman_broken
- name = "broken corpsman shield"
- desc = "Might be able to be repaired with a welder."
- icon_state = "riot_broken"
- icon = 'modular_skyrat/modules/novaya_ert/icons/riot.dmi'
- w_class = WEIGHT_CLASS_BULKY
-
-/obj/item/corpsman_broken/welder_act(mob/living/user, obj/item/I)
- ..()
- new /obj/item/shield/riot/pointman/nri((get_turf(src)))
- qdel(src)
diff --git a/modular_skyrat/modules/novaya_ert/code/uniform.dm b/modular_skyrat/modules/novaya_ert/code/uniform.dm
deleted file mode 100644
index d4d65208b40..00000000000
--- a/modular_skyrat/modules/novaya_ert/code/uniform.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/obj/item/clothing/under/costume/nri //Copied from the russian outfit
- name = "advanced imperial fatigues"
- desc = "The latest in tactical and comfortable russian military outfits."
- icon = 'modular_skyrat/master_files/icons/obj/clothing/uniforms.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi'
- worn_icon_digi = 'modular_skyrat/master_files/icons/mob/clothing/uniform_digi.dmi'
- worn_icon_teshari = 'modular_skyrat/master_files/icons/mob/clothing/species/teshari/uniform.dmi'
- icon_state = "nri_soldier"
- inhand_icon_state = "hostrench"
- armor_type = /datum/armor/clothing_under/costume_nri
- strip_delay = 50
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
- can_adjust = FALSE
-
-/datum/armor/clothing_under/costume_nri
- melee = 10
- fire = 30
- acid = 30
-
-/obj/item/clothing/under/costume/nri/captain
- icon_state = "nri_captain"
-
-/obj/item/clothing/under/costume/nri/medic
- icon_state = "nri_medic"
-
-/obj/item/clothing/under/costume/nri/engineer
- icon_state = "nri_engineer"
diff --git a/modular_skyrat/modules/organs/code/heart.dm b/modular_skyrat/modules/organs/code/heart.dm
deleted file mode 100644
index 88f1de4ac4c..00000000000
--- a/modular_skyrat/modules/organs/code/heart.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/item/organ/internal/heart/snail
- name = "twin gastropod hearts"
- desc = "A primary heart normally nestled inside a gastropod's shell, and another in the owner's actual chest; necessary to maintain ample bloodflow through essentially two torsos."
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "heart-snail-on"
- base_icon_state = "heart-snail"
- maxHealth = 2 * STANDARD_ORGAN_THRESHOLD // There's two of them. Also, due to the special interaction below, it's best we make sure these aren't easily lost.
- now_fixed = span_info("Your hearts begin to beat again.") //For the sake of verisimilitude.
-
- COOLDOWN_DECLARE(shell_effect_cd)
-
-/obj/item/organ/internal/heart/snail/on_insert(mob/living/carbon/organ_owner, special)
- . = ..()
- if(!ishuman(organ_owner))
- return
-
- if(!issnail(organ_owner)) //This is cleaner than checking for the shell, because there's not really going to be any non-horribly-bugged situation in which a snail will be lacking a shell.
- return
-
- var/mob/living/carbon/human/human_owner = organ_owner
-
- RegisterSignal(human_owner, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(modify_damage))
- RegisterSignal(human_owner, COMSIG_MOB_AFTER_APPLY_DAMAGE, PROC_REF(do_block_effect))
-
-/obj/item/organ/internal/heart/snail/on_remove(mob/living/carbon/organ_owner, special)
- . = ..()
- if(!ishuman(organ_owner) || QDELETED(organ_owner))
- return
-
- var/mob/living/carbon/human/human_owner = organ_owner
-
- UnregisterSignal(human_owner, list(COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, COMSIG_MOB_AFTER_APPLY_DAMAGE))
-
-/**
- * Signal proc for [COMSIG_MOB_APPLY_DAMAGE_MODIFIERS]
- *
- * Adds a 0.5 modifier to attacks from the back, code borrowed (wholesale) from the roach heart.
- */
-/obj/item/organ/internal/heart/snail/proc/modify_damage(mob/living/carbon/human/source, list/damage_mods, damage_amount, damagetype, def_zone, sharpness, attack_direction, obj/item/attacking_item)
- SIGNAL_HANDLER
-
- if(!is_blocking(source, damage_amount, damagetype, attack_direction))
- return
-
- damage_mods += 0.5
-
-/**
- * Signal proc for [COMSIG_MOB_AFTER_APPLY_DAMAGE]
- *
- * Does a special effect if we blocked damage with our shell.
- */
-/obj/item/organ/internal/heart/snail/proc/do_block_effect(mob/living/carbon/human/source, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, obj/item/attacking_item)
- SIGNAL_HANDLER
-
- if(!is_blocking(source, damage_dealt, damagetype, attack_direction))
- return
-
- if(COOLDOWN_FINISHED(src, shell_effect_cd))
- source.visible_message(span_warning("[source]'s shell weathers the blow, absorbing most of the shock!"))
- playsound(source, 'sound/weapons/parry.ogg', 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
-
- COOLDOWN_START(src, shell_effect_cd, 5 SECONDS) // Cooldown resets EVERY time we get hit
-
-/// Checks if the passed mob is in a valid state to be blocking damage with the snail shell
-/obj/item/organ/internal/heart/snail/proc/is_blocking(mob/living/carbon/human/blocker, damage_amount, damagetype, attack_direction)
- if(damage_amount < 5 || damagetype != BRUTE || !attack_direction)
- return
- if(!ishuman(blocker) || blocker.stat >= UNCONSCIOUS)
- return FALSE
- // No tactical spinning
- if(HAS_TRAIT(blocker, TRAIT_SPINNING))
- return FALSE
- if(blocker.body_position == LYING_DOWN || (blocker.dir & attack_direction))
- return TRUE
- return FALSE
diff --git a/modular_skyrat/modules/organs/code/liver.dm b/modular_skyrat/modules/organs/code/liver.dm
deleted file mode 100644
index 8c275530084..00000000000
--- a/modular_skyrat/modules/organs/code/liver.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/organ/internal/liver/snail
- name = "gastropod liver"
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "liver-snail"
- desc = "Due to snailfolk evolving in typically poisonous environments such as bogs, their liver has a higher tolerance for poisons compared to most."
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- toxTolerance = 5 //can shrug off up to 5u of toxins
diff --git a/modular_skyrat/modules/organs/code/lungs.dm b/modular_skyrat/modules/organs/code/lungs.dm
deleted file mode 100644
index ff5e7ff7185..00000000000
--- a/modular_skyrat/modules/organs/code/lungs.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-/obj/item/organ/internal/lungs/cold
- name = "cold-adapted lungs"
- icon = 'modular_skyrat/modules/organs/icons/lungs.dmi'
- desc = "A set of lungs adapted to low temperatures, though they are more susceptible to high temperatures"
- icon_state = "lungs_cold"
- cold_message = "a slightly painful, though bearable, cold sensation"
- cold_level_1_threshold = 208
- cold_level_2_threshold = 200
- cold_level_3_threshold = 170
- cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_1 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
- cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_1
- cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_2
- cold_damage_type = BURN
-
- hot_message = "the searing heat with every breath you take"
- heat_level_1_threshold = 318
- heat_level_2_threshold = 348
- heat_level_3_threshold = 1000
- heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
- heat_damage_type = BURN
-
-
-/obj/item/organ/internal/lungs/hot
- name = "heat-adapted lungs"
- icon = 'modular_skyrat/modules/organs/icons/lungs.dmi'
- desc = "A set of lungs adapted to high temperatures, though they are more susceptible to low temperatures"
- icon_state = "lungs_heat"
- cold_message = "the freezing cold with every breath you take"
- cold_level_1_threshold = 248
- cold_level_2_threshold = 220
- cold_level_3_threshold = 170
- cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
- cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
- cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
- cold_damage_type = BURN
-
- hot_message = "a slightly painful, though bearable, warmth"
- heat_level_1_threshold = 373
- heat_level_2_threshold = 473
- heat_level_3_threshold = 523
- heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_1
- heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_1
- heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_damage_type = BURN
-
-/obj/item/organ/internal/lungs/toxin
- name = "toxin-adapted lungs"
- icon = 'modular_skyrat/modules/organs/icons/lungs.dmi'
- desc = "A set of lungs adapted to toxic environments, though more susceptible to extreme temperatures."
- icon_state = "lungs_toxin"
- safe_plasma_max = 27
- safe_co2_max = 27
-
- cold_message = "the freezing cold with every breath you take"
- cold_level_1_threshold = 248
- cold_level_2_threshold = 220
- cold_level_3_threshold = 170
- cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
- cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
- cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
- cold_damage_type = BRUTE
-
-
- hot_message = "the searing heat with every breath you take"
- heat_level_1_threshold = 318
- heat_level_2_threshold = 348
- heat_level_3_threshold = 1000
- heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
- heat_damage_type = BURN
-
-/obj/item/organ/internal/lungs/oxy
- name = "low-oxygen-adapted lungs"
- icon = 'modular_skyrat/modules/organs/icons/lungs.dmi'
- desc = "A set of lungs adapted to lower-pressure environments, though more susceptible to extreme temperatures."
- icon_state = "lungs_toxin"
- safe_oxygen_min = 5
-
- hot_message = "the searing heat with every breath you take"
- heat_level_1_threshold = 318
- heat_level_2_threshold = 348
- heat_level_3_threshold = 1000
- heat_level_1_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_2_damage = HEAT_GAS_DAMAGE_LEVEL_2
- heat_level_3_damage = HEAT_GAS_DAMAGE_LEVEL_3
- heat_damage_type = BURN
-
- cold_message = "the freezing cold with every breath you take"
- cold_level_1_threshold = 248
- cold_level_2_threshold = 220
- cold_level_3_threshold = 170
- cold_level_1_damage = COLD_GAS_DAMAGE_LEVEL_2 //Keep in mind with gas damage levels, you can set these to be negative, if you want someone to heal, instead.
- cold_level_2_damage = COLD_GAS_DAMAGE_LEVEL_2
- cold_level_3_damage = COLD_GAS_DAMAGE_LEVEL_3
- cold_damage_type = BURN
diff --git a/modular_skyrat/modules/organs/code/stomach.dm b/modular_skyrat/modules/organs/code/stomach.dm
deleted file mode 100644
index 03bdc1b9df7..00000000000
--- a/modular_skyrat/modules/organs/code/stomach.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-/obj/item/organ/internal/stomach/oversized
- name = "huge guts"
- desc = "Typically found in huge creatures, this monstrous engine has developed to be highly efficient, made to get an enormous amount of nutrients to an enormous eater."
- icon = 'modular_skyrat/modules/organs/icons/stomach.dmi'
- icon_state = "stomach_big"
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- metabolism_efficiency = 0.07
-
-/obj/item/organ/internal/stomach/synth/oversized
- name = "huge synthetic bio-reactor"
- desc = "Typically found in huge synthetics, this monstrous engine has been developed to be highly efficient, made to provide an enormous amount of power to an enormous machine."
- icon = 'modular_skyrat/modules/organs/icons/stomach.dmi'
- icon_state = "stomach_big_synth" //ugly placeholder sorry im not an artist hehe
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- metabolism_efficiency = 0.07
-
diff --git a/modular_skyrat/modules/organs/code/tongue.dm b/modular_skyrat/modules/organs/code/tongue.dm
deleted file mode 100644
index f2a4787ef86..00000000000
--- a/modular_skyrat/modules/organs/code/tongue.dm
+++ /dev/null
@@ -1,112 +0,0 @@
-/obj/item/organ/internal/tongue/copy_traits_from(obj/item/organ/internal/tongue/old_tongue, copy_actions = FALSE)
- . = ..()
- // make sure we get food preferences too, because those are now tied to tongues for some reason
- liked_foodtypes = old_tongue.liked_foodtypes
- disliked_foodtypes = old_tongue.disliked_foodtypes
- toxic_foodtypes = old_tongue.toxic_foodtypes
-
-/obj/item/organ/internal/tongue/dog
- name = "long tongue"
- desc = "A long and wet tongue. It seems to jump when it's called good, oddly enough."
- say_mod = "woofs"
- icon_state = "tongue"
- modifies_speech = TRUE
-
-/obj/item/organ/internal/tongue/dog/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE)
- . = ..()
- signer.verb_ask = "arfs"
- signer.verb_exclaim = "wans"
- signer.verb_whisper = "whimpers"
- signer.verb_yell = "barks"
-
-/obj/item/organ/internal/tongue/dog/Remove(mob/living/carbon/speaker, special = FALSE)
- ..()
- speaker.verb_ask = initial(verb_ask)
- speaker.verb_exclaim = initial(verb_exclaim)
- speaker.verb_whisper = initial(verb_whisper)
- speaker.verb_sing = initial(verb_sing)
- speaker.verb_yell = initial(verb_yell)
-
-/obj/item/organ/internal/tongue/avian
- name = "avian tongue"
- desc = "A short and stubby tongue that craves seeds."
- say_mod = "chirps"
- icon_state = "tongue"
- modifies_speech = TRUE
-
-/obj/item/organ/internal/tongue/avian/Insert(mob/living/carbon/signer, special = FALSE, drop_if_replaced = TRUE)
- . = ..()
- signer.verb_ask = "peeps"
- signer.verb_exclaim = "squawks"
- signer.verb_whisper = "murmurs"
- signer.verb_yell = "shrieks"
-
-/obj/item/organ/internal/tongue/avian/Remove(mob/living/carbon/speaker, special = FALSE)
- . = ..()
- speaker.verb_ask = initial(verb_ask)
- speaker.verb_exclaim = initial(verb_exclaim)
- speaker.verb_whisper = initial(verb_whisper)
- speaker.verb_sing = initial(verb_sing)
- speaker.verb_yell = initial(verb_yell)
-
-/// This "human" tongue is only used in Character Preferences / Augmentation menu.
-/// The base tongue class lacked a say_mod. With say_mod included it makes a non-Human user sound like a Human.
-/obj/item/organ/internal/tongue/human
- say_mod = "says"
-
-/obj/item/organ/internal/tongue/cybernetic
- name = "cybernetic tongue"
- icon = 'modular_skyrat/modules/organs/icons/cyber_tongue.dmi'
- icon_state = "cybertongue"
- desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
- say_mod = "says"
- // Not as good as organic tongues, not as bad as the robotic voicebox.
- taste_sensitivity = 20
-
-/obj/item/organ/internal/tongue/vox
- name = "vox tongue"
- desc = "A fleshy muscle mostly used for skreeing."
- say_mod = "skrees"
- liked_foodtypes = MEAT | FRIED
-
-/obj/item/organ/internal/tongue/dwarven
- name = "dwarven tongue"
- desc = "A fleshy muscle mostly used for bellowing."
- say_mod = "bellows"
- liked_foodtypes = ALCOHOL | MEAT | DAIRY //Dwarves like alcohol, meat, and dairy products.
- disliked_foodtypes = JUNKFOOD | FRIED | CLOTH //Dwarves hate foods that have no nutrition other than alcohol.
-
-/obj/item/organ/internal/tongue/ghoul
- name = "ghoulish tongue"
- desc = "A fleshy muscle mostly used for rasping."
- say_mod = "rasps"
- liked_foodtypes = RAW | MEAT
- disliked_foodtypes = VEGETABLES | FRUIT | CLOTH
- toxic_foodtypes = DAIRY | PINEAPPLE
-
-/obj/item/organ/internal/tongue/insect
- name = "insect tongue"
- desc = "A fleshy muscle mostly used for chittering."
- say_mod = "chitters"
- liked_foodtypes = GROSS | RAW | TOXIC | GORE
- disliked_foodtypes = CLOTH | GRAIN | FRIED
- toxic_foodtypes = DAIRY
-
-/obj/item/organ/internal/tongue/xeno_hybrid
- name = "alien tongue"
- desc = "According to leading xenobiologists the evolutionary benefit of having a second mouth in your mouth is \"that it looks badass\"."
- icon_state = "tonguexeno"
- say_mod = "hisses"
- taste_sensitivity = 10
- liked_foodtypes = MEAT
-
-/obj/item/organ/internal/tongue/xeno_hybrid/Initialize(mapload)
- . = ..()
- var/obj/item/organ/internal/tongue/alien/alien_tongue_type = /obj/item/organ/internal/tongue/alien
- voice_filter = initial(alien_tongue_type.voice_filter)
-
-/obj/item/organ/internal/tongue/skrell
- name = "skrell tongue"
- desc = "A fleshy muscle mostly used for warbling."
- say_mod = "warbles"
diff --git a/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm b/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm
deleted file mode 100644
index a1effed97b5..00000000000
--- a/modular_skyrat/modules/paycheck_rations/code/rationpacks.dm
+++ /dev/null
@@ -1,110 +0,0 @@
-/obj/item/storage/box/spaceman_ration
- name = "unlabeled ration container"
- desc = "You get the feeling you sholdn't have been sent this one?"
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- icon_state = "plants"
- illustration = null
- /// How many storage slots this has, yes I'm being lazy
- var/box_storage_slots = 1
-
-/obj/item/storage/box/spaceman_ration/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = box_storage_slots
-
-/obj/item/storage/box/spaceman_ration/PopulateContents()
- return
-
-// Contains your daily need of plants, yum!
-
-/obj/item/storage/box/spaceman_ration/plants
- name = "produce ration container"
- desc = "Contains your allotted ration of produce, which in this case should be peas and a potato."
- box_storage_slots = 2
-
-/obj/item/storage/box/spaceman_ration/plants/PopulateContents()
- new /obj/item/food/grown/peas(src)
- new /obj/item/food/grown/potato(src)
-
-// Alternate diet, themed around martian food a bit more
-
-/obj/item/storage/box/spaceman_ration/plants/alternate
- desc = "Contains your allotted ration of produce, which in this case should be cabbage and an onion."
- icon_state = "plants_alt"
-
-/obj/item/storage/box/spaceman_ration/plants/alternate/PopulateContents()
- new /obj/item/food/grown/cabbage(src)
- new /obj/item/food/grown/onion(src)
-
-// For the moths amogus
-
-/obj/item/storage/box/spaceman_ration/plants/mothic
- desc = "Contains your allotted ration of produce, which in this case should be chili and a potato."
- icon_state = "plants_moth"
-
-/obj/item/storage/box/spaceman_ration/plants/mothic/PopulateContents()
- new /obj/item/food/grown/chili(src)
- new /obj/item/food/grown/potato(src)
-
-// For the lizards amongus
-
-/obj/item/storage/box/spaceman_ration/plants/lizard
- desc = "Contains your allotted ration of produce, which in this case should be two korta nuts and two potatoes."
- icon_state = "plants_lizard"
- box_storage_slots = 4
-
-/obj/item/storage/box/spaceman_ration/plants/lizard/PopulateContents()
- new /obj/item/food/grown/korta_nut(src)
- new /obj/item/food/grown/korta_nut(src)
- new /obj/item/food/grown/potato(src)
- new /obj/item/food/grown/potato(src)
-
-// Contains your allotted meats, tasty!
-
-/obj/item/storage/box/spaceman_ration/meats
- name = "meat ration container"
- desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random side option."
- icon_state = "meats"
-
-/obj/item/storage/box/spaceman_ration/meats/PopulateContents()
- new /obj/item/food/meat/slab/pig(src)
- var/secondary_meat = pick(/obj/item/food/raw_sausage, /obj/item/food/meat/slab/chicken, /obj/item/food/meat/slab/meatproduct)
- new secondary_meat(src)
-
-// Seafood variant
-
-/obj/item/storage/box/spaceman_ration/meats/fish
- desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option."
- icon_state = "meats_fish"
-
-/obj/item/storage/box/spaceman_ration/meats/fish/PopulateContents()
- new /obj/item/food/meat/slab/pig(src)
- var/secondary_meat = pick(/obj/item/food/meat/slab/rawcrab, /obj/item/food/fishmeat)
- new secondary_meat(src)
-
-// For the lizards amongus
-
-/obj/item/storage/box/spaceman_ration/meats/lizard
- desc = "Contains your allotted ration of meat, which in this case should be preserved pork and a random seafood side option."
- icon_state = "meats_lizard"
-
-/obj/item/storage/box/spaceman_ration/meats/lizard/PopulateContents()
- new /obj/item/food/fishmeat/moonfish(src)
- var/secondary_meat = pick(/obj/item/food/raw_tiziran_sausage, /obj/item/food/liver_pate)
- new secondary_meat(src)
-
-// Paper sack that spawns a random two slices of bread
-
-/obj/item/storage/box/papersack/ration_bread_slice
- name = "bread and cheese ration bag"
- desc = "A dusty old paper sack that should ideally contain your ration of bread and cheese."
-
-/obj/item/storage/box/papersack/ration_bread_slice/Initialize(mapload)
- . = ..()
- atom_storage.max_slots = 3
-
-/obj/item/storage/box/papersack/ration_bread_slice/PopulateContents()
- var/bread_slice = pick(/obj/item/food/breadslice/plain, /obj/item/food/breadslice/reispan, /obj/item/food/breadslice/root)
- new bread_slice(src)
- new bread_slice(src)
- var/cheese_slice = pick(/obj/item/food/cheese/wedge, /obj/item/food/cheese/firm_cheese_slice, /obj/item/food/cheese/cheese_curds, /obj/item/food/cheese/mozzarella)
- new cheese_slice(src)
diff --git a/modular_skyrat/modules/paycheck_rations/code/reagents.dm b/modular_skyrat/modules/paycheck_rations/code/reagents.dm
deleted file mode 100644
index eefcce274af..00000000000
--- a/modular_skyrat/modules/paycheck_rations/code/reagents.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-/obj/item/reagent_containers/condiment/flour/small_ration
- name = "small flour sack"
- desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- list_reagents = list(/datum/reagent/consumable/flour = 15)
-
-/obj/item/reagent_containers/condiment/rice/small_ration
- name = "small rice sack"
- desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- list_reagents = list(/datum/reagent/consumable/rice = 10)
-
-/obj/item/reagent_containers/condiment/sugar/small_ration
- name = "small sugar sack"
- desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- list_reagents = list(/datum/reagent/consumable/sugar = 10)
-
-/obj/item/reagent_containers/condiment/small_ration_korta_flour
- name = "small korta flour sack"
- desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- icon_state = "flour_korta"
- inhand_icon_state = "carton"
- lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/items/drinks_righthand.dmi'
- list_reagents = list(/datum/reagent/consumable/korta_flour = 10)
- fill_icon_thresholds = null
-
-/obj/item/reagent_containers/condiment/soymilk/small_ration
- name = "small soy milk"
- desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with."
- icon = 'modular_skyrat/modules/paycheck_rations/icons/food_containers.dmi'
- list_reagents = list(/datum/reagent/consumable/soymilk = 15)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny
- name = "tiny glass bottle"
- volume = 10
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/Initialize(mapload, vol)
- . = ..()
- transform = transform.Scale(0.75, 0.75)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/lime_juice
- name = "tiny lime juice bottle"
- desc = "A maritime ration-sized bottle of lime juice, containing enough to keep the scurvy away while on long voyages."
- list_reagents = list(/datum/reagent/consumable/limejuice = 10)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/vinegar
- name = "tiny vinegar bottle"
- desc = "A maritime ration-sized bottle of vinegar, containing enough to... Well, we're not entirely sure, but law mandates you're given this, so..."
- list_reagents = list(/datum/reagent/consumable/vinegar = 10)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/coffee
- name = "tiny coffee powder bottle"
- desc = "A maritime ration-sized bottle of coffee powder, containing enough to make a morning's brew."
- list_reagents = list(/datum/reagent/toxin/coffeepowder = 10)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/tea
- name = "tiny tea powder bottle"
- desc = "A maritime ration-sized bottle of tea powder, containing enough to make a morning's tea."
- list_reagents = list(/datum/reagent/toxin/teapowder = 10)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/honey
- name = "tiny honey bottle"
- desc = "A maritime ration-sized bottle of honey, a minuscule amount for a minuscule sweetening to your day."
- list_reagents = list(/datum/reagent/consumable/honey = 5)
-
-/obj/item/reagent_containers/cup/glass/bottle/small/tiny/caramel
- name = "tiny caramel bottle"
- desc = "A maritime ration-sized bottle of caramel, in the past these used to be something called 'treacle', which was \
- the tar left over from refining sugar. Nowadays, governments are rich enough to just send caramel instead."
- list_reagents = list(/datum/reagent/consumable/caramel = 10)
diff --git a/modular_skyrat/modules/pixel_shift/readme.md b/modular_skyrat/modules/pixel_shift/readme.md
deleted file mode 100644
index 296058a4141..00000000000
--- a/modular_skyrat/modules/pixel_shift/readme.md
+++ /dev/null
@@ -1,34 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/870
-
-## Title: Pixel shifting for RP positioning
-
-MODULE ID: PIXEL_SHIFT
-
-### Description:
-
-Adds the ability for living mobs to shift their sprite to fit an RP situation better (standing against a wall for example). Not appended to proc due to it being a busy proc
-
-### TG Proc/File Changes:
-
-- N/A
-
-### Modular Overrides:
-
-- `modular_skyrat/master_files/code/datums/keybinding/mob.dm`: `var/list/hotkey_keys`
-- `modular_skyrat/master_files/code/modules/mob/living/living.dm`: `proc/set_pull_offsets`, `proc/reset_pull_offsets`
-- `modular_skyrat/master_files/code/modules/mob/living/living_movement.dm`: `proc/CanAllowThrough`
-
-### Defines:
-
-- `code/__DEFINES/~skyrat_defines/keybindings.dm`: `COMSIG_KB_MOB_PIXEL_SHIFT_DOWN`, `COMSIG_KB_MOB_PIXEL_SHIFT_UP`
-- `code/__DEFINES/~skyrat_defines/living.dm`: `COMSIG_LIVING_SET_PULL_OFFSET`, `COMSIG_LIVING_RESET_PULL_OFFSETS`, `COMSIG_LIVING_CAN_ALLOW_THROUGH`, `COMPONENT_LIVING_PASSABLE`
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Azarak - Porting
-Gandalf2k15 - Refactoring
-Larentoun - Moved to Component
diff --git a/modular_skyrat/modules/primitive_catgirls/code/clothing.dm b/modular_skyrat/modules/primitive_catgirls/code/clothing.dm
deleted file mode 100644
index 9c7a378c3ff..00000000000
--- a/modular_skyrat/modules/primitive_catgirls/code/clothing.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-// The naming of every path in this file is going to be awful :smiling_imp:
-
-// Outfit Datum
-
-/datum/outfit/primitive_catgirl
- name = "Icemoon Dweller"
-
- uniform = /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
- shoes = /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
- gloves = /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
- suit = /obj/item/clothing/suit/jacket/primitive_catgirl_coat
- neck = /obj/item/clothing/neck/scarf/primitive_catgirl_scarf
-
- back = /obj/item/forging/reagent_weapon/axe/fake_copper
-
-// Under
-
-/obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps
- name = "body wraps"
- desc = "Some pretty simple wraps to cover up your lower bits."
- icon_state = "wraps"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- body_parts_covered = GROIN
- greyscale_config = /datum/greyscale_config/primitive_catgirl_wraps
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_wraps/worn
- greyscale_colors = "#cec8bf#364660"
- flags_1 = IS_PLAYER_COLORABLE_1
- has_sensor = FALSE
-
-// Hands
-
-/obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps
- name = "arm wraps"
- desc = "Simple cloth to wrap around one's arms."
- icon_state = "armwraps"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- greyscale_config = /datum/greyscale_config/primitive_catgirl_armwraps
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_armwraps/worn
- greyscale_colors = "#cec8bf"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets
- name = "gauntlets"
- desc = "Simple cloth arm wraps with overlying metal protection."
- icon_state = "gauntlets"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- greyscale_config = /datum/greyscale_config/primitive_catgirl_gauntlets
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gauntlets/worn
- greyscale_config_inhand_left = null
- greyscale_config_inhand_right = null
- greyscale_colors = "#cec8bf#c55a1d"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-// Suit
-
-/obj/item/clothing/suit/jacket/primitive_catgirl_coat
- name = "primitive fur coat"
- desc = "A large piece of animal hide stuffed with fur, likely from the same animal."
- icon_state = "coat"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- body_parts_covered = CHEST
- cold_protection = CHEST
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- greyscale_config = /datum/greyscale_config/primitive_catgirl_coat
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_coat/worn
- greyscale_colors = "#594032#cec8bf"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-/obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather
- greyscale_colors = "#594032"
-
-// Shoes
-
-/obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots
- name = "primitive hiking boots"
- desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice."
- icon_state = "boots"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- greyscale_config = /datum/greyscale_config/primitive_catgirl_boots
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn
- greyscale_colors = "#594032#cec8bf"
- flags_1 = IS_PLAYER_COLORABLE_1
-
-// Neck
-
-/obj/item/clothing/neck/scarf/primitive_catgirl_scarf
- greyscale_colors = "#cec8bf#cec8bf"
-
-/obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white
- greyscale_colors = "#cec8bf#cec8bf"
-
-/obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue
- greyscale_colors = "#364660"
-
-/obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white
- greyscale_colors = "#cec8bf"
-
-/obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather
- greyscale_colors = "#594032#594032"
-
-// Masks
-
-/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter
- name = "neck gaiter"
- desc = "A cloth for covering your neck, and usually part of your face too, but that part's optional."
- icon_state = "gaiter"
- inhand_icon_state = "balaclava"
- icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- worn_icon = 'modular_skyrat/modules/primitive_catgirls/icons/clothing_greyscale.dmi'
- greyscale_config = /datum/greyscale_config/primitive_catgirl_gaiter
- greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_gaiter/worn
- greyscale_colors = "#364660"
- w_class = WEIGHT_CLASS_TINY
- flags_inv = HIDEFACE|HIDESNOUT
- flags_cover = MASKCOVERSMOUTH
- visor_flags_inv = HIDEFACE|HIDESNOUT
- visor_flags_cover = MASKCOVERSMOUTH
- flags_1 = IS_PLAYER_COLORABLE_1
- actions_types = list(/datum/action/item_action/adjust)
-
-/obj/item/clothing/mask/primitive_catgirl_greyscale_gaiter/attack_self(mob/user)
- adjustmask(user)
-
-// Head
-
-/obj/item/clothing/head/standalone_hood/primitive_catgirl_colors
- greyscale_colors = "#594032#364660"
-
-// Misc Items
-
-/obj/item/forging/reagent_weapon/axe/fake_copper
- custom_materials = list(/datum/material/copporcitite = SHEET_MATERIAL_AMOUNT)
diff --git a/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm b/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm
deleted file mode 100644
index eea8fb56d66..00000000000
--- a/modular_skyrat/modules/primitive_structures/code/totally_thatch_roof.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/turf/open/misc/grass/roofing
- name = "thatched roof"
- desc = "A collection of various dried greens, not so green anymore, that makes a passable roof material."
- baseturfs = /turf/open/openspace/icemoon
- initial_gas_mix = "ICEMOON_ATMOS"
- icon_state = "grass-255"
- icon = 'modular_skyrat/modules/primitive_structures/icons/roofing.dmi'
- smooth_icon = 'modular_skyrat/modules/primitive_structures/icons/roofing.dmi'
diff --git a/modular_skyrat/modules/primitive_structures/code/windows.dm b/modular_skyrat/modules/primitive_structures/code/windows.dm
deleted file mode 100644
index ec861bb2d12..00000000000
--- a/modular_skyrat/modules/primitive_structures/code/windows.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/obj/structure/window/green_glass_pane
- name = "green glass window"
- desc = "A handcrafted green glass window. At least you can still see through it."
- icon = 'modular_skyrat/modules/primitive_structures/icons/windows.dmi'
- icon_state = "green_glass"
- flags_1 = NONE
- obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION
- can_be_unanchored = FALSE
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
diff --git a/modular_skyrat/modules/radiosound/code/headset.dm b/modular_skyrat/modules/radiosound/code/headset.dm
deleted file mode 100644
index 321fb9e40a0..00000000000
--- a/modular_skyrat/modules/radiosound/code/headset.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/item/radio/headset
- var/radiosound = 'modular_skyrat/modules/radiosound/sound/radio/common.ogg'
-
-/obj/item/radio/headset/syndicate //disguised to look like a normal headset for stealth ops
- radiosound = 'modular_skyrat/modules/radiosound/sound/radio/syndie.ogg'
-
-/obj/item/radio/headset/headset_sec
- radiosound = 'modular_skyrat/modules/radiosound/sound/radio/security.ogg'
-
-/obj/item/radio/headset/talk_into(mob/living/M, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE)
- if(radiosound && listening)
- playsound(M, radiosound, rand(20, 30), 0, 0, SOUND_FALLOFF_EXPONENT)
- . = ..()
diff --git a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm b/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm
deleted file mode 100644
index 93fddaecf32..00000000000
--- a/modular_skyrat/modules/reagent_forging/code/forge_clothing.dm
+++ /dev/null
@@ -1,172 +0,0 @@
-// Vests
-/obj/item/clothing/suit/armor/forging_plate_armor
- name = "reagent plate vest"
- desc = "An armor vest made of hammered, interlocking plates."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
- worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
- icon_state = "plate_vest"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- resistance_flags = FIRE_PROOF
- skyrat_obj_flags = ANVIL_REPAIR
- armor_type = /datum/armor/armor_forging_plate_armor
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
-
-/datum/armor/armor_forging_plate_armor
- melee = 40
- bullet = 40
- fire = 50
- wound = 30
-
-/obj/item/clothing/suit/armor/forging_plate_armor/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 4)
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_OCLOTHING)
-
- allowed += /obj/item/forging/reagent_weapon
-
-// Gloves
-/obj/item/clothing/gloves/forging_plate_gloves
- name = "reagent plate gloves"
- desc = "A set of leather gloves with protective armor plates connected to the wrists."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
- worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
- icon_state = "plate_gloves"
- resistance_flags = FIRE_PROOF
- skyrat_obj_flags = ANVIL_REPAIR
- armor_type = /datum/armor/gloves_forging_plate_gloves
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
-
-/datum/armor/gloves_forging_plate_gloves
- melee = 40
- bullet = 40
- fire = 50
- wound = 30
-
-/obj/item/clothing/gloves/forging_plate_gloves/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 4)
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES)
-
-// Helmets
-/obj/item/clothing/head/helmet/forging_plate_helmet
- name = "reagent plate helmet"
- desc = "A helmet out of hammered plates with a leather neck guard and chin strap."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
- worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
- icon_state = "plate_helmet"
- supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON
- resistance_flags = FIRE_PROOF
- flags_inv = null
- skyrat_obj_flags = ANVIL_REPAIR
- armor_type = /datum/armor/helmet_forging_plate_helmet
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
-
-/datum/armor/helmet_forging_plate_helmet
- melee = 40
- bullet = 40
- fire = 50
- wound = 30
-
-/obj/item/clothing/head/helmet/forging_plate_helmet/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 4)
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HEAD)
-
-// Boots
-/obj/item/clothing/shoes/forging_plate_boots
- name = "reagent plate boots"
- desc = "A pair of leather boots with protective armor plates over the shins and toes."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
- worn_icon_digi = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_digi.dmi'
- worn_icon_better_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_newvox.dmi'
- worn_icon_vox = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_oldvox.dmi'
- worn_icon_teshari = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing_teshari.dmi'
- icon_state = "plate_boots"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
- armor_type = /datum/armor/shoes_forging_plate_boots
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
- resistance_flags = FIRE_PROOF
- skyrat_obj_flags = ANVIL_REPAIR
- can_be_tied = FALSE
-
-/datum/armor/shoes_forging_plate_boots
- melee = 20
- bullet = 20
-
-/obj/item/clothing/shoes/forging_plate_boots/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 2)
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET)
-
-/obj/item/clothing/shoes/horseshoe
- name = "reagent horseshoe"
- desc = "A pair of horseshoes made out of chains."
- icon = 'modular_skyrat/modules/reagent_forging/icons/obj/forge_clothing.dmi'
- worn_icon = 'modular_skyrat/modules/reagent_forging/icons/mob/clothing/forge_clothing.dmi'
- icon_state = "horseshoe"
- supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
- armor_type = /datum/armor/shoes_horseshoe
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
- resistance_flags = FIRE_PROOF
- skyrat_obj_flags = ANVIL_REPAIR
- can_be_tied = FALSE
-
-/datum/armor/shoes_horseshoe
- melee = 20
- bullet = 20
-
-/obj/item/clothing/shoes/horseshoe/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/armor_plate, 2)
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_FEET)
-
-// Misc
-/obj/item/clothing/gloves/ring/reagent_clothing
- name = "reagent ring"
- desc = "A tiny ring, sized to wrap around a finger."
- icon_state = "ringsilver"
- worn_icon_state = "sring"
- inhand_icon_state = null
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
- skyrat_obj_flags = ANVIL_REPAIR
-
-/obj/item/clothing/gloves/ring/reagent_clothing/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_GLOVES)
-
-/obj/item/clothing/neck/collar/reagent_clothing
- name = "reagent collar"
- desc = "A collar that is ready to be worn for certain individuals."
- icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_clothing/lewd_neck.dmi'
- worn_icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/mob/lewd_clothing/lewd_neck.dmi'
- icon_state = "collar_cyan"
- inhand_icon_state = null
- body_parts_covered = NECK
- slot_flags = ITEM_SLOT_NECK
- w_class = WEIGHT_CLASS_SMALL
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
- skyrat_obj_flags = ANVIL_REPAIR
-
-/obj/item/clothing/neck/collar/reagent_clothing/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_NECK)
-
-/obj/item/restraints/handcuffs/reagent_clothing
- name = "reagent handcuffs"
- desc = "A pair of handcuffs that are ready to keep someone captive."
- material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_GREYSCALE | MATERIAL_COLOR
- skyrat_obj_flags = ANVIL_REPAIR
-
-/obj/item/restraints/handcuffs/reagent_clothing/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/reagent_clothing, ITEM_SLOT_HANDCUFFED)
diff --git a/modular_skyrat/modules/salon/code/barber_chair.dm b/modular_skyrat/modules/salon/code/barber_chair.dm
deleted file mode 100644
index 5237ab20772..00000000000
--- a/modular_skyrat/modules/salon/code/barber_chair.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/structure/chair/comfy/barber_chair
- name = "barber's chair"
- desc = "You sit in this, and your hair shall be cut."
- icon = 'modular_skyrat/modules/salon/icons/chair.dmi'
- icon_state = "barber_chair"
diff --git a/modular_skyrat/modules/salon/code/clothing.dm b/modular_skyrat/modules/salon/code/clothing.dm
deleted file mode 100644
index 85b9e483756..00000000000
--- a/modular_skyrat/modules/salon/code/clothing.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/obj/item/clothing/under/rank/barber
- desc = "Stark white pants and a fancy hot-pink shirt with a low neckline, though its preferred to wear it even lower. It's the hottest new trend, darling!"
- name = "barber's uniform"
- icon = 'modular_skyrat/master_files/icons/obj/clothing/under/civilian.dmi'
- worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/civilian.dmi'
- icon_state = "barber"
diff --git a/modular_skyrat/modules/salon/code/misc_items.dm b/modular_skyrat/modules/salon/code/misc_items.dm
deleted file mode 100644
index a65c4f92417..00000000000
--- a/modular_skyrat/modules/salon/code/misc_items.dm
+++ /dev/null
@@ -1,194 +0,0 @@
-
-/obj/item/storage/box/lipsticks
- name = "lipstick box"
-
-/obj/item/storage/box/lipsticks/PopulateContents()
- ..()
- new /obj/item/lipstick(src)
- new /obj/item/lipstick/purple(src)
- new /obj/item/lipstick/jade(src)
- new /obj/item/lipstick/black(src)
-
-/obj/item/lipstick/quantum
- name = "quantum lipstick"
-
-/obj/item/lipstick/quantum/attack(mob/attacked_mob, mob/user)
- if(!open || !ismob(attacked_mob))
- return
-
- if(!ishuman(attacked_mob))
- to_chat(user, span_warning("Where are the lips on that?"))
- return
-
- INVOKE_ASYNC(src, PROC_REF(async_set_color), attacked_mob, user)
-
-/obj/item/lipstick/quantum/proc/async_set_color(mob/attacked_mob, mob/user)
- var/new_color = input(
- user,
- "Select lipstick color",
- null,
- COLOR_WHITE,
- ) as color | null
-
- var/mob/living/carbon/human/target = attacked_mob
- if(target.is_mouth_covered())
- to_chat(user, span_warning("Remove [ target == user ? "your" : "[target.p_their()]" ] mask!"))
- return
- if(target.lip_style) //if they already have lipstick on
- to_chat(user, span_warning("You need to wipe off the old lipstick first!"))
- return
-
- if(target == user)
- user.visible_message(span_notice("[user] does [user.p_their()] lips with \the [src]."), \
- span_notice("You take a moment to apply \the [src]. Perfect!"))
- target.update_lips("lipstick", new_color, lipstick_trait)
- return
-
- user.visible_message(span_warning("[user] begins to do [target]'s lips with \the [src]."), \
- span_notice("You begin to apply \the [src] on [target]'s lips..."))
- if(!do_after(user, 2 SECONDS, target = target))
- return
- user.visible_message(span_notice("[user] does [target]'s lips with \the [src]."), \
- span_notice("You apply \the [src] on [target]'s lips."))
- target.update_lips("lipstick", new_color, lipstick_trait)
-
-/obj/item/hairbrush/comb
- name = "comb"
- desc = "A rather simple tool, used to straighten out hair and knots in it."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
- icon_state = "blackcomb"
-
-/obj/item/hairstyle_preview_magazine
- name = "hip hairstyles magazine"
- desc = "A magazine featuring a magnitude of hairsytles!"
-
-/obj/item/hairstyle_preview_magazine/ui_interact(mob/user, datum/tgui/ui)
- . = ..()
- // A simple GUI with a list of hairstyles and a view, so people can choose a hairstyle!
-
-/obj/effect/decal/cleanable/hair
- name = "hair cuttings"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
- icon_state = "cut_hair"
-
-/obj/item/razor
- name = "electric razor"
- desc = "The latest and greatest power razor born from the science of shaving."
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
- icon_state = "razor"
- obj_flags = CONDUCTS_ELECTRICITY
- w_class = WEIGHT_CLASS_TINY
- // How long do we take to shave someone's (facial) hair?
- var/shaving_time = 5 SECONDS
-
-/obj/item/razor/suicide_act(mob/living/carbon/user)
- user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!"))
- shave(user, BODY_ZONE_PRECISE_MOUTH)
- shave(user, BODY_ZONE_HEAD)//doesnt need to be BODY_ZONE_HEAD specifically, but whatever
- return BRUTELOSS
-
-/obj/item/razor/proc/shave(mob/living/carbon/human/target_human, location = BODY_ZONE_PRECISE_MOUTH)
- if(location == BODY_ZONE_PRECISE_MOUTH)
- target_human.set_facial_hairstyle("Shaved", update = TRUE)
- else
- target_human.set_hairstyle("Bald", update = TRUE)
-
- playsound(loc, 'sound/items/unsheath.ogg', 20, TRUE)
-
-
-/obj/item/razor/attack(mob/attacked_mob, mob/living/user)
- if(!ishuman(attacked_mob))
- return ..()
-
- var/mob/living/carbon/human/target_human = attacked_mob
- var/location = user.zone_selected
- var/obj/item/bodypart/head/noggin = target_human.get_bodypart(BODY_ZONE_HEAD)
- var/static/list/head_zones = list(BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_HEAD)
-
- if(!noggin && (location in head_zones))
- to_chat(user, span_warning("[target_human] doesn't have a head!"))
- return
-
- if(!(location in head_zones) && !user.combat_mode)
- to_chat(user, span_warning("You stop, look down at what you're currently holding and ponder to yourself, \"This is probably to be used on their hair or their facial hair.\""))
- return
-
- if(location == BODY_ZONE_PRECISE_MOUTH)
- if(!(noggin.head_flags & HEAD_FACIAL_HAIR))
- to_chat(user, span_warning("There is no facial hair to shave!"))
- return
-
- if(!get_location_accessible(target_human, location))
- to_chat(user, span_warning("The mask is in the way!"))
- return
-
- if(HAS_TRAIT(target_human, TRAIT_SHAVED))
- to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved."))
- return
-
- if(target_human.facial_hairstyle == "Shaved")
- to_chat(user, span_warning("Already clean-shaven!"))
- return
-
- var/self_shaving = target_human == user // Shaving yourself?
- user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \
- span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]..."))
-
- if(do_after(user, shaving_time, target = target_human))
- user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \
- span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!"))
-
- shave(target_human, location)
-
- else if(location == BODY_ZONE_HEAD)
- if(!(noggin.head_flags & HEAD_HAIR))
- to_chat(user, span_warning("There is no hair to shave!"))
- return
-
- if(!get_location_accessible(target_human, location))
- to_chat(user, span_warning("The headgear is in the way!"))
- return
-
- if(target_human.hairstyle == "Bald" || target_human.hairstyle == "Balding Hair" || target_human.hairstyle == "Skinhead")
- to_chat(user, span_warning("There is not enough hair left to shave!"))
- return
-
- if(HAS_TRAIT(target_human, TRAIT_SHAVED))
- to_chat(user, span_warning("[target_human] is just way too shaved. Like, really really shaved."))
- return
-
- var/self_shaving = target_human == user // Shaving yourself?
- user.visible_message(span_notice("[user] starts to shave [self_shaving ? user.p_their() : "[target_human]'s"] hair with [src]."), \
- span_notice("You take a moment to shave [self_shaving ? "your" : "[target_human]'s" ] hair with [src]..."))
-
- if(do_after(user, shaving_time, target = target_human))
- user.visible_message(span_notice("[user] shaves [self_shaving ? user.p_their() : "[target_human]'s"] hair clean with [src]."), \
- span_notice("You finish shaving [self_shaving ? "your" : " [target_human]'s"] hair with [src]. Fast and clean!"))
-
- shave(target_human, location)
-
- return
-
- return ..()
-
-/obj/structure/sign/barber
- name = "barbershop sign"
- desc = "A glowing red-blue-white stripe you won't mistake for any other!"
- icon = 'modular_skyrat/modules/salon/icons/items.dmi'
- icon_state = "barber"
- buildable_sign = FALSE // Don't want them removed, they look too jank.
-
-/obj/item/storage/box/perfume
- name = "box of perfumes"
-
-/obj/item/storage/box/perfume/PopulateContents()
- new /obj/item/perfume/cologne(src)
- new /obj/item/perfume/wood(src)
- new /obj/item/perfume/rose(src)
- new /obj/item/perfume/jasmine(src)
- new /obj/item/perfume/mint(src)
- new /obj/item/perfume/vanilla(src)
- new /obj/item/perfume/pear(src)
- new /obj/item/perfume/strawberry(src)
- new /obj/item/perfume/cherry(src)
- new /obj/item/perfume/amber(src)
diff --git a/modular_skyrat/modules/science_tools/readme.md b/modular_skyrat/modules/science_tools/readme.md
deleted file mode 100644
index c07b765a226..00000000000
--- a/modular_skyrat/modules/science_tools/readme.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/24162
-
-## Science tools
-
-Module ID: SCIENCE_TOOLS
-
-### Description: Lets sci print watered down engi tools, and robotics, medical tools.
-
-
-
-### TG Proc/File Changes:
-
-- N/A
-
-
-### Modular Overrides:
-
-- N/A
-
-
-### Defines:
-
-- 2 defines in research.dm
-
-
-### Included files that are not contained in this module:
-
-- ~skyrat_defines/research.dm
-
-
-### Credits:
-
-- Niko: Author
-
-
diff --git a/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm b/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm
deleted file mode 100644
index 9b49e70e22d..00000000000
--- a/modular_skyrat/modules/sec_haul/code/corrections_officer/landmarks.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/obj/effect/landmark/start/corrections_officer
- name = "Corrections Officer"
- icon = 'modular_skyrat/master_files/icons/mob/landmarks.dmi'
- icon_state = "Corrections Officer"
diff --git a/modular_skyrat/modules/sec_haul/code/misc/decals.dm b/modular_skyrat/modules/sec_haul/code/misc/decals.dm
deleted file mode 100644
index 3fbb63b6f75..00000000000
--- a/modular_skyrat/modules/sec_haul/code/misc/decals.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/obj/effect/turf_decal/stripes/blue
- icon_state = "warningline_blue"
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
-
-/obj/effect/turf_decal/stripes/blue/line
- icon_state = "warningline_blue"
-
-/obj/effect/turf_decal/stripes/blue/end
- icon_state = "warn_end_blue"
-
-/obj/effect/turf_decal/stripes/blue/corner
- icon_state = "warninglinecorner_blue"
-
-/obj/effect/turf_decal/stripes/blue/box
- icon_state = "warn_box_blue"
-
-/obj/effect/turf_decal/stripes/blue/full
- icon_state = "warn_full_blue"
-
-/obj/effect/turf_decal/bot_blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "bot_blue"
-
-/obj/effect/turf_decal/caution/stand_clear/blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "stand_clear_blue"
-
-/obj/effect/turf_decal/arrows/blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "arrows_blue"
-
-/obj/effect/turf_decal/box/blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "box_blue"
-
-/obj/effect/turf_decal/box/blue/corners
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "box_corners_blue"
-
-
-/obj/effect/turf_decal/delivery/blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "delivery_blue"
-
-/obj/effect/turf_decal/caution/blue
- icon = 'modular_skyrat/modules/sec_haul/icons/misc/turf_decals.dmi'
- icon_state = "caution_blue"
diff --git a/modular_skyrat/modules/sec_haul/code/misc/vending.dm b/modular_skyrat/modules/sec_haul/code/misc/vending.dm
deleted file mode 100644
index 6096f085460..00000000000
--- a/modular_skyrat/modules/sec_haul/code/misc/vending.dm
+++ /dev/null
@@ -1,99 +0,0 @@
-/obj/machinery/vending/security
- name = "\improper Armadyne Peacekeeper Equipment Vendor"
- desc = "An Armadyne peacekeeper equipment vendor."
- product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?"
- icon = 'modular_skyrat/modules/sec_haul/icons/vending/vending.dmi'
- products = list(
- /obj/item/restraints/handcuffs = 8,
- /obj/item/restraints/handcuffs/cable/zipties = 12,
- /obj/item/grenade/flashbang = 6,
- /obj/item/assembly/flash/handheld = 8,
- /obj/item/food/donut/plain = 12,
- /obj/item/storage/box/evidence = 6,
- /obj/item/flashlight/seclite = 6,
- /obj/item/restraints/legcuffs/bola/energy = 10,
- /obj/item/clothing/gloves/tackler/security = 5,
- )
- contraband = list(
- /obj/item/clothing/glasses/sunglasses = 2,
- /obj/item/storage/fancy/donut_box = 2,
- )
- premium = list(
- /obj/item/storage/belt/security/webbing = 5,
- /obj/item/storage/belt/security/webbing/peacekeeper = 5,
- /obj/item/coin/antagtoken = 1,
- /obj/item/clothing/head/helmet/blueshirt = 3,
- /obj/item/clothing/suit/armor/vest/blueshirt = 3,
- /obj/item/grenade/stingbang = 5,
- /obj/item/watertank/pepperspray = 2,
- /obj/item/storage/belt/holster/energy = 4,
- /obj/item/storage/box/holobadge = 1,
- )
-
-/obj/item/vending_refill/security
- machine_name = "Armadyne Peacekeeper Equipment Vendor"
-
-/obj/machinery/vending/wardrobe/sec_wardrobe
- name = "\improper Peacekeeper Outfitting Station"
- desc = "A vending machine stocked with Lopland's \"Peacekeeper\" security package, including standardized uniforms and general equipment."
- icon = 'modular_skyrat/modules/sec_haul/icons/vending/vending.dmi'
- light_mask = "sec-light-mask"
- icon_state = "peace"
- product_ads = "Beat perps in style!;The stains wash right out!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
- vend_reply = "Good luck, Peacekeeper!"
- products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 5,
- /obj/item/clothing/suit/toggle/jacket/sec = 5,
- /obj/item/clothing/suit/armor/vest/peacekeeper/brit = 5,
- /obj/item/clothing/neck/security_cape = 5,
- /obj/item/clothing/neck/security_cape/armplate = 5,
- /obj/item/storage/backpack/security = 5,
- /obj/item/storage/backpack/satchel/sec = 5,
- /obj/item/storage/backpack/duffelbag/sec = 5,
- /obj/item/storage/backpack/duffelbag/sec = 5,
- /obj/item/clothing/under/rank/security/officer = 10,
- /obj/item/clothing/under/rank/security/officer/skirt = 10,
- /obj/item/clothing/under/rank/security/peacekeeper = 10,
- /obj/item/clothing/under/rank/security/skyrat/utility = 3,
- /obj/item/clothing/shoes/jackboots/sec = 10,
- /obj/item/clothing/head/security_garrison = 10,
- /obj/item/clothing/head/security_cap = 10,
- /obj/item/clothing/head/beret/sec/peacekeeper = 5,
- /obj/item/clothing/head/helmet/sec/sol = 5,
- /obj/item/clothing/head/hats/warden/police/patrol = 5,
- /obj/item/clothing/head/costume/ushanka/sec = 10,
- /obj/item/clothing/gloves/color/black/security = 10,
- )
- premium = list( /obj/item/clothing/under/rank/security/officer/formal = 3,
- /obj/item/clothing/suit/jacket/officer/blue = 3,
- /obj/item/clothing/head/beret/sec/navyofficer = 3)
- payment_department = ACCOUNT_SEC
- light_color = COLOR_MODERATE_BLUE
-
-/obj/item/vending_refill/wardrobe/sec_wardrobe
- machine_name = "Peacekeeper Outfitting Station"
-
-//List for the old one, for when its mapped in; curates it nicely, adds /redsec to the items, and also prevents some conflicts with the above vendor
-/obj/machinery/vending/wardrobe/sec_wardrobe/red
- name = "\improper SecDrobe"
- desc = "A vending machine for security and security-related clothing!"
- product_ads = "Beat perps in style!;It's red so you can't see the blood!;You have the right to be fashionable!;Now you can be the fashion police you always wanted to be!"
- vend_reply = "Thank you for using the SecDrobe!"
- icon = 'icons/obj/machines/vending.dmi'
- icon_state = "secdrobe"
- products = list(/obj/item/clothing/suit/hooded/wintercoat/security/redsec = 3,
- /obj/item/storage/backpack/security/redsec = 3,
- /obj/item/storage/backpack/satchel/sec/redsec = 3,
- /obj/item/storage/backpack/duffelbag/sec/redsec = 3,
- /obj/item/clothing/under/rank/security/officer/redsec = 3,
- /obj/item/clothing/shoes/jackboots = 3,
- /obj/item/clothing/head/beret/sec = 3,
- /obj/item/clothing/head/soft/sec = 3,
- /obj/item/clothing/mask/bandana/red = 3,
- /obj/item/clothing/gloves/color/black = 3,
- /obj/item/clothing/under/rank/security/officer/skirt = 3,
- /obj/item/clothing/under/rank/security/skyrat/utility/redsec = 3,
- /obj/item/clothing/suit/toggle/jacket/sec/old = 3,
- )
- premium = list( /obj/item/clothing/under/rank/security/officer/formal = 5,
- /obj/item/clothing/suit/jacket/officer/tan = 5,
- /obj/item/clothing/head/beret/sec/navyofficer = 5)
diff --git a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm b/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm
deleted file mode 100644
index a2daf1e74d7..00000000000
--- a/modular_skyrat/modules/sec_haul/code/peacekeeper/peacekeeper_lockers.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/structure/closet/secure_closet/security
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
-
-/obj/structure/closet/secure_closet/warden
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
-
-/obj/structure/closet/secure_closet/hos
- icon = 'modular_skyrat/master_files/icons/obj/closet.dmi'
diff --git a/modular_skyrat/modules/sec_haul/readme.md b/modular_skyrat/modules/sec_haul/readme.md
deleted file mode 100644
index 7133a179464..00000000000
--- a/modular_skyrat/modules/sec_haul/readme.md
+++ /dev/null
@@ -1,32 +0,0 @@
-## Title: Security overhaul
-
-MODULE ID: MODULAR_WEAPONS
-
-### Description:
-
-Completely overhauls security to something that will hopefully fit us.
-
-### TG Proc Changes:
-
-- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
-
-### Defines:
-
-- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
-
-### Master file additions
-
-- `modular_skyrat/master_files/code/modules/cargo/packs/vending_restock.dm`: `var/special`
-- `modular_skyrat/master_files/code/modules/cargo/packs/security.dm`: `var/special`, `var/cost`
-
-### Included files that are not contained in this module:
-
-- See: https://github.com/Skyrat-SS13/Skyrat-tg/pull/2860
-
-
-### Credits:
-Code: Gandalf2k15
-Sprite modification: Gandalf2k15
-Uniforms and equipment sprites: JungleRat
-Gun sprites: Eris and Sojourn
-de-goofsec'd guns: ErdinyoBarboza
diff --git a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm b/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm
deleted file mode 100644
index c2d98779313..00000000000
--- a/modular_skyrat/modules/shotgunrebalance/code/ammobox.dm
+++ /dev/null
@@ -1,85 +0,0 @@
-/obj/item/ammo_box/advanced/s12gauge
- name = "Slug ammo box"
- desc = "A box of 15 slug shells. Large, singular shots that pack a punch."
- icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotbox.dmi'
- icon_state = "slug"
- ammo_type = /obj/item/ammo_casing/shotgun
- max_ammo = 15
- multitype = FALSE // if you enable this and set the box's caliber var to CALIBER_SHOTGUN (at time of writing, "shotgun"), then you can have the fabled any-ammo shellbox
-
-/obj/item/ammo_box/advanced/s12gauge/buckshot
- name = "Buckshot ammo box"
- desc = "A box of 15 buckshot shells. These have a modest spread of weaker projectiles."
- icon_state = "buckshot"
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/rubber
- name = "Rubbershot ammo box"
- desc = "A box of 15 rubbershot shells. These have a modest spread of weaker, less-lethal projectiles."
- icon_state = "rubber"
- ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/bean
- name = "Beanbag Slug ammo box"
- desc = "A box of 15 beanbag slug shells. These are large, singular beanbags that pack a less-lethal punch."
- icon_state = "bean"
- ammo_type = /obj/item/ammo_casing/shotgun/beanbag
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/magnum
- name = "Magnum blockshot ammo box"
- desc = "A box of 15 magnum blockshot shells. The size of the pellet is larger in diameter than the typical shot, but there are less of them inside each shell."
- icon_state = "magnum"
- ammo_type = /obj/item/ammo_casing/shotgun/magnum
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/express
- name = "Express pelletshot ammo box"
- desc = "A box of 15 express pelletshot shells. The size of the pellet is smaller in diameter than the typical shot, but there are more of them inside each shell."
- icon_state = "express"
- ammo_type = /obj/item/ammo_casing/shotgun/express
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/hunter
- name = "Hunter slug ammo box"
- desc = "A box of 15 hunter slug shells. These shotgun slugs excel at damaging the local fauna."
- icon_state = "hunter"
- ammo_type = /obj/item/ammo_casing/shotgun/hunter
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/flechette
- name = "Flechette ammo box"
- desc = "A box of 15 flechette shells. Each shell contains a small group of tumbling blades that excel at causing terrible wounds."
- icon_state = "flechette"
- ammo_type = /obj/item/ammo_casing/shotgun/flechette
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/beehive
- name = "Hornet's nest ammo box"
- desc = "A box of 15 hornet's nest shells. These are less-lethal shells that will bounce off walls and direct themselves toward nearby targets."
- icon_state = "beehive"
- ammo_type = /obj/item/ammo_casing/shotgun/beehive
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/antitide
- name = "Stardust ammo box"
- desc = "A box of 15 express pelletshot shells. These are less-lethal and will embed in targets, causing pain on movement."
- icon_state = "antitide"
- ammo_type = /obj/item/ammo_casing/shotgun/antitide
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/incendiary
- name = "Incendiary Slug ammo box"
- desc = "A box of 15 incendiary slug shells. These will ignite targets and leave a trail of fire behind them."
- icon_state = "incendiary"
- ammo_type = /obj/item/ammo_casing/shotgun/incendiary
- max_ammo = 15
-
-/obj/item/ammo_box/advanced/s12gauge/honk
- name = "Confetti ammo box"
- desc = "A box of 35 shotgun shells. These ones contain harmless confetti, yippie!"
- icon_state = "honk"
- ammo_type = /obj/item/ammo_casing/shotgun/honk
- max_ammo = 35
diff --git a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm b/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm
deleted file mode 100644
index c1ad1e6c082..00000000000
--- a/modular_skyrat/modules/shotgunrebalance/code/shotgun.dm
+++ /dev/null
@@ -1,298 +0,0 @@
-#define AMMO_MATS_SHOTGUN list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4) // not quite as thick as a half-sheet
-
-#define AMMO_MATS_SHOTGUN_FLECH list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
-
-#define AMMO_MATS_SHOTGUN_HIVE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
- /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\
- /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1)
-
-#define AMMO_MATS_SHOTGUN_TIDE list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
- /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 1,\
- /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1)
-
-#define AMMO_MATS_SHOTGUN_PLASMA list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,\
- /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2)
-
-/obj/item/ammo_casing/shotgun
- icon = 'modular_skyrat/modules/shotgunrebalance/icons/shotshells.dmi'
- desc = "A 12 gauge iron slug."
- custom_materials = AMMO_MATS_SHOTGUN
-
-// THE BELOW TWO SLUGS ARE NOTED AS ADMINONLY AND HAVE ***EIGHTY*** WOUND BONUS. NOT BARE WOUND BONUS. FLAT WOUND BONUS.
-/obj/item/ammo_casing/shotgun/executioner
- name = "expanding shotgun slug"
- desc = "A 12 gauge fragmenting slug purpose-built to annihilate flesh on impact."
- can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm.
-
-/obj/item/ammo_casing/shotgun/pulverizer
- name = "pulverizer shotgun slug"
- desc = "A 12 gauge uranium slug purpose-built to break bones on impact."
- can_be_printed = FALSE // noted as adminonly in code/modules/projectiles/projectile/bullets/shotgun.dm
-
-/obj/item/ammo_casing/shotgun/incendiary
- name = "incendiary slug"
- desc = "A 12 gauge magnesium slug meant for \"setting shit on fire and looking cool while you do it\".\
- \
- INCENDIARY: Leaves a trail of fire when shot, sets targets aflame. "
- advanced_print_req = TRUE
- custom_materials = AMMO_MATS_SHOTGUN_PLASMA
-
-/obj/item/ammo_casing/shotgun/techshell
- can_be_printed = FALSE // techshell... casing! so not really usable on its own but if you're gonna make these go raid a seclathe.
-
-/obj/item/ammo_casing/shotgun/improvised
- can_be_printed = FALSE // this is literally made out of scrap why would you use this if you have a perfectly good ammolathe
-
-/obj/item/ammo_casing/shotgun/dart/bioterror
- can_be_printed = FALSE // PRELOADED WITH TERROR CHEMS MAYBE LET'S NOT
-
-/obj/item/ammo_casing/shotgun/dragonsbreath
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/stunslug
- name = "taser slug"
- desc = "A 12 gauge silver slug with electrical microcomponents meant to incapacitate targets."
- can_be_printed = FALSE // comment out if you want rocket tag shotgun ammo being printable
-
-/obj/item/ammo_casing/shotgun/meteorslug
- name = "meteor slug"
- desc = "A 12 gauge shell rigged with CMC technology which launches a heap of matter with great force when fired.\
- \
- METEOR: Fires a meteor-like projectile that knocks back movable objects like people and airlocks. "
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/frag12
- name = "FRAG-12 slug"
- desc = "A 12 gauge shell containing high explosives designed for defeating some barriers and light vehicles, disrupting IEDs, or intercepting assistants.\
- \
- HIGH EXPLOSIVE: Explodes on impact. "
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/pulseslug
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/laserslug
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/ion
- can_be_printed = FALSE // techshell. assumed intended balance being a pain to assemble
-
-/obj/item/ammo_casing/shotgun/incapacitate
- name = "hornet's nest shell"
- desc = "A 12 gauge shell filled with some kind of material that excels at incapacitating targets. Contains a lot of pellets, \
- sacrificing individual pellet strength for sheer stopping power in what's best described as \"spitting distance\".\
- \
- HORNET'S NEST: Fire an overwhelming amount of projectiles in a single shot. "
- can_be_printed = FALSE
-
-/obj/item/ammo_casing/shotgun/buckshot
- name = "buckshot shell"
- desc = "A 12 gauge buckshot shell."
- icon_state = "gshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot
- pellets = 8 // 8 * 6 for 48 damage if every pellet hits, we want to keep lethal shells ~50 damage
- variance = 25
-
-/obj/projectile/bullet/pellet/shotgun_buckshot
- name = "buckshot pellet"
- damage = 6
- weak_against_armour = TRUE
-
-/obj/item/ammo_casing/shotgun/rubbershot
- name = "rubber shot"
- desc = "A shotgun casing filled with densely-packed rubber balls, used to incapacitate crowds from a distance."
- icon_state = "rshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot
- pellets = 6 // 6 * 10 for 60 stamina damage, + some small amount of brute, we want to keep less lethal shells ~60
- variance = 20
- harmful = FALSE
-
-/obj/projectile/bullet/pellet/shotgun_rubbershot
- weak_against_armour = TRUE
- stamina = 10
-
-/obj/item/ammo_casing/shotgun/magnum
- name = "magnum blockshot shell"
- desc = "A 12 gauge shell that fires fewer, larger pellets than buckshot. A favorite of SolFed anti-piracy enforcers, \
- especially against the likes of vox."
- icon_state = "magshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/magnum
- pellets = 4 // Half as many pellets for twice the damage each pellet, same overall damage as buckshot
- variance = 20
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/magnum
- name = "magnum blockshot pellet"
- damage = 12
- wound_bonus = 10
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/magnum/Initialize(mapload)
- . = ..()
- transform = transform.Scale(1.25, 1.25)
-
-/obj/item/ammo_casing/shotgun/express
- name = "express pelletshot shell"
- desc = "A 12 gauge shell that fires more and smaller projectiles than buckshot. Considered taboo to speak about \
- openly near teshari, for reasons you would be personally blessed to not know at least some of."
- icon_state = "expshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/express
- pellets = 12 // 1.3x The pellets for 0.6x the damage, same overall damage as buckshot
- variance = 30 // Slightly wider spread than buckshot
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/express
- name = "express buckshot pellet"
- damage = 4
- wound_bonus = 0
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/express/Initialize(mapload)
- . = ..()
- transform = transform.Scale(0.75, 0.75)
-
-/obj/item/ammo_casing/shotgun/flechette
- name = "flechette shell"
- desc = "A 12 gauge flechette shell that specializes in ripping unarmored targets apart."
- icon_state = "fshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/flechette
- pellets = 8 //8 x 6 = 48 Damage Potential
- variance = 25
- custom_materials = AMMO_MATS_SHOTGUN_FLECH
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/flechette
- name = "flechette"
- icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi'
- icon_state = "flechette"
- damage = 6
- wound_bonus = 10
- bare_wound_bonus = 20
- sharpness = SHARP_EDGED //Did you knew flechettes fly sideways into people
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/flechette/Initialize(mapload)
- . = ..()
- SpinAnimation()
-
-/obj/item/ammo_casing/shotgun/beehive
- name = "hornet shell"
- desc = "A less-lethal 12 gauge shell that fires four pellets capable of bouncing off nearly any surface \
- and re-aiming themselves toward the nearest target. They will, however, go for any target nearby."
- icon_state = "cnrshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/beehive
- pellets = 4
- variance = 15
- fire_sound = 'sound/weapons/taser.ogg'
- harmful = FALSE
- custom_materials = AMMO_MATS_SHOTGUN_HIVE
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/beehive
- name = "hornet flechette"
- icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi'
- icon_state = "hornet"
- damage = 4
- stamina = 15
- damage_falloff_tile = 0.1
- stamina_falloff_tile = 0.1
- wound_bonus = -5
- bare_wound_bonus = 5
- wound_falloff_tile = 0
- sharpness = NONE
- ricochets_max = 5
- ricochet_chance = 200
- ricochet_auto_aim_angle = 60
- ricochet_auto_aim_range = 8
- ricochet_decay_damage = 1
- ricochet_decay_chance = 1
- ricochet_incidence_leeway = 0 //nanomachines son
-
-/obj/item/ammo_casing/shotgun/antitide
- name = "stardust shell"
- desc = "A highly experimental shell filled with nanite electrodes that will embed themselves in soft targets. The electrodes are charged from kinetic movement which means moving targets will get punished more."
- icon_state = "lasershell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/antitide
- pellets = 8 // 8 * 7 for 56 stamina damage, plus whatever the embedded shells do
- variance = 30
- harmful = FALSE
- fire_sound = 'sound/weapons/taser.ogg'
- custom_materials = AMMO_MATS_SHOTGUN_TIDE
- advanced_print_req = TRUE
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/antitide
- name = "electrode"
- icon = 'modular_skyrat/modules/shotgunrebalance/icons/projectiles.dmi'
- icon_state = "stardust"
- damage = 2
- stamina = 8
- damage_falloff_tile = 0.2
- stamina_falloff_tile = 0.3
- wound_bonus = 0
- bare_wound_bonus = 0
- stutter = 3 SECONDS
- jitter = 5 SECONDS
- eyeblur = 1 SECONDS
- sharpness = NONE
- range = 8
- embedding = list(embed_chance=70, pain_chance=25, fall_chance=15, jostle_chance=80, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.9, pain_mult=2, rip_time=10)
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/antitide/on_range()
- do_sparks(1, TRUE, src)
- ..()
-
-/obj/item/ammo_casing/shotgun/hunter
- name = "hunter slug shell"
- desc = "A 12 gauge slug shell that fires specially designed slugs that deal extra damage to the local planetary fauna"
- icon_state = "huntershell"
- projectile_type = /obj/projectile/bullet/shotgun_slug/hunter
-
-/obj/projectile/bullet/shotgun_slug/hunter
- name = "12g hunter slug"
- damage = 20
-
-/obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload)
- . = ..()
- AddElement(/datum/element/bane, mob_biotypes = MOB_BEAST, damage_multiplier = 5)
-
-/obj/projectile/bullet/pellet/shotgun_improvised
- weak_against_armour = TRUE // We will not have Improvised are Better 2.0
-
-/obj/item/ammo_casing/shotgun/honk
- name = "confetti shell"
- desc = "A 12 gauge buckshot shell thats been filled to the brim with confetti. Who is making all these?"
- icon_state = "honkshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/honk
- pellets = 12
- variance = 35
- fire_sound = 'sound/items/bikehorn.ogg'
- harmful = FALSE
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/honk
- name = "confetti"
- damage = 0
- stamina = 1
- stamina_falloff_tile = 0
- wound_bonus = 0
- bare_wound_bonus = 0
- jitter = 1 SECONDS
- eyeblur = 1 SECONDS
- sharpness = NONE
- hitsound = SFX_CLOWN_STEP
- range = 12
- icon_state = "guardian"
- embedding = null
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/honk/Initialize(mapload)
- . = ..()
- SpinAnimation()
- range = rand(6, 12)
- color = pick(
- COLOR_PRIDE_RED,
- COLOR_PRIDE_ORANGE,
- COLOR_PRIDE_YELLOW,
- COLOR_PRIDE_GREEN,
- COLOR_PRIDE_BLUE,
- COLOR_PRIDE_PURPLE,
- )
-
-/obj/projectile/bullet/pellet/shotgun_buckshot/honk/on_range()
- do_sparks(1, TRUE, src)
- ..()
diff --git a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm b/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm
deleted file mode 100644
index 938dc421bb3..00000000000
--- a/modular_skyrat/modules/stormtrooper/code/stormtrooper_clothes.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/item/clothing/head/helmet/stormtrooper
- name = "stormtrooper helmet"
- desc = "A shiny white helmet with some very narrow holes for the users eyes."
- icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi'
- worn_icon = 'modular_skyrat/modules/stormtrooper/icons/head.dmi'
- icon_state = "stormtrooper_helmet"
- supports_variations_flags = NONE
-
-/obj/item/clothing/suit/armor/stormtrooper
- name = "stormtrooper suit"
- desc = "A shiny white armoured suit, looks like it'd be good for deflecting blaster fire."
- icon_state = "stormtrooper_suit"
- icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi'
- worn_icon = 'modular_skyrat/modules/stormtrooper/icons/suit.dmi'
- supports_variations_flags = NONE
-
-/obj/item/clothing/shoes/combat/stormtrooper
- name = "stormtrooper boots"
- desc = "A pair of white boots."
- icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi'
- worn_icon = 'modular_skyrat/modules/stormtrooper/icons/feet.dmi'
- icon_state = "stormtrooper_boots"
- armor_type = /datum/armor/none
- strip_delay = 30
- equip_delay_other = 50
- resistance_flags = NONE
- can_be_tied = FALSE
- supports_variations_flags = NONE
-
-/obj/item/clothing/gloves/combat/peacekeeper/stormtrooper
- name = "stormtrooper gloves"
- desc = "White gloves with some limited reflective armor."
- icon = 'modular_skyrat/modules/stormtrooper/icons/items.dmi'
- worn_icon = 'modular_skyrat/modules/stormtrooper/icons/hands.dmi'
- icon_state = "stormtrooper_gloves"
- worn_icon_state = "stormtrooper_gloves"
diff --git a/modular_skyrat/modules/synths/code/bodyparts/ears.dm b/modular_skyrat/modules/synths/code/bodyparts/ears.dm
deleted file mode 100644
index 841a69f9d58..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/ears.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/obj/item/organ/internal/ears/synth
- name = "auditory sensors"
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "ears-ipc"
- desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear."
- zone = BODY_ZONE_HEAD
- slot = ORGAN_SLOT_EARS
- gender = PLURAL
- maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
-
-/obj/item/organ/internal/ears/synth/emp_act(severity)
- . = ..()
-
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
-
- switch(severity)
- if(EMP_HEAVY)
- owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER)
- owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION * SYNTH_HEAVY_EMP_MULTIPLIER)
- adjustEarDamage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, SYNTH_DEAF_STACKS)
- to_chat(owner, span_warning("Alert: Null feedback from auditory sensors detected, seek maintenance immediately. Error Code: AS-105"))
-
- if(EMP_LIGHT)
- owner.set_jitter_if_lower(SYNTH_BAD_EFFECT_DURATION)
- owner.set_dizzy_if_lower(SYNTH_BAD_EFFECT_DURATION)
- adjustEarDamage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, SYNTH_DEAF_STACKS)
- to_chat(owner, span_warning("Alert: Anomalous feedback from auditory sensors detected. Error Code: AS-50"))
-
-/datum/design/synth_ears
- name = "Auditory Sensors"
- desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear."
- id = "synth_ears"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/ears/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/heart.dm b/modular_skyrat/modules/synths/code/bodyparts/heart.dm
deleted file mode 100644
index a17d99be2d7..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/heart.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/obj/item/organ/internal/heart/synth
- name = "hydraulic pump engine"
- desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move."
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "heart-ipc-on"
- base_icon_state = "heart-ipc"
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD // 1.5x due to synthcode.tm being weird
- zone = BODY_ZONE_CHEST
- slot = ORGAN_SLOT_HEART
- var/last_message_time = 0
-
-/obj/item/organ/internal/heart/synth/emp_act(severity)
- . = ..()
-
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
-
- switch(severity)
- if(EMP_HEAVY)
- to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken severe damage, seek maintenance immediately. Error code: HP300-10."))
- apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
- if(EMP_LIGHT)
- to_chat(owner, span_warning("Alert: Main hydraulic pump control has taken light damage, seek maintenance immediately. Error code: HP300-05."))
- apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
-
-/datum/design/synth_heart
- name = "Hydraulic Pump Engine"
- desc = "An electronic device that handles the hydraulic pumps, powering one's robotic limbs. Without this, synthetics are unable to move."
- id = "synth_heart"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/heart/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/liver.dm b/modular_skyrat/modules/synths/code/bodyparts/liver.dm
deleted file mode 100644
index cd0f6bae037..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/liver.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/obj/item/organ/internal/liver/synth
- name = "reagent processing unit"
- desc = "An electronic device that processes the beneficial chemicals for the synthetic user."
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "liver-ipc"
- filterToxins = FALSE //We dont filter them, we're immune to them
- zone = BODY_ZONE_CHEST
- slot = ORGAN_SLOT_LIVER
- maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
-
-/obj/item/organ/internal/liver/synth/emp_act(severity)
- . = ..()
-
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
-
- switch(severity)
- if(EMP_HEAVY)
- to_chat(owner, span_warning("Alert: Critical! Reagent processing unit failure, seek maintenance immediately. Error Code: DR-1k"))
- apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
-
- if(EMP_LIGHT)
- to_chat(owner, span_warning("Alert: Reagent processing unit failure, seek maintenance for diagnostic. Error Code: DR-0k"))
- apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
-
-/datum/design/synth_liver
- name = "Reagent Processing Unit"
- desc = "An electronic device that processes the beneficial chemicals for the synthetic user."
- id = "synth_liver"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/liver/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/lungs.dm b/modular_skyrat/modules/synths/code/bodyparts/lungs.dm
deleted file mode 100644
index 69ff9d0dfcf..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/lungs.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/organ/internal/lungs/synth
- name = "heatsink"
- desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs." //Purposefully left the 'fluid medium' ambigious for interpretation of the character, whether it be air or fluid cooling
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "lungs-ipc"
- safe_nitro_min = 0
- safe_co2_max = 0
- safe_plasma_min = 0
- safe_plasma_max = 0
- safe_oxygen_min = 0 //What are you doing man, dont breathe with those!
- safe_oxygen_max = 0
- zone = BODY_ZONE_CHEST
- slot = ORGAN_SLOT_LUNGS
- maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
-
-/obj/item/organ/internal/lungs/synth/emp_act(severity)
- . = ..()
-
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
-
- switch(severity)
- if(EMP_HEAVY)
- to_chat(owner, span_warning("Alert: Critical cooling system failure! Seek maintenance immediately. Error Code: 5H-17"))
- owner.adjust_bodytemperature(SYNTH_HEAVY_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT)
-
- if(EMP_LIGHT)
- to_chat(owner, span_warning("Alert: Major cooling system failure!"))
- owner.adjust_bodytemperature(SYNTH_LIGHT_EMP_TEMPERATURE_POWER * TEMPERATURE_DAMAGE_COEFFICIENT)
-
-/datum/design/synth_heatsink
- name = "Heatsink"
- desc = "A device that transfers generated heat to a fluid medium to cool it down. Required to keep your synthetics cool-headed. It's shape resembles lungs."
- id = "synth_lungs"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/lungs/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm b/modular_skyrat/modules/synths/code/bodyparts/stomach.dm
deleted file mode 100644
index 6b08aa0af45..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/stomach.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/obj/item/organ/internal/stomach/synth
- name = "synthetic bio-reactor"
- icon = 'modular_skyrat/master_files/icons/obj/surgery.dmi'
- icon_state = "stomach-ipc"
- w_class = WEIGHT_CLASS_NORMAL
- zone = BODY_ZONE_CHEST
- slot = ORGAN_SLOT_STOMACH
- maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
- zone = "chest"
- slot = "stomach"
- desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered."
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
-
-/obj/item/organ/internal/stomach/synth/emp_act(severity)
- . = ..()
-
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(!COOLDOWN_FINISHED(src, severe_cooldown)) //So we cant just spam emp to kill people.
- COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
-
- switch(severity)
- if(EMP_HEAVY)
- owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_HEAVY_EMP_CHARGE_LOSS)
- apply_organ_damage(SYNTH_ORGAN_HEAVY_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
- to_chat(owner, span_warning("Alert: Severe battery discharge!"))
-
- if(EMP_LIGHT)
- owner.nutrition = max(0, owner.nutrition - SYNTH_STOMACH_LIGHT_EMP_CHARGE_LOSS)
- apply_organ_damage(SYNTH_ORGAN_LIGHT_EMP_DAMAGE, maxHealth, required_organ_flag = ORGAN_ROBOTIC)
- to_chat(owner, span_warning("Alert: Minor battery discharge!"))
-
-/datum/design/synth_stomach
- name = "Synthetic Bio-Reactor"
- desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered."
- id = "synth_stomach"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/stomach/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
-
-/obj/item/organ/internal/stomach/synth/Insert(mob/living/carbon/receiver, special, drop_if_replaced)
- . = ..()
- RegisterSignal(receiver, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(on_borg_charge))
-
-/obj/item/organ/internal/stomach/synth/Remove(mob/living/carbon/stomach_owner, special)
- . = ..()
- UnregisterSignal(stomach_owner, COMSIG_PROCESS_BORGCHARGER_OCCUPANT)
-
-///Handles charging the synth from borg chargers
-/obj/item/organ/internal/stomach/synth/proc/on_borg_charge(datum/source, amount)
- SIGNAL_HANDLER
-
- if(owner.nutrition >= NUTRITION_LEVEL_ALMOST_FULL)
- return
-
- amount /= 50 // Lowers the charging amount so it isn't instant
- owner.nutrition = min((owner.nutrition + amount), NUTRITION_LEVEL_ALMOST_FULL) // Makes sure we don't make the synth too full, which would apply the overweight slowdown
diff --git a/modular_skyrat/modules/synths/code/bodyparts/tongue.dm b/modular_skyrat/modules/synths/code/bodyparts/tongue.dm
deleted file mode 100644
index 1d64febe161..00000000000
--- a/modular_skyrat/modules/synths/code/bodyparts/tongue.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/obj/item/organ/internal/tongue/synth
- name = "synthetic voicebox"
- desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
- icon = 'modular_skyrat/modules/organs/icons/cyber_tongue.dmi'
- icon_state = "cybertongue"
- say_mod = "beeps"
- attack_verb_continuous = list("beeps", "boops")
- attack_verb_simple = list("beep", "boop")
- modifies_speech = TRUE
- taste_sensitivity = 25 // not as good as an organic tongue
- liked_foodtypes = NONE
- disliked_foodtypes = NONE
- maxHealth = 100 //RoboTongue!
- zone = BODY_ZONE_HEAD
- slot = ORGAN_SLOT_TONGUE
- organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
-
-/obj/item/organ/internal/tongue/synth/can_speak_language(language)
- return TRUE
-
-/obj/item/organ/internal/tongue/synth/handle_speech(datum/source, list/speech_args)
- speech_args[SPEECH_SPANS] |= SPAN_ROBOT
-
-/datum/design/synth_tongue
- name = "Synthetic Tongue"
- desc = "A fully-functional synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors."
- id = "synth_tongue"
- build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
- construction_time = 4 SECONDS
- materials = list(
- /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5,
- /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5,
- )
- build_path = /obj/item/organ/internal/tongue/synth
- category = list(
- RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1
- )
- departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
diff --git a/modular_skyrat/modules/synths/code/reagents/reagents.dm b/modular_skyrat/modules/synths/code/reagents/reagents.dm
deleted file mode 100644
index 54be7648ada..00000000000
--- a/modular_skyrat/modules/synths/code/reagents/reagents.dm
+++ /dev/null
@@ -1,107 +0,0 @@
-#define NANITE_SLURRY_ORGANIC_PURGE_RATE 4
-#define NANITE_SLURRY_ORGANIC_VOMIT_CHANCE 25
-
-/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Let's not cripple synth ops
-
-/datum/reagent/medicine/lesser_syndicate_nanites
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-
-/datum/reagent/medicine/stimulants
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //Syndicate developed 'accelerants' for synths?
-
-/datum/reagent/medicine/leporazine
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-
-/datum/reagent/flightpotion
- process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC
-
-// REAGENTS FOR SYNTHS
-
-/datum/reagent/medicine/system_cleaner
- name = "System Cleaner"
- description = "Neutralizes harmful chemical compounds inside synthetic systems and refreshes system software."
- reagent_state = LIQUID
- color = "#F1C40F"
- taste_description = "ethanol"
- metabolization_rate = 2 * REAGENTS_METABOLISM
- process_flags = REAGENT_SYNTHETIC
-
-/datum/reagent/medicine/system_cleaner/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
- affected_mob.adjustToxLoss(-2 * REM * seconds_per_tick, 0)
- affected_mob.adjust_disgust(-5 * REM * seconds_per_tick)
- var/remove_amount = 1 * REM * seconds_per_tick;
- for(var/thing in affected_mob.reagents.reagent_list)
- var/datum/reagent/reagent = thing
- if(reagent != src)
- affected_mob.reagents.remove_reagent(reagent.type, remove_amount)
- ..()
- return TRUE
-
-/datum/reagent/medicine/liquid_solder
- name = "Liquid Solder"
- description = "Repairs brain damage in synthetics."
- reagent_state = LIQUID
- color = "#727272"
- taste_description = "metal"
- process_flags = REAGENT_SYNTHETIC
-
-/datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick)
- affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3 * REM * seconds_per_tick)
- if(prob(10))
- affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC)
- return ..()
-
-/datum/reagent/medicine/nanite_slurry
- name = "Nanite Slurry"
- description = "A localized swarm of nanomachines specialized in repairing mechanical parts. Due to the nanites needing to interface with the host's systems to repair them, a surplus of them will cause them to overheat, or for the swarm to forcefully eject out of the mouth of organics for safety."
- reagent_state = LIQUID
- color = "#cccccc"
- overdose_threshold = 20
- metabolization_rate = 1.25 * REAGENTS_METABOLISM
- process_flags = REAGENT_SYNTHETIC | REAGENT_ORGANIC
- chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
- /// How much brute and burn individually is healed per tick
- var/healing = 1
- /// How much body temperature is increased by per overdose cycle on robotic bodyparts.
- var/temperature_change = 50
-
-
-/datum/reagent/medicine/nanite_slurry/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick)
- var/heal_amount = healing * REM * seconds_per_tick
- affected_mob.heal_bodypart_damage(heal_amount, heal_amount, required_bodytype = BODYTYPE_ROBOTIC)
- return ..()
-
-/datum/reagent/medicine/nanite_slurry/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
- if(affected_mob.mob_biotypes & MOB_ROBOTIC)
- affected_mob.adjust_bodytemperature(temperature_change * REM * seconds_per_tick)
- return ..()
- affected_mob.reagents.remove_reagent(type, NANITE_SLURRY_ORGANIC_PURGE_RATE) //gets removed from organics very fast
- if(prob(NANITE_SLURRY_ORGANIC_VOMIT_CHANCE))
- affected_mob.vomit(vomit_flags = (MOB_VOMIT_MESSAGE | MOB_VOMIT_HARM), vomit_type = /obj/effect/decal/cleanable/vomit/nanites)
- return TRUE
-
-#undef NANITE_SLURRY_ORGANIC_PURGE_RATE
-#undef NANITE_SLURRY_ORGANIC_VOMIT_CHANCE
-
-
-/datum/reagent/medicine/taste_suppressor
- name = "Taste Suppressor"
- description = "A colorless medicine aimed to dull the sense of taste of those that consumed it, as long as it's in their system."
- color = "#AAAAAA77"
- reagent_state = LIQUID
- metabolization_rate = 0.5 * REAGENTS_METABOLISM
- chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
- chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING // It has REAGENT_BLOOD_REGENERATING only because it makes it so Hemophages can safely drink it, which makes complete sense considering this is meant to suppress their tumor's reactiveness to anything that doesn't regenerate blood.
-
-
-/datum/reagent/medicine/taste_suppressor/on_mob_metabolize(mob/living/affected_mob)
- . = ..()
-
- ADD_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT)
-
-
-/datum/reagent/medicine/taste_suppressor/on_mob_end_metabolize(mob/living/affected_mob)
- . = ..()
-
- REMOVE_TRAIT(affected_mob, TRAIT_AGEUSIA, TRAIT_REAGENT)
diff --git a/modular_skyrat/modules/tagline/code/world.dm b/modular_skyrat/modules/tagline/code/world.dm
deleted file mode 100644
index f158b310640..00000000000
--- a/modular_skyrat/modules/tagline/code/world.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/world/proc/update_status()
-
- var/list/features = list()
-
- var/s = ""
- var/hostedby
- if(config)
- var/server_name = CONFIG_GET(string/servername)
- if (server_name)
- s += "[server_name] — "
- hostedby = CONFIG_GET(string/hostedby)
-
- s += " ("
- s += ""
- s += "Discord"
- s += ")\]"
- s += " [CONFIG_GET(string/servertagline)] "
-
-
- var/n = 0
- for (var/mob/M in GLOB.player_list)
- if (M.client)
- n++
-
- if(SSmapping.config)
- features += "[SSmapping.config.map_name]"
-
- if (n > 1)
- features += "~[n] players"
- else if (n > 0)
- features += "~[n] player"
-
- if (!host && hostedby)
- features += "hosted by [hostedby] "
-
- if (features)
- s += "\[[jointext(features, ", ")]"
-
- status = s
-
diff --git a/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png b/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png
deleted file mode 100644
index 3141156a6bd..00000000000
Binary files a/modular_skyrat/modules/title_screen/icons/skyrat_title_screen.png and /dev/null differ
diff --git a/modular_skyrat/modules/tribal_extended/code/crafting.dm b/modular_skyrat/modules/tribal_extended/code/crafting.dm
deleted file mode 100644
index adf21657bd9..00000000000
--- a/modular_skyrat/modules/tribal_extended/code/crafting.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/item/weaponcrafting/silkstring
- name = "string"
- desc = "A long piece of string that looks like a cable coil."
- icon = 'modular_skyrat/modules/tribal_extended/icons/crafting.dmi'
- icon_state = "silkstring"
diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm b/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm
deleted file mode 100644
index d44b35ee1ff..00000000000
--- a/modular_skyrat/modules/tribal_extended/code/weapons/bow.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/item/gun/ballistic/bow/tribalbow
- icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi'
- lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/bows_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/tribal_extended/icons/bows_righthand.dmi'
- worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi'
- inhand_icon_state = "bow"
- icon_state = "bow_unloaded"
- base_icon_state = "bow"
- worn_icon_state = "bow"
- slot_flags = ITEM_SLOT_BACK
-
-/obj/item/gun/ballistic/bow/tribalbow/update_icon()
- . = ..()
- icon_state = "[base_icon_state]_[get_ammo() ? (chambered ? "firing" : "loaded") : "unloaded"]"
-
-
-/obj/item/gun/ballistic/bow/tribalbow/ashen
- name = "bone bow"
- desc = "Some sort of primitive projectile weapon made of bone and wrapped sinew, oddly robust."
- icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi'
- icon_state = "ashenbow_unloaded"
- base_icon_state = "ashenbow"
- inhand_icon_state = "ashenbow"
- worn_icon_state = "ashenbow"
- force = 20
-
-/obj/item/gun/ballistic/bow/tribalbow/pipe
- name = "pipe bow"
- desc = "Portable and sleek, but you'd be better off hitting someone with a pool noodle."
- icon = 'modular_skyrat/modules/tribal_extended/icons/projectile.dmi'
- icon_state = "pipebow_unloaded"
- base_icon_state = "pipebow"
- inhand_icon_state = "pipebow"
- worn_icon_state = "pipebow"
- force = 10
- slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE
diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm b/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm
deleted file mode 100644
index f52a8be7be9..00000000000
--- a/modular_skyrat/modules/tribal_extended/code/weapons/shield.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/obj/item/shield/goliath
- name = "goliath shield"
- desc = "A shield made from interwoven plates of goliath hide."
- icon = 'modular_skyrat/modules/tribal_extended/icons/shields.dmi'
- icon_state = "goliath_shield"
- lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/shields_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/tribal_extended/icons/shields_righthand.dmi'
- worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi'
- worn_icon_state = "goliath_shield"
- inhand_icon_state = "goliath_shield"
- max_integrity = 200
- w_class = WEIGHT_CLASS_BULKY
- shield_break_sound = 'sound/effects/bang.ogg'
- shield_break_leftover = /obj/item/stack/sheet/animalhide/goliath_hide
diff --git a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm b/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm
deleted file mode 100644
index 1fff0ccbc4f..00000000000
--- a/modular_skyrat/modules/tribal_extended/code/weapons/sword.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/obj/item/claymore/bone
- name = "bone sword"
- desc = "Jagged pieces of bone are tied to what looks like a goliaths femur."
- icon = 'modular_skyrat/modules/tribal_extended/icons/items_and_weapons.dmi'
- lefthand_file = 'modular_skyrat/modules/tribal_extended/icons/swords_lefthand.dmi'
- righthand_file = 'modular_skyrat/modules/tribal_extended/icons/swords_righthand.dmi'
- worn_icon = 'modular_skyrat/modules/tribal_extended/icons/back.dmi'
- icon_state = "bone_sword"
- inhand_icon_state = "bone_sword"
- worn_icon_state = "bone_sword"
- slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
- force = 20
- throwforce = 10
- armour_penetration = 10
- w_class = WEIGHT_CLASS_NORMAL
- hitsound = 'sound/weapons/bladeslice.ogg'
- attack_verb_continuous = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- block_chance = 0
- armor_type = /datum/armor/claymore_bone
-
-/datum/armor/claymore_bone
- fire = 100
- acid = 50
diff --git a/modular_skyrat/modules/verbs/readme.md b/modular_skyrat/modules/verbs/readme.md
deleted file mode 100644
index d68fbacaf17..00000000000
--- a/modular_skyrat/modules/verbs/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/872
-
-## Title: More verbs and subtler.
-
-MODULE ID: VERBS
-
-### Description:
-
-Adds a few emotes and verbs for players to use, such as LOOC, subtle.
-
-### TG Proc Changes:
-
-- N/A
-
-### Defines:
-
-- #define CHAT_LOOC (1<<12)
-- #define CHAT_LOOC_ADMIN (1<<13)
-- #define LOG_SUBTLER (1 << 20)
-
-### Master file additions
-
-- D:\Documents\Github\SS13\Skyrat-tg\modular_skyrat\master_files\code\_globalvars\configuration.dm
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-Gandalf2k15 - porting and refactoring
diff --git a/modular_skyrat/modules/vox_sprites/readme.md b/modular_skyrat/modules/vox_sprites/readme.md
deleted file mode 100644
index 870251e6da5..00000000000
--- a/modular_skyrat/modules/vox_sprites/readme.md
+++ /dev/null
@@ -1,55 +0,0 @@
-https://github.com/Skyrat-SS13/Skyrat-tg/pull/7522
-
-## Title: Vox sprite fixes, updates, and additions
-
-MODULE ID: VOX_SPRITES
-
-### Description:
-
-Ports the Vox species and clothing sprites from Paradise plus some new GAGS-compatible ones, and adds code to support them.
-
-### TG Proc/File Changes:
-
-- APPEND: code/game/objects/items.dm > /obj/item/update_greyscale()
-- APPEND: code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_worn_gloves()
-
-### Defines:
-
-- N/A
-
-### Master file additions
-
-Species sprites:
-
-- modular_skyrat/master_files/icons/mob/body_markings/vox_secondary.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/species/vox_eyes.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/species/vox_parts_greyscale.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_facial_hair.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_hair.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/sprite_accessory/vox_snouts.dmi #CHANGE
-
-Clothing sprites:
-
-- modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/clothing/mask_vox.dmi #CHANGE
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/back.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/color_gags_vox.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/ears.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/eyes.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/feet.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/hands.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/head.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/helmet.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/suit.dmi #ADD
-- modular_skyrat/master_files/icons/mob/clothing/species/vox/uniform.dmi #ADD
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-Vox species and clothing sprites - Paradise Station
-
-PR Code - SabreML
-PR Sprite implementation & GAGS compatibility - CandleJaxx
diff --git a/modular_skyrat/modules/xenos_skyrat_redo/readme.md b/modular_skyrat/modules/xenos_skyrat_redo/readme.md
deleted file mode 100644
index 19ddb1cbc86..00000000000
--- a/modular_skyrat/modules/xenos_skyrat_redo/readme.md
+++ /dev/null
@@ -1,41 +0,0 @@
-## Title: Skyrat Xeno Rework
-
-MODULE ID: SKYRAT_XENO_REDO
-
-### Description:
-
-Reworks and rebalances xenomorphs to be more in line a tgmc style of alien, especially focusing on unique abilites and lack of rclick and ranged instant hardstuns
-
-### TG Proc/File Changes:
-
-- MOVED:
- code\modules\mob\living\carbon\alien\larva\powers.dm > /datum/action/cooldown/alien/larva_evolve/Activate
- TO:
- modular_skyrat\modules\xenos_skyrat_redo\code\larva.dm
-
-- MOVED:
- code\modules\mob\living\carbon\human\human_defense.dm > /mob/living/carbon/human/attack_alien
- TO:
- modular_skyrat\modules\xenos_skyrat_redo\code\human_defense.dm
-
-### Defines:
-
-IN: code/__DEFINES/~skyrat_defines/traits.dm
-
-- TRAIT_XENO_INNATE
-- TRAIT_XENO_ABILITY_GIVEN
-- TRAIT_XENO_HEAL_AURA
-
-### Master file additions
-
-- N/A
-
-### Included files that are not contained in this module:
-
-- N/A
-
-### Credits:
-
-@Paxilmaniac - Porting the xenos from TGMC, adopting their stuff to work with our code
-TGMC - Where the sprites, sound, and ideas for caste abilities came from
-Those two rounds where xenos curbstomped the whole station - Inspiration for doing this in the first place
diff --git a/modular_skyrat/readme.md b/modular_skyrat/readme.md
deleted file mode 100644
index b54f8539581..00000000000
--- a/modular_skyrat/readme.md
+++ /dev/null
@@ -1,377 +0,0 @@
-# The modularization handbook - Skyrat style, v0.2
-
-## Failure to follow this guide will result in your PR being denied.
-
-## Introduction
-
-To develop and maintain a separate codebase is a big task, that many have failed and suffered the consequences of, such as outdated, and messy code.
-It's not necessarily the fault of lack of skill of the people maintaining it, merely the lack of resources and how much continuous effort such an endeavor takes.
-
-One of the solutions for such, is to base our server on a solid codebase, that is primarily maintained by somebody else, in this case tgstation, and insert our content in a modular fashion, while following the general code (but not gameplay) direction of the upstream, mirroring any changes they do for parity.
-
-Git, as a version control system, is very useful, however it is just a very methodical thing, that follows its many algorithms, that sadly cannot always intelligently resolve certain changes in the code in an unambiguous way, giving us conflicts, that need to be resolved in a manual fashion.
-
-Due to maintainability being one of the main reasons behind our rebase to another codebase, **this protocol will seriously be enforced.**
-A well organized, documented and atomized code saves our maintainers a lot of headache, when being reviewed.
-Don't dump on them the work that you could have done yourself.
-
-This document is meant to be updated and changed, whenever any new exceptions are added onto it. It might be worth it to check, from time to time, whether we didn't define a more unique standardized way of handling some common change.
-
-## Important note - TEST YOUR PULL REQUESTS
-
-You are responsible for the testing of your content. You should not mark a pull request ready for review until you have actually tested it. If you require a separate client for testing, you can use a guest account by logging out of BYOND and connecting to your test server. Test merges are not for bug finding, they are for stress tests where local testing simply doesn't allow for this.
-
-### The nature of conflicts
-
-For example, let's have an original
-
-```byond
-var/something = 1
-```
-
-in the core code, that we decide to change from 1 to 2 on our end,
-
-```diff
-- var/something = 1
-+ var/something = 2 //SKYRAT EDIT
-```
-
-but then our upstream introduces a change in their codebase, changing it from 1 to 4
-
-```diff
-- var/something = 1
-+ var/something = 4
-```
-
-As easy of an example as it is, it results in a relatively simple conflict, in the form of
-
-```byond
-var/something = 2 //SKYRAT EDIT
-```
-
-where we pick the preferable option manually.
-
-### The solution
-
-That is something that cannot and likely shouldn't be resolved automatically, because it might introduce errors and bugs that will be very hard to track down, not to even bring up more complex examples of conflicts, such as ones that involve changes that add, remove and move lines of code all over the place.
-
-tl;dr it tries its best but ultimately is just a dumb program, therefore, we must ourselves do work to ensure that it can do most of the work, while minimizing the effort spent on manual involvement, in the cases where the conflicts will be inevitable.
-
-Our answer to this is modularization of the code.
-
-**Modularization** means, that most of the changes and additions we do, will be kept in a separate **`modular_skyrat/`** folder, as independent from the core code as possible, and those which absolutely cannot be modularized, will need to be properly marked by comments, specifying where the changes start, where they end, and which feature they are a part of, but more on that in the next section.
-
-## The modularization protocol
-
-Always start by thinking of the theme/purpose of your work. It's oftentimes a good idea to see if there isn't an already existing one, that you should append to.
-
-**If it's a tgcode-specific tweak or bugfix, first course of action should be an attempt to discuss and PR it upstream, instead of needlessly modularizing it here.**
-
-Otherwise, pick a new ID for your module. E.g. `DNA-FEATURE-WINGS` or `XENOARCHEAOLOGY` or `SHUTTLE_TOGGLE` - We will use this in future documentation. It is essentially your module ID. It must be uniform throughout the entire module. All references MUST be exactly the same. This is to allow for easy searching.
-
-And then you'll want to establish your core folder that you'll be working out of which is normally your module ID. E.g. `modular_skyrat/modules/shuttle_toggle`
-
-### Maps
-
-IMPORTANT: MAP CONTRIBUTION GUIDELINES HAVE BEEN UPDATED
-
-When you are adding a new item to the map you MUST follow this procedure:
-Start by deciding how big of a change it is going to be, if it is a small 1 item change, you should use the simple area automapper. If it is an entire room, you should use the template automapper.
-
-We will no longer have _skyrat map versions.
-
-DO NOT CHANGE TG MAPS, THEY ARE HELD TO THE SAME STANDARD AS ICONS. USE THE ABOVE TO MAKE MAP EDITS.
-
-The automapper uses prebaked templates to override sections of a map using coordinates to plot the starting location. See entries in automapper_config.toml for examples.
-
-The simple area automapper uses datum entries to place down a single item in an area of a map that makes vauge sense.
-
-### Assets: images, sounds, icons and binaries
-
-Git doesn't handle conflicts of binary files well at all, therefore changes to core binary files are absolutely forbidden, unless you have a really *really* ***really*** good reason to do otherwise.
-
-All assets added by us should be placed into the same modular folder as your code. This means everything is kept inside your module folder, sounds, icons and code files.
-
-- ***Example:*** You're adding a new lavaland mob.
-
- First of all you create your modular folder. E.g. `modular_skyrat/modules/lavalandmob`
-
- And then you'd want to create sub-folders for each component. E.g. `/code` for code and `/sounds` for sound files and `/icons` for any icon files.
-
- After doing this, you'll want to set your references within the code.
-
- ```byond
- /mob/lavaland/newmob
- icon = 'modular_skyrat/modules/lavalandmob/icons/mob.dmi'
- icon_state = "dead_1"
- sound = 'modular_skyrat/modules/lavalandmob/sounds/boom.ogg'
- ```
-
- This ensures your code is fully modular and will make it easier for future edits.
-
-- Other assets, binaries and tools, should usually be handled likewise, depending on the case-by-case context. When in doubt, ask a maintainer or other contributors for tips and suggestions.
-
-- Any additional clothing icon files you add MUST go into the existing files in master_files clothing section.
-
-### The `master_files` Folder
-
-You should always put any modular overrides of icons, sound, code, etc. inside this folder, and it **must** follow the core code folder layout.
-
-Example: `code/modules/mob/living/living.dm` -> `modular_skyrat/master_files/code/modules/mob/living/living.dm`
-
-This is to make it easier to figure out what changed about a base file without having to search through proc definitions.
-
-It also helps prevent modules needlessly overriding the same proc multiple times. More information on these types of edits come later.
-
-### Fully modular portions of your code
-
-This section will be fairly straightforward, however, I will try to go over the basics and give simple examples, as the guide is aimed at new contributors likewise.
-
-The rule of thumb is that if you don't absolutely have to, you shouldn't make any changes to core codebase files. With some exceptions that will be mentioned shortly.
-
-In short, most of the modular code will be placed in the subfolders of your main module folder **`modular_skyrat/modules/yourmodule/code/`**, with similar rules as with the assets. Do not mirror core code folder structures inside your modular folder.
-
-For example, `modular_skyrat/modules/xenoarcheaology/code` containing all the code, tools, items and machinery related to it.
-
-Such modules, unless _very_ simple, **need** to have a `readme.md` in their folder, containing the following:
-
-- links to the PRs that implemented this module or made any significant changes to it
-- short description of the module
-- list of files changed in the core code, with a short description of the change, and a list of changes in other modular files that are not part of the same module, that were necessary for this module to function properly
-- (optionally) a bit more elaborative documentation for future-proofing the code, that will be useful further development and maintenance
-- credits
-
-***Template:*** [Here](module_template.md)
-
-## Modular Overrides (Important!!)
-
-Note, that it is possible to append code in front, or behind a core proc, in a modular fashion, without editing the original proc, through referring the parent proc, using `. = ..()` or `..()`. And likewise, it is possible to add a new var to an existing datum or obj, without editing the core files.
-
-**Note about proc overrides: Just because you can, doesn't mean you should!!**
-
-In general they are a good idea and encouraged whenever it is possible to do so. However this is not a hard rule, and sometimes Skyrat edits are preferable. Just try to use your common sense about it.
-
-For example: please do not copy paste an entire TG proc into a modular override, make one small change, and then bill it as 'fully modular'. These procs are an absolute nightmare to maintain because once something changes upstream you have to update the overridden proc.
-
-Sometimes you aren't even aware the override exists if it compiles fine and doesn't cause any bugs. This often causes features that were added upstream to be missing here. So yeah. Avoid that. It's okay if something isn't fully modular. Sometimes it's the better choice.
-
-The best candidates for modular proc overrides are ones where you can just tack something on after calling the parent, or weave a parent call cleverly in the middle somewhere to achieve your desired effect.
-
-Performance should also be considered when you are overriding a hot proc (like Life() for example), as each additional call adds overhead. Skyrat edits are much more performant in those cases. For most procs this won't be something you have to think about, though.
-
-### These modular overrides should be kept in `master_files`, and you should avoid putting them inside modules as much as possible.
-
-To keep it simple, let's assume you wanted to make guns spark when shot, for simulating muzzle flash or whatever other reasons, and you want potentially to use it with all kinds of guns.
-
-You could start, in a modular file, by adding a var.
-
-```byond
-/obj/item/gun
- var/muzzle_flash = TRUE
-```
-
-And it will work just fine. Afterwards, let's say you want to check that var and spawn your sparks after firing a shot.
-Knowing the original proc being called by shooting is
-
-```byond
-/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
-```
-
-you can define a child proc for it, that will get inserted into the inheritance chain of the related procs (big words, but in simple cases like this, you don't need to worry)
-
-```byond
-/obj/item/gun/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
- . = ..() //. is the default return value, we assign what the parent proc returns to it, as we call it before ours
- if(muzzle_flash)
- spawn_sparks(src) //For simplicity, I assume you've already made a proc for this
-```
-
-And that wraps the basics of it up.
-
-### Non-modular changes to the core code - IMPORTANT
-
-Every once in a while, there comes a time, where editing the core files becomes inevitable.
-
-Please be sure to log these in the module readme.md. Any file changes.
-
-In those cases, we've decided to apply the following convention, with examples:
-
-- **Addition:**
-
- ```byond
- //SKYRAT EDIT ADDITION BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
- var/adminEmergencyNoRecall = FALSE
- var/lastMode = SHUTTLE_IDLE
- var/lastCallTime = 6000
- //SKYRAT EDIT ADDITION END
- ```
-
-- **Removal:**
-
- ```byond
- //SKYRAT EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
- /*
- for(var/obj/docking_port/stationary/S in stationary)
- if(S.id = id)
- return S
- */
- //SKYRAT EDIT REMOVAL END
- WARNING("couldn't find dock with id: [id]")
- ```
-
- And for any removals that are moved to different files:
-
- ```byond
- //SKYRAT EDIT REMOVAL BEGIN - SHUTTLE_TOGGLE - (Moved to modular_skyrat/shuttle_toggle/randomverbs.dm)
- /*
- /client/proc/admin_call_shuttle()
- set category = "Admin - Events"
- set name = "Call Shuttle"
-
- if(EMERGENCY_AT_LEAST_DOCKED)
- return
-
- if(!check_rights(R_ADMIN))
- return
-
- var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
- if(confirm != "Yes")
- return
-
- SSshuttle.emergency.request()
- SSblackbox.record_feedback("tally", "admin_verb", 1, "Call Shuttle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- log_admin("[key_name(usr)] admin-called the emergency shuttle.")
- message_admins(span_adminnotice("[key_name_admin(usr)] admin-called the emergency shuttle."))
- return
- */
- //SKYRAT EDIT REMOVAL END
- ```
-
-- **Change:**
-
- ```byond
- //SKYRAT EDIT CHANGE BEGIN - SHUTTLE_TOGGLE - (Optional Reason/comment)
- //if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - SKYRAT EDIT - ORIGINAL
- if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE, SHUTTLE_DISABLED)
- //SKYRAT EDIT CHANGE END
- return 1
- ```
-
-## Exceptional cases of modular code
-
-From every rule, there's exceptions, due to many circumstances. Don't think about it too much.
-
-### Defines
-
-Due to the way byond loads files, it has become necessary to make a different folder for handling our modular defines.
-That folder is **`code/__DEFINES/~skyrat_defines`**, in which you can add them to the existing files, or create those files as necessary.
-
-If you have a define that's used in more than one file, it **must** be declared here.
-
-If you have a define that's used in one file, and won't be used anywhere else, declare it at the top, and `#undef MY_DEFINE` at the bottom of the file. This is to keep context menus clean, and to prevent confusion by those using IDEs with autocomplete.
-
-### Module folder layout
-
-To keep form and ensure most modules are easy to navigate and to keep control of the amount of files and folders being made in the repository, you are required to follow this layout.
-
-Ensure the folder names are exactly as stated.
-
-Top most folder: module_id
-
-**DO NOT COPY THE CORE CODE FILE STRUCTURE IN YOUR MODULE!!**
-
-**Code**: Any .DM files must go in here.
-
-- Good: /modular_skyrat/modules/example_module/code/disease_mob.dm
-- Bad: /modular_skyrat/modules/example_module/code/modules/antagonists/disease/disease_mob.dm
-
-**Icons**: Any .DMI files must go in here.
-
-- Good: /modular_skyrat/modules/example_module/icons/mining_righthand.dmi
-- Bad: /modular_skyrat/modules/example_module/icons/mob/inhands/equipment/mining_righthand.dmi
-
-**Sound**: Any SOUND files must go in here.
-
-- Good: See above.
-- Bad: See above.
-
-The readme should go into the parent folder, module_id.
-
-**DO NOT MIX AND MATCH FILE TYPES IN FOLDERS!**
-
-### Commenting out code - DON'T DO IT
-
-If you are commenting out redundant code in modules, do not comment it out, instead, delete it.
-
-Even if you think someone is going to redo whatever it is you're commenting out, don't, gitblame exists for a reason.
-
-This also applies to files, do not comment out entire files, just delete them instead. This helps us keep down on filebloat and pointless comments.
-
-**This does not apply to non-modular changes.**
-
-## Modular TGUI
-
-TGUI is another exceptional case, since it uses javascript and isn't able to be modular in the same way that DM code is.
-ALL of the tgui files are located in `/tgui/packages/tgui/interfaces` and its subdirectories; there is no specific folder for Skyrat UIs.
-
-### Modifying upstream files
-
-When modifying upstream TGUI files the same rules apply as modifying upstream DM code, however the grammar for comments may be slightly different.
-
-You can do both `// SKYRAT EDIT` and `/* SKYRAT EDIT */`, though in some cases you may have to use one over the other.
-
-In general try to keep your edit comments on the same line as the change. Preferably inside the JSX tag. e.g:
-
-```js
- act('spin', { high_quality: true })}
- icon="rat" // SKYRAT EDIT ADDITION
-
-```
-
-```js
- act('spin', { high_quality: true })}
- // SKYRAT EDIT ADDITION START - another example, multiline changes
- icon="rat"
- tooltip="spin the rat."
- // SKYRAT EDIT ADDITION END
-
-```
-
-```js
-
-```
-
-If that is not possible, you can wrap your edit in curly brackets e.g.
-
-```js
-{/* SKYRAT EDIT ADDITION START */}
-
- someProp="whatever"
-
-{/* SKYRAT EDIT ADDITION END */}
-```
-
-### Creating new TGUI files
-
-**IMPORTANT! When creating a new TGUI file from scratch, please add the following at the very top of the file (line 1):**
-```js
-// THIS IS A SKYRAT UI FILE
-```
-
-This way they are easily identifiable as modular TGUI .tsx/.jsx files. You do not have to do anything further, and there will never be any need for a Skyrat edit comment in a modular TGUI file.
-
-## Exemplary PR's
-
-Here are a couple PR's that are great examples of the guide being followed, reference them if you are stuck:
-
--
--
-
-## Afterword
-
-It might seem like a lot to take in, but if we remain consistent, it will save us a lot of headache in the long run, once we start having to resolve conflicts manually.
-Thanks to a bit more scrupulous documentation, it will be immediately obvious what changes were done and where and by which features, things will be a lot less ambiguous and messy.
-
-Best of luck in your coding. Remember that the community is there for you, if you ever need help.
diff --git a/skyrat/tools/skyrat_check_grep.sh b/skyrat/tools/skyrat_check_grep.sh
index aac122c6fb0..a9272ab64b1 100644
--- a/skyrat/tools/skyrat_check_grep.sh
+++ b/skyrat/tools/skyrat_check_grep.sh
@@ -6,7 +6,7 @@ GREEN="\033[0;32m"
BLUE="\033[0;34m"
NC="\033[0m" # No Color
-echo -e "${BLUE}Re-running grep checks, but looking in modular_skyrat...${NC}"
+echo -e "${BLUE}Re-running grep checks, but looking in modular_nova...${NC}"
# Run the linters again, but modular skyrat code.
-sed "s|code/\*\*/\*\.dm|modular_skyrat/\*\*/\*\.dm|g" void` - Called when dropdown button is clicked
- `onSelected: (value) => void` - Called when a value is picked from the list, `value` is the value that was picked
@@ -739,7 +739,10 @@ Popper lets you position elements so that they don't go out of the bounds of the
**Props:**
- `popperContent: ReactNode` - The content that will be put inside the popper.
-- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen.
+- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options]
+- `isOpen: boolean` - Whether or not the popper is open.
+- `placement?: string` - The placement of the popper. See [https://popper.js.org/docs/v2/constructors/#placement]
+- `onClickOutside?: (e) => void` - A function that will be called when the user clicks outside of the popper.
- `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper.
### `ProgressBar`
diff --git a/tgui/package.json b/tgui/package.json
index e4027aee2ca..1370aacc48a 100644
--- a/tgui/package.json
+++ b/tgui/package.json
@@ -13,7 +13,7 @@
"tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js",
"tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx",
"tgui:prettier": "prettier --check .",
- "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-sonar.yml",
+ "tgui:sonar": "eslint packages -c .eslintrc-sonar.yml",
"tgui:test": "jest --watch",
"tgui:test-simple": "CI=true jest --color",
"tgui:test-ci": "CI=true jest --color --collect-coverage",
@@ -32,9 +32,9 @@
"esbuild-loader": "^4.0.2",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
- "eslint-plugin-radar": "^0.2.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-simple-import-sort": "^10.0.0",
+ "eslint-plugin-sonarjs": "^0.23.0",
"eslint-plugin-unused-imports": "^3.0.0",
"file-loader": "^6.2.0",
"jest": "^29.7.0",
diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts
index 997cc1d2d68..c8eb268f5d4 100644
--- a/tgui/packages/common/redux.ts
+++ b/tgui/packages/common/redux.ts
@@ -95,7 +95,7 @@ export const applyMiddleware = (
return (reducer, ...args): Store => {
const store = createStoreFunction(reducer, ...args);
- let dispatch: Dispatch = () => {
+ let dispatch: Dispatch = (action, ...args) => {
throw new Error(
'Dispatching while constructing your middleware is not allowed.',
);
diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs
index 1e21d42ce86..b0e6f7bc9d4 100644
--- a/tgui/packages/tgui-dev-server/link/client.cjs
+++ b/tgui/packages/tgui-dev-server/link/client.cjs
@@ -31,11 +31,9 @@ const ensureConnection = () => {
};
}
}
-};
-if (process.env.NODE_ENV !== 'production') {
window.onunload = () => socket && socket.close();
-}
+};
const subscribe = (fn) => subscribers.push(fn);
@@ -136,38 +134,38 @@ const sendLogEntry = (level, ns, ...args) => {
const setupHotReloading = () => {
if (
- // prettier-ignore
- process.env.NODE_ENV !== 'production'
- && process.env.WEBPACK_HMR_ENABLED
- && window.WebSocket
+ 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) => {
- const { type } = msg;
- sendLogEntry(0, null, 'received', type);
- if (type === 'hotUpdate') {
- const status = module.hot.status();
- if (status !== 'idle') {
- sendLogEntry(0, null, 'hot reload status:', status);
- return;
- }
- module.hot
- .check({
- ignoreUnaccepted: true,
- ignoreDeclined: true,
- ignoreErrored: true,
- })
- .then((modules) => {
- sendLogEntry(0, null, 'outdated modules', modules);
- })
- .catch((err) => {
- sendLogEntry(0, null, 'reload error', err);
- });
+ return;
+ }
+ if (module.hot) {
+ ensureConnection();
+ sendLogEntry(0, null, 'setting up hot reloading');
+ subscribe((msg) => {
+ const { type } = msg;
+ sendLogEntry(0, null, 'received', type);
+ if (type === 'hotUpdate') {
+ const status = module.hot.status();
+ if (status !== 'idle') {
+ sendLogEntry(0, null, 'hot reload status:', status);
+ return;
}
- });
- }
+ module.hot
+ .check({
+ ignoreUnaccepted: true,
+ ignoreDeclined: true,
+ ignoreErrored: true,
+ })
+ .then((modules) => {
+ sendLogEntry(0, null, 'outdated modules', modules);
+ })
+ .catch((err) => {
+ sendLogEntry(0, null, 'reload error', err);
+ });
+ }
+ });
}
};
diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js
index 4f66d715950..43a41701907 100644
--- a/tgui/packages/tgui-dev-server/winreg.js
+++ b/tgui/packages/tgui-dev-server/winreg.js
@@ -36,8 +36,8 @@ export const regQuery = async (path, key) => {
logger.error('could not find the start of the key value');
return null;
}
- const value = stdout.substring(indexOfValue + 4, indexOfEol);
- return value;
+
+ return stdout.substring(indexOfValue + 4, indexOfEol);
} catch (err) {
logger.error(err);
return null;
diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts
index c77a7fc70bb..e536f3b45e8 100644
--- a/tgui/packages/tgui-panel/chat/constants.ts
+++ b/tgui/packages/tgui-panel/chat/constants.ts
@@ -37,7 +37,7 @@ export const MESSAGE_TYPE_EVENTCHAT = 'eventchat';
export const MESSAGE_TYPE_ADMINLOG = 'adminlog';
export const MESSAGE_TYPE_ATTACKLOG = 'attacklog';
export const MESSAGE_TYPE_DEBUG = 'debug';
-export const MESSAGE_TYPE_MENTOR = 'mentor'; // SKYRAT EDIT ADDITION
+export const MESSAGE_TYPE_MENTOR = 'mentor'; // NOVA EDIT ADDITION
// Metadata for each message type
export const MESSAGE_TYPES = [
@@ -147,7 +147,7 @@ export const MESSAGE_TYPES = [
admin: true,
},
{
- type: MESSAGE_TYPE_MENTOR, // SKYRAT EDIT
+ type: MESSAGE_TYPE_MENTOR, // NOVA EDIT
name: 'Mentor Log',
description: 'Mentor PMs and other mentor things.',
selector: '.mentor, .mentornotice',
diff --git a/tgui/packages/tgui-panel/game/constants.ts b/tgui/packages/tgui-panel/game/constants.ts
index f40a529a101..d692e26c213 100644
--- a/tgui/packages/tgui-panel/game/constants.ts
+++ b/tgui/packages/tgui-panel/game/constants.ts
@@ -4,4 +4,4 @@
* @license MIT
*/
-export const CONNECTION_LOST_AFTER = 20000;
+export const CONNECTION_LOST_AFTER = 45000;
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
index e3f4ecd2feb..0fa4bdaf76c 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss
@@ -1056,7 +1056,7 @@ em {
border-bottom: 1px dashed #fff;
}
-// SKYRAT EDIT CHANGE BEGIN - Remove neon colors, replaced with less saturated
+// NOVA EDIT CHANGE BEGIN - Remove neon colors, replaced with less saturated
/*
$alert-stripe-colors: (
'default': #00283a,
@@ -1154,7 +1154,7 @@ $alert-subheader-header-colors: (
'purple': #f7cfcf,
'grey': #e9aa72,
);
-// SKYRAT EDIT CHANGE END
+// NOVA EDIT CHANGE END
$border-width: 4;
diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
index 81955e9eded..bb570efffc9 100644
--- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss
@@ -984,7 +984,7 @@ h2.alert {
border-bottom: 1px dashed #000;
}
-// SKYRAT EDIT CHANGE BEGIN - Remove neon colors, replaced with less saturated
+// NOVA EDIT CHANGE BEGIN - Remove neon colors, replaced with less saturated
/*
$alert-stripe-colors: (
'default': #b3bfff,
@@ -1082,7 +1082,7 @@ $alert-subheader-header-colors: (
'purple': #991200,
'grey': #002c85,
);
-// SKYRAT EDIT CHANGE END
+// NOVA EDIT CHANGE END
$border-width: 4;
diff --git a/tgui/packages/tgui-say/ChannelIterator.test.ts b/tgui/packages/tgui-say/ChannelIterator.test.ts
index f1e86f0449f..62743dc6e99 100644
--- a/tgui/packages/tgui-say/ChannelIterator.test.ts
+++ b/tgui/packages/tgui-say/ChannelIterator.test.ts
@@ -11,10 +11,10 @@ describe('ChannelIterator', () => {
expect(channelIterator.current()).toBe('Say');
expect(channelIterator.next()).toBe('Radio');
expect(channelIterator.next()).toBe('Me');
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
expect(channelIterator.next()).toBe('Whis');
expect(channelIterator.next()).toBe('LOOC');
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
expect(channelIterator.next()).toBe('OOC');
expect(channelIterator.next()).toBe('Say'); // Admin is blacklisted so it should be skipped
});
diff --git a/tgui/packages/tgui-say/ChannelIterator.ts b/tgui/packages/tgui-say/ChannelIterator.ts
index ffe592d1e07..c8ee2e1ed1a 100644
--- a/tgui/packages/tgui-say/ChannelIterator.ts
+++ b/tgui/packages/tgui-say/ChannelIterator.ts
@@ -2,10 +2,10 @@ export type Channel =
| 'Say'
| 'Radio'
| 'Me'
- // SKYRAT EDIT ADDITION START
+ // NOVA EDIT ADDITION START
| 'Whis'
| 'LOOC'
- // SKYRAT EDIT ADDITION END
+ // NOVA EDIT ADDITION END
| 'OOC'
| 'Admin';
@@ -21,15 +21,15 @@ export class ChannelIterator {
'Say',
'Radio',
'Me',
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
'Whis',
'LOOC',
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
'OOC',
'Admin',
];
private readonly blacklist: Channel[] = ['Admin'];
- private readonly quiet: Channel[] = ['OOC', 'LOOC', 'Admin']; // SKYRAT EDIT CHANGE (Add LOOC)
+ private readonly quiet: Channel[] = ['OOC', 'LOOC', 'Admin']; // NOVA EDIT CHANGE (Add LOOC)
public next(): Channel {
if (this.blacklist.includes(this.channels[this.index])) {
diff --git a/tgui/packages/tgui-say/constants/index.tsx b/tgui/packages/tgui-say/constants/index.tsx
index ddb17885fa6..8502f1dba47 100644
--- a/tgui/packages/tgui-say/constants/index.tsx
+++ b/tgui/packages/tgui-say/constants/index.tsx
@@ -3,8 +3,8 @@ export const CHANNELS = [
'Say',
'Radio',
'Me',
- 'Whis', // SKYRAT EDIT ADDITION - CUSTOMIZATION
- 'LOOC', // SKYRAT EDIT ADDITION - CUSTOMIZATION
+ 'Whis', // NOVA EDIT ADDITION - CUSTOMIZATION
+ 'LOOC', // NOVA EDIT ADDITION - CUSTOMIZATION
'OOC',
'Admin',
] as const;
diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss
index 83796153312..178e2ae524f 100644
--- a/tgui/packages/tgui-say/styles/colors.scss
+++ b/tgui/packages/tgui-say/styles/colors.scss
@@ -14,7 +14,7 @@ $_channel_map: (
'Engi': #f37746,
'Hive': #855d85,
'io': #1e90ff,
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
'LOOC': #ffceb6,
'Me': #5975da,
'Med': #57b8f0,
@@ -26,7 +26,7 @@ $_channel_map: (
'Supp': #b88646,
'Svc': #6ca729,
'Synd': #8f4a4b,
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
'Whis': #7c7fd9,
);
diff --git a/tgui/packages/tgui/components/BodyZoneSelector.tsx b/tgui/packages/tgui/components/BodyZoneSelector.tsx
index 3e4f779cfb8..306b7002eb7 100644
--- a/tgui/packages/tgui/components/BodyZoneSelector.tsx
+++ b/tgui/packages/tgui/components/BodyZoneSelector.tsx
@@ -135,7 +135,7 @@ export class BodyZoneSelector extends Component<
>;
+type StringProps = Partial<
+ Record
+>;
+
+export type EventHandlers = Partial<{
+ onClick: MouseEventHandler;
+ onContextMenu: MouseEventHandler;
+ onDoubleClick: MouseEventHandler;
+ onKeyDown: KeyboardEventHandler;
+ onKeyUp: KeyboardEventHandler;
+ onMouseDown: MouseEventHandler;
+ onMouseMove: MouseEventHandler;
+ onMouseOver: MouseEventHandler;
+ onMouseUp: MouseEventHandler;
+ onScroll: UIEventHandler;
+}>;
+
+export type BoxProps = Partial<{
+ as: string;
+ children: ReactNode;
+ className: string | BooleanLike;
+ style: Partial;
+}> &
+ BooleanProps &
+ StringProps &
+ EventHandlers;
+
+// Don't you dare put this elsewhere
+type DangerDoNotUse = {
+ dangerouslySetInnerHTML?: {
+ __html: any;
+ };
};
/**
* Coverts our rem-like spacing unit into a CSS unit.
*/
-export const unit = (value: unknown): string | undefined => {
+export const unit = (value: unknown) => {
if (typeof value === 'string') {
// Transparently convert pixels into rem units
if (value.endsWith('px')) {
@@ -79,7 +70,7 @@ export const unit = (value: unknown): string | undefined => {
/**
* Same as `unit`, but half the size for integers numbers.
*/
-export const halfUnit = (value: unknown): string | undefined => {
+export const halfUnit = (value: unknown) => {
if (typeof value === 'string') {
return unit(value);
}
@@ -128,9 +119,12 @@ const mapColorPropTo = (attrName) => (style, value) => {
// String / number props
const stringStyleMap = {
+ align: mapRawPropTo('textAlign'),
bottom: mapUnitPropTo('bottom', unit),
+ colSpan: mapRawPropTo('colSpan'),
fontFamily: mapRawPropTo('fontFamily'),
fontSize: mapUnitPropTo('fontSize', unit),
+ fontWeight: mapRawPropTo('fontWeight'),
height: mapUnitPropTo('height', unit),
left: mapUnitPropTo('left', unit),
maxHeight: mapUnitPropTo('maxHeight', unit),
@@ -162,12 +156,12 @@ const stringStyleMap = {
'Left',
'Right',
]),
- mx: mapDirectionalUnitPropTo('margin', halfUnit, ['Left', 'Right']),
- my: mapDirectionalUnitPropTo('margin', halfUnit, ['Top', 'Bottom']),
- mt: mapUnitPropTo('marginTop', halfUnit),
mb: mapUnitPropTo('marginBottom', halfUnit),
ml: mapUnitPropTo('marginLeft', halfUnit),
mr: mapUnitPropTo('marginRight', halfUnit),
+ mt: mapUnitPropTo('marginTop', halfUnit),
+ mx: mapDirectionalUnitPropTo('margin', halfUnit, ['Left', 'Right']),
+ my: mapDirectionalUnitPropTo('margin', halfUnit, ['Top', 'Bottom']),
// Padding
p: mapDirectionalUnitPropTo('padding', halfUnit, [
'Top',
@@ -175,18 +169,21 @@ const stringStyleMap = {
'Left',
'Right',
]),
- px: mapDirectionalUnitPropTo('padding', halfUnit, ['Left', 'Right']),
- py: mapDirectionalUnitPropTo('padding', halfUnit, ['Top', 'Bottom']),
- pt: mapUnitPropTo('paddingTop', halfUnit),
pb: mapUnitPropTo('paddingBottom', halfUnit),
pl: mapUnitPropTo('paddingLeft', halfUnit),
pr: mapUnitPropTo('paddingRight', halfUnit),
+ pt: mapUnitPropTo('paddingTop', halfUnit),
+ px: mapDirectionalUnitPropTo('padding', halfUnit, ['Left', 'Right']),
+ py: mapDirectionalUnitPropTo('padding', halfUnit, ['Top', 'Bottom']),
// Color props
color: mapColorPropTo('color'),
textColor: mapColorPropTo('color'),
backgroundColor: mapColorPropTo('backgroundColor'),
+} as const;
- // Utility props
+// Boolean props
+const booleanStyleMap = {
+ bold: mapBooleanPropTo('fontWeight', 'bold'),
fillPositionedParent: (style, value) => {
if (value) {
style['position'] = 'absolute';
@@ -196,11 +193,6 @@ const stringStyleMap = {
style['right'] = 0;
}
},
-} as const;
-
-// Boolean props
-const booleanStyleMap = {
- bold: mapBooleanPropTo('fontWeight', 'bold'),
inline: mapBooleanPropTo('display', 'inline-block'),
italic: mapBooleanPropTo('fontStyle', 'italic'),
nowrap: mapBooleanPropTo('whiteSpace', 'nowrap'),
@@ -244,7 +236,7 @@ export const computeBoxClassName = (props: BoxProps) => {
]);
};
-export const Box = (props: BoxProps) => {
+export const Box = (props: BoxProps & DangerDoNotUse) => {
const { as = 'div', className, children, ...rest } = props;
// Compute class name and styles
diff --git a/tgui/packages/tgui/components/Button.tsx b/tgui/packages/tgui/components/Button.tsx
index 8dd52d9e2ad..25b1e78f061 100644
--- a/tgui/packages/tgui/components/Button.tsx
+++ b/tgui/packages/tgui/components/Button.tsx
@@ -7,7 +7,15 @@
import { Placement } from '@popperjs/core';
import { KEY } from 'common/keys';
import { BooleanLike, classes } from 'common/react';
-import { createRef, ReactNode, useEffect, useState } from 'react';
+import {
+ ChangeEvent,
+ createRef,
+ MouseEvent,
+ ReactNode,
+ useEffect,
+ useRef,
+ useState,
+} from 'react';
import { Box, BoxProps, computeBoxClassName, computeBoxProps } from './Box';
import { Icon } from './Icon';
@@ -23,13 +31,13 @@ type EllipsisUnion =
| {
ellipsis: true;
children: string;
- /** @deprecated */
+ /** @deprecated use children instead */
content?: never;
}
| Partial<{
ellipsis: undefined;
children: ReactNode;
- /** @deprecated */
+ /** @deprecated use children instead */
content: ReactNode;
}>;
@@ -47,7 +55,7 @@ type Props = Partial<{
onClick: (e: any) => void;
selected: BooleanLike;
tooltip: ReactNode;
- tooltipPosition: string;
+ tooltipPosition: Placement;
verticalAlignContent: string;
}> &
EllipsisUnion &
@@ -125,7 +133,6 @@ export const Button = (props: Props) => {
// Refocus layout on pressing escape.
if (event.key === KEY.Escape) {
event.preventDefault();
- return;
}
}}
{...computeBoxProps(rest)}
@@ -199,34 +206,31 @@ type ConfirmProps = Partial<{
confirmColor: string;
confirmContent: ReactNode;
confirmIcon: string;
- content: ReactNode;
- icon: string;
- onClick: () => void;
}> &
- Omit;
+ Props;
/** Requires user confirmation before triggering its action. */
const ButtonConfirm = (props: ConfirmProps) => {
const {
+ children,
color,
confirmColor = 'bad',
confirmContent = 'Confirm?',
confirmIcon,
- content,
- children,
+ ellipsis = true,
icon,
onClick,
...rest
} = props;
const [clickedOnce, setClickedOnce] = useState(false);
- const handleClick = () => {
+ const handleClick = (event: MouseEvent) => {
if (!clickedOnce) {
setClickedOnce(true);
return;
}
- onClick?.();
+ onClick?.(event);
setClickedOnce(false);
};
@@ -237,7 +241,7 @@ const ButtonConfirm = (props: ConfirmProps) => {
onClick={handleClick}
{...rest}
>
- {clickedOnce ? confirmContent : content}
+ {clickedOnce ? confirmContent : children}
);
};
@@ -257,10 +261,12 @@ type InputProps = Partial<{
/** Accepts and handles user input. */
const ButtonInput = (props: InputProps) => {
const {
+ children,
color = 'default',
content,
currentValue,
defaultValue,
+ disabled,
fluid,
icon,
iconRotation,
@@ -275,6 +281,8 @@ const ButtonInput = (props: InputProps) => {
const [inInput, setInInput] = useState(false);
const inputRef = createRef();
+ const toDisplay = content || children;
+
const commitResult = (e) => {
const input = inputRef.current;
if (!input) return;
@@ -313,8 +321,9 @@ const ButtonInput = (props: InputProps) => {
onClick={() => setInInput(true)}
>
{icon && }
- {content}
+ {toDisplay}
{
};
Button.Input = ButtonInput;
+
+type FileProps = {
+ accept: string;
+ multiple?: boolean;
+ onSelectFiles: (files: string | string[]) => void;
+} & Props;
+
+/** Accepts file input */
+function ButtonFile(props: FileProps) {
+ const { accept, multiple, onSelectFiles, ...rest } = props;
+
+ const inputRef = useRef(null);
+
+ async function read(files: FileList) {
+ const promises = Array.from(files).map((file) => {
+ const reader = new FileReader();
+
+ return new Promise((resolve) => {
+ reader.onload = () => resolve(reader.result as string);
+ reader.readAsText(file);
+ });
+ });
+
+ return await Promise.all(promises);
+ }
+
+ async function handleChange(event: ChangeEvent) {
+ const files = event.target.files;
+ if (files?.length) {
+ const readFiles = await read(files);
+ onSelectFiles(multiple ? readFiles : readFiles[0]);
+ }
+ }
+
+ return (
+ <>
+ inputRef.current?.click()} {...rest} />
+
+ >
+ );
+}
+
+Button.File = ButtonFile;
diff --git a/tgui/packages/tgui/components/Dropdown.tsx b/tgui/packages/tgui/components/Dropdown.tsx
index f09653a6967..c77cead33d7 100644
--- a/tgui/packages/tgui/components/Dropdown.tsx
+++ b/tgui/packages/tgui/components/Dropdown.tsx
@@ -1,390 +1,197 @@
-import { createPopper, VirtualElement } from '@popperjs/core';
import { classes } from 'common/react';
-import { Component, ReactNode } from 'react';
-import { findDOMNode, render } from 'react-dom';
+import { ReactNode, useState } from 'react';
-import { Box, BoxProps } from './Box';
+import { BoxProps } from './Box';
import { Button } from './Button';
import { Icon } from './Icon';
-import { Stack } from './Stack';
+import { Popper } from './Popper';
type DropdownEntry = {
- displayText: string | number | ReactNode;
- value: string | number | Enumerator;
+ displayText: ReactNode;
+ value: string | number;
};
-type Props = { options: string[] | DropdownEntry[] } & Partial<{
+type DropdownOption = string | DropdownEntry;
+
+type Props = {
+ options: DropdownOption[];
+ onSelected: (selected: any) => void;
+} & Partial<{
buttons: boolean;
clipSelectedText: boolean;
color: string;
disabled: boolean;
- displayText: string | number | ReactNode;
- dropdownStyle: any;
+ displayText: ReactNode;
icon: string;
iconRotation: number;
iconSpin: boolean;
menuWidth: string;
- nochevron: boolean;
+ noChevron: boolean;
onClick: (event) => void;
- onSelected: (selected: any) => void;
over: boolean;
- // you freaks really are just doing anything with this shit
- selected: any;
- width: string;
+ selected: string | number;
}> &
BoxProps;
-type State = {
- selected?: string;
- open: boolean;
-};
-
-const DEFAULT_OPTIONS = {
- placement: 'left-start',
- modifiers: [
- {
- name: 'eventListeners',
- enabled: false,
- },
- ],
-};
-
-const NULL_RECT: DOMRect = {
- width: 0,
- height: 0,
- top: 0,
- right: 0,
- bottom: 0,
- left: 0,
- x: 0,
- y: 0,
- toJSON: () => null,
-} as const;
-
-const DROPDOWN_DEFAULT_CLASSNAMES = 'Layout Dropdown__menu';
-const DROPDOWN_SCROLL_CLASSNAMES = 'Layout Dropdown__menu-scroll';
-
-export class Dropdown extends Component {
- static renderedMenu: HTMLDivElement | undefined;
- static singletonPopper: ReturnType | undefined;
- static currentOpenMenu: Element | undefined;
- static virtualElement: VirtualElement = {
- getBoundingClientRect: () =>
- Dropdown.currentOpenMenu?.getBoundingClientRect() ?? NULL_RECT,
- };
- menuContents: any;
- state: State = {
- open: false,
- selected: this.props.selected,
- };
-
- handleClick = () => {
- if (this.state.open) {
- this.setOpen(false);
- }
- };
+function getOptionValue(option: DropdownOption) {
+ return typeof option === 'string' ? option : option.value;
+}
- getDOMNode() {
- // eslint-disable-next-line react/no-find-dom-node
- return findDOMNode(this) as Element;
+export function Dropdown(props: Props) {
+ const {
+ buttons,
+ className,
+ clipSelectedText = true,
+ color = 'default',
+ disabled,
+ displayText,
+ icon,
+ iconRotation,
+ iconSpin,
+ menuWidth = '15rem',
+ noChevron,
+ onClick,
+ onSelected,
+ options = [],
+ over,
+ selected,
+ } = props;
+
+ const [open, setOpen] = useState(false);
+ const adjustedOpen = over ? !open : open;
+
+ /** Get the index of the selected option */
+ function getSelectedIndex() {
+ return options.findIndex((option) => {
+ return getOptionValue(option) === selected;
+ });
}
- componentDidMount() {
- const domNode = this.getDOMNode();
-
- if (!domNode) {
+ /** Update the selected value when clicking the left/right buttons */
+ function updateSelected(direction: 'previous' | 'next') {
+ if (options.length < 1 || disabled) {
return;
}
- }
-
- openMenu() {
- let renderedMenu = Dropdown.renderedMenu;
- if (renderedMenu === undefined) {
- renderedMenu = document.createElement('div');
- renderedMenu.className = DROPDOWN_DEFAULT_CLASSNAMES;
- document.body.appendChild(renderedMenu);
- Dropdown.renderedMenu = renderedMenu;
- }
- const domNode = this.getDOMNode()!;
- Dropdown.currentOpenMenu = domNode;
-
- renderedMenu.scrollTop = 0;
- renderedMenu.style.width = this.props.menuWidth || '10rem';
- renderedMenu.style.opacity = '1';
- renderedMenu.style.pointerEvents = 'auto';
-
- // ie hack
- // ie has this bizarre behavior where focus just silently fails if the
- // element being targeted "isn't ready"
- // 400 is probably way too high, but the lack of hotloading is testing my
- // patience on tuning it
- // I'm beyond giving a shit at this point it fucking works whatever
- setTimeout(() => {
- Dropdown.renderedMenu?.focus();
- }, 400);
- this.renderMenuContent();
- }
+ let selectedIndex = getSelectedIndex();
+ const startIndex = 0;
+ const endIndex = options.length - 1;
- closeMenu() {
- if (Dropdown.currentOpenMenu !== this.getDOMNode()) {
- return;
+ const hasSelected = selectedIndex >= 0;
+ if (!hasSelected) {
+ selectedIndex = direction === 'next' ? endIndex : startIndex;
}
- Dropdown.currentOpenMenu = undefined;
- Dropdown.renderedMenu!.style.opacity = '0';
- Dropdown.renderedMenu!.style.pointerEvents = 'none';
- }
+ const newIndex =
+ direction === 'next'
+ ? selectedIndex === endIndex
+ ? startIndex
+ : selectedIndex + 1
+ : selectedIndex === startIndex
+ ? endIndex
+ : selectedIndex - 1;
- componentWillUnmount() {
- this.closeMenu();
- this.setOpen(false);
+ onSelected?.(getOptionValue(options[newIndex]));
}
- renderMenuContent() {
- const renderedMenu = Dropdown.renderedMenu;
- if (!renderedMenu) {
- return;
- }
- if (renderedMenu.offsetHeight > 200) {
- renderedMenu.className = DROPDOWN_SCROLL_CLASSNAMES;
- } else {
- renderedMenu.className = DROPDOWN_DEFAULT_CLASSNAMES;
- }
-
- const { options = [] } = this.props;
- const ops = options.map((option) => {
- let value, displayText;
-
- if (typeof option === 'string') {
- displayText = option;
- value = option;
- } else if (option !== null) {
- displayText = option.displayText;
- value = option.value;
+ return (
+ setOpen(false)}
+ placement={over ? 'top-start' : 'bottom-start'}
+ popperContent={
+
+ {options.length === 0 && (
+
No options
+ )}
+
+ {options.map((option, index) => {
+ const value = getOptionValue(option);
+
+ return (
+
{
+ setOpen(false);
+ onSelected?.(value);
+ }}
+ >
+ {typeof option === 'string' ? option : option.displayText}
+
+ );
+ })}
+
}
-
- return (
+ >
+
{
- this.setSelected(value);
+ onClick={(event) => {
+ if (disabled && !open) {
+ return;
+ }
+ setOpen(!open);
+ onClick?.(event);
}}
>
- {displayText}
-
- );
- });
-
- const to_render = ops.length ? ops : 'No Options Found';
-
- render(
{to_render}
, renderedMenu, () => {
- let singletonPopper = Dropdown.singletonPopper;
- if (singletonPopper === undefined) {
- singletonPopper = createPopper(Dropdown.virtualElement, renderedMenu!, {
- ...DEFAULT_OPTIONS,
- placement: 'bottom-start',
- });
-
- Dropdown.singletonPopper = singletonPopper;
- } else {
- singletonPopper.setOptions({
- ...DEFAULT_OPTIONS,
- placement: 'bottom-start',
- });
-
- singletonPopper.update();
- }
- });
- }
-
- setOpen(open: boolean) {
- this.setState((state) => ({
- ...state,
- open,
- }));
- if (open) {
- setTimeout(() => {
- this.openMenu();
- window.addEventListener('click', this.handleClick);
- });
- } else {
- this.closeMenu();
- window.removeEventListener('click', this.handleClick);
- }
- }
-
- setSelected(selected: string) {
- this.setState((state) => ({
- ...state,
- selected,
- }));
- this.setOpen(false);
- if (this.props.onSelected) {
- this.props.onSelected(selected);
- }
- }
-
- getOptionValue(option): string {
- return typeof option === 'string' ? option : option.value;
- }
-
- getSelectedIndex(): number {
- const selected = this.state.selected || this.props.selected;
- const { options = [] } = this.props;
-
- return options.findIndex((option) => {
- return this.getOptionValue(option) === selected;
- });
- }
-
- toPrevious(): void {
- if (this.props.options.length < 1) {
- return;
- }
-
- let selectedIndex = this.getSelectedIndex();
- const startIndex = 0;
- const endIndex = this.props.options.length - 1;
-
- const hasSelected = selectedIndex >= 0;
- if (!hasSelected) {
- selectedIndex = startIndex;
- }
-
- const previousIndex =
- selectedIndex === startIndex ? endIndex : selectedIndex - 1;
-
- this.setSelected(this.getOptionValue(this.props.options[previousIndex]));
- }
-
- toNext(): void {
- if (this.props.options.length < 1) {
- return;
- }
-
- let selectedIndex = this.getSelectedIndex();
- const startIndex = 0;
- const endIndex = this.props.options.length - 1;
-
- const hasSelected = selectedIndex >= 0;
- if (!hasSelected) {
- selectedIndex = endIndex;
- }
-
- const nextIndex =
- selectedIndex === endIndex ? startIndex : selectedIndex + 1;
-
- this.setSelected(this.getOptionValue(this.props.options[nextIndex]));
- }
-
- render() {
- const { props } = this;
- const {
- icon,
- iconRotation,
- iconSpin,
- clipSelectedText = true,
- color = 'default',
- dropdownStyle,
- over,
- nochevron,
- width,
- onClick,
- onSelected,
- selected,
- disabled,
- displayText,
- buttons,
- ...boxProps
- } = props;
- const { className, ...rest } = boxProps;
-
- const adjustedOpen = over ? !this.state.open : this.state.open;
-
- return (
-
-
- {
- if (disabled && !this.state.open) {
- return;
- }
- this.setOpen(!this.state.open);
- if (onClick) {
- onClick(event);
- }
+ {icon && (
+
+ )}
+
- {icon && (
-
- )}
-
- {displayText || this.state.selected}
+ {displayText || selected}
+
+ {!noChevron && (
+
+
- {nochevron || (
-
-
-
- )}
-
-
+ )}
+
+
{buttons && (
<>
-
- {
- if (disabled) {
- return;
- }
-
- this.toPrevious();
- }}
- />
-
-
- {
- if (disabled) {
- return;
- }
-
- this.toNext();
- }}
- />
-
+ {
+ updateSelected('previous');
+ }}
+ />
+
+ {
+ updateSelected('next');
+ }}
+ />
>
)}
-
- );
- }
+
+
+ );
}
diff --git a/tgui/packages/tgui/components/Icon.tsx b/tgui/packages/tgui/components/Icon.tsx
index 6ee5a61fe12..cf0b55dfa8c 100644
--- a/tgui/packages/tgui/components/Icon.tsx
+++ b/tgui/packages/tgui/components/Icon.tsx
@@ -24,16 +24,16 @@ type IconPropsUnique = { name: string } & Partial<{
export type IconProps = IconPropsUnique & BoxProps;
export const Icon = (props: IconProps) => {
- let { style = {}, ...restlet } = props;
- const { name, size, spin, className, rotation, ...rest } = restlet;
+ const { name, size, spin, className, rotation, ...rest } = props;
+ const customStyle = rest.style || {};
if (size) {
- style['fontSize'] = size * 100 + '%';
+ customStyle.fontSize = size * 100 + '%';
}
if (rotation) {
- style['transform'] = `rotate(${rotation}deg)`;
+ customStyle.transform = `rotate(${rotation}deg)`;
}
- rest.style = style;
+ rest.style = customStyle;
const boxProps = computeBoxProps(rest);
diff --git a/tgui/packages/tgui/components/Input.tsx b/tgui/packages/tgui/components/Input.tsx
index d9ecf31e908..a8c9038022e 100644
--- a/tgui/packages/tgui/components/Input.tsx
+++ b/tgui/packages/tgui/components/Input.tsx
@@ -6,6 +6,7 @@
import { KEY } from 'common/keys';
import { classes } from 'common/react';
+import { debounce } from 'common/timer';
import { KeyboardEvent, SyntheticEvent, useEffect, useRef } from 'react';
import { Box, BoxProps } from './Box';
@@ -14,6 +15,7 @@ type Props = Partial<{
autoFocus: boolean;
autoSelect: boolean;
className: string;
+ disabled: boolean;
fluid: boolean;
maxLength: number;
monospace: boolean;
@@ -34,11 +36,17 @@ type Props = Partial<{
export const toInputValue = (value: string | number | undefined) =>
typeof value !== 'number' && typeof value !== 'string' ? '' : String(value);
+const inputDebounce = debounce((onInput: () => void) => onInput(), 200);
+
export const Input = (props: Props) => {
const {
autoFocus,
autoSelect,
+ className,
+ disabled,
+ fluid,
maxLength,
+ monospace,
onChange,
onEnter,
onEscape,
@@ -46,9 +54,8 @@ export const Input = (props: Props) => {
placeholder,
selfClear,
value,
- ...boxProps
+ ...rest
} = props;
- const { className, fluid, monospace, ...rest } = boxProps;
const inputRef = useRef
(null);
@@ -70,27 +77,36 @@ export const Input = (props: Props) => {
event.currentTarget.value = toInputValue(value);
event.currentTarget.blur();
-
- return;
}
};
+ /** Focuses the input on mount */
useEffect(() => {
+ if (!autoFocus && !autoSelect) return;
+
const input = inputRef.current;
if (!input) return;
- input.value = toInputValue(value);
- if (autoFocus || autoSelect) {
- setTimeout(() => {
- input.focus();
+ setTimeout(() => {
+ input.focus();
- if (autoSelect) {
- input.select();
- }
- }, 1);
- }
+ if (autoSelect) {
+ input.select();
+ }
+ }, 1);
}, []);
+ /** Updates the initial value on props change */
+ useEffect(() => {
+ const input = inputRef.current;
+ if (!input) return;
+
+ const newValue = toInputValue(value);
+ if (input.value === newValue) return;
+
+ input.value = newValue;
+ }, [value]);
+
return (
{
.
onChange?.(event, event.target.value)}
- onChange={(event) => onInput?.(event, event.target.value)}
+ onChange={(event) =>
+ onInput && inputDebounce(() => onInput(event, event.target.value))
+ }
onKeyDown={handleKeyDown}
placeholder={placeholder}
ref={inputRef}
diff --git a/tgui/packages/tgui/components/Popper.tsx b/tgui/packages/tgui/components/Popper.tsx
index 245135cda97..973673b81fe 100644
--- a/tgui/packages/tgui/components/Popper.tsx
+++ b/tgui/packages/tgui/components/Popper.tsx
@@ -1,89 +1,101 @@
-import { createPopper } from '@popperjs/core';
+import { createPopper, Placement } from '@popperjs/core';
import { ArgumentsOf } from 'common/types';
import {
- Component,
- CSSProperties,
- JSXElementConstructor,
PropsWithChildren,
- ReactElement,
- RefObject,
+ useCallback,
+ useEffect,
+ useMemo,
+ useRef,
} from 'react';
-import { findDOMNode, render } from 'react-dom';
+import { CSSProperties, JSXElementConstructor, ReactElement } from 'react';
+import { createPortal } from 'react-dom';
-type PopperProps = {
- popperContent: ReactElement>;
- options?: ArgumentsOf[2];
- additionalStyles?: CSSProperties;
-} & PropsWithChildren;
+type Props = {
+ isOpen: boolean;
+ popperContent: ReactElement> | null;
+} & Partial<{
+ additionalStyles: CSSProperties;
+ autoFocus: boolean;
+ onClickOutside: () => void;
+ options: ArgumentsOf[2];
+ placement: Placement;
+}> &
+ PropsWithChildren;
-export class Popper extends Component {
- static id: number = 0;
- popperRef: RefObject;
+export function Popper(props: Props) {
+ const {
+ additionalStyles,
+ autoFocus,
+ children,
+ isOpen,
+ placement,
+ popperContent,
+ options = {},
+ onClickOutside,
+ } = props;
- renderedContent: HTMLDivElement;
- popperInstance: ReturnType;
+ const parentRef = useRef(null);
+ const popperRef = useRef(null);
- constructor(props) {
- super(props);
-
- Popper.id += 1;
- }
+ const handleClickOutside = useCallback((event: MouseEvent) => {
+ if (
+ !parentRef.current?.contains(event.target as Node) &&
+ !popperRef.current?.contains(event.target as Node)
+ ) {
+ onClickOutside?.();
+ }
+ }, []);
- componentDidMount() {
- const { additionalStyles, options } = this.props;
+ /** Create the popper instance when the component mounts */
+ useEffect(() => {
+ if (!parentRef.current || !popperRef.current) return;
+ if (placement) options.placement = placement;
- this.renderedContent = document.createElement('div');
+ const instance = createPopper(
+ parentRef.current,
+ popperRef.current,
+ options,
+ );
- if (additionalStyles) {
- for (const [attribute, value] of Object.entries(additionalStyles)) {
- this.renderedContent.style[attribute] = value;
- }
- }
+ return () => {
+ instance.destroy();
+ };
+ }, [options]);
- this.renderPopperContent(() => {
- document.body.appendChild(this.renderedContent);
+ /** Focus when opened, adds click outside listener */
+ useEffect(() => {
+ if (!isOpen) return;
- // HACK: We don't want to create a wrapper, as it could break the layout
- // of consumers, so we use findDOMNode.
- // This is usually bad as refs are usually better, but refs did
- // not work in this case, as they weren't propagating correctly.
- // A previous attempt was made as a render prop that passed an ID,
- // but this made consuming use too unwieldly.
- // Because this component is written in TypeScript, we will know
- // immediately if this internal variable is removed.
- //
- // eslint-disable-next-line react/no-find-dom-node
- const domNode = findDOMNode(this) as Element;
- if (!domNode) {
- return;
- }
-
- this.popperInstance = createPopper(
- domNode,
- this.renderedContent,
- options,
- );
- });
- }
+ if (autoFocus) {
+ const focusable = popperRef.current?.firstChild as HTMLElement | null;
+ focusable?.focus();
+ }
- componentDidUpdate() {
- this.renderPopperContent(() => this.popperInstance?.update());
- }
+ if (!onClickOutside) return;
- componentWillUnmount() {
- this.popperInstance?.destroy();
- render(<> >, this.renderedContent, () => {
- this.renderedContent.remove();
- });
- }
+ document.addEventListener('mousedown', handleClickOutside);
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ };
+ }, [isOpen]);
- renderPopperContent(callback: () => void) {
- // `render` errors when given false, so we convert it to `null`,
- // which is supported.
- render(this.props.popperContent || null, this.renderedContent, callback);
- }
+ const contentStyle = useMemo(() => {
+ return {
+ ...additionalStyles,
+ position: 'absolute',
+ zIndex: 1000,
+ } as CSSProperties;
+ }, [additionalStyles]);
- render() {
- return this.props.children;
- }
+ return (
+ <>
+ {children}
+ {createPortal(
+
+ {isOpen && popperContent}
+
,
+ document.body,
+ )}
+ >
+ );
}
diff --git a/tgui/packages/tgui/components/TextArea.tsx b/tgui/packages/tgui/components/TextArea.tsx
index 71b3f3e1bda..82302b98b2b 100644
--- a/tgui/packages/tgui/components/TextArea.tsx
+++ b/tgui/packages/tgui/components/TextArea.tsx
@@ -15,7 +15,7 @@ import {
useRef,
useState,
} from 'react';
-import { ChangeEvent, KeyboardEvent } from 'react';
+import { KeyboardEvent, SyntheticEvent } from 'react';
import { Box, BoxProps } from './Box';
import { toInputValue } from './Input';
@@ -25,14 +25,17 @@ type Props = Partial<{
autoSelect: boolean;
displayedValue: string;
dontUseTabForIndent: boolean;
+ fluid: boolean;
maxLength: number;
noborder: boolean;
- // This fires when: value changes
- onChange: (event: ChangeEvent, value: string) => void;
- // This fires when: enter is pressed
- onEnter: (event: KeyboardEvent, value: string) => void;
- // This fires when: escape is pressed
- onEscape: (event: KeyboardEvent) => void;
+ /** Fires when user is 'done typing': Clicked out, blur, enter key (but not shift+enter) */
+ onChange: (event: SyntheticEvent, value: string) => void;
+ /** Fires once the enter key is pressed */
+ onEnter: (event: SyntheticEvent, value: string) => void;
+ /** Fires once the escape key is pressed */
+ onEscape: (event: SyntheticEvent) => void;
+ /** Fires on each key press / value change. Used for searching */
+ onInput: (event: SyntheticEvent, value: string) => void;
placeholder: string;
scrollbar: boolean;
selfClear: boolean;
@@ -52,6 +55,7 @@ export const TextArea = forwardRef(
onChange,
onEnter,
onEscape,
+ onInput,
placeholder,
scrollbar,
selfClear,
@@ -66,7 +70,7 @@ export const TextArea = forwardRef(
const handleKeyDown = (event: KeyboardEvent) => {
if (event.key === KEY.Enter) {
if (event.shiftKey) {
- onChange?.(event as any, event.currentTarget.value);
+ event.currentTarget.focus();
return;
}
@@ -75,7 +79,6 @@ export const TextArea = forwardRef(
event.currentTarget.value = '';
}
event.currentTarget.blur();
-
return;
}
@@ -107,12 +110,13 @@ export const TextArea = forwardRef(
() => textareaRef.current as HTMLTextAreaElement,
);
+ /** Focuses the input on mount */
useEffect(() => {
+ if (!autoFocus && !autoSelect) return;
+
const input = textareaRef.current;
if (!input) return;
- input.value = toInputValue(value);
-
if (autoFocus || autoSelect) {
setTimeout(() => {
input.focus();
@@ -124,6 +128,17 @@ export const TextArea = forwardRef(
}
}, []);
+ /** Updates the initial value on props change */
+ useEffect(() => {
+ const input = textareaRef.current;
+ if (!input) return;
+
+ const newValue = toInputValue(value);
+ if (input.value === newValue) return;
+
+ input.value = newValue;
+ }, [value]);
+
return (
onChange?.(event, event.target.value)}
+ onBlur={(event) => onChange?.(event, event.target.value)}
+ onChange={(event) => onInput?.(event, event.target.value)}
onKeyDown={handleKeyDown}
onScroll={() => {
if (displayedValue && textareaRef.current) {
diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts
index c038cd6740a..84d0aed206f 100644
--- a/tgui/packages/tgui/constants.ts
+++ b/tgui/packages/tgui/constants.ts
@@ -28,7 +28,7 @@ export const COLORS = {
science: '#9b59b6',
engineering: '#f1c40f',
cargo: '#f39c12',
- service: '#6ca729', // SKYRAT EDIT - Crew Monitor Updates
+ service: '#6ca729', // NOVA EDIT - Crew Monitor Updates
centcom: '#00c100',
other: '#c38312',
},
diff --git a/tgui/packages/tgui/events.ts b/tgui/packages/tgui/events.ts
index a31f4821d6e..cc53d31bfab 100644
--- a/tgui/packages/tgui/events.ts
+++ b/tgui/packages/tgui/events.ts
@@ -122,7 +122,6 @@ window.addEventListener('focusin', (e) => {
setWindowFocus(true);
if (canStealFocus(e.target as HTMLElement)) {
stealFocus(e.target as HTMLElement);
- return;
}
});
diff --git a/tgui/packages/tgui/interfaces/AdminFax.jsx b/tgui/packages/tgui/interfaces/AdminFax.jsx
index 2ecc8974d42..70f752c42e5 100644
--- a/tgui/packages/tgui/interfaces/AdminFax.jsx
+++ b/tgui/packages/tgui/interfaces/AdminFax.jsx
@@ -63,7 +63,7 @@ export const FaxMainPanel = (props) => {
textAlign="center"
selected="Choose fax machine..."
width="100%"
- nochevron
+ noChevron
nowrap
options={data.faxes}
onSelected={(value) => setFax(value)}
diff --git a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx
index 169912df365..9e248a01033 100644
--- a/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx
+++ b/tgui/packages/tgui/interfaces/AiVoiceChanger.tsx
@@ -40,7 +40,7 @@ export const AiVoiceChanger = (props) => {
act('verb', {
verb: value,
@@ -58,7 +58,7 @@ export const AiVoiceChanger = (props) => {
act('name', {
name: value,
diff --git a/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx b/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx
index 137fa132a9b..0265a0b9da2 100644
--- a/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx
+++ b/tgui/packages/tgui/interfaces/AmmoWorkbench.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { toTitleCase } from 'common/string';
import { useState } from 'react';
diff --git a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx
index 3a121feeaa8..bc188ac6f7a 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoAssaultops.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { BooleanLike } from 'common/react';
import { useState } from 'react';
@@ -110,7 +110,7 @@ export const AntagInfoAssaultops = (props) => {
-
+
{
const { act, data } = useBackend();
const { available_targets, extracted_targets } = data;
return (
-
+
Target List
@@ -201,7 +201,7 @@ const KeyPrintout = (props) => {
const { act, data } = useBackend();
const { goldeneye_keys } = data;
return (
-
+
GoldenEye Keycards
diff --git a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx
index 058c2fe2fbf..a5312ba9e77 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx
@@ -8,7 +8,7 @@ import {
Stack,
} from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import { Objective } from './common/Objectives';
type Data = {
@@ -32,7 +32,7 @@ export const AntagInfoBlob = (props) => {
-
+
diff --git a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
index ea7b77cd033..4e75841d7cb 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoChangeling.tsx
@@ -12,7 +12,7 @@ import {
Stack,
} from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import {
Objective,
ObjectivePrintout,
@@ -68,7 +68,7 @@ type Info = {
can_change_objective: BooleanLike;
};
-// SKYRAT EDIT change height from 750 to 900
+// NOVA EDIT change height from 750 to 900
export const AntagInfoChangeling = (props) => {
return (
@@ -81,11 +81,11 @@ export const AntagInfoChangeling = (props) => {
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoClock.tsx b/tgui/packages/tgui/interfaces/AntagInfoClock.tsx
index 78911f8462c..d3ee6a0c377 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoClock.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoClock.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Icon, Section, Stack } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx
index ff6eb51c913..5e9fc82c03b 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx
@@ -1,7 +1,7 @@
import { useBackend } from '../backend';
import { Section, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import { Objective, ObjectivePrintout } from './common/Objectives';
type Info = {
@@ -9,7 +9,7 @@ type Info = {
objectives: Objective[];
};
-// SKYRAT EDIT increase height from 250 to 500
+// NOVA EDIT increase height from 250 to 500
export const AntagInfoGeneric = (props) => {
const { data } = useBackend();
const { antag_name, objectives } = data;
@@ -21,11 +21,11 @@ export const AntagInfoGeneric = (props) => {
You are the {antag_name}!
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
index d2786748357..d0f6ce13c9e 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
@@ -4,7 +4,7 @@ import { useState } from 'react';
import { useBackend } from '../backend';
import { BlockQuote, Box, Button, Section, Stack, Tabs } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import {
Objective,
ObjectivePrintout,
@@ -70,11 +70,11 @@ const IntroductionSection = (props) => {
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
@@ -87,8 +87,8 @@ const IntroductionSection = (props) => {
fill
titleMessage={
can_change_objective
- ? 'Your OPFOR objectives are your primary ones, but in order to ascend, you have these tasks to fulfill' /* SKYRAT EDIT CHANGE - opfor objectives */
- : 'Your OPFOR objectives are your primary ones. Use your dark knowledge to fulfill your personal goal' /* SKYRAT EDIT CHANGE - opfor objectives */
+ ? 'Your OPFOR objectives are your primary ones, but in order to ascend, you have these tasks to fulfill' /* NOVA EDIT CHANGE - opfor objectives */
+ : 'Your OPFOR objectives are your primary ones. Use your dark knowledge to fulfill your personal goal' /* NOVA EDIT CHANGE - opfor objectives */
}
objectives={objectives}
objectiveFollowup={
diff --git a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx
index 1bfa4c7db80..6e2713726df 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoMalf.tsx
@@ -5,7 +5,7 @@ import { useState } from 'react';
import { useBackend } from '../backend';
import { BlockQuote, Button, Section, Stack, Tabs } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import {
Objective,
ObjectivePrintout,
@@ -62,7 +62,7 @@ const IntroductionSection = (props) => {
/>
}
/>
-
+
@@ -81,7 +81,7 @@ const FlavorSection = (props) => {
mr={-0.8}
mt={-0.5}
icon="hammer"
- /* SKYRAT EDIT: ORIGINAL TOOLTIP
+ /* NOVA EDIT: ORIGINAL TOOLTIP
tooltip={multiline`
This is a gameplay suggestion for bored ais.
You don't have to follow it, unless you want some
diff --git a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx
index 1a1321c6c28..818b1cf01c6 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoMorph.tsx
@@ -1,6 +1,6 @@
import { BlockQuote, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
const goodstyle = {
color: 'lightgreen',
@@ -49,11 +49,11 @@ export const AntagInfoMorph = (props) => {
{' '}
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx
index 9cd852db704..022d2b52f67 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoNightmare.tsx
@@ -1,6 +1,6 @@
import { BlockQuote, LabeledList, Section, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
const tipstyle = {
color: 'white',
@@ -69,11 +69,11 @@ export const AntagInfoNightmare = (props) => {
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx
index b8a7ca96987..0e6fe241715 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoNinja.tsx
@@ -3,7 +3,7 @@ import { BooleanLike } from 'common/react';
import { useBackend } from '../backend';
import { Icon, Section, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import {
Objective,
ObjectivePrintout,
@@ -54,11 +54,11 @@ export const AntagInfoNinja = (props) => {
what you can do!
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
{
Special Rules:
{
-
+
Special Rules and Metaprotections!
}
diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
index 049a70313b8..a425a519253 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
@@ -4,7 +4,7 @@ import { multiline } from 'common/string';
import { useBackend } from '../backend';
import { BlockQuote, Button, Dimmer, Section, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import { Objective, ObjectivePrintout } from './common/Objectives';
const allystyle = {
@@ -50,14 +50,14 @@ const IntroductionSection = (props) => {
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
);
@@ -230,7 +230,7 @@ const CodewordsSection = (props) => {
);
};
-// SKYRAT EDIT: change height from 580 to 650
+// NOVA EDIT: change height from 580 to 650
export const AntagInfoTraitor = (props) => {
const { data } = useBackend();
const { theme } = data;
diff --git a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx
index c726bf9bee8..dedac234970 100644
--- a/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx
+++ b/tgui/packages/tgui/interfaces/AntagInfoWizard.tsx
@@ -3,7 +3,7 @@ import { BooleanLike } from 'common/react';
import { useBackend } from '../backend';
import { Box, Section, Stack } from '../components';
import { Window } from '../layouts';
-import { Rules } from './AntagInfoRules'; // SKYRAT EDIT ADDITION
+import { Rules } from './AntagInfoRules'; // NOVA EDIT ADDITION
import {
Objective,
ObjectivePrintout,
@@ -85,11 +85,11 @@ export const AntagInfoWizard = (props) => {
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
diff --git a/tgui/packages/tgui/interfaces/ArmamentStation.jsx b/tgui/packages/tgui/interfaces/ArmamentStation.jsx
index 08087f49de2..1ccead0aba9 100644
--- a/tgui/packages/tgui/interfaces/ArmamentStation.jsx
+++ b/tgui/packages/tgui/interfaces/ArmamentStation.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend, useLocalState } from '../backend';
import {
Box,
@@ -19,7 +19,7 @@ export const ArmamentStation = (props) => {
return (
-
+
{card_inserted ? (
diff --git a/tgui/packages/tgui/interfaces/Autolathe.tsx b/tgui/packages/tgui/interfaces/Autolathe.tsx
index 0640dab309f..45d7051e437 100644
--- a/tgui/packages/tgui/interfaces/Autolathe.tsx
+++ b/tgui/packages/tgui/interfaces/Autolathe.tsx
@@ -252,16 +252,16 @@ const AutolatheRecipe = (props: AutolatheRecipeProps) => {
])}
>
act('make', {
id: design.id,
multiplier: value,
})
}
- />
+ >
+ [Max: {maxmult}]
+
);
diff --git a/tgui/packages/tgui/interfaces/BasketballPanel.tsx b/tgui/packages/tgui/interfaces/BasketballPanel.tsx
index d33f59d0797..f349b5137da 100644
--- a/tgui/packages/tgui/interfaces/BasketballPanel.tsx
+++ b/tgui/packages/tgui/interfaces/BasketballPanel.tsx
@@ -40,7 +40,7 @@ export const BasketballPanel = (props) => {
/>
= data.players_min)}
+ disabled={data.total_votes < data.players_min}
onClick={() => act('basketball_start')}
>
Start
diff --git a/tgui/packages/tgui/interfaces/BluespaceArtillerySkyrat.tsx b/tgui/packages/tgui/interfaces/BluespaceArtillerySkyrat.tsx
index fd29ca62d21..5d4d0b7b55c 100644
--- a/tgui/packages/tgui/interfaces/BluespaceArtillerySkyrat.tsx
+++ b/tgui/packages/tgui/interfaces/BluespaceArtillerySkyrat.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { BooleanLike } from 'common/react';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/BorerChem.jsx b/tgui/packages/tgui/interfaces/BorerChem.jsx
index 42b7841abe1..9016465c5cc 100644
--- a/tgui/packages/tgui/interfaces/BorerChem.jsx
+++ b/tgui/packages/tgui/interfaces/BorerChem.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { toFixed } from 'common/math';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/BorerEvolution.tsx b/tgui/packages/tgui/interfaces/BorerEvolution.tsx
index a906cb24ee8..872e96980dd 100644
--- a/tgui/packages/tgui/interfaces/BorerEvolution.tsx
+++ b/tgui/packages/tgui/interfaces/BorerEvolution.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { BlockQuote, Button, Section, Stack } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/CameraConsole.tsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx
index 0900bdec46a..974b85895e9 100644
--- a/tgui/packages/tgui/interfaces/CameraConsole.tsx
+++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx
@@ -118,7 +118,7 @@ const CameraSelector = (props) => {
fluid
mt={1}
placeholder="Search for a camera"
- onChange={(e, value) => setSearchText(value)}
+ onInput={(e, value) => setSearchText(value)}
/>
diff --git a/tgui/packages/tgui/interfaces/Canvas.tsx b/tgui/packages/tgui/interfaces/Canvas.tsx
index f47dafe0ce9..86d68ce3331 100644
--- a/tgui/packages/tgui/interfaces/Canvas.tsx
+++ b/tgui/packages/tgui/interfaces/Canvas.tsx
@@ -288,11 +288,10 @@ export const Canvas = (props) => {
{!!data.editable && !!data.paint_tool_color && (
act('toggle_grid')}
- size={1.5}
m={0.5}
/>
diff --git a/tgui/packages/tgui/interfaces/Cargo.jsx b/tgui/packages/tgui/interfaces/Cargo.jsx
index f160970bc51..5f50d5b05d7 100644
--- a/tgui/packages/tgui/interfaces/Cargo.jsx
+++ b/tgui/packages/tgui/interfaces/Cargo.jsx
@@ -31,9 +31,9 @@ export const Cargo = (props) => {
};
export const CargoContent = (props) => {
- /* SKYRAT EDIT BELOW - ADDS act */
+ /* NOVA EDIT BELOW - ADDS act */
const { act, data } = useBackend();
- /* SKYRAT EDIT END */
+ /* NOVA EDIT END */
const [tab, setTab] = useSharedState('tab', 'catalog');
const { cart = [], requests = [], requestonly } = data;
const cart_length = cart.reduce((total, entry) => total + entry.amount, 0);
diff --git a/tgui/packages/tgui/interfaces/CargoImportConsole.jsx b/tgui/packages/tgui/interfaces/CargoImportConsole.jsx
index 2854aee9828..42e2ad499c2 100644
--- a/tgui/packages/tgui/interfaces/CargoImportConsole.jsx
+++ b/tgui/packages/tgui/interfaces/CargoImportConsole.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useState } from 'react';
import { useBackend } from '../backend';
@@ -24,7 +24,7 @@ export const CargoImportConsole = (props) => {
height={600}
>
-
+
{
buttons={
- {genetic_points_count && genetic_points_count}{' '}
-
+ {genetic_points_count}
- Skyrat Space Station 13
+ Nova Sector
Thanks to:
- Traditional Games 13, Baystation 12, /vg/station, NTstation, CDK
- Station devs,FacepunchStation, GoonStation devs, the original Space
- Station 13 developers, Invisty for the title image and the countless
- others who have contributed to the game.
+ Traditional Games 13, Skyrat Station 13, Baystation 12, /vg/station,
+ NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the
+ original Space Station 13 developers, Invisty for the title image and
+ the countless others who have contributed to the game.
{'Current project maintainers can be found '}
- here
+ here
{', recent GitHub contributors can be found '}
-
+
here
.
-
+ {/*
{'You can also join our forums '}
- here .
-
+ here .
+ */}
{dateDropdown}
);
diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.tsx b/tgui/packages/tgui/interfaces/ChemDispenser.tsx
index e114d5f5b1d..98860b19df4 100644
--- a/tgui/packages/tgui/interfaces/ChemDispenser.tsx
+++ b/tgui/packages/tgui/interfaces/ChemDispenser.tsx
@@ -150,7 +150,7 @@ export const ChemDispenser = (props) => {
{recipes.length === 0 && No recipes. }
- act('custom_amount')}
diff --git a/tgui/packages/tgui/interfaces/ChemHeater.jsx b/tgui/packages/tgui/interfaces/ChemHeater.jsx
deleted file mode 100644
index 88634b5736e..00000000000
--- a/tgui/packages/tgui/interfaces/ChemHeater.jsx
+++ /dev/null
@@ -1,339 +0,0 @@
-import { round, toFixed } from 'common/math';
-
-import { resolveAsset } from '../assets';
-import { useBackend } from '../backend';
-import {
- AnimatedNumber,
- Box,
- Button,
- Flex,
- Icon,
- NumberInput,
- ProgressBar,
- RoundGauge,
- Section,
- Table,
-} from '../components';
-import { COLORS } from '../constants';
-import { Window } from '../layouts';
-import { BeakerContents } from './common/BeakerContents';
-
-export const ChemHeater = (props) => {
- const { act, data } = useBackend();
- const {
- targetTemp,
- isActive,
- isFlashing,
- currentpH,
- isBeakerLoaded,
- currentTemp,
- beakerCurrentVolume,
- beakerMaxVolume,
- acidicBufferVol,
- basicBufferVol,
- dispenseVolume,
- upgradeLevel,
- tutorialMessage,
- beakerContents = [],
- activeReactions = [],
- } = data;
- return (
-
-
-
- act('help')}
- />
- act('power')}
- />
-
- }
- >
-
-
-
- Heat
-
-
-
- Buffers
-
-
-
-
- act('disp_vol', {
- target: value,
- })
- }
- />
-
-
-
-
- Target:
-
-
-
- act('temperature', {
- target: value,
- })
- }
- />
-
-
- Acidic:
-
-
-
- act('acidBuffer', {
- target: 1,
- })
- }
- />
-
-
- {acidicBufferVol + 'u'}
-
-
-
- act('acidBuffer', {
- target: -100,
- })
- }
- />
-
-
-
-
- Reading:
-
-
-
- {(isBeakerLoaded && (
- toFixed(value) + ' K'}
- />
- )) ||
- '—'}
-
-
-
- Basic:
-
-
-
- act('basicBuffer', {
- target: 1,
- })
- }
- />
-
-
- {basicBufferVol + 'u'}
-
-
-
- act('basicBuffer', {
- target: -100,
- })
- }
- />
-
-
-
-
- {!!isBeakerLoaded && (
-
-
- 'pH: ' + round(value, 3)}
- />
-
-
- ''}
- ranges={{
- red: [-0.22, 1.5],
- orange: [1.5, 3],
- yellow: [3, 4.5],
- olive: [4.5, 5],
- good: [5, 6],
- green: [6, 8.5],
- teal: [8.5, 9.5],
- blue: [9.5, 11],
- purple: [11, 12.5],
- violet: [12.5, 14],
- }}
- />
-
-
- }
- >
- {(activeReactions.length === 0 && (
- No active reactions.
- )) || (
-
-
-
- Reaction
-
-
- {upgradeLevel < 4 ? 'Status' : 'Reaction quality'}
-
-
- Target
-
-
- {activeReactions.map((reaction) => (
-
-
- {reaction.name}
-
-
- {(upgradeLevel < 4 && (
-
- )) || (
- ''}
- ml={5}
- ranges={{
- red: [0, reaction.minPure],
- orange: [reaction.minPure, reaction.inverse],
- yellow: [reaction.inverse, 0.8],
- green: [0.8, 1],
- }}
- />
- )}
-
-
- {(upgradeLevel > 2 && (
-
- {reaction.targetVol}u
-
- )) || (
-
- {reaction.targetVol}u
-
- )}
-
-
- ))}
-
-
- )}
-
- )}
- {tutorialMessage && (
-
-
- {tutorialMessage}
-
- )}
-
-
- {beakerCurrentVolume} / {beakerMaxVolume} units
-
- act('eject')}
- />
- >
- )
- }
- >
-
-
-
-
- );
-};
diff --git a/tgui/packages/tgui/interfaces/ChemHeater.tsx b/tgui/packages/tgui/interfaces/ChemHeater.tsx
new file mode 100644
index 00000000000..6ac5d757ca1
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/ChemHeater.tsx
@@ -0,0 +1,335 @@
+import { round, toFixed } from '../../common/math';
+import { BooleanLike } from '../../common/react';
+import { useBackend } from '../backend';
+import {
+ AnimatedNumber,
+ Box,
+ Button,
+ Flex,
+ Icon,
+ NumberInput,
+ ProgressBar,
+ RoundGauge,
+ Section,
+ Table,
+} from '../components';
+import { COLORS } from '../constants';
+import { Window } from '../layouts';
+import { Beaker, BeakerSectionDisplay } from './common/BeakerDisplay';
+
+type ActiveReaction = {
+ name: string;
+ danger: BooleanLike;
+ overheat: BooleanLike;
+ purityAlert: number;
+ quality: number;
+ inverse: number;
+ minPure: number;
+ reactedVol: number;
+ targetVol: number;
+};
+
+type Data = {
+ targetTemp: number;
+ isActive: BooleanLike;
+ upgradeLevel: number;
+ beaker: Beaker;
+ currentTemp: number;
+ activeReactions: ActiveReaction[];
+ isFlashing: number;
+ acidicBufferVol: number;
+ basicBufferVol: number;
+ dispenseVolume: number;
+};
+
+export const ChemHeater = (props) => {
+ const { act, data } = useBackend();
+ const {
+ targetTemp,
+ isActive,
+ isFlashing,
+ beaker,
+ currentTemp,
+ acidicBufferVol,
+ basicBufferVol,
+ dispenseVolume,
+ upgradeLevel,
+ activeReactions = [],
+ } = data;
+ const isBeakerLoaded = beaker !== null;
+
+ return (
+
+
+
+ act('power')}
+ >
+ {isActive ? 'On' : 'Off'}
+
+
+ }
+ >
+
+
+
+ Heat
+
+
+
+ Buffers
+
+
+
+
+ act('disp_vol', {
+ target: value,
+ })
+ }
+ />
+
+
+
+
+ Target:
+
+
+
+ act('temperature', {
+ target: value,
+ })
+ }
+ />
+
+
+ Acidic:
+
+
+
+ act('acidBuffer', {
+ target: 1,
+ })
+ }
+ />
+
+
+ {acidicBufferVol + 'u'}
+
+
+
+ act('acidBuffer', {
+ target: -100,
+ })
+ }
+ />
+
+
+
+
+ Reading:
+
+
+
+ {(isBeakerLoaded && (
+ toFixed(value) + ' K'}
+ />
+ )) ||
+ '—'}
+
+
+
+ Basic:
+
+
+
+ act('basicBuffer', {
+ target: 1,
+ })
+ }
+ />
+
+
+ {basicBufferVol + 'u'}
+
+
+
+ act('basicBuffer', {
+ target: -100,
+ })
+ }
+ />
+
+
+
+
+ {!!isBeakerLoaded && (
+
+
+ 'pH: ' + round(value, 3)}
+ />
+
+
+ ''}
+ ranges={{
+ red: [-0.22, 1.5],
+ orange: [1.5, 3],
+ yellow: [3, 4.5],
+ olive: [4.5, 5],
+ good: [5, 6],
+ green: [6, 8.5],
+ teal: [8.5, 9.5],
+ blue: [9.5, 11],
+ purple: [11, 12.5],
+ violet: [12.5, 14],
+ }}
+ />
+
+
+ }
+ >
+ {(activeReactions.length === 0 && (
+ No active reactions.
+ )) || (
+
+
+
+ Reaction
+
+
+ {upgradeLevel < 4 ? 'Status' : 'Reaction quality'}
+
+
+ Target
+
+
+ {activeReactions.map((reaction) => (
+
+
+ {reaction.name}
+
+
+ {(upgradeLevel < 4 && (
+
+ )) || (
+ ''}
+ ml={5}
+ ranges={{
+ red: [0, reaction.minPure],
+ orange: [reaction.minPure, reaction.inverse],
+ yellow: [reaction.inverse, 0.8],
+ green: [0.8, 1],
+ }}
+ />
+ )}
+
+
+ {(upgradeLevel > 2 && (
+ <>
+ {!!reaction.overheat && (
+
+ )}
+
+ {reaction.targetVol}u
+
+ >
+ )) || (
+
+ {reaction.targetVol}u
+
+ )}
+
+
+ ))}
+
+
+ )}
+
+ )}
+
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx
index fc7826f6286..4242e88c529 100644
--- a/tgui/packages/tgui/interfaces/ChemMaster.tsx
+++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx
@@ -340,7 +340,7 @@ const ReagentEntry = (props) => {
/>
act('transfer', {
@@ -352,7 +352,7 @@ const ReagentEntry = (props) => {
/>
act('analyze', {
reagentRef: chemical.ref,
diff --git a/tgui/packages/tgui/interfaces/ChemPress.jsx b/tgui/packages/tgui/interfaces/ChemPress.jsx
index b91406db3ec..2ef3e06b6b0 100644
--- a/tgui/packages/tgui/interfaces/ChemPress.jsx
+++ b/tgui/packages/tgui/interfaces/ChemPress.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
Box,
diff --git a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx
index 069013c0b7d..0c81311a431 100644
--- a/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx
+++ b/tgui/packages/tgui/interfaces/CircuitAccessChecker.tsx
@@ -28,8 +28,8 @@ export const CircuitAccessChecker = (props) => {
act('set', {
access: ref,
diff --git a/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx b/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx
index c1fb5b4bb98..1fc1f8397f9 100644
--- a/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx
+++ b/tgui/packages/tgui/interfaces/CircuitSignalHandler.tsx
@@ -1,5 +1,5 @@
import { BooleanLike } from 'common/react';
-import { Component, KeyboardEvent } from 'react';
+import { Component, KeyboardEvent, MouseEvent } from 'react';
import { useBackend } from '../backend';
import { Box, Button, Dropdown, Input, Section, Stack } from '../components';
@@ -193,7 +193,7 @@ export class CircuitSignalHandler extends Component<
}
type EntryProps = {
- onRemove: (e: MouseEvent) => any;
+ onRemove: (e: MouseEvent) => any;
onChange: (e: KeyboardEvent, value: string) => any;
onSetOption?: (type: string) => any;
name: string;
@@ -205,7 +205,7 @@ const Entry = (props: EntryProps) => {
const {
onRemove,
onChange,
- onSetOption,
+ onSetOption = () => null,
name,
current_option,
options = [],
diff --git a/tgui/packages/tgui/interfaces/ClockworkResearch.tsx b/tgui/packages/tgui/interfaces/ClockworkResearch.tsx
index 9d0a87ac799..e89f642642d 100644
--- a/tgui/packages/tgui/interfaces/ClockworkResearch.tsx
+++ b/tgui/packages/tgui/interfaces/ClockworkResearch.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { BooleanLike, classes } from '../../common/react';
import { useBackend } from '../backend';
import { Box, Button, Divider, Flex, Section, Stack } from '../components';
@@ -101,7 +101,7 @@ const ResearchSection = (props) => {
const { act, data } = useBackend();
return (
-
+
{ResearchNode(data.starting_research, act)}
diff --git a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx
index 63649326f59..7603f7bf2e7 100644
--- a/tgui/packages/tgui/interfaces/ClockworkSlab.jsx
+++ b/tgui/packages/tgui/interfaces/ClockworkSlab.jsx
@@ -1,8 +1,7 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { Fragment } from 'react';
-import { useState } from 'react';
-import { useBackend } from '../backend';
+import { useBackend, useLocalState } from '../backend';
import {
Box,
Button,
@@ -34,7 +33,10 @@ const convertPower = (power_in) => {
};
export const ClockworkSlab = (props) => {
- const [selectedTab, setSelectedTab] = useState('Servitude');
+ const [selectedTab, setSelectedTab] = useLocalState(
+ 'selectedTab',
+ 'Servitude',
+ );
return (
@@ -334,19 +336,16 @@ const ClockworkOverviewStat = (props) => {
};
const ClockworkButtonSelection = (props) => {
- const [selectedTab, setSelectedTab] = useState({});
+ const [selectedTab, setSelectedTab] = useLocalState('selectedTab', {});
const tabs = ['Servitude', 'Preservation', 'Structures'];
return (
{tabs.map((tab) => (
- setSelectedTab(tab)}
- />
+ setSelectedTab(tab)}>
+ {tab}
+
))}
diff --git a/tgui/packages/tgui/interfaces/CommandReport.tsx b/tgui/packages/tgui/interfaces/CommandReport.tsx
index 4e7b75f5294..816cbd86df5 100644
--- a/tgui/packages/tgui/interfaces/CommandReport.tsx
+++ b/tgui/packages/tgui/interfaces/CommandReport.tsx
@@ -56,17 +56,19 @@ const CentComName = (props) => {
const { act, data } = useBackend();
const { command_name, command_name_presets = [], custom_name } = data;
+ const sendName = (value) => {
+ act('update_command_name', {
+ updated_name: value,
+ });
+ };
+
return (
diff --git a/tgui/packages/tgui/interfaces/CommandReportConsole.jsx b/tgui/packages/tgui/interfaces/CommandReportConsole.jsx
index 8791d1c416a..1f80067b977 100644
--- a/tgui/packages/tgui/interfaces/CommandReportConsole.jsx
+++ b/tgui/packages/tgui/interfaces/CommandReportConsole.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
Button,
diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx
index e578c468e2a..e855063b480 100644
--- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx
+++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx
@@ -253,11 +253,11 @@ const PageMain = (props) => {
canSendToSectors,
canSetAlertLevel,
canToggleEmergencyAccess,
- canToggleEngineeringOverride, // SKYRAT EDIT - Engineering Override
+ canToggleEngineeringOverride, // NOVA EDIT - Engineering Override
emagged,
syndicate,
emergencyAccess,
- engineeringOverride, // SKYRAT EDIT - Engineering Override
+ engineeringOverride, // NOVA EDIT - Engineering Override
importantActionReady,
sectors,
shuttleCalled,
@@ -357,7 +357,7 @@ const PageMain = (props) => {
/>
{
alertLevel="amber"
showAlertLevelConfirm={showAlertLevelConfirm}
setShowAlertLevelConfirm={setShowAlertLevelConfirm}
- // SKYRAT EDIT END
+ // NOVA EDIT END
/>
@@ -400,7 +400,7 @@ const PageMain = (props) => {
/>
)}
- {/* SKYRAT EDIT ADDITION START - Engineering Override */}
+ {/* NOVA EDIT ADDITION START - Engineering Override */}
{!!canToggleEngineeringOverride && (
{
onClick={() => act('toggleEngOverride')}
/>
)}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
{!syndicate && (
{
/>
)}
{
- // SKYRAT EDIT BEGIN
+ // NOVA EDIT BEGIN
}
{!!canMakeAnnouncement && (
{
/>
)}
{
- // SKYRAT EDIT END
+ // NOVA EDIT END
}
diff --git a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx b/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
index f0404682475..1685273c030 100644
--- a/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
+++ b/tgui/packages/tgui/interfaces/CrewConsoleSkyrat.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { sortBy } from 'common/collections';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx b/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx
index fb27deeaeba..34250c381f6 100644
--- a/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx
+++ b/tgui/packages/tgui/interfaces/CrewConsoleSkyratBlueshield.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { sortBy } from 'common/collections';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/CrewManifest.jsx b/tgui/packages/tgui/interfaces/CrewManifest.jsx
index 73d67bf5158..0241ef5e70b 100644
--- a/tgui/packages/tgui/interfaces/CrewManifest.jsx
+++ b/tgui/packages/tgui/interfaces/CrewManifest.jsx
@@ -10,11 +10,11 @@ const commandJobs = [
'Chief Engineer',
'Research Director',
'Chief Medical Officer',
- 'Quartermaster', // SKYRAT EDIT
- 'Nanotrasen Consultant', // SKYRAT EDIT
+ 'Quartermaster', // NOVA EDIT
+ 'Nanotrasen Consultant', // NOVA EDIT
];
-// SKYRAT EDIT CHANGE BEGIN - ALTERNATIVE_JOB_TITLES
+// NOVA EDIT CHANGE BEGIN - ALTERNATIVE_JOB_TITLES
// Any instance of crewMember.trim was originally crewMember.rank
export const CrewManifest = (props) => {
const {
@@ -105,4 +105,4 @@ export const CrewManifest = (props) => {
);
};
-// SKYRAT EDIT CHANGE END - ALTERNATIVE_JOB_TITLES
+// NOVA EDIT CHANGE END - ALTERNATIVE_JOB_TITLES
diff --git a/tgui/packages/tgui/interfaces/CryopodConsole.jsx b/tgui/packages/tgui/interfaces/CryopodConsole.jsx
index 2932046c066..1a2989a4df8 100644
--- a/tgui/packages/tgui/interfaces/CryopodConsole.jsx
+++ b/tgui/packages/tgui/interfaces/CryopodConsole.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Button, LabeledList, NoticeBox, Section, Stack } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/DelamProcedure.tsx b/tgui/packages/tgui/interfaces/DelamProcedure.tsx
index 1dfe78947f3..22b90b5c71f 100644
--- a/tgui/packages/tgui/interfaces/DelamProcedure.tsx
+++ b/tgui/packages/tgui/interfaces/DelamProcedure.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { BlockQuote, Box, NoticeBox, Section } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/EmotePanel.tsx b/tgui/packages/tgui/interfaces/EmotePanel.tsx
index 7d276024ac3..186cdb79ba5 100644
--- a/tgui/packages/tgui/interfaces/EmotePanel.tsx
+++ b/tgui/packages/tgui/interfaces/EmotePanel.tsx
@@ -3,7 +3,7 @@ import { capitalizeFirst } from '../../common/string';
import { useBackend, useLocalState } from '../backend';
import { Box, Button, Flex, Icon, Section } from '../components';
import { Window } from '../layouts';
-import { SearchBar } from './Fabrication/SearchBar';
+import { SearchBar } from './common/SearchBar';
type Emote = {
key: string;
@@ -120,9 +120,9 @@ export const EmotePanelContent = (props) => {
}
>
{
return (
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx
index 6a76a47c7df..b56c4a3d7b3 100644
--- a/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx
+++ b/tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx
@@ -4,7 +4,7 @@ import { ReactNode } from 'react';
import { useSharedState } from '../../backend';
import { Dimmer, Icon, Section, Stack } from '../../components';
-import { SearchBar } from './SearchBar';
+import { SearchBar } from '../common/SearchBar';
import { Design, MaterialMap } from './Types';
/**
@@ -262,9 +262,9 @@ export const DesignBrowser = (
@@ -489,7 +489,7 @@ const CategoryView = (
return (
{body}
diff --git a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx
index 6e7b20058c7..3979815126d 100644
--- a/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx
+++ b/tgui/packages/tgui/interfaces/Fabrication/MaterialAccessBar.tsx
@@ -98,7 +98,7 @@ const MaterialCounter = (props: MaterialCounterProps) => {
sheets < 1 && 'MaterialDock--disabled',
])}
>
-
+
void;
-};
-
-export class SearchBar extends Component {
- timeout?: NodeJS.Timeout;
-
- onInput(value: string) {
- if (this.timeout) {
- clearTimeout(this.timeout);
- }
-
- this.timeout = setTimeout(() => this.props.onSearchTextChanged(value), 200);
- }
-
- render() {
- const { searchText, hint } = this.props;
-
- return (
-
-
-
-
-
- this.onInput(v)}
- value={searchText}
- />
-
-
- );
- }
-}
diff --git a/tgui/packages/tgui/interfaces/Fabricator.tsx b/tgui/packages/tgui/interfaces/Fabricator.tsx
index 04c504028a4..1b02e9f8639 100644
--- a/tgui/packages/tgui/interfaces/Fabricator.tsx
+++ b/tgui/packages/tgui/interfaces/Fabricator.tsx
@@ -129,16 +129,16 @@ const CustomPrint = (props: CustomPrintProps) => {
])}
>
act('build', {
ref: design.id,
amount: value,
})
}
- />
+ >
+ [Max: {design.maxmult}]
+
);
};
diff --git a/tgui/packages/tgui/interfaces/Fax.tsx b/tgui/packages/tgui/interfaces/Fax.tsx
index 9adda81c8d8..45ff5461a2e 100644
--- a/tgui/packages/tgui/interfaces/Fax.tsx
+++ b/tgui/packages/tgui/interfaces/Fax.tsx
@@ -90,7 +90,7 @@ export const Fax = (props) => {
).map((special: FaxSpecial) => (
@@ -106,7 +106,7 @@ export const Fax = (props) => {
{faxes.map((fax: FaxInfo) => (
diff --git a/tgui/packages/tgui/interfaces/Filteriffic.jsx b/tgui/packages/tgui/interfaces/Filteriffic.jsx
index c35b9035acb..5457f261a8e 100644
--- a/tgui/packages/tgui/interfaces/Filteriffic.jsx
+++ b/tgui/packages/tgui/interfaces/Filteriffic.jsx
@@ -323,7 +323,7 @@ export const Filteriffic = (props) => {
act('add_filter', {
diff --git a/tgui/packages/tgui/interfaces/FishingCalculator.tsx b/tgui/packages/tgui/interfaces/FishingCalculator.tsx
index cf9f90a0755..fc13246eb2f 100644
--- a/tgui/packages/tgui/interfaces/FishingCalculator.tsx
+++ b/tgui/packages/tgui/interfaces/FishingCalculator.tsx
@@ -65,7 +65,7 @@ export const FishingCalculator = (props) => {
/>
setBait(value)}
width="100%"
/>
diff --git a/tgui/packages/tgui/interfaces/GlassBlowing.tsx b/tgui/packages/tgui/interfaces/GlassBlowing.tsx
index 7c0e5bd5652..959ca4d0430 100644
--- a/tgui/packages/tgui/interfaces/GlassBlowing.tsx
+++ b/tgui/packages/tgui/interfaces/GlassBlowing.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { toFixed } from 'common/math';
import { BooleanLike } from 'common/react';
diff --git a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx
index 63f5c5b7f54..7704a664229 100644
--- a/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx
+++ b/tgui/packages/tgui/interfaces/IntegratedCircuit/DisplayComponent.jsx
@@ -37,8 +37,8 @@ export class DisplayComponent extends Component {
return false;
}
- render(props) {
- const { component, fixedSize, ...rest } = props;
+ render() {
+ const { component, fixedSize, ...rest } = this.props;
return (
diff --git a/tgui/packages/tgui/interfaces/IntensityCredits.tsx b/tgui/packages/tgui/interfaces/IntensityCredits.tsx
index efaa8307bb4..af9f036ef9a 100644
--- a/tgui/packages/tgui/interfaces/IntensityCredits.tsx
+++ b/tgui/packages/tgui/interfaces/IntensityCredits.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Flex, NoticeBox, Section } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/InteractionMenu.tsx b/tgui/packages/tgui/interfaces/InteractionMenu.tsx
index d8f611f87f5..c6bd08dd251 100644
--- a/tgui/packages/tgui/interfaces/InteractionMenu.tsx
+++ b/tgui/packages/tgui/interfaces/InteractionMenu.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
Box,
@@ -52,18 +52,15 @@ export const InteractionMenu = (props) => {
{categories.map((category) => (
-
-
+
+
{interactions[category].map((interaction) => (
@@ -73,7 +70,9 @@ export const InteractionMenu = (props) => {
userref: ref_user,
})
}
- />
+ >
+ {interaction}
+
))}
diff --git a/tgui/packages/tgui/interfaces/Interview.tsx b/tgui/packages/tgui/interfaces/Interview.tsx
index 7d5d7f1cad9..3f53a177c98 100644
--- a/tgui/packages/tgui/interfaces/Interview.tsx
+++ b/tgui/packages/tgui/interfaces/Interview.tsx
@@ -203,7 +203,7 @@ const QuestionArea = (props: Question) => {
onChange={(e, input) => setUserInput(input)}
onEnter={saveResponse}
placeholder="Write your response here, max of 500 characters. Press enter to submit."
- value={response}
+ value={response || undefined}
/>
)}
diff --git a/tgui/packages/tgui/interfaces/JobSelection.tsx b/tgui/packages/tgui/interfaces/JobSelection.tsx
index 4dbde49add4..1299024b637 100644
--- a/tgui/packages/tgui/interfaces/JobSelection.tsx
+++ b/tgui/packages/tgui/interfaces/JobSelection.tsx
@@ -37,7 +37,7 @@ type Data = {
disable_jobs_for_non_observers: BooleanLike;
priority: BooleanLike;
round_duration: string;
- alert_level: { name: string; color: string }; // SKYRAT EDIT ADDITION - Alert level on jobs menu
+ alert_level: { name: string; color: string }; // NOVA EDIT ADDITION - Alert level on jobs menu
};
export const JobEntry = (data: {
@@ -113,9 +113,9 @@ export const JobSelection = (props) => {
return (
{
{data.shuttle_status}
)}
{
- // SKYRAT EDIT ADDITION - Alert level on jobs menu
+ // NOVA EDIT ADDITION - Alert level on jobs menu
The current alert level is: {data.alert_level.name}
@@ -143,7 +143,7 @@ export const JobSelection = (props) => {
}
titleStyle={{ minHeight: '3.4em' }}
>
-
+
{Object.entries(departments).map((departmentEntry) => {
const departmentName = departmentEntry[0];
const entry = departmentEntry[1];
diff --git a/tgui/packages/tgui/interfaces/Jukebox.jsx b/tgui/packages/tgui/interfaces/Jukebox.jsx
index 69f9917188e..301650fe775 100644
--- a/tgui/packages/tgui/interfaces/Jukebox.jsx
+++ b/tgui/packages/tgui/interfaces/Jukebox.jsx
@@ -34,7 +34,6 @@ export const Jukebox = (props) => {
song.name)}
disabled={active}
diff --git a/tgui/packages/tgui/interfaces/KeycardAuth.jsx b/tgui/packages/tgui/interfaces/KeycardAuth.jsx
index 3562a5c5966..0d4befe6fff 100644
--- a/tgui/packages/tgui/interfaces/KeycardAuth.jsx
+++ b/tgui/packages/tgui/interfaces/KeycardAuth.jsx
@@ -5,7 +5,7 @@ import { Window } from '../layouts';
export const KeycardAuth = (props) => {
const { act, data } = useBackend();
return (
- // SKYRAT EDIT: height 125 -> 190, eng override/firing pin
+ // NOVA EDIT: height 125 -> 190, eng override/firing pin
@@ -44,21 +44,21 @@ export const KeycardAuth = (props) => {
onClick={() => act('emergency_maint')}
content="Emergency Maintenance Access"
/>
- {/* SKYRAT EDIT ADDITION START - Engineering Override */}
+ {/* NOVA EDIT ADDITION START - Engineering Override */}
act('eng_override')}
content="Engineering Override Access"
/>
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
act('bsa_unlock')}
content="Bluespace Artillery Unlock"
/>
- {/* SKYRAT EDIT ADDITION START - Permit Pins */}
+ {/* NOVA EDIT ADDITION START - Permit Pins */}
{!!data.permit_pins && (
{
content="Permit-Locked Firing Pin Unrestriction"
/>
)}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
{
-
+
{category_keys.map((category, index) => (
{
props;
return (
-
+
+
{filteredItems.map((item, index) => {
return (
onClick(index)}
onDoubleClick={(event) => {
diff --git a/tgui/packages/tgui/interfaces/LoadoutManager.tsx b/tgui/packages/tgui/interfaces/LoadoutManager.tsx
index a4997269da6..61484fc2c65 100644
--- a/tgui/packages/tgui/interfaces/LoadoutManager.tsx
+++ b/tgui/packages/tgui/interfaces/LoadoutManager.tsx
@@ -1,9 +1,10 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { BooleanLike } from 'common/react';
+import { createSearch } from 'common/string';
import { useState } from 'react';
import { useBackend } from '../backend';
-import { Box, Button, Dropdown, Section, Stack } from '../components';
+import { Box, Button, Dropdown, Input, Section, Stack } from '../components';
import { Window } from '../layouts';
type LoadoutTabData = {
@@ -34,36 +35,26 @@ type LoadoutTabItem = {
export const LoadoutManager = (props) => {
const { act, data } = useBackend();
const { selected_loadout, loadout_tabs, user_is_donator } = data;
-
const [selectedTabName, setSelectedTab] = useState(loadout_tabs[0]?.name);
const selectedTab = loadout_tabs.find((curTab) => {
return curTab.name === selectedTabName;
});
+ const [searchItem, setSearchItem] = useState('');
+ const search = createSearch(
+ searchItem,
+ (loadoutTabItem: LoadoutTabItem) => loadoutTabItem.name,
+ );
+ const loadout_items_filtered =
+ searchItem.length > 0
+ ? selectedTab?.contents.filter((loadoutTabItem) => search(loadoutTabItem))
+ : selectedTab?.contents;
return (
- act('toggle_tutorial')}
- />
- }
- >
- act('close_ui', { revert: 0 })}
- />
+
{
onSelected={(curTab) => setSelectedTab(curTab)}
/>
+
-
+
{selectedTab && selectedTab.contents ? (
);
@@ -177,20 +173,18 @@ const CategoryViewer = (props: CategoryViewerProps) => {
buttons={
<>
setSearch(value)}
/>
setSearchRegex(!searchRegex)}
/>
setCaseSensitive(!caseSensitive)}
diff --git a/tgui/packages/tgui/interfaces/MODsuit.tsx b/tgui/packages/tgui/interfaces/MODsuit.tsx
index f4f9654abc2..5a979583e1d 100644
--- a/tgui/packages/tgui/interfaces/MODsuit.tsx
+++ b/tgui/packages/tgui/interfaces/MODsuit.tsx
@@ -238,6 +238,22 @@ const ConfigureListEntry = (props) => {
);
};
+const ConfigurePinEntry = (props) => {
+ const { name, value, module_ref } = props;
+ const { act } = useBackend();
+ return (
+
+ act('configure', { key: name, value: !value, ref: module_ref })
+ }
+ icon="thumbtack"
+ selected={value}
+ tooltip="Pin"
+ tooltipPosition="left"
+ />
+ );
+};
+
const ConfigureDataEntry = (props) => {
const { name, display_name, type, value, values, module_ref } = props;
const configureEntryTypes = {
@@ -245,6 +261,7 @@ const ConfigureDataEntry = (props) => {
bool: ,
color: ,
list: ,
+ pin: ,
};
return (
diff --git a/tgui/packages/tgui/interfaces/MafiaPanel.tsx b/tgui/packages/tgui/interfaces/MafiaPanel.tsx
index ab22e8b6c0f..99c795d6364 100644
--- a/tgui/packages/tgui/interfaces/MafiaPanel.tsx
+++ b/tgui/packages/tgui/interfaces/MafiaPanel.tsx
@@ -72,16 +72,9 @@ export const MafiaPanelData = (props) => {
if (phase === 'No Game') {
return (
-
-
-
-
-
-
- {!!admin_controls && }
-
-
-
+
+
+ {!!admin_controls && }
);
}
@@ -89,11 +82,11 @@ export const MafiaPanelData = (props) => {
return (
{!!roleinfo && (
-
+
)}
-
+
{!!roleinfo && (
<>
@@ -107,57 +100,59 @@ export const MafiaPanelData = (props) => {
)}
>
)}
-
- {!!admin_controls && }
-
+
+ {!!admin_controls && }
+
{phase !== 'No Game' && (
-
- <>
-
-
-
-
-
-
- setMafiaMode('Role list')}
- >
- Role list
-
+
+ <>
+
+
+
+
+
+
+ setMafiaMode('Role list')}
+ >
+ Role list
+
-
- setMafiaMode('Notes')}
- >
- Notes
-
+
+ setMafiaMode('Notes')}
+ >
+ Notes
+
-
-
+ />
+
+
+
+ {mafia_tab === 'Role list' && }
+ {mafia_tab === 'Notes' && }
- {mafia_tab === 'Role list' && }
- {mafia_tab === 'Notes' && }
-
- >
-
+ >
+
+
)}
@@ -190,7 +185,6 @@ const MafiaChat = (props) => {
{!!messages && (
<>
- {' '}
{messages.map((message) => (
{decodeHtmlEntities(message.msg)}
@@ -205,21 +199,18 @@ const MafiaChat = (props) => {
placeholder="Type to chat"
value={message_to_send}
/>
-
-
- {
- setMessagingBox('');
- act('send_message_to_chat', { message: message_to_send });
- }}
- />
-
-
+ {
+ setMessagingBox('');
+ act('send_message_to_chat', { message: message_to_send });
+ }}
+ >
+ Send to Chat
+
>
)}
@@ -306,12 +297,10 @@ const MafiaRole = (props) => {
maxHeight="50px"
buttons={
{formatTime(timeleft)}
@@ -377,7 +366,7 @@ const MafiaNotesTab = (props) => {
const { user_notes } = data;
const [note_message, setNotesMessage] = useLocalState('Notes', user_notes);
return (
-
+
);
};
@@ -417,17 +403,15 @@ const MafiaJudgement = (props) => {
act('vote_innocent')}
- />
+ >
+ Innocent
+
It is now time to vote, vote the accused innocent or guilty!
- act('vote_guilty')}
- />
+ act('vote_guilty')}>
+ Guilty
+
act('vote_abstain')}>
diff --git a/tgui/packages/tgui/interfaces/MatrixMathTester.tsx b/tgui/packages/tgui/interfaces/MatrixMathTester.tsx
index 6e0e53a58f6..1f67fd3f3eb 100644
--- a/tgui/packages/tgui/interfaces/MatrixMathTester.tsx
+++ b/tgui/packages/tgui/interfaces/MatrixMathTester.tsx
@@ -1,6 +1,7 @@
import { toFixed } from 'common/math';
+import { useState } from 'react';
-import { useBackend, useLocalState } from '../backend';
+import { useBackend } from '../backend';
import { Button, Input, NumberInput, Section, Table } from '../components';
import { Window } from '../layouts';
@@ -11,7 +12,7 @@ const MatrixMathTesterInput = (props: { value: number; varName: string }) => {
value={props.value}
step={0.005}
format={(value) => toFixed(value, 3)}
- width={'100%'}
+ fluid
onChange={(e, value) =>
act('change_var', { var_name: props.varName, var_value: value })
}
@@ -40,22 +41,23 @@ export const MatrixMathTester = (props) => {
matrix_f,
pixelated,
} = data;
- const [scaleX, setScaleX] = useLocalState('scale_x', 1);
- const [scaleY, setScaleY] = useLocalState('scale_y', 1);
- const [translateX, setTranslateX] = useLocalState('translate_x', 0);
- const [translateY, setTranslateY] = useLocalState('translate_y', 0);
- const [shearX, setShearX] = useLocalState('shear_x', 0);
- const [shearY, setShearY] = useLocalState('shear_y', 0);
- const [angle, setAngle] = useLocalState('angle', 0);
+ const [scaleX, setScaleX] = useState(1);
+ const [scaleY, setScaleY] = useState(1);
+ const [translateX, setTranslateX] = useState(0);
+ const [translateY, setTranslateY] = useState(0);
+ const [shearX, setShearX] = useState(0);
+ const [shearY, setShearY] = useState(0);
+ const [angle, setAngle] = useState(0);
+
return (
@@ -100,18 +102,19 @@ export const MatrixMathTester = (props) => {
act('scale', { x: scaleX, y: scaleY })}
- />
+ >
+ Scale
+
toFixed(value, 2)}
- width={'100%'}
+ fluid
onChange={(e, value) => setScaleX(value)}
/>
@@ -120,7 +123,7 @@ export const MatrixMathTester = (props) => {
value={scaleY}
step={0.05}
format={(value) => toFixed(value, 2)}
- width={'100%'}
+ fluid
onChange={(e, value) => setScaleY(value)}
/>
@@ -128,20 +131,21 @@ export const MatrixMathTester = (props) => {
act('translate', { x: translateX, y: translateY })
}
- />
+ >
+ Translate
+
toFixed(value, 0)}
- width={'100%'}
+ fluid
onChange={(e, value) => setTranslateX(value)}
/>
@@ -150,7 +154,7 @@ export const MatrixMathTester = (props) => {
value={translateY}
step={1}
format={(value) => toFixed(value, 0)}
- width={'100%'}
+ fluid
onChange={(e, value) => setTranslateY(value)}
/>
@@ -158,18 +162,19 @@ export const MatrixMathTester = (props) => {
act('shear', { x: shearX, y: shearY })}
- />
+ >
+ Shear
+
toFixed(value, 3)}
- width={'100%'}
+ fluid
onChange={(e, value) => setShearX(value)}
/>
@@ -178,7 +183,7 @@ export const MatrixMathTester = (props) => {
value={shearY}
step={0.005}
format={(value) => toFixed(value, 3)}
- width={'100%'}
+ fluid
onChange={(e, value) => setShearY(value)}
/>
@@ -186,11 +191,12 @@ export const MatrixMathTester = (props) => {
act('turn', { angle: angle })}
- />
+ >
+ Rotate
+
{
maxValue={360}
minValue={-360}
format={(value) => toFixed(value, 1)}
- width={'100%'}
+ fluid
onChange={(e, value) => setAngle(value)}
/>
act('toggle_pixel')}
- />
+ >
+ PET
+
diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx
index 231c057853c..2c2f22d588c 100644
--- a/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx
+++ b/tgui/packages/tgui/interfaces/MedicalRecords/NoteKeeper.tsx
@@ -111,7 +111,6 @@ const NoteTabs = (props) => {
{notes.map((note, index) => (
setNote(note)}
selected={selectedNote?.note_ref === note.note_ref}
>
diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx
index 25ed0b8fdb0..985e10cf550 100644
--- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx
+++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordTabs.tsx
@@ -103,11 +103,10 @@ const CrewTab = (props: { record: MedicalRecord }) => {
return (
selectRecord(record)}
selected={selectedRecord?.crew_ref === crew_ref}
>
-
+
{name}
diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx
index b9c8ffb7d78..82a09391f68 100644
--- a/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx
+++ b/tgui/packages/tgui/interfaces/MedicalRecords/RecordView.tsx
@@ -46,10 +46,10 @@ export const MedicalRecordView = (props) => {
name,
quirk_notes,
rank,
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
past_general_records,
past_medical_records,
- // SKYRAT EDIT END
+ // NOVA EDIT END
species,
} = foundRecord;
@@ -83,7 +83,6 @@ export const MedicalRecordView = (props) => {
fill
scrollable
title={name}
- wrap
>
@@ -210,18 +209,18 @@ export const MedicalRecordView = (props) => {
• {quirk}
))}
- {/* SKYRAT EDIT START - RP Records (Not pretty but it's there) */}
+ {/* NOVA EDIT START - RP Records (Not pretty but it's there) */}
-
+
{past_general_records || 'N/A'}
-
+
{past_medical_records || 'N/A'}
- {/* SKYRAT EDIT END */}
+ {/* NOVA EDIT END */}
diff --git a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts
index 04bc7a60cbf..34fc55ceb61 100644
--- a/tgui/packages/tgui/interfaces/MedicalRecords/types.ts
+++ b/tgui/packages/tgui/interfaces/MedicalRecords/types.ts
@@ -26,10 +26,10 @@ export type MedicalRecord = {
quirk_notes: string;
rank: string;
species: string;
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
past_general_records: string;
past_medical_records: string;
- // SKYRAT EDIT END
+ // NOVA EDIT END
};
export type MedicalNote = {
diff --git a/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx b/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx
index f46a971c1fa..cbbda966f88 100644
--- a/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx
+++ b/tgui/packages/tgui/interfaces/MicrofusionGunControl.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { toFixed } from 'common/math';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/MilkingMachine.jsx b/tgui/packages/tgui/interfaces/MilkingMachine.jsx
index 64aeb4efedc..74b46fb6ab7 100644
--- a/tgui/packages/tgui/interfaces/MilkingMachine.jsx
+++ b/tgui/packages/tgui/interfaces/MilkingMachine.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Box, Button, Section, Stack } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/ModularShieldGen.tsx b/tgui/packages/tgui/interfaces/ModularShieldGen.tsx
index 3128417e540..22f3dd3a375 100644
--- a/tgui/packages/tgui/interfaces/ModularShieldGen.tsx
+++ b/tgui/packages/tgui/interfaces/ModularShieldGen.tsx
@@ -122,7 +122,7 @@ export const ModularShieldGen = (props) => {
{
const { act, data } = useBackend();
@@ -26,7 +27,7 @@ export const NifPanel = (props) => {
max_power,
current_theme,
} = data;
- const [settingsOpen, setSettingsOpen] = useLocalState('settingsOpen', false);
+ const [settingsOpen, setSettingsOpen] = useState(0);
return (
{
};
const NifProductNotes = (props) => {
- const { act, data } = useBackend(t);
+ const { act, data } = useBackend();
const { product_notes } = data;
return {product_notes} ;
};
diff --git a/tgui/packages/tgui/interfaces/NifSoulPoem.jsx b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx
index acbd502c1c7..4e1336f1279 100644
--- a/tgui/packages/tgui/interfaces/NifSoulPoem.jsx
+++ b/tgui/packages/tgui/interfaces/NifSoulPoem.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
BlockQuote,
diff --git a/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx b/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx
new file mode 100644
index 00000000000..53820b80789
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/NtosCouponMaster.tsx
@@ -0,0 +1,61 @@
+import { BooleanLike } from 'common/react';
+
+import { useBackend } from '../backend';
+import { Box, Input, NoticeBox, Section } from '../components';
+import { NtosWindow } from '../layouts';
+
+type Data = {
+ valid_id: BooleanLike;
+ redeemed_coupons: CouponData[];
+ printed_coupons: CouponData[];
+};
+
+type CouponData = {
+ goody: string;
+ discount: number;
+};
+
+export const NtosCouponMaster = (props) => {
+ const { act, data } = useBackend();
+ const { valid_id, redeemed_coupons = [], printed_coupons = [] } = data;
+ return (
+
+
+ {!valid_id ? (
+
+ No valid bank account detected. Insert a valid ID.
+
+ ) : (
+ <>
+
+ You can print redeemed coupons by right-clicking a photocopier.
+
+
+ act('redeem', {
+ code: value,
+ })
+ }
+ />
+
+ {redeemed_coupons.map((coupon, index) => (
+
+ {coupon.goody} ({coupon.discount}% OFF)
+
+ ))}
+
+
+ {printed_coupons.map((coupon, index) => (
+
+ {coupon.goody} ({coupon.discount}% OFF)
+
+ ))}
+
+ >
+ )}
+
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx
index d8830fe79af..8666c91fd6d 100644
--- a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx
+++ b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx
@@ -4,7 +4,7 @@ import { useBackend } from '../backend';
import { Button, Section, Table } from '../components';
import { NtosWindow } from '../layouts';
-// SKYRAT EDIT BEGIN - ALTERNATIVE_JOB_TITLES
+// NOVA EDIT BEGIN - ALTERNATIVE_JOB_TITLES
//
// width={500} - Original: width={400}
//
@@ -51,4 +51,4 @@ export const NtosCrewManifest = (props) => {
);
};
-// SKYRAT EDIT END - ALTERNATIVE_JOB_TITLES
+// NOVA EDIT END - ALTERNATIVE_JOB_TITLES
diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx
index acad55c0dfc..3852e90ac26 100644
--- a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx
+++ b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx
@@ -31,7 +31,6 @@ export const NtosEmojipedia = (props) => {
buttons={
<>
setFilter(value)}
diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
index 4e4511e8ed9..b168b057297 100644
--- a/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
+++ b/tgui/packages/tgui/interfaces/NtosMessenger/ChatScreen.tsx
@@ -305,8 +305,6 @@ export class ChatScreen extends Component {
fluid
autoFocus
width="100%"
- justify
- id="input"
value={message}
maxLength={1024}
onInput={this.handleMessageInput}
diff --git a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx
index e6a29c5d7b1..9a9f27adf97 100644
--- a/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx
+++ b/tgui/packages/tgui/interfaces/NtosMessenger/index.tsx
@@ -213,7 +213,7 @@ const ContactsScreen = (props: any) => {
width="220px"
placeholder="Search by name or job..."
value={searchUser}
- onChange={(_, value) => setSearchUser(value)}
+ onInput={(_, value) => setSearchUser(value)}
/>
diff --git a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx
index 166437027e2..0bfdafc7b62 100644
--- a/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx
+++ b/tgui/packages/tgui/interfaces/NtosNetDownloader.tsx
@@ -137,7 +137,7 @@ export const NtosNetDownloader = (props) => {
{
return (
-
+
{program.filedesc}
diff --git a/tgui/packages/tgui/interfaces/NtosNewsArchive.jsx b/tgui/packages/tgui/interfaces/NtosNewsArchive.jsx
index d70ee6a9380..f179e35699c 100644
--- a/tgui/packages/tgui/interfaces/NtosNewsArchive.jsx
+++ b/tgui/packages/tgui/interfaces/NtosNewsArchive.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Collapsible, Section } from '../components';
import { NtosWindow } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx
index cc54bb45883..0fe14a3c21f 100644
--- a/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx
+++ b/tgui/packages/tgui/interfaces/NtosNifsoftCatalog.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend, useSharedState } from '../backend';
import {
BlockQuote,
diff --git a/tgui/packages/tgui/interfaces/NtosNotepad.tsx b/tgui/packages/tgui/interfaces/NtosNotepad.tsx
index a0fbb94f6fb..6c124e067f1 100644
--- a/tgui/packages/tgui/interfaces/NtosNotepad.tsx
+++ b/tgui/packages/tgui/interfaces/NtosNotepad.tsx
@@ -311,7 +311,6 @@ class NotePadTextArea extends Component {
ref={this.innerRef}
onChange={(_, value) => setText(value)}
className="NtosNotepad__textarea"
- scroll
nowrap={!wordWrap}
value={text}
/>
diff --git a/tgui/packages/tgui/interfaces/NtosPay.tsx b/tgui/packages/tgui/interfaces/NtosPay.tsx
index deabf351d7b..beeb4d6df89 100644
--- a/tgui/packages/tgui/interfaces/NtosPay.tsx
+++ b/tgui/packages/tgui/interfaces/NtosPay.tsx
@@ -90,7 +90,7 @@ const TransferSection = (props) => {
return (
-
+
{
const { act, data } = useBackend();
const { init_value, large_buttons, message = '', timeout, title } = data;
const [input, setInput] = useState(init_value);
- const onChange = (value: number) => {
- if (value === input) {
- return;
- }
- setInput(value);
- };
- const onClick = (value: number) => {
+
+ const setValue = (value: number) => {
if (value === input) {
return;
}
setInput(value);
};
+
// Dynamically changes the window height based on the message.
const windowHeight =
140 +
@@ -59,7 +55,7 @@ export const NumberInputModal = (props) => {
{message}
-
+
diff --git a/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx b/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx
index f267dc29fe2..76d2f11b470 100644
--- a/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx
+++ b/tgui/packages/tgui/interfaces/OpposingForcePanel.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { round } from 'common/math';
import { useState } from 'react';
@@ -770,63 +770,70 @@ export const AdminTab = (props) => {
-
- act('approve_objective', {
- objective_ref: objective.ref,
- })
- }
- />
-
- act('deny_objective', {
- objective_ref: objective.ref,
- })
- }
- />
- >
- }
>
-
-
- {objective.description}
-
-
- {objective.justification}
-
-
- {'(' +
- objective.intensity +
- ') ' +
- objective.text_intensity}
-
-
- {objective.status_text === 'Not Reviewed'
- ? 'Objective Not Reviewed'
- : objective.approved
- ? 'Objective Approved'
- : objective.denied_text
- ? 'Objective Denied - Reason: ' +
- objective.denied_text
- : 'Objective Denied'}
-
-
+
+
+
+
+ {objective.description}
+
+
+ {objective.justification}
+
+
+ {'(' +
+ objective.intensity +
+ ') ' +
+ objective.text_intensity}
+
+
+ {objective.status_text === 'Not Reviewed'
+ ? 'Objective Not Reviewed'
+ : objective.approved
+ ? 'Objective Approved'
+ : objective.denied_text
+ ? 'Objective Denied - Reason: ' +
+ objective.denied_text
+ : 'Objective Denied'}
+
+
+
+
+
+
+
+ act('approve_objective', {
+ objective_ref: objective.ref,
+ })
+ }
+ />
+
+
+
+ act('deny_objective', {
+ objective_ref: objective.ref,
+ })
+ }
+ />
+
+
+
))
)}
diff --git a/tgui/packages/tgui/interfaces/Orbit/constants.ts b/tgui/packages/tgui/interfaces/Orbit/constants.ts
index c3b87bb47e0..35fe4df9de8 100644
--- a/tgui/packages/tgui/interfaces/Orbit/constants.ts
+++ b/tgui/packages/tgui/interfaces/Orbit/constants.ts
@@ -8,6 +8,8 @@ export const ANTAG2COLOR = {
'Emergency Response Team': 'teal',
'Escaped Fugitives': 'orange',
'Xenomorph Infestation': 'violet',
+ 'Spacetime Aberrations': 'white',
+ 'Deviant Crew': 'white',
} as const;
export const THREAT = {
diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts
index c12055e5472..8ad071c699b 100644
--- a/tgui/packages/tgui/interfaces/Orbit/helpers.ts
+++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts
@@ -18,11 +18,7 @@ export const getAntagCategories = (antagonists: Antagonist[]) => {
categories[antag_group].push(player);
});
- const sortedAntagonists = sortBy(([key]) => key)(
- Object.entries(categories),
- );
-
- return sortedAntagonists;
+ return sortBy(([key]) => key)(Object.entries(categories));
};
/** Returns a disguised name in case the person is wearing someone else's ID */
@@ -46,9 +42,8 @@ export const getDisplayName = (full_name: string, name?: string) => {
export const getMostRelevant = (
searchQuery: string,
observables: Observable[][],
-) => {
- /** Returns the most orbited observable that matches the search. */
- const mostRelevant: Observable = flow([
+): Observable => {
+ return flow([
// Filters out anything that doesn't match search
filter((observable) =>
isJobOrNameMatch(observable, searchQuery),
@@ -57,8 +52,6 @@ export const getMostRelevant = (
sortBy((observable) => -(observable.orbiters || 0)),
// Makes a single Observables list for an easy search
])(observables.flat())[0];
-
- return mostRelevant;
};
/** Returns the display color for certain health percentages */
diff --git a/tgui/packages/tgui/interfaces/OreContainer.tsx b/tgui/packages/tgui/interfaces/OreContainer.tsx
index bfac4cad766..261523c6e95 100644
--- a/tgui/packages/tgui/interfaces/OreContainer.tsx
+++ b/tgui/packages/tgui/interfaces/OreContainer.tsx
@@ -36,7 +36,7 @@ export const OreContainer = (props) => {
{
@@ -164,7 +164,7 @@ const PaiOptions = (props) => {
transmit,
receive,
range,
- leash_enabled /* SKYRAT EDIT ADDITION */,
+ leash_enabled /* NOVA EDIT ADDITION */,
},
} = data;
const suppliedLaws = laws[0] ? decodeHtmlEntities(laws[0]) : 'None';
@@ -196,7 +196,7 @@ const PaiOptions = (props) => {
Toggle
- {/* SKYRAT EDIT ADDITION START */}
+ {/* NOVA EDIT ADDITION START */}
{!emagged && (
{
)}
- {/* SKYRAT EDIT ADDITION END */}
+ {/* NOVA EDIT ADDITION END */}
{emagged ? (
'∞'
@@ -219,7 +219,7 @@ const PaiOptions = (props) => {
act('decrease_range')}
- /* SKYRAT EDIT CHANGE ORIGINAL: disabled={range === range_max} */
+ /* NOVA EDIT CHANGE ORIGINAL: disabled={range === range_max} */
disabled={!leash_enabled || range === range_min}
/>
@@ -228,7 +228,7 @@ const PaiOptions = (props) => {
act('increase_range')}
- /* SKYRAT EDIT CHANGE ORIGINAL: disabled={range === range_max} */
+ /* NOVA EDIT CHANGE ORIGINAL: disabled={range === range_max} */
disabled={!leash_enabled || range === range_max}
/>
diff --git a/tgui/packages/tgui/interfaces/PaiSubmit.tsx b/tgui/packages/tgui/interfaces/PaiSubmit.tsx
index 85e7d48c2bf..7d7df4080b2 100644
--- a/tgui/packages/tgui/interfaces/PaiSubmit.tsx
+++ b/tgui/packages/tgui/interfaces/PaiSubmit.tsx
@@ -86,7 +86,7 @@ const InputDisplay = (props) => {
setInput({ ...input, description: value })}
/>
@@ -97,7 +97,7 @@ const InputDisplay = (props) => {
setInput({ ...input, comments: value })}
/>
diff --git a/tgui/packages/tgui/interfaces/PaperSheet.tsx b/tgui/packages/tgui/interfaces/PaperSheet.tsx
index 43f44bdb38f..5e239d79c76 100644
--- a/tgui/packages/tgui/interfaces/PaperSheet.tsx
+++ b/tgui/packages/tgui/interfaces/PaperSheet.tsx
@@ -285,7 +285,7 @@ export class PrimaryView extends Component {
this.scrollableRef = createRef();
this.lastDistanceFromBottom = 0;
- this.onScrollHandler = (ev: Event) => {
+ this.onScrollHandler = (ev) => {
const scrollable = ev.currentTarget as HTMLDivElement;
if (scrollable) {
this.lastDistanceFromBottom =
@@ -411,6 +411,34 @@ export class PrimaryView extends Component {
}
}
+const tokenizer = (src: string) => {
+ const rule = /^\[_+\]/;
+ const match = src.match(rule);
+ if (match) {
+ return {
+ type: 'inputField',
+ raw: match[0],
+ };
+ }
+};
+
+// Override function, any links and images should
+// kill any other marked tokens we don't want here
+const walkTokens = (token) => {
+ switch (token.type) {
+ case 'url':
+ case 'autolink':
+ case 'reflink':
+ case 'link':
+ case 'image':
+ token.type = 'text';
+ // Once asset system is up change to some default image
+ // or rewrite for icon images
+ token.href = '';
+ break;
+ }
+};
+
/**
* Real-time text preview section. When not editing, this is simply
* the component that builds and renders the final HTML output.
@@ -458,38 +486,13 @@ export class PreviewView extends Component {
return src.match(/\[/)?.index;
},
- tokenizer(src: string) {
- const rule = /^\[_+\]/;
- const match = src.match(rule);
- if (match) {
- const token = {
- type: 'inputField',
- raw: match[0],
- };
- return token;
- }
- },
+ tokenizer,
renderer(token) {
return `${token.raw}`;
},
- };
- // Override function, any links and images should
- // kill any other marked tokens we don't want here
- const walkTokens = (token) => {
- switch (token.type) {
- case 'url':
- case 'autolink':
- case 'reflink':
- case 'link':
- case 'image':
- token.type = 'text';
- // Once asset system is up change to some default image
- // or rewrite for icon images
- token.href = '';
- break;
- }
+ walkTokens,
};
marked.use({
@@ -679,20 +682,7 @@ export class PreviewView extends Component {
runMarkedDefault = (rawText: string): string => {
// Override function, any links and images should
// kill any other marked tokens we don't want here
- const walkTokens = (token) => {
- switch (token.type) {
- case 'url':
- case 'autolink':
- case 'reflink':
- case 'link':
- case 'image':
- token.type = 'text';
- // Once asset system is up change to some default image
- // or rewrite for icon images
- token.href = '';
- break;
- }
- };
+ walkTokens;
// This is an extension for marked defining a complete custom tokenizer.
// This tokenizer should run before the the non-custom ones, and gives us
@@ -709,17 +699,7 @@ export class PreviewView extends Component {
return src.match(/\[/)?.index;
},
- tokenizer(src: string) {
- const rule = /^\[_+\]/;
- const match = src.match(rule);
- if (match) {
- const token = {
- type: 'inputField',
- raw: match[0],
- };
- return token;
- }
- },
+ tokenizer,
renderer(token) {
return `${token.raw}`;
@@ -958,12 +938,12 @@ export class PreviewView extends Component {
fitted
scrollable
ref={scrollableRef}
- onScroll={handleOnScroll}
+ onScroll={handleOnScroll as any}
>
{
{!Array.isArray(float) ? (
act('edit', {
diff --git a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
index 06e17b675b6..3ee3ad112f6 100644
--- a/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
+++ b/tgui/packages/tgui/interfaces/PersonalCrafting.tsx
@@ -22,7 +22,7 @@ import { Food } from './PreferencesMenu/data';
const TYPE_ICONS = {
'Can Make': 'utensils',
[Food.Alcohol]: 'wine-glass',
- [Food.Bloody]: 'tint', // SKYRAT EDIT ADDITION - Hemophage Food
+ [Food.Bloody]: 'tint', // NOVA EDIT ADDITION - Hemophage Food
[Food.Breakfast]: 'sun',
[Food.Bugs]: 'bug',
[Food.Cloth]: 'tshirt',
@@ -76,7 +76,7 @@ const CATEGORY_ICONS_COOKING = {
Cakes: 'cake-candles',
'Egg-Based Food': 'egg',
Frozen: 'ice-cream',
- 'Hemophage Food': 'tint', // SKYRAT EDIT ADDITION - Hemophage Food
+ 'Hemophage Food': 'tint', // NOVA EDIT ADDITION - Hemophage Food
'Lizard Food': 'dragon',
Meats: 'bacon',
'Mexican Food': 'pepper-hot',
@@ -90,7 +90,7 @@ const CATEGORY_ICONS_COOKING = {
Seafood: 'fish',
Soups: 'mug-hot',
Spaghettis: 'wheat-awn',
- 'Teshari Food': 'feather-pointed', // SKYRAT EDIT ADDITION - Teshari Food
+ 'Teshari Food': 'feather-pointed', // NOVA EDIT ADDITION - Teshari Food
} as const;
enum MODE {
@@ -495,8 +495,7 @@ export const PersonalCrafting = (props) => {
{
{categories.map((category, i) => (
{
key={recipe.pipe_index}
fluid
ellipsis
- title={recipe.pipe_name}
+ tooltip={recipe.pipe_name}
onClick={() =>
act('pipe_type', {
pipe_type: recipe.pipe_index,
diff --git a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx
index 0fbccd23fd9..b045304c4ca 100644
--- a/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx
+++ b/tgui/packages/tgui/interfaces/PlaneMasterDebug.tsx
@@ -129,10 +129,9 @@ const textWidth = (text, font, fontsize) => {
// default font height is 12 in tgui
font = fontsize + 'x ' + font;
const c = document.createElement('canvas');
- const ctx = c.getContext('2d') as any;
+ const ctx = c.getContext('2d') as CanvasRenderingContext2D;
ctx.font = font;
- const width = ctx.measureText(text).width;
- return width;
+ return ctx.measureText(text).width;
};
const planeToPosition = function (plane: Plane, index, is_incoming): Position {
@@ -508,7 +507,6 @@ class PlaneMaster extends Component {
? 'ObjectComponent__Greyed_Content'
: 'ObjectComponent__Content'
}
- unselectable="on"
py={1}
px={1}
>
@@ -673,6 +671,13 @@ const PlaneWindow = (props) => {
const doc_html = {
__html: workingPlane.documentation,
};
+
+ const setAlpha = (event, value) =>
+ act('set_alpha', {
+ edit: workingPlane.our_ref,
+ alpha: value,
+ });
+
return (
{
maxValue={255}
step={1}
stepPixelSize={1.9}
- onDrag={(e, value) =>
- act('set_alpha', {
- edit: workingPlane.our_ref,
- alpha: value,
- })
- }
- onChange={(e, value) =>
- act('set_alpha', {
- edit: workingPlane.our_ref,
- alpha: value,
- })
- }
+ onDrag={setAlpha}
+ onChange={setAlpha}
>
Alpha ({workingPlane.alpha})
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
index a8a623498bf..19229dde368 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferenceWindow.tsx
@@ -1,15 +1,15 @@
import { exhaustiveCheck } from 'common/exhaustive';
import { useBackend, useLocalState } from '../../backend';
-import { Dropdown, Flex, Stack } from '../../components'; // SKYRAT EDIT CHANGE - ORIGINAL: import { Button, Stack } from '../../components';
+import { Dropdown, Flex, Stack } from '../../components'; // NOVA EDIT CHANGE - ORIGINAL: import { Button, Stack } from '../../components';
import { Window } from '../../layouts';
import { AntagsPage } from './AntagsPage';
import { PreferencesMenuData } from './data';
import { JobsPage } from './JobsPage';
-// SKYRAT EDIT
+// NOVA EDIT
import { LanguagesPage } from './LanguagesMenu';
import { LimbsPage } from './LimbsPage';
-// SKYRAT EDIT END
+// NOVA EDIT END
import { MainPage } from './MainPage';
import { PageButton } from './PageButton';
import { QuirksPage } from './QuirksPage';
@@ -19,10 +19,10 @@ enum Page {
Antags,
Main,
Jobs,
- // SKYRAT EDIT
+ // NOVA EDIT
Limbs,
Languages,
- // SKYRAT EDIT END
+ // NOVA EDIT END
Species,
Quirks,
}
@@ -32,10 +32,10 @@ const CharacterProfiles = (props: {
onClick: (index: number) => void;
profiles: (string | null)[];
}) => {
- const { profiles, activeSlot, onClick } = props; // SKYRAT EDIT CHANGE
+ const { profiles, activeSlot, onClick } = props; // NOVA EDIT CHANGE
return (
-
@@ -53,7 +53,7 @@ const CharacterProfiles = (props: {
}}
/>
- /* SKYRAT EDIT CHANGE END */
+ /* NOVA EDIT CHANGE END */
);
};
@@ -71,14 +71,14 @@ export const CharacterPreferenceWindow = (props) => {
case Page.Jobs:
pageContents = ;
break;
- // SKYRAT EDIT
+ // NOVA EDIT
case Page.Limbs:
pageContents = ;
break;
case Page.Languages:
pageContents = ;
break;
- // SKYRAT EDIT END
+ // NOVA EDIT END
case Page.Main:
pageContents = (
setCurrentPage(Page.Species)} />
@@ -149,7 +149,7 @@ export const CharacterPreferenceWindow = (props) => {
{
- // SKYRAT EDIT
+ // NOVA EDIT
}
{
{
- // SKYRAT EDIT END
+ // NOVA EDIT END
}
- // SKYRAT EDIT END
+ // NOVA EDIT END
);
};
@@ -112,14 +112,14 @@ const PriorityButtons = (props: {
const { createSetPriority, isOverflow, priority } = props;
return (
-
{isOverflow ? (
@@ -171,12 +171,12 @@ const PriorityButtons = (props: {
/>
>
)}
- // SKYRAT EDIT - Originally a stack
+ // NOVA EDIT - Originally a stack
);
};
const JobRow = (props: { className?: string; job: Job; name: string }) => {
- const { data, act } = useBackend(); // SKYRAT EDIT CHANGE - Adds act param
+ const { data, act } = useBackend(); // NOVA EDIT CHANGE - Adds act param
const { className, job, name } = props;
const isOverflow = data.overflow_role === name;
@@ -188,11 +188,11 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
data.job_required_experience && data.job_required_experience[name];
const daysLeft = data.job_days_left ? data.job_days_left[name] : 0;
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
const alt_title_selected = data.job_alt_titles[name]
? data.job_alt_titles[name]
: name;
- // SKYRAT EDIT END
+ // NOVA EDIT END
let rightSide: ReactNode;
@@ -223,7 +223,7 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
);
- // SKYRAT EDIT START
+ // NOVA EDIT START
} else if (job.veteran && !data.is_veteran) {
rightSide = (
@@ -243,7 +243,7 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
);
- // SKYRAT EDIT END
+ // NOVA EDIT END
} else {
rightSide = (
{
}}
>
{
- // SKYRAT EDIT CHANGE START - ORIGINAL: {name}
+ // NOVA EDIT CHANGE START - ORIGINAL: {name}
!job.alt_titles ? (
name
) : (
@@ -279,7 +279,7 @@ const JobRow = (props: { className?: string; job: Job; name: string }) => {
}
/>
)
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
}
@@ -324,7 +324,7 @@ const Department = (props: { department: string } & PropsWithChildren) => {
{
jobsForDepartment.map(([name, job]) => {
return (
- {
name={name}
/>
);
- }) /* SKYRAT EDIT END */
+ }) /* NOVA EDIT END */
}
{children}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/LanguagesMenu.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/LanguagesMenu.tsx
index b97fe3d5c17..2ee3e81a90a 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/LanguagesMenu.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/LanguagesMenu.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../../backend';
import { Box, Button, Section, Stack } from '../../components';
import { PreferencesMenuData } from './data';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx
index 1fd5bc42dab..44a0e20d35e 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/LimbsPage.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../../backend';
import {
Box,
@@ -57,7 +57,6 @@ export const Markings = (props) => {
act('color_marking', {
limb_slot: props.limb.slot,
@@ -70,7 +69,6 @@ export const Markings = (props) => {
@@ -86,7 +84,6 @@ export const Markings = (props) => {
act('remove_marking', {
@@ -103,7 +100,6 @@ export const Markings = (props) => {
))}
act('add_marking', { limb_slot: props.limb.slot })}
>
@@ -143,7 +139,6 @@ export const AugmentationPage = (props) => {
Augumentation:
{
Style:
{
void;
handleOpenSpecies: () => void;
- handleLoadout: () => void; // SKYRAT EDIT ADDITION
+ handleLoadout: () => void; // NOVA EDIT ADDITION
gender: Gender;
setGender: (gender: Gender) => void;
showGender: boolean;
@@ -77,7 +76,7 @@ const CharacterControls = (props: {
)}
{props.handleLoadout && (
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
- {[Gender.Male, Gender.Female, Gender.Other, Gender.Other2].map(
- (gender) => {
- return (
-
- {
- props.handleSetGender(gender);
- setGenderMenuOpen(false);
- }}
- fontSize="22px"
- icon={GENDERS[gender].icon}
- tooltip={GENDERS[gender].text}
- tooltipPosition="top"
- />
-
- );
- },
- )}
-
- ) : (
- <> >
- )
+
+ {[Gender.Male, Gender.Female, Gender.Other, Gender.Other2].map(
+ (gender) => {
+ return (
+
+ {
+ props.handleSetGender(gender);
+ setGenderMenuOpen(false);
+ }}
+ fontSize="22px"
+ icon={GENDERS[gender].icon}
+ tooltip={GENDERS[gender].text}
+ tooltipPosition="top"
+ />
+
+ );
+ },
+ )}
+
}
>
handleClose()}
+ isOpen={isOpen}
popperContent={
- isOpen ? (
-
-
-
- ) : (
- <> >
- )
+
}
>
void }) => {
{
if (props.selected) {
setCustomizationExpanded(false);
@@ -138,8 +136,10 @@ const QuirkList = (props: {
{quirk.description}
{!!quirk.customizable && (
{
+ setCustomizationExpanded(false);
}}
popperContent={
@@ -156,7 +156,7 @@ const QuirkList = (props: {
onClick={(e) => {
e.stopPropagation();
}}
- maxWidth="400px" // SKYRAT EDIT - maxWidth to 600px from 300px
+ maxWidth="400px" // NOVA EDIT - maxWidth to 600px from 300px
backgroundColor="black"
px="5px"
py="3px"
@@ -256,10 +256,10 @@ export const QuirksPage = (props) => {
return (
{
if (!quirks_data) {
- // SKYRAT EDIT END
+ // NOVA EDIT END
return Loading quirks... ;
}
@@ -267,7 +267,7 @@ export const QuirksPage = (props) => {
max_positive_quirks: maxPositiveQuirks,
quirk_blacklist: quirkBlacklist,
quirk_info: quirkInfo,
- } = quirks_data.quirks; // SKYRAT EDIT - Quirks balance refactor
+ } = quirks_data.quirks; // NOVA EDIT - Quirks balance refactor
const quirks = Object.entries(quirkInfo);
quirks.sort(([_, quirkA], [__, quirkB]) => {
@@ -278,10 +278,10 @@ export const QuirksPage = (props) => {
}
});
- // SKYRAT EDIT START - Better Quirk Count Code
+ // NOVA EDIT START - Better Quirk Count Code
let balance = -data.quirks_balance;
let positiveQuirks = data.positive_quirk_count;
- // SKYRAT EDIT END
+ // NOVA EDIT END
const getReasonToNotAdd = (quirkName: string) => {
const quirk = quirkInfo[quirkName];
@@ -294,14 +294,14 @@ export const QuirksPage = (props) => {
}
}
- // SKYRAT EDIT START - Veteran quirks
+ // NOVA EDIT START - Veteran quirks
if (quirk.veteran_only && !data.is_veteran) {
if (quirk.allow_for_donator && !data.is_donator) {
// THE FLUFFY FRONTIER EDIT - Donator quirk? Well...
return 'You need to be a veteran to select this quirk, apply today!';
}
}
- // SKYRAT EDIT END
+ // NOVA EDIT END
const selectedQuirkNames = selectedQuirks.map((quirkKey) => {
return quirkInfo[quirkKey].name;
@@ -380,7 +380,7 @@ export const QuirksPage = (props) => {
},
];
})}
- serverData={quirks_data} // SKYRAT EDIT CHANGE
+ serverData={quirks_data} // NOVA EDIT CHANGE
randomBodyEnabled={randomBodyEnabled}
/>
@@ -436,7 +436,7 @@ export const QuirksPage = (props) => {
},
];
})}
- serverData={quirks_data} // sKYRAT EDIT CHANGE
+ serverData={quirks_data} // NOVA EDIT CHANGE
randomBodyEnabled={randomBodyEnabled}
/>
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx
index 04f3b25734a..e2471e17c36 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/RandomizationButton.tsx
@@ -48,7 +48,7 @@ export const RandomizationButton = (props: {
value: RandomSetting.AntagOnly,
},
]}
- nochevron
+ noChevron
onSelected={setValue}
menuWidth="120px"
width="auto"
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
index dfb56213d64..910a7bd38ae 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/SpeciesPage.tsx
@@ -271,7 +271,7 @@ const SpeciesPageInner = (props: {
{species.map(([speciesKey, species]) => {
- // SKYRAT EDIT START - Veteran-only species
+ // NOVA EDIT START - Veteran-only species
let speciesPage = (
@@ -326,9 +326,9 @@ const SpeciesPageInner = (props: {
)
}
>
- {/* SKYRAT EDIT CHANGE START - Adds maxHeight, scrollable*/}
+ {/* NOVA EDIT CHANGE START - Adds maxHeight, scrollable*/}
- {/* SKYRAT EDIT CHANGE END */}
+ {/* NOVA EDIT CHANGE END */}
{currentSpecies.desc}
@@ -349,10 +349,10 @@ const SpeciesPageInner = (props: {
-
{currentSpecies.lore.map((text, index) => (
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx
index e1ffd36c86e..3d35a0959c8 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/assaultoperative.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts
index fa82436bb19..033032df0e5 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx
index fa82436bb19..033032df0e5 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts
index b5ba561212b..5794d2a8182 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.ts
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx
index b5ba561212b..5794d2a8182 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneinfiltrator.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { Antagonist, Category } from '../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
index 7e73adf7b3e..15734553191 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
@@ -25,7 +25,7 @@ export enum Food {
Sugar = 'SUGAR',
Toxic = 'TOXIC',
Vegetables = 'VEGETABLES',
- Bloody = 'BLOODY', // SKYRAT EDIT ADDITION - Hemophage Food
+ Bloody = 'BLOODY', // NOVA EDIT ADDITION - Hemophage Food
}
export enum JobPriority {
@@ -51,7 +51,7 @@ export type Species = {
enabled_features: string[];
- veteran_only: boolean; // SKYRAT EDIT - Veteran quirks
+ veteran_only: boolean; // NOVA EDIT - Veteran quirks
allow_for_donator: boolean; // THE FLUFFY FRONTIER - For donators
perks: {
@@ -80,10 +80,10 @@ export type Department = {
export type Job = {
description: string;
department: string;
- // SKYRAT EDIT
+ // NOVA EDIT
veteran?: boolean;
alt_titles?: string[];
- // SKYRAT EDIT END
+ // NOVA EDIT END
};
export type Quirk = {
@@ -93,11 +93,11 @@ export type Quirk = {
value: number;
customizable: boolean;
customization_options?: string[];
- veteran_only: boolean; // SKYRAT EDIT - Veteran quirks
+ veteran_only: boolean; // NOVA EDIT - Veteran quirks
allow_for_donator: boolean; // THE FLUFFY FRONTIER - For donators
};
-// SKYRAT EDIT START
+// NOVA EDIT START
export type Language = {
description: string;
name: string;
@@ -134,7 +134,7 @@ export type Organ = {
costs: Record;
};
-// SKYRAT EDIT END
+// NOVA EDIT END
export type QuirkInfo = {
max_positive_quirks: number;
quirk_info: Record;
@@ -176,10 +176,10 @@ export type PreferencesMenuData = {
character_preview_view: string;
character_profiles: (string | null)[];
- preview_options: string[]; // SKYRAT EDIT ADDITION
- preview_selection: string; // SKYRAT EDIT ADDITION
+ preview_options: string[]; // NOVA EDIT ADDITION
+ preview_selection: string; // NOVA EDIT ADDITION
- is_veteran: BooleanLike; // SKYRAT EDIT - Veteran status
+ is_veteran: BooleanLike; // NOVA EDIT - Veteran status
is_donator: BooleanLike; // THE FLUFFY FRONTIER - For donators
character_preferences: {
@@ -218,7 +218,7 @@ export type PreferencesMenuData = {
>;
job_preferences: Record;
- // SKYRAT EDIT
+ // NOVA EDIT
job_alt_titles: Record;
robotic_styles: string[];
@@ -232,7 +232,7 @@ export type PreferencesMenuData = {
quirks_balance: number;
positive_quirk_count: number;
species_restricted_jobs?: string[];
- // SKYRAT EDIT END
+ // NOVA EDIT END
keybindings: Record;
overflow_role: string;
selected_quirks: string[];
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
index 5c6b1ee378b..f92e2174455 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/base.tsx
@@ -11,7 +11,7 @@ import {
NumberInput,
Slider,
Stack,
- TextArea, // SKYRAT EDIT ADDITION
+ TextArea, // NOVA EDIT ADDITION
} from '../../../../components';
import { createSetPreference, PreferencesMenuData } from '../../data';
import { ServerPreferencesFetcher } from '../../ServerPreferencesFetcher';
@@ -429,7 +429,7 @@ export const FeatureTriColorInput = (props: FeatureValueProps) => {
? props.value[index]
: `#${props.value[index]}`,
border: '2px solid white',
- 'box-sizing': 'content-box',
+ boxSizing: 'content-box',
height: '11px',
width: '11px',
...(props.shrink
@@ -459,7 +459,7 @@ export const FeatureTriColorInput = (props: FeatureValueProps) => {
export const FeatureTriBoolInput = (props: FeatureValueProps) => {
const buttonFromValue = (index) => {
return (
-
+
{
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/brain_type.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/brain_type.tsx
index da0fd78de3a..70d29aa6d20 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/brain_type.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/brain_type.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { FeatureChoiced, FeatureDropdownInput } from '../../base';
export const brain_type: FeatureChoiced = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_laugh.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_laugh.tsx
index ae03698b2b3..03b11aaeccb 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_laugh.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_laugh.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { FeatureChoiced, FeatureDropdownInput } from '../../base';
export const character_laugh: FeatureChoiced = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_scream.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_scream.tsx
index 9f6405feead..1441b1ab1e7 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_scream.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/character_scream.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { FeatureChoiced, FeatureDropdownInput } from '../../base';
export const character_scream: FeatureChoiced = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx
index 15f7738be03..2187f2060dc 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/death_degradation.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, Feature, FeatureNumberInput } from '../../base';
export const dc_starting_degradation: Feature = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx
index 2a387eea994..0e3593282f3 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/genitals.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import {
CheckboxInput,
Feature,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
index cf64c62e549..2a86aca7092 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { Feature, FeatureShortTextInput } from '../../base';
export const headshot: Feature = {
@@ -6,6 +6,8 @@ export const headshot: Feature = {
description:
'Requires a link ending with .png, .jpeg, or .jpg, starting with \
https://, and hosted on Gyazo or Discord. Renders the image underneath \
- your character preview in the examine more window.',
+ your character preview in the examine more window. \
+ Image larger than 250x250 will be resized to 250x250. \
+ Aim for 250x250 whenever possible',
component: FeatureShortTextInput,
};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/loadout_override_preference.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/loadout_override_preference.tsx
index c0e9cda397e..d29f71b2f34 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/loadout_override_preference.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/loadout_override_preference.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { Feature, FeatureDropdownInput } from '../../base';
export const loadout_override_preference: Feature = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/pet_owner.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/pet_owner.tsx
index 56d3be14522..ce77068b8da 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/pet_owner.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/pet_owner.tsx
@@ -1,7 +1,25 @@
-// THIS IS A SKYRAT UI FILE
-import { FeatureChoiced, FeatureDropdownInput } from '../../base';
+// THIS IS A NOVA SECTOR UI FILE
+import {
+ Feature,
+ FeatureChoiced,
+ FeatureDropdownInput,
+ FeatureShortTextInput,
+} from '../../base';
export const pet_owner: FeatureChoiced = {
name: 'Pet Owner',
component: FeatureDropdownInput,
};
+
+export const pet_name: Feature = {
+ name: 'Pet Name',
+ description:
+ "If blank, will use the mob's default name. For example, 'axolotl' or 'chinchilla'.",
+ component: FeatureShortTextInput,
+};
+
+export const pet_desc: Feature = {
+ name: 'Pet Description',
+ description: "If blank, will use the mob's default description.",
+ component: FeatureShortTextInput,
+};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/playtime_restricted.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/playtime_restricted.tsx
index b1338412c32..5036e094812 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/playtime_restricted.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/playtime_restricted.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const green_pin: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
index 8b4bc190161..31c5912d8e0 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import {
CheckboxInput,
Feature,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx
deleted file mode 100644
index 8f6073c8f65..00000000000
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fov_darkness.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Feature, FeatureNumberInput } from '../base';
-
-export const fov_darkness: Feature = {
- name: 'Field of view darkness',
- category: 'GAMEPLAY',
- description:
- 'The density of darkness of field of vision cones you may have by wearing restrictive eye cover.',
- component: FeatureNumberInput,
-};
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx
index de3ddfbd2a7..0319c8b2f45 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/auto_dementor.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const auto_dementor_pref: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/be_antag.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/be_antag.tsx
index 1888f575a27..ee38ba11c6a 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/be_antag.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/be_antag.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const be_antag_pref: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/delete_sparks.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/delete_sparks.tsx
index f15e1bab777..e0c048b4b0e 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/delete_sparks.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/delete_sparks.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const delete_sparks_pref: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_overlay.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_overlay.tsx
index 102290341e7..b3a7671677d 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_overlay.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_overlay.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const do_emote_overlay: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_panel.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_panel.tsx
index 7d27092c853..47816e9b908 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_panel.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/emote_panel.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const emote_panel: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx
index a737e62e10d..504bc4114d1 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/erp_preferences.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import {
CheckboxInput,
FeatureChoiced,
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx
index fc90bf483f1..0fe0449a6c6 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/face_cursor_combat_mode.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { multiline } from 'common/string';
import { CheckboxInput, FeatureToggle } from '../../base';
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ghost.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ghost.tsx
index 415af04700d..4e7f1070c53 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ghost.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ghost.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const soulcatcher_join_action: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/looc.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/looc.tsx
index 6d1cb7e9d39..6b12b4f0871 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/looc.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/looc.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const looc_admin_pref: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/out_of_combat_fov_darkness.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/out_of_combat_fov_darkness.tsx
index 6a59ff4de98..46d0f56a199 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/out_of_combat_fov_darkness.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/out_of_combat_fov_darkness.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { Feature, FeatureNumberInput } from '../../base';
export const out_of_combat_fov_darkness: Feature = {
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx
index 55e07f0e10d..1324eed4653 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/skyrat/ticket_ping.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { CheckboxInput, FeatureToggle } from '../../base';
export const ticket_ping_pref: FeatureToggle = {
diff --git a/tgui/packages/tgui/interfaces/PrisonerManagement.tsx b/tgui/packages/tgui/interfaces/PrisonerManagement.tsx
index ee2fcc88ee0..bca5b761a4d 100644
--- a/tgui/packages/tgui/interfaces/PrisonerManagement.tsx
+++ b/tgui/packages/tgui/interfaces/PrisonerManagement.tsx
@@ -85,20 +85,17 @@ const ImplantDisplay = (props: { implant: ImplantInfo }) => {
};
// When given a list of implants, sorts them by category
-const sortImplants = (implants: ImplantInfo[]) => {
- const implantsByCategory: Record = implants.reduce(
- (acc, implant) => {
- if (implant.category in acc) {
- acc[implant.category].push(implant);
- } else {
- acc[implant.category] = [implant];
- }
- return acc;
- },
- {},
- );
-
- return implantsByCategory;
+const sortImplants = (
+ implants: ImplantInfo[],
+): Record => {
+ return implants.reduce((acc, implant) => {
+ if (implant.category in acc) {
+ acc[implant.category].push(implant);
+ } else {
+ acc[implant.category] = [implant];
+ }
+ return acc;
+ }, {});
};
// Converts a category ("tracking implant") to a more readable format ("Tracking")
diff --git a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
index 2da9fdf2104..716ae19a147 100644
--- a/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
+++ b/tgui/packages/tgui/interfaces/ProcCallMenu.tsx
@@ -37,7 +37,7 @@ export const ProcCallMenu = (props) => {
return (
-
+
diff --git a/tgui/packages/tgui/interfaces/ProduceConsole.tsx b/tgui/packages/tgui/interfaces/ProduceConsole.tsx
index 4044eb2724c..ab0bc41ac85 100644
--- a/tgui/packages/tgui/interfaces/ProduceConsole.tsx
+++ b/tgui/packages/tgui/interfaces/ProduceConsole.tsx
@@ -148,7 +148,7 @@ const ShoppingTab = (props) => {
/>
-
+
{item.cost + credit_type + ' per order.'}
diff --git a/tgui/packages/tgui/interfaces/Puzzgrid.tsx b/tgui/packages/tgui/interfaces/Puzzgrid.tsx
index bec8e72abbd..bece915fcd1 100644
--- a/tgui/packages/tgui/interfaces/Puzzgrid.tsx
+++ b/tgui/packages/tgui/interfaces/Puzzgrid.tsx
@@ -115,7 +115,7 @@ export const Puzzgrid = (props) => {
textShadow: '1px 1px 1px #222',
fontSize: '30px',
position: 'absolute',
- top: 0,
+ top: '0',
left: '10px',
}}
>
@@ -133,7 +133,7 @@ export const Puzzgrid = (props) => {
fontSize: '15px',
pointerEvents: 'none',
position: 'absolute',
- top: 0,
+ top: '0',
right: '10px',
}}
>
diff --git a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
index 8f1ebd95126..cc846aff90d 100644
--- a/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
+++ b/tgui/packages/tgui/interfaces/RapidConstructionDevice.tsx
@@ -100,7 +100,6 @@ const DesignSection = (props) => {
{categories.map((category) => (
setCategoryName(category.cat_name)}
diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx
index 37fb66ca28e..37b8f77cb88 100644
--- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx
+++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.tsx
@@ -49,6 +49,29 @@ const TOOLS = [
},
];
+const LAYERS = [
+ {
+ name: '1',
+ bitmask: 1,
+ },
+ {
+ name: '2',
+ bitmask: 2,
+ },
+ {
+ name: '3',
+ bitmask: 4,
+ },
+ {
+ name: '4',
+ bitmask: 8,
+ },
+ {
+ name: '5',
+ bitmask: 16,
+ },
+] as const;
+
type DirectionsAllowed = {
north: BooleanLike;
south: BooleanLike;
@@ -93,7 +116,8 @@ type Preview = {
type Data = {
// Dynamic
category: number;
- piping_layer: number;
+ pipe_layers: number;
+ multi_layer: BooleanLike;
ducting_layer: number;
categories: Category[];
selected_recipe: string;
@@ -192,23 +216,33 @@ const SelectionSection = (props) => {
);
};
-export const LayerSelect = (props) => {
+const LayerSelect = (props) => {
const { act, data } = useBackend();
- const { piping_layer } = data;
+ const { pipe_layers } = data;
+ const { multi_layer } = data;
return (
- {[1, 2, 3, 4, 5].map((layer) => (
+ {LAYERS.map((layer) => (
- act('piping_layer', {
- piping_layer: layer,
- })
+ key={layer.bitmask}
+ checked={
+ multi_layer
+ ? pipe_layers & layer.bitmask
+ : layer.bitmask === pipe_layers
}
+ content={layer.name}
+ onClick={() => act('pipe_layers', { pipe_layers: layer.bitmask })}
/>
))}
+ {
+ act('toggle_multi_layer');
+ }}
+ />
);
};
@@ -221,12 +255,12 @@ const PreviewSelect = (props) => {
{
act('pipe_type', {
@@ -267,7 +301,6 @@ const PipeTypeSection = (props) => {
{categories.map((category, i) => (
{
{categories.map((category) => (
setCategoryName(category.cat_name)}
@@ -66,8 +66,8 @@ const PlumbingTypeSection = (props) => {
{
);
};
+export const LayerSelect = (props) => {
+ const { act, data } = useBackend();
+ const { piping_layer } = data;
+ return (
+
+ {[1, 2, 3, 4, 5].map((layer) => (
+
+ act('piping_layer', {
+ piping_layer: layer,
+ })
+ }
+ />
+ ))}
+
+ );
+};
+
const LayerIconSection = (props) => {
const { data } = useBackend();
const { layer_icon } = data;
diff --git a/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx b/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx
index 3e5d6d861b7..70e201be176 100644
--- a/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx
+++ b/tgui/packages/tgui/interfaces/RapidTilingDevice.tsx
@@ -60,7 +60,7 @@ const DirectionSelect = (props) => {
const { act, data } = useBackend();
const { tile_dirs = [], selected_direction } = data;
return (
-
+
{tile_dirs.map((dir) => (
@@ -109,7 +109,6 @@ const TileDesignSection = (props) => {
{categories.map((category) => (
setCategoryName(category.category_name)}
diff --git a/tgui/packages/tgui/interfaces/RecordManifest.jsx b/tgui/packages/tgui/interfaces/RecordManifest.jsx
index 2abc482513d..c98ca631e44 100644
--- a/tgui/packages/tgui/interfaces/RecordManifest.jsx
+++ b/tgui/packages/tgui/interfaces/RecordManifest.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { classes } from 'common/react';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/RequestManager.jsx b/tgui/packages/tgui/interfaces/RequestManager.jsx
index d9eb4527e85..bbe3b4f4b87 100644
--- a/tgui/packages/tgui/interfaces/RequestManager.jsx
+++ b/tgui/packages/tgui/interfaces/RequestManager.jsx
@@ -144,9 +144,7 @@ const FilterPanel = (props) => {
return (
{
fluid
height={20}
maxLength={1025}
- multiline
value={messageText}
onChange={(_, value) => setMessageText(value)}
placeholder="Type your announcement..."
diff --git a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx
index 5274fd2071c..ae69aefaa0a 100644
--- a/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx
+++ b/tgui/packages/tgui/interfaces/RequestsConsole/MessageWriteTab.tsx
@@ -48,37 +48,40 @@ export const MessageWriteTab = (props) => {
{
setRecipient('');
setRequestType(RequestType.ASSISTANCE);
}}
- />
+ >
+ Request Assistance
+
{
setRecipient('');
setRequestType(RequestType.SUPPLIES);
}}
- />
+ >
+ Request Supplies
+
{
setRecipient('');
setRequestType(RequestType.INFORMATION);
}}
- />
+ >
+ Relay Information
+
@@ -148,7 +151,6 @@ export const MessageWriteTab = (props) => {
fluid
height={20}
maxLength={1025}
- multiline
value={messageText}
onChange={(_, value) => setMessageText(value)}
placeholder="Type your message..."
@@ -158,7 +160,6 @@ export const MessageWriteTab = (props) => {
{
if (!messageText || !recipient || !priority || !requestType) {
@@ -173,33 +174,28 @@ export const MessageWriteTab = (props) => {
});
resetMessage();
}}
- />
+ >
+ Send message
+
- act('verify_id')}
- />
- act('stamp')}
- />
+ act('verify_id')}>
+ {authentication_data.message_verified_by || 'Not verified'}
+
+ act('stamp')}>
+ {authentication_data.message_stamped_by || 'Not stamped'}
+
{
act('clear_authentication');
resetMessage();
}}
- />
+ >
+ Discard message
+
);
diff --git a/tgui/packages/tgui/interfaces/ScannerGate.jsx b/tgui/packages/tgui/interfaces/ScannerGate.jsx
index 5afbf30072a..7ce1858dc5c 100644
--- a/tgui/packages/tgui/interfaces/ScannerGate.jsx
+++ b/tgui/packages/tgui/interfaces/ScannerGate.jsx
@@ -54,7 +54,7 @@ const TARGET_SPECIES_LIST = [
name: 'Zombie',
value: 'zombie',
},
- // SKYRAT EDIT START - MORE SCANNER GATE OPTIONS
+ // NOVA EDIT START - MORE SCANNER GATE OPTIONS
{
name: 'Anthromorph',
value: 'mammal',
@@ -114,7 +114,7 @@ const TARGET_GENDER_LIST = [
name: 'Female',
value: 'female',
},
- // SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ // NOVA EDIT END - MORE SCANNER GATE OPTIONS
];
const TARGET_NUTRITION_LIST = [
@@ -171,12 +171,12 @@ const SCANNER_GATE_ROUTES = {
title: 'Scanner Mode: Nutrition',
component: () => ScannerGateNutrition,
},
- // SKYRAT EDIT START - MORE SCANNER GATE OPTIONS
+ // NOVA EDIT START - MORE SCANNER GATE OPTIONS
Gender: {
title: 'Scanner Mode: Gender',
component: () => ScannerGateGender,
},
- // SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ // NOVA EDIT END - MORE SCANNER GATE OPTIONS
};
const ScannerGateControl = (props) => {
@@ -228,9 +228,9 @@ const ScannerGateOff = (props) => {
content="Species"
onClick={() => act('set_mode', { new_mode: 'Species' })}
/>
- act('set_mode', { new_mode: 'Gender' })} // SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+ onClick={() => act('set_mode', { new_mode: 'Gender' })} // NOVA EDIT END - MORE SCANNER GATE OPTIONS
/>
{
);
};
-// SKYRAT EDIT START - MORE SCANNER GATE OPTIONS
+// NOVA EDIT START - MORE SCANNER GATE OPTIONS
const ScannerGateGender = (props) => {
const { act, data } = useBackend();
const { reverse, target_gender } = data;
@@ -405,7 +405,7 @@ const ScannerGateGender = (props) => {
>
);
};
-// SKYRAT EDIT END - MORE SCANNER GATE OPTIONS
+// NOVA EDIT END - MORE SCANNER GATE OPTIONS
const ScannerGateMode = (props) => {
const { act, data } = useBackend();
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
index 45b35d2c69b..b2d2e559432 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/CrimeWatcher.tsx
@@ -257,7 +257,6 @@ const CrimeAuthor = (props) => {
fluid
height={4}
maxLength={1025}
- multiline
onChange={(_, value) => setCrimeDetails(value)}
placeholder="Type some details..."
/>
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx
index 9b34f3396ba..aa0aaf85066 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordPrint.tsx
@@ -88,17 +88,17 @@ export const RecordPrint = (props) => {
Missing
swapTabs(PRINTOUT.Rapsheet)}
selected={printType === PRINTOUT.Rapsheet}
- tooltip={`Prints a standard paper with the record on it.`} // SKYRAT EDIT CHANGE START - ORIGINAL:
+ tooltip={`Prints a standard paper with the record on it.`} // NOVA EDIT CHANGE START - ORIGINAL:
// tooltip={`Prints a standard paper with the record on it.${
// innocent ? ' (Requires crimes)' : ''
// }`}
- // SKYRAT EDIT CHANGE END
+ // NOVA EDIT CHANGE END
tooltipPosition="bottom"
>
Rapsheet
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx
index 98911364ef3..70e68963705 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordTabs.tsx
@@ -107,11 +107,10 @@ const CrewTab = (props: { record: SecurityRecord }) => {
return (
selectRecord(record)}
selected={isSelected}
>
-
+
{name}
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx b/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx
index bc6d968d70e..58d0427cd80 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/RecordView.tsx
@@ -67,10 +67,10 @@ const RecordInfo = (props) => {
species,
wanted_status,
voice,
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
past_general_records,
past_security_records,
- // SKYRAT EDIT END
+ // NOVA EDIT END
} = foundRecord;
const hasValidCrimes = !!crimes.find((crime) => !!crime.valid);
@@ -107,7 +107,6 @@ const RecordInfo = (props) => {
{name}
}
- wrap
>
{
text={note}
/>
- {/* SKYRAT EDIT START - RP Records (Not pretty but it's there) */}
+ {/* NOVA EDIT START - RP Records (Not pretty but it's there) */}
-
+
{past_general_records || 'N/A'}
-
+
{past_security_records || 'N/A'}
- {/* SKYRAT EDIT END */}
+ {/* NOVA EDIT END */}
diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
index 9a61b5d44cb..08f21324b50 100644
--- a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
+++ b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts
@@ -24,10 +24,10 @@ export type SecurityRecord = {
species: string;
wanted_status: string;
voice: string;
- // SKYRAT EDIT START - RP Records
+ // NOVA EDIT START - RP Records
past_general_records: string;
past_security_records: string;
- // SKYRAT EDIT END
+ // NOVA EDIT END
};
export type Crime = {
diff --git a/tgui/packages/tgui/interfaces/ServerControlPanel.jsx b/tgui/packages/tgui/interfaces/ServerControlPanel.jsx
index 5e6d9c82f92..b6ee0583150 100644
--- a/tgui/packages/tgui/interfaces/ServerControlPanel.jsx
+++ b/tgui/packages/tgui/interfaces/ServerControlPanel.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Button, LabeledList, NoticeBox, Section } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/Signalvib.jsx b/tgui/packages/tgui/interfaces/Signalvib.jsx
index 192233cc40c..833c37bde23 100644
--- a/tgui/packages/tgui/interfaces/Signalvib.jsx
+++ b/tgui/packages/tgui/interfaces/Signalvib.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { toFixed } from 'common/math';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/Smes.jsx b/tgui/packages/tgui/interfaces/Smes.jsx
index 91d252eb118..f26c04ffa16 100644
--- a/tgui/packages/tgui/interfaces/Smes.jsx
+++ b/tgui/packages/tgui/interfaces/Smes.jsx
@@ -48,20 +48,20 @@ export const Smes = (props) => {
}}
/>
-
-
- act('tryinput')}
- >
- {inputAttempt ? 'Auto' : 'Off'}
-
- }
+ act('tryinput')}
>
+ {inputAttempt ? 'Auto' : 'Off'}
+
+ }
+ >
+
+
{(capacityPercent >= 100 && 'Fully Charged') ||
(inputting && 'Charging') ||
@@ -133,20 +133,20 @@ export const Smes = (props) => {
-
-
- act('tryoutput')}
- >
- {outputAttempt ? 'On' : 'Off'}
-
- }
+ act('tryoutput')}
>
+ {outputAttempt ? 'On' : 'Off'}
+
+ }
+ >
+
+
{outputting
? 'Sending'
diff --git a/tgui/packages/tgui/interfaces/Soulcatcher.jsx b/tgui/packages/tgui/interfaces/Soulcatcher.jsx
index f797d5b2225..adf0de4a1e7 100644
--- a/tgui/packages/tgui/interfaces/Soulcatcher.jsx
+++ b/tgui/packages/tgui/interfaces/Soulcatcher.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
BlockQuote,
diff --git a/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx b/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx
index d0b3e37780a..f5373f8ff0e 100644
--- a/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx
+++ b/tgui/packages/tgui/interfaces/SoulcatcherUser.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import {
BlockQuote,
diff --git a/tgui/packages/tgui/interfaces/SparringContract.tsx b/tgui/packages/tgui/interfaces/SparringContract.tsx
index ccaf2768a72..ebe7bd7eb01 100644
--- a/tgui/packages/tgui/interfaces/SparringContract.tsx
+++ b/tgui/packages/tgui/interfaces/SparringContract.tsx
@@ -145,7 +145,7 @@ export const SparringContract = (props) => {
-
+
{(left_sign === 'none' && (
{
setSpellSearch(val)}
/>
diff --git a/tgui/packages/tgui/interfaces/StackCrafting.tsx b/tgui/packages/tgui/interfaces/StackCrafting.tsx
index ddaa0986c78..255d8f501f1 100644
--- a/tgui/packages/tgui/interfaces/StackCrafting.tsx
+++ b/tgui/packages/tgui/interfaces/StackCrafting.tsx
@@ -57,7 +57,6 @@ type RecipeListFilterableEntry = [string, RecipeList | Recipe | undefined];
* @param value the value to test
* @returns type guard boolean
*/
-// eslint-disable-next-line func-style
function isRecipeList(value: Recipe | RecipeList): value is RecipeList {
return (value as Recipe).ref === undefined;
}
@@ -120,7 +119,7 @@ export const StackCrafting = (_props) => {
setSearchText(value)}
+ onInput={(e, value) => setSearchText(value)}
mx={1}
/>
>
diff --git a/tgui/packages/tgui/interfaces/StoryManager.tsx b/tgui/packages/tgui/interfaces/StoryManager.tsx
index 7486e83dc84..a2e3864dd65 100644
--- a/tgui/packages/tgui/interfaces/StoryManager.tsx
+++ b/tgui/packages/tgui/interfaces/StoryManager.tsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend, useLocalState } from '../backend';
import {
Button,
@@ -50,21 +50,21 @@ export const StoryManager = (props) => {
diff --git a/tgui/packages/tgui/interfaces/StripMenu.tsx b/tgui/packages/tgui/interfaces/StripMenu.tsx
index 968ca8b1cc0..e3f1fcf5365 100644
--- a/tgui/packages/tgui/interfaces/StripMenu.tsx
+++ b/tgui/packages/tgui/interfaces/StripMenu.tsx
@@ -6,7 +6,7 @@ import { useBackend } from '../backend';
import { Box, Button, Icon, Image, Stack } from '../components';
import { Window } from '../layouts';
-const ROWS = 6; // SKYRAT EDIT CHANGE
+const ROWS = 6; // NOVA EDIT CHANGE
const COLUMNS = 6;
const BUTTON_DIMENSIONS = '50px';
@@ -59,12 +59,12 @@ const ALTERNATE_ACTIONS: Record = {
},
enable_internals: {
- icon: 'lungs', // SKYRAT EDIT - TGFONT IS FUCKED AND I DUNNO WHY SO HERE'S A BANDAID - original "tg-air-tank"
+ icon: 'lungs', // NOVA EDIT - TGFONT IS FUCKED AND I DUNNO WHY SO HERE'S A BANDAID - original "tg-air-tank"
text: 'Enable internals',
},
disable_internals: {
- icon: 'lungs-virus', // SKYRAT EDIT - TGFONT IS FUCKED AND I DUNNO WHY SO HERE'S A BANDAID - original "tg-air-tank-slash"
+ icon: 'lungs-virus', // NOVA EDIT - TGFONT IS FUCKED AND I DUNNO WHY SO HERE'S A BANDAID - original "tg-air-tank-slash"
text: 'Disable internals',
},
@@ -208,7 +208,7 @@ const SLOTS: Record<
gridSpot: getGridSpotKey([4, 5]),
image: 'inventory-pocket.png',
},
- // SKYRAT EDIT ADDITION
+ // NOVA EDIT ADDITION
vagina: {
displayName: 'vagina',
gridSpot: getGridSpotKey([5, 1]),
@@ -233,7 +233,7 @@ const SLOTS: Record<
image: 'inventory-pocket.png',
},
};
-// SKYRAT EDIT END
+// NOVA EDIT END
enum ObscuringLevel {
Completely = 1,
Hidden = 2,
@@ -383,7 +383,7 @@ export const StripMenu = (props) => {
position: 'relative',
width: '100%',
height: '100%',
- padding: 0,
+ padding: '0',
}}
>
{slot.image && (
@@ -410,9 +410,9 @@ export const StripMenu = (props) => {
style={{
background: 'rgba(0, 0, 0, 0.6)',
position: 'absolute',
- bottom: 0,
- right: 0,
- zIndex: 2,
+ bottom: '0',
+ right: '0',
+ zIndex: '2',
}}
>
diff --git a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
index 2e9403794bf..74e7dca9101 100644
--- a/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
+++ b/tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
@@ -11,7 +11,7 @@ import { Window } from '../layouts';
type Surgery = {
name: string;
blocked?: BooleanLike;
- blocked_reason?: string; // SKYRAT EDIT ADDITION - Surgically unremovable limb
+ blocked_reason?: string; // NOVA EDIT ADDITION - Surgically unremovable limb
};
type SurgeryInitiatorData = {
@@ -100,7 +100,7 @@ class SurgeryInitiatorInner extends Component<
? surgery.blocked_reason ??
'That surgery is unavailable!'
: undefined
- } // SKYRAT EDIT - ORIGINAL: tooltip={surgery.blocked ? "Their body is covered!" : undefined}
+ } // NOVA EDIT - ORIGINAL: tooltip={surgery.blocked ? "Their body is covered!" : undefined}
key={surgery.name}
fluid
>
diff --git a/tgui/packages/tgui/interfaces/SyndContractor.jsx b/tgui/packages/tgui/interfaces/SyndContractor.jsx
index 472a1834df6..52e0b801f3b 100644
--- a/tgui/packages/tgui/interfaces/SyndContractor.jsx
+++ b/tgui/packages/tgui/interfaces/SyndContractor.jsx
@@ -1,3 +1,4 @@
+// THIS IS A NOVA SECTOR UI FILE
import { useState } from 'react';
import { useBackend } from '../backend';
diff --git a/tgui/packages/tgui/interfaces/SyndicateContractor.tsx b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx
new file mode 100644
index 00000000000..cd6b1f8d8d3
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx
@@ -0,0 +1,313 @@
+import { BooleanLike } from 'common/react';
+
+import { useBackend } from '../backend';
+import {
+ Box,
+ Button,
+ Flex,
+ Grid,
+ Icon,
+ LabeledList,
+ Modal,
+ NoticeBox,
+ Section,
+} from '../components';
+import { FakeTerminal } from '../components/FakeTerminal';
+import { NtosWindow } from '../layouts';
+
+const CONTRACT_STATUS_INACTIVE = 1;
+const CONTRACT_STATUS_ACTIVE = 2;
+const CONTRACT_STATUS_BOUNTY_CONSOLE_ACTIVE = 3;
+const CONTRACT_STATUS_EXTRACTING = 4;
+const CONTRACT_STATUS_COMPLETE = 5;
+const CONTRACT_STATUS_ABORTED = 6;
+
+export const SyndicateContractor = (props) => {
+ return (
+
+
+
+
+
+ );
+};
+
+type Data = {
+ error: string;
+ logged_in: BooleanLike;
+ first_load: BooleanLike;
+ info_screen: BooleanLike;
+ redeemable_tc: Number;
+ earned_tc: Number;
+ contracts_completed: Number;
+ contracts: ContractData[];
+ ongoing_contract: BooleanLike;
+ extraction_enroute: BooleanLike;
+ dropoff_direction: string;
+};
+
+type ContractData = {
+ id: Number;
+ status: Number;
+ target: string;
+ target_rank: string;
+ extraction_enroute: BooleanLike;
+ message: string;
+ contract: string;
+ dropoff: string;
+ payout: Number;
+ payout_bonus: Number;
+};
+
+export const SyndicateContractorContent = (props) => {
+ const { data, act } = useBackend();
+ const { error, logged_in, first_load, info_screen } = data;
+
+ const terminalMessages = [
+ 'Recording biometric data...',
+ 'Analyzing embedded syndicate info...',
+ 'STATUS CONFIRMED',
+ 'Contacting syndicate database...',
+ 'Awaiting response...',
+ 'Awaiting response...',
+ 'Awaiting response...',
+ 'Awaiting response...',
+ 'Awaiting response...',
+ 'Awaiting response...',
+ 'Response received, ack 4851234...',
+ 'CONFIRM ACC ' + Math.round(Math.random() * 20000),
+ 'Setting up private accounts...',
+ 'CONTRACTOR ACCOUNT CREATED',
+ 'Searching for available contracts...',
+ 'Searching for available contracts...',
+ 'Searching for available contracts...',
+ 'Searching for available contracts...',
+ 'CONTRACTS FOUND',
+ 'WELCOME, AGENT',
+ ];
+
+ const infoEntries = [
+ 'SyndTract v2.0',
+ '',
+ "We've identified potentional high-value targets that are",
+ 'currently assigned to your mission area. They are believed',
+ 'to hold valuable information which could be of immediate',
+ 'importance to our organisation.',
+ '',
+ 'Listed below are all of the contracts available to you. You',
+ 'are to bring the specified target to the designated',
+ 'drop-off, and contact us via this uplink. We will send',
+ 'a specialised extraction unit to put the body into.',
+ '',
+ 'We want targets alive - but we will sometimes pay slight',
+ "amounts if they're not, you just won't receive the shown",
+ 'bonus. You can redeem your payment through this uplink in',
+ 'the form of raw telecrystals, which can be put into your',
+ 'regular Syndicate uplink to purchase whatever you may need.',
+ 'We provide you with these crystals the moment you send the',
+ 'target up to us, which can be collected at anytime through',
+ 'this system.',
+ '',
+ 'Targets extracted will be ransomed back to the station once',
+ 'their use to us is fulfilled, with us providing you a small',
+ 'percentage cut. You may want to be mindful of them',
+ 'identifying you when they come back. We provide you with',
+ 'a standard contractor loadout, which will help cover your',
+ 'identity.',
+ ];
+
+ const errorPane = !!error && (
+
+
+
+
+
+
+
+ {error}
+
+ act('PRG_clear_error')} />
+
+
+
+ );
+
+ if (!logged_in) {
+ return (
+
+
+ act('PRG_login')}
+ />
+
+ {!!error && {error} }
+
+ );
+ }
+
+ if (logged_in && first_load) {
+ return (
+
+ act('PRG_set_first_load_finished')}
+ />
+
+ );
+ }
+
+ if (info_screen) {
+ return (
+ <>
+
+
+
+ act('PRG_toggle_info')}
+ />
+ >
+ );
+ }
+
+ return (
+ <>
+ {errorPane}
+
+
+ >
+ );
+};
+
+export const StatusPane = (props) => {
+ const { act, data } = useBackend();
+ const { redeemable_tc, earned_tc, contracts_completed } = data;
+
+ return (
+
+ Contractor Status
+ act('PRG_toggle_info')}
+ />
+ >
+ }
+ >
+
+
+
+ act('PRG_redeem_TC')}
+ />
+ }
+ >
+ {String(redeemable_tc)}
+
+
+ {String(earned_tc)}
+
+
+
+
+
+
+ {String(contracts_completed)}
+
+ ACTIVE
+
+
+
+
+ );
+};
+
+const ContractsTab = (props) => {
+ const { act, data } = useBackend();
+ const { contracts, ongoing_contract, extraction_enroute, dropoff_direction } =
+ data;
+
+ return (
+ <>
+ act('PRG_call_extraction')}
+ />
+ }
+ >
+ {contracts.map((contract) => {
+ if (ongoing_contract && contract.status !== CONTRACT_STATUS_ACTIVE) {
+ return;
+ }
+ const active = contract.status > CONTRACT_STATUS_INACTIVE;
+ if (contract.status >= CONTRACT_STATUS_COMPLETE) {
+ return;
+ }
+ return (
+
+
+ {`${contract.payout} (+${contract.payout_bonus}) TC`}
+
+
+ act('PRG_contract' + (active ? '_abort' : '-accept'), {
+ contract_id: contract.id,
+ })
+ }
+ />
+ >
+ }
+ >
+
+ {contract.message}
+
+
+ Dropoff Location:
+
+ {contract.dropoff}
+
+
+
+ );
+ })}
+
+
+ >
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/Terminal.tsx b/tgui/packages/tgui/interfaces/Terminal.tsx
index 8b470b55b3c..a3ab92cd1e4 100644
--- a/tgui/packages/tgui/interfaces/Terminal.tsx
+++ b/tgui/packages/tgui/interfaces/Terminal.tsx
@@ -1,5 +1,5 @@
import { useBackend } from '../backend';
-import { NoticeBox, Section } from '../components';
+import { Box, NoticeBox } from '../components';
import { Window } from '../layouts';
type Data = {
@@ -18,7 +18,7 @@ export const Terminal = (props) => {
{uppertext}
{messages.map((message) => {
return (
-
diff --git a/tgui/packages/tgui/interfaces/TextInputModal.tsx b/tgui/packages/tgui/interfaces/TextInputModal.tsx
index f9ec036575e..395ea44870d 100644
--- a/tgui/packages/tgui/interfaces/TextInputModal.tsx
+++ b/tgui/packages/tgui/interfaces/TextInputModal.tsx
@@ -1,5 +1,5 @@
import { KEY } from 'common/keys';
-import { useState } from 'react';
+import { KeyboardEvent, useState } from 'react';
import { useBackend } from '../backend';
import { Box, Section, Stack, TextArea } from '../components';
@@ -111,7 +111,7 @@ const InputArea = (props: {
height={multiline || input.length >= 30 ? '100%' : '1.8rem'}
maxLength={max_length}
onEscape={() => act('cancel')}
- onEnter={(event) => {
+ onEnter={(event: KeyboardEvent) => {
if (visualMultiline && event.shiftKey) {
return;
}
@@ -119,6 +119,7 @@ const InputArea = (props: {
act('submit', { entry: input });
}}
onChange={(_, value) => onType(value)}
+ onInput={(_, value) => onType(value)}
placeholder="Type something..."
value={input}
/>
diff --git a/tgui/packages/tgui/interfaces/TimeClock.jsx b/tgui/packages/tgui/interfaces/TimeClock.jsx
index dc8f0e8165b..7aad1996a12 100644
--- a/tgui/packages/tgui/interfaces/TimeClock.jsx
+++ b/tgui/packages/tgui/interfaces/TimeClock.jsx
@@ -1,4 +1,4 @@
-// THIS IS A SKYRAT UI FILE
+// THIS IS A NOVA SECTOR UI FILE
import { useBackend } from '../backend';
import { Box, Button, LabeledList, Section } from '../components';
import { Window } from '../layouts';
diff --git a/tgui/packages/tgui/interfaces/TrainingMachine.tsx b/tgui/packages/tgui/interfaces/TrainingMachine.tsx
index 1bf9a87dcc7..562bcfb7785 100644
--- a/tgui/packages/tgui/interfaces/TrainingMachine.tsx
+++ b/tgui/packages/tgui/interfaces/TrainingMachine.tsx
@@ -64,17 +64,12 @@ const TrainingControls = (props) => {
-
-
- {moving ? 'END' : 'BEGIN'}
-
- }
- onClick={() => act('toggle')}
- />
+
+ act('toggle')}>
+
+ {moving ? 'END' : 'BEGIN'}
+
+
);
diff --git a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
index 3b6b0103528..3089fa72d77 100644
--- a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
+++ b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
@@ -151,7 +151,7 @@ export const TraitorObjectiveDebug = (props) => {
backgroundColor="green"
height="5px"
style={{
- zIndex: 5,
+ zIndex: '5',
}}
/>
{
top={0}
left={1}
style={{
- zIndex: 5,
+ zIndex: '5',
}}
>
{/* Time in minutes of this threshold */}
@@ -255,7 +255,6 @@ export const TraitorObjectiveDebug = (props) => {
{
-
+
Serial
diff --git a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
index e2eb714413c..275fac588d1 100644
--- a/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
+++ b/tgui/packages/tgui/interfaces/Uplink/ObjectiveMenu.tsx
@@ -1,5 +1,5 @@
import { BooleanLike, classes } from 'common/react';
-import { Component } from 'react';
+import { Component, MouseEvent } from 'react';
import {
Box,
@@ -90,8 +90,8 @@ export class ObjectiveMenu extends Component<
objectiveX: event.clientX,
objectiveY: event.clientY,
});
- window.addEventListener('mouseup', this.handleMouseUp);
- window.addEventListener('mousemove', this.handleMouseMove);
+ window.addEventListener('mouseup', this.handleMouseUp as any);
+ window.addEventListener('mousemove', this.handleMouseMove as any);
event.stopPropagation();
event.preventDefault();
@@ -99,26 +99,26 @@ export class ObjectiveMenu extends Component<
}
}
- handleMouseUp(event: MouseEvent) {
+ handleMouseUp(event: MouseEvent) {
if (dragClickTimer > Date.now()) {
return;
}
- window.removeEventListener('mouseup', this.handleMouseUp);
- window.removeEventListener('mousemove', this.handleMouseMove);
+ window.removeEventListener('mouseup', this.handleMouseUp as any);
+ window.removeEventListener('mousemove', this.handleMouseMove as any);
this.setState({
draggingObjective: null,
});
}
- handleMouseMove(event: MouseEvent) {
+ handleMouseMove(event: MouseEvent) {
this.setState({
objectiveX: event.pageX,
objectiveY: event.pageY - 32,
});
}
- handleObjectiveAdded(event: MouseEvent) {
+ handleObjectiveAdded(event: MouseEvent) {
const { draggingObjective } = this.state as ObjectiveMenuState;
if (!draggingObjective) {
return;
diff --git a/tgui/packages/tgui/interfaces/Vendatray.tsx b/tgui/packages/tgui/interfaces/Vendatray.tsx
index ae8a4e07e7e..d754e913a41 100644
--- a/tgui/packages/tgui/interfaces/Vendatray.tsx
+++ b/tgui/packages/tgui/interfaces/Vendatray.tsx
@@ -27,7 +27,7 @@ export const Vendatray = (props) => {
{registered ? (
- Pays to the account of {owner_name}.
+ Pays to the account of {owner_name}.
) : (
<>
diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx
index 942e0680290..384dd933998 100644
--- a/tgui/packages/tgui/interfaces/Vending.tsx
+++ b/tgui/packages/tgui/interfaces/Vending.tsx
@@ -60,11 +60,13 @@ type UserData = {
type StockItem = {
name: string;
+ path: string;
amount: number;
colorable: boolean;
};
type CustomInput = {
+ path: string;
name: string;
price: number;
img: string;
@@ -219,10 +221,10 @@ const ProductDisplay = (props: {
})
.map((product) => (
))}
@@ -350,7 +352,7 @@ const ProductButton = (props) => {
disabled={disabled}
onClick={() =>
act('dispense', {
- item: product.name,
+ item: product.path,
})
}
>
@@ -387,21 +389,17 @@ const CategorySelector = (props: {
return (
-
-
- {Object.entries(categories).map(([name, category]) => (
- onSelect(name)}
- >
- {name}
-
- ))}
-
-
+ {Object.entries(categories).map(([name, category]) => (
+ onSelect(name)}
+ >
+ {name}
+
+ ))}
);
};
diff --git a/tgui/packages/tgui/interfaces/VotePanel.tsx b/tgui/packages/tgui/interfaces/VotePanel.tsx
index a56f656a4a6..a92e45cc860 100644
--- a/tgui/packages/tgui/interfaces/VotePanel.tsx
+++ b/tgui/packages/tgui/interfaces/VotePanel.tsx
@@ -203,7 +203,7 @@ const ChoicesPanel = (props) => {
{user.singleSelection &&
choice.name === user.singleSelection && (
{
{
user.isLowerAdmin
? `${choice.votes} Votes`
- : '' /* SKYRAT EDIT*/
+ : '' /* NOVA EDIT*/
}
@@ -244,17 +244,12 @@ const ChoicesPanel = (props) => {
>
{user.multiSelection &&
user.multiSelection[user.ckey.concat(choice.name)] === 1 ? (
-
+
) : null}
{
user.isLowerAdmin
? `${choice.votes} Votes`
- : '' /* SKYRAT EDIT*/
+ : '' /* NOVA EDIT*/
}
diff --git a/tgui/packages/tgui/interfaces/common/AtmosControls.tsx b/tgui/packages/tgui/interfaces/common/AtmosControls.tsx
index 4d126133526..f3ad9b318c8 100644
--- a/tgui/packages/tgui/interfaces/common/AtmosControls.tsx
+++ b/tgui/packages/tgui/interfaces/common/AtmosControls.tsx
@@ -241,8 +241,7 @@ export const Scrubber = (props: ScrubberProps) => {
act('toggle_filter', {
@@ -250,7 +249,9 @@ export const Scrubber = (props: ScrubberProps) => {
val: filter.gas_id,
})
}
- />
+ >
+ {getGasLabel(filter.gas_id, filter.gas_name)}
+
))) ||
'N/A'}
diff --git a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx
index dc5b045d7f7..5c057755c5c 100644
--- a/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx
+++ b/tgui/packages/tgui/interfaces/common/BeakerDisplay.tsx
@@ -1,7 +1,12 @@
-import { BooleanLike } from 'common/react';
-
+import { BooleanLike } from '../../../common/react';
import { useBackend } from '../../backend';
-import { AnimatedNumber, Box, Button, LabeledList } from '../../components';
+import {
+ AnimatedNumber,
+ Box,
+ Button,
+ LabeledList,
+ Section,
+} from '../../components';
type BeakerReagent = {
name: string;
@@ -34,7 +39,9 @@ export const BeakerDisplay = (props: BeakerProps) => {
label="Beaker"
buttons={
!!beaker && (
- act('eject')} />
+ act('eject')}>
+ Eject
+
)
}
>
@@ -67,3 +74,43 @@ export const BeakerDisplay = (props: BeakerProps) => {
);
};
+
+export const BeakerSectionDisplay = (props: BeakerProps) => {
+ const { act } = useBackend();
+ const { beaker, replace_contents, title_label, showpH } = props;
+ const beakerContents = replace_contents || beaker?.contents || [];
+
+ return (
+
+
+ {beaker.currentVolume} / {beaker.maxVolume} units
+
+ act('eject')}>
+ Eject
+
+ >
+ )
+ }
+ >
+
+ {(!beaker && 'N/A') || (beakerContents.length === 0 && 'Nothing')}
+
+ {beakerContents.map((chemical) => (
+
+ units of{' '}
+ {chemical.name}
+
+ ))}
+ {beakerContents.length > 0 && !!showpH && (
+
+ pH:
+
+
+ )}
+
+ );
+};
diff --git a/tgui/packages/tgui/interfaces/common/CharacterPreview.tsx b/tgui/packages/tgui/interfaces/common/CharacterPreview.tsx
index e6e6e6ed3d5..7588e3bc59b 100644
--- a/tgui/packages/tgui/interfaces/common/CharacterPreview.tsx
+++ b/tgui/packages/tgui/interfaces/common/CharacterPreview.tsx
@@ -1,16 +1,16 @@
import { ByondUi } from '../../components';
export const CharacterPreview = (props: {
- width?: string; // SKYRAT EDIT
+ width?: string; // NOVA EDIT
height: string;
id: string;
}) => {
- // SKYRAT EDIT
+ // NOVA EDIT
const { width = '220px' } = props;
- // SKYRAT EDIT END
+ // NOVA EDIT END
return (
void;
+};
+
+type OptionalProps = Partial<{
+ /** Whether the input should be focused on mount. */
+ autoFocus: boolean;
+ /** Whether to show the search icon. */
+ noIcon: boolean;
+ /** The placeholder text. */
+ placeholder: string;
+ /** Override styles of the search bar. */
+ style: Partial;
+}>;
+
+type Props = RequiredProps & OptionalProps;
+
+/**
+ * Simple component for searching.
+ * This component does not accept box props - just recreate it if needed
+ */
+export function SearchBar(props: Props) {
+ const {
+ autoFocus,
+ noIcon = false,
+ onSearch,
+ placeholder = 'Search...',
+ query = '',
+ style,
+ } = props;
+
+ return (
+
+ {!noIcon && }
+
+ onSearch(value)}
+ placeholder={placeholder}
+ value={query}
+ />
+
+
+ );
+}
diff --git a/tgui/packages/tgui/layouts/NtosWindow.tsx b/tgui/packages/tgui/layouts/NtosWindow.tsx
index 0d3b2d5d187..971e82fd40e 100644
--- a/tgui/packages/tgui/layouts/NtosWindow.tsx
+++ b/tgui/packages/tgui/layouts/NtosWindow.tsx
@@ -63,6 +63,7 @@ export const NtosWindow = (props) => {
PC_stationtime,
PC_programheaders = [],
PC_showexitprogram,
+ PC_lowpower_mode,
} = data;
return (
@@ -84,6 +85,7 @@ export const NtosWindow = (props) => {
{(PC_device_theme === 'syndicate' && 'Syndix') || 'NtOS'}
+ {!!PC_lowpower_mode && ' - RUNNING ON LOW POWER MODE'}
@@ -109,7 +111,7 @@ export const NtosWindow = (props) => {
className="NtosHeader__icon"
src={resolveAsset(PC_batteryicon)}
/>
- {PC_batterypercent && PC_batterypercent}
+ {PC_batterypercent}
)}
{!!PC_showexitprogram && (
diff --git a/tgui/packages/tgui/renderer.ts b/tgui/packages/tgui/renderer.ts
index 692b37322da..0d299b149d3 100644
--- a/tgui/packages/tgui/renderer.ts
+++ b/tgui/packages/tgui/renderer.ts
@@ -23,9 +23,14 @@ type CreateRenderer =
(
getVNode?: (...args: T) => any,
) => (...args: T) => void;
+enum Render {
+ Start = 'render/start',
+ Finish = 'render/finish',
+}
+
// prettier-ignore
export const createRenderer: CreateRenderer = (getVNode) => (...args) => {
- perf.mark('render/start');
+ perf.mark(Render.Start);
// Start rendering
if (!reactRoot) {
reactRoot = document.getElementById('react-root');
@@ -36,7 +41,7 @@ export const createRenderer: CreateRenderer = (getVNode) => (...args) => {
else {
render(args[0] as any, reactRoot);
}
- perf.mark('render/finish');
+ perf.mark(Render.Finish);
if (suspended) {
return;
}
@@ -44,22 +49,22 @@ export const createRenderer: CreateRenderer = (getVNode) => (...args) => {
if (process.env.NODE_ENV !== 'production') {
if (initialRender === 'resumed') {
logger.log('rendered in',
- perf.measure('render/start', 'render/finish'));
+ perf.measure(Render.Start, Render.Finish));
}
else if (initialRender) {
logger.debug('serving from:', location.href);
logger.debug('bundle entered in',
perf.measure('inception', 'init'));
logger.debug('initialized in',
- perf.measure('init', 'render/start'));
+ perf.measure('init', Render.Start));
logger.log('rendered in',
- perf.measure('render/start', 'render/finish'));
+ perf.measure(Render.Start, Render.Finish));
logger.log('fully loaded in',
- perf.measure('inception', 'render/finish'));
+ perf.measure('inception', Render.Finish));
}
else {
logger.debug('rendered in',
- perf.measure('render/start', 'render/finish'));
+ perf.measure(Render.Start, Render.Finish));
}
}
if (initialRender) {
diff --git a/tgui/packages/tgui/routes.tsx b/tgui/packages/tgui/routes.tsx
index b843da88799..b819da32e16 100644
--- a/tgui/packages/tgui/routes.tsx
+++ b/tgui/packages/tgui/routes.tsx
@@ -65,6 +65,7 @@ export const getRoutedComponent = () => {
return require('./debug').KitchenSink;
}
}
+
const name = config?.interface;
const interfacePathBuilders = [
(name: string) => `./${name}.tsx`,
diff --git a/tgui/packages/tgui/styles/components/Button.scss b/tgui/packages/tgui/styles/components/Button.scss
index 8c4cb0a9633..a11c5c1e8c6 100644
--- a/tgui/packages/tgui/styles/components/Button.scss
+++ b/tgui/packages/tgui/styles/components/Button.scss
@@ -75,6 +75,12 @@ $bg-map: colors.$bg-map !default;
}
}
+.Button--dropdown {
+ line-height: base.em(16px);
+ height: base.em(22px);
+ padding: 0.2rem 0.5rem;
+}
+
.Button--hasContent {
// Add a margin to the icon to keep it separate from the text
.fa,
diff --git a/tgui/packages/tgui/styles/components/Dropdown.scss b/tgui/packages/tgui/styles/components/Dropdown.scss
index 78c7f7a5986..7989f6109a2 100644
--- a/tgui/packages/tgui/styles/components/Dropdown.scss
+++ b/tgui/packages/tgui/styles/components/Dropdown.scss
@@ -6,33 +6,29 @@
@use '../base.scss';
.Dropdown {
- position: relative;
- align-items: center;
+ display: flex;
+ align-items: flex-start;
}
.Dropdown__control {
- display: inline-block;
- align-items: center;
+ flex: 1;
font-family: Verdana, sans-serif;
font-size: base.em(12px);
- width: base.em(100px);
- line-height: base.em(17px);
+ overflow: hidden;
user-select: none;
+ width: base.em(100px);
}
.Dropdown__arrow-button {
float: right;
padding-left: 0.35em;
width: 1.2em;
- height: base.em(22px);
- border-left: base.em(1px) solid #000;
border-left: base.em(1px) solid rgba(0, 0, 0, 0.25);
}
.Dropdown__menu {
overflow-y: auto;
align-items: center;
- z-index: 5;
max-height: base.em(200px);
border-radius: 0 0 base.em(2px) base.em(2px);
color: #fff;
diff --git a/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss
index b722a4a0ccb..198fe6bc340 100644
--- a/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss
+++ b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss
@@ -140,7 +140,7 @@ $department_map: (
border-right: 2px solid rgba(0, 0, 0, 0.3);
color: black;
- // SKYRAT EDIT START
+ // NOVA EDIT START
> * {
height: calc(100% + 0.2em);
}
@@ -160,7 +160,7 @@ $department_map: (
margin-right: 0.2em;
margin-top: 0.2em;
}
- // SKYRAT EDIT END
+ // NOVA EDIT END
&:first-child {
border-top: 2px solid rgba(0, 0, 0, 0.3);
@@ -169,27 +169,27 @@ $department_map: (
.options {
background: rgba(0, 0, 0, 0.2);
height: 100%;
- // SKYRAT EDIT START
+ // NOVA EDIT START
text-align: right;
align-items: center;
justify-content: center;
- // SKYRAT EDIT END
+ // NOVA EDIT END
}
}
&--Captain {
border: 3px solid rgba(200, 200, 0, 1);
- border-bottom: 0; // SKYRAT EDIT
+ border-bottom: 0; // NOVA EDIT
&:first-child {
border-top: 3px solid rgba(200, 200, 0, 1);
}
- // SKYRAT EDIT START -- Taking the second last because last is {children}
+ // NOVA EDIT START -- Taking the second last because last is {children}
&:nth-last-child(2) {
border-bottom: 3px solid rgba(200, 200, 0, 1);
}
- // SKYRAT EDIT END
+ // NOVA EDIT END
}
}
diff --git a/tgui/yarn.lock b/tgui/yarn.lock
index 06461a0daaa..c4222752cc1 100644
--- a/tgui/yarn.lock
+++ b/tgui/yarn.lock
@@ -3995,15 +3995,6 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-radar@npm:^0.2.1":
- version: 0.2.1
- resolution: "eslint-plugin-radar@npm:0.2.1"
- peerDependencies:
- eslint: ">= 3.0.0 <= 7.x.x"
- checksum: dece5c02506ab40a4e231c813f1a8ecd7a57c0a4d177cd35dbfcf56222333d5434a8c06901e8b06409d919b7beeea870428a3574315419252a3698b3766d1a91
- languageName: node
- linkType: hard
-
"eslint-plugin-react@npm:^7.33.2":
version: 7.33.2
resolution: "eslint-plugin-react@npm:7.33.2"
@@ -4039,6 +4030,15 @@ __metadata:
languageName: node
linkType: hard
+"eslint-plugin-sonarjs@npm:^0.23.0":
+ version: 0.23.0
+ resolution: "eslint-plugin-sonarjs@npm:0.23.0"
+ peerDependencies:
+ eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: 4f56557740ab438eee8d98e4d93363a8dadcf8d6d795a5d95e6a0b0d6335273a06c5633fe753271c6a56c14a3b0086014b8278984b5594fad5db274ec7fd7edf
+ languageName: node
+ linkType: hard
+
"eslint-plugin-unused-imports@npm:^3.0.0":
version: 3.0.0
resolution: "eslint-plugin-unused-imports@npm:3.0.0"
@@ -9102,9 +9102,9 @@ resolve@^1.20.0:
esbuild-loader: ^4.0.2
eslint: ^8.56.0
eslint-config-prettier: ^9.1.0
- eslint-plugin-radar: ^0.2.1
eslint-plugin-react: ^7.33.2
eslint-plugin-simple-import-sort: ^10.0.0
+ eslint-plugin-sonarjs: ^0.23.0
eslint-plugin-unused-imports: ^3.0.0
file-loader: ^6.2.0
jest: ^29.7.0
diff --git a/tools/WebhookProcessor/github_webhook_processor.php b/tools/WebhookProcessor/github_webhook_processor.php
index 0aea0a6cc69..5e800ef0737 100644
--- a/tools/WebhookProcessor/github_webhook_processor.php
+++ b/tools/WebhookProcessor/github_webhook_processor.php
@@ -44,11 +44,11 @@
// Only these repositories will announce in game.
// Any repository that players actually care about.
$game_announce_whitelist = array(
- /* SKYRAT EDIT - We want it to announce to us - ORIGINAL:
+ /* NOVA EDIT - We want it to announce to us - ORIGINAL:
"tgstation",
"TerraGov-Marine-Corps",
- // ORIGINAL END - SKYRAT EDIT: */
- "Skyrat-tg",
+ // ORIGINAL END - NOVA EDIT: */
+ "GalaxiaStation",
);
// Any repository that matches in this blacklist will not appear on Discord.
diff --git a/tools/build/build.js b/tools/build/build.js
index 6587946a5fd..2eda2ebed01 100644
--- a/tools/build/build.js
+++ b/tools/build/build.js
@@ -192,7 +192,7 @@ export const DmTarget = new Juke.Target({
'html/**',
'icons/**',
'interface/**',
- 'modular_skyrat/**', ///SKYRAT EDIT ADDITION - Making the CBT work
+ 'modular_nova/**', ///NOVA EDIT ADDITION - Making the CBT work
'tff_modular/**',
`${DME_NAME}.dme`,
NamedVersionFile,
@@ -329,7 +329,7 @@ export const TguiTarget = new Juke.Target({
'tgui/.yarn/install-target',
'tgui/webpack.config.js',
'tgui/**/package.json',
- 'tgui/packages/**/*.+(js|cjs|ts|tsx|scss)',
+ 'tgui/packages/**/*.+(js|cjs|ts|tsx|jsx|scss)',
],
outputs: [
'tgui/public/tgui.bundle.css',
diff --git a/tools/tgs_test/Program.cs b/tools/tgs_test/Program.cs
index b8967dbc156..9b018be9516 100644
--- a/tools/tgs_test/Program.cs
+++ b/tools/tgs_test/Program.cs
@@ -11,6 +11,7 @@
using Tgstation.Server.Api.Models;
using Tgstation.Server.Api.Models.Response;
using Tgstation.Server.Client;
+using Tgstation.Server.Common.Extensions;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
@@ -202,10 +203,14 @@
default);
Console.WriteLine("Installing BYOND...");
- var byondInstallJob = await instanceClient.Byond.SetActiveVersion(
- new ByondVersionRequest
+ var byondInstallJob = await instanceClient.Engine.SetActiveVersion(
+ new EngineVersionRequest
{
- Version = targetByondVersion
+ EngineVersion = new EngineVersion
+ {
+ Version = targetByondVersion,
+ Engine = EngineType.Byond,
+ }
},
null,
default);
diff --git a/tools/tgs_test/Tgstation.TgsTest.csproj b/tools/tgs_test/Tgstation.TgsTest.csproj
index 0a641c269ab..967fbd42951 100644
--- a/tools/tgs_test/Tgstation.TgsTest.csproj
+++ b/tools/tgs_test/Tgstation.TgsTest.csproj
@@ -1,16 +1,17 @@
- 1.0.0
+ 2.0.0
Exe
- net7.0
+ net8.0
enable
enable
-
-
+
+
+
diff --git a/tools/ticked_file_enforcement/schemas/modular_nova.json b/tools/ticked_file_enforcement/schemas/modular_nova.json
new file mode 100644
index 00000000000..1eb35974865
--- /dev/null
+++ b/tools/ticked_file_enforcement/schemas/modular_nova.json
@@ -0,0 +1,7 @@
+{
+ "file": "tgstation.dme",
+ "scannable_directory": "modular_nova/",
+ "subdirectories": true,
+ "excluded_files": [],
+ "forbidden_includes": []
+}
diff --git a/tools/ticked_file_enforcement/schemas/modular_skyrat.json b/tools/ticked_file_enforcement/schemas/modular_skyrat.json
deleted file mode 100644
index 10fdbaa08c4..00000000000
--- a/tools/ticked_file_enforcement/schemas/modular_skyrat.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "file": "tgstation.dme",
- "scannable_directory": "modular_skyrat/",
- "subdirectories": true,
- "excluded_files": [],
- "forbidden_includes": []
-}
diff --git a/tools/ticked_file_enforcement/ticked_file_enforcement.py b/tools/ticked_file_enforcement/ticked_file_enforcement.py
index 758dfb491b0..99928309045 100644
--- a/tools/ticked_file_enforcement/ticked_file_enforcement.py
+++ b/tools/ticked_file_enforcement/ticked_file_enforcement.py
@@ -55,12 +55,12 @@ def post_error(string):
break
elif not reading:
continue
- # SKYRAT EDIT START - Modular unit tests
- elif line == "// SKYRAT EDIT START":
+ # NOVA EDIT START - Modular unit tests
+ elif line == "// NOVA EDIT START":
continue
- elif line == "// SKYRAT EDIT END":
+ elif line == "// NOVA EDIT END":
continue
- # SKYRAT EDIT END
+ # NOVA EDIT END
lines.append(line)
@@ -84,10 +84,10 @@ def post_error(string):
dm_path = code_file.replace('/', '\\')
else:
dm_path = os.path.basename(code_file)
- # SKYRAT EDIT START - Modular unit tests - have to append this again after it gets removed; this was not designed upstream with subfolders for unit tests in mind so we must cope.
+ # NOVA EDIT START - Modular unit tests - have to append this again after it gets removed; this was not designed upstream with subfolders for unit tests in mind so we must cope.
if("~skyrat/" in code_file):
dm_path = "~skyrat\\" + dm_path
- # SKYRAT EDIT END
+ # NOVA EDIT END
included = f"#include \"{dm_path}\"" in lines
diff --git a/tools/trait_validity/check.py b/tools/trait_validity/check.py
index 1f83559d4e9..d789e23daca 100644
--- a/tools/trait_validity/check.py
+++ b/tools/trait_validity/check.py
@@ -14,7 +14,7 @@ def red(text):
on_github = os.getenv("GITHUB_ACTIONS") == "true"
defines_file = "code/__DEFINES/traits/declarations.dm"
-skyrat_defines_file = "code/__DEFINES/~skyrat_defines/traits/declarations.dm" # SKYRAT EDIT ADDITION
+skyrat_defines_file = "code/__DEFINES/~skyrat_defines/traits/declarations.dm" # NOVA EDIT ADDITION
globalvars_file = "code/_globalvars/traits/_traits.dm"
how_to_fix_message = f"Please ensure that all traits in the {defines_file} file are added in the {globalvars_file} file."
@@ -31,11 +31,11 @@ def post_error(define_name):
print(red(f"Could not find the defines file '{defines_file}'!"))
sys.exit(1)
-# SKYRAT EDIT ADDITION START
+# NOVA EDIT ADDITION START
if not os.path.isfile(skyrat_defines_file):
print(red(f"Could not find the skyrat defines file '{skyrat_defines_file}'!"))
sys.exit(1)
-# SKYRAT EDIT ADDITION END
+# NOVA EDIT ADDITION END
if not os.path.isfile(globalvars_file):
print(red(f"Could not find the globalvars file '{globalvars_file}'!"))
@@ -69,7 +69,7 @@ def post_error(define_name):
number_of_defines += 1
defines_to_search_for.append(match.group(2))
-# SKYRAT EDIT ADDITION START
+# NOVA EDIT ADDITION START
scannable_lines = []
with open(skyrat_defines_file, 'r') as file:
reading = False
@@ -94,7 +94,7 @@ def post_error(define_name):
number_of_defines += 1
defines_to_search_for.append(match.group(2))
-# SKYRAT EDIT ADDITION END
+# NOVA EDIT ADDITION END
if number_of_defines == 0:
print(red("No defines found! This is likely an error."))